scieee AI-readable full text Open interactive document viewer

Estudio del desarrollo de aplicaciones RA para Android

Andreu Ropero, Alejandro

Abstract

Las tecnologías audiovisuales evolucionan día a día. Actualmente tecnologías como el 3D o la alta definición pueden dejar a más de uno sorprendido, pero el siguiente paso ya está aquí. Existen tecnologías que a través de un dispositivo, nos introducen visualmente en realidades alternativas, viendo un mundo digital paralelo, o como la realidad aumentada, que combina la visión del mundo real con una capa superpuesta virtual. Como su propio nombre indica esta tecnología intenta mejorar nuestra visión del mundo real con información o con elementos 3D. El desarrollo de esta tecnología que se ha vivido en los últimos años en gran parte es debido a la existencia de un dispositivo con las características necesarias para hacer uso de ella. Ese dispositivo es el teléfono móvil, que en la actualidad no solo nos ofrece internet, GPS, pantallas táctiles, cámara o incluso sistema operativo, si no que nos ofrece un mercado enorme y que parece no tener techo. En este proyecto haremos una introducción a la realidad aumentada, explicando los diferentes métodos para localizar los objetos que existen hoy en día. También desarrollaremos una aplicación para teléfonos móviles con Sistema Operativo Android que haga uso de la realidad aumentada, que mediante nuestra posición GPS situé un objeto 3D en los puntos de interés de el Parc Mediterrani del Llobregat. Por último haremos un estudio de Layar, una aplicación para Android que consiste en un buscador que hace uso de la realidad aumentada para situar puntos de interés.

Full text

TRABAJO DE FIN DE CARRERA TÍTULO DEL PFC: Estudio del desarrollo de aplicaciones RA para Android TITULACIÓN: Ingeniería Técnica de Telecomunicación, especialidad Telemática AUTOR: Alejandro Andreu Ropero DIRECTOR: Sergio Machado Sánchez FECHA: 18 de enero de 2011 Título: Estudio del desarrollo de aplicaciones RA para Android Autor: Alejandro Andreu Ropero Director: Sergio Machado Sánchez Fecha: 18 de enero de 2011 Resumen Las tecnologías audiovisuales evolucionan día a día. Actualmente tecnologías como el 3D o la alta definición pueden dejar a más de uno sorprendido, pero el siguiente paso ya está aquí. Existen tecnologías que a través de un dispositivo, nos introducen visualmente en realidades alternativas, viendo un mundo digital paralelo, o como la realidad aumentada, que combina la visión del mundo real con una capa superpuesta virtual. Como su propio nombre indica esta tecnología intenta mejorar nuestra visión del mundo real con información o con elementos 3D. El desarrollo de esta tecnología que se ha vivido en los últimos años en gran parte es debido a la existencia de un dispositivo con las características necesarias para hacer uso de ella. Ese dispositivo es el teléfono móvil, que en la actualidad no solo nos ofrece internet, GPS, pantallas táctiles, cámara o incluso sistema operativo, si no que nos ofrece un mercado enorme y que parece no tener techo. En este proyecto haremos una introducción a la realidad aumentada, explicando los diferentes métodos para localizar los objetos que existen hoy en día. También desarrollaremos una aplicación para teléfonos móviles con Sistema Operativo Android que haga uso de la realidad aumentada, que mediante nuestra posición GPS situé un objeto 3D en los puntos de interés de el Parc Mediterrani del Llobregat. Por último haremos un estudio de Layar, una aplicación para Android que consiste en un buscador que hace uso de la realidad aumentada para situar puntos de interés. Title: Study of development for RA applications for Android Author: Alejandro Andreu Ropero Director: Sergio Machado Sánchez Date: January, 18th 2011 Overview Audiovisual technologies evolving day by day, as the 3D technologies currently or high definition may leave more of a surprise, but the next step is here. There are technologies through a device, we introduce visually alternative realities, seeing a parallel digital world, or as augmented reality, which combines real-world view with a virtual overlay. As its name suggests, the technology aims to improve our view of the real world with information or with 3D elements. The development of this technology that has been experienced in recent years is largely due to the existence of a device with the features necessary to make use of it. That device is the mobile phone, which now offers not only internet, GPS, touch screen, camera, or even SO, but it offers a huge market and that seems to have no ceiling. In this project we will make an introduction to augmented reality explaining the different methods for locating objects that exist today. We will also develop one application for mobile phones with Android OS making use of augmented reality, that through our GPS to position 3D object at point of interest Mediterrani Parc del Llobregat. Finally we will study Layar, an application for Android which is a search engine that uses augmented reality to locate points of interest. ÍNDICE INTRODUCCIÓN ............................................................................................... 1 CAPITULO 1. REALIDAD AUMENTADA.......................................................... 1 1.1. Introducción ....................................................................................................................... 1 1.1.1. RA usando markers ................................................................................................ 1 1.1.2. RA usando la posición GPS ................................................................................... 2 1.1.3. RA usando reconocimiento de objetos ................................................................... 3 1.2. Historia ............................................................................................................................... 3 CAPITULO 2. SISTEMA OPERATIVO ANDROID ............................................ 5 2.1. Introducción ....................................................................................................................... 5 2.2. Historia ............................................................................................................................... 6 2.3. Creación de un entorno de desarrollo para Android ..................................................... 7 2.3.1. Instalación de java .................................................................................................. 7 2.3.2. Descarga del SDK de Android................................................................................ 7 2.3.3. Descarga y configuración de eclipse ...................................................................... 8 CAPITULO 3. APLICACIÓN RACAMPUSCASTELLDEFELS ........................ 10 3.1. Objetivo ............................................................................................................................. 10 3.2. Determinar Posición ........................................................................................................ 10 3.2.1 Coordenadas GPS ............................................................................................... 11 3.2.2 Acceso a las coordenadas GPS ........................................................................... 12 3.2.3 Coordenadas UTM ............................................................................................... 12 3.2.4 Cálculo de la distancia entre dos puntos .............................................................. 15 3.2.5 Simular el GPS para el emulador ......................................................................... 15 3.2.6 Obtener las coordenadas desde un GPX ............................................................. 16 3.3. Acceso a la cámara .......................................................................................................... 17 3.4. Mostrar objetos en 3D ...................................................................................................... 17 3.4.1. Scene ....................................................................................................................... 18 3.4.1. Objetos 3D ............................................................................................................... 18 3.5. Sensores del teléfono móvil ........................................................................................... 18 3.5.1. Acceso a los sensores del teléfono móvil ............................................................... 18 3.5.2. Simulación de los sensores en el emulador ............................................................ 19 3.6. Ciclo de vida de una aplicación Android ....................................................................... 22 CAPITULO 4. LAYAR ...................................................................................... 24 4.1. Introducción ...................................................................................................................... 24 4.2. Creación de una capa para Layar ..................................................................................... 24 4.2.1. Registro de la capa .................................................................................................. 24 4.2.2. Creación de un hosting de capas layar privado ...................................................... 26 4.2.3. Testeo de la capa .................................................................................................... 31 CAPITULO 5. CONCLUSIONES ..................................................................... 32 5.1. Conclusiones Generales ................................................................................................... 32 5.2. Ambientalización ................................................................................................................ 32 5.3. Posibles Futuras Mejoras .................................................................................................. 33 CAPITULO 6. REFERENCIAS DE INTERÉS .................................................. 34 ANEXOS .......................................................................................................... 36 6.1. Explicación campos de las BD ....................................................................................... 36 6.1.1. poi_table.sql ............................................................................................................ 36 6.1.2. action_table.sql ........................................................................................................ 37 6.1.3. transform_table.sql .................................................................................................. 38 6.1.4. object_table.sql ........................................................................................................ 38 6.1.5. Diagrama de la Base de datos ................................................................................ 39 ÍNDICE DE FIGURAS Ilustración 1 Muestra de Realidad Aumentada mediante Markers ..................... 1 Ilustración 2 Ejemplo de dos markers ................................................................ 1 Ilustración 3 Imagen del videojuego de la PSP Invizimals ................................. 2 Ilustración 4 Logotipo de RA .............................................................................. 3 Ilustración 5 Interfaz de Eclipse .......................................................................... 8 Ilustración 6 Ventana donde aparecen versiones disponibles de Android ......... 9 Ilustración 7 Intercambio de señales entre dispositivo y satélites en el GPS ... 11 Ilustración 8 Representación de la tierra por latitudes y longitudes .................. 11 Ilustración 9 Proyección de la esfera terrestre en un cilindro ........................... 13 Ilustración 10 Ejemplo UTM ............................................................................. 13 Ilustración 11 Zonas UTM ................................................................................ 14 Ilustración 12 Origen de coordenadas y puntos en el Campus ........................ 15 Ilustración 13 Ventana de control del emulador de Android ............................. 16 Ilustración 14 Combinación de un objeto 3D con las capturas de la cámara. .. 17 Ilustración 15 Icono de SensorSimulator en el menú del emulador .................. 20 Ilustración 16 Aplicación SensorSimulator ....................................................... 20 Ilustración 17 Pestaña Settings de SensorSimulator ........................................ 21 Ilustración 18 Pestaña Testing de SensorSimulator ......................................... 21 Ilustración 19 Ciclo de vida de una aplicacion Android .................................... 23 Ilustración 20 Pagina de Layar con usuario Logeado ....................................... 25 Ilustración 21 Pagina de creación de Layar...................................................... 26 Ilustración 22 Pagina de configuración del BIW de Layar ................................ 26 Ilustración 23 Ventana principal de XAMPP ..................................................... 27 Ilustración 24 Pagina principal de MySQL ........................................................ 28 Ilustración 25 Muestra de la BD del hosting de capas ...................................... 28 Introducción 1 INTRODUCCIÓN En esta última década se han desarrollado aplicaciones las cuales a través de un dispositivo ofrecen una visión del mundo real, a través de las imágenes capturadas por la cámara, que se combinan con una capa virtual en la que se puede ver desde información sobre nuestro entorno real hasta gráficos 3D. Esta tecnología se llama realidad aumentada y poco a poco está llegando a nuestra vida diaria. Como hemos comentado para mostrar la realidad aumentada hace falta un dispositivo y como mínimo este dispositivo tiene que contar con una cámara y con un cierto nivel computacional. El teléfono móvil, además de estas características, nos da acceso a un gran número de usuarios. Los teléfonos móviles de hoy en día están más cerca de los ordenadores que tenemos en casa que del primer teléfono móvil, que solo permitía llamar. No sólo llevan cámara, sino que también nos ofrecen sistema operativo, posibilidad de usar aplicaciones con alto rendimiento gráfico, movilidad, servicio de posicionamiento GPS y acceso a internet. Este proyecto tiene como objetivo crear una aplicación que utilice la Realidad Aumentada, de manera que podamos observar lo que captura la cámara de vídeo con una capa virtual superpuesta y donde al aproximarse a los puntos de interés del Campus, como por ejemplo la Biblioteca o la Cafetería, aparezca un objeto 3D. La plataforma elegida para su desarrollo serán los teléfonos móviles con Sistema Operativo Android. Los motivos por los que elegimos Android son: - Es libre, así que cualquier desarrollador puede bajarse su código fuente y crear aplicaciones. - Está en pleno auge y cuenta con una gran comunidad de desarrolladores. El proyecto está dividido en 5 capítulos que se estructuran de la siguiente manera: En el primer capítulo haremos una breve introducción a la Realidad Aumentada y los tipos que hay, dando un pequeño repaso a su reciente historia. En el segundo, explicaremos qué es Android, su historia, y explicaremos cómo crear un entorno de desarrollo para aplicaciones Android mediante el IDE Eclipse y cómo probar nuestras aplicaciones en el ordenador mediante un emulador de Android. 6 Estudio del desarrollo de aplicaciones RA para Android 2.2. Historia En julio de 2005, Google compra Android Inc., una pequeña empresa basada en Palo Alto, California, y entonces empezaron a trascender rumores acerca de que Google estaba planeando construir su propio teléfono móvil libre y hasta gratis, enfocándose en ganancias de publicidad en las búsquedas de las personas para mover un poco el status quo del mercado móvil. Obviamente, esos rumores de un móvil gratis fueron falsos pero al final Android resultó ser algo mucho más interesante y revolucionario: un sistema operativo móvil open source propulsado nada más y nada menos que por Google… así que repasemos la historia de Android por más breve que sea: El lanzamiento inicial del Android Software Development Kit apareció en noviembre de 2007 y algún tiempo después -mediados de agosto de 2008apareció el Android 0.9 SDK en beta. Al otro mes -fines de septiembre 2008-, finalmente lanzaron Android 1.0 SDK (Release 1). Seis meses después - principios de marzo 2009-, Google presentó la versión 1.1 de Android para el “dev phone” y la actualización incluía algunos cambios estéticos menores, además de soporte para “búsquedas por voz”, aplicaciones de pago en Android Market, arreglos en el reloj alarma, mejoras en Gmail y demás. A mediados de mayo 2009, Google lanza la versión 1.5 de Android OS (llamada Cupcake) con su respectivo SDK que incluía: grabación de video, soporte para Estéreo Bluetooth, sistema de teclado personalizable en pantalla, reconocimiento de voz y el AppWidget framework que permitió que los desarrolladores puedan crear sus propios widgets para la página principal. Android 1.5 fue la versión que más personas usaron para iniciarse en Android (con el T-Mobile G1 y HTC Dream en USA) y sigue siendo actualmente una versión que se encuentra disponible en muchos móviles Android como el HTC Hero o varios de los nuevos MOTOBLUR como el Motorola Backflip o Motorola Dext. Luego apareció Android 1.6 “Donut” en septiembre de 2009 con mejoras en las búsquedas, indicador de uso de batería y hasta el VPN control applet. De hecho, esta versión fue tan buena que todos los Android que no tienen una interfaz personalizada como HTC Sense o Motoblur ahora corren 1.6, incluyendo el T-Mobile G1, y en la actualidad sigue siendo la versión más popular. Para llevar las cosas más allá, el Motorola Droid (Motorola Milestone) fue lanzado con Android 2.0 “Eclair” en el que se podían encontrar aplicaciones precargadas que requerían un hardware mucho más rápido que la generación anterior de teléfonos móviles con Android (un mes luego, salió 2.0.1, una pequeña actualización). Poco después, el Google Nexus One (el cuál marcó un antes y un después ya que Google trató de venderlo por su cuenta y liberado, además de en algunas operadoras) llegó con Android 2.1 (el cual algunos llamaron “Flan” pero Google sigue considerándolo parte de “Eclair”) con nuevas capacidades 3D, live Sistema Operativo Android 7 wallpapers y lo que significó la gran mejora de la plataforma desde 1.6. De hecho, todos están pidiendo que les actualicen a 2.1 sus propios dispositivos con Android pero es probable que muchas de las novedades no funcionasen bien en versiones anteriores. Si miramos al futuro de Android podemos ver como Android Market es la tienda de aplicaciones que más crece, llegando a las 40 mil aplicaciones. Android es el sistema operativo que más está creciendo en Estados Unidos rivalizando con iPhone. Motorola junto con algunos otros fabricantes están propulsando el desembarco en América Latina de Android con equipos económicos, y por el otro lado algunos se quejan de la fragmentación de la plataforma debido a las diferentes versiones. Pero lo cierto es que ya se está empezando a desarrollar el know how para ofrecer las actualizaciones de manera que sean compatibles para la versión 2.1 en adelante. 2.3. Creación de un entorno de desarrollo para Android Así pues vamos a pasar a ver que tenemos que hacer para desarrollar aplicaciones en Android. Lo primero será la configuración del entorno de desarrollo para Android mediante el IDE Eclipse. En este proyecto cabe aclarar que trabajaremos con Windows. 2.3.1. Instalación de java Es muy probable que nuestro PC ya cuente con Java, pero por si acaso descargaremos una versión actualizada desde su web oficial: http://www.java.com/es/download/ El archivo descargado lo ejecutaremos y de esa manera instalaremos Java. 2.3.2. Descarga del SDK de Android Como hemos comentado Android es un software libre, así que cualquier desarrollador puede bajarse el SDK, que contiene su API, y desarrollar aplicaciones. En nuestro caso nos descargaremos la versión para Windows de este enlace: http://developer.android.com/sdk/index.html El archivo descargado es un ZIP, lo descomprimiremos y lo dejaremos en la ubicación deseada, que no es importante ahora pero más tarde la utilizaremos. En nuestro caso la dejaremos en “c:”. 8 Estudio del desarrollo de aplicaciones RA para Android 2.3.3. Descarga y configuración de eclipse Eclipse es una plataforma de desarrollo open source basada en Java. Es un desarrollo de IBM cuyo código fuente fue puesto a disposición de los usuarios. En si mismo Eclipse es un marco y un conjunto de servicios para construir un entorno de desarrollo a partir de componentes conectados (plug-in). Hay plug-ins para el desarrollo de Java (JDT Java Development Tools) así como para el desarrollo en C/C++, COBOL o Android, entre muchos otros. Para descargar Eclipse visitaremos su página y descargaremos la versión “Classic”, en nuestro caso es la versión 3.6.1: http://www.eclipse.org/downloads/ Lo que se descargará será un ZIP, lo descomprimiremos y dejaremos el contenido en la ubicación que mejor nos parezca, en nuestro caso será en “c:”. Dentro de la carpeta descomprimida habrá un exe, recomiendo crear un acceso directo en el escritorio para no tener que acceder siempre a la carpeta. Si ejecutamos el eclipse.exe nos preguntará que workspace utiliza. El workspace es el directorio donde eclipse guardará el código de las aplicaciones que desarrollemos, y en nuestro caso crearemos uno nuevo en la misma carpeta del eclipse “c:/eclipse/WorkSpace”. Al entrar podremos ver la interfaz de Eclipse: Ilustración 5 Interfaz de Eclipse Sistema Operativo Android 9 Ahora configuraremos el plugin de Android para poder programar en esa plataforma. Accederemos en la interfaz de Eclipse al menú “Help->Install new Software…”, clicaremos en “Add…”. En la siguiente ventana en “Nombre” pondremos “Android” y en “Location” la URL: https://dl-ssl.google.com/android/eclipse/ Una vez hecho esto, en la ventana inferior habrán aparecido algunas opciones para seleccionar, las seleccionaremos todas y le daremos a “Next”. Una vez descargado e instalado reiniciamos Eclipse como nos pide, y al volverlo al iniciar ya tendremos las funcionalidades del plugin disponibles. Lo siguiente será referenciar SDK Android, para ello accederemos en el menú a: “Windows -> Preference”, le daremos a Android y en “SDK Location” pondremos el directorio donde hemos dejado el SDK (Apartado 2.3.2). Si le damos a Apply y todo lo anterior lo hemos esta seguido al pie de la letra nos reconocerá el SDK y nos aparecerá una ventana como la siguiente: Ilustración 6 Ventana donde aparecen versiones disponibles de Android Llegados a este punto ya estamos preparados para trabajar, pero antes intentaremos bajarnos las actualizaciones por si acaso alguna de las versiones descargadas ha sido mejorada, para ellos iremos al menú “Help -> Check for Update” y si nos aparece alguna opción la descargaremos. Si seguimos estos pasos correctamente ya tendremos Eclipse preparado para crear aplicaciones Android. 10 Estudio del desarrollo de aplicaciones RA para Android CAPITULO 3. APLICACIÓN RACampusCastelldefels 3.1. Objetivo Como se ha comentado en la introducción el objetivo de este proyecto es el desarrollo de una aplicación de Realidad Aumentada para teléfonos móviles con sistema operativo Android. En la aplicación podremos observar por pantalla del dispositivo nuestro entorno real a través de las capturas de la cámara y una capa virtual superpuesta con varios objetos en 3D situados en posiciones de interés del Parc Mediterrani de la Tecnologia. Los objetos 3D solo serán visibles cuando el dispositivo esté a menos de 100 metros de distancia y el dispositivo móvil esté enfocando en esa dirección. De este modo podemos determinar que nuestra aplicación necesitará:  Poder determinar la posición del dispositivo.  Saber la dirección hacia la que está enfocado el dispositivo.  Mostrar por pantalla las imágenes capturadas por la cámara del dispositivo.  Crear una capa virtual superpuesta que en los puntos de Interés muestre un objeto 3D. 3.2. Determinar Posición Para saber la posición del dispositivo utilizaremos un recurso del que disponen la mayoría de teléfonos móviles, el GPS. El GPS nos proporcionará una latitud y una longitud con la que podremos situar el dispositivo móvil, el problema es la precisión de la medida que depende de algunos factores como el número de satélites disponibles o interferencias. La posición GPS de los puntos de interés será fija, para facilitar nuestro trabajo en nuestra aplicación hemos creado la clase objeto Punto.java, en la que guardaremos la latitud, longitud entre otras propiedades. Aplicación RACampusCastelldefels 11 3.2.1 Coordenadas GPS El Sistema de posicionamiento global o GPS es un sistema global de navegación por satélite que permite determinar la posición del dispositivo por todo el mundo y que se determinan a partir de la distancia a los satélites que forman parte de este sistema. Ilustración 7 Intercambio de señales entre dispositivo y satélites en el GPS El sistema GPS fue puesto en marcha por el ejército de los EUA y en 2009 se liberalizo. El sistema consta de 24 satélites geoestacionarios que cubren toda la superficie de la tierra, de las estaciones terrestres que controlan los satélites y se precisa de un terminal receptor con GPS para poder acceder a la señal. La posición del GPS se basa en las coordenadas geográficas y vienen dada por las coordenadas angulares latitud, que mide el ángulo entre cualquier punto y el ecuador, y por la longitud, que mide el ángulo entre el punto y el meridiano de Greenwich. Ilustración 8 Representación de la tierra por latitudes y longitudes Por ejemplo en el Parc Mediterrani de la Tecnologia podemos encontrar el punto con las coordenadas (41.27548027005814, 1.9875195622444153). 12 Estudio del desarrollo de aplicaciones RA para Android Uno de los problemas de estas coordenadas es que nos devuelven la posición que tenemos en la esfera terrestre, por lo que no nos proporcionará una posición (x,y). Eso es lo que nos interesaría para situar los objetos respecto al dispositivo y por eso decidimos pasar las coordenadas de GPS a el sistema UTM que sí las proporciona en ese formato. El otro problema es la precisión, que depende tanto de la cobertura de los satélites con los que cuenta el sistema, como de otros factores que pueden hacer variar la posición en varios metros. 3.2.2 Acceso a las coordenadas GPS El acceso a la posición GPS en Android se hace a través de la librería Android.Location mediante las clases LocationManager y LocationListener. Primero que tenemos que hacer es añadir el permiso en el AndroidManifest.xml para que la aplicación pueda tener acceso al GPS. Para ello añadiremos la línea: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> LocationManager proporciona acceso al servicio GPS y nos permite obtener actualizaciones periódicas de la situación geográfica del dispositivo. Se consigue a través de getSystemService(Context.LOCATION_SERVICE). Utilizaremos la función requestLocationUpdates para asignar un LocationListener como oyente del proveedor y configurar el tiempo o distancia entre las actualizaciones. LocationListener se utiliza para recibir las notificaciones de cambio del LocationManager. Es obligatorio declarar sus métodos onLocationChanged, onProvaiderDisabled, onStatusChanged y onProvaiderEnabled. De ellos sólo modificaremos el onLocationChanged. En el onLocationChanged recibiremos un objeto location, que es una clase que contiene entre otros parámetros la latitud y longitud nueva del dispositivo. 3.2.3 Coordenadas UTM El Sistema de Coordenadas Universal Tranversal de Mercator o UTM es un sistema de coordenadas que mediante una proyección, representa la superficie esférica terrestre sobre una superficie cilíndrica, tangente al meridiano, que al desplegarse genera un mapa terrestre plano. El problema es que de este modo las zonas más cercanas a los polos se hacen más grandes. Aplicación RACampusCastelldefels 13 Ilustración 9 Proyección de la esfera terrestre en un cilindro Es importante aclarar que el UTM localiza la posición dentro de una zona y con unas coordenadas (x, y), en lugar de devolverte un punto. De esta manera contra más pequeño sea el cuadrante más precisión tendremos. Ilustración 10 Ejemplo UTM Como se puede observar en la ilustración 10 contra más precisión tenga la medida, más pequeña es la zona donde localizamos al dispositivo y más precisión tendrá. De este modo podemos localizar en dispositivo en un eje (x, y) en metros. 14 Estudio del desarrollo de aplicaciones RA para Android En las zonas limítrofes existe una extensión que se sobrepone unas con otras de ese modo algún punto puede tener su posición en 2 zonas distintas. El punto que tenemos en el apartado 3.2.1, en UTM tiene las coordenadas 31T E 415203'78 N 4569832'99. Ilustración 11 Zonas UTM Para distancias grandes el UTM tiene el problema de que hay un eje diferente para cada zona y el cálculo se complica, pero en nuestro caso y para medidas no superiores a 100 metros, el objeto se da por defecto en nuestra misma zona. De todos modos hemos decidido montarnos nuestro propio tablero, de manera que su eje de coordenadas está situado en el punto UTM 31T E 414920 N 4569708 como se puede ver en la siguiente imagen, de este modo las posiciones serán relativas a ese punto. También podemos observar los 4 puntos de interés que hemos colocado. Aplicación RACampusCastelldefels 15 Ilustración 12 Origen de coordenadas y puntos en el Campus Para trabajar con las coordenadas UTM utilizaremos la clase Coordinate Conversion.java que nos podemos descargar de: http://www.ibm.com/developerworks/java/library/j-coordconvert/index.html Gracias a esta clase podremos pasar coordenadas de UTM a GPS y a la inversa, para pasar de GPS a UTM utilizaremos la función latLon2UTM, a la que se le pasan como parámetros la longitud y latitud y te devuelve un String con la coordenada UTM. 3.2.4 Cálculo de la distancia entre dos puntos Para determinar si la distancia entre los puntos es menor o superior a 100m utilizaremos las coordenadas GPS ya que es más fácil que con las UTM. La misma librería Android.location nos permite calcular la distancia entre 2 puntos mediante la función distanceTo. 3.2.5 Simular el GPS para el emulador Eclipse nos ofrece la herramienta DDMS para simular el envío de unas coordenadas GPS. 22 Estudio del desarrollo de aplicaciones RA para Android A partir de ahora en las aplicaciones que queramos que usen el sensorsimulator deberán incluir la librería openintens antes nombrada y en lugar de conectarse al Hardware del sistema se conectarán al puerto que usa la aplicación sensorsimulator.jar, por lo que tendremos que tenerla encendida. 3.6. Ciclo de vida de una aplicación Android Una aplicación Android funciona como un proceso Linux, por tanto, una característica fundamental de Android es que el tiempo y ciclo de vida de una aplicación no están controlados por la misma aplicación, sino que lo determina el sistema a partir de una combinación de estados como pueden ser qué aplicaciones están funcionando, qué prioridad tienen para el usuario y cuánta memoria queda disponible en el sistema. A la hora de programar es muy importante controlar bien el ciclo de vida de una aplicación, y aún lo es más cuando estamos hablando de móviles. Toda aplicación que está funcionando en el móvil aumenta el consumo, con lo que si no controlas los procesos que están encendidos es fácil agotar rápidamente la batería del móvil, lo que puede ser muy molesto para el usuario. Así pues vamos a ver cómo podemos programar de manera que nuestra aplicación consuma el mínimo de recursos tanto si está encendida como pausada. Lo correcto es que, mientras estas utilizando una aplicación, ésta pueda disponer del máximo de la CPU del móvil, pero al pausarla, la aplicación libere todos los recursos librando al móvil de una carga innecesaria. El ciclo de vida del componente Activity es como el siguiente: Aplicación RACampusCastelldefels 23 Ilustración 19 Ciclo de vida de una aplicacion Android Como hemos podido observar onCreate y onDestroy se centran en el inicio o finalización de la aplicación. Después de ellos llegarían el onStart y el onStop, que delimitan los momentos en que la aplicación está visible o no (visible significa que está en segundo plano), y también están el onResume y el onPause que delimitan cuando la actividad está en el foco del usuario y cuando este puede interactuar con ella. Visto esto en nuestra aplicación, los servicios que más nos harán consumir son el GPS y el sensor. Así pues los activaremos en el onResume() asegurándonos que solo están activados mientras el usuario interactúa con nuestra actividad como foco y los finalizaremos en el onPause(). De este modo evitaremos que la batería se acabe por el consumo del GPS de manera innecesaria. 24 Estudio del desarrollo de aplicaciones RA para Android CAPITULO 4. LAYAR 4.1. Introducción Layar es una aplicación disponible para móviles con sistema operativo Android y para Iphone, que a partir de nuestro posicionamiento GPS, la brújula, la cámara y una conexión a internet nos permite mostrar por pantalla las capturas del mundo real, añadiendo una capa virtual con información y posicionamiento de unos puntos llamados puntos de interés (POI). Así pues podríamos decir que Layar es un buscador que hace uso de la Realidad Aumentada. A nivel de usuario lo primero que se tiene que hacer cuando se conecta a Layar es elegir una capa (o layer en ingles) a la que conectarse. Antes de todo,¿qué es una capa? Una Capa es un grupo de POIs que pueden tener una temática en común o no; por ejemplo se puede hacer una capa sobre puntos de interés en el campus (cafeteria, parquing de alumnos, biblioteca …). Cada uno de estos lugares sería un POI, y se mostraría en la pantalla de Layar su posición respecto a la nuestra y información añadida o no, la información añadida puede llegar desde un teléfono de interés, un mail de contacto, enlaces a URL externas o imágenes 2d o 3d. Una vez seleccionada la capa, la aplicación Layar obtiene la posición GPS del usuario y hace una petición de POI enviando al servidor de Layar los campos: Nombre de capa, posición GPS, rango para mostrar puntos y versión de Layar con la que se trabaja. Cuando Layar recibe el mensaje, comprueba si en su base de datos existe esa capa y de ser así, en la base de datos (BD) de Layar ya tendrá asociada una URL de una página del autor que hace de proxy entre el servidor Layar y la BD del autor, reenvia la petición a dicha página y esta le devuelve los puntos que están en el rango tras consultar a la BD. Una vez recibidos los puntos la aplicación se encarga de posicionarlos según la orientación del usuario y de printar por pantalla, si es necesario, las imágenes o los objetos 2-3d. 4.2. Creación de una capa para Layar 4.2.1. Registro de la capa Para crear una capa en Layar lo primero que tenemos que hacer es darnos de alta como desarrollador de Layar, para ello rellenamos los datos en la página: https://www.layar.com/accounts/register/ Layar 25 Mientras la cuenta se activa, lo que puede tardar unos días, podemos pasar a crear el hosting que necesitaremos para tener accesible nuestros POI (Apartado 4.2.2). Una vez aceptados, accedemos a www.layar.com e iniciaremos nuestra sesión. Una vez inicializada la sesión, en la parte derecha superior podremos acceder a “My layers” para empezar a crear capas. Ilustración 20 Pagina de Layar con usuario Logeado En la página siguiente seleccionaremos “Create a layer”, y ya podremos rellenar los campos para crear la capa: Campo Función Layer Name El nombre de la capa que elijamos ponerle Title Título con el que queremos que aparezca Publisher Name Nuestro nombre o Nick de desarrollador Layer type 2D o 2D-3D, la elección dependerá de si prevemos que nuestra capa será con objetos en 3D o no. API endpoint URL La dirección de la página que tiene acceso a nuestra BD, si en este momento aún el hosting preparado podemos poner cualquier URL aunque no funcione. Short Descripcion Breve descripción del contenido de la capa 26 Estudio del desarrollo de aplicaciones RA para Android Ilustración 21 Pagina de creación de Layar Si enviamos los datos nos pasa a una página en la cual podemos personalizar la capa, con campos como por ejemplo: los colores de interfaz del usuario en la aplicación o configurar la capa como de pago. Ilustración 22 Pagina de configuración del BIW de Layar 4.2.2. Creación de un hosting de capas layar privado Como hemos explicado al principio, para poder ofrecer el servicio de una capa necesitamos tener una página web que hará de proxy con las base de datos y Layar 27 que será accesible desde la Internet. Para ello vamos a explicar cómo tener un hosting en nuestro ordenador con unos sencillos pasos mediante software libre. Layar nos ofrece tanto una consulta para crear la BD como el código de la página que hará de proxy. Se pueden encontrar en los tutoriales oficiales de Layar: http://layar.pbworks.com/w/page/7783228/FrontPage Para crear el hosting utilizaremos XAMPP. XAMPP es un programa gratuito que nos instala Apache y MySQL de manera fácil y sencilla. Lo podemos descargar de: http://www.apachefriends.org/download.php?xampp-win32-1.7.3.exe Una vez descargado lo ejecutamos, lo instalaremos en algún directorio bien ubicado puesto que luego tendremos que acceder a él (en nuestro caso será “c:\”).Una vez instalado lo ejecutaremos y podremos observar una ventana como la siguiente: Ilustración 23 Ventana principal de XAMPP Para iniciar el servicio clicaremos el Start de Apache y MySql que son los 2 servicios que necesitamos. 4.2.2.1. Configuración del a Base de Datos Para configurar la BD lo primero que tendremos que hace es acceder al modo administrador. Para ello clicaremos en el Admin de MySql desde Xampp, la pagina web en el navegador que tengamos predeterminado. 28 Estudio del desarrollo de aplicaciones RA para Android Ilustración 24 Pagina principal de MySQL Lo primero será crear una BD. Para ello introduciremos en el recuadro donde pone “Crear nueva base de datos” un nombre, (en nuestro tutorial lo llamaremos “mylayarpois”) y le daremos a Crear. Una vez creada la BD se va a la pestaña SQL y se ejecuta la consulta que Layar nos facilita. Ya tendremos la BD creada. Ilustración 25 Muestra de la BD del hosting de capas Layar 29 Antes de completar los campos de los POI es importante saber el significado de cada uno de esos puntos. En el Anexo 6.1 podemos ver tanto el diagrama de las bases de datos como el significado de cada campo. Para introducir los POI, tendremos que ir completando las tablas. Cada POI tiene que estar definido en la poi_table.sql, si tiene acciones también tendrá que estar definido en la de action_table.sql y de tener un objeto para mostrar en 2d-3d tendrá que estar disponible en la object_table.sql y transform_table.sql. Una vez seleccionada la tabla que queremos rellenar, iremos a la pestaña “Insertar” que nos aparece en phpMyAdmin y la seleccionaremos. Como podemos observar de esta manera simplemente tenemos que rellenar los valores de la tabla con los valores que deseemos o mediante consultas. A continuación explicaremos cómo rellenar un POI para que muestre una imagen 3d, que tendrá que estar en formato l3d. La imagen se mostrará al tener el dispositivo a 100m, un icono en png para mostrar cuando no se muestre el l3d y un audio en formato mp3 que se escuchará cuando el usuario lo seleccione. Tabla poi_table.sql Campo Ejemplo id 1 attribution Alejandro Andreu title Entrada Cafetería-EPSC lat 41.2754540646 lon 1.9853067398 imageURL http://147.83.113.237/imagenes/cafetería.png Line4 Informacion línea 4 -- distance:%distance% Line3 Información línea 3 Line2 Información línea 2 type 0 dimension 3 alt 0 relativeAlt 0 distance 0 inFocus 0 doNotIndex 0 showSamllBiw 1 showBiwOnClick 1 Tabla action_table.sql Campo Ejemplo poID 1 label audio uri http://147.83.113.237/imagenes/lacafetería.mp3 30 Estudio del desarrollo de aplicaciones RA para Android autoTriggerRange 0 autoTriggerOnly 0 ID 1 contentType Audio/mpeg method GET activityType 2 params versión closeBiw 0 showActivity 1 activityMessage NULL Tabla object_table.sql Campo Ejemplo id 1 poiID 1 baseURL http://147.83.113.237/imágenes/ full taza.l3d reduced taza.l3d icon cafetería.png size 40 Tabla transform_table.sql Campo Ejemplo ID 1 poiID 1 rel 1 angle 0 scale 2 El formato l3d es característico de layar, en su página web nos facilitan una aplicación que cambia de formato obj/mtl a l3d y se puede descargar en la siguiente URL: http://site.layar.com/downloads/Layar3DModelConverter.jnlp 4.2.2.2. Configuración Pagina-Proxy La página web que se construye a partir del tutorial de layar hemos modificado las líneas: $dbhost = "localhost"; $dbdata = "database_name"; $dbuser = "database_username"; Layar 31 $dbpass = "database_password"; Tendremos que sustituir "database_name" por el nombre de nuestra BD, en nuestro caso “mylayarpois”, y "database_username" y "database_password", con la configuración predeterminada de XAMPP son “root” y “” respectivamente. Una vez modificado guardaremos la página en la dirección “c:/xampp/htdocs”. 4.2.3. Testeo de la capa Para poder comprobar el buen funcionamiento de nuestra capa tendremos que asegurarnos de que tenemos Apache y MySQL funcionando. Si accedemos a la página de Layar, en “my layers”, podremos comprobar en “Edit” si la configuración es la deseada (sobretodo que la dirección de la página web sea la correcta). Existen 2 maneras de testear la capa, desde un móvil con layar instalado o mediante una herramienta que nos ofrece Layar en su página web. 4.2.3.1. Testeo desde la página de Layar En la página layar, si accedemos a “my layers”, donde está listada nuestra capa, podremos entrar en “Test” y pasaremos a una página donde aparece una pantallita con google maps, donde podremos arrastrar el icono de la persona hasta una lugar dentro del rango de nuestra capa y emulará la posición GPS y algunos parámetros necesarios como la versión o el rango. Al darle a “Load POIs”, si estás correctamente dentro del rango y la página es accesible, te saldrá un listado de los POI que están en el rango. Si es así ya sabes que tu capa funciona correctamente. 4.2.3.1. Testeo desde la aplicación Layar Podemos hacer un test de nuestra capa con la aplicación Layar instalada en un móvil con Android sin necesidad de que la capa esté publicada, para ello nos identificaremos con nuestra cuenta entrando en la pestaña de “más” y seleccionando la opción de usuario. Al introducir nuestra clave correctamente si después volvemos al menú principal y seleccionamos la opción de capas podremos ver una opción que es desarrollador. Al seleccionarla aparecerán todas las capas que tengamos en fase de testeo y si están accesible las podremos probar. 38 Estudio del desarrollo de aplicaciones RA para Android nge distancia del POI se mostrará el recurso autoTriggerOnl y tinyint(1) Si esta activado solo se podrá ver el objeto cuando se cumpla el autoTriggerOnly ID int(10) Id de la acción, se incrementa de 1 en 1 contentType varchar(255) Tipo de contendio entre los disponibles: "Text / html", "text / plain", "audio / mpeg", "audio/mp4", "Video/3gpp", "Video/mp4", "application / vnd.layar.internal", "application / vnd.layar.async" method enum('GET','PO ST') GET por defecto activityType int(2) Muestra el icono con el que se mostrará la actividad de los reflejados en esta lista: http://layar.pbworks.com/w/page/3076387 8/Activity-types-for-POI-actions params varchar(255) Por defecto versión closeBiw tinyint(1) Si está activado al acceder a la acción se cierra el BIW showActivity tinyint(1) Si está activado al seleccionar un POI se muestra que tiene acciones, si no estarán ocultas. activityMessag e varchar(255) Mensaje que se muestra cuando está cargando la acción. 6.1.3. transform_table.sql Campo Tipo Uso ID int(10) número de objeto poiID varchar(255) Id del POI al que pertenece rel booleano Si el valor es true, el objeto siempre dará la cara al usuario. angle decimales Angulo de rotación del objeto respecto a z. scale decimales Se usa para escalar el objeto a diferentes tamaños. 6.1.4. object_table.sql Campo Tipo Uso id int(10) número de objeto Anexos 39 poiID varchar(255) Id del POI al que pertenece baseURL varchar(255) dirección URL raíz de los objetos full varchar(255) Representación del objeto cuando se está cerca (menos de 25 m) reduced varchar(255) Representación del objeto cuando se está a media distancia (25 -100 m) 2D: Resolución menor a 100px 3D: tamaño inferior a unos 50 polígonos. icon varchar(255) Representación del objeto cuando está a más de 100m, si las representaciones full o reduced fallan se muestra ésta. size float(15,5) 2D: tamaño de la imagen en metros 3D:Tamaño de la arista más pequeña del objeto en metros 6.1.5. Diagrama de la Base de datos