Использование акселерометра, гироскопа и компаса для расчета движения устройства в трехмерном мире
Я работаю над приложением для 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 Распространение ошибок. (Кстати, вам также понадобятся гироскопы.)
Аналогичный вопрос - расстояние, пройденное акселерометром.