Difference between revisions of "Isidoro-TFM-Rovio02"
WikiSheriff (talk | contribs) |
m |
||
(47 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | * '''Project Name:''' | + | * '''Project Name:''' Rovio en tareas de vigilancia |
+ | * '''Author:''' Isidoro Gayo Vélez | ||
+ | * '''Academic Year:''' 2011-2012 | ||
+ | * '''Degree:''' Graduate | ||
+ | * '''Tags:''' rovio, visual control | ||
+ | * '''Technologies:''' c, openCV, qt | ||
+ | * '''Status:''' Discontinued | ||
+ | * '''Source License:''' [http://www.gnu.org/licenses/gpl-3.0-standalone.html GPLv3] | ||
− | |||
− | + | =Resumen= | |
− | + | El trabajo que aquí se va a presentar trata sobre la aplicación del robot ROVIO de la empresa [http://www.wowwee.com/en/support/rovio Wowwee Technologies] a tareas de vigilancia. Para ello se utilizará la biblioteca de visión artificial [http://es.wikipedia.org/wiki/OpenCV ''OpenCV''], que será la encargada de procesar la información proviniente de la cámara wifi de ROVIO en un ordenador portátil. Como sistema operativo de base para el desarrollo de esta aplicación se utilizará [http://es.wikipedia.org/wiki/GNU/Linux GNU/Linux], en concreto la distribución [http://www.ubuntu.com/ Ubuntu Lucid]. La aplicación será desarrollada enteramente en [http://es.wikipedia.org/wiki/C_%28lenguaje_de_programaci%C3%B3n%29 lenguaje C]. | |
− | + | =Introducción= | |
− | + | Pendiente de redacción... | |
− | + | =OpenCV= | |
− | + | Si se desea profundizar en OpenCV hay varias fuentes de donde obtener información. Una de ellas es el libro [http://www.amazon.com/Learning-OpenCV-Computer-Vision-Library/dp/0596516134/ref=sr_1_1?ie=UTF8&qid=1299591736&sr=8-1 ''Learning OpenCV: Computer Vision with the OpenCV Library''] escrito por Gary Bradski y Adrian Kaehler y publicado por la editorial O'Really. En la página web de OpenCV, [http://opencv.willowgarage.com/wiki/ WillowGarage], también existe abundante información para quienes no dispongan del libro en cuestión. Y en la Red hay numerosa información relacionada con el uso de la biblioteca, que si bien puede estar más o menos desperdigada, también supone una buena fuente de consulta. Por último, los ejemplos que se incluyen en la biblioteca también son una fuente de informacación utilísima. En el desarrollo de este trabajo se han utilizado todas estas fuentes en mayor o menor medida (seguir seguir leyendo [[OpenCV]]). | |
− | + | =Segmentación de la imagen= | |
− | + | El procesamiento de imagen digital suele comprender varios pasos intermedios antes de tener una imagen útil con la que el robot pueda realizar algún tipo de acción. Este procesamiento es necesario porque la cantidad de información proviniente de una imagen tomada desde una cámara es enorme y significaría una carga en la cpu de nuestro robot innecesaria (seguir leyendo [[Segmentación de la imagen]]). | |
− | + | =Seguimiento de objetos= | |
− | - | + | (Trabajo en curso) -> Pendiente de redacción |
− | ---- | + | =Anexos= |
+ | |||
+ | ==Anexo A: Configuración de ROVIO== | ||
+ | |||
+ | El proceso de configuración de Rovio viene perfectamente explicado en el manual que se adjunta con el robot, por lo que se remite al lector a dicho manual o a su versión electrónica, descargable desde la web del [http://www.wowwee.com/static/support/rovio/manuals/Rovio_Manual_(for_v5.00_firmware).pdf fabricante] o desde [http://www.robocommunity.com/download/file/14279-77 Robocomunity]. No obstante, conviene remarcar un par de cosas a tener en cuenta para dicha configuración. | ||
+ | |||
+ | Rovio se puede configurar tanto mediante el [http://www.wowwee.com/static/support/rovio/software/RovioSoftwareInstaller_v2.3.zip programa] suministrado por el fabricante como de forma manual. El programa sólo funciona en entornos Windows, por lo que habrá que tener disponible un ordenador con este sistema operativo si nos decidimos por la instalación automática. La instalación manual mediante protocolo ad-hoc puede resultar más compleja para quien no esté familiarizado con estas cosas, pero tampoco entraña dificultad alguna. | ||
+ | |||
+ | El segundo punto a comentar es que no se debe olvidar dejar desmarcada la opción ''Enable User Authentication'' de la solapa ''Security'' en el menú de configuración de Rovio, tal y como se muestra en la imagen adjunta, ya que de lo contrario, jamás recibiremos imagen alguna enviada desde Rovio a nuestro software de envoltorio. Esta es una información adquirida experimentalmente de forma dolorosa, ya que hizo perder varios días de desarrollo hasta que se cayó en la cuenta. | ||
+ | |||
+ | ==Anexo B: Cambios en el software "RovioCWrapProject"== | ||
+ | |||
+ | Lo que figura a continuación quiere ser una especie de ''changelog'' con los cambios más importantes que se han realizado en el código inicial que figura en el repositorio de Rovio a fin de poder tener una perspectiva de los pasos llevados a cabo durante el desarrollo de este trabajo. | ||
+ | |||
+ | '''12/12/2011''' | ||
+ | |||
+ | * Modificada la función ''rovioAccion'' del fichero ''rcwp.c'' para incluir posibilidad de consultar a Rovio la resolución de la cámara y los fotogramas por segundo (fps) a los que nos va a enviar las imágenes. Inicialmente estos valores se incluían en el código directamente. Ahora no es necesario cambiarlos a mano, el programa los actualiza automáticamente. | ||
+ | |||
+ | * Modificada la función ''tracking'' del fichero ''rcwp.c'' para incluir movimientos de avance y retroceso para interaccionar respecto de la pelota. | ||
+ | |||
+ | * Eliminada la función ''centroide_pelota'' en el fichero ''rcwp.c''. Ahora el centroide de la pelota se calcula en el segmentador. | ||
+ | |||
+ | * Eliminados los deslizadores de selección de color en ventana principal (''imagen_cruda'') y sustituidos por selección de color mediante clic izquierdo de ratón. | ||
+ | |||
+ | * Se puede ajustar el margen de tolerancia del color (valores máximo y mínimo como antes) mediante deslizador en torno al color seleccionado con el ratón. Esta tolerancia se mide en píxeles y está comprendida entre 0 y 100. El margen de variación del color estará comprendido entre ''color seleccionado - tolerancia'' y ''color seleccionado + tolerancia''. | ||
+ | |||
+ | * Separado segmentador de la función ''main'' a un fichero independiente (''segmentador.c'' y su cabecera correspondiente). | ||
+ | |||
+ | * La ventana ''HSV'' se muestra/esconde pulsando la tecla '''t''' (por defecto está escondida). | ||
+ | |||
+ | * Mejorado el filtrado del segmentador (fichero ''segmentador.c''). Ahora funciona mejor incluso en condiciones de luz malas. | ||
+ | |||
+ | '''08/11/2011''' | ||
+ | |||
+ | * Incluido segmentador de imagen en función ''main''. | ||
+ | |||
+ | * Incluidas ventanas de visualización de ''imagen_cruda'', ''imagen_segmentada'' y ''HSV'' en la interfaz gráfica del programa (fichero ''main.c''). | ||
+ | |||
+ | * Incluidos deslizadores para seleccionar el color a segmentar (valores máximo y mínimo) en ventana ''imagen_cruda''. | ||
+ | |||
+ | ==Anexo C: ROVIO por dentro== | ||
+ | |||
+ | Los datos que se muestran a continuación no están basados en ninguna especificación oficial porque no hay ninguna publicada, si no que están recogidos y ordenados de varios sitios web dedicados a ROVIO o a temas relacionados con él, principalmente de [http://www.deviceguru.com/mobile-robot-packs-wireless-web-cam/ Device Guru] y [http://www.robocommunity.com/article/15281/WowWee-Rovio-Resources-Reviews-Hacks-Conversations-and-More/ RoboComunity]. Se añaden al cuerpo del trabajo como anexo porque se considera que podrían ser interesantes de cara a una potencial y futura modificación o hackeo de ROVIO, de manera que su manejo y configuración se pueda realizar de forma completamente independiente de la plataforma software que se utilice. | ||
+ | |||
+ | * Procesador principal - [http://www.marvell.com/ Marvell] "PXA270M", de la familia ''Xcale''. | ||
+ | * Frecuencia de Reloj - Hay un cristal de 24 Mhz y se puede ver otro de 12 cerca del primero. | ||
+ | * Memoria Principal - 8MB de RAM (datos) y 2MB de flash (código). | ||
+ | |||
+ | * Hay al menos dos puertos serie (UARTs) en el robot, el /dev/ser0 que se usa como puerto "NS" para comunicar el sub-sistema North Star, y el /dev/ser1 que parece manejar los comandos "MCU" para el control del motor. Envía los datos a la placa de motores en el cuerpo principal del robot. | ||
+ | |||
+ | * El puerto USB del robot se puede usar de dos formas diferentes. Si se conecta el USB al ordenador antes de encender el robot, los 2Mb de memoria flash aparecerán como un volumen de disco sin formatear. Este método es peligroso pues podría dejar al robot totalmente inservible si se procediese al formateo. En el segundo caso, si se conecta el USB después de que se enciende el robot, el puerto proporciona una conexión serie que es necesaria par la conficuración inicial de ROVIO. | ||
+ | |||
+ | * El procesador ARM ejecuta el servidor web, controla la webcam, el flujo de audio y vídeo (flujo multimedia) y realiza el control general del robot. Ejecuta el sistema operativo de fuente-abierta [http://ecos.sourceware.org/ "eCOS"]. El servidor del flujo multimedia está basado en una variante del servidor de flujo [http://www.litech.org/spook/ "Spook"]. Utiliza el protocolo [http://es.wikipedia.org/wiki/Real_Time_Streaming_Protocol "RTSP"] para enviar el audio y vídeo desde la cámara web y micrófono de ROVIO a nuestro ordenador. El envío del audio desde el ordenador al ROVIO (para ser reproducido en el altavoz del robot) se realiza mediante un método propietario (ver GetAudio.cgi en el API del robot). | ||
+ | |||
+ | * Las características WiFi están basadas en la biblioteca "Libertas" de Marvell. Se conecta a características WiFi especiales del procesador ARM Marvell. Estás características son muy hackeables/modificables en el programa principal. Se puede aceder a la memoria RAM directamente usando URLs especiales. | ||
+ | |||
+ | * La programación de alto nivel del robot es posible utilizando URLs especiales bien desde una aplicación independiente del navegador o bien desde dentro de una página web mediante JavaScript. WowWee ha publicado especificaciones para la mayor parte de las URLs posibles. Las especificaciones del API se pueden encontrar en la página web de [http://www.wowwee.com/static/support/rovio/manuals/Rovio_API_Specifications_v1.2.pdf WowWee Techonologies]. Existe un duplicado de las mismas en [http://www.robocommunity.com/download/14278/WowWee-Rovio-API-Specifications-v1.2/ RoboCommunity]. | ||
+ | |||
+ | * Dentro de ROVIO (en el segmento superior del cuello, justo detrás de la cámara web) está el detector NorthStar que forma parte del sistema TrueTrack(tm) para localizar al robot en una habitación respecto de un faro (o punto fijo). Es un módulo separado que tiene su propio procesador digital de señal como cerebro. Se conecta a la CPU principal mediante un puerto serie. Se puede leer más sobre NorthStar aquí [http://www.evolution.com/products/northstar/ http://www.evolution.com/products/northstar/]. Se puede encontrar información relacionada con modificaciones en el sistema TrueTrack(tm) en este enlace [http://www.thingiverse.com/thing:7101 http://www.thingiverse.com/thing:7101]. | ||
+ | |||
+ | * La cámara web usada en el ROVIO es una OV7670 de la firma [http://www.ovt.com/products/part_detail.asp?id=53 OmniVision], aunque hay que decir que el firmware incluido en el robot puede controlar otros modelos. | ||
+ | |||
+ | * El códec de audio y el controlador del altavoz están basados en el integrado WM8976, fabricado por [http://www.wolfsonmicro.com/ Wolfson Microelectronics]. Se puede acceder sin problemas a su hoja de características a través de una búsqueda en internet, ya que en su página web parece no encontrarse disponible. | ||
+ | |||
+ | * Un integrado marcado como 8051uC (WinBond W99100DG) parece proporcionar cierto control periférico pero los detalles están pendientes de conformación. | ||
+ | |||
+ | * En la página web de [http://www.robocommunity.com/download/file/17502-339 RoboCommunity] se encuentran publicados los ficheros fuente del código interno de ROVIO. Estas fuentes han sido publicadas recientemente por WowWee Technologies y permiten modificar y reprogramar parcialmente el comportamiento de ROVIO. En este [http://www.robocommunity.com/forum/thread/17516/Rovio-eCos-Code-Discussion-and-Brainstorming/ hilo] del foro de RoboCommunity se puede encontrar información relacionada con el sistema operativo eCos y el código fuente de ROVIO para este sistema. | ||
+ | |||
+ | * Finalmente, se comenta que existe un envoltorio (wrapper) para poder operar/interactuar con ROVIO mediante el sistema operativo [http://www.ros.org ROS]. | ||
+ | |||
+ | =Referencias(?)= | ||
+ | |||
+ | Pendiente de redacción | ||
+ | |||
+ | =Enlaces Externos(?)= | ||
+ | |||
+ | Pendiente de redacción | ||
+ | |||
+ | [[M%C3%A1s_informaci%C3%B3n|Más información]] | ||
+ | |||
+ | [[Seguir_leyendo|Seguir leyendo]] |
Latest revision as of 10:52, 25 June 2014
- Project Name: Rovio en tareas de vigilancia
- Author: Isidoro Gayo Vélez
- Academic Year: 2011-2012
- Degree: Graduate
- Tags: rovio, visual control
- Technologies: c, openCV, qt
- Status: Discontinued
- Source License: GPLv3
Contents
Resumen
El trabajo que aquí se va a presentar trata sobre la aplicación del robot ROVIO de la empresa Wowwee Technologies a tareas de vigilancia. Para ello se utilizará la biblioteca de visión artificial OpenCV, que será la encargada de procesar la información proviniente de la cámara wifi de ROVIO en un ordenador portátil. Como sistema operativo de base para el desarrollo de esta aplicación se utilizará GNU/Linux, en concreto la distribución Ubuntu Lucid. La aplicación será desarrollada enteramente en lenguaje C.
Introducción
Pendiente de redacción...
OpenCV
Si se desea profundizar en OpenCV hay varias fuentes de donde obtener información. Una de ellas es el libro Learning OpenCV: Computer Vision with the OpenCV Library escrito por Gary Bradski y Adrian Kaehler y publicado por la editorial O'Really. En la página web de OpenCV, WillowGarage, también existe abundante información para quienes no dispongan del libro en cuestión. Y en la Red hay numerosa información relacionada con el uso de la biblioteca, que si bien puede estar más o menos desperdigada, también supone una buena fuente de consulta. Por último, los ejemplos que se incluyen en la biblioteca también son una fuente de informacación utilísima. En el desarrollo de este trabajo se han utilizado todas estas fuentes en mayor o menor medida (seguir seguir leyendo OpenCV).
Segmentación de la imagen
El procesamiento de imagen digital suele comprender varios pasos intermedios antes de tener una imagen útil con la que el robot pueda realizar algún tipo de acción. Este procesamiento es necesario porque la cantidad de información proviniente de una imagen tomada desde una cámara es enorme y significaría una carga en la cpu de nuestro robot innecesaria (seguir leyendo Segmentación de la imagen).
Seguimiento de objetos
(Trabajo en curso) -> Pendiente de redacción
Anexos
Anexo A: Configuración de ROVIO
El proceso de configuración de Rovio viene perfectamente explicado en el manual que se adjunta con el robot, por lo que se remite al lector a dicho manual o a su versión electrónica, descargable desde la web del fabricante o desde Robocomunity. No obstante, conviene remarcar un par de cosas a tener en cuenta para dicha configuración.
Rovio se puede configurar tanto mediante el programa suministrado por el fabricante como de forma manual. El programa sólo funciona en entornos Windows, por lo que habrá que tener disponible un ordenador con este sistema operativo si nos decidimos por la instalación automática. La instalación manual mediante protocolo ad-hoc puede resultar más compleja para quien no esté familiarizado con estas cosas, pero tampoco entraña dificultad alguna.
El segundo punto a comentar es que no se debe olvidar dejar desmarcada la opción Enable User Authentication de la solapa Security en el menú de configuración de Rovio, tal y como se muestra en la imagen adjunta, ya que de lo contrario, jamás recibiremos imagen alguna enviada desde Rovio a nuestro software de envoltorio. Esta es una información adquirida experimentalmente de forma dolorosa, ya que hizo perder varios días de desarrollo hasta que se cayó en la cuenta.
Anexo B: Cambios en el software "RovioCWrapProject"
Lo que figura a continuación quiere ser una especie de changelog con los cambios más importantes que se han realizado en el código inicial que figura en el repositorio de Rovio a fin de poder tener una perspectiva de los pasos llevados a cabo durante el desarrollo de este trabajo.
12/12/2011
- Modificada la función rovioAccion del fichero rcwp.c para incluir posibilidad de consultar a Rovio la resolución de la cámara y los fotogramas por segundo (fps) a los que nos va a enviar las imágenes. Inicialmente estos valores se incluían en el código directamente. Ahora no es necesario cambiarlos a mano, el programa los actualiza automáticamente.
- Modificada la función tracking del fichero rcwp.c para incluir movimientos de avance y retroceso para interaccionar respecto de la pelota.
- Eliminada la función centroide_pelota en el fichero rcwp.c. Ahora el centroide de la pelota se calcula en el segmentador.
- Eliminados los deslizadores de selección de color en ventana principal (imagen_cruda) y sustituidos por selección de color mediante clic izquierdo de ratón.
- Se puede ajustar el margen de tolerancia del color (valores máximo y mínimo como antes) mediante deslizador en torno al color seleccionado con el ratón. Esta tolerancia se mide en píxeles y está comprendida entre 0 y 100. El margen de variación del color estará comprendido entre color seleccionado - tolerancia y color seleccionado + tolerancia.
- Separado segmentador de la función main a un fichero independiente (segmentador.c y su cabecera correspondiente).
- La ventana HSV se muestra/esconde pulsando la tecla t (por defecto está escondida).
- Mejorado el filtrado del segmentador (fichero segmentador.c). Ahora funciona mejor incluso en condiciones de luz malas.
08/11/2011
- Incluido segmentador de imagen en función main.
- Incluidas ventanas de visualización de imagen_cruda, imagen_segmentada y HSV en la interfaz gráfica del programa (fichero main.c).
- Incluidos deslizadores para seleccionar el color a segmentar (valores máximo y mínimo) en ventana imagen_cruda.
Anexo C: ROVIO por dentro
Los datos que se muestran a continuación no están basados en ninguna especificación oficial porque no hay ninguna publicada, si no que están recogidos y ordenados de varios sitios web dedicados a ROVIO o a temas relacionados con él, principalmente de Device Guru y RoboComunity. Se añaden al cuerpo del trabajo como anexo porque se considera que podrían ser interesantes de cara a una potencial y futura modificación o hackeo de ROVIO, de manera que su manejo y configuración se pueda realizar de forma completamente independiente de la plataforma software que se utilice.
- Procesador principal - Marvell "PXA270M", de la familia Xcale.
- Frecuencia de Reloj - Hay un cristal de 24 Mhz y se puede ver otro de 12 cerca del primero.
- Memoria Principal - 8MB de RAM (datos) y 2MB de flash (código).
- Hay al menos dos puertos serie (UARTs) en el robot, el /dev/ser0 que se usa como puerto "NS" para comunicar el sub-sistema North Star, y el /dev/ser1 que parece manejar los comandos "MCU" para el control del motor. Envía los datos a la placa de motores en el cuerpo principal del robot.
- El puerto USB del robot se puede usar de dos formas diferentes. Si se conecta el USB al ordenador antes de encender el robot, los 2Mb de memoria flash aparecerán como un volumen de disco sin formatear. Este método es peligroso pues podría dejar al robot totalmente inservible si se procediese al formateo. En el segundo caso, si se conecta el USB después de que se enciende el robot, el puerto proporciona una conexión serie que es necesaria par la conficuración inicial de ROVIO.
- El procesador ARM ejecuta el servidor web, controla la webcam, el flujo de audio y vídeo (flujo multimedia) y realiza el control general del robot. Ejecuta el sistema operativo de fuente-abierta "eCOS". El servidor del flujo multimedia está basado en una variante del servidor de flujo "Spook". Utiliza el protocolo "RTSP" para enviar el audio y vídeo desde la cámara web y micrófono de ROVIO a nuestro ordenador. El envío del audio desde el ordenador al ROVIO (para ser reproducido en el altavoz del robot) se realiza mediante un método propietario (ver GetAudio.cgi en el API del robot).
- Las características WiFi están basadas en la biblioteca "Libertas" de Marvell. Se conecta a características WiFi especiales del procesador ARM Marvell. Estás características son muy hackeables/modificables en el programa principal. Se puede aceder a la memoria RAM directamente usando URLs especiales.
- La programación de alto nivel del robot es posible utilizando URLs especiales bien desde una aplicación independiente del navegador o bien desde dentro de una página web mediante JavaScript. WowWee ha publicado especificaciones para la mayor parte de las URLs posibles. Las especificaciones del API se pueden encontrar en la página web de WowWee Techonologies. Existe un duplicado de las mismas en RoboCommunity.
- Dentro de ROVIO (en el segmento superior del cuello, justo detrás de la cámara web) está el detector NorthStar que forma parte del sistema TrueTrack(tm) para localizar al robot en una habitación respecto de un faro (o punto fijo). Es un módulo separado que tiene su propio procesador digital de señal como cerebro. Se conecta a la CPU principal mediante un puerto serie. Se puede leer más sobre NorthStar aquí http://www.evolution.com/products/northstar/. Se puede encontrar información relacionada con modificaciones en el sistema TrueTrack(tm) en este enlace http://www.thingiverse.com/thing:7101.
- La cámara web usada en el ROVIO es una OV7670 de la firma OmniVision, aunque hay que decir que el firmware incluido en el robot puede controlar otros modelos.
- El códec de audio y el controlador del altavoz están basados en el integrado WM8976, fabricado por Wolfson Microelectronics. Se puede acceder sin problemas a su hoja de características a través de una búsqueda en internet, ya que en su página web parece no encontrarse disponible.
- Un integrado marcado como 8051uC (WinBond W99100DG) parece proporcionar cierto control periférico pero los detalles están pendientes de conformación.
- En la página web de RoboCommunity se encuentran publicados los ficheros fuente del código interno de ROVIO. Estas fuentes han sido publicadas recientemente por WowWee Technologies y permiten modificar y reprogramar parcialmente el comportamiento de ROVIO. En este hilo del foro de RoboCommunity se puede encontrar información relacionada con el sistema operativo eCos y el código fuente de ROVIO para este sistema.
- Finalmente, se comenta que existe un envoltorio (wrapper) para poder operar/interactuar con ROVIO mediante el sistema operativo ROS.
Referencias(?)
Pendiente de redacción
Enlaces Externos(?)
Pendiente de redacción