Difference between revisions of "Aitana-TFM-kinect-ROS05"

From robotica.unileon.es
Jump to: navigation, search
(Funcionalidades software MYRA)
 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android
+
* '''Project Name:'''  Human tracking and recognition OpenNI tracker
 
* '''Authors:''' Aitana Alonso Nogueira
 
* '''Authors:''' Aitana Alonso Nogueira
* '''Dates:''' September 2013 - September 2014
+
* '''Dates:''' September 2013
 
* '''Degree:''' Master
 
* '''Degree:''' Master
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada
+
* '''Tags:'''  ROS, kinect, ROS, tracking
* '''Technologies:''' ROS, C++, Android, ArUco
+
* '''Technologies:''' ROS, opennni
 
* '''Status:''' Finished
 
* '''Status:''' Finished
  
 +
=Instalación=
  
 +
Lo primero que vamos a decir es como configurar el entorno para poder trabajar con la librería skeleton tracking, para ello vamos a trabajar con ROS, la versión fuerte, para instalarlo:
  
=Introducción=
+
<syntaxhighlight>sudo apt-get install ros-fuerte-desktop-full</syntaxhighlight>
  
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot
+
Después de eso, para poder trabajar con la kinect, debemos instalar los drivers de openni, recordar que estamos trabajando con la versión fuerte de ros:
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS
 
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.
 
  
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.
+
<syntaxhighlight>sudo apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch</syntaxhighlight>
  
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?
+
La librería skeleton tracking, que es la que vamos a utilizar se encuentra en el paquete NITE, que puedes encontrar en el siguiente enlace: [http://www.openni.org/openni-sdk/openni-sdk-history-2/], debemos descargarnos la versión 1.5, ya que a partir de la versión 2.0 da problemas de compatibilidad y no conseguiremos hacer funcionar la librería skeleton tracking.
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu
 
aplicación de realidad aumentada a cualquier parte, o si surge que en la zona geográfica en que estás hay disponible alguna aplicación concreta de
 
esa zona podrías usarla, puesto que dispondrías del hardware necesario. Esto es muy útil cuando se trata, por ejemplo, de aplicaciones que son
 
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.
 
  
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos
+
Una vez descargado lo descomprimimos y ejecutamos el fichero ''install.sh''.
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android
 
porque cuenta con mayor número de usuarios, según [http://www.gartner.com/newsroom/id/2482816 Gartner]  un 74.4% de los dispositivos móviles adquiridos durante el
 
año 2013 contaban con este sistema operativo.
 
  
Por lo tanto, este proyecto va a describir el trabajo realizado para añadir funcionalidades al software MYRA en su versión de escritorio, para
+
<syntaxhighlight>sudo ./install.sh</syntaxhighlight>
su despliegue en móviles. Para ello tendremos que replantear la arquitectura propuesta actualmente en la solución para montar todo lo necesario y poder lanzar en paralelo instancias de la aplicación MYRA.
 
  
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio.
+
Debemos obtener lo siguiente:
  
Durante el desarrollo se han realizado mejoras en paralelo como un interface de configuración, un interface de debug y otro para visualizacion de mensajes de ROS en MYRA.
+
<syntaxhighlight>Installing NITE
 +
***************
  
A nivel de software hemos refactorizado código e integrado la librería de RA Aruco con ROS mediante un paquete proporcionado por PAL Robotics.
+
Copying shared libraries... OK
Reciprocamente la solución móvil integrará una versión ligera de control de la medicación de la misma forma que hace MYRA de escritorio.
+
Copying includes... OK
 +
Installing java bindings... OK
 +
Installing module 'Features_1_3_0'...
 +
Registering module 'libXnVFeatures_1_3_0.so'... OK
 +
Installing module 'Features_1_3_1'...
 +
Registering module 'libXnVFeatures_1_3_1.so'... OK
 +
Installing module 'Features_1_4_1'...
 +
Registering module 'libXnVFeatures_1_4_1.so'... OK
 +
Installing module 'Features_1_4_2'...
 +
Registering module 'libXnVFeatures_1_4_2.so'... OK
 +
Installing module 'Features_1_5_2'...
 +
Registering module 'libXnVFeatures_1_5_2.so'... OK
 +
Copying XnVSceneServer... OK
 +
Installing module 'Features_1_5_2'
 +
registering module 'libXnVHandGenerator_1_3_0.so'...OK
 +
Installing module 'Features_1_5_2'
 +
registering module 'libXnVHandGenerator_1_3_1.so'...OK
 +
Installing module 'Features_1_5_2'
 +
registering module 'libXnVHandGenerator_1_4_1.so'...OK
 +
Installing module 'Features_1_5_2'
 +
registering module 'libXnVHandGenerator_1_4_2.so'...OK
 +
Installing module 'Features_1_5_2'
 +
registering module 'libXnVHandGenerator_1_5_2.so'...OK
 +
Adding license.. OK
  
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con
+
*** DONE ***
un sistema de teleoperación para el robot y con un sistema de realidad aumentada basado en el reconocimiento de marcadores y haciendo uso de
+
</syntaxhighlight>
la libreria de Aruco, todo ello integrado con el software de control ROS.
 
 
 
==Objetivos==
 
 
 
Los objetivos principales de este proyecto son los siguientes:
 
 
 
* Actualizar el interface MYRA para integrarlo con ROS.
 
 
 
* Añadir a la solución MYRA una ventana de configuración y otra de debug.
 
 
 
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.
 
 
 
 
 
== Planificacion inicial ==
 
 
 
Primero hemos identificamos las necesidades del proyecto, por un lado que que la RA de la que hace uso el software MYRA  funcionara en dispositivos Android, porque son más asequibles y fáciles de manejar por personas mayores que los tradicionales ordenadores y por otro lado, integrar el software con ROS para que haya un control sobre el robot.
 
 
 
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior
 
realizado en el grupo de robótica, se paso a la búsqueda de posibles soluciones para realizar el proyecto y por último al desarrollo del mismo en las siguientes fases:
 
  
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.
+
Por último, solo nos falta instalar el paquete en cuestión ''openni_tracker ''.
  
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:
+
<syntaxhighlight>sudo apt-get install ros-fuerte-openni-tracker</syntaxhighlight>
  
* Añadir interface para una configuración rápida de MYRA con ROS.
+
=Ejecutando Skeleton Tracking=
  
* Crear interface para visualización de logs.
+
Debemos abrir 3 terminales diferentes:
  
Después de este ultimo, se decidió añadir al primer entregable teleoperación para que así fuera más uniforme la el software de escritorio y el de android.
+
* En el primero, ejecutaremos ROS, para ello escribimos en linea de comandos:
 +
<syntaxhighlight>roscore</syntaxhighlight>
 +
y nos debe aparecer algo como esto:
 +
<syntaxhighlight>... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3492.log
 +
Checking log directory for disk usage. This may take awhile.
 +
Press Ctrl-C to interrupt
 +
Done checking log file disk usage. Usage is <1GB.
  
= Arquitectura =
+
started roslaunch server http://aitana-laptop:60613/
 +
ros_comm version 1.8.11
  
= Desarrollo =
 
  
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto.
+
SUMMARY
 +
========
  
== Fase I ==
+
PARAMETERS
 +
* /rosdistro
 +
* /rosversion
  
En la primera fase, se realizó la integración de ROS, ArUco y Android. El modelo que deseamos obtener es el que se aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Diagrama_faseI.png figura], en donde el anciano a través de la cámara de su dispositivo android envía imágenes al robot ( en este caso un PC), mediante la conexión wifi y a su vez recibe de manera inmediata mediante un marcador que medicina le toca tomar en ese momento. Veamos en los siguientes apartados los pasos necesarios para conseguir esta integración.
+
NODES
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]
 
  
Los pasos necesarios para conseguir esta integración son:
+
auto-starting new master
 +
process[master]: started with pid [3508]
 +
ROS_MASTER_URI=http://aitana-laptop:11311/
  
* Despliegue del sistema base
+
setting /run_id to f3ff128e-5c2a-11e3-8ee4-0c6076187d47
* Conexión entre sistemas
+
process[rosout-1]: started with pid [3521]
* Validación de comunicaciones entre sistemas
+
started core service [/rosout]
* Integrar solución de realidad aumentada
 
* Validación de funcionamiento en todos los sistemas
 
 
 
Los desarrollamos a continuación.
 
 
 
===Despliegue del sistema base===
 
 
 
En esta fase tendremos que lanzar los cimientos del sistema de control. '''Roscore''' es un conjunto de nodos y programas que son pre-requisitos de un sistema basado en ROS. Se debe ejecutar roscore para que los nodos ROS para comunicarse. Por tanto, esto es lo primero que debemos hacer en la máquina que tengamos instalado ROS ( en nuestro caso versión hydro). Para iniciarlo se hace con el comando roscore.
 
 
 
En nuestro caso, podremos prescindir de ejecutar este comando porque si utilizamos '''roslaunch''', que más adelante explicaremos inicia automáticamente ''roscore'' si no se esta ejecutando ya.
 
 
 
Roscore inicia los siguientes recursos:
 
 
 
* Maestro o master
 
* Servidor de parámetros
 
* Un nodo de registro: ''\rosout''
 
 
 
Debemos también modificar las siguientes variables del entorno ROS:
 
<syntaxhighlight>
 
export ROS_MASTER_URI=http://localhost:11311
 
</syntaxhighlight>
 
<syntaxhighlight>
 
export ROS_HOSTNAME=localhost
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.
+
Lo dejamos corriendo en segundo plano.
 +
* En el segundo terminal, debemos lanzar los drivers openni para la kinect
  
===Conexión entre sistemas===
+
<syntaxhighlight>roslaunch openni_launch openni.launch</syntaxhighlight>
  
Para realizar la aplicación de Android que se conectará con el master de ROS, nos hemos ayudado de '''\android\core''', que esta basado en el cliente '''rosjava'''. En la [http://robotica.unileon.es/mediawiki/index.php/File:Packages-dependencies.png figura] se ven las dependencias que existen entre los diferentes paquetes oficiales de ROS para java.
+
Y una vez más, nos debe aparecer algo como lo que se muestra a continuación:
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]
 
  
 +
<syntaxhighlight>... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3614.log
 +
Checking log directory for disk usage. This may take awhile.
 +
Press Ctrl-C to interrupt
 +
Done checking log file disk usage. Usage is <1GB.
  
 +
started roslaunch server http://aitana-laptop:58367/
  
Para el desarrollo de la aplicación se ha utilizado Android Studio y se ha ejecutado sobre varios dispositivos android. Una vez instalada la aplicación en el dispositivo y ejecutado el roscore o roslaunch. Se ejecutará la aplicación android y nos aparecerá la siguiente pantalla ([http://robotica.unileon.es/mediawiki/index.php/File:Screenshot_conexion.png Ver figura] ) dónde debemos introducir la IP del equipo donde se ejecuta el roscore para que se realice la conexión y pueda así comunicarse el nodo del dispositivo android con los demás nodos del sistema.
+
SUMMARY
 +
========
  
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]
+
PARAMETERS
 +
* /camera/depth/rectify_depth/interpolation
 +
* /camera/depth_registered/rectify_depth/interpolation
 +
* /camera/disparity_depth/max_range
 +
* /camera/disparity_depth/min_range
 +
* /camera/disparity_depth_registered/max_range
 +
* /camera/disparity_depth_registered/min_range
 +
* /camera/driver/depth_camera_info_url
 +
* /camera/driver/depth_frame_id
 +
* /camera/driver/depth_registration
 +
* /camera/driver/device_id
 +
* /camera/driver/rgb_camera_info_url
 +
* /camera/driver/rgb_frame_id
 +
* /rosdistro
 +
* /rosversion
  
===Validación de comunicaciones entre sistemas===
+
NODES
 +
  /camera/depth/
 +
    metric (nodelet/nodelet)
 +
    metric_rect (nodelet/nodelet)
 +
    points (nodelet/nodelet)
 +
    rectify_depth (nodelet/nodelet)
 +
  /camera/rgb/
 +
    debayer (nodelet/nodelet)
 +
    rectify_color (nodelet/nodelet)
 +
    rectify_mono (nodelet/nodelet)
 +
  /
 +
    camera_base_link (tf/static_transform_publisher)
 +
    camera_base_link1 (tf/static_transform_publisher)
 +
    camera_base_link2 (tf/static_transform_publisher)
 +
    camera_base_link3 (tf/static_transform_publisher)
 +
    camera_nodelet_manager (nodelet/nodelet)
 +
  /camera/
 +
    disparity_depth (nodelet/nodelet)
 +
    disparity_depth_registered (nodelet/nodelet)
 +
    driver (nodelet/nodelet)
 +
    points_xyzrgb_depth_rgb (nodelet/nodelet)
 +
    register_depth_rgb (nodelet/nodelet)
 +
  /camera/ir/
 +
    rectify_ir (nodelet/nodelet)
 +
  /camera/depth_registered/
 +
    metric (nodelet/nodelet)
 +
    metric_rect (nodelet/nodelet)
 +
    rectify_depth (nodelet/nodelet)
  
Una vez establecida la conexión el nodo android que se encarga de publicar las imágenes ''/ros_camera_preview_view'' empezará a publicar bajo el topic ''/camera/image/compressed''.
+
ROS_MASTER_URI=http://localhost:11311
  
Después vamos a necesitar que el nodo que se va a encargar del procesamiento de la imagen y de la realidad aumentada, el nodo ''aruco_android'', se suscriba a las imágenes publicadas por el nodo ''/ros_camera_preview_view''.
+
core service [/rosout] found
 
+
process[camera_nodelet_manager-1]: started with pid [3634]
El paquete '''image_transport''', se usa siempre que se trata de publicar y suscribirse a imágenes, este proporciona un soporte transparente para transportar las imágenes comprimidas.
+
process[camera/driver-2]: started with pid [3635]
 
+
process[camera/rgb/debayer-3]: started with pid [3636]
Android publica las imágenes en formato ''compressed'', pero el nodo ''aruco_android'' necesita que estas estén en formato ''raw'' (es el tipo de transporte por defecto). Por eso deberemos republicar las imágenes cambiando el tipo de transporte. La sintaxis para hacer esto es la siguiente:
+
process[camera/rgb/rectify_mono-4]: started with pid [3637]
 
+
process[camera/rgb/rectify_color-5]: started with pid [3677]
<syntaxhighlight>
+
process[camera/ir/rectify_ir-6]: started with pid [3700]
republish in_transport in:=<in_base_topic> [out_transport] out:=<out_base_topic>
+
process[camera/depth/rectify_depth-7]: started with pid [3726]
 +
process[camera/depth/metric_rect-8]: started with pid [3754]
 +
process[camera/depth/metric-9]: started with pid [3793]
 +
process[camera/depth/points-10]: started with pid [3830]
 +
process[camera/register_depth_rgb-11]: started with pid [3868]
 +
process[camera/depth_registered/rectify_depth-12]: started with pid [3913]
 +
process[camera/depth_registered/metric_rect-13]: started with pid [3953]
 +
process[camera/depth_registered/metric-14]: started with pid [4002]
 +
process[camera/points_xyzrgb_depth_rgb-15]: started with pid [4055]
 +
process[camera/disparity_depth-16]: started with pid [4106]
 +
process[camera/disparity_depth_registered-17]: started with pid [4151]
 +
process[camera_base_link-18]: started with pid [4281]
 +
process[camera_base_link1-19]: started with pid [4344]
 +
process[camera_base_link2-20]: started with pid [4396]
 +
process[camera_base_link3-21]: started with pid [4434]
 +
[ INFO] [1386082671.833888617]: Initializing nodelet with 2 worker threads.
 +
[ERROR] [1386082676.174882681]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressedDepth/set_parameters]
 +
[ERROR] [1386082676.193015430]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters]
 +
[ERROR] [1386082676.216452698]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]
 +
[ INFO] [1386082676.733259757]: No devices connected.... waiting for devices to be connected
 
</syntaxhighlight>
 
</syntaxhighlight>
  
En nuestro caso haremos:
+
Y que no cunda en pánico, que el error es normal.
<syntaxhighlight>
 
cd /opt/ros/hydro/lib/image_transport
 
./republish compressed in:=/camera/image raw out:=/camera/image_test
 
</syntaxhighlight>
 
 
 
Y con esto obtendremos la imagen en el formato por defecto ''raw'' nombrada con el topic ''/camera/image_test'' que será la imagen a la que se suscriba el nodo de RA. En la [http://robotica.unileon.es/mediawiki/index.php/File:Republish.png figura] se ve como se realiza la publicación, republicación y suscripción.
 
 
 
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]
 
 
 
===Integrar solución de realidad aumentada===
 
 
 
PAL Robotics propone una [https://github.com/pal-robotics/aruco_ros solución o paquete de integración de la libreria ArUco con ROS]. Se ha trabajado, sobre ese paquete modificando algunas de las funciones de ArUco y se ha añadido un lanzador ''android.launch'' para poder ejecutar dicho paquete con los parámetros correspondientes al dispositivo móvil.
 
 
 
Los lanzadores .launch son archivos ROS de configuración escritos en XML en los que se especifican los nodos a lanzar, los argumentos de entrada a éstos y los parámetros necesarios para crear una aplicación completa. Como todo archivo XML, se compone de una serie de etiquetas que tienen una serie de opciones a rellenar.
 
 
 
Este será el archivo que ejecutaremos con el roslaunch:
 
 
 
<syntaxhighlight>
 
roslaunch aruco_ros android.launch
 
</syntaxhighlight>
 
 
 
Al ejecutarlo, se creara el nodo ''aruco_android'' (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Aruco_android.png figura]), el cual se suscribe al topic ''/camera/image_test'', realiza todo el procesado de las imágenes y pinta sobre ellas reconociendo los marcadores de RA, su código, está imagen es la que posteriormente publica con diferentes formatos con el topic ''/aruco_android/result'' y ''/aruco_android/result/compressed''.
 
 
 
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]
 
 
 
===Validación de funcionamiento en todos los sistemas===
 
 
 
Es el topic ''/aruco_android/result/compressed'' al que se suscribirá el nodo de android ''/ros_image_view'' que se encargará de mostrar en la pantalla del dispositivo el resultado después de aplicar la RA como se muestra en la siguiente [http://robotica.unileon.es/mediawiki/index.php/File:tablet.jpg figura].
 
 
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]
 
 
 
El modelo resultante incluyendo los topics de publicación del robot y del dispositivo móvil se muestra en la [http://robotica.unileon.es/mediawiki/index.php/File:Diagrama_topics.png figura].
 
 
 
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]
 
 
 
== Fase II ==
 
 
 
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.
 
 
 
=== Funcionalidades software MYRA ===
 
 
 
En este primer paso, se ha realizado una modificación del software de escritorio MYRA, añadiéndole nuevas funcionalidades. Esta modificación consiste en una actualización de la interfaz de usuario, añadiendo por un lado una ventana de configuración y por otra parte, una ventana de debug y debug topic.
 
 
 
 
 
*La ventana de '''configuración''' (Ver [http://robotica.unileon.es/mediawiki/index.php/File:CapturaMYRA2.png figura]), nos da la opción de seleccionar la  url del máster al que queremos conectarnos y la IP del equipo que se va a conectar. Por defecto, suponemos que el máster y el equipo que se conecta son el propio que ejecuta la aplicación MYRA, por eso los parámetros por defecto son ''http://localhost:11311/'' y la IP ''localhost''.
 
 
 
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]
 
 
 
 
 
*La ventana de '''MYRA''', donde no se ha hecho ninguna modificación. Esta es la parte que se encarga de la visualización de la RA para indicar que medicina le toca al anciano. Un ejemplo de su funcionamiento se aprecia en la [http://robotica.unileon.es/mediawiki/index.php/File:CapturaMYRA2.png figura].
 
 
 
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]
 
 
 
 
 
*La ventana de '''Teleop''', desde donde se puede teleoperar el robot y a la que se ha añadido la posibilidad de cambiar el topic de visualización desde la ventana de configuración. En este ejemplo por ejemplo (Ver [http://robotica.unileon.es/mediawiki/index.php/File:CapturaMYRA4.png figura]) se está visualizando el topic ''/aruco_android/result''.
 
 
 
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]
 
 
 
*La ventana de '''debug''' (Ver [http://robotica.unileon.es/mediawiki/index.php/File:CapturaMYRA2.png figura]) muestra los logs generados por la aplicación indicando su nivel entre cinco posibles:  debug, info, warning, error, fatal. Además da la opción de filtrar los registros según dicho nivel, es decir si indicamos que queremos un nivel de log de warning por ejemplo, nos apareceran aquellos mensajes cuyo nivel sea warning, error o fatal.
 
 
 
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]
 
 
 
=== Teleoperación ===
 
 
 
En la aplicación android, se ha decidido añadir un sistema de teleoperación, que va a permitir al usuario de la aplicación controlar los desplazamientos del robot. La idea de como permite mediante el dispositivo móvil teleoperar el robot se muestra en la [http://robotica.unileon.es/mediawiki/index.php/File:Diagrama_simple2.png figura].
 
  
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]
+
* Por último, abrimos un nuevo terminal y en este ejecutamos por fin:
 +
<syntaxhighlight>rosrun openni_tracker openni_tracker</syntaxhighlight>
  
De esta forma, quedaría más uniforme el software, puesto que la aplicación contaría con la ventana de conexión y la ventana de teleoperación y realidad aumentada en una misma pantalla.
+
Una vez que se está ejecutando, nos pondremos enfrente de la kinect en pose PSI  [[File:PsiPose.gif|thumb|left|Pose PSI]], de esta forma nos aparecerán los siguientes mensajes:
 +
<syntaxhighlight>New User 1
 +
Pose Psi detected for user 1
 +
Calibration started for user 1
 +
Calibration complete, start tracking user 1
 +
Lost User 1</syntaxhighlight>
  
Para realizar esta teleoperación, se utilizara el nodo ''android/virtual_joystick'' que se subscribe al topic ''/odom'', que contiene datos odométricos, una estimación de la posición y velocidad de un robot en el espacio y publica en el topic ''/cmd_vel'' las velocidades del robot.
+
Lo primero que hace es detectar que hay una persona, a continuación, detecta que tiene la posición PSI y entonces comienza la calibración, si nos apartamos de la cámara entonces mostrará el mensaje que indica que ha perdido al usuario.
  
La apariencia visual de la aplicación con el joystick o palanca de control se ve en la [http://robotica.unileon.es/mediawiki/index.php/File:Joystick_screen.png figura].
+
=Visualización=
  
[[File:joystick_screen.png| thumb| Imagen del joystick de la aplicación Android.]]
+
Lo primero para ver la imagen real que ve la kinect utilizamos:
 +
<syntaxhighlight>rosrun image_view image_view image:=/camera/rgb/image_color</syntaxhighlight>
  
En la [http://robotica.unileon.es/mediawiki/index.php/File:Nodos_teleop.png figura] se ve el nodo ''android/virtual_joystick'' y todas sus relaciones con el robot.
 
  
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]
+
Para visualizar la ejecución del openni_tracker utilizaremos Rviz. Rviz es una herramienta de visualización 3D para ROS. Ahora que hemos logrado detectar y calibrar personas, ¿Cómo podemos ver lo que está viendo la cámara kinect? para ello usaremos Rviz. Para ponerlo en marcha abriremos un cuarto terminal y teclearemos:
 +
<syntaxhighlight>rosrun rviz rviz</syntaxhighlight>
  
= Experimentación =
+
y se abrirá la aplicación, tendremos que configurarlo: Añadir TF y desde la opción fixed frame podrás elegir que parte del cuerpo visionar. Las diferentes transformaciones \tf se pueden ver en el enlace [http://wiki.ros.org/openni_tracker] En las siguientes capturas se puede ver el resultado:
 +
[[File:CapRviz2.png| 520px|left|]]
 +
[[File:CapRviz1.png| 520px|right|]]

Latest revision as of 21:09, 10 October 2014

  • Project Name: Human tracking and recognition OpenNI tracker
  • Authors: Aitana Alonso Nogueira
  • Dates: September 2013
  • Degree: Master
  • Tags: ROS, kinect, ROS, tracking
  • Technologies: ROS, opennni
  • Status: Finished

Instalación

Lo primero que vamos a decir es como configurar el entorno para poder trabajar con la librería skeleton tracking, para ello vamos a trabajar con ROS, la versión fuerte, para instalarlo:

sudo apt-get install ros-fuerte-desktop-full

Después de eso, para poder trabajar con la kinect, debemos instalar los drivers de openni, recordar que estamos trabajando con la versión fuerte de ros:

sudo apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch

La librería skeleton tracking, que es la que vamos a utilizar se encuentra en el paquete NITE, que puedes encontrar en el siguiente enlace: [1], debemos descargarnos la versión 1.5, ya que a partir de la versión 2.0 da problemas de compatibilidad y no conseguiremos hacer funcionar la librería skeleton tracking.

Una vez descargado lo descomprimimos y ejecutamos el fichero install.sh.

sudo ./install.sh

Debemos obtener lo siguiente:

Installing NITE
***************

Copying shared libraries... OK
Copying includes... OK
Installing java bindings... OK
Installing module 'Features_1_3_0'...
Registering module 'libXnVFeatures_1_3_0.so'... OK
Installing module 'Features_1_3_1'...
Registering module 'libXnVFeatures_1_3_1.so'... OK
Installing module 'Features_1_4_1'...
Registering module 'libXnVFeatures_1_4_1.so'... OK
Installing module 'Features_1_4_2'...
Registering module 'libXnVFeatures_1_4_2.so'... OK
Installing module 'Features_1_5_2'...
Registering module 'libXnVFeatures_1_5_2.so'... OK
Copying XnVSceneServer... OK
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_3_0.so'...OK
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_3_1.so'...OK
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_4_1.so'...OK
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_4_2.so'...OK
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_5_2.so'...OK
Adding license.. OK

*** DONE ***

Por último, solo nos falta instalar el paquete en cuestión openni_tracker .

sudo apt-get install ros-fuerte-openni-tracker

Ejecutando Skeleton Tracking

Debemos abrir 3 terminales diferentes:

  • En el primero, ejecutaremos ROS, para ello escribimos en linea de comandos:
roscore

y nos debe aparecer algo como esto:

... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3492.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://aitana-laptop:60613/
ros_comm version 1.8.11


SUMMARY
========

PARAMETERS
 * /rosdistro
 * /rosversion

NODES

auto-starting new master
process[master]: started with pid [3508]
ROS_MASTER_URI=http://aitana-laptop:11311/

setting /run_id to f3ff128e-5c2a-11e3-8ee4-0c6076187d47
process[rosout-1]: started with pid [3521]
started core service [/rosout]

Lo dejamos corriendo en segundo plano.

  • En el segundo terminal, debemos lanzar los drivers openni para la kinect
roslaunch openni_launch openni.launch

Y una vez más, nos debe aparecer algo como lo que se muestra a continuación:

... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3614.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://aitana-laptop:58367/

SUMMARY
========

PARAMETERS
 * /camera/depth/rectify_depth/interpolation
 * /camera/depth_registered/rectify_depth/interpolation
 * /camera/disparity_depth/max_range
 * /camera/disparity_depth/min_range
 * /camera/disparity_depth_registered/max_range
 * /camera/disparity_depth_registered/min_range
 * /camera/driver/depth_camera_info_url
 * /camera/driver/depth_frame_id
 * /camera/driver/depth_registration
 * /camera/driver/device_id
 * /camera/driver/rgb_camera_info_url
 * /camera/driver/rgb_frame_id
 * /rosdistro
 * /rosversion

NODES
  /camera/depth/
    metric (nodelet/nodelet)
    metric_rect (nodelet/nodelet)
    points (nodelet/nodelet)
    rectify_depth (nodelet/nodelet)
  /camera/rgb/
    debayer (nodelet/nodelet)
    rectify_color (nodelet/nodelet)
    rectify_mono (nodelet/nodelet)
  /
    camera_base_link (tf/static_transform_publisher)
    camera_base_link1 (tf/static_transform_publisher)
    camera_base_link2 (tf/static_transform_publisher)
    camera_base_link3 (tf/static_transform_publisher)
    camera_nodelet_manager (nodelet/nodelet)
  /camera/
    disparity_depth (nodelet/nodelet)
    disparity_depth_registered (nodelet/nodelet)
    driver (nodelet/nodelet)
    points_xyzrgb_depth_rgb (nodelet/nodelet)
    register_depth_rgb (nodelet/nodelet)
  /camera/ir/
    rectify_ir (nodelet/nodelet)
  /camera/depth_registered/
    metric (nodelet/nodelet)
    metric_rect (nodelet/nodelet)
    rectify_depth (nodelet/nodelet)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
process[camera_nodelet_manager-1]: started with pid [3634]
process[camera/driver-2]: started with pid [3635]
process[camera/rgb/debayer-3]: started with pid [3636]
process[camera/rgb/rectify_mono-4]: started with pid [3637]
process[camera/rgb/rectify_color-5]: started with pid [3677]
process[camera/ir/rectify_ir-6]: started with pid [3700]
process[camera/depth/rectify_depth-7]: started with pid [3726]
process[camera/depth/metric_rect-8]: started with pid [3754]
process[camera/depth/metric-9]: started with pid [3793]
process[camera/depth/points-10]: started with pid [3830]
process[camera/register_depth_rgb-11]: started with pid [3868]
process[camera/depth_registered/rectify_depth-12]: started with pid [3913]
process[camera/depth_registered/metric_rect-13]: started with pid [3953]
process[camera/depth_registered/metric-14]: started with pid [4002]
process[camera/points_xyzrgb_depth_rgb-15]: started with pid [4055]
process[camera/disparity_depth-16]: started with pid [4106]
process[camera/disparity_depth_registered-17]: started with pid [4151]
process[camera_base_link-18]: started with pid [4281]
process[camera_base_link1-19]: started with pid [4344]
process[camera_base_link2-20]: started with pid [4396]
process[camera_base_link3-21]: started with pid [4434]
[ INFO] [1386082671.833888617]: Initializing nodelet with 2 worker threads.
[ERROR] [1386082676.174882681]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressedDepth/set_parameters]
[ERROR] [1386082676.193015430]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters]
[ERROR] [1386082676.216452698]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]
[ INFO] [1386082676.733259757]: No devices connected.... waiting for devices to be connected

Y que no cunda en pánico, que el error es normal.

  • Por último, abrimos un nuevo terminal y en este ejecutamos por fin:
rosrun openni_tracker openni_tracker
Una vez que se está ejecutando, nos pondremos enfrente de la kinect en pose PSI
Pose PSI
, de esta forma nos aparecerán los siguientes mensajes:
New User 1
Pose Psi detected for user 1
Calibration started for user 1
Calibration complete, start tracking user 1
Lost User 1

Lo primero que hace es detectar que hay una persona, a continuación, detecta que tiene la posición PSI y entonces comienza la calibración, si nos apartamos de la cámara entonces mostrará el mensaje que indica que ha perdido al usuario.

Visualización

Lo primero para ver la imagen real que ve la kinect utilizamos:

rosrun image_view image_view image:=/camera/rgb/image_color


Para visualizar la ejecución del openni_tracker utilizaremos Rviz. Rviz es una herramienta de visualización 3D para ROS. Ahora que hemos logrado detectar y calibrar personas, ¿Cómo podemos ver lo que está viendo la cámara kinect? para ello usaremos Rviz. Para ponerlo en marcha abriremos un cuarto terminal y teclearemos:

rosrun rviz rviz

y se abrirá la aplicación, tendremos que configurarlo: Añadir TF y desde la opción fixed frame podrás elegir que parte del cuerpo visionar. Las diferentes transformaciones \tf se pueden ver en el enlace [2] En las siguientes capturas se puede ver el resultado:

CapRviz2.png
CapRviz1.png