miércoles, 21 de enero de 2009

VFF mejorado

Partiendo del VFF anterior se han realizado las siguientes modificaciones:

  • La velocidad lineal ahora es proporcional a las fuerzas de atracción y repulsión, es decir cuando la fuerza de repulsión sea mayor que la fuerza de atracción el robot avanzará a su mínima velocidad, mientras que si la fuerza de repulsión es 0 el robot avanzará a su máxima velocidad, por ultimo si la fuerza de repulsión no es nula y es menor que la fuerza de atracción el robot avanzará a una velocidad que estará comprendida entre su mínima velocidad y su máxima velocidad.
    Con esta mejora conseguimos agregarle seguridad al robot ya que avanzará mas despacio cuando tenga objetos cercanos a él y avanzará mas rápido cuando no haya obstáculos cerca de él.

  • La velocidad angular ahora es proporcional al ángulo formado entre la fuerza resultante y el eje x positivo del robot, es decir cuanto mayor sea el giro que tenga que realizar el robot mayor será su velocidad angular, pero si el ángulo de giro es pequeño la velocidad angular será pequeña.

  • Con esta mejora conseguimos que el robot sea menos nervioso, ya que antes se dirigía hacia su destino vibrando, debido a que cuando el robot intentaba hacer pequeñas correcciones en su rumbo entraba en un bucle infinito porque la velocidad angular era excesiva y se pasaba de giro, por lo que el robot tenia que volver a hacer otra corrección en su rumbo y así indefinidamente.

  • Se añade una nueva variable llamada angulo_oscilacion. Si el ángulo formado por la fuerza resultante y la fuerza resultante de la iteración anterior es menor que el angulo_oscilacion el robot sigue calculando la velocidad lineal y angular con la fuerza resultante de la iteración anterior.

  • Con esta mejora conseguimos que el robot no este haciendo constantemente correcciones en su rumbo, por lo que evitamos posibles oscilaciones innecesarias.

  • Se añade una nueva variable llamada ángulo_bloqueo, cuando el ángulo formado por la fuerza de atracción y la fuerza repulsiva son mayores que el ángulo_bloqueo la fuerza resultante se calcula con el vector perpendicular a la fuerza de repulsión y con el vector perpendicular a la fuerza de atracción.

  • El valor de la variable angulo_bloqueo debe tener un valor superior a 150 para el correcto funcionamiento del algoritmo.

    Con esta mejora conseguimos que cuando el robot encuentre un mínimo local, avance perpendicularmente a la fuerza de atracción y repulsión por lo que generalmente hace que el mínimo local desaparezca y el robot pueda continuar con su misión.

A continuación se puede ver un vídeo en el que se pueden observar como ha mejorado el robot con relación al anterior vídeo de VFF.

Un momento interesante del vídeo es cuando se pone el cursor dentro de uno de los semi-círculos del mapa, se puede observar como el robot da la vuelta al semicirculo, algo impensable con el algoritmo anterior del VFF.





Para ver el video con mayor calidad pulse aqui

No hay comentarios: