martes, 29 de marzo de 2016

Práctica 'follow line'

Esta práctica consiste en que nuestro robot (un pioneer) bajo el simulador Gazebo, siga una línea en un circuito de fórmula uno, más concretamente, el circuito de Montmeló utilizando de herramienta un único sensor de visión, una cámara.

En la figura 1 se puede ver una vista aérea del circuito.

Figura 1: vista aérea del circuito


Se tiene como finalidad programar un PID para el funcionamiento del robot en Python.

Pero vayamos por partes, lo primero será realizar el preprocesado de las imágenes. Dado que únicamente se va a utilizar una (la cámara izquierda) de las dos cámaras que tiene el robot, únicamente se hará el procesado con la cámara que se va a utilizar.

El procesado consiste en pasar la salida del sensor al espacio de color HSV, para poder quedarnos únicamente con la parte roja de la pista, que es lo que se va  seguir. Cuando se tiene únicamente la pista, dado que el sensor puede captar varias partes del circuito distintas, nos quedaremos con la que sea de mayor área, como se puede ver en la figura 2.

Figura 2: Salida del sensor e imagen procesada


En función de la información que nos interesa que capta el sensor y que se puede extraer, ya se puede programar el robot.

El primer problema que se resolvió ha sido el de buscar la linea si se pierde, para ello se busca contornos sobre la imagen procesada, si no encuentra nada, que gire en función de buscar la línea para seguirla.

El siguiente problema a resolver es en qué se basa el robot para seguir la linea. La primera idea de programar el robot se basaba en  partir la imagen en dos, y contar la cantidad de píxeles rojos de cada mitad. Si en una mitad había más píxeles que en la otra, es que nos encontrábamos en una curva. El primer obstáculo que nos encontramos al utilizar este método es que el robot no va a estar en medio de la línea, ya que la cámara está en un lado del robot, no está centrada, por lo que eso supone que al tomar curvas cerradas el robot se va a salir de la línea.

Por lo que se ha decidido utilizar los centroides para hacer al robot que siga la línea.