Bien, después de muchas horas de desesperación creo estar cerca de poder usar el wiimote para conocer la distancia recorrida por el robot, o en otras palabras, tener un sistema de odometría fiable.
Primero unos repasos de la física del instituto. Si disponemos de un objeto que se desplaza a lo largo del espacio (s) y medimos el tiempo (t)que invierte en este desplazamiento, podemos obtener su velocidad (v), con algo tan simple como derivar el espacio respecto del tiempo
v = s / t
Donde s corresponde al incremento del espacio (s1 - s0) y t al incremento del tiempo (t1 - t0). Bien, si derivamos de nuevo la velocidad respecto al tiempo, podremos obtener la aceleración del objeto. Siendo esta aceleración un movimiento conocido por todos como "movimiento uniformemente acelerado".
Para recorrer el camino al contrario, simplemente tenemos que calcular las integrales de estos valores respecto del tiempo, es decir, conociendo la aceleración (a):
v = v0 + a(t - t0)
y el espacio:
s = s0 + v0(t - t0) + 1/2 (a (t - t0))
Ahora el experimento, en un movimiento acotado de 30 cm desplazamos el mando por la horizontal desde una v0 = 0 hasta una velocidad final también 0, los resultados obtenidos son los siguientes:
Así que utilizamos de nuevo el filtro de kalman, pero esta vez aplicado primero a la aceleración y luego a la velocidad. Los resultados son los siguientes:
Y la última prueba, filtrando el espacio con los datos a su vez filtrados de velocidad y aceleración. Las gráficas correspondientes a estas dos últimas no varían
Conclusiones: El filtro de kalman resulta tremendamente útil para obtener una información mas cercana a la realidad que la obtenida por medio de las mediciones, ya que nos permite eliminar el ruido. Sin embargo, sólo en una de las pruebas el resultado espacial ha estado cercano a los 30cm del experimento (con un error de 1cm). Así que algo he dejado en el aire, tal vez sean los ajustes del filtro.
¿alguna sugerencia?
Primero unos repasos de la física del instituto. Si disponemos de un objeto que se desplaza a lo largo del espacio (s) y medimos el tiempo (t)que invierte en este desplazamiento, podemos obtener su velocidad (v), con algo tan simple como derivar el espacio respecto del tiempo
v = s / t
Donde s corresponde al incremento del espacio (s1 - s0) y t al incremento del tiempo (t1 - t0). Bien, si derivamos de nuevo la velocidad respecto al tiempo, podremos obtener la aceleración del objeto. Siendo esta aceleración un movimiento conocido por todos como "movimiento uniformemente acelerado".
Para recorrer el camino al contrario, simplemente tenemos que calcular las integrales de estos valores respecto del tiempo, es decir, conociendo la aceleración (a):
v = v0 + a(t - t0)
y el espacio:
s = s0 + v0(t - t0) + 1/2 (a (t - t0))
Ahora el experimento, en un movimiento acotado de 30 cm desplazamos el mando por la horizontal desde una v0 = 0 hasta una velocidad final también 0, los resultados obtenidos son los siguientes:
- La velocidad desciende por debajo de cero (como si el objeto invirtiese la dirección del movimiento)
Bien, con esto no voy a ninguna parte, así que aplicando el filtro de kalman a la aceleración, los resultados obtenidos son los siguientes:
Así que utilizamos de nuevo el filtro de kalman, pero esta vez aplicado primero a la aceleración y luego a la velocidad. Los resultados son los siguientes:
- La velocidad, esta vez si desciende de forma normalizada, sin llegar a 0, pero sin tomar valores negativos
Y la última prueba, filtrando el espacio con los datos a su vez filtrados de velocidad y aceleración. Las gráficas correspondientes a estas dos últimas no varían
Conclusiones: El filtro de kalman resulta tremendamente útil para obtener una información mas cercana a la realidad que la obtenida por medio de las mediciones, ya que nos permite eliminar el ruido. Sin embargo, sólo en una de las pruebas el resultado espacial ha estado cercano a los 30cm del experimento (con un error de 1cm). Así que algo he dejado en el aire, tal vez sean los ajustes del filtro.
¿alguna sugerencia?
3 comentarios:
Hola,
Hay demasiado ruido en las accelerationes (muy interessante este post con los graphicos). Ok, se requiere otros sensores (GPS, gyroscope...) para un bueno resultado con el filtro de kalman.
Pero, yo soy de acuerdo, es muy interessante tratar de usar el filtro con la wiimote, solamente.
Tiene usted uno ejemplo de filtro de Kalman con la wiimote ?
Hola Wiilliam,
El principal problema que he tenido con el filtro de kalman ha sido la poca fiabilidad del acelerómetro del mando de Wii. De hecho, Nintendo ha prometido sacar un accesorio para el mando que aportará mas sensibilidad al mando. Al parecer los desarrolladores de videojuegos también tienen problemas para obtener lecturas fiables.
En este artículo tienes una descripción matemática del filtro y código de ejemplo en C++. Para aplicarlo al mando de Wii necesitas conectar el mando al Pc por medio de bluetooh. Para ello existen varias soluciones, en mi caso utilizo Cwiid
Espero que te resulte de ayuda.
Un saludo
Gracias,
Quizas es possible de utilizar el sensore infrarojo en el filtro con un cambio de los estados del observador pero no sera demasiado robusto, tambien. (...si el wiimote no se fue en frente del "sensor bar") .
Por fin, yo tambien, espero el accesorio "wii-motion plus" para obtener mejores resultados con el filtro de kalman.
Un saludo
Publicar un comentario