miércoles, 10 de febrero de 2010

Fín de los días

Kubus ha evolucionado, esta vez por última, para convertirse en un viejecito encorvado. Después de esta práctica no lo volveremos a ver, pero esto es despedirse por todo lo alto: ¡Kubus ha quedado campeón! Ha ganado la competición de autolocalización y navegación con amplio margen. Ya dijimos en la primera entrada del blog que los últimos serían los primeros :)

Esta práctica ha sido, sin duda, la más tediosa y desesperante, ya que muchos algoritmos proporcionados por la API no funcionaban en absoluto ¡y no lo sabíamos!. Pero vayamos por partes:


Ejercicio 1: Visualización del mapa y las partículas (2 puntos)

Este es uno de varios ejercicios que construyen la base para el reto final. En concreto este no tiene la menor complicación. Si bien se resuelve en 3 minutos, nosotros tomamos al pie de la letra "distribuir uniformemente las partículas en el mapa" y asi lo hicimos. Repartimos todas las partículas con la misma distancia entre ellas y no de forma aleatoria, así que tuvimos que hacer un buen montón de cuentas.


Ejercicio 2: Diseño del radar (2 puntos)

Lo mismo que el anterior, el radar es clave para tomar las distancias mediante el sensor de ultrasonidos y almacenarlas en unas estructuras de datos (RangeReadings) que usaremos asiduamente en siguientes ejercicios.
Nuestro radar en concreto capturaba la distancia cada 10º, asi que tomaba 36 medidas (0º-350º ambos inclusive).


Ejercicio 3: Reconocimiento de posición y orientación (4 puntos)

Este SÍ es un ejercicio complejo. Se trata de, marcados 5 puntos en un mapa, colocar a Kubus en cualquiera de ellos y con cualquier dirección y conseguir que éste sea capaz de decir en que punto está y en que dirección (con una resolución de 10º).
Para ello, antes Kubus tiene que "aprender" las características de los puntos, así que primero Kubus se coloca en cada uno de ellos y toma medidas usando el radar.


Ahora viene lo interesante. Mediante magia (y algunos cálculos con unas cositas llamadas histogramas) nuestro robot determina con gran precisión en que punto está y que dirección lleva. No explico más porque sería profundizar mucho y la verdad es que os había mentido, no es tan interesante. Quien quiera saber más del tema, aquí viene muy bien explicado:
http://gsyc.escet.urjc.es/moodle/file.php/11/Practicas/09_10/Practica5/p5.pdf

En principio tuvimos muchos problemas con este ejercicio, ya que la idea correcta nos vino tras un buen rato de pensar, tuvimos un error casi insignificante en la implementación que pasó desapercibido y que echaba por tierra todos los cálculos. Pero al final bien, gracias.


Ejercicio 4: Reto de la auto-localización (8 puntos)

Y aquí viene lo gordo. Usando todos los algoritmos anteriores, conseguir que Kubus, colocado en un punto al azar con una dirección también al azar, recorra todo los demas puntos (son 5), intentando corregir la trayectoria en cada uno tomando las medidas adecuadas. Si bien parece que no es muy complejo, la realidad es que el error de cada giro y de cada viaje del robot es BASTANTE alto, y si Kubus no usara la auto-localización y viajara a ciegas, probablemente acabaría en Coria del Río.

Y lo complicado sobre todo viene porque el que hizo los filtros de partículas, los hizo con los pies parece ser, porque no funcionan ni para atrás. Hemos tenido que corregir un montón de código de algoritmos que se suponían funcionales para conseguir un resultado aceptable. No es nada fácil saber que hipótesis de situación es la correcta de entre todas las posibles, ya que tras hacer un recorrido, Kubus tiene en cuenta que hay un posible error, pero no sabe a donde le ha dirigido ese error. Afortunadamente, nuestro profesor Carlos nos echó una mano con una ecuación para asignarle peso (importancia) a las partículas. Aún así ha sido una pelea de muchas horas.

Pero con una gran recompensa, el reto lo hemos convertido una competición, y quien quedara más cerca de los destinos, se llevaría unos puntos extra, que desde aquí decimos que esperamos que sean un montón.


Este video se grabó justo después de la competición (ya están dibujadas las "dianas") por mi querido compañero Rui, que como se ve, es un genio con la cámara. Planos absurdos aparte, Kubus lo clava y es porque mola un huevo. Cabe decir que todo el tiempo que está parado entre punto y punto está calculando los pesos de las partículas, para averiguar cual es el sitio más probable en el que esté, que sería la hipótesis de mayor peso.

Quizá nos veamos en la próxima práctica optativa (la de dominar el mundo), aunque parece que como están las cosas con los exámenes encima, no está el horno pa bollos. Por si acaso, un saludo y muchas gracias por leer nuestro blog.

¡Adiós!


P.D: Próximamente, si obtenemos el permiso de los profesores, subiremos el código de todas las prácticas, para todos aquellos a los que pueda interesar y hacer así de este blog un sitio útil.

No hay comentarios:

Publicar un comentario