Proyecto Fin de Carrera

Robótica, software y telecomunicaciones.

Mejoras en moleComp

Hace unos días publicaba unas imágenes donde se podían apreciar mejoras en mi componente moleComp, pero en estos días moleComp sigue avanzando, y bastante.

Antes de seguir, me gustaría abrir un paréntesis para explicar qué es moleComp:

moleComp es un componente integrado en el framework RoboComp desarrollado por RoboLab (laboratorio de robótica de la Escuela Politécnica de Cáceres — Universidad de Extremadura). Su propósito es ayudar a las personas con discapacidad física a realizar los ejercicios de rehabilitación de forma más amena, disfrazándolos de videojuego.

Para conseguir ese objetivo el componente requiere dos puntos de vista en cuanto a exigencias: por un lado desde el punto de vista del paciente moleComp pretende ser ameno, entrañable y divertido; en cambio desde la visión del médico moleComp debe ser flexible, fácil de configurar y versátil.

De forma más concreta, moleComp pretende llevar el típico juego de ferias Whack-a-mole a la realidad aumentada. El juego consiste en unos topos que se esconden en su madriguera y a los cuales el jugador debe golpearles con un martillo cuando salen. Al final de la entrada añado un vídeo del juego en la realidad, para el que no lo conozca.

Por último moleComp podría integrarse a corto plazo en el proyecto URSUS, uniéndose a una lista de juegos/ejercicios que comenzó con sevillaComp, y continuará con futuros PFC.

En el aspecto técnico, me gustaría hacer un resumen de cómo funciona a grandes rasgos moleComp, qué he mejorado los últimos días y qué espero mejorar:

En primer lugar, dentro de RoboComp, moleComp tiene dos proxies que le permiten comunicarse con cameraComp y con kinectComp para obtener la imagen de vídeo de alguna fuente, desde la interfaz del componente podemos cambiar de una fuente vídeo a otra instantáneamente sin necesidad de reiniciar el componente.

moleComp usa varias librerías para distintas funciones:

  • OpenSceneGraph(OSG): Con esta librería creamos el árbol de figuras, cargamos los modelos 3D, programamos las animaciones, etc.
  • ARToolKit: Con esta librería de Realidad Aumentada, podemos realizar el tracking de marcas de manera sencilla. En moleComp también usamos algunas funciones de esta librería para calcular las distancias entre las figuras 3D de OSG.
  • OSGART: Es una librería muy sencilla, pero es necesaria para que podamos controlar las figuras geométricas de OSG con el tracking de ARToolKit. En RoboComp se trabaja para sustituir OSGART por una clase propia que haga lo mismo, de forma que no eliminamos una dependencia externa, y con más motivo cuando OSGART ha sido discontinuada.
  • IPP: Se usan las primitivas de Intel para desarrollar algunas tareas de forma más eficiente.
  • OpenAL: En estos días me estoy planteando usar esta librería de Audio para darle un toque de gracia a moleComp.
Las características de moleComp hasta el momento,  son las siguientes:
  • Cálculo de distancias entre figuras geométricas de OSG.
  • Carga de modelos 3D con semianimación.
  • Interacción con los elementos 3D.
  • Estado aleatorio de los modelos 3D.
  • Puntuación de la interacción.
  • Modificación del entorno, es posible mover los modelos, y hacer zoom en la puntuación.
  • Modificación de los umbrales de interacción.
Las características en las que estoy trabajando ahora son las siguientes:
  • Añadir sonido a la interacción.
  • Mejorar el sistema de puntuaciones.
  • Mejorar los modelos de los topos.
  • Reemplazo del martillo por un modelo.
  • Hacer modificable la velocidad de los topos.
  • Añadir niveles.
Por último añado un vídeo con el que se pueden ver algunas de las características mencionadas:
Y un vídeo del juego en la realidad, por si queréis comparar:
Anuncios

13 julio 2011 Posted by | all | , , , , , , , , | Deja un comentario

Llegó la versión 2.3 de OpenCV

En entradas anteriores comentaba los problemas que nos podemos encontrar al usar distintas versiones de OpenCV, cómo la mayoría del código que podemos encontrar en internet es para OpenCV1.x o OpenCV2.0, mientras que en mi caso particular usaba OpenCV2.2, la más actual hace tan sólo unos días, porque la semana pasada se publicó la versión OpenCV2.3.

Dicha versión parece que como las anteriores, mantiene la compatibilidad hacia atrás conla mayoría de las funciones, pero introduce algunos cambios en otras. Pero en principio no habrá mucho problema dada la aceptación que tienen las nuevas versiones de esta potente librería de computación gráfica, en una semana sólo se ha descargado 50 veces, y la mayoría de esas descargas son la versión de Windows.

Yo por mi parte no perderé el tiempo en actualizar todo mi código a esta nueva versión, pero sí que la tendré en cuenta para futuros proyectos.

Podéis descargarla en el siguiente enlace: http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3/

11 julio 2011 Posted by | all | | Deja un comentario

Novedades en moleComp: OSG + ARToolKit

Hace bastante tiempo que no publico nada, pero eso no quiere decir que no haya avanzado en el PFC, de hecho he avanzado bastante.

El principal problema es la falta de tiempo para escribir debido a mi viaje a Coimbra, estaré aquí trabajando con entornos 3D (ya comentaré en otra entrada mi trabajo en Coimbra con más detalle), a la vez que continúo con mi PFC.

De momento he conseguido obtener la distancia entre marcas, en milímetros. En realidad estoy usando unos valores genéricos de calibración de la cámara por lo que los resultados aún pueden mejorar si aplico mi propia calibración a la cámara que estoy usando.

Os dejo unas capturas de pantalla con mis avances…

6 julio 2011 Posted by | all | , , | 3 comentarios

Problemas con las IPP 7

Parece ser que hace apenas unos meses se publicó la versión 7 de las IPP. Normalmente si vas a la página de Intel se te descargará la última versión, esto no es un problema dependiendo de la versión del S.O. utilizado.

En mi caso estoy usando Ubuntu 10.10 (64 bits), que es la versión instalada actualmente en los ordenadores de RoboLab, sim embargo la última versión soportada por Intel IPP 7 es la versión Ubuntu 10.04 LTS.

En mi caso al intentar instalarlas me salía el sguiente mensaje:

--------------------------------------------------------------------------------
Detected operating system is not supported. Supported operating systems for this
release include:
    - Red Hat Enterprise Linux* 4.0, 5.0, 6.0 (IA-32/Intel(R) 64)
    - Fedora* 12, 13 (IA-32/Intel(R) 64)
    - SuSE Linux* Enterprise Server* 10.x, 11.0 (IA-32)
    - SuSE Linux* Enterprise Server* 10.0, 11.1 SP1 (Intel(R) 64)
    - Asianux* Server 3.0 (IA-32/Intel(R) 64)
    - Ubuntu* 10.04 (IA-32/Intel(R) 64)
    - Debian 5.0 (IA-32/Intel(R) 64)
--------------------------------------------------------------------------------
1. Finish with prerequisites and continue installation [default]
2. Back to Pre-requisite summary dialog

h. Help
b. Back to the previous menu
q. Quit
--------------------------------------------------------------------------------
Please type a selection or press "Enter" to accept default choice [1]:

Pues no hay problema volvemos a la página de Intel y nos aseguramos que estamos descargando la versión de las IPP 6.1.

1 julio 2011 Posted by | all | | Deja un comentario

Diferencia de bucle for en C y C++

Esta es un pequeño consejo de Pablo Manzano Gómez, que a él le acarreó algunos problemillas al usar por primera vez código de ejemplos de ARToolKit que estaban escritos en C y él quería pasarlos a su aplicación en C++.

El código en cuestión es del tipo:

for(i=0, a=1; i<30; i++)
{}

El código anterior se interpreta de forma distinta en C y en C++, en el caso de C, sería lo mismo que el siguiente código:

a=1;
for(i=0; i<30; i++)
{}

En cambio en C++, el código se interpreta como el que sigue:

for(i=0; i<30; i++)
{a=1;}

29 junio 2011 Posted by | all | , | Deja un comentario

Instalar ARToolKit en Ubuntu y usar en RoboComp

En el blog Simocap de José Alberto Gandullo se explica perfectamente cómo instalar ARToolKit en Ubuntu, sin embargo me gustaría añadir algunas notas que me comentó Luiky.

El método de instalación que se menciona en Simocap es para la versión de 32bits de Ubuntu, aunque en realidad podría servir para varias distribuciones GNU/Linux basadas en Ubuntu o en Debian.

Para las distribuciones GNU/Linux de 64bits es preferible modificar el script Configure antes de ejecutarlo, podemos hacerlo con los siguientes comandos:

cd ARToolKit
gedit Configure

Dentro del archivo configure tenemos que añadir -fPIC a la línea 111 sustituyendo la línea que tiene  —  por la que tiene ++ al principio de las líneas que indico:

-- CFLAG="-O $GST_INCLUDE -I/usr/X11R6/include"
++ CFLAG="-O $GST_INCLUDE -fPIC -I/usr/X11R6/include"

A continuación lo ejecutamos:

./Configure

y compilamos:

make

Añadimos la variable de entorno:

export ARTOOLKIT_CONFIG="v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"

y probamos que funciona correctamente ejecutanto el test dsde la carpeta bin:

cd  ARToolKit/bin
./simpleTest

Sin embargo, si queremos integrar ARToolKit en nuestro proyecto, necesitamos modificar nuestro CMakeLists.txt, de forma que los #include no nos den problemas.

23 junio 2011 Posted by | all | , , , , , , | Deja un comentario

Instalar OSG en Ubuntu para usar en RoboComp

Gracias a un script en Python que tenemos en RoboComp, instalar OSG en Ubuntu es tan sencillo como ejecutar dicho script, que nos deja listo el sistema para comenzar a programar con OSG en Ubuntu, ya sea la versión de 32 bits o la de 64 bits. Además se ha probado para la versión 10.04 LTS y para la versión 10.10.

Nos desplazamos a la carpeta que contiene el script y lo ejecutamos:

cd robocomp/ThirdParty/
python osg2.8.3.py

Meter la contraseña de usuario cuando nos lo pida, y listo.

23 junio 2011 Posted by | all | , , , | 8 comentarios

Lanzamiento de KinectSDK para Windows 7

Quizás llego tarde para anunciar que mañana Microsoft lanza de manera oficial su Kinect SDK para Windows 7, y para ello convocan a desarrolladores interesados en este dispositivo en sus oficinas en Washington DC.

Se abordarán las ventajas y novedades del SDK que según entiendo yo dejará de ser beta, y además te invitan a que lleves tu Kinect y tu equipo con Windows 7, ya que te ayudan con los problemas que tengas.

Además se organiza un concurso de aplicaciones y seguramente sea una fiesta de márketing para crear una comunidad de desarrolladores sólida detrás de Kinect.

Aunque yo en mi proyecto uso OpenKinect, sé que mucha gente llega al blog buscando información en general sobre Kinect.

Os dejo unos enlaces:

http://events.linkedin.com/Kinect-SDK-DC-Launch-CapArea-Silverlight/pub/705988

http://kinectsdklaunchdc.eventbrite.com/

http://caparea.net/Default.aspx?alias=caparea.net/silverlight

22 junio 2011 Posted by | all | , , , | 2 comentarios

La interfaz perdida de RoboComp

Antes que nada debo aclarar el concepto de interfaz, ya que podríamos estar refiriéndonos a diferentes tipos de interfaz, y esto puede llegar a ser muy confuso para cualquier novato que empiece a programar.

El buscón online de la Real Academia Española nos dice lo siguiente:

interfaz.

(Delingl.interface, superficie de contacto).

1. f. Conexión o frontera común entre dos aparatos o sistemas independientes.

2. f. Inform. Conexión, física o lógica, entre un computador y el usuario, un dispositivo periférico o un enlace de comunicaciones.

Pero la verdad es que esa definición no nos dice mucho.

En cualquier lenguaje de programación que use funciones, la interfaz sería el nombre de la función y sus argumentos, ya que una interfaz lo que hace es proporcionar una capa de abstracción, de forma que sin conocer cómo funciona algo internamente podamos interactuar desde fuera.

En Programación Orientada a Objetos (POO) es común llamar interfaz al conjunto de funciones y variables públicas de un clase, normalmente esta interfaz es la definición de la propia clase que en el caso de C++ sería miClase.h.

En Programación Orientada a Componentes (como es el caso de RoboComp) la interfaz es el conjunto de métodos que son accesibles entre componentes, en RoboComp es ICE quien gestiona estas interfaces por lo que deben estar adaptadas a ICE (que tiene algunas restricciones como no soportar sobrecarga de funciones) y en principio en el lenguaje Slice (aunque ICE posse un script para traducir entre C++ y Slice).

Por último está la Interfaz Gráfica de Usuario, que es la interfaz compuesta por botones, ventanas, etc. que utilizarán los usuarios finales de la aplicación, normalmente me gusta llamarla GUI, aunque con frecuencia podemos ver que en algunos sitios se refieren a ella como UI.

Aclarado todo esto, quiero contar una anécdota, y es que últimamente estoy trabajando en local con un ordenador en Salabeta y de vez en cuando subo los cambios al repositorio, pero preparando mi partida a Coimbra he descargado los cambios a mi portátil y me he llevado una sorpresa cuando mis componentes no compilaban.

El error era que faltaba un archivo de la interfaz de componente, ¿pero porque?, pues porque la interfaz se guarda en una carpeta diferente de la del componente, concretamente en miusuario/robocomp/Interfaces/ y nosotros hacemos el svn add o svn ci desde la carpeta del componente de forma que no sobimos dicha interfaz, y después al intentar compilar en otro equipo le será imposible porque no tiene dicho archivo.

15 junio 2011 Posted by | all | Deja un comentario

Instalar OSGBullet en Ubuntu 10.10

Me está llevando demasiado tiempo conseguir la colisión entre figuras de OSG, y he pensado que una buena solución sería añadir un motor de física, ya que de este modo puede servir para futuros trabajos y componentes en RoboComp.

El motor de física que querría utilizar es Bullet, principalmente porque hay un middleware que integra Bullet y OSG llamado OSGBullet. A continuación os muestro un vídeo donde se aprecia el potencial de Bullet.

OSGBullet tiene varias dependencias, como es lógico depende de OSG y de Bullet, pero también de OSGWorks.

En principio damos por hecho que OSG ya está instalado y funcionando correctamente en tu sistema.

Vamos con Bullet:

  • La última versión de OSGBullet (v1.1 Sep 2010) tiene soporte de determinadas versiones de las dependencias, en el caso de Bullet, la última versión completamente soportada es la v2.75 que podemos obtener aquí.
  • Los pasos para instalarla en una sistema GNU/Linux la podéis encontrar en el archivo INSTALL una vez descomprimimos el archivo descargado.
    ** Linux Compilation **- Download/install CMake from http://www.cmake.org or package manager
    CMake is like autoconf in that it will create build scripts which are then
    used for the actual compilation- There are some options for cmake builds:
    BUILD_SHARED_LIBS: default ‘OFF’, set to ‘ON’ to build .so libraries
    BUILD_EXTRAS: default ‘ON’, compiles additional libraries in ‘Extras’
    BUILD_DEMOS: default ‘ON’, compiles applications found in ‘Demos’
    CMAKE_INSTALL_PREFIX: default ‘/usr/local’, the installation path.
    CMAKE_INSTALL_RPATH: if you install outside a standard ld search path,
    then you should set this to the installation lib path.
    CMAKE_BUILD_TYPE: default ‘Release’, can include debug symbols with
    either ‘Debug’ or ‘RelWithDebInfo’.
    Other options may be discovered by ‘cmake –help-variable-list’ and
    ‘cmake –help-variable OPTION’

    – Run ‘cmake’ with desired options of the form -DOPTION=VALUE
    By default this will create the usual Makefile build system, but CMake can
    also produce Eclipse or KDevelop project files.  See ‘cmake –help’ to see
    what “generators” are available in your environment, selected via ‘-G’.
    For example:
    cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebugInfo

    – Assuming using the default Makefile output from cmake, run ‘make’ to
    build, and then ‘make install’ if you wish to install.

  • Sin embargo yo he probado el método que solemos usar (cmake . && make && sudo make install) y parece que todo funciona sin problemas.

Ahora toca instalar OSGWorks:

Por último descargamos e instalamos OSGBullet:

  • Descargamos los paquetes desde la página de OSGBullet.
  • Y en principio deberíamos de poder instalarla como las otras dos, sin embargo, a mí me da problemas en el linkado a la hora de hacer cmake . pero en cuando lo solucione actualizaré esta entrada.

10 junio 2011 Posted by | all | , , , , | Deja un comentario

A %d blogueros les gusta esto: