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

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

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

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


person Raza Gill    schedule 09.06.2011    source источник
comment
Вам нужно точное изменение высоты?   -  person Ali    schedule 09.06.2011
comment
Нет, мне просто нужно знать, что произошло изменение высоты более чем на 2 или 3 фута.   -  person Raza Gill    schedule 09.06.2011


Ответы (3)


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

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

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

person Ali    schedule 09.06.2011
comment
Спасибо @Али. Видео действительно помогло мне понять акселерометры и их расчет. Однако, как вы сказали, это непрактично, поэтому я отказываюсь от идеи этого приложения, поскольку не вижу, чтобы оно использовалось в нем. По сути, основная идея приложения зависела от измерения расстояния (хотя просто зная, составляет ли оно › 3 фута) устройства от точки покоя до точки захвата пользователя, что теперь, как я вижу, невозможно сделать с помощью акселерометра. - person Raza Gill; 10.06.2011
comment
Рад слышать, что это помогло. Насколько я знаю есть библиотека жестов, тоже упомянутая в видео, возможно она уже поддерживает то, что вам нужно. Я не программирую Android-устройства, поэтому больше о ней не знаю. Удачи! - person Ali; 10.06.2011
comment
Привет спасибо. Я загляну в библиотеку жестов. Во-вторых, я просто тестирую кое-что с TYPE_LINEAR_ACCELERATION, возможно, я заставлю его работать так, как хочу. Выложу обновление, если повезет. - person Raza Gill; 10.06.2011

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

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

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

person RoninSeito    schedule 21.01.2014

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

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

person moueza    schedule 06.12.2013
comment
Ты сказал Что?? Вы можете это объяснить? - person JP Illanes; 19.11.2015