jueves, 15 de abril de 2010

Práctica 5: Auto-localización basada en filtro de partículas

Como el nombre indica esta práctica contiene ejercicios para comprobar la localización del robot en un entorno dado.

VISUALIZACIÓN DEL MAPA Y LAS PARTÍCULAS

Para comenzar a trabajar con el robot, lo primero es crear el mapa en el que se van a desarrollar las distintas pruebas. Dicho mapa se encuentra en un fichero .bin que le pasamos al filtro de partículas. Para poder mostrar los resultado por el LCD del robot se pinta el mapa con las medidas dadas en el enunciado.




DISEÑO DEL RADAR

En este apartado hay que crear un radar que funcione con los parámetros propuestos en el enunciado. Para ello hay que usar el sensor de ultrasonido montado sobre un motor, mediante el que realizar barridos.

Es importante destacar la utilización de RangeReadings, una clase en la que se guardan las mediciones y los ángulos obtenidos.

Para comprobar que nuestro radar funcionaba de forma correcta creamos una serie de casos prueba, en los que fuera muy sencillo comprobar el resultado. Por ello mostramos las mediciones del radar por pantalla en forma de histrograma.

Cuando vimos que los resultado era correctos pasamos a trabajar con el siguiente apartado.




RECONOCIMIENTO DE POSICIÓN Y ORIENTACIÓN

Para realizar el reconocimiento de posición modificamos el radar para que genere un histograma con las distancias obtenidas independientemente de la orientación.

Para ello el robot pasa por una etapa de aprendizaje en la que se toman medidas sobre 5 localizaciones distintas dentro del mapa y se guardan en un fichero.
Como nuestro sensor de ultrasonido es muy impreciso al principio no obtuvimos buenos resultados por lo que acabamos optando por mejorar el código un poco, haciendo que el sensor tomase 5 mediciones de cada punto que guardabamos en un array. Una vez obtenidas estas medidas realizamos la mediana para quedarnos con el valor más "preciso".
En un primer momento pensamos en realizar la media, pero finalmente decidimos cambiar de opinión ya que la mediana es menos sensible ante los valores extremos.

En cuanto a la orientación, una vez reconocido el punto en que te encuentras utilizamos la información obtenida con el radar anterior mediante rotaciones del RangeReading actual hasta hacerlo coincidir con el de referencia (punto en el que se encuentra).
Teniendo en cuenta que el mapa era bastante simétrico, y que como ya hemos comentado nuestro sensor es bastante impreciso estamos contentos con nuestro resultado ya que el robot consiguió reconocer la mayoría de puntos, y siempre que este paso se hizo bien el ángulo también se adivinó.



RETO DE AUTO-LOCALIZACIÓN

Este es sin duda el apartado más difícil al que nos hemos enfrentado en este curso, y es que conseguir autolocalizarse con los medios a nuestro alcance no es tarea fácil.
Para empezar hay que tener en cuenta que este apartado se basa en gran medida en el anterior, ya que para recorrer los 5 puntos fijados en el mapa de forma correcta en necesario saber en primero lugar en que punto te encuentras y con que orientación, y si eso falla todo lo demás ira detrás.
Suponiendo que el robot hiciera esta primera parte de forma correcta, habría que empezar a trabajar con las partículas, para poder ir corrigiendo el error que produce el movimiento por el mapa, de forma que la acumulación de errores sea la menor posible, consiguiendo así resultados mucho más precisos.
En estos momentos aún seguimos trabajando en este apartado.