2012-02-10 10 views
6

Estoy tratando de desarrollar la aplicación de detección de movimiento para Android. La aplicación debería poder seguir el movimiento del teléfono en el espacio y asignarlo a movimiento en la pantalla de la computadora. Estoy usando un acelerómetro de 3 ejes y dado que los datos son muy ruidosos, estoy usando el filtro Kalman.Filtro de Kalman y calidad de las variables de estado internas

El estado interno es de 6 vectores de componentes [velocidad-x, velocidad-y, velocidad-z, accel-x, accel-y, accel-z] y el estado medido es de 3 componentes vectoriales [accel-x, accel-y , accel-z].

El filtro funciona muy bien en los valores medidos, pero la velocidad sigue siendo muy ruidosa.

Plotted values

Ahora me pregunto si este es un comportamiento normal o estoy haciendo algo mal, ya que mi comprensión de filtro de Kalman es muy básico. Estoy utilizando biblioteca JKalman y siguiente matriz de transición de estados (dt es 1/15 que es aproximado frecuencia de actualización del sensor)

doble [] [] A = { {1, 0, 0, dt, 0, 0}, {0, 1, 0, 0, dt, 0}, {0, 0, 1, 0, 0, dt}, {0, 0, 0, 1, 0, 0}, { 0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 1} };

También he configurado mis propias matrices de covarianza con covarianzas calculadas a partir de datos de prueba. Esto mejoró un poco la señal de aceleración, pero no tuvo efecto en la velocidad.

Actualmente estoy capaz de lograr stdvar

[0,0632041857 0,0607274545 0,0886326602] para la velocidad [x, y, z]

[0,0041689678 0,004423822 0, 0074808552] para la aceleración [x, y, z].

Estoy bastante contento con la señal de aceleración y creo que no puedo mejorarla mucho más, pero me gustaría mejorar la calidad de la señal de velocidad.

Respuesta

3

Won't work.

No importa lo que hagas, la velocidad se convertirá en extremadamente inexacta en cuestión de segundos. Aunque la respuesta en el enlace de arriba es acerca de la posición, lo mismo vale para la velocidad. En cuanto al filtro de Kalman, consulte también here.

Debe probar el GPS para obtener la velocidad o (si corresponde) simplemente use la orientación del teléfono en su aplicación y renuncie a obtener la velocidad.

+0

Bueno, en realidad está funcionando bastante bien, el único problema son los movimientos realmente lentos y muy rápidos (como se esperaba). Solo necesito un movimiento relativo (entonces sé que fue hacia la izquierda, derecha, arriba, abajo) y posiblemente su magnitud. Para el problema de velocidad, estoy utilizando el vertido de velocidad (si se aplica una aceleración cero, la velocidad se multiplica por el factor <1.0 en cada paso de tiempo, por lo que se reduce a cero rápidamente). De todos modos, gracias por el material, voy a echar un vistazo lo antes posible, parece interesante. – Andraz

+0

@Andraz Interesante. Entonces no necesitas velocidad precisa. Entonces, lo que describes puede funcionar. Bueno, ¡buena suerte de todos modos! – Ali

2

No sé mucho sobre los filtros de Kalman excepto lo que acabo de leer en Wikipedia, pero diría que está tratando de aplicar los filtros de Kalman de una manera inapropiada.

Los stdvars deben representar solo el ruido, pero dudo que sea lo que haya calculado. Pero más fundamentalmente, creo que le faltan algunos datos de entrada: los filtros de Kalman se usan cuando tiene muchas entradas diferentes, por ejemplo, acelerómetro + GPS.

Parece imposible, con Kalman o cualquier otra cosa, que pueda leer en la ruidosa entrada del acelerómetro y de alguna manera obtener una trayectoria suave y precisa. Siempre se puede hacer algún tipo de promediación del tiempo de los datos del acelerómetro, lo que le daría una trayectoria suave, pero la trayectoria sería diferente de la real. (Si quieres probar el promedio del tiempo: por ejemplo, a_smooth {i} = 0.6 a {i} + 0.3 a {i-1} + 0.1 a {i-2}.)

Y está el más grande problema de que la precisión del acelerómetro es muy baja y probablemente no puedas hacer mucho con ella, especialmente si mantienes un registro de la posición, como lo responde @Ali.

EDITAR: He encontrado algunas referencias en la web que tiene ecuaciones similares a la suya, sin embargo esos eran para un filtro de Kalman usado en un modelo con constante aceleración, lo cual obviamente no es lo que desea.

Cuestiones relacionadas