Proyecto Fin de Carrera

Robótica, software y telecomunicaciones.

Avahi — maquinafoo.local

Ya he comentado alguna vez que el mayor potencial de RoboComp es la utilización de hardware simultáneamente por varios equipos. En nuestro caso podemos usar la Kinect desde varios ordenadores de RoboLab gracias a que RoboComp utiliza ICE, sin embargo hasta el momento, yo siempre había usado la Kinect desde mi ordenador y habían sido los compañeros quienes se conectaban a ella desde la red local.

Hoy me ha tocado a mí conectarme a la Kinect mientras esta estaba conectada en otro ordenador, y lo único que tenía que modificar era el archivo config que se encuentra en …/micomponenteComp/etc/ y cambiar localhost por la IP de la máquina donde corre la Kinect.

Gracias a Avahi no es necesario tratar con IP’s mientras éstas estén en la misma red local, simplemente podemos poner maquinafoo.local y Avahi se encargará de buscar la máquina con el nombre maquinafoo, obtener su IP real y sustituir maquinafoo.local por la misma.

Avahi es un demonio (similar a un servicio en Windows), que se encarga de obtener las IP’s de una red local y asociarlas a los respectivos nombres de máquina. Es similar al Bonjour de Apple, y a este tipo de servicio también se les suele llamar descubridores de servicios de red o se los puede comparar a un servicio de DNS a nivel local.

Anuncios

15 abril 2011 Posted by | all | , , , , | Deja un comentario

Algoritmo Predator — OpenTLD

Hace unos días leía en el Grupo de discusión de OpenKinect sobre un algoritmo de tracking(rastreo o seguimiento) revolucionario conocido como Predator Algorithm.

Predator usa una combinación de tracking + detección + ROI (Region Of Interest), y como sus autores comentan, el algoritmo aprende sobre la marcha.

En primer lugar debemos tener una captura del objeto a seguir, que se puede indicar en el momento que iniciamos el algoritmo, posteriormente escaneará cada frame buscando similitudes con el objeto que debe seguir, un vez se detectan objetos similares, se toman capturas de estos y se añaden en la base de datos, mientras tanto vamos obteniendo más y más capturas en la base de datos, se analizan las capturas y se clasifican como positivas o negativas en base a una restricciones que nosotros queramos, por ejemplo una ROI.

Cuando se tiene un número considerable de capturas, automáticamente descartamos las que aparecen con menos probabilidad, tanto de las negativas como de las positivas, creando un método muy robusto que “va aprendiendo” y mejorando.

En el siguiente vídeo se puede ver varias demostraciones de su potencial:

Pues bien, a los pocos dias se publicó el código con licencia GPLv3, lo que ha aumentado las espectativas sobre este nuevo algoritmo, ya que de este modo es posible que se porte a diversos entornos y entre todos podamos mejorarlo.

De momento se ha creado otro Grupo de Discusión  para OpenTLD, ya que el algoritmo Predator también se conoce como TLD (Tracking+Learning+Detection), y en dicho grupo ya hay gente con ganas de portarlo a GNU/Linux y MacOSX.

Uno de los mayores problemas de Predator es que hasta ahora sólo funciona bajo Windows con Matlab 2009a y archivos MEX, en el grupo de discusión comentaban sobre eliminar la dependencia con MatLab y pasarse a Octave.

También se puede encontrar más información en la página de uno de los desarrolladores.

14 abril 2011 Posted by | all | , , , , , , , , | Deja un comentario

Ursus, Kinect y Robocomp

En los últimos días mi proyecto se ha vuelto aún más interesante, principalmente gracias a los progresos de la gente que trabaja en Robolab, que han ido ampliando y mejorando a Robocomp, y además creando nuevos robots sobre los cuales se planean interesantes aplicaciones.

Respecto a las mejoras de Robocomp podemos echar un vistazo a la página del proyecto en SourceForge para ver que se envían un mínimo de 5 “code commits” al día. Sin duda es un proyecto muy activo.

En cuanto a los nuevos robots me gustaría destacar a URSUS, cuyo objetivo inicial es ayudar a los niños con problemas físicos a seguir los ejercicios de rehabilitación. Con URSUS los niños realizarían los ejercícios como si de un juego se tratase, a la vez que ayuda a los médicos a monitorizar los ejercicios. Se puede encontrar más información sobre esto en varios medios de comunicación que han intentado dar difusión a este proyecto tan interesante: [1][2][3][4][5][6][7][8].

Pero como he dicho antes, Robocomp no sólo mejora, sino que se amplía con más componentes, en concreto Robocomp ahora dispone de un componente llamado kinectComp, desarrollado por Luis Manso, que nos permite acceder a los datos que captura la kinect, pero es posible que llegado a este punto te preguntes… ¿qué es la kinect?

La kinect es un accesorio para la videoconsola de Microsoft XBOX360, se trata de una cámara en 3 dimensiones que permite jugar sin mandos, sólo con los movimientos de nuestro cuerpo. En Noviembre de 2010, el español Héctor Martín consiguió crear un controlador de código abierto que funciona sobre GNU/Linux para acceder a los datos de imagen y profundidad de la kinect, y ahora nosotros podemos usarla con Robocomp gracias a kinectComp. El precio de este aparato ronda los 150€, un precio aceptable para la calidad que consigue, la cual no deja de ser curiosa, pues consiste en una webcam VGA que nos da la imagen plana 2D, y una lámpara de infrarojos que emite un patrón concreto que junto con una cámara de infrarojos nos da información de la distancia.  Más sobre kinect.

Gracias a todas estas novedades, en mi proyecto trabajaré con una kinect en lugar de una webcam, y el resultado será aplicado a URSUS de forma que ampliemos sus aplicaciones.

10 febrero 2011 Posted by | all | , , , , , | 2 comentarios

Variables de entorno en GNU/Linux

Las variables de entorno suele ser algo que siempre tenemos que añadir cada vez que vamos a programar utilizando librerías o partes de código ya hecho, en estos casos se definen variables de entorno para indicar la ruta de dichas librerías, la ruta del compilador, la ruta de ejecución, etc.

En realidad las variables de entorno pueden almacenar todo tipo de datos, y se pueden usar para muchos fines, pero puedes que te preguntes:

¿Qué es una variable de entorno?

Las variables de entorno son variables que se encuentran disponibles para todos los programas y scripts durante una sesión de usuario, es decir, desde que se inicia el sistema operativo hasta que lo apagamos, la mayoría de estas variables incluso perduran y mantienen su valor entre sesiones.

¿Cómo puedo ver las variables de entorno que hay disponibles en mi sistema?

Con el comando env , simplemente abre una terminal y introduce env, te saldrá una lista de las variables y su valor.

Si sólo quieres saber el valor de una variable concreta teclea en la terminal el siguiente comando: echo $NOMBRE_DE_VARIABLE

¿Cómo uso una variable de entorno?

Esto es muy fácil, sustituye el valor donde la quieras usar por: $NOMBRE_DE_VARIABLE

Por ejemplo supongamos que tenemos la variable EDAD=30 , podemos usarlo de la siguiente manera: Nacimiento=2010-$EDAD . De esta forma Nacimiento tomaría el valor 1980.

¿Cómo añado una variable de entorno?

Con el comando: export VARIABLE=valor

¿Cuales son las variables más comunes?

Normalmente todos los sistemas operativos tienen un número mínimo de variables de entorno predefinidas que le sirven al propio sistema para funcionar correctamente. Por este motivo, si no conoces muy bien tu sistema, y no estás seguro de si alguna variable la has añadido tú, es mejor no tocarla.

Si te has fijado en los ejemplos anteriores, hemos puesto siempre las variables con mayúsculas, esto es un convenio, y es mejor respetarlo. Siempre es recomendable ejecutar el comando env (para ver las variables existentes) antes de añadir una nueva.

Las variables más comunes son las siguientes:

PATH -> En esta ruta se incluyen los directorios donde se encuentran los binarios de los programas que se ejecutan desde terminal, es decir las carpetas donde se encuentran: cd, ls, makedir, gedit, nautilus, … para que así podamos ejecutar esos comandos desde cualquier carpeta. Si no existiera esta variable, tendríamos que desplazarnos hasta la carpeta en la que está el comando cada vez que lo vayamos a ejecutar.

HOSTNAME -> Aquí se guarda el nombre del equipo. Por ejemplo: Portatil con Ubuntu.

HOME -> El valor de esta variable es la ruta del directorio personal del usuario activo, es decir que si ha iniciado la sesión usuario, en $HOME tendremos en valor /home/usuario/ .

USER -> Como su nombre indica, se guarda el nombre del usuario de la sesión. Por ejemplo podemos crear la ruta a la carpeta del usuario que esté activo de la siguiente manera /home/$USER/ ,  $HOME o /home/usuario, las tres rutas apuntan al mismo directorio.

DESKTOP_SESSION -> Indica el tipo de sesión iniciada: gnome, kde, … Esto puede ser muy útil si tenemos un programa con 2 interfaces de usuario, una para Gnome y otra para KDE, así mostramos la correcta en función de esta variable.

PWD -> En ella se guarda la ultima ruta accedida, es decir, la ruta en la que nos encontramos.

Cuando programamos estas variables son muy importantes para no tener problemas con las rutas cuando pasamos nuestro programa a otro ordenador, o a otro usuario.

Otro tip es que en lugar de $HOME podemos escribir ~, de forma que acortamos la longitud de la ruta generando un código más claro:

/home/usuario/robocomp/Componentes/Robolab/Stable/

$HOME/robocomp/Componentes/Robolab/Stable/

~/robocomp/Componentes/Robolab/Stable/

Si hacemos: export ROBOLAB=/home/usuario/robocomp/Componentes/Robolab, podríamos escribir la ruta como:

$ROBOLAB/Stable/

28 septiembre 2010 Posted by | all | , , | Deja un comentario

Dia, AutoDia y Doxygen, herramientas para organizar y documentar

Aunque el Proyecto Fin de Carrera de una Ingeniería Técnica no suele ser de grandes dimensiones siempre es bueno adquirir buenas costumbres desde el principio.

Como ya escribí en esta entrada anterior, fijar los objetivos y una planificación, son buenos hábitos a la hora de desarrollar proyectos.

Cuando el proyecto se trata de software, buenos hábitos son: Organización con UML, Código Limpio y Claro, y Documentación.

Dia Doxygen

Sigue leyendo

16 noviembre 2009 Posted by | Recursos | , , , , , , | 1 comentario

¿Por dónde empezar?

Seguramente esta pregunta nos la hacemos todos los ingenieros cuando nos llega la hora de comenzar el Proyecto Fin de Carrera (PFC). Una de las cosas que aprendí de la asignatura de Proyectos, es que tener claros los objetivos y planificación del mismo es un punto muy importante si queremos garantizar el éxito. Cambiar de objetivos en mitad del desarrollo es algo muy costoso y muchas veces hasta resulta inviable.

Por este motivo, debemos empezar por ahí, por fijar los objetivos y tomar decisiones que sean claves para el desarrollo del proyecto. Aunque también es cierto que si nos podemos permitir el lujo de probar antes de tomar una elección, esto siempre nos ayudará a decidirnos.
Bien, mi proyecto se basará en OpenCV, estará escrito en C/C++ y ejecutable en la plataforma GNU/Linux.

OpenCV C/C++

Sigue leyendo

14 noviembre 2009 Posted by | Recursos | , , , , | Deja un comentario

   

A %d blogueros les gusta esto: