Bosquejo en Matlab del algoritmo de visión para la identificación de la pelota

Bueno, ya cuentas con una cámara pero no sabes cómo empezar a rastrear la pelota o algún objeto en particular. No te preocupes, un buen inicio se puede realizar en Matlab. Una vez que hayas obtenido los resultados deseados puedes pasar el algoritmo a cualquier lenguaje deseado. Como esta página se enfoca más en el desarrollo de aplicaciones y mecanismos para la categoría de humanoides en la competencia mundial Robocup, es por eso que el objeto a buscarse será una pelota de tennis anaranjada. Si tienen cualquier duda sobre las reglas actuales de esta categoría las pueden bajar de esta liga: Reglas Robocup Humanoides 2008.pdf.



Espacios de color RGB y HSV

Como ya se ha mencionado la pelota es de color anaranjado, lo que significa que se debe de realizar algún tipo de filtro por formas, para detectar el círculo que representa el balón y por colores, para encontrar el anaranjado que pertenece al color de la pelota. En esta sección se explica a grandes rasgos los beneficios de cambiar de espacio de color entre RGB a HSV para lograr una mejor separación y detección de los colores. Si desean una descripción más detallada pueden visitar esta liga: HSV Colorspace.

Para poder entender lo que representa el espacio de color RGB imaginense una pantalla incolora y que puede ser iluminada por tres focos a la vez, uno rojo (R), uno verde (G) y uno azul (B). Si se enciende el primer foco la pantalla se ve roja, si se enciende únicamente el segundo la pantalla luce verde y con el tercero enciende azul. Si se encienden los tres focos al mismo tiempo la pantalla luce blanca y si se apagan luce negra. Ahora imagínense que le hablan al electricista y le piden que les ponga unos dimmers para poder controlar la intensidad de cada uno de los focos. Estos dimmers que consiguieron pueden variar de intensidad de 0 a 255, donde 0 es que el foco esta apagado y 255 significa encendido a su máxima potencia. Gracias a estos dimmers ustedes pueden representar cualquier color en su pantalla, ayudándose de la combinación de los tres focos (componentes R, G y B) y de la intensidad de cada uno de ellos. Al lado izquierdo se muestra una imagen que representa el espacio de colores en RGB a través de un cubo. Este espacio de color presenta sus ventajas y desventajas, pero lamentablemente una gran desventaja es el no poder encerrar un color en un espacio de numeros que representan a sus tres componentes R, G, B. Es decir para representar el color anaranjado se pueden dar los valores de 242, 145 y 47 a sus componentes, pero también si se selecciona 217, 103 y 0 da una tonalidad anaranjada y como pueden observar las tres componentes han variado sin un patrón (aparente). Entonces si se quiere establecer un algoritmo que sea capaz de detectar objetos de color amarillo, anaranjado, azul y verde se vuelve un problema realmente complejo, para esto existe el espacio de colores HSV. Este espacio intenta representar los colores de la forma en que un ser humano los identifica. Sus componentes son Hue, Saturation y Value, donde Hue representa los colores elementales. Saturation simboliza la intensidad del color y Value la obscuridad o luminosidad del color. Teniendo así un rojo establecido por un valor en hue y la intensidad del rojo siendo roco tenue o muy vivo lo da la saturación y la obscuridad del color lo da value podiendo obtener desde un negro hasta un rojo vivo. Para un mejor entendimiento vean la figura de la derecha, este cono representa el espacio de colores en HSV. Los valores de Hue típicamente son grados y los de Saturation y Value se dan en percentiles. Para una mejor visualización sobre el formato de HSV y RGB pueden visitar una página de conversión, esta página en particular maneja la entrada de RGB en hexadecimal.



Explicación del algoritmo


A continuación vamos a ver el desarrollo del algoritmo para detectar el balón, para ello es necesario que tengan una noción del manejo del paquete de Matlab así como la creación de los archivos de extensión M. Al final de esta sección voy a pegar los archivos para las funciones aclara y enc_pelota, para que ustedes lo puedan correr en su PC. Cabe mencionar que este tipo de algoritmos se deben de ajustar a las características de la cámara, si lo quieren probar les recomiendo grabar la imagen sin filtrar que he puesto en este blog (bajar imágenes). Si ustedes se ponen a jugar con los valores en hsv pueden lograr aclarar una imagen, en este caso fue necesario porque la iluminación con la que se cuenta en el laboratorio de robótica no es la óptima. Como pueden observar la funcion aclara recibe como parámetro una matriz que contiene la imagen (Ver renglón 1). Después realiza una conversión del espacio de color de RGB a HSV para poder manipular la iluminación de la imagen (Renglón 2). Después de esto obtiene las dimensiones de la imagen para poder aplicarlas en el ciclo for una vez dentro del ciclo recorre todos los pixeles y dentro de cada uno aumenta en


un 20% el valor y disminuye en un 10% la saturación. Esto se realiza para poder tener colores más claros y que los blancos realmente luzcan como un color que pueda ser identificado como blanco y no como un amarillo claro o algun verde deslavado, etc. Una vez que termina el ciclo, convierte la matriz al espacio RGB y la regresa, obteniendo así una imagen similar a la que se encuentra en la parte superior derecha. En este momento se tiene la parte que puede aclarar la imagen para una mejor detección de los colores, ahora lo que se requiere es de una función que pueda "aplanar" los colores. Es decir que si un objeto en la imagen es para el ojo humano un verde, sin tomar encuenta a los daltónicos, el programa lo etiquete con un mismo color para que de esta forma sea de fácil identificación en el formato RGB. La sección que comprende el aplanado de los colores será omitida en la explicación por ser un algoritmo semejante al de la función aclara. La segunda etapa de la función enc_pelota consta de un binarizado. El binarizado se realiza para que la computadora se enfoque en buscar los objetos que cumplan con el color de interés de una forma eficiente enfocándose solamente en el color blanco. Una vez que se tiene una imagen binaria se corre un algoritmo de connected components para determinar cuántas áreas se han encontrado, ya que cabe la posibilidad de que hubiesen objetos del mismo color que la pelota o que se encontrase uno con algún ruido en la imagen que resultase de color anaranjado. Al encontrar las áreas se requiere descartar aquellas áreas que no sean circulares y para ello se selecciona un filtro por áreas, para que las áreas pequeñas no sean consideradas como posibles balones, y finalmente se filtran las áreas por su similitud a un círculo que en este caso se realiza con un cuadrado, considerando que las figuras que entran dentro de un cuadrado son un círculo "perfecto" y un cuadrado. Por esta razón se debe modificar esta parte para que sea comparado únicamente con un círculo, pero bueno ya tienen ustedes la idea de lo que se debe de realizar. Finalmente cuando se identifica el área semejante a un círculo se obtienen las coordenadas de su centroide y se entregan como resultado. A la derecha se muestra parte del algoritmo de enc_pelota, en estos días voy a subir los archivos M, por el momento espero y esto les ayude.
Saludos y suerte!



¿Cómo ponerle cuello y cabeza a tu robonova?

El otro día después de estar buscando unos accesorios para la cmucam3 me topé con el siguiente torreta. Es una forma sencilla de solucionar el problema de los giros de la cámara del robot, es evidente que para este problema hay una inmensa cantidad de soluciones, pero si lo que hace falta es tiempo para hacer un diseño propio o bien si se quiere uno desempolvar la cabeza y dar cabida a soluciones distintas entonces la compra de este equipo se justifica. El giro vertical de la cámara, también conocido como Tilt tiene una capacidad de 45 grados hacia arriba y 45 hacia abajo esto combinado con 180 grados de visión gracias al giro horizontal, Pan, da una gamma bastante amplia de visión para nuestro pequeño robot. Cabe mencionar que la torreta no incluye los servo motores para ambos giros, pero una buena ventaja es que esta torreta se puede acoplar fácilmente al diseño del robonova. (Pendiente...)


Tutorial de ensamble

Tutorial cmucam3 para WinXP


Bueno ahora ya tienes la cámara. Pero no tienes la menor idea de cómo iniciar a programarla o a interactuar con ella. La página principal de la cmucam tiene un pequeño tutorial llamado Quick-Start, para poder familiarizarse uno con la cámara. El principal problema con esta liga es que no llega a especificar bien la necesidad de cada uno de los paquetes a instalar y por lo mismo es muy fácil cometer errores. Este tutorial está basado para computadoras con Windows XP Service Pack 2 de 32 bits.

Equipo requerido
a) Una cámara cmucam3
b) Un cable serial
c) Alimentación, para especificaciones véase página 5.



Inicio del tutorial

El tutorial se divide en cuatro etapas:

1)Instalación del Cygwin.

2)Instalación del LPC2000 Flash Utility. (Pendiente)

3)Instalación del FrameGrabber. (Pendiente)

4)Uso de los programas. (Pendiente)


Instalación de Cygwin

Para poder interactuar con la cámara es necesario descargar el cygwin. Cygwin es un emulador de Linux para Windows. Este se ocupa para poder compilar los programas de la cmucam a través de la instrucción make.


Descarguen el setup.exe, opriman el botón de Run en la pantalla. Descarguen el tutorial Instalación_Cygwin y sigan los pasos. Si no lo pueden descargar por X o Y entonces les imprimo el texto del tutorial, no me hago responsable si es algo confuso sin tener las imágenes.

Tutorial sin imágenes:


Ventana inicial en la que se especifican las generalidades del programa y así como una pequeña introducción al programa instalador. No es necesario que lean esto y si son como la mayor parte de los usuarios de Windows, no perderán su tiempo en leerlo. Opriman Next.
Ventana titulada Choose Installation Type, aquí se obtiene un menú en el que debe uno seleccionar la fuente para obtener el programa. En caso de que hayan obtenido el cygwin a través de un CD instalador, que acompañó a sucmucam entonces seleccionen Install from local directory, en caso contrario denle Install from Internet y opriman Next.
Choose Installation Directory, en esta seleccionen la opción de Install For: All Users y en Default Text File Type seleccionen Unix/binary. Una vez seleccionado esto opriman Next.
Select Local Packcage Directory, aquí seleccionen el directorio C:\ como su directo local. Una vez realizado esto presionen Next.
Select Connection Type, en esta ventana seleccionen el tipo de conexión con el que cuenten y opriman Next.
NOTA: Si no saben qué conexión seleccionar escojan Direct Connection y prueben.
Cygwin Setup, en esta ventana Cygwin tratará de establecer una conexión con algún servidor para poder bajar los paquetes requeridos en el proceso de instalación. Esperen a que termine de establecer la conexión y opriman Next.
Choose Download Site(s), aquí seleccionen la página que más les plazca. En caso de encontrar algún sitio que consideren que este cerca de ustedes, entonces seleccionen ese, en caso contrario el que sea es bueno.
Opriman Next.
Choose Installation Directory, en esta seleccionen la opción de Install For: All Users y en Default Text File Type seleccionen Unix/binary. Una vez seleccionado esto opriman Next.
Select Packages, en esta ventana deben escoger los paquetes a instalar, en caso de que tengan el cygwin en un CD entonces presionen donde muestra el óvalo rojo y verifiquen que diga Install y que todas las pestañas inferiores digan Install. Una vez hecho esto opriman Next.
Si no tienen el CD pasen a la siguiente diapositiva.
Instalación de paquetes por medio de Internet. Maximicen su ventana y dénle click a View hasta que a un lado aparezca la leyenda Full. Después naveguen por la ventana principal y busquen estos paquetes:
make
subversion
openssl
Gcc-core
Para instalarlos denle click a Skip para que aparezca la versión a instalar. Después opriman Next.
Sean pacientes, no se vayan a desesperar esta etapa puede llegar a durar hasta unos 10 minutos en una conexión de internet, rápida.
Si usaron un CD, no se preocupen toma unos segundos.
Una vez terminado esto opriman Next hasta que termine la instalación.

¡Felicidades ya tienes el Cygwin instalado!

Instalación del arm gcc

El arm_gcc es el compilador de C que se utiliza para compilar los programas que se deseen descargar en la cmucam3. Les recomiendo que utilicen este compilador ya que pueden tener problemas al utilizar cualquier otro. Evítense dolores de cabeza. Descargar.

Instalación del Launch LPC210x

El LCP210x es el programa requerido para bajar a la cmucam los archivos hexadecimales generados por el compilador. Lo pueden obtener de aquí. A continuación les paso un tutorial de instalación y uso del programa.

Manual de Instalación y uso (*pps).

Arbol CC3 (Descargar)

Requieren bajar el arbol de archivos CC3. Este folder contiene los programas elementales para la camara. Es necesario que lo bajen y lo coloquen directamente en C:\, ya que de lo contrario pueden llegar a tener problemas. Mejor evítenselos y colóquenlo directamente en el C:\. Una vez que lo colocan. Accesen Cygwin. Tecleen cd c: para que los coloque en la raíz y con cd cc3 entraran al folder. Una vez que esten ahi adentro, tecleen make y presionen Enter. Si todo sale bien compilarán los archivos del folder y obtendran los archivos hexadecimales para poderlos bajar a la cmucam con ayuda del LPC210x.


Por lo pronto es todo,

cualquier queja o duda respecto al tutorial no duden en contactarme.





Robots y más robots




En los últimos años ha tenido mucho auge la famosa robocopa, este julio se llevará a cabo en Souzhou, China y no China, Nuevo León para que no se molesten en comprar su boleto de camión. Las especificaciones de cada una de las categoriás las pueden encontrar en la página oficial de la copa. Por lo pronto tengo como objetivo participar en la copa para el año 2009 y por lo mismo decidí abrir este blog y compartir muchos de los problemas y avances que me he topado a través de esta investigación. En este momento cuento con dos Robonovas y dos cmucam3, por lo mismo la mayor parte de la información compartida se enfocará a estos equipos. Si llegan a tener alguna duda sobre algún otro tipo de robot háganmela saber y haré lo que pueda para ayudarlos a que no se queden pelones. Este modelo de robot lo pueden conseguir en la página oficial de HiTec, o en miles de otros lugares. El dá de ayer me topé con uno de estos en ebay, costaba alrededor de trescientos dólares, el precio oficial de estos aparatos anda alrededor de los mil dólares. Lo que ven en la imagen de la derecha es precisamente el paquete que recibirán, no se esperen un robot armado y estén preparados a pasarse unas horas sentados poniendo miles de tornillos y cientos de cablecitos. El Robonova es un robot que está muy lejos de ser autónomo y por lo mismo es necesario estar listos para hacer más gastos y obtener sensores apropiados para poder interactuar con el medio. Dentro de las especificaciones de la liga de robots humanoides se establece que el robot debe de asemejarse a un ser humano, por lo tanto no se permiten sensores de ultrasonido, de calor, láser, etc. Todos aquellos receptores que tenga el robot deben de ser similares a cualquiera de los cinco sentidos del ser humano y deben ser colocados de acuerdo a la estructura humana, es decir si se le coloca una cámara al robot, ésta debe de ir en la parte superior del cuerpo y tener un rango de visión similar al de un humano. Por lo pronto los dejo, más tarde los pongo al tanto de los robots Nao que son los que reemplazaron a los AIBOS en la copa. Yo nunca fui fan de los AIBOS de SONY, siempre se me hicieron torpes, feos y caros; pero esta sustitución francesa busca crear competencias entretenidas y retadoras. Les dejo con la imagen del nao y espero en un futuro poderlos asistir en el desarrollo de software para estos monigotes europeos.


cmucam3

Este es el nuevo juguete desarrollado por Carnegie Mellon University, ha recibido muchos halagos por parte de la comunidad programadora. La cámara es una CMOS de Omnivision. Esta herramienta presenta grandes ventajas, por el hecho de tener un slot para tarjetas flash MMC. Versiones anteriores a esta han sido utilizadas en la competencia anual de robots humanoides, conocida como Robocup. El costo de la cmucam3 es de alrededor de 240 dólares. El único lugar que he encontrado hasta ahora que maneje esta cámara es Seattle Robotics.
El paquete solamente incluye la cámara, la tarjeta con el microcontrolador y el cable para la comunicación serial. La cmucam3 al igual que la cmucam2 cuenta con cuatro salidas para servo motores. La gran ventaja de esta nueva versión es la habilidad de poder portar el programa en la tarjeta flash, sin embargo las versiones anteriores a esta, también son buenas. Personalmente he tenido la oportunidad de trabajar con las últimas dos generaciones. Actualmente he tenido problemas con la programación de esta nueva versión, pero pronto haré un pequeño tutorial para que no se queden calvos por haber invertido 240 dolares en un aparato que aparentemente no responde.

Las especificaciones de la cámara son las siguientes:
  • 100% open source y programable con GCC
  • Resolución (352x288) RGB color.
  • Open source para el desarrollo tanto en Windows como Linux
  • MMC/SD flash slot con driver FAT16
  • Four-port servo controller
  • Image processing rate of 26 frames per second
  • Interpretador Lua para realizar prototipos de forma rápida.
  • Software para la compresión JPEG.
  • Librería para la manipulación básica de imágenes
  • B/W Salida análoga de video (PAL or NTSC)
  • FIFO buffer de imágenes
  • Wireless Mote interface de red inalámbrica (802.15.4)
  • virtual-cam para hacer prototipos en la PC
  • CMUcam3-Frame-Grabber para tomar imágenes y desplegarlas en la PC