Как рассчитать движение телефона в вертикальном направлении от отдыха?
Я занимаюсь разработкой приложения с использованием ОС Android, для которого мне нужно знать, как рассчитать движение устройства вверх по вертикали.
Например, устройство находится в состоянии покоя (точка A), пользователь поднимает его в своей руке (точка B), теперь происходит изменение высоты между точкой A и точкой B, как бы я рассчитал это?
Я уже просмотрел статьи о датчиках и акселерометрах, но я не мог найти ничего, что могло бы помочь мне в этом. У кого-нибудь есть идеи?
3 ответа
Если вы интегрируете ускорение дважды, вы получаете позицию, но ошибка ужасна. Это бесполезно на практике. Вот объяснение, почему (Google Tech Talk) в 23:20. Я очень рекомендую это видео.
Теперь вам не нужно ничего точного, и это другая история. Линейное ускорение доступно после слияния датчиков, как описано в видео. Смотрите датчик.TYPE_LINEAR_ACCELERATION
на SensorEvent. Сначала я бы попробовал фильтр верхних частот, чтобы обнаружить внезапное увеличение линейного ускорения вдоль вертикальной оси.
Я понятия не имею, хорошо ли это для вашего приложения.
Вы можете фактически установить (только) вертикальное положение без измерения ускорения с течением времени. Это достигается путем измерения угла между направлением на центр Земли и направлением на северный магнитный полюс.
Это изменяется только (значительно), когда высота (высота) телефона изменяется. Что вы делаете, это использовать accelerometer
а также magnetometer
чтобы получить два массива с плавающей точкой [3], обработайте их как векторы, сделайте их единичными векторами, а затем угол между любыми двумя единичными векторами будет arccos(AxM).
Обратите внимание, что это точечный продукт, т.е. math.acos(A[0]*B[0]+A[1]*B[1]+A[2]*B[2])
Любое изменение этого угла соответствует изменению высоты. Также обратите внимание, что это должно быть откалибровано для реальных единиц измерения, и отношение изменения угла к высоте будет различным на разных долготах; Но это метод получения абсолютного значения высоты; хотя, конечно, угол также искажается при ускорении или при наличии поблизости магнитов:)
Вы можете соотнести его с датчиком магнитного поля в MicroTesla
Вы можете использовать dist= интеграл от интеграла ускорения ~ сигма ~ суммирование = интеграл от скорости + константа