PRÁCTICA 1: CONTROL VISUAL.

Para que el coche sea capaz de seguir la línea roja de forma autónoma primero obtengo una máscara que devuelve en blanco los pixeles que se corresponden con la región roja de la imagen. Para ello establezco el rango de valores HSV de interés. A partir de la máscara llevo a cabo el cálculo del momento, tal y como se indica en https://jderobot.github.io/RoboticsAcademy/exercises/AutonomousCars/follow_line/.

Para calcular el error saco la diferencia entre el momento y el centro de la imagen, que en un momento inicial he asumido que se corresponde con el centro del coche. Sin embargo, después he observado que el centro de la imagen no cae justo sobre el centro de la línea roja, lo que me indica que la cámara no está centrada en el coche, sino que está un poco desplazada (aproximadamente 4 pixeles).  Así, el cálculo del error queda finalmente como: err = cx – (w//2 - 4).

 

En un primer momento establecí la velocidad lineal en un valor bajo para intentar optimizar el control proporcional.  Para ello ponemos ki y kd a cero en nuestra ecuación de control. Después he ido modificando los valores de Kd y Ki hasta intentar controlar el coche lo máximo posible. Dado que no he conseguido optimizar el control integral, finalmente opto por un controlador PD, únicamente proporcional-derivativo. Con estas bases, luego pasé a diseñar un controlador diferente para cuando el coche está sobre una recta y cuando el coche está sobre una curva.

 

Para ello hace falta primero saber cuándo se trata de una recta y cuándo de una curva. Después de contemplar varias opciones finalmente seleccioné la opción siguiente por simplicidad: 


Creé una submáscara en la imagen con la cual nos fijamos únicamente en la última porción de carretera visible (antes de ser cielo). Así, si ahora calculamos el momento sobre los pixeles blancos (es decir, los pixeles rojos), este aparecerá bastante centrado en la imagen si se trata de una recta mientras que aparecerá más desplazado a los laterales si se trata de una curva. Fijamos el rango óptimo y utilizamos este criterio para aplicar un controlador u otro, inicializando la velocidad en las rectas a un valor diferente (mayor) que en las curvas. 


SIMPLE CIRCUIT


Finalmente obtenemos el siguiente resultado para el circuito simple, donde se termina la vuelta en un tiempo de 98 s. Otros circuitos tardan en completarse más tiempo. El de Nurburgring tarda 148 s, y el Ackerman Simple 592 s, lo cual dista bastante de ser un comportamiento lo suficientemente rápido. 



Circuito simple







Comentarios

Entradas populares de este blog

PRÁCTICA 2: RECONSTRUCCIÓN 3D DESDE VISIÓN

PRÁCTICA 3: AUTOLOCALIZACIÓN VISUAL BASADA EN MARCADORES