lunes, 12 de abril de 2010

práctica navegación vff-híbrida (cheste)

En este post voy a describir la práctica de navegación híbrida con VFF que consiste en que nuestro robot navegue en un circuito de carreras, incluso con otro robot por ahí incordiando. La extensión consiste en que va cogiendo los puntos de destino de una lista de puntos que le hacen completar el recorrido del circuito. Cuando llega a un punto coge el siguiente como destino del VFF, etc.

Las principales diferencias respecto al VFF convencional es que aquí debemos mantener una velocidad constante mayor que en la anterior versión ya que el objetivo aquí es terminar el circuito lo antes posible, no sólo evitar los obstáculos. Para poder llevar a cabo este objetivo, he tomado una lista de 15 puntos que guiarán al robot por el circuito y he añadido una segmento en amarillo que muestra el destino próximo del robot en cada tramo.

Una de las mayores dificultades del robot en este escenario es el hecho de poder detectar obstáculos nuevos en su camino y tener que evitarlos durante la marcha. Para ello, lo que hago es decrementar la velocidad drásticamente, de manera que el robot sea capaz de superar lentamente cualquier obstáculo (véase en el vídeo el robot azul).

Adjunto un vídeo demostrativo del recorrido del robot por el circuito:


Las principales diferencias en esta versión híbrida del algoritmo VFF son:
* Inclusión de contador para detectar vuelta completa. Si destino > 15 entonces se ha completado la vuelta y el robot se detiene.
* Si detectamos un obstáculo cercano, debemos reducir la velocidad ya que sólo las fuerzas virtuales no nos garantizan evitar el choque. Por tanto:
if (obstaculo==1) { FuerzaAtractiva * 0.2 }
Se multiplica la fuerza por 0.2 porque experimentalmente este valor reduce
adecuadamente la velocidad del robot para velocidades máximas de 1200.
* Para permitir una transición ligera por los subdestinos se toma un rango de
(dist_dest < 500) para poder pasar al siguiente destino de manera que el robot no tenga que pasar específicamente por un punto del circuito ya que lo importante es poder completar el circuito.
* Finalmente, hemos añadido una segmento amarillo que señala cada subdestino del circuito de manera podemos ver en todo momento los puntos que guían al robot.

Saludos