Использование акселерометра, гироскопа и компаса для расчета движения устройства в трехмерном мире - PullRequest
13 голосов
/ 25 ноября 2011

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

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

Ответы [ 2 ]

20 голосов
/ 25 ноября 2011

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

5 голосов
/ 25 ноября 2011

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

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

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

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

...