jueves, 28 de abril de 2016

Práctica 2 - reconstrucción geométrica

En la práctica 2, se va a utilizar el simulador Gazebo con el robot pioneer, utilizando su par de cámaras estéreo y con el robot estático frente a un escenario. Se desea reconstruir la escena en 3D.

Para reconstruir la escena se desean seguir los siguientes pasos:


  • Con un algoritmo de búsqueda de puntos característicos (SIFT, ORB, FAST..) se van a buscar puntos característicos en ambas imágenes.
  • Se va a buscar el homólogo de una imagen en la otra. La búsqueda se hará con una vecindad 11x11 del punto. Para minimizar es espacio de búsqueda y hacer menos pesado el cómputo se va a restringir la búsqueda:


    • Búsqueda en los puntos característicos de la otra imagen
    • Se buscará en la franja epipolar. Para calcular la línea epipolar se calcula el rayo de retroproyección del punto y su proyección en la otra imagen es la linea epipolar. Para darle un poco de holgura dado a que la calibración no es perfecta, se busca en una franja.
  • Se calculan lo parecidas que son la s vecindades con la correlación. El par de puntos que mayor correlación tenga será el candidato.
  • El candidato tiene que superar un umbral que se definirá posteriormente. Si no lo supera se considerará que es ruido. Si no, se puede proyectar en el espacio ese punto.

martes, 26 de abril de 2016

Vuelta en 1' 47"

Se ha mejorado el controlador del robot de tal manera que ahora consigue dar la vuelta en 1 minuto 47 segundos.

En el siguiente vídeo se puede ver el comportamiento del robot dando la vuelta al circuito.



Las mejoras que se han hecho desde la versión anterior ha sido mejorar el controlador de velocidad y añadirle una pila  FIFO que hace de memoria. Esta pila permite cambiar de velocidad una vez que se ha corregido el error.


lunes, 18 de abril de 2016

Práctica 1 - Cerca de los dos minutos

A partir del trabajo realizado anteriormente, se han mejorado varios aspectos del código que permiten que el robot de la vuelta al circuito en 2 minutos 10 segundos. Los tres cambios realizados más importantes son los siguientes:

- Se ha cambiado el pre-procesamiento de  la imagen, de tal modo, que ahora los contornos con los que se juegan son 3 en una parte de la imagen más restringida.

- El controlador de velocidad PID se ha cambiado por un controlador reactivo. Dónde a partir del error se decide qué velocidad debe de tomar.

- Se ha añadido componente derivativa e integral al controlador de giro.

Aquí se puede ver un vídeo del robot dando una vuelta al circuito en un tiempo de 2 minutos 10 segundos.



Seguimos mejorando.

martes, 5 de abril de 2016

Practica 1 - Controlador de velocidad

Recordamos por donde nos habíamos quedado...

Se había construido un controlador que controlaba el giro, este controlador únicamente tenía la parte proporcional. La base del controlador de giro estaba en el cálculo de los centroides y cuánto diferían de la referencia (la mitad de la imagen) en el eje de la x, el ancho de la imagen. Con los ajustes realizados y una velocidad constante de 0.3 se obtenía un tiempo de reloj de 8 minutos, sí, demasiado.

Para ajustar la velocidad se ha construido otro controlador, que también depende de la misma referencia, el centro de la pantalla.

En este caso el error se ha tomado en valor absoluto, nos da igual que la curva sea hacia la derecha o la izquierda (error positivo cuando es mayor que la referencia la posición media ponderada de los centroides, o error negativo cuando el la posición ponderada total de los centroides está a la izquierda de la mitad de la imagen horizontalmente), lo único que se quiere es que cuando haya curva, baje la velocidad para poder girar.

El controlador se ha hecho en función de dos puntos:

- Cuando la desviación sea 320 en valor absoluto, que la velocidad sea 0.2
- Cuando la desviación sea 0, no hay error, que la velocidad sea 1

Esta parte del controlador luego se regula con Kp.

En el siguiente video se puede ver el comportamiento del robot dando una vuelta completa la circuito con los nuevos cambios en un tiempo de reloj de 3 minutos y 50 segundos.



Lo primero que hay que mejorar es la velocidad en las rectas, que lo máximo que alcanza es 0.5 de 1. Hay que añadirle la componente derivativa para que la velocidad sea más constante.

Seguimos trabajando.

lunes, 4 de abril de 2016

Empezando a construir el controlador PID

Después de tomar la decisión de optar por la base del controlador en calcular varios centroides de la imagen, nada más que hay que ponerse manos a la obra.

Se han calculado 4 centroides de 4 zonas de la imagen adyacentes unas con las otras:

Desde el principio de la imagen hasta el 60% del alto de la imagen. Desde el 60% hasta el 70% de la imagen, del 70% al 80% de la imagen y del 80% de la imagen al final de ésta.

Hay que decir, que únicamente se calculan los centroides de la carretera principal que se sigue, es decir, la de mayor área, que cuando el robot la está siguiendo es la que tiene a sus pies.

A partir de los centroides, nos quedamos con su posición en el ancho de la imagen, y se realiza una media ponderada con pesos, donde se premia la posición más cercana al robot; y se penaliza la más lejana, la parte de la carretera que está más cerca del horizonte.

A partir del centroide general, se calcula el error, que es la referencia menos el centroide genral. La referencia se ha puesto como mitad de la imagen, es decir 320 ya que el ancho de la imagen es de 640.

Únicamente se ha calculado la parte proporcional del controlador, que está en función del giro máximo que se quiere dar y de la referencia y de un factor que es el que se va a modificar. Todo esto se multiplica del error obtenido.

En el siguiente video se puede ver el recorrido del robot con una velocidad constante de 0.3, dónde únicamente está el giro en función del controlador P. Es la primera prueba realizada dónde el robot da la vuelta completa por primera vez.



Como se puede ver en el vídeo. hay un momento dónde el robot se pierde aunque se recupera instantáneamente. Por lo demás se puede ver que en general el robot no oscila mucho salvo después de alguna curva.

El tiempo de recorrido del robot es de 8 minutos aproximado, es un tiempo muy (pero que muy) alto, que se ajustará con un controlador en un futuro. Hay que tener en cuenta que el robot a recorrido el circuito a menos de un tercio de su velocidad, por lo que construyendo el controlador de velocidad se espera disminuir en gran cantidad esa velocidad sin afectar al giro.

También, como siguiente paso se realizará la componente D (derivativa) del controlador para el giro y evitar las oscilaciones que en ocasiones se producen y mejorar el controlador del robot.

Seguimos trabajando.