Añadiendo componente derivativa la cosa cambia

He añadido componente derivativa a mi controlador, por lo que ahora mi controlador (PD) se comporta de forma mas estable ante los cambios brusco de dirección.

A medida que veía que mi vehículo se comportaba de forma mas estable, he ido variando la velocidad mínima y máxima de tracción, la constante de proporcionalidad que define la función de parábola de velocidad de giro y la contante derivativa (alrededor de 0.0002).

En algunas situaciones en las que el error era demasiado grande, la función de parábola daba un valor de giro que no era suficiente. Es por ello que he añadido unos limites a aproximadamente 200 pixels de distancia a cada lado de mi referencia, de tal forma que cuando mi error sobrepase este umbral la velocidad de giro pasa a ser 0.1. Esto es muy útil sobretodo en la “curva de la muerte” (creo que todos sabéis de cual hablo).

En principio he mantenido el mismo criterio que describí en el post anterior acerca de la velocidad de tracción, añadiendo algunas restricciones, como por ejemplo reducir al máximo la velocidad (60 km/h) en caso de que mi error sobrepase el umbral o el píxel mas bajo de la línea analizada en la mascara no sea igual 1.

He refactorizado el código de forma que sea algo mas escalable.

Para mayor comodidad he deshabilitado algunos componentes de la GUI que no necesitaba. Mi sorpresa ha sido que al trabajar con uno ordenador patata como el mío el comportamiento de mi coche cambiaba con los mismo parámetros…esto ha sido un problema porque he tenido que volver a ajustar dichos parámetros…

Aquí dejo un vídeo de mi último recorrido (2’30” aprox):

Publicado en Uncategorized | Deja un comentario

Primera vuelta al circuito

He conseguido mi primera vuelta al circuito sin salirme!

De momento utilizo un controlador P en los giros, es decir, aplicando una corrección proporcional al error estimado en cada iteración de mi algoritmo.

Para obtener el error, el cual el controlador deberá corregir, simplemente extraigo tres líneas horizontales de la mitad inferior de la imagen filtrada. Acto seguido aplico el algoritmo de detección de contornos (OpenCV) y calculo el cetroide de los centros de dichos contornos. La distancia horizontal en pixels a mi línea de referencia será el error que recibirá como entrada mi controlador.

Después de experimentar con el simulador establecí unos casos en el código de forma que para cada humbral de error le aplicase una corrección determinada. Los casos que mejor parecía que se comportaban eran los siguientes:

if (error > 100) : W = 0.1
else if(error > 75) : W = 0.05
else if(error > 50) : W = 0.02
else if(error > 10) : W = 0.005

Con estos casos dibujé una gráfica y observé que dichos puntos representaban una elipse centrada en O:

elipse.png

Hasta ahora mi controlador corrige el error de entrada mediante una propocinalidad definida por una elipse :

W = kp * error²

En cuanto a la velocidad de tracción de momento no he establecido un criterio robusto para regularlo. El siguiente paso será refactorizar el código para que sea mas escalable e intentar añadir un mejor comportamiento en los giros del coche mediante un controlador PD.

 

 

Publicado en Uncategorized | Deja un comentario

Primera aproximación para la obtención de una referencia

Lo primero que necesito es obtener un punto de referencia en la señal que me defina el error tanto para corregir el giro como para corregir la velocidad. Un primera aproximación es la posición de un píxel donde se podría considerar que el error sería igual a cero, es decir, el vehículo avanzaría recto y a velocidad máxima.

Esta referencia la obtengo mediante la suma de filas y columnas de la imagen. Para obtener la posición “x” en la imagen sumo cada una de las columnas y me quedo con la posición de la columna cuyo valor de la suma es mayor. Para el valor de la “y” sumo cada una de las filas y me quedo con la ultima fila empezando por debajo cuyo valor es distinto de 0.

calibration1.jpgHay que reconocer que este criterio no es muy robusto, pero insisto, es una primera aproximación para familiarizarme con el comportamiento del simulador y poder como mínimo controlar los giros a una velocidad constante.

Publicado en Uncategorized | Deja un comentario

Instalación del entorno y primeros pasos

Una vez instalado el entorno de desarrollo siguiendo la guía de instalación comencé a experimentar con Gazebo y los controles del simulador para hacerme una idea de como iba a desarrollar mi algoritmo de control visual.

Mi primera ocurrencia ha sido situar manualmente el vehículo en el centro de una recta y extraer una imagen desde la cámara derecha. De esta forma puedo hacerme una idea de la señal que el sensor (cámara) recibe en una posición óptima, donde lo que se entiende por “error” sería mínimo.

mask.jpg

Después de transformar la imagen al espacio de colores HSV, aplico un filtro de color para extraer la información que me interesa procesar (la línea roja de la carretera). Mediante una máscara obtengo una imagen binaria donde los píxeles con valor 1 representan la línea roja.

Después extraje únicamente la información correspondiente a algunas equidistantes filas de la imagen situadas en la mitad inferior. De esta forma analizo menor información y la velocidad de procesamiento es mayor.

mask2.jpg

Dando un paseo manualmente con el coche puedo ver aproximadamente como se comportan las líneas y hacerme una idea de que criterio utilizar para obtener un error que me sirva para corregir la posición del vehículo.

 

Publicado en Práctica de control visual | Deja un comentario

Last Report GSOC 2012: August 21 th

This is my last report of GSoC 2012 Develop!

In this figure I show you a diagram of the complete process of my tool.

I have made a video, where I aply the complet process (change detection, vectorize and morfologic filter) in a “Hidric scene”.

Also, you can see samples of execution in differents scenes:
Hidric scene
Burned Areas scene
Cultive scene

I wish you enjoy my work. Thank you very much for your interesting.

“I like it when a plan comes together”

Kind regards!

Sergio Izquierdo

Publicado en GSOC 2012 reports, Uncategorized | 1 Comentario

Report No. 12 GSOC 2012: August 12 th

Hey! This is my 12th report of GSoC 2012 Develop! tomorrow is “pencils down day” and today I can say that I have finished with coding! I have tested my tool and everithing works ok! Last Friday I showed it to my mentor and he told that the result is ok!

From tomorrow I will begin with documentation tasks. I want write user-guide-documentation (with a study case) and developer-documentation (with a process diagram). I know that I said this week I would upload a video with full process, but I think is better upload it the last week (more exciting).🙂

“I like it when a plan comes together”

Kind regards!

Sergio Izquierdo

Publicado en GSOC 2012 reports, Uncategorized | 2 comentarios

Report No. 11 GSOC 2012: August 3 th

This is my 11th report of GSoC 2012 Develop! I have created a Morfologic Filter Image Process and a Vectorize Process!!! I had no difficulty creating the Morfologic Filter, it was easy…but the Vectorize process is more complicated. For Vectorize Process I have reused one Sextante Process. I have migrated this process (now it uses buffers for read images with Landsat size).

This week i have solved a problem. My tool did not works ok in Windows. When I start dthe process, the jFreechart library did not show the scatter plot… I hava lost time solving this problem…but now, the my tool works in Windows, Linux and Mac!

Next week I will upload one video with a complete sample of Change Detection Tool.

“I like it when a plan comes together”

Kind regards!

Sergio Izquierdo

Publicado en GSOC 2012 reports, Uncategorized | Deja un comentario