Difference between revisions of "Isidoro-TFM-Rovio02"

From robotica.unileon.es
Jump to: navigation, search
m
m
 
(38 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Imagen:rovio_robot.jpg|thumb|right|200px|Rovio, la cámara web móvil.]]
+
* '''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]
  
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]. La aplicación será desarrollada enteramente en [http://es.wikipedia.org/wiki/C_%28lenguaje_de_programaci%C3%B3n%29 lenguaje C].
 
  
== Introducción ==
+
=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...
 
Pendiente de redacción...
  
== OpenCV ==
+
=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, [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.
+
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]]).
  
=== Instalación de la biblioteca ===
+
=Segmentación de la imagen=
  
Para realizar la instalación de cualquier aplicación o biblioteca en GNU/Linux lo más cómodo suele ser utilizar los paquetes correspondientes. Los usuarios de Ubuntu pueden usar Synaptic (''Sistema/Administración/Gestor de paquetes Synaptic'') que es la interfaz gráfica por defecto en estos momentos para gestionar los paquetes, aunque también se puede instalar desde la línea de comandos de un terminal:
+
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]]).
  
<geshi lang=Bash lines=0>~$ sudo aptitude install libcv4 libhighgui4 libcvaux4 libcv-dev libhighgui-dev libcvaux-dev opencv-doc</geshi>
+
=Seguimiento de objetos=
  
Los tres primeros paquetes corresponden a la biblioteca propiamente dicha, por tanto son imprescindibles. Los tres siguientes con el sufijo ''-dev'' son los ficheros de desarrollo que también los necesitaremos si queremos desarrollar aplicaciones con esta biblioteca. El último paquete contiene programas de ejemplo y documentación sobre OpenCV y aunque no es imprescidible para trabajar, sí que es recomendable como fuente de consulta. Si se quiere contar con la última versión de las bibliotecas se puede realizar una instalación manual de las mismas a partir de sus fuentes siguiendo el proceso descrito para tal fin en [http://opencv.willowgarage.com/wiki/InstallGuide WillowGarage].
+
(Trabajo en curso) -> Pendiente de redacción
  
=== Operaciones básicas ===
+
=Anexos=
  
Una vez que tenemos preparado el sistema con todo el software necesario, es el momento de la primera toma de contacto con OpenCV. Este apartado no pretende ser un tutorial completo y exahustivo sobre cada una de las funciones que posee OpenCV si no más bien un sendero abierto que conduce directamente hacia el objetivo principal de este trabajo. Y lo mejor es comenzar poco a poco de manera que nuestra primera incursión sea lo menos traumática posible. Por tanto, los primeros programas que vamos a desarrollar consistirán en una serie de operaciones básicas que conviene aprender bien al principio pues serán imprescidibles para el desarrollo de la aplicación.
+
==Anexo A: Configuración de ROVIO==
  
Las primeras operaciones que se realizarán serán mostrar una imagen y un vídeo que están guardados en el disco duro e interceptar el flujo de vídeo de una cámara para mostrarlo en pantalla.  
+
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.  
  
'''Mostrar una imagen en pantalla'''
+
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 código que se muestra a continuación nos muestra en pantalla la imagen que reciba como argumento en la línea de comandos.
+
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.
  
<geshi lang=C lines=0>#include "highgui.h"
+
==Anexo B: Cambios en el software "RovioCWrapProject"==
   
 
int main(int argc, char* argv[])
 
{
 
  
IplImage *img = cvLoadImage(argv[1]);
+
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.
  
cvNamedWindow("imagen", CV_WINDOW_AUTOSIZE); // Crea la ventana donde mostrar la imagen
+
'''12/12/2011'''
cvShowImage("imagen", img); // Muestra la imagen en la ventana creada anteriormente.
 
  
cvWaitKey(0); // Espera que se pulse una tecla.
+
* 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.
  
cvReleaseImage( &img ); // Retira la imagen de la ventana.
+
* Modificada la función ''tracking'' del fichero ''rcwp.c'' para incluir movimientos de avance y retroceso para interaccionar respecto de la pelota.
cvDestroyWindow("imagen"); // Libera la memoria.
 
  
return 0;
+
* Eliminada la función ''centroide_pelota'' en el fichero ''rcwp.c''. Ahora el centroide de la pelota se calcula en el segmentador.
}</geshi>
 
  
Si guardamos este código con el nombre ''ejemplo_01.c'' y lo compilamos con g++ de la forma:
+
* 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.
  
<geshi lang=Bash lines=0>~$ g++ -o ejemplo_01 ejemplo_01.c -Wall -I /usr/include/opencv -L /usr/lib -lm -lhighgui</geshi>
+
* 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''.
  
deberíamos poder obtener un fichero que ejecutaríamos mediante la orden
+
* Separado segmentador de la función ''main'' a un fichero independiente (''segmentador.c'' y su cabecera correspondiente).
  
<geshi lang=Bash lines=0>~$./ejemplo_01 mi-imagen.xxx</geshi>
+
* La ventana ''HSV'' se muestra/esconde pulsando la tecla '''t''' (por defecto está escondida).
  
siendo ''mi-imagen.xxx'' el nombre del fichero con la imagen que queremos mostrar. OpenCV soporta formatos de imagen del tipo JPEG, BMP, PNG, PGM y TIFF entre otros. Si todo ha ido bien, se debería ver la ventana creada con la imagen en su interior. Si pulsamos una tecla, la ventana se cierra y finaliza el programa.
+
* Mejorado el filtrado del segmentador (fichero ''segmentador.c''). Ahora funciona mejor incluso en condiciones de luz malas.
  
El código del ejemplo está bien comentado y apenas necesita explicación. Cada vez que se necesite mostrar una imagen en pantalla con OpenCV, el procedimiento será siempre el mismo, tal y como se ve en el ejemplo:
+
'''08/11/2011'''
  
*Se creará una variable de tipo IplImage que guardará la imagen en forma de matriz de puntos y se indicará a la biblioteca que la cargue en memoria mediante la orden ''cvLoadImage''.
+
* Incluido segmentador de imagen en función ''main''.
*Se creará la ventana donde se va a visualizar la imagen. Esto siempre es necesario, siempre hará falta un soporte sobre el que colocar las imágenes. En todo lenguaje de programación que incluya interfaces gráficas es necesario un contenedor donde se ponen o colocan los demás componentes de la interfaz y OpenCV no es una excepción.
 
*Se pedirá a la librería que muestre la imagen dentro de la ventana correspondiente mediante la orden ''cvShowImage''.
 
  
Una vez que ya no se necesite la imagen, será necesario liberar el espacio de memoria que ocupó la imagen para evitar saturarla. Esta operación se realiza mediante las órdenes ''cvReleaseImage'' que elimina la imagen de la ventana que la soporta y ''cvDestroyWindow'' que elimina de la memoria del equipo la ventana que contenía a la imagen mostrada.  
+
* Incluidas ventanas de visualización de ''imagen_cruda'', ''imagen_segmentada'' y ''HSV'' en la interfaz gráfica del programa (fichero ''main.c'').
  
En el ejemplo anterior se podría comprobar que se ha dado el nombre/ruta de una imagen como argumento en la línea de comandos antes de cargar la imagen para no producir un error en tiempo de ejecución. También se podría comprobar que la operación de carga de la imagen ha tenido éxito ---o no--- mediante la adición de código extra, pero se ha preferido evitar esto para mantener el ejemplo lo más simple y claro posible para su mejor entendimiento.
+
* Incluidos deslizadores para seleccionar el color a segmentar (valores máximo y mínimo) en ventana ''imagen_cruda''.
  
'''Abrir un archivo de vídeo'''
+
==Anexo C: ROVIO por dentro==
  
El siguiente ejemplo que se mostrará tratará de abrir un archivo de vídeo almacenado en el disco duro del ordenador para que pueda ser visualizado en pantalla.  
+
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.
  
<geshi lang=C lines=0>#include "highgui.h"
+
* 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.
int main(int argc, char* argv[])
+
* Memoria Principal - 8MB de RAM (datos) y 2MB de flash (código).
{
 
cvNamedWindow("ventana_video", CV_WINDOW_AUTOSIZE);
 
CvCapture* flujo_video = cvCreateFileCapture(argv[1]);
 
IplImage *fotograma;
 
  
while(1){
+
* 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.
fotograma = cvQueryFrame(flujo_video);
 
if (!fotograma) break;
 
cvShowImage("ventana_video", fotograma);
 
  
cvWaitKey(0);
+
* 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.
}
 
  
cvReleaseCapture( &flujo_video );
+
* 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).
cvReleaseImage( &fotograma );
 
cvDestroyWindow("ventana_video");
 
  
return 0;
+
* 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.
}</geshi>
 
  
=== Seguimiento de colores ===
+
* 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].
  
Pendiente de redacción
+
* 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].
  
== Anexos ==
+
=Referencias(?)=
=== Anexo A: Configuración de ROVIO ===
 
  
 
Pendiente de redacción
 
Pendiente de redacción
  
=== Anexo B: Comandos de control de ROVIO(?) ===
+
=Enlaces Externos(?)=
  
 
Pendiente de redacción
 
Pendiente de redacción
  
=== Anexo C: Hardware de ROVIO(?) ===
+
[[M%C3%A1s_informaci%C3%B3n|Más información]]
  
Pendiente de redacció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


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

Más información

Seguir leyendo