En esta práctica el objetivo que tendrá que superar nuestro robot será navegar por un escenario con la única ayuda de una cámara colocada en la parte frontal.
Los requisitos que deberá cumplir para considerar una navegación buena serán la velocidad a la que circula el robot y la capacidad de evitar obstáculos (estáticos y dinámicos). El escenario por el cual circula el robot es la simulación del departamental II de la Universidad.
Para explicar como hemos desarrollado la práctica vamos a dividir esta entrada en dos partes:
1. Introducción al sensor cámara y su procesamiento
2. Desarrollo del algoritmo de navegación basado en la cámara
1. Introducción al sensor cámara y su procesamiento
En primer lugar, vamos a explicar cuales son las características del entorno simulado del departamental II.
El entorno consta de pasillos(suelo y paredes), puertas y papeleras. El suelo es de color amarillo, las paredes grises, las puertas granate y las papeleras de color azul.


La primera imagen es la que se obtiene directamente a través del sensor cámara.
Esta imagen está formada por 320 columnas y 240 filas (ancho-alto). Es almacenada en memoria como un array unidimensional que contiene información de cada uno de los píxeles. La información que contiene es el valor de RGB de cada pixel. Por lo tanto, el formato de este array es el siguiente:
Tenemos que tener muy en cuenta el formato de este array para sacar la información que deseamos. Las fórmulas que hemos seguido para indexar las posiciones del array es la siguiente:index=((fila*SIFNTSC_COLUMNS)+columna)*3;
b=(unsigned char)imagenRGB[ index ];
g=(unsigned char)imagenRGB[index+1];
r=(unsigned char)imagenRGB[index+2];
Para llevar a cabo un control por cámara se pueden utilizar varias técnicas:
*Filtros de bordes (Sobel)
*Filtros de colores
*Filtros en el dominio de la frecuencia
* ...
En nuestro caso, con un filtro por colores es suficiente para conseguir nuestro objetivo, ya que filtrando aquellas partes de la imagen que sean de color "pasillo" podemos saber donde estamos posicionados con respecto al escenario.
2. Desarrollo del algoritmo de navegación basado en la cámara
El actuador que permite el avance hacia delante tiene un velocidad continua, de este modo conseguimos una mayor velocidad (v=1000).
Para el actuador que permite el giro de nuestras ruedas hemos decidimos utilizar un controlador P (propocional ).
Controlador P:
La fórmula en la que nos hemos basado es la que hemos visto en las transparencias de clase:
w= -Kp*error
-Kp= constante de proporcionalidad obtenida de forma experimental.
El valor es (-1/2)
error=numPixelPasilloIzq - numPixelPasilloDch
Nuestro objetivo ha sido mantenernos en la posición central de lo que el robot considera pasillo, para ello intentamos que el numero de pixeles "pasillo" a la derecha e izquierda del robot sea el mismo. De esta forma conseguimos que si hay más pixeles a un lado que al otro, el robot corrija su posición de forma proporcional a esta diferencia, hasta que encuentre la posición óptima.
Dado que es un escenario en el que hay pocos obstáculos y es bastante uniforme, no se ha detectado que el robot realice movimientos muy bruscos siendo controlado, simplemente, con un controlador P.
En caso de que el escenario fuese menos uniforme o tuviera mayor cantidad de obstáculos o incluso obstáculos dinámicos sería necesario implementar un controlador PD que suavizaría los movimientos de corrección del robot.
3. Otras consideraciones interesantes
Hemos decidido procesar simplemente una linea de la imagen, en concreto, la linea que procesamos es la número 180. De esta forma conseguimos no cargar en exceso la aplicación (no procesa lineas que no aportan información ya que están recogiendo zonas alejadas).
La linea escogida ha sido la 180 de forma experimental. ¿Por qué no la última, la 240? Si se escoge dicha linea el robot es incapaz de reaccionar a tiempo cuando tiene un obstáculo delante, ya que tiene que estar prácticamente encima para poder detectarlo, y cuando intenta corregir su posición es demasiado tarde.
A continuación se puede visualizar un video con el funcionamiento del programa (nota: el video es más lento de lo que lo es la ejecución)
Si no puedes verlo pincha aqui

No hay comentarios:
Publicar un comentario