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

From robotica.unileon.es
Jump to: navigation, search
m
Line 1: Line 1:
* '''Project Name:''' Human tracking and recognition
+
* '''Project Name:''' Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android
 
* '''Authors:''' Aitana Alonso Nogueira
 
* '''Authors:''' Aitana Alonso Nogueira
* '''Dates:''' September 2013 -
+
* '''Dates:''' September 2013 - September 2014
 
* '''Degree:''' Master
 
* '''Degree:''' Master
* '''Tags:'''  recognition, tracking
+
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada
* '''Technologies:''' ROS, c++, Kinect
+
* '''Technologies:''' ROS, C++, Android, ArUco
* '''Status:''' Discontinued
+
* '''Status:''' Finished
  
  
=OpenNI tracker=
 
  
==Instalación==
+
=Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android=
 +
==Introducció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:
+
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot
 +
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.
  
<syntaxhighlight>sudo apt-get install ros-fuerte-desktop-full</syntaxhighlight>
+
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.
  
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:
+
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?
 +
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.
  
<syntaxhighlight>sudo apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch</syntaxhighlight>
+
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos
 +
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.
  
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.
+
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
 +
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.
  
Una vez descargado lo descomprimimos y ejecutamos el fichero ''install.sh''.
+
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio.  
  
<syntaxhighlight>sudo ./install.sh</syntaxhighlight>
+
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.
  
Debemos obtener lo siguiente:
+
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.
 +
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.
  
<syntaxhighlight>Installing NITE
+
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con
***************
+
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
 +
la libreria de Aruco, todo ello integrado con el software de control ROS.
  
Copying shared libraries... OK
+
===Objetivos===
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 ***
+
Los objetivos principales de este proyecto son los siguientes:
</syntaxhighlight>
 
  
Por último, solo nos falta instalar el paquete en cuestión ''openni_tracker ''.
+
* Actualizar el interface MYRA para integrarlo con ROS.
  
<syntaxhighlight>sudo apt-get install ros-fuerte-openni-tracker</syntaxhighlight>
+
* Añadir a la solución MYRA una ventana de configuración y otra de debug.
  
==Ejecutando Skeleton Tracking==
+
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.
  
Debemos abrir 3 terminales diferentes:
 
  
* En el primero, ejecutaremos ROS, para ello escribimos en linea de comandos:
+
=== Planificacion inicial ===
<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.
 
  
started roslaunch server http://aitana-laptop:60613/
+
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.
ros_comm version 1.8.11
 
  
 +
El proyecto tiene dos entregables distintos:
  
SUMMARY
+
El primero se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.
========
 
  
PARAMETERS
+
En el segundo, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:
* /rosdistro
 
* /rosversion
 
  
NODES
+
* Añadir interface para una configuración rápida de MYRA con ROS.
  
auto-starting new master
+
* Crear interface para visualización de logs.
process[master]: started with pid [3508]
 
ROS_MASTER_URI=http://aitana-laptop:11311/
 
  
setting /run_id to f3ff128e-5c2a-11e3-8ee4-0c6076187d47
+
Aquí se ha mantenido el patrón MVC que ya estaba implantado y no ha habido ninguna modificación al respecto.
process[rosout-1]: started with pid [3521]
 
started core service [/rosout]
 
</syntaxhighlight>
 
  
Lo dejamos corriendo en segundo plano.
+
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 segundo terminal, debemos lanzar los drivers openni para la kinect
 
  
<syntaxhighlight>roslaunch openni_launch openni.launch</syntaxhighlight>
+
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 las fases anteriores, se
Y una vez más, nos debe aparecer algo como lo que se muestra a continuación:
+
tomaron las decisiones de que tecnologías emplear, expuestas en el siguiente capítulo, y se comenzó su desarrollo.
 
 
<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/
 
 
 
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
 
</syntaxhighlight>
 
 
 
Y que no cunda en pánico, que el error es normal.
 
 
 
* Por último, abrimos un nuevo terminal y en este ejecutamos por fin:
 
<syntaxhighlight>rosrun openni_tracker openni_tracker</syntaxhighlight>
 
 
 
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>
 
 
 
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:
 
<syntaxhighlight>rosrun image_view image_view image:=/camera/rgb/image_color</syntaxhighlight>
 
 
 
 
 
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>
 
 
 
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|]]
 

Revision as of 13:37, 4 October 2014

  • Project Name: Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android
  • Authors: Aitana Alonso Nogueira
  • Dates: September 2013 - September 2014
  • Degree: Master
  • Tags: android, MYRA, ROS, ArUco, Realidad Aumentada
  • Technologies: ROS, C++, Android, ArUco
  • Status: Finished


Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android

Introducción

Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot 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.

¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil? 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 y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android porque cuenta con mayor número de usuarios, según 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 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.

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.

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. 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.

Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con 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 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.

El proyecto tiene dos entregables distintos:

El primero se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.

En el segundo, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:

  • Añadir interface para una configuración rápida de MYRA con ROS.
  • Crear interface para visualización de logs.

Aquí se ha mantenido el patrón MVC que ya estaba implantado y no ha habido ninguna modificación al respecto.

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.

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 las fases anteriores, se tomaron las decisiones de que tecnologías emplear, expuestas en el siguiente capítulo, y se comenzó su desarrollo.