Основное исчисление, стоящее за этой проблемой, находится в выражении
(и аналогичные выражения для смещений по y и z), а базовая геометрия - теорема Пифагора
Итак, после того, как ваши сигналы акселерометра пропущены через фильтр нижних частот и скомпонованы во времени с интервалом выборки dt, вы можете найти смещение в x как ( простите мой C... )
float dx=0.0f;
float vx=0.0f;
for (int i=1; i<n; i++)
{
vx+=(acceleration_x[i-1] + acceleration_x[i])/2.0f*dt;
dx+=vx*dt;
}
и аналогично для dy и dz.Здесь
float acceleration_x[n];
содержит значения x-ускорения от начала до конца измерения в моменты времени 0, dt, 2 * dt, 3 * dt, ... (n-1) * dt.
Чтобы найти полное смещение, вам просто нужно сделать
dl=sqrt(dx*dx + dy*dy + dz*dz);
Гироскоп для этого не нужен, но если вы измеряете линейные расстояния, вы можете использовать показания гироскопа, чтобы контролировать, что вращение устройства не былослишком большой.Если вращение было слишком сильным, попросите пользователя повторить измерение.