jueves, 13 de mayo de 2010

práctica sigue líneas visual

En esta última práctica vamos a describir el algoritmo implementado para conseguir un comportamiento reactivo del robot a partir de la información recibida por el sensor cámara y con ello conseguir que el robot sea capaz de recorrer el escenario simulado del departamental sin chocar con las paredes del pasillo ni ningún otro obstáculo.

Para ello, se ha utilizado un control de bucle cerrado a través de un controlador realimentado proporcional. Dicho controlador es el encargado de corregir permanentemente la posición del robot ya que la aproximación realizada consiste en calcular el rango de pixeles que abarca el pasillo, calcular su punto medio y redirigir constantemente la posición del robot a este punto. Los elementos más importantes que intervienen en el control del robot en dicho algoritmo son:

* escogemos una fila de visión del robot que vamos a utilizar como referencia para guiarlo. Escogemos y=ROWS*3/4, es decir, la fila 240*(3/4)=180. Escogemos esta fila porque está a una distancia válida para reaccionar ante un posible cambio de dirección del robot.

* para analizar los pixeles de dicha fila utilizamos el método isYellow(R,G,B) que recibe los valores de R,G,B para cada pixel y almacena el primero y último encontrado del color del pasillo (amarillo en este caso). Estos pixeles de referencia nos servirán para localizar el punto medio del pasillo.

* uno vez obtenido el punto medio del pasillo, utilizamos un controlador proporcional para responder en proporción al error. Primero calculamos dicho error, calculando la diferencia entre nuestra posición y la del centro del pasillo:
diff = abs(MIDDLE-middle_pix);

* después determinamos la ganancia correcta que hay que aumentar el ángulo de giro para evitar chocar con una pared. Se necesita una fase experimental para determinar el valor de nuestra constante de proporcionalidad. En este caso, Kp=1/2 y el ángulo de giro:
angulo = diff*Kp;

* Por último, utilizamos la posición y ángulo calculados para determinar el movimiento del robot. Si el punto medio queda a la derecha el ángulo de giro se vuelve negativo (w=-angulo), si está a la izquierda es positivo (w=angulo) y es el punto medio coincide con el centro el angulo de giro es nulo, es decir w=0. Además, mantenemos en todo momento una velocidad lineal (v) constante:
VMAX=1200

* Finalmente, hay que resolver un problema al final del recorrido del departamental ya que el pasillo desaparece y el robot pierde por tanto puntos de referencia para calcular su dirección. Cuando ocurre esto (se detecta a través del método noPasillo) el robot comienza a girar hasta que encuentra de nuevo un pasillo en el orientarse.


Adjunto el vídeo demostrativo:



Saludos