martes, 15 de abril de 2008

Ya tengo las fuentes de vídeo

Tras mucho cacharrear, he conseguido sacar el vídeo frame a frame en formato JPEG, tanto para la imagen real, como para la aumentada. Para esta última he utilizado la función de OpenGl "glReadPixels" [1], la cual captura lo último que se ha pintado OpenGl y lo almacena en un buffer, que posteriormente comprimo a JPEG. Aunque para el proyecto no es el objetivo insertar gráficos aumentados en la imagen pienso que esto podría ser de utilidad para futuros proyectos.

Para la compresión de JPEG he usado la librería libjpeg [2], bastante extendida en el tema.

A continuación se muestra una captura del mismo instante de la imagen real y la aumentada

Imagen real:


Imagen aumentada:


El próximo objetivo será estudiar las apliaciones cliente-servidor y realizar el envío de imágenes entre ambas.

[1] http://www.rootr.net/man/man/glReadPixels/3G
[2] http://en.wikipedia.org/wiki/Libjpeg

lunes, 14 de abril de 2008

Modelando el problema

Buenas,

tras una reunión con mis tutores de proyecto (Arturo y José Pascual), hemos planteado el problema según el siguiente diagrama, donde se propone el desarrollo como un módulo independiente, cuyas entradas y salidas serán:
-Entradas: inicialización del módulo y diferentes comandos con el objetivo de parametrizar la salida.
-Salida: datos de la posición del robot, salida de vídeo real o salida de vídeo aumentado.


Por este tipo de arquitectura, a priori se plantean los siguientes problemas:
-Hacer una apliación clienteso-servidor
-y lo que será mas problemático, comprimir el vídeo en tiempo real y enviarlo.
Para esta última tarea adelanto que trataré de abordarla usando el estandar JPEG. La compliación vendrá si no es capaz de realizar una compresión en tiempo real frame a frame, aunque según parece el cliente-servidor de vídeo que proporciona MobileRobots [1] comprime en tiempo real en JPEG.

En cualquier caso, ya iré contando los progresos.

[1] Aplicacion cliente-servidor de vídeo: http://robots.mobilerobots.com/SAV/

lunes, 7 de abril de 2008

Por fin tengo la imagen!

Algunos compañeros mios tienen el dicho de que "cuando un tonto sigue un camino, el camino acaba pero el tonto sigue". Pero en este caso, aunque parecía que no se podría utilizar la cámara en el proyecto al no ser compatible con DirectShow y este cámino parecia descartardo, indagando en la SDK grauita y limitada que proporcionan los fabricantes de la capturadora, encontré la forma de pasar el buffer que contiene la imagen directamente al artoolkit haciendo uso de los adorables punteros de c++ que suelen dar muchos dolores de cabeza, pero en ocasiones te sacan de muchos lios, como es el caso. La importancia de este hecho radica en que al estar trabajando directamente con la capturadora del robot, en teoría toda cámara conectada a ella trabajaría con Artoolkit, lo cual le da gran flexibilidad a la hora de cambiar la cámara del robot.

Así pues en este punto, las siguentes tareas a realizar son:
- Calibrar la cámara para un mejor uso de artoolkit.
- Manejar el movimiento Pan&Tild y zoom de la cámara.
- Hallar la ditancia y posición del robot basándose en la posición con que vé la marca.
- Empezar a mover el robot sobre un mapa (del I3A a ser posible).
- Integrar y estructurar todo en un proyecto

Dicho esto...manos a la obra!