Как я могу узнать, насколько быстро движется мое Android-устройство с помощью акселерометра?

Я новичок в программировании с акселерометрами на Android.

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

Может ли кто-нибудь помочь с этим?


person uttara_shekar    schedule 17.06.2012    source источник
comment
К сожалению, знание вашего мгновенного ускорения бесполезно для определения вашей скорости в данной системе отсчета. Например, пассажир в автомобиле, движущемся с постоянной скоростью, будет испытывать нулевое ускорение независимо от того, составляет ли его скорость 10 миль в час или 100 миль в час.   -  person AakashM    schedule 18.06.2012


Ответы (1)


Акселерометр измеряет только скорость изменения скорости. (Это определение ускорения.) Таким образом, единственный способ использовать его для определения скорости - это узнать фактическую скорость V_0 в некоторый момент времени t_0, а затем записать dV_i = A_i*(t_i - t_(i-1)) для последовательных моментов времени t_1. ,t_2,... где A_i — ускорение в момент t_i. Тогда скорость в t_n равна V_0 + sum_(i=1,n)(dV_i).

Это называется интеграцией, и это то, что сделало знаменитым Исаака Ньютона (среди прочих).

Этот расчет очень уязвим для ошибок. Я бы сказал, что даже не стоит пытаться ради удовольствия.

Более полезным способом измерения скорости является изменение положения (от датчика местоположения), деленное на время.

person Gene    schedule 17.06.2012
comment
Этот расчет подвержен ошибкам человека, но компьютер может вычислять суммы Римана с более высоким разрешением и лучшим приближением. А когда ничего не помогает, используйте скользящее среднее. - person gobernador; 17.06.2012
comment
@gobernador, проблема в неточности датчиков. Даже небольшое постоянное отклонение 0,1G (1% земного притяжения) в одном направлении даст ошибку 100км/ч в течение 5 минут, даже если устройство неподвижно. - person Albin Sunnanbo; 17.06.2012
comment
+1 и второе, даже пытаться не стоит. Несмотря на то, что в точности акселерометра Android (инерциальная навигация) я говорю о расстоянии, то же самое относится и к скорости. - person Ali; 17.06.2012
comment
@Albin Альбин Ты прав, и это заставляет меня задуматься, зачем вообще включать датчики? - person gobernador; 17.06.2012
comment
@gobernador, датчики акселератора предназначены для предоставления информации о вращении, в основном для того, чтобы узнать, что вверх, а что вниз. Полезно для отключения сигнала звонка при переворачивании телефона вверх дном, для обнаружения тряски и поворотов в играх. Все те ситуации, когда вы используете абсолютное значение acc, а не интегрируете, работают отлично. - person Albin Sunnanbo; 17.06.2012
comment
А-сенсоры также хороши для жестов, как в контроллере Wii. - person Gene; 18.06.2012
comment
Всем спасибо за ответы. Я вычислил скорость и снял адекватные показания, но, похоже, мне не хватает точности. У кого-нибудь есть альтернативное решение? Или я должен отказаться от этого? - person uttara_shekar; 18.06.2012