Использование акселерометра, гироскопа и компаса для расчета движения устройства в 3D-мире

Я работаю над андроидным приложением, которое может рассчитать движение устройства в 6 направлениях. Я думаю, что могу использовать ускорение как:

" x = a.t ^ 2", но a не является константой. И в этом проблема. Как я могу рассчитать общее движение?

Ответ 1

Акселерометр дает вам три направления (x, y, z). Это измерения ускорения, которые сложнее узнать, что такое положение устройства. Но помните, что ускорение связано с позицией через интеграцию:

a(t) = a[x]
v(t) = a[x]t + c
x(t) = a[x]t ^ 2 + ct + d

Проблема в том, что вы не можете знать c или d, потому что, когда вы берете производную, константы выпадают. Таким образом, есть некоторая сумма, которую вы не можете получить с помощью c и d. Вы можете попытаться компенсировать это, вспомнив значения, которые вы использовали для них. Таким образом, после захвата 3 образцов вы можете начать вычислять позицию из этого.

Существует значительная информация о том, как интерпретировать данные с датчиков. Как выяснение, где гравитация для ориентации, и вычитание силы тяжести для получения линейного ускорения.

http://developer.android.com/reference/android/hardware/SensorEvent.html

Здесь вы можете найти положение с помощью акселерометра вместе с алгоритмом поиска позиции в деталях:

http://www.freescale.com/files/sensors/doc/app_note/AN3397.pdf

Ответ 2

Это правда, вы получаете позицию, дважды интегрируя линейное ускорение. Но ошибка ужасна. На практике это бесполезно.

Вот объяснение почему (Google Tech Talk) в 23:20. Я настоятельно рекомендую это видео.

Это не шум акселерометра, вызывающий проблему, но gyro white noise, см. подраздел 6.2.3 "Распространение ошибок". (Кстати, вам понадобятся гироскопы тоже.)

Аналогичный вопрос: Расстояние, перемещаемое акселерометром.