Difference between revisions of "HectorQ-RV-proy2"
Line 57: | Line 57: | ||
La conversión directa requiere una implementar una función para la conversión de los datos, pero el tiempo que se tarda en obtener la imagen es menor que en el primer caso, y debido a que necesitamos la mayor rapidez posible para la obtención de tiempo real, se ha utilizado la segunda opción. | La conversión directa requiere una implementar una función para la conversión de los datos, pero el tiempo que se tarda en obtener la imagen es menor que en el primer caso, y debido a que necesitamos la mayor rapidez posible para la obtención de tiempo real, se ha utilizado la segunda opción. | ||
+ | |||
+ | <wikiflv width="640" height="480" logo="true">/videos/VideoRovio.flv</wikiflv> | ||
+ | |||
'''4. MOVIMIENTO''' | '''4. MOVIMIENTO''' | ||
Line 74: | Line 77: | ||
Una vez que ya podemos enviar instrucciones de desplazamiento al rovio, lo que se ha hecho es un sistema de teleoperado mediante teclado, para ello a cada una de las teclas se le ha asignado una accción, tal y como se recoge en la API creada, al mismo tiempo que se muestra la "visión" de Rovio en tiempo real. | Una vez que ya podemos enviar instrucciones de desplazamiento al rovio, lo que se ha hecho es un sistema de teleoperado mediante teclado, para ello a cada una de las teclas se le ha asignado una accción, tal y como se recoge en la API creada, al mismo tiempo que se muestra la "visión" de Rovio en tiempo real. | ||
+ | |||
+ | <wikiflv width="640" height="480" logo="true">/videos/Tracking.flv</wikiflv> | ||
VIDEO TELEOPERACION | VIDEO TELEOPERACION | ||
Line 87: | Line 92: | ||
Con esta función se podrá enviar ordenes cualquier tipo de desplazamiento al Rovio así como recibir imagenes del Rovio. Para ello sólo habrá que llamar a la fución pasandole un número, que según una tabla presente en la API creada, indicará la acción a realizar. De este modo todo el proceso de utilización de sockets y conversión de datos en imagenes es transparente para quien use la función. | Con esta función se podrá enviar ordenes cualquier tipo de desplazamiento al Rovio así como recibir imagenes del Rovio. Para ello sólo habrá que llamar a la fución pasandole un número, que según una tabla presente en la API creada, indicará la acción a realizar. De este modo todo el proceso de utilización de sockets y conversión de datos en imagenes es transparente para quien use la función. | ||
− | + | ||
− | |||
<wikiflv width="640" height="480" logo="true">/videos/Teleoperator.flv</wikiflv> | <wikiflv width="640" height="480" logo="true">/videos/Teleoperator.flv</wikiflv> |
Revision as of 08:55, 22 September 2010
- Project Name: RovioCWarpProject
- Authors: Héctor Quintián Pardo and Francisco J. Lera
- Academic Year: 2009-2010
- Degree: Graduate
- Tags: Rovio, wrap
- Technology: c, opencv
- State: Developing
- Source License: GPLv3
- Document License:
FASES DEL PROYECTO
1. INMERSION EN EL MANEJO DEL ROVIO Y OPENCV
En esta fase, simplemente se ha utilizado la documentación adjunta del Rovio, para conocer su manejo y saber así las posibilidades que ofrecía el Rovio para este proyecto, como pueden ser adquisición de imagenes, teleoperación, información de sensores...
En cuanto al manejo de OpenCV, en mi caso ya había trabajado previamente con él, sin embargo me documenté acerca de entre otras una función para el reconocimiento de caras en imagenes, con objeto de usarlo en el proyecto así como para extrapolarlo al reconocimiento de otros objetos, como puede ser el reconocimiento de otro Rovio para seguimiento. Basicamente se ha utilizado la documentación presente en Willowgarage, "Learning OpenCV"[1] y se han consultado distintos articulos referentes al reconocimiento facial, y en concretro al método de Viola and John, simplemente para la comprensión de su funcionamiento, ya que este metodo viene ya implementado en OpenCv.
2. CONFIGURACION CON EL ROVIO
El Rovio ha sido configurado para la comunicación con el ordenador a traves de un router, simplemente siguiendo los pasos indicados en la documentación de configuración del Rovio. También existe la posibilidad de una comunicación directa con el Rovio a traves de Wifi. Aunque el proyecto se ha realizado en el sistema operativo LINUX, la configuración del Rovio se tuvo que hacer en Windows.
3. OBTENCION DE IMAGENES
El proceso que se ha utilizado para tener "visión" con el Rovio ha sido la de solicitar imagenes e ir mostrandolas de forma secuencial, pudiendose hacer a una velocidad de 12 frames/seg.
Existe también la posibilidad de obtener video del Rovio, sin embargo el formato en que es entregado el video, no es soportado por OpenCv, de modo que se optó por la primera alternativa.
Para obtener imagenes del roivo lo normal es escribir en la linea del navegador la siguiente instruccion:
192.168.1.100/Jpeg/CamImg.jpg Donde 192.168.1.100 es la dirección IP asignada al rovio por el Router.
COMUNICACION MEDIANTE SOCKETS
Para la petición de imagenes se ha optado por la comunicación mediante sockets (también sería posible usar curl), ya que de esta forma el programa realizado sería portable a cualquier sistema operativo (curl sólo es valido con sockets). Mediante sockets, se envia en una petición GET el mensaje anterior, recibiendo a continuación los datos que componen la imagen:
"GET /Jpeg/CamImg.jpg HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n",HOST
Una vez que se han almacenado los datos que componen la imagen, tendríamos 2 posibilidades: - Guardar los datos en formato IplImage com una imagen y luego cargar dicha imagen con OpenCV. - Realizar una conversión directa de los datos.
La conversión directa requiere una implementar una función para la conversión de los datos, pero el tiempo que se tarda en obtener la imagen es menor que en el primer caso, y debido a que necesitamos la mayor rapidez posible para la obtención de tiempo real, se ha utilizado la segunda opción.
<wikiflv width="640" height="480" logo="true">/videos/VideoRovio.flv</wikiflv>
4. MOVIMIENTO
Una vez que ya disponemos de imagenes, se ha procedido a la realización de una función para el manejo del Rovio, todos los desplazamientos posibles asi como movimiento de cabeza y recepción de información de los distintos sensores.
El proceso es similar al de obtención de una imagen, ya que también es necesario enviar mediante un GET la siguiente instrucción:
/rev.cgi?Cmd=nav&action=18&drive=d_value&speed=s_value
donde: d_value puede tomar valores entre 0 y 18 dependiendo de la acción que se quiere que realice el rovio. s_value puede tomar valores entre 0 y 10, siendo 0 la máxima velocidad y 10 la mínima.
5. TELEOPERACIÓN DEL ROVIO
Una vez que ya podemos enviar instrucciones de desplazamiento al rovio, lo que se ha hecho es un sistema de teleoperado mediante teclado, para ello a cada una de las teclas se le ha asignado una accción, tal y como se recoge en la API creada, al mismo tiempo que se muestra la "visión" de Rovio en tiempo real.
<wikiflv width="640" height="480" logo="true">/videos/Tracking.flv</wikiflv>
VIDEO TELEOPERACION
6. FUNCIONES IMPLEMENTADAS
Una vez que ya disponemos de las herramientas básicas para el manejo del Rovio, lo que se ha hecho es implementarlo en funciones, de manera que de forma sencilla puedan ser llamadas, y estas devuelvan los datos necesarios, o realicen las acciones pertinentes, de forma que el proceso de envio y recepción de información sea transparente para la persona que utilice dicha función. Las principales funciones implementadas son:
ENLACE AL API
rovioAccion
Con esta función se podrá enviar ordenes cualquier tipo de desplazamiento al Rovio así como recibir imagenes del Rovio. Para ello sólo habrá que llamar a la fución pasandole un número, que según una tabla presente en la API creada, indicará la acción a realizar. De este modo todo el proceso de utilización de sockets y conversión de datos en imagenes es transparente para quien use la función.
<wikiflv width="640" height="480" logo="true">/videos/Teleoperator.flv</wikiflv>