domingo, 21 de marzo de 2010

PRACTICA 2: NAVEGACION VFF

En una navegacion vff, el robot está sometido a un campo potencial, donde el punto de destino del robot ejerce una fuerza de atraccion (Fa) sobre el robot y los obstáculos generan una fuerza de repulsion (Fr) sobre el robot, por lo que se moverá en la dirección de la fuerza resultante(Ft) que se obtendrá al sumar la Fa y la Fr:
A continuacion explicaremos como hemos calculado cada una de estas fuerzas:


Fuerza de Atraccion (Fa)

Fa_X=Katraccion * (Xo - Xf)
Fa_Y=Katraccion * (Yf - Yo)

Si Xo,Yo=0

Fa_X=Katraccion * (Xf)
Fa_Y=Katraccion * (Yf)





Fuerza de Repulsion (Fr)
Detectamos una fuerza de repulsión cuando el láser detecta una barrera a una distancia de 1000 o menos, si el obstáculo está más lejos, éste no generará ninguna fuerza de repulsión.
Además si nos encontramos muy muy cerca del objetivo la fuerza de repulsión será nula para evitar que si el objetivo está muy cerca de una barrera el robot se mueva alrededor del objetivo sin llegar a él

El cálculo de la fuerza de repulsión lo hemos realizado a traves de la siguiente formula:
Fr=sum(Fr(i))K/dist_obstaculo
La constante K ha sido elegida a través de las prueba realizadas con el entorno, el valor de K es 35000


Fuerza Total (Ft)

Ft=Katraccion*Fa + Krepulsion*Fr
( Katraccion= 1-Krepulsion rango de la K es [0-1] )


Algoritmo del movimiento
El algoritmo de movimiento lo hemos calculado basándonos en la diferencia entre el ángulo formado por la fuerza total y el que formal a posición del robot.
Si la resta de esta ángulo está entre [0 - 180) (en valor absoluto) comprobamos si la resta es positiva o negativa,para girar en un sentido u otro. Además comprobamos si estamos más cerca o lejos del ángulo objetivo, para girar más rápido o más lento.

Si la resta de esta ángulo está entre [180 - 360] (en valor absoluto) comprobamos si la resta es positiva o negativa,para girar en un sentido u otro. Además comprobamos si estamos más cerca o lejos del ángulo objetivo, para girar más rápido o más lento.

Se puede observar el comportamiento del robot en el siguiente video
También podeis ver el siguiente video:

lunes, 15 de marzo de 2010

PRACTICA1 : CHOCA-GIRA (versión 2)

Hemos corregido las cosas que se nos pidió en la entrega. Los cambios realizados han sido los siguientes:
  • Hemos programado el robot como un autómata de estados (tal y como se explicaba en la entrada anterior), ya que en la primera versión no se consiguió este comportamiento en la programación.
  • Hemos hecho que nuestro robot vaya a la máxima velocidad (v=1000) y que funcione bien. También hemos detectado que ha mayor velocidad más probable es que el robot detecte el obstáculo cuando está más cerca de él.
  • Hemos conseguido que el tiempo que el robot gira hacia la derecha o la izquierda sea aleatorio.
Para ver el funcionamiento del robot podeis pinchar en el siguiente enlace o bien puedes verlo en el video que aparece a continuación:


lunes, 1 de marzo de 2010

PRACTICA 1: CHOCA - GIRA

El objetivo de esta práctica es programar el robot de tal forma que sea capaz de avanzar y cuando detecta un obstáculo justo delante de él parará y girará un tiempo determinado para esquivar el obstáculo y volverá a seguir avanzando.
Para implementar este tipo comportamiento vamos a utilizar un autómata de estado finito que se compone de los siguientes estados: Avanza, Retrocede, Gira.
A continuación exponemos un diagrama que indica como se procederá para pasar de un estado a otro:



A continuación os pongo algunos datos que me parecen interesantes:
*La distancia máxima que vamos a permitir al robot acercarse a un objeto que tenemos delante será de 350. De esta forma nos aseguramos que el robot no se chocará con ningún obstáculo, y en el caso de quererlo llevar al mundo real, el hardware del robot no sufriría daños físicos.

*Hacemos distinción del lado del cual el robot recibe información de que hay un obtáculo.
Si el obstáculo está en el lado izquierdo giramos al lado derecho y si el obstáculo está en el lado derecho giraremos a la izquierda. Así evitamos que nos quedemos encerrados en rincones y optimizamos el movimiento del robot.

*Hemos hecho un programa modularizado de forma que el código pueda ser reutilizable y sea más sencillo de entender.

A continuación mostramos un video con el funcionamiento de nuestro choca-gira:




Si no puedes ver el video pincha en este enlace