акселерометр, измеряющий отрицательные пики скорости - PullRequest
1 голос
/ 11 июля 2011

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

Я заметил очень странное поведение: часто, когда ядержась за сотовый телефон несколько метров, а затем я останавливаюсь, я регистрирую отрицательный пик общая скорость , когда трубка замедляется.Как это возможно, если я продолжаю двигаться в одном и том же направлении?

Чтобы вычислить изменение скорости, я просто делаю это:

delta_v = (acc_previous + acc_now)/2 * (1/(updating_frequency))

Ответы [ 4 ]

2 голосов
/ 11 июля 2011

Численное интегрирование сложно.Наивное численное интегрирование зашумленного сигнала по существу всегда приводит к значительным ошибкам и отклонениям (как, например, то, что вы видите).Люди придумали всевозможные умные способы решения этой проблемы, большинство из которых требуют наличия некоторого источника справочной информации, кроме акселерометра (например, контроллер Wii, в котором есть не только акселерометр, но и верхняя часть)телевизора).

Обратите внимание, что любой MEMS-акселерометр обязательно ограничен сообщением только об определенной полосе ускорений;если ускорение выходит за пределы этой полосы, то вы получите существенный дрейф, если у вас не будет способа его компенсировать.Кроме того, есть факт, что ускорение сообщается как дискретная величина, поэтому обязательно есть некоторая ошибка аппроксимации, а также шум, даже если вы не выходите за пределы окна.Когда вы складываете все эти факторы вместе, некоторое отклонение неизбежно.

2 голосов
/ 11 июля 2011

Скажем, вы движетесь с постоянной скоростью 10 м / с. Ваше ускорение равно нулю. Допустим, ради простоты, вы производите выборку каждую 1 секунду.

Если вы плавно замедляетесь в течение 0,1 секунды, вы можете получить показание 100 м / с / с или вообще не получить показания, так как замедление может упасть между двумя окнами. Ваша формула, скорее всего, не обнаружит никакого замедления или, если это произойдет, вы получите два значения -50 м / с / с: (0 - 100) / 2 и затем (-100 + 0) / 2. В любом случае вы Вы получите неправильную конечную скорость.

Нечто подобное может произойти практически в любом масштабе. Все, что вам нужно, это короткий период сильного ускорения или замедления, который вам случится сэмплировать, и ваши цифры облажаются.

1 голос
/ 11 июля 2011

Что ж, если вы перемещаете какой-либо объект в одном направлении, задействуется сила, которая ускоряет объект.

Чтобы объект снова остановился, необходима та же сила в противоположном направлении - или, если быть более точным, вектор события ускорения, которое произошло до этого, необходимо умножить на -1,Это ваш отрицательный пик.

Не совсем программный ответ, но опять же, ваш вопрос не является строго программным вопросом:)

0 голосов
/ 11 июля 2011

Если он идет тысячу миль в час, его ускорение равно 0. Если оно ускоряется, ускорение положительное.Если он замедляется, ускорение отрицательное.

Вы можете использовать абсолютное число скорости, чтобы инвертировать любое отрицательное ускорение, если это необходимо:

fabs(delta_v); // use abs for ints
...