как рассчитать движение телефона в вертикальном направлении от rest?

#android #accelerometer #compass-geolocation #sensors

#Android #акселерометр #компас-геолокация #датчики

Вопрос:

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

Например, устройство находится в состоянии покоя (точка A), пользователь поднимает его в руке (точка B), теперь происходит изменение высоты между точками A и B, как бы я это рассчитал?

Я уже просмотрел статьи о датчиках и акселерометрах, но я не смог найти ничего, что помогло бы мне с этим. У кого-нибудь есть идеи?

Комментарии:

1. Вам нужно точное изменение высоты?

2. Нет, мне просто нужно знать, что произошло изменение высоты более чем на 2 или 3 фута.

Ответ №1:

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

Теперь вам не нужно ничего точного, и это совсем другая история. Линейное ускорение доступно после слияния датчиков, как описано в видео. Смотрите Sensor.TYPE_LINEAR_ACCELERATION на SensorEvent. Я бы сначала попробовал фильтр верхних частот, чтобы обнаружить внезапное увеличение линейного ускорения вдоль вертикальной оси.

Я понятия не имею, подходит ли это для вашего приложения.

Комментарии:

1. Спасибо @Ali. Видео действительно помогло мне разобраться в акселерометрах и их расчете. Однако, как вы сказали, это нецелесообразно, поэтому я отказываюсь от идеи этого приложения, поскольку я не вижу, чтобы оно использовалось в нем. По сути, основная идея приложения зависела от измерения расстояния (хотя просто зная, составляет ли оно > 3 футов) устройства от rest до точки приема пользователя, что, как я теперь вижу, невозможно сделать с помощью акселерометра.

2. Рад слышать, что это помогло. Насколько я знаю, существует библиотека жестов, также упомянутая в видео, возможно, она уже поддерживает то, что вам нужно. Я не программирую устройства Android, поэтому я не знаю больше об этом. Удачи!

3. Привет, спасибо. Я загляну в библиотеку жестов. Во-вторых, я просто тестирую некоторые вещи с помощью TYPE_LINEAR_ACCELERATION, я мог бы заставить его работать так, как я хочу. Опубликую обновление, если мне повезет.

Ответ №2:

На самом деле вы можете установить (только) вертикальное положение без измерения ускорения с течением времени. Это достигается путем измерения угла между направлением к центру Земли и направлением на северный магнитный полюс.

Это изменяется (значительно) только при изменении высоты телефона. Что вы делаете, так это используете accelerometer и magnetometer , чтобы получить два массива с плавающей точкой [3], обрабатываете их как векторы, превращаете их в единичные векторы, а затем угол между любыми двумя единичными векторами равен arccos (AxM).

Обратите внимание, что это точечное произведение, то есть. math.acos(A[0]*B[0] A[1]*B[1] A[2]*B[2]) Любое изменение этого угла соответствует изменению высоты. Также обратите внимание, что это должно быть откалибровано в реальных единицах, и отношение изменения угла к высоте будет разным на разных долготах; Но это метод получения абсолютного значения высоты; хотя, конечно, угол также становится искаженным при ускорении или при наличии близлежащих магнитов 🙂

Ответ №3:

  1. вы можете соотнести это с датчиком магнитного поля в microTesla

  2. Вы можете использовать dist = интеграл от интеграла ускорения ~ сигма ~ суммирование = интеграл от скорости константа

Комментарии:

1. Что ты говоришь?? Можете ли вы это объяснить?