Получить направление движения устройства с помощью акселерометра

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

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

Любые предложения, как я могу отфильтровать эти углы?

EDIT: мне удалось решить эту проблему, взяв среднее значение текущих и прошлых значений. Еще одна проблема, которая сохраняется, заключается в том, что сначала в течение нескольких секунд акселерометр сообщает значения в направлении, противоположном движению.


person timemanx    schedule 07.09.2013    source источник
comment
Когда вы перестаете двигать устройство, оно перестает иметь направление движения, так какие углы вы хотите, чтобы оно сообщало?   -  person Beta    schedule 08.09.2013
comment
@Бета Нет. В этом суть. Я не хочу, чтобы он сообщал о каких-либо углах. Но я смог решить эту проблему, взяв среднее значение текущего и нескольких прошлых значений. Новая проблема заключается в том, что когда я начинаю двигаться, я сначала получаю значения ускорения в противоположном направлении.   -  person timemanx    schedule 08.09.2013


Ответы (1)


Типичная беда с акселерометрами... Изначально решения нет из-за инерции и т.п... Но можно попробовать использовать какой-нибудь "целочисленный контроллер".

Другим возможным решением является обнаружение резких изменений ускорения и интерпретация их как изменение направления, я имею в виду, например, если у вас есть ускорение на ребре X (Ax).

while(1){
Ax = readAx();
if(changeSign(Ax)){  //From + to - or - to +.
      //Do what ever you need, for example if sign is changed and keep on it then is that the mobilephone is been moved in the other direction. Else if it's acceleration is close to 0 it means that the device has stopped
}else{
     //The device keep moving on the same direction.
}
}

Не стесняйтесь быть творческим. Есть много способов управлять решением в зависимости от вашей цели.

Я надеюсь, что это помогает.

person Bardo91    schedule 07.09.2013