miércoles, 3 de marzo de 2010

Navegando

Estamos implementando a base de comportamientos un programa para conseguir que el robot evite obstáculos pero yendo hacia la luz.

Como realizar tal hazaña?Con vectores de fuerzas.

Hay dos vectores:
Vector repulsión: Nos indica hacia donde alejarnos del objeto.
Vector atracción: Nos indica hacia donde ir.
Estos vectores se recalculan a tiempo real.
  1. Calcular vector de atracción.
  2. Calcular vector de repulsión.
  3. Calcular vector resultante.
  4. Traducir el vector resultante al movimiento del robot.
Para calcular un vector necesitamos saber dos cosas, el ángulo(teta) y el módulo(ro).
Luego mediante coordenadas polares podemos hallar nuestra (x,y):
x = ro · cos(teta)
y = ro · sen(teta)

Hasta aquí fácil,el problema esta en calcular ese ángulo y esa distancia.

Para el objeto es relativamente fácil,nosotros siempre partimos del (x=0,y=0), avanzamos y al chocar calculamos los vectores.La distancia al objeto nos la dará el sensor de ultrasonidos o el de contacto y el ángulo nos sera dado por la odometría de nuestros motores de empuje, la cual será reseteada para conseguir evitar los errores lo máximo posible.

Para la luz hay mas pegas.Necesitamos también el vector de atracción.

¿Cómo detectar la distancia a la que esta la luz?¿Como saber a que ángulo esta la luz?

De momento tenemos pensadas varias estrategias:

Para averiguar el ángulo de la luz podemos utilizar una estimación de los sensores de luz los cuales están en el frente del robot orientados con un ángulo de 45º a cada lado.El problema nos surge si cambiamos la intensidad de la luz ya que rompería muestras medidas previas.

El otro punto clave es la distancia a la luz para poder calcular el vector atractivo.
En un primer momento intentamos calcular la distancia con los sensores de luz pero había tan poca separación que la luz recibida a 60cm, 100cm, 200cm era prácticamente la misma y por si fuera poco cambiaría con el tipo de luz.Nos daba miedo fiarnos de una medida tan poco precisa.

Posteriormente nos dimos cuenta de que la luz solamente nos marca la dirección a seguir.Nos da igual la distancia a la que esté, entonces, ¿porque no fijar esta distancia a un valor constante?
Al fijar la distancia a la luz es posible obtener vectores resultantes que nos hicieran movernos hacia atrás y eso es de cobardes.
Pero podemos implementar que en el vector resultante de movimiento la componente y sea siempre positiva y así nunca llegar a retroceder.

Aún esta en pruebas,iremos informando.

No hay comentarios:

Publicar un comentario