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

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

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

2 ответа

Решение

Акселерометр дает вам три направления (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

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

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

Проблема связана не с шумом акселерометра, а с гироскопическим белым шумом, см. Подраздел 6.2.3 Распространение ошибок. (Кстати, вам также понадобятся гироскопы.)

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

Другие вопросы по тегам