<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://robotica.unileon.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AitanaAlo</id>
		<title>robotica.unileon.es - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://robotica.unileon.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AitanaAlo"/>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Special:Contributions/AitanaAlo"/>
		<updated>2026-05-02T08:20:01Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.0</generator>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4353</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4353"/>
				<updated>2014-10-25T21:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Test 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ipcom.at/telefonie/qjsimple/ QjSimple]&lt;br /&gt;
* [http://www.pjsip.org/ pjSIP]&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.cplusplus.com/ C++]&lt;br /&gt;
* [http://qt-project.org/ Qt]&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* [http://www.cmake.org/ cmake]&lt;br /&gt;
* [http://www.gnu.org/software/make/ make]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;videoflash&amp;gt;UOA8cxKjiDM#t=13&amp;lt;/videoflash&amp;gt;&amp;lt;/center&amp;gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4352</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4352"/>
				<updated>2014-10-25T21:21:10Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Test 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ipcom.at/telefonie/qjsimple/ QjSimple]&lt;br /&gt;
* [http://www.pjsip.org/ pjSIP]&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.cplusplus.com/ C++]&lt;br /&gt;
* [http://qt-project.org/ Qt]&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* [http://www.cmake.org/ cmake]&lt;br /&gt;
* [http://www.gnu.org/software/make/ make]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;videoflash&amp;gt;UOA8cxKjiDM#t=13&amp;lt;/videoflash&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: solid 0px white; width: 50%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
||&lt;br /&gt;
----&lt;br /&gt;
|}&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4342</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4342"/>
				<updated>2014-10-13T14:05:59Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Otras herramientas y lenguajes de programación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ipcom.at/telefonie/qjsimple/ QjSimple]&lt;br /&gt;
* [http://www.pjsip.org/ pjSIP]&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.cplusplus.com/ C++]&lt;br /&gt;
* [http://qt-project.org/ Qt]&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* [http://www.cmake.org/ cmake]&lt;br /&gt;
* [http://www.gnu.org/software/make/ make]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4341</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4341"/>
				<updated>2014-10-13T14:03:47Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Herramientas de teleasistencia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ipcom.at/telefonie/qjsimple/ QjSimple]&lt;br /&gt;
* [http://www.pjsip.org/ pjSIP]&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* [http://qt-project.org/ Qt]&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4340</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4340"/>
				<updated>2014-10-13T14:02:55Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Otras herramientas y lenguajes de programación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* [http://qt-project.org/ Qt]&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4339</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4339"/>
				<updated>2014-10-13T14:02:25Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Otras herramientas y lenguajes de programación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Qt&lt;br /&gt;
* [http://git-scm.com/ GiT]&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4338</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4338"/>
				<updated>2014-10-13T13:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Herramientas de Visión Artificial y RA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* [http://opencv.org/ OpenCV]&lt;br /&gt;
* [https://www.opengl.org/ OpenGL]&lt;br /&gt;
* [http://www.uco.es/investiga/grupos/ava/node/26 Aruco]&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Qt&lt;br /&gt;
* GiT&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4337</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4337"/>
				<updated>2014-10-13T13:57:17Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Herramientas de control */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ros.org/ ROS] (Robot Operating System)&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* OpenCV&lt;br /&gt;
* OpenGL&lt;br /&gt;
* Aruco&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Qt&lt;br /&gt;
* GiT&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4336</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4336"/>
				<updated>2014-10-13T13:56:23Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Otras herramientas y lenguajes de programación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* ROS&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* OpenCV&lt;br /&gt;
* OpenGL&lt;br /&gt;
* Aruco&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Qt&lt;br /&gt;
* GiT&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4335</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4335"/>
				<updated>2014-10-13T13:56:16Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Lenguajes y bibliotecas utilizadas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
Para el desarrollo de la aplicación se han utilizado varias tecnologías, lenguajes y herramientas, así como un conjunto de aplicaciones con licencia GPLv3 previamente desarrolladas por otros usuarios y profesionales en la materia. Las veremos clasificadas en herramientas de control, herramientas  de visión artificial y RA, herramientas para el desarrollo de la teleasistencia y otras herramientas utilizadas para llevar a cabo el desarrollo del software.&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de control ===&lt;br /&gt;
&lt;br /&gt;
* ROS&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de Visión Artificial y RA ===&lt;br /&gt;
&lt;br /&gt;
* OpenCV&lt;br /&gt;
* OpenGL&lt;br /&gt;
* Aruco&lt;br /&gt;
&lt;br /&gt;
=== Herramientas de teleasistencia ===&lt;br /&gt;
&lt;br /&gt;
* QjSimple&lt;br /&gt;
* pjSIP&lt;br /&gt;
&lt;br /&gt;
=== Otras herramientas y lenguajes de programación ===&lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Qt&lt;br /&gt;
* GiT&lt;br /&gt;
* cmake&lt;br /&gt;
* make&lt;br /&gt;
&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4334</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4334"/>
				<updated>2014-10-13T13:40:13Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Entornos de desarrollo integrados (IDE's) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
=== Qtcreator===&lt;br /&gt;
&lt;br /&gt;
[http://qt-project.org/wiki/category:tools::qtcreator '''Qt Creator'''] es un IDE multiplataforma adaptado a las necesidades de los desarrolladores de Qt.&lt;br /&gt;
&lt;br /&gt;
Qt Creator proporciona entre otras las siguientes características que ayudan a desarrollar código: &lt;br /&gt;
&lt;br /&gt;
* Editor de código con soporte C + +, QML y ECMAscript.&lt;br /&gt;
* Herramientas rápidas de navegación de código.&lt;br /&gt;
* Resaltado de sintaxis y autocompletado de código.&lt;br /&gt;
* Comprobación de código estático.&lt;br /&gt;
* Soporte para la refactorización del código fuente.&lt;br /&gt;
* Ayuda contextual.&lt;br /&gt;
* Incluye herramientas para el desarrollo de interfaces de usuario. Lo que permite construir rápidamente y poder visualizar como van a quedar las diferentes ventanas, imágenes, botones...&lt;br /&gt;
&lt;br /&gt;
=== Android Studio ===&lt;br /&gt;
&lt;br /&gt;
[https://developer.android.com/sdk/installing/studio.html '''Android Studio'''] es un IDE multiplataforma para desarrollar aplicaciones android.&lt;br /&gt;
&lt;br /&gt;
Incluye el '''SDK de Android''' que es el que proporciona las bibliotecas y las herramientas de desarrollo necesarias para crear, probar y depurar aplicaciones para android.&lt;br /&gt;
&lt;br /&gt;
El sistema de construcción de Android Studio se basa en un plugin de Android para '''Gradle'''. Gradle es un conjunto de herramientas de construcción avanzada que gestiona las dependencias y le permite definir una lógica de construcción para las aplicaciones personalizada.&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4333</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4333"/>
				<updated>2014-10-13T13:36:58Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Plataformas de Desarrollo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4332</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4332"/>
				<updated>2014-10-13T13:32:11Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Tecnologías utilizadas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
En esta sección solo se van a enunciar las plataformas, lenguajes y bibliotecas utilizadas para el desarrollo del presente proyecto, sin pretender entrar en una explicación de las mismas. &lt;br /&gt;
&lt;br /&gt;
== Plataformas de Desarrollo ==&lt;br /&gt;
&lt;br /&gt;
Se trata de un proyecto de integración de tres plataformas:&lt;br /&gt;
&lt;br /&gt;
*Plataforma Linux, sistema operativo basado en Unix, en concreto la distribución [http://www.ubuntu.com/ Ubuntu 12.04](tanto la versión de 32 como la de 64 bits).&lt;br /&gt;
*Plataforma Android, [http://www.android.com/about/jelly-bean/ versión 4.2.2 Jelly Bean].&lt;br /&gt;
*ROS, versión [http://wiki.ros.org/hydro hydro].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entornos de desarrollo integrados (IDE's) ==&lt;br /&gt;
&lt;br /&gt;
== Lenguajes y bibliotecas utilizadas ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4331</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4331"/>
				<updated>2014-10-13T13:27:01Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Tecnologías utilizadas =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4330</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4330"/>
				<updated>2014-10-13T13:25:08Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Propuesta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 700px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4329</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4329"/>
				<updated>2014-10-13T13:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Propuesta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 600px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4328</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4328"/>
				<updated>2014-10-13T13:24:44Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Propuesta */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
Tras la presentación de estos componentes, revisar el estado del arte y ver evaluar cual sería la mejor aproximación, creemos&lt;br /&gt;
que la arquitectura que será necesaria desarrollar para que la solución continue siendo útil es la que se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es.png| center | 500px | Diagrama SysML de Propuesta MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:DiagramaSysMLMyrabot_es.png&amp;diff=4327</id>
		<title>File:DiagramaSysMLMyrabot es.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:DiagramaSysMLMyrabot_es.png&amp;diff=4327"/>
				<updated>2014-10-13T13:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4326</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4326"/>
				<updated>2014-10-13T13:22:09Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Fase I */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4325</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4325"/>
				<updated>2014-10-13T13:21:53Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Software MYRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center| border|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4324</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4324"/>
				<updated>2014-10-13T13:21:08Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Software MYRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| border| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center| border|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4323</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4323"/>
				<updated>2014-10-13T13:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Fase I */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [Solución Actual MYRABot figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| border| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center| border|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4322</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4322"/>
				<updated>2014-10-13T13:19:44Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Software MYRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [Solución Actual MYRABot figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| border| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4321</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4321"/>
				<updated>2014-10-13T13:19:12Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Arquitectura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project platforma MYRABot] sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver [http://robotica.unileon.es/mediawiki/index.php/Projects#MYRA_project figura]). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido.&lt;br /&gt;
* Bajo coste.&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
En cuanto a hardware se tienen dos elementos muy diferenciamos, por un lado la plataforma robótica cuyos componentes hardware son los siguientes:&lt;br /&gt;
&lt;br /&gt;
*iRobot Roomba 520, Arduino Mega, y la estructura de madera.&lt;br /&gt;
*Dinamixel Arm (5x12a) para la manipulación de móviles de pequeños objetos rígidos.&lt;br /&gt;
*Notebook (procesador Atom), la pantalla se ha situado en la parte superior del robot&lt;br /&gt;
*Kinect para la navegación.&lt;br /&gt;
*Asus Xtion for 3D object recognition.&lt;br /&gt;
&lt;br /&gt;
Por otro lado, el dispositivo móvil, que puede tratarse de una table o smartphone con sistema operativo Android y que cuente con una cámara.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
El software de la arquitectura se clasifica en:&lt;br /&gt;
&lt;br /&gt;
* ROS (robot control)&lt;br /&gt;
* MYRA (C/C++, ArUCo, Qt, openCV)&lt;br /&gt;
&lt;br /&gt;
=== Software MYRA ===&lt;br /&gt;
&lt;br /&gt;
El software MYRA (Mayores y Realidad Aumentada, realidad aumentada y ancianos), es un sistema asistencial que mediante realidad aumentada ayuda al mayor en distintas labores de asistencia, como por ejemplo en el control de la medicación. Esto se aplica en dos contextos diferentes: &lt;br /&gt;
&lt;br /&gt;
*Ayudar a las personas mayores en su hogar en el día a día. Consiste en un sistema de control para la medicación diaria que un del anciano. Las tecnologías que se han utilizado en esta parte son las siguientes: C++, Qt, OpenCV y ArUco, que es una librería de Realidad Aumentada basada en OpenCV.&lt;br /&gt;
*Un sistema de teleasistencia genérico.&lt;br /&gt;
&lt;br /&gt;
A alto nivel la solución actual de la propuesta realiza unas tareas bien definidas como se puede ver en la [Solución Actual MYRABot figura].&lt;br /&gt;
&lt;br /&gt;
[[File:MYRAFase2b.jpg|center| border| 500px| Solución Actual MYRABot]]&lt;br /&gt;
&lt;br /&gt;
El paradigma de desarrollo que se aplica en el software MYRA es el '''Modelo Vista Controlador (MVC)''', que consiste en separar los datos de una aplicación (Modelo), la interfaz de usuario (Vista) y la lógica de negocios (controlador) en tres componentes distintos que se relacionarán para al final tener como resultado nuestra aplicación.&lt;br /&gt;
&lt;br /&gt;
[[File:MVC.png|thumb|Modelo Vista Controlador]]&lt;br /&gt;
 &lt;br /&gt;
*Modelo que abarca el software necesario para conectarse a otras bibliotecas que MYRA necesita, como por ejemplo: OpenCV, ArUco, bibliotecas pjproject y ROS. Estas bibliotecas proporcionan el reconocimiento de imágenes, realidad aumentada y los servicios de VoIP, respectivamente. ROS proporciona el control del robot.&lt;br /&gt;
*Vista, es el encargado de construir la interfaz e interactuar con los usuarios, además mostrará la información al usuario en la pantalla del robot.&lt;br /&gt;
*Controlador está compuesto por los subsistemas que procesan los datos y generar la  información que necesitan los niveles más altos de la aplicación.&lt;br /&gt;
&lt;br /&gt;
Además tratándose de una integración con Android, utilizaremos Android UI framework que está basado en el patrón de diseño MVC ( ver [http://robotica.unileon.es/mediawiki/index.php/File:AndroidMVC.png figura).&lt;br /&gt;
&lt;br /&gt;
[[File:AndroidMVC.png|thumb|Modelo Vista Controlador en Android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Propuesta ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:AndroidMVC.png&amp;diff=4320</id>
		<title>File:AndroidMVC.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:AndroidMVC.png&amp;diff=4320"/>
				<updated>2014-10-13T13:18:47Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:MVC.png&amp;diff=4319</id>
		<title>File:MVC.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:MVC.png&amp;diff=4319"/>
				<updated>2014-10-13T13:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4318</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4318"/>
				<updated>2014-10-13T13:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* MYRABot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver figura \ref{fig:myrabot}). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido&lt;br /&gt;
* Bajo coste&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4317</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4317"/>
				<updated>2014-10-13T13:05:23Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* MYRABot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver figura \ref{fig:myrabot}). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido&lt;br /&gt;
* Bajo coste&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|600px| border| Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4316</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4316"/>
				<updated>2014-10-13T13:05:07Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Arquitectura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
El '''robot MYRABot''' es un robot de bajo coste de asistencia en el hogar (ver figura \ref{fig:myrabot}). Esta especialmente dedicado a la asistencia de personas mayores. Dicho robot tiene las siguientes características:&lt;br /&gt;
 &lt;br /&gt;
* Construido con técnicas de prototipado rápido&lt;br /&gt;
* Bajo coste&lt;br /&gt;
* Adecuado para realizar tareas básicas y desplazarse en el hogar.&lt;br /&gt;
&lt;br /&gt;
Aunque vamos a presentar ambos componentes, hardware y software, nos centraremos en la parte de software que es en lo que vamos a trabajar en el proyecto e incluiremos  un nuevo bloque con despliegue sobre la plataforma Android (Figura \ref{fig:DiagramaSysMLMyrabot_es}). &lt;br /&gt;
&lt;br /&gt;
La [http://robotica.unileon.es/mediawiki/index.php/File:DiagramaSysMLMyrabot_es1.png figura] representa la arquitectura MYRA mediante el lenguaje de modelado SysML. Se muestran los componentes hardware y software del robot y las relaciones entre ellos.&lt;br /&gt;
&lt;br /&gt;
[[File:DiagramaSysMLMyrabot_es1.png|center|Diagrama SysML de primer prototipo MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:DiagramaSysMLMyrabot_es1.png&amp;diff=4315</id>
		<title>File:DiagramaSysMLMyrabot es1.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:DiagramaSysMLMyrabot_es1.png&amp;diff=4315"/>
				<updated>2014-10-13T13:04:56Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4314</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4314"/>
				<updated>2014-10-13T13:00:53Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Arquitectura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 200px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4313</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4313"/>
				<updated>2014-10-13T13:00:40Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Arquitectura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png| thumb| 300px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4312</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4312"/>
				<updated>2014-10-13T13:00:23Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Arquitectura */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado revisaremos la platforma MYRABot sobre la que se ha realizado este trabajo. &lt;br /&gt;
Además presentaremos las decisiones tomadas para modificar su arquitectura actual para adaptarla a &lt;br /&gt;
un entorno de trabajo con plataformas móviles. &lt;br /&gt;
[[File:myrabot.png|border| 300px |Fotografía del robot MYRABot.]]&lt;br /&gt;
&lt;br /&gt;
== MYRABot ==&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:Myrabot.png&amp;diff=4311</id>
		<title>File:Myrabot.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:Myrabot.png&amp;diff=4311"/>
				<updated>2014-10-13T12:58:50Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4310</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4310"/>
				<updated>2014-10-10T21:09:52Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Human tracking and recognition OpenNI tracker&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  ROS, kinect, ROS, tracking&lt;br /&gt;
* '''Technologies:''' ROS, opennni&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
=Instalación=&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-desktop-full&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Una vez descargado lo descomprimimos y ejecutamos el fichero ''install.sh''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo ./install.sh&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debemos obtener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;Installing NITE&lt;br /&gt;
***************&lt;br /&gt;
&lt;br /&gt;
Copying shared libraries... OK&lt;br /&gt;
Copying includes... OK&lt;br /&gt;
Installing java bindings... OK&lt;br /&gt;
Installing module 'Features_1_3_0'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_3_0.so'... OK&lt;br /&gt;
Installing module 'Features_1_3_1'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_3_1.so'... OK&lt;br /&gt;
Installing module 'Features_1_4_1'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_4_1.so'... OK&lt;br /&gt;
Installing module 'Features_1_4_2'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_4_2.so'... OK&lt;br /&gt;
Installing module 'Features_1_5_2'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_5_2.so'... OK&lt;br /&gt;
Copying XnVSceneServer... OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_3_0.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_3_1.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_4_1.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_4_2.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_5_2.so'...OK&lt;br /&gt;
Adding license.. OK&lt;br /&gt;
&lt;br /&gt;
*** DONE ***&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último, solo nos falta instalar el paquete en cuestión ''openni_tracker ''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-openni-tracker&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ejecutando Skeleton Tracking=&lt;br /&gt;
&lt;br /&gt;
Debemos abrir 3 terminales diferentes:&lt;br /&gt;
&lt;br /&gt;
* En el primero, ejecutaremos ROS, para ello escribimos en linea de comandos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;roscore&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
y nos debe aparecer algo como esto:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3492.log&lt;br /&gt;
Checking log directory for disk usage. This may take awhile.&lt;br /&gt;
Press Ctrl-C to interrupt&lt;br /&gt;
Done checking log file disk usage. Usage is &amp;lt;1GB.&lt;br /&gt;
&lt;br /&gt;
started roslaunch server http://aitana-laptop:60613/&lt;br /&gt;
ros_comm version 1.8.11&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
========&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
 * /rosdistro&lt;br /&gt;
 * /rosversion&lt;br /&gt;
&lt;br /&gt;
NODES&lt;br /&gt;
&lt;br /&gt;
auto-starting new master&lt;br /&gt;
process[master]: started with pid [3508]&lt;br /&gt;
ROS_MASTER_URI=http://aitana-laptop:11311/&lt;br /&gt;
&lt;br /&gt;
setting /run_id to f3ff128e-5c2a-11e3-8ee4-0c6076187d47&lt;br /&gt;
process[rosout-1]: started with pid [3521]&lt;br /&gt;
started core service [/rosout]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo dejamos corriendo en segundo plano.&lt;br /&gt;
* En el segundo terminal, debemos lanzar los drivers openni para la kinect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;roslaunch openni_launch openni.launch&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y una vez más, nos debe aparecer algo como lo que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3614.log&lt;br /&gt;
Checking log directory for disk usage. This may take awhile.&lt;br /&gt;
Press Ctrl-C to interrupt&lt;br /&gt;
Done checking log file disk usage. Usage is &amp;lt;1GB.&lt;br /&gt;
&lt;br /&gt;
started roslaunch server http://aitana-laptop:58367/&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
========&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
 * /camera/depth/rectify_depth/interpolation&lt;br /&gt;
 * /camera/depth_registered/rectify_depth/interpolation&lt;br /&gt;
 * /camera/disparity_depth/max_range&lt;br /&gt;
 * /camera/disparity_depth/min_range&lt;br /&gt;
 * /camera/disparity_depth_registered/max_range&lt;br /&gt;
 * /camera/disparity_depth_registered/min_range&lt;br /&gt;
 * /camera/driver/depth_camera_info_url&lt;br /&gt;
 * /camera/driver/depth_frame_id&lt;br /&gt;
 * /camera/driver/depth_registration&lt;br /&gt;
 * /camera/driver/device_id&lt;br /&gt;
 * /camera/driver/rgb_camera_info_url&lt;br /&gt;
 * /camera/driver/rgb_frame_id&lt;br /&gt;
 * /rosdistro&lt;br /&gt;
 * /rosversion&lt;br /&gt;
&lt;br /&gt;
NODES&lt;br /&gt;
  /camera/depth/&lt;br /&gt;
    metric (nodelet/nodelet)&lt;br /&gt;
    metric_rect (nodelet/nodelet)&lt;br /&gt;
    points (nodelet/nodelet)&lt;br /&gt;
    rectify_depth (nodelet/nodelet)&lt;br /&gt;
  /camera/rgb/&lt;br /&gt;
    debayer (nodelet/nodelet)&lt;br /&gt;
    rectify_color (nodelet/nodelet)&lt;br /&gt;
    rectify_mono (nodelet/nodelet)&lt;br /&gt;
  /&lt;br /&gt;
    camera_base_link (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link1 (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link2 (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link3 (tf/static_transform_publisher)&lt;br /&gt;
    camera_nodelet_manager (nodelet/nodelet)&lt;br /&gt;
  /camera/&lt;br /&gt;
    disparity_depth (nodelet/nodelet)&lt;br /&gt;
    disparity_depth_registered (nodelet/nodelet)&lt;br /&gt;
    driver (nodelet/nodelet)&lt;br /&gt;
    points_xyzrgb_depth_rgb (nodelet/nodelet)&lt;br /&gt;
    register_depth_rgb (nodelet/nodelet)&lt;br /&gt;
  /camera/ir/&lt;br /&gt;
    rectify_ir (nodelet/nodelet)&lt;br /&gt;
  /camera/depth_registered/&lt;br /&gt;
    metric (nodelet/nodelet)&lt;br /&gt;
    metric_rect (nodelet/nodelet)&lt;br /&gt;
    rectify_depth (nodelet/nodelet)&lt;br /&gt;
&lt;br /&gt;
ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&lt;br /&gt;
core service [/rosout] found&lt;br /&gt;
process[camera_nodelet_manager-1]: started with pid [3634]&lt;br /&gt;
process[camera/driver-2]: started with pid [3635]&lt;br /&gt;
process[camera/rgb/debayer-3]: started with pid [3636]&lt;br /&gt;
process[camera/rgb/rectify_mono-4]: started with pid [3637]&lt;br /&gt;
process[camera/rgb/rectify_color-5]: started with pid [3677]&lt;br /&gt;
process[camera/ir/rectify_ir-6]: started with pid [3700]&lt;br /&gt;
process[camera/depth/rectify_depth-7]: started with pid [3726]&lt;br /&gt;
process[camera/depth/metric_rect-8]: started with pid [3754]&lt;br /&gt;
process[camera/depth/metric-9]: started with pid [3793]&lt;br /&gt;
process[camera/depth/points-10]: started with pid [3830]&lt;br /&gt;
process[camera/register_depth_rgb-11]: started with pid [3868]&lt;br /&gt;
process[camera/depth_registered/rectify_depth-12]: started with pid [3913]&lt;br /&gt;
process[camera/depth_registered/metric_rect-13]: started with pid [3953]&lt;br /&gt;
process[camera/depth_registered/metric-14]: started with pid [4002]&lt;br /&gt;
process[camera/points_xyzrgb_depth_rgb-15]: started with pid [4055]&lt;br /&gt;
process[camera/disparity_depth-16]: started with pid [4106]&lt;br /&gt;
process[camera/disparity_depth_registered-17]: started with pid [4151]&lt;br /&gt;
process[camera_base_link-18]: started with pid [4281]&lt;br /&gt;
process[camera_base_link1-19]: started with pid [4344]&lt;br /&gt;
process[camera_base_link2-20]: started with pid [4396]&lt;br /&gt;
process[camera_base_link3-21]: started with pid [4434]&lt;br /&gt;
[ INFO] [1386082671.833888617]: Initializing nodelet with 2 worker threads.&lt;br /&gt;
[ERROR] [1386082676.174882681]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressedDepth/set_parameters]&lt;br /&gt;
[ERROR] [1386082676.193015430]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters]&lt;br /&gt;
[ERROR] [1386082676.216452698]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]&lt;br /&gt;
[ INFO] [1386082676.733259757]: No devices connected.... waiting for devices to be connected&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y que no cunda en pánico, que el error es normal.&lt;br /&gt;
&lt;br /&gt;
* Por último, abrimos un nuevo terminal y en este ejecutamos por fin:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun openni_tracker openni_tracker&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;New User 1&lt;br /&gt;
Pose Psi detected for user 1&lt;br /&gt;
Calibration started for user 1&lt;br /&gt;
Calibration complete, start tracking user 1&lt;br /&gt;
Lost User 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=Visualización=&lt;br /&gt;
&lt;br /&gt;
Lo primero para ver la imagen real que ve la kinect utilizamos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun image_view image_view image:=/camera/rgb/image_color&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun rviz rviz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
[[File:CapRviz2.png| 520px|left|]]&lt;br /&gt;
[[File:CapRviz1.png| 520px|right|]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4309</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4309"/>
				<updated>2014-10-10T21:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Human tracking and recognition OpenNI tracker&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  ROS, kinect, ROS, tracking&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
=Instalación=&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-desktop-full&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-openni-camera ros-fuerte-openni-launch&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Una vez descargado lo descomprimimos y ejecutamos el fichero ''install.sh''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo ./install.sh&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debemos obtener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;Installing NITE&lt;br /&gt;
***************&lt;br /&gt;
&lt;br /&gt;
Copying shared libraries... OK&lt;br /&gt;
Copying includes... OK&lt;br /&gt;
Installing java bindings... OK&lt;br /&gt;
Installing module 'Features_1_3_0'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_3_0.so'... OK&lt;br /&gt;
Installing module 'Features_1_3_1'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_3_1.so'... OK&lt;br /&gt;
Installing module 'Features_1_4_1'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_4_1.so'... OK&lt;br /&gt;
Installing module 'Features_1_4_2'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_4_2.so'... OK&lt;br /&gt;
Installing module 'Features_1_5_2'...&lt;br /&gt;
Registering module 'libXnVFeatures_1_5_2.so'... OK&lt;br /&gt;
Copying XnVSceneServer... OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_3_0.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_3_1.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_4_1.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_4_2.so'...OK&lt;br /&gt;
Installing module 'Features_1_5_2'&lt;br /&gt;
registering module 'libXnVHandGenerator_1_5_2.so'...OK&lt;br /&gt;
Adding license.. OK&lt;br /&gt;
&lt;br /&gt;
*** DONE ***&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por último, solo nos falta instalar el paquete en cuestión ''openni_tracker ''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;sudo apt-get install ros-fuerte-openni-tracker&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ejecutando Skeleton Tracking=&lt;br /&gt;
&lt;br /&gt;
Debemos abrir 3 terminales diferentes:&lt;br /&gt;
&lt;br /&gt;
* En el primero, ejecutaremos ROS, para ello escribimos en linea de comandos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;roscore&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
y nos debe aparecer algo como esto:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3492.log&lt;br /&gt;
Checking log directory for disk usage. This may take awhile.&lt;br /&gt;
Press Ctrl-C to interrupt&lt;br /&gt;
Done checking log file disk usage. Usage is &amp;lt;1GB.&lt;br /&gt;
&lt;br /&gt;
started roslaunch server http://aitana-laptop:60613/&lt;br /&gt;
ros_comm version 1.8.11&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
========&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
 * /rosdistro&lt;br /&gt;
 * /rosversion&lt;br /&gt;
&lt;br /&gt;
NODES&lt;br /&gt;
&lt;br /&gt;
auto-starting new master&lt;br /&gt;
process[master]: started with pid [3508]&lt;br /&gt;
ROS_MASTER_URI=http://aitana-laptop:11311/&lt;br /&gt;
&lt;br /&gt;
setting /run_id to f3ff128e-5c2a-11e3-8ee4-0c6076187d47&lt;br /&gt;
process[rosout-1]: started with pid [3521]&lt;br /&gt;
started core service [/rosout]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo dejamos corriendo en segundo plano.&lt;br /&gt;
* En el segundo terminal, debemos lanzar los drivers openni para la kinect&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;roslaunch openni_launch openni.launch&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y una vez más, nos debe aparecer algo como lo que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;... logging to /home/aitana/.ros/log/f3ff128e-5c2a-11e3-8ee4-0c6076187d47/roslaunch-aitana-laptop-3614.log&lt;br /&gt;
Checking log directory for disk usage. This may take awhile.&lt;br /&gt;
Press Ctrl-C to interrupt&lt;br /&gt;
Done checking log file disk usage. Usage is &amp;lt;1GB.&lt;br /&gt;
&lt;br /&gt;
started roslaunch server http://aitana-laptop:58367/&lt;br /&gt;
&lt;br /&gt;
SUMMARY&lt;br /&gt;
========&lt;br /&gt;
&lt;br /&gt;
PARAMETERS&lt;br /&gt;
 * /camera/depth/rectify_depth/interpolation&lt;br /&gt;
 * /camera/depth_registered/rectify_depth/interpolation&lt;br /&gt;
 * /camera/disparity_depth/max_range&lt;br /&gt;
 * /camera/disparity_depth/min_range&lt;br /&gt;
 * /camera/disparity_depth_registered/max_range&lt;br /&gt;
 * /camera/disparity_depth_registered/min_range&lt;br /&gt;
 * /camera/driver/depth_camera_info_url&lt;br /&gt;
 * /camera/driver/depth_frame_id&lt;br /&gt;
 * /camera/driver/depth_registration&lt;br /&gt;
 * /camera/driver/device_id&lt;br /&gt;
 * /camera/driver/rgb_camera_info_url&lt;br /&gt;
 * /camera/driver/rgb_frame_id&lt;br /&gt;
 * /rosdistro&lt;br /&gt;
 * /rosversion&lt;br /&gt;
&lt;br /&gt;
NODES&lt;br /&gt;
  /camera/depth/&lt;br /&gt;
    metric (nodelet/nodelet)&lt;br /&gt;
    metric_rect (nodelet/nodelet)&lt;br /&gt;
    points (nodelet/nodelet)&lt;br /&gt;
    rectify_depth (nodelet/nodelet)&lt;br /&gt;
  /camera/rgb/&lt;br /&gt;
    debayer (nodelet/nodelet)&lt;br /&gt;
    rectify_color (nodelet/nodelet)&lt;br /&gt;
    rectify_mono (nodelet/nodelet)&lt;br /&gt;
  /&lt;br /&gt;
    camera_base_link (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link1 (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link2 (tf/static_transform_publisher)&lt;br /&gt;
    camera_base_link3 (tf/static_transform_publisher)&lt;br /&gt;
    camera_nodelet_manager (nodelet/nodelet)&lt;br /&gt;
  /camera/&lt;br /&gt;
    disparity_depth (nodelet/nodelet)&lt;br /&gt;
    disparity_depth_registered (nodelet/nodelet)&lt;br /&gt;
    driver (nodelet/nodelet)&lt;br /&gt;
    points_xyzrgb_depth_rgb (nodelet/nodelet)&lt;br /&gt;
    register_depth_rgb (nodelet/nodelet)&lt;br /&gt;
  /camera/ir/&lt;br /&gt;
    rectify_ir (nodelet/nodelet)&lt;br /&gt;
  /camera/depth_registered/&lt;br /&gt;
    metric (nodelet/nodelet)&lt;br /&gt;
    metric_rect (nodelet/nodelet)&lt;br /&gt;
    rectify_depth (nodelet/nodelet)&lt;br /&gt;
&lt;br /&gt;
ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&lt;br /&gt;
core service [/rosout] found&lt;br /&gt;
process[camera_nodelet_manager-1]: started with pid [3634]&lt;br /&gt;
process[camera/driver-2]: started with pid [3635]&lt;br /&gt;
process[camera/rgb/debayer-3]: started with pid [3636]&lt;br /&gt;
process[camera/rgb/rectify_mono-4]: started with pid [3637]&lt;br /&gt;
process[camera/rgb/rectify_color-5]: started with pid [3677]&lt;br /&gt;
process[camera/ir/rectify_ir-6]: started with pid [3700]&lt;br /&gt;
process[camera/depth/rectify_depth-7]: started with pid [3726]&lt;br /&gt;
process[camera/depth/metric_rect-8]: started with pid [3754]&lt;br /&gt;
process[camera/depth/metric-9]: started with pid [3793]&lt;br /&gt;
process[camera/depth/points-10]: started with pid [3830]&lt;br /&gt;
process[camera/register_depth_rgb-11]: started with pid [3868]&lt;br /&gt;
process[camera/depth_registered/rectify_depth-12]: started with pid [3913]&lt;br /&gt;
process[camera/depth_registered/metric_rect-13]: started with pid [3953]&lt;br /&gt;
process[camera/depth_registered/metric-14]: started with pid [4002]&lt;br /&gt;
process[camera/points_xyzrgb_depth_rgb-15]: started with pid [4055]&lt;br /&gt;
process[camera/disparity_depth-16]: started with pid [4106]&lt;br /&gt;
process[camera/disparity_depth_registered-17]: started with pid [4151]&lt;br /&gt;
process[camera_base_link-18]: started with pid [4281]&lt;br /&gt;
process[camera_base_link1-19]: started with pid [4344]&lt;br /&gt;
process[camera_base_link2-20]: started with pid [4396]&lt;br /&gt;
process[camera_base_link3-21]: started with pid [4434]&lt;br /&gt;
[ INFO] [1386082671.833888617]: Initializing nodelet with 2 worker threads.&lt;br /&gt;
[ERROR] [1386082676.174882681]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressedDepth/set_parameters]&lt;br /&gt;
[ERROR] [1386082676.193015430]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters]&lt;br /&gt;
[ERROR] [1386082676.216452698]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]&lt;br /&gt;
[ INFO] [1386082676.733259757]: No devices connected.... waiting for devices to be connected&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y que no cunda en pánico, que el error es normal.&lt;br /&gt;
&lt;br /&gt;
* Por último, abrimos un nuevo terminal y en este ejecutamos por fin:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun openni_tracker openni_tracker&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;New User 1&lt;br /&gt;
Pose Psi detected for user 1&lt;br /&gt;
Calibration started for user 1&lt;br /&gt;
Calibration complete, start tracking user 1&lt;br /&gt;
Lost User 1&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=Visualización=&lt;br /&gt;
&lt;br /&gt;
Lo primero para ver la imagen real que ve la kinect utilizamos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun image_view image_view image:=/camera/rgb/image_color&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;rosrun rviz rviz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
[[File:CapRviz2.png| 520px|left|]]&lt;br /&gt;
[[File:CapRviz1.png| 520px|right|]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4308</id>
		<title>Aitana-TFM-Android-MYRA</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-Android-MYRA&amp;diff=4308"/>
				<updated>2014-10-10T21:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: Created page with &amp;quot;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android * '''Authors:''' Aitana Alonso Nogueira * '''Dates:''' September ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=People&amp;diff=4307</id>
		<title>People</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=People&amp;diff=4307"/>
				<updated>2014-10-10T21:04:11Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* 2013-2014 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Current members=&lt;br /&gt;
&lt;br /&gt;
The robotics group of the University of León is currently made up by:&lt;br /&gt;
&lt;br /&gt;
'''Faculty'''&lt;br /&gt;
# [http://robotica.unileon.es/~vmo Vicente Matellán Olivera] (head of the group)&lt;br /&gt;
# Camino Fernández Llamas&lt;br /&gt;
# [[Miguel-A-Conde | Miguel Ángel Conde]]&lt;br /&gt;
# Juan Felipe García Sierra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PhD students'''&lt;br /&gt;
# [[Francisco-phd|Francisco Javier Rodríguez Lera]] (Augmented Reality in Assistance Environments) (2009 - )&lt;br /&gt;
# Gonzalo Esteban (Haptic interaction) (October 2011 - )&lt;br /&gt;
# [[User:Victorm | Víctor Rodríguez]] ([[PhD-3D-Object-Tracking|3D object recognition and tracking]]) (October 2011 - )&lt;br /&gt;
# [[User:Fernando | Fernando Casado García]] ([[Mobile manipulation]]) (September 2013 - )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Undergrad students'''&lt;br /&gt;
* Summer research residence&lt;br /&gt;
# Rubén Rodríguez Fernández ([[Ruben-RV-ROS01|Turtlebot Navigation]]) (July 2013 - )&lt;br /&gt;
&lt;br /&gt;
=Past members=&lt;br /&gt;
&lt;br /&gt;
==2013-2014==&lt;br /&gt;
&lt;br /&gt;
* Master students&lt;br /&gt;
# Aitana Alonso Nogueira ([[Aitana-TFM-kinect-ROS05|Human tracking and recognition]]) ([[Aitana-TFM-Android-MYRA|Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android]])(September 2013 - September 2014)&lt;br /&gt;
* Summer research residence (undergrad)&lt;br /&gt;
# Jose Álvaro Fernández Álvarez ([[Alvaro-RV-HAPTICROS01|Haptics and ROS]]) (July - September 2013)&lt;br /&gt;
&lt;br /&gt;
==2012-2013==&lt;br /&gt;
* PhD students&lt;br /&gt;
# Fernando García Diaz-Calvo (Autonomous behavior generation in mobile robots) (October 2012 - discontinued)&lt;br /&gt;
* Master students&lt;br /&gt;
# Carlos Rodríguez Hernández ([[Carlos-TFM-MYRABot01|MYRA Robot: Hardware Update]]) (January - September 2013)&lt;br /&gt;
* Undergrad students&lt;br /&gt;
# David Llamas ([[David-PFC-ROS3|AR in ROS]])&lt;br /&gt;
# Julia Pérez del Río ([[JuliaP-PFC-Modular01|Modular robotics]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2011-2012==&lt;br /&gt;
* Master students&lt;br /&gt;
# Isidoro Gayo Vélez ([[Isidoro-TFM-Rovio02|Using rovio for tele-surveillance]]) (January 2011 - discontinued)&lt;br /&gt;
# Álvaro Botas ([[AlvaroB-TFM-ROS01 |AR Drone]]) (November 2011 - July 2012)&lt;br /&gt;
# [[User:Fernando | Fernando Casado García]] ([[Fernando-TFM-ROS02|Controlling Turtlebot with ROS]]) (January 2012 - July 2012)&lt;br /&gt;
* Undergrad students&lt;br /&gt;
# Jesús Balsa Comerón ([[JesusB-PFC-Nao01|Nao Control]]) (March 2011 - discontinued)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2010-2011==&lt;br /&gt;
* PhD students&lt;br /&gt;
# Juan Felipe García Sierra ([https://buleria.unileon.es/handle/10612/815 Aportaciones a la computación de atención visual y aplicación al control de un robot humanoide])&lt;br /&gt;
* Master students&lt;br /&gt;
# Pablo Lobato Criado ([[PabloL-Rovio04|Navigation with ROS and Rovio]])&lt;br /&gt;
# Víctor Manuel González Mateos ([[VictorM-TFM-Rovio03|Navigation with Rovio]])&lt;br /&gt;
# Julio San Román (Augmented reality on turtlebot) (March 2010 - discontinued)&lt;br /&gt;
# [[User:Victorm | Víctor Rodríguez]] ([[TFM-Nao-Goalkeeper|Implementing a RoboCup goalie with Nao using BICA]]) (October 2010 - July 2011)&lt;br /&gt;
* Undergrad students&lt;br /&gt;
# Elena Ortega ([[ElenaO-RV-proy1|NaoQI and BICA]]) (November 2010 - September 2011)&lt;br /&gt;
# Álvaro Botas ([[AlvaroB-PFC-Drone02|AR Drone]]) (November 2010 - September 2011)&lt;br /&gt;
* Other&lt;br /&gt;
# Mario Castro de Lera from the Robotics course of the Master in Cybernetics ([[MarioCL-Drone01|AR Drone]])&lt;br /&gt;
# Ángel Rojo Román from the subject of Sistemas informáticos (Computer Systems) ([[AngelR-PFC-Drone01|AR Drone]]) (November 2010 - September 2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==2009-2010==&lt;br /&gt;
* Master students&lt;br /&gt;
# Julio San Román ([[JulioSR-TFM-Rovio01|Augmented reality for teleoperation of a Rovio robot]])&lt;br /&gt;
# Víctor Fidalgo ([[VictorFV-TFM-Cenital|Ball tracking with overhead camera]])&lt;br /&gt;
* Undergrad students&lt;br /&gt;
# Pablo Flecha&lt;br /&gt;
# David Martínez Martínez ([[DMartinez-PFC-Nao|Teleoperation of Nao robot]])&lt;br /&gt;
# Hector Quintian and Alba Rodríguez from Artificial Intelligence, Industrial Engineering (2nd cycle) ([[HAQR-IA-Rovio|Teleoperation of Rovio robot]]) (2009 - 2010, 2nd semester)&lt;br /&gt;
* Summer research residence (undergrad)&lt;br /&gt;
# Elena Ortega ([[ElenaO-RV-proy1|NaoQI and BICA]]) (July - September 2010)&lt;br /&gt;
# Hector Quintián ([[HectorQ-RV-proy2|Teleoperation of Rovio robot]]) (July - September 2010)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Visitors=&lt;br /&gt;
* PhD students&lt;br /&gt;
# [http://homepage.univie.ac.at/andrea.ravignani/ Andrea Ravignani] from the University of Wien, Austria ([[Comparative-Cognition|Comparative Cognition]]) (October - December 2012)&lt;br /&gt;
* Master students&lt;br /&gt;
# [http://neithan.weebly.com/ Jesús Martínez Gómez] from the University of Castilla la Mancha (2008 - 2009)&lt;br /&gt;
# [https://www.linkedin.com/pub/t%C3%A2nia-carrera/72/164/1a3 Tânia Carrera] from Bragança, Portugal ([[ Tania-TFM-ROS04|Kinect with ROS and PCL]]) (February - June 2013)&lt;br /&gt;
* Undergrad students&lt;br /&gt;
# [http://souzamarcelo.weebly.com Marcelo de Souza] from Santa Catarina State University, [http://www.udesc.br UDESC]/CEAVI, Brasil ([[Marcelo-TurtleBot|Navigation Algorithms for Turtlebot]]) (October 2012 - February 2013)&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4306</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4306"/>
				<updated>2014-10-09T21:16:04Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Test 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|700px|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4305</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4305"/>
				<updated>2014-10-09T21:15:43Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Test 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;br /&gt;
&lt;br /&gt;
En esta fase se han hecho pruebas de conexión con diferentes plataformas ROS en PC y con el propio robot. Se comprobó que el sistemas de mensajes de registro estuviera funcionando correctamente de acuerdo al nivel introducido por el usuario. Y por último, se hicieron pruebas de la teleoperación del robot, sobre un simulador de turtlebot y sobre el propio robot (Ver [http://robotica.unileon.es/mediawiki/index.php/File:Teleoperacion.jpg figura]).&lt;br /&gt;
&lt;br /&gt;
[[File:teleoperacion.jpg|center|Fotografías tomadas durante la teleoperación del robot.]]&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4303</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4303"/>
				<updated>2014-10-09T21:13:27Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Test 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
En esta primera fase, teníamos que comprobar el correcto funcionamiento de la RA y su despliegue sobre android. Primero se hicieron pruebas de la integración de Aruco y ROS utilizando la webcam del PC. Una vez que eso estaba verificado, se paso a la comprobación del envió de imágenes y recepción en el dispositivo Android a través de ROS. Y por último, ya comprobado eso sólo quedo la validación de la RA aplicada a la medicación en el dispositivo móvil.&lt;br /&gt;
&lt;br /&gt;
[[File:pruebafase1.png|center|Fotografías tomadas durante la primera fase de prueba.]]&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:Pruebafase1.png&amp;diff=4302</id>
		<title>File:Pruebafase1.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:Pruebafase1.png&amp;diff=4302"/>
				<updated>2014-10-09T21:13:18Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4301</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4301"/>
				<updated>2014-10-09T20:57:26Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Teleoperación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png | thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4300</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4300"/>
				<updated>2014-10-09T20:56:59Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Teleoperación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png| left| thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4299</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4299"/>
				<updated>2014-10-09T20:55:12Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Experimentación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png| thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|800px|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|thumb|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4298</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4298"/>
				<updated>2014-10-09T20:53:50Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Experimentación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png| thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
En este capítulo vamos a ver el resultado final obtenido. Para ello mostraremos un diagrama total de ROS, donde se ven todos los nodos conectados entre sí y unas figuras dónde se ve la aplicación funcionando.&lt;br /&gt;
&lt;br /&gt;
[[File:rosgraph.png|center|Gráfico de ROS de la plataforma completa funcionando.]]&lt;br /&gt;
&lt;br /&gt;
Toda la la fase experimental se ha realizado en el aula utilizando los dispositivos reales, es decir, pastilleros y plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
Para hacer las pruebas se va a utilizar el pastillero de medicación que aparece en la [http://robotica.unileon.es/mediawiki/index.php/File:Pastillero.png figura].&lt;br /&gt;
&lt;br /&gt;
[[File:pastillero.png|center|Imagen del pastillero para las pruebas.]]&lt;br /&gt;
&lt;br /&gt;
Los experimentos se han realizado en dos etapas:&lt;br /&gt;
&lt;br /&gt;
*En el test 1 hemos validado experimentalmente el funcionamiento con todas las cámaras que despliega el sistema (dispositivo móvil y  PC + cámara integrada o cámara USB) el funcionamiento del sistema de realidad aumentada. En este test hemos realizado pruebas de regresión para comprobar que el sistema anterior seguía funcionando.&lt;br /&gt;
&lt;br /&gt;
*En el test 2 hemos realizado pruebas con el robot para validar que el sistema de conexión, debug y teleoperación es funcional con la plataforma robótica.&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:Pastillero.png&amp;diff=4297</id>
		<title>File:Pastillero.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:Pastillero.png&amp;diff=4297"/>
				<updated>2014-10-09T20:53:22Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=File:Rosgraph.png&amp;diff=4296</id>
		<title>File:Rosgraph.png</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=File:Rosgraph.png&amp;diff=4296"/>
				<updated>2014-10-09T20:52:56Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4295</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4295"/>
				<updated>2014-10-09T20:48:57Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Experimentación */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png| thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;br /&gt;
&lt;br /&gt;
== Test 1 ==&lt;br /&gt;
&lt;br /&gt;
== Test 2 ==&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	<entry>
		<id>https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4294</id>
		<title>Aitana-TFM-kinect-ROS05</title>
		<link rel="alternate" type="text/html" href="https://robotica.unileon.es/index.php?title=Aitana-TFM-kinect-ROS05&amp;diff=4294"/>
				<updated>2014-10-09T20:47:27Z</updated>
		
		<summary type="html">&lt;p&gt;AitanaAlo: /* Funcionalidades software MYRA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* '''Project Name:'''  Evolución de la Solución de Asistencia MYRA para su Despliegue en Platformas Android&lt;br /&gt;
* '''Authors:''' Aitana Alonso Nogueira&lt;br /&gt;
* '''Dates:''' September 2013 - September 2014&lt;br /&gt;
* '''Degree:''' Master&lt;br /&gt;
* '''Tags:'''  android, MYRA, ROS, ArUco, Realidad Aumentada&lt;br /&gt;
* '''Technologies:''' ROS, C++, Android, ArUco&lt;br /&gt;
* '''Status:''' Finished&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introducción=&lt;br /&gt;
&lt;br /&gt;
Desde hace varios años este grupo está trabajando en plataformas de asistencia. El grupo ha diseñado un robot&lt;br /&gt;
llamado MYRABot con la finalidad de ayudar a la gente mayor utilizando para ello Realidad Aumentada. Este robot es controlado con el software ROS&lt;br /&gt;
(Robot Operating System) y cuenta con su propio software: MYRA. Este último, es el objetivo de nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Este proyecto esta basado en la integración del software MYRA con ROS y una plataforma móvil con Android.&lt;br /&gt;
&lt;br /&gt;
¿Por qué realizar este proyecto? Es decir, ¿Es necesario adaptar la solución de escritorio MYRA para móvil?&lt;br /&gt;
Sin lugar a dudas, las aplicaciones para dispositivos móviles tienen varias ventajas. La principal es que con ellos puedes llevar tu &lt;br /&gt;
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 &lt;br /&gt;
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 &lt;br /&gt;
fuentes de información acerca de algo que necesitamos saber o hacia lo que sentimos curiosidad.&lt;br /&gt;
&lt;br /&gt;
Otra ventaja viene dada por la accesibilidad a los dispositivos móviles ya que actualmente la mayor parte del mundo ya dispone de ellos &lt;br /&gt;
y son utilizados diariamente en multitud de tareas. Elegimos la plataforma Android&lt;br /&gt;
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 &lt;br /&gt;
año 2013 contaban con este sistema operativo.&lt;br /&gt;
&lt;br /&gt;
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 &lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para conseguir la integración hemos analizado soluciones relacionadas en varios entornos: Android y PC de escritorio. &lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Como resultado hemos obtenido, por un lado nuevas funcionalidades en el software de escritorio MYRA y una aplicación Android que cuenta con &lt;br /&gt;
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 &lt;br /&gt;
la libreria de Aruco, todo ello integrado con el software de control ROS.&lt;br /&gt;
&lt;br /&gt;
==Objetivos==&lt;br /&gt;
&lt;br /&gt;
Los objetivos principales de este proyecto son los siguientes:&lt;br /&gt;
&lt;br /&gt;
* Actualizar el interface MYRA para integrarlo con ROS.&lt;br /&gt;
&lt;br /&gt;
* Añadir a la solución MYRA una ventana de configuración y otra de debug.&lt;br /&gt;
&lt;br /&gt;
* Actualizar el entorno para que MYRA pueda ser lanzado desde la plataforma Android.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Planificacion inicial ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Después de una etapa de estudio intensivo en la materia, incluyendo el estudio del trabajo anterior &lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
La primera se centra en la integración de ROS, ArUco y Android, mediante una aplicación Android.&lt;br /&gt;
&lt;br /&gt;
En la segunda, se realizarán modificaciones sobre el software actual MYRA, para permitir nuevas funcionalidades, se realizarán los siguientes cambios:&lt;br /&gt;
&lt;br /&gt;
* Añadir interface para una configuración rápida de MYRA con ROS.&lt;br /&gt;
&lt;br /&gt;
* Crear interface para visualización de logs.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Arquitectura =&lt;br /&gt;
&lt;br /&gt;
= Desarrollo =&lt;br /&gt;
&lt;br /&gt;
A lo largo de este apartado se detallan las fases en que se han desarrollado finalmente en el proyecto. &lt;br /&gt;
&lt;br /&gt;
== Fase I ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:diagrama_faseI.png|center|Diagrama resumen de la primera fase.]]&lt;br /&gt;
&lt;br /&gt;
Los pasos necesarios para conseguir esta integración son:&lt;br /&gt;
&lt;br /&gt;
* Despliegue del sistema base&lt;br /&gt;
* Conexión entre sistemas&lt;br /&gt;
* Validación de comunicaciones entre sistemas&lt;br /&gt;
* Integrar solución de realidad aumentada&lt;br /&gt;
* Validación de funcionamiento en todos los sistemas&lt;br /&gt;
&lt;br /&gt;
Los desarrollamos a continuación.&lt;br /&gt;
&lt;br /&gt;
===Despliegue del sistema base===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Roscore inicia los siguientes recursos: &lt;br /&gt;
&lt;br /&gt;
* Maestro o master&lt;br /&gt;
* Servidor de parámetros&lt;br /&gt;
* Un nodo de registro: ''\rosout''&lt;br /&gt;
&lt;br /&gt;
Debemos también modificar las siguientes variables del entorno ROS:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_MASTER_URI=http://localhost:11311&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
export ROS_HOSTNAME=localhost&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el lugar de ''localhost'' irá la IP del equipo donde se ejecuta el ''roscore''.&lt;br /&gt;
&lt;br /&gt;
===Conexión entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
[[File:packages-dependencies.png|thumb|Diagrama de dependencias rosjava-android]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot_conexion.png|400px|center|Captura de pantalla de la aplicación de Android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de comunicaciones entre sistemas===&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
republish in_transport in:=&amp;lt;in_base_topic&amp;gt; [out_transport] out:=&amp;lt;out_base_topic&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro caso haremos:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
cd /opt/ros/hydro/lib/image_transport&lt;br /&gt;
./republish compressed in:=/camera/image raw out:=/camera/image_test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:republish.png|center|Publicación, republicación y suscripción de imágenes.]]&lt;br /&gt;
&lt;br /&gt;
===Integrar solución de realidad aumentada===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Este será el archivo que ejecutaremos con el roslaunch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
roslaunch aruco_ros android.launch&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
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''.&lt;br /&gt;
&lt;br /&gt;
[[File:Aruco_android.png|center|800px|Diagrama de suscripciones y publicaciones del nodo aruco_android]]&lt;br /&gt;
&lt;br /&gt;
===Validación de funcionamiento en todos los sistemas===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
 &lt;br /&gt;
[[File:tablet.jpg|thumb|Aplicación Android reconociendo los marcadores de RA]]&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_topics.png|center|500px|Diagrama resumen de la primera fase con topics.]]&lt;br /&gt;
&lt;br /&gt;
== Fase II ==&lt;br /&gt;
&lt;br /&gt;
Comprende las nuevas funcionalidades del software de escritorio y la teleoperación del robot.&lt;br /&gt;
&lt;br /&gt;
=== Funcionalidades software MYRA ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA1.png|thumb|Captura de la ventana de configuración de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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].&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA3.png|thumb|Captura de la ventana de medicación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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''.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA4.png|thumb|Captura de la ventana de teleoperación de MYRA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*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.&lt;br /&gt;
&lt;br /&gt;
[[File:capturaMYRA2.png|thumb|Captura de la ventana de debug de MYRA]]&lt;br /&gt;
&lt;br /&gt;
=== Teleoperación ===&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:diagrama_simple2.png|center|550px|Diagrama conceptual de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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].&lt;br /&gt;
&lt;br /&gt;
[[File:joystick_screen.png| thumb| Imagen del joystick de la aplicación Android.]]&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
[[File:nodos_teleop.png|center|700px|Gráfico de ROS de la teleoperación del robot.]]&lt;br /&gt;
&lt;br /&gt;
= Experimentación =&lt;/div&gt;</summary>
		<author><name>AitanaAlo</name></author>	</entry>

	</feed>