TFG_Francisco Jimenez Moral - Ruidera

Anuncio
UNIVERSIDAD DE CASTILLA-LA MANCHA
ESCUELA SUPERIOR DE INFORMÁTICA
GRADO EN INGENIERÍA INFORMÁTICA
TECNOLOGÍA ESPECÍFICA DE
COMPUTACIÓN
TRABAJO FIN DE GRADO
ShoppingBeacon: Sistema asistencial en
superficies comerciales basado en
posicionamiento en interiores
Francisco Jiménez Moral
Septiembre, 2015
S HOPPING B EACON : S ISTEMA ASISTENCIAL EN SUPERFICIES
COMERCIALES BASADO EN POSICIONAMIENTO EN INTERIORES
UNIVERSIDAD DE CASTILLA-LA MANCHA
ESCUELA SUPERIOR DE INFORMÁTICA
Tecnologías y Sistemas de Información
TECNOLOGÍA ESPECÍFICA DE
COMPUTACIÓN
TRABAJO FIN DE GRADO
ShoppingBeacon: Sistema asistencial en
superficies comerciales basado en
posicionamiento en interiores
Autor: Francisco Jiménez Moral
Director: Dr. Ramón Hervas Lucas
Septiembre, 2015
Francisco Jiménez Moral
Ciudad Real – Spain
E-mail:
[email protected]
c 2015 Francisco Jiménez Moral
Muchos de los nombres usados por las compañías para diferenciar sus productos y servicios son
reclamados como marcas registradas. Allí donde estos nombres aparezcan en este documento, y
cuando el autor haya sido informado de esas marcas registradas, los nombres estarán escritos en
mayúsculas o como nombres propios.
i
TRIBUNAL:
Presidente:
Vocal:
Secretario:
FECHA DE DEFENSA:
CALIFICACIÓN:
PRESIDENTE
Fdo.:
VOCAL
SECRETARIO
Fdo.:
Fdo.:
iii
Resumen
En un mundo en constante evolución en el que las posibilidades de conexión aumentan
año tras año, ya que la mayor parte de la población dispone de acceso a redes inalámbricas,
existe un gran potencial colectivo y económico en los servicios basados en la localización,
que aún no han sido aprovechados.
Debido a la fuerte expansión en el mercado de las redes inalámbricas y del GPS, emerge
la necesidad de desarrollar servicios de localización en interiores (denominados entornos
“indoors”, de interior), ya que la señal de GPS no llega dentro de los edificios.
Estos servicios de localización resultan muy útiles cuando se quiere localizar algo o a
alguien en el interior de un edificio y dado que pasamos una gran parte de nuestro tiempo en
interiores (el 90 % según un artículo de Nokia [Des12]) es indudable la utilidad de este tipo
de soluciones.
En base a la problemática de la localización indoor, se propone un sistema que se basa en
la recepción de señales que permitan localizar al usuario dentro de un edificio en un mapa
previamente facilitado y con unos puntos a recorrer para guiar al usuario hasta ellos. En
concreto las superficies comerciales, que debido a sus estrategias de marketing, se encargan
de redistribuir los productos en las estanterías colocándolos en nuevas posiciones, cada cierto
tiempo. Como consecuencia a estos cambios de posición, surgen esas innumerables vueltas
que se dan por los pasillos para encontrar todo lo que quiere el usuario.
A raíz de estas motivaciones surge la propuesta del presente Trabajo Fin de Grado. Se
plantea diseñar y desarrollar un sistema software asistencial bajo la plataforma iOS, para
entornos comerciales mediante localización indoor basado en redes inalámbricas. Dicho sistema, se centrará en un organizador de compras para una determinada superficie comercial
que esté adaptada mediante el uso de un mapa que muestre la distribución del edificio. De
esta manera el usuario tendrá que seleccionar los productos del establecimiento para después ser ubicado y en base a esta localización ser guiado siguiendo un orden de manera
que el usuario pase por todos los productos escogidos realizando la ruta de menor coste y
ahorrando tiempo y esfuerzo.
V
Abstract
In a world in a constant evolution, where connection availability increases year to year
since most of the population has access to wireless networks, there exist a great collective
and economical potential in services based on location awareness, from which the most of it
has not been made yet.
Due to the great expansion in the market of wireless networks and GPS based technologies,
the need of developing services based on indoor location awareness has arisen, since GPS
signal does not reach the inside of buildings.
These location services come to be of great usefulness when something or someone is
wanted to be located inside a building and, since we spend a large deal of our time in indoor
environments (about 90 % according to an article published by Nokia [Des12]), the utility of
this kind of solutions is out of any doubt.
Given the problematics of indoor location, thereupon the development of a system is proposed, this being based on the reception of signals which would allow the user to be located
inside a building, over the surface of a map previously provided and given a series of checkpoints, along of which the user should be guided. This will be applied to the specific case
of shopping centers, which from time to time redistribute the eventual location of their products, according to their marketing strategies. As a consequence of these location changes,
the customer is bound to indefinitely roam along the hallways in order to find everything she
is in search of.
As a result of these motivations the proposal of this Final Degree Project is laid out. The
design and development of an assistance software system on the platform iOS is outlined,
intended to commercial environments and based on indoor location awareness via wireless
networks. Such a system will focus in a shopping assistant for a certain shopping center,
which should be adapted through the use of a map which depicts the building’s distribution.
This way, the user will select those products of the shopping center she wants to purchase,
thereafter being located and guided on such a way that the user picks all of the chosen
products, performing the minimal cost route and thus saving time and effort.
VII
Agradecimientos
En este pequeño espacio me gustaría dar las gracias a todas las personas que de una u
otra manera han contribuido a que pueda llegar hasta aquí. Por ello, primero me gustaría
agradecerles todo esto a aquellas personas que me han brindado esta oportunidad, por su
cariño constante, por apoyarme y creer siempre en mí, por todo lo bueno que me han regalado durante el transcurso de mi vida; estoy hablando de mis queridos padres, Francisco y
Antoñita.
En segundo lugar agradecer al resto de familiares y a mi hermano su confianza en mí, en
particular a mi hermano, por todas las conversaciones y sinsentidos nuestros que hacen que
ahora no pare de reír, especialmente al recordar los días de vendimia. Gracias a Alba, por
su apoyo, por su paciencia, por nuestras historias, por la fuerza que me aporta día a día y
especialmente por animarme en cualquier situación.
A todos y cada uno de mis compañeros durante esta experiencia universitaria, especial
mención se merecen Rubén, iSergio, Anibla, Edu y Javi. Nunca pensé que pudiera reírme
tanto viendo un perro conduciendo, siendo testigo de la fusión en directo delante de un
reptiliano, el viaje valhállico pactado, el gran cargo de mantener la identidad secreta de
MH; podría seguir dando motivos, pero me temo que no terminaría. . . Gracias por todos los
momentos que hemos tenido y por brindarme una mano siempre que lo he necesitado.
Por último, y no menos importante agradecerle también a mi tutor en este proyecto, Ramón
Hervás, por prestarse de forma totalmente desinteresada a la dirección de este proyecto y
corregir cual ninja toda la documentación durante el verano cuando mas apurado estaba.
A todos vosotros, muchas gracias de corazón.
Francisco Jiménez Moral
IX
Para mis padres, Francisco y Antoñita.
xi
Índice general
Resumen
V
Abstract
VII
Agradecimientos
IX
Índice general
XIII
Lista de tablas
XVII
Índice de figuras
XIX
Índice de listados
XXIII
1. Introducción
1
1.1. Contexto del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2. Evolución de los smartphones . . . . . . . . . . . . . . . . . . . . . . . .
2
1.3. Elección del SO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.4. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.5. Propuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.6. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2. Objetivos y Herramientas
11
2.1. Visión General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2. Lista de objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3. Herramientas de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.1. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.2. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.3. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3. Antecedentes
19
3.1. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XIII
19
3.2. Apps para realizar listas de la compra . . . . . . . . . . . . . . . . . . . .
19
3.2.1. Análisis Comparativo App para realizar listas de la compra . . . . .
27
3.3. Apps para localización en interiores . . . . . . . . . . . . . . . . . . . . .
29
3.3.1. Análisis Comparativo App para localización en interiores . . . . . .
37
3.4. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4. Arquitectura
41
4.1. Arquitectura General . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.2. Patrones de Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.2.1. Delegado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.2.2. Target-Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2.3. Modelo-Vista-Controlador (MVC) . . . . . . . . . . . . . . . . . .
45
4.3. Posicionamiento en móviles . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.4. Gestión y Almacenamiento . . . . . . . . . . . . . . . . . . . . . . . . . .
50
4.4.1. Recuperación de datos externos . . . . . . . . . . . . . . . . . . .
51
4.4.2. Uso de Core Data . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.5. Ubicación y Guiado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
4.5.1. Módulo de Comunicaciones . . . . . . . . . . . . . . . . . . . . .
62
4.5.2. Módulo de Tratamiento de Señal . . . . . . . . . . . . . . . . . . .
68
4.5.3. Módulo de Filtrado de Señal . . . . . . . . . . . . . . . . . . . . .
71
4.5.4. Módulo de Posicionamiento . . . . . . . . . . . . . . . . . . . . .
77
4.5.5. Módulo de Enrutamiento y Guiado . . . . . . . . . . . . . . . . . .
81
5. Métodos de trabajo
101
5.1. Metodología de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . .
101
5.2. Evolución del desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . .
102
5.3. Iteraciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102
6. Resultados
115
6.1. Primera etapa: Análisis del comportamiento de la señal BLE . . . . . . . .
115
6.2. Segunda etapa: Análisis de RRSI . . . . . . . . . . . . . . . . . . . . . . .
117
6.3. Tercera etapa: Desarrollo del experimento . . . . . . . . . . . . . . . . . .
118
6.4. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
123
6.5. Modulos funcionales de la aplicación . . . . . . . . . . . . . . . . . . . . .
125
7. Conclusiones y Propuestas
131
7.1. Objetivos Alcanzados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xiv
131
7.2. Trabajo Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133
7.3. Conclusión Personal . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
A. Fundamentos sobre tecnologías de localización
139
A.1. Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140
A.2. Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
141
A.3. UWB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142
A.4. ZigBee . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142
A.5. RFID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
143
A.6. Justificación de alternativa seleccionada . . . . . . . . . . . . . . . . . . .
144
B. Calibración del dispositivo iBeacon
149
C. Contenido del soporte fisico adjunto
151
Referencias
153
xv
Lista de tablas
3.1. Comparativa de las aplicaciones existentes que permiten realizar la lista de
la compra. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.2. Comparativa de las aplicaciones que permiten realizar localizacion Indoor .
39
3.3. Características de ShoppingBeacon . . . . . . . . . . . . . . . . . . . . . .
40
4.1. Estructura del Mapa de Potencias . . . . . . . . . . . . . . . . . . . . . . .
80
4.2. Representación del grafo a través de sus aristas . . . . . . . . . . . . . . .
85
4.3. Representación del grafo a través de sus vertices . . . . . . . . . . . . . . .
86
4.4. Matriz de Adyacencia para el ejemplo del cálculo del camino minimo . . .
91
4.5. Matriz de Adyacencia para el ejemplo del cálculo del camino minimo . . .
95
6.1. Resultados de estudio de valores según el plano de orientación. . . . . . . .
117
6.2. Medición de fluctuación de RSSI con diferentes intervalos de repetición de
pulsos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
118
6.3. Comparativa de proximidad real-media. . . . . . . . . . . . . . . . . . . .
120
6.4. Comparativa de proximidad real-media. . . . . . . . . . . . . . . . . . . .
123
7.1. Características de ShoppingBeacon . . . . . . . . . . . . . . . . . . . . . .
132
A.1. Estándares de Wireless LAN. Figura extraida de [UPM]. . . . . . . . . . .
141
A.2. Tabla Comparativa tecnologías UWB. Tabla extraída de [UPM] . . . . . .
142
A.3. Comparativa de tecnologías de RF. . . . . . . . . . . . . . . . . . . . . . .
145
XVII
Índice de figuras
1.1. Predicción de ventas globales de smartphone hasta 2019 . . . . . . . . . .
3
1.2. Tiempo diario de uso de los dispositivos de Apple . . . . . . . . . . . . . .
4
1.3. Tiempo que navegan los usuarios de Android frente a los usuarios de iOS .
5
1.4. Compras realizadas desde tablets . . . . . . . . . . . . . . . . . . . . . . .
6
1.5. Estadísticas de descargas e ingresos de la App Store y Google Play . . . . .
6
1.6. Reparto mundial de empleo en iOS y Android . . . . . . . . . . . . . . . .
7
2.1. Visión General de la Arquitectura del Sistema . . . . . . . . . . . . . . . .
12
3.1. App Shopping List. Lista inicial . . . . . . . . . . . . . . . . . . . . . . .
20
3.2. App Shopping List. Añadir Producto . . . . . . . . . . . . . . . . . . . . .
20
3.3. App LiShop. Lista Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.4. App LiShop. Buscar Producto . . . . . . . . . . . . . . . . . . . . . . . .
21
3.5. App Buy Me a Pie. Creación de listas . . . . . . . . . . . . . . . . . . . .
22
3.6. App Buy Me a Pie. Lista Inicial . . . . . . . . . . . . . . . . . . . . . . .
22
3.7. App ShopShop. Añadir Producto . . . . . . . . . . . . . . . . . . . . . . .
23
3.8. App ShopShop. Mandar lista por correo . . . . . . . . . . . . . . . . . . .
23
3.9. App Lista. Lista Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.10. App Lista. Añadir Producto . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.11. App ShopIt. Lista Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.12. App ShopIt. Lista Final . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.13. App myShopi. Crear Lista Inicial . . . . . . . . . . . . . . . . . . . . . . .
26
3.14. App myShopi. Añadir Producto . . . . . . . . . . . . . . . . . . . . . . .
26
3.15. App Point Inside. Mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.16. App Point Inside. Servicios disponibles . . . . . . . . . . . . . . . . . . .
29
3.17. App Wifarer. Guiado interior . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.18. App Wifarer. Servicios Ofrecidos . . . . . . . . . . . . . . . . . . . . . . .
30
3.19. App Wifarer. Servicios Ofrecidos . . . . . . . . . . . . . . . . . . . . . . .
30
3.20. Mapa interior aeropuerto de San Francisco. . . . . . . . . . . . . . . . . .
31
XIX
3.21. Adaptacion a gente invidente aeropuerto de San Francisco. . . . . . . . . .
31
3.22. App MIT Mobile. Guiado . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.23. App MIT Mobile. Servicios Ofrecidos . . . . . . . . . . . . . . . . . . . .
32
3.24. App Universidad de Granada. Servicios ofrecidos . . . . . . . . . . . . . .
33
3.25. App Universidad de Granada. Centros de la Universidad . . . . . . . . . .
33
3.26. App University of Alabama. Servicios ofrecidos . . . . . . . . . . . . . . .
34
3.27. App University of Alabama. Directorio de búsqueda . . . . . . . . . . . . .
34
3.28. App GuideURJC. Mapa de interior . . . . . . . . . . . . . . . . . . . . . .
35
3.29. App GuideURJC. Creación de rutas . . . . . . . . . . . . . . . . . . . . .
35
3.30. Localización Indoor dentro del supermercado Carrefour . . . . . . . . . . .
36
4.1. Modelo de arquitectura del sistema . . . . . . . . . . . . . . . . . . . . . .
42
4.2. Objetos pertenecientes al patrón MVC . . . . . . . . . . . . . . . . . . . .
46
4.3. Comunicación entre los objetos del MVC . . . . . . . . . . . . . . . . . .
47
4.4. Modelo Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.5. Diagrama entidad-interrelación . . . . . . . . . . . . . . . . . . . . . . . .
52
4.6. Descripción Funcional del módulo de Comunicaciones . . . . . . . . . . .
63
4.7. Estructura de una trama de un iBeacon sobre BLE. . . . . . . . . . . . . .
64
4.8. Diagrama de Secuencia del Módulo de Comunicaciones . . . . . . . . . . .
68
4.9. Descripción Funcional del módulo de Tratamiento de Señal . . . . . . . . .
69
4.10. Diagrama de Secuencia del Módulo de Tratamiento de Señales . . . . . . .
71
4.11. Descripción Funcional del módulo de Filtrado de Señal . . . . . . . . . . .
72
4.12. Fluctuación de la potencia de la señal . . . . . . . . . . . . . . . . . . . .
72
4.13. Rangos de proximidad a un iBeacon . . . . . . . . . . . . . . . . . . . . .
73
4.14. Diagrama de Secuencia del Módulo de Filtrado de Señal . . . . . . . . . .
77
4.15. Descripción Funcional del módulo de Posicionamiento . . . . . . . . . . .
78
4.16. Diagrama de Secuencia del Módulo de Posicionamiento . . . . . . . . . . .
81
4.17. Descripción Funcional del módulo de Enrutamiento . . . . . . . . . . . . .
82
4.18. Estructura de un Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
4.19. Descripción Gráfica del problema . . . . . . . . . . . . . . . . . . . . . .
91
4.20. Recorrido Técnica Fuerza Bruta . . . . . . . . . . . . . . . . . . . . . . .
93
4.21. Recorrido Técnica Programación Dinámica . . . . . . . . . . . . . . . . .
97
4.22. Diagrama de Secuencia del Módulo de Enrutamiento . . . . . . . . . . . .
100
5.1. Evolución de los ciclos de desarrollo de Extreme Programming. Figura extraída de [Bec99] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
xx
5.2. Proceso de desarrollo: Iteración 1 . . . . . . . . . . . . . . . . . . . . . . .
110
5.3. Proceso de desarrollo: Iteración 2 . . . . . . . . . . . . . . . . . . . . . . .
110
5.4. Proceso de desarrollo: Iteración 3 . . . . . . . . . . . . . . . . . . . . . . .
111
5.5. Proceso de desarrollo: Iteración 4 . . . . . . . . . . . . . . . . . . . . . . .
111
5.6. Proceso de desarrollo: Iteración 5 . . . . . . . . . . . . . . . . . . . . . . .
112
5.7. Proceso de desarrollo: Iteración 6 . . . . . . . . . . . . . . . . . . . . . . .
112
5.8. Proceso de desarrollo: Iteración 7 . . . . . . . . . . . . . . . . . . . . . . .
113
5.9. Proceso de desarrollo: Iteración 8 . . . . . . . . . . . . . . . . . . . . . . .
113
6.1. App Estimote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
116
6.2. App Particle Detector . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
116
6.3. Primer Experimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
119
6.4. Plano Esquemático del laboratorio . . . . . . . . . . . . . . . . . . . . . .
121
6.5. Plano esquemático del laboratorio con secciones . . . . . . . . . . . . . . .
121
6.6. Nodos de Referencia en topología de malla . . . . . . . . . . . . . . . . .
124
6.7. Catálogo de productos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
6.8. Listas de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126
6.9. Creación de alertas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126
6.10. Selección de fecha y hora . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
6.11. Notificación de alerta . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
6.12. Lista de procutos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
128
6.13. Modficaión de la lista de porductos . . . . . . . . . . . . . . . . . . . . . .
128
6.14. Generar un correo con la lista de la compra . . . . . . . . . . . . . . . . .
129
6.15. Mapa de interior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
130
6.16. Mapa de interior consecciones . . . . . . . . . . . . . . . . . . . . . . . .
130
A.1. Red de sensores con tecnología ZigBee . . . . . . . . . . . . . . . . . . .
143
A.2. Gráfica de consumo de potencia de tecnologías RF . . . . . . . . . . . . .
146
A.3. Gráfica de coste/complejidad de tecnologías RF para localización en interiores147
B.1. Calibración de un dispositvo iBeacon . . . . . . . . . . . . . . . . . . . .
xxi
149
Índice de listados
4.1. Modelo relacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.2. Actualización del contenido del array . . . . . . . . . . . . . . . . . . . .
55
4.3. Solicitud de recuperación de datos . . . . . . . . . . . . . . . . . . . . . .
56
4.4. Solicitud de recuperación de datos controllerWillChangeContent: . . . . . .
58
4.5. Solicitud de recuperación de datos forChangeType:newIndexPath: . . . . .
58
4.6. Solicitud de recuperación de datos controllerDidChangeContent: . . . . . .
59
4.7. Solicitud de recuperación de datos de la capa de vista . . . . . . . . . . . .
59
4.8. Identificación y Registro del major de cada dispositivo . . . . . . . . . . .
66
4.9. Definir el UUID y región con los que se va a trabajar . . . . . . . . . . . .
67
4.10. Identificación y Registro del major de cada dispositivo . . . . . . . . . . .
67
4.11. Distinción del tipo de señal segun el major de cada dispositivo . . . . . . .
69
4.12. Pseudocodigo Función Semáforo . . . . . . . . . . . . . . . . . . . . . . .
78
4.13. Pseudocódigo Módulo Enrutamiento . . . . . . . . . . . . . . . . . . . . .
82
4.14. Inicialización Tabla de Distancias . . . . . . . . . . . . . . . . . . . . . .
88
4.15. Rellenar Tabla de Distancias. . . . . . . . . . . . . . . . . . . . . . . . . .
89
4.16. Implementación Técnica Fuerza Bruta . . . . . . . . . . . . . . . . . . . .
91
4.17. Implementación Técnica Fuerza Bruta . . . . . . . . . . . . . . . . . . . .
94
4.18. Implementación Técnica Fuerza Bruta . . . . . . . . . . . . . . . . . . . .
96
4.19. Implementación Técnica Fuerza Bruta . . . . . . . . . . . . . . . . . . . .
98
B.1. Calibración iBeacon. Listado Extraído de [App14a] . . . . . . . . . . . . .
150
XXIII
Capítulo 1
Introducción
E
este capítulo se realiza una introducción al problema que el presente Trabajo Fin de
Grado pretende abordar. En primer lugar se presenta el concepto de la localización en
interiores y se expone cuál es el problema a resolver y su contexto histórico. Este terreno ha
alcanzado una gran popularidad en los últimos años debido a la aparición de aplicaciones para dispositivos móviles que hacen uso de las nuevas tecnologías de localización en interiores
y permiten al usuario guiar en un espacio cerrado de manera cómoda. Por ello, se estudiará
la evolución de los teléfonos móviles inteligentes o smartphones junto con su enorme crecimiento desde la perspectiva del mercado en los últimos años. A continuación se expone la
motivación y en base a ella se detalla la propuesta de trabajo realizando un breve análisis de
los principales objetivos del presente Trabajo Fin de Grado. Finalmente se concluye detallando la estructura del presente documento y el contenido que se abordará en cada uno de
sus capítulos.
N
1.1 Contexto del problema
Hoy en día conocer la localización en la que nos encontramos se ha convertido en una
necesidad, necesidad que se ha transformado en requisito imprescindible si se quiere hacer
uso de las numerosas aplicaciones que ofrecen servicios basados en la posición del usuario.
Estos servicios abarcan distintos temas: seguridad, atención socio-sanitaria, ocio, turismo,
deportes, etc.
Inicialmente todos estos servicios de localización estaban orientados al posicionamiento
global y se realizaban en entornos de exterior, sin embargo estos sistemas de posicionamiento
no permiten la localización con precisión de dispositivos en espacios cerrados y es por ello
que se empezó a realizar un intenso estudio durante los últimos años en busca de una solución
adecuada y adaptada a la localización en espacios cerrados dando lugar al desarrollo de
los actuales sistemas de posicionamiento o localización en interiores. Los motivos que han
obstaculizado el desarrollo han sido tanto técnicos como económicos.
Técnicos porque la localización en espacios cerrados presenta retos tecnológicos mayores que la localización en espacios abiertos.
Económicos porque la gran parte de estos sistemas requieren gran cantidad de infraes1
tructura fija que hace que aumente el coste. Sin embargo, dichas infraestructuras han
reducido los costes haciendo posible que sea viable instalarlos en entornos cerrados.
Este área no sólo abre las puertas a nuevos modelos de negocio capaces de revolucionar
los modos de rentabilizar estructuras sino que podría beneficiar ampliamente a un importante
sector del público, los invidentes o personas con discapacidad visual, los cuales, se aprovecharían de los servicios que este sistema podría ofrecerles, ayudando en tareas rutinarias
como puede ser la compra en un supermercado al haberse reubicado los productos.
1.2 Evolución de los smartphones
El smartphone es aquel teléfono construido sobre una plataforma móvil que sobrepasa la
frontera de los teléfonos móviles tradicionales. La idea principal del smartphone o teléfono
inteligente era básicamente la de unir las funciones de un PDA con las de un teléfono para
mayor compactibilidad y por tanto comodidad.
Todo comenzó en 1992, con la llegada del dispositivo IBM Simon, que unía todas las
funcionalidades de un PDA con capacidades telefónicas y de SMS y, a diferencia del resto
de PDAs que requerían un puntero, este dispositivo incorporaba una pantalla completamente
táctil. Sin embargo no fue hasta la llegada del Ericsson GS88, el cual poseía muchas más
funciones como puede ser el correo electrónico, navegación web, conexión a PC entre las
más destacables, cuando se acuñó el termino smartphone.
No fue hasta la llegada del nuevo sistema operativo Windows Mobile entre los años 2000 y
2005, cuando los dispositivos móviles adquirieron una gran popularidad, especialmente entre
los hombres y mujeres de negocios de Estados Unidos. Dentro de este periodo Blackberry
lanzó sus primeros modelos de smartphone en 2003 y pasó a disputar la compartición de
este liderazgo en 2006, atrayendo no sólo al sector de empresarios y ejecutivos, típicamente
asociados con Windows Mobile, sino al sector de la población joven.
Sin duda el evento que cambió la percepción de lo que era un smartphone fue el anuncio
del iPhone en 2007, revolucionando la industria de la telefonía móvil y de los smartphones, siendo uno de los primeros teléfonos móviles en incluir una interfaz multitáctil para
interactuar con el dispositivo y capaz de ofrecer la mejor experiencia en Internet hasta el
momento.
Meses más tarde, Google presenta su sistema operativo Android y pese a que inicialmente
Android contó con un proceso de aceptación lento por parte del público, su popularidad
creció enormemente en 2010. Con la llegada de estos dos nuevos participantes en el mercado
de smartphones la cuota de mercado hasta el momento acaparada por el resto de fabricantes
sufrio un duro golpe, dando lugar a un replanteamiento de estrategias de negocio. En el caso
de Microsoft, optó por crear un nuevo sistema operativo desde cero, denominado Windows
Phone, ocupando el tercer puesto en la cuota de mercado actual. Nokia abandono Symbian
2
y se unió a Microsoft implantando este nuevo sistema operativo en sus dispositivos. Por
último Blackberry también diseñó una nueva versión de su sistema operativo desde cero,
denominada Blackberry 10.
La adopción de los smartphone por parte del público ha sido masiva, especialmente desde
el año 2010, debido en gran parte a la disponibilidad en el mercado de smartphones a precios
asequibles y se sigue prediciendo este aumento de ventas durante los próximos años como
muestra la Figura 1.1 realizada por la agencia de estadísticas Statista [Sta15].
Figura 1.1: Predicción de ventas globales de smartphone hasta 2019
1.3 Elección del SO
A la hora de elegir el sistema operativo se han analizado las dos posibles alternativas con
mayor popularidad y tasa de mercado: Android e iOS.
iOS de la mano de Apple comprende todas las fases, desde la fabricación hasta el software.
En Android por el contrario intervienen tres agentes: Google, los fabricantes de hardware y
por último los desarrolladores de software.
En lo referente a la tasa de mercado, Google anunció en 2013 que se han activado 900
millones de dispositivos Android en todo el mundo frente a los 580 millones alcanzados
por iOS. Tomando este punto de partida lo más conveniente sería emplear el esfuerzo en
desarrollar para el sistema operativo Android, sin embargo, iOS sigue siendo la plataforma
3
preferida no de los desarrolladores independientes sino también de grandes empresas como
Instagram, que comenzó apostando por la exclusividad como app para iPhone y terminó
siendo comprado por 1000 millones de dólares por Facebook al año de estrenarse.
En el caso de Flipboard, comenzó siendo exclusivo para iPhone y termino firmando un
acuerdo con Samsung para contar con un periodo de exclusividad en el Galaxy 3 [CNE].
Yahoo es otra compañía que tiene por costumbre centrarse primero en mejorar sus aplicaciones para iOS antes de extender los cambios a Android teniendo en Flickr, Tiempo y
Mail sus mejores ejemplos. Incluso Google apuesta primero por iOS con el claro ejemplo de
Google Maps que estrenó su nuevo diseño en la plataforma Apple meses antes de hacerlo
en Google Play; una muestra más evidente de la importancia de iOS para los buscadores
[Xat13a].
Finalmente está Twitter que seis meses después de lanzar Vine para iOS y pese a la promesa de una versión para Android, publicaron una segunda app exclusiva de la plataforma
Apple: Twitter Music [Xat13c] [Xat13b] [Xatil].
No cabe duda de que Android seguirá madurando como plataforma y es inevitable que en
los próximos años se considere optar por el escenario opuesto, es decir, lanzar las aplicaciones primero para el sistema Google y luego en el de Apple.
A pesar de que Android tiene una mayor cuota de mercado, un estudio demuestra que
los usuarios de Apple son los que más utilizan sus dispositivos, como muestra la Figura 1.2
[Fet13].
Figura 1.2: Tiempo diario de uso de los dispositivos de Apple
4
Según dicho estudio, los usuarios de iPhone pasan 26 minutos más de media que el usuario típico de Android, utilizando el teléfono en menor proporción para llamar y más como
smartphone para todo lo demás.
Ambas plataformas hacen más o menos lo mismo, por lo menos cuando se trata de funciones básicas en los teléfonos inteligentes, sean llamadas, enviar mensajes, correos electrónicos, navegar por la web, por mencionar algunos. Pero cuando se trata de navegar por la
red hay una clara ventaja de la plataforma iOS sobre Android, como demuestra un nuevo
estudio realizado por la agencia de publicidad Statista [SMI14], que revela que los usuarios
de iOS navegan más en comparación con los usuarios de Android, como se muestra en la
Figura 1.3.
Figura 1.3: Tiempo que navegan los usuarios de Android frente a los usuarios de iOS
De la misma manera que los usuarios de Apple navegan mas por Internet que los de Android, también realizan mas compras desde ellos, incluyendo también a las tablets en el caso
de Apple el iPad acaparando el 78 % de las compras realizadas como muestra un estudio
realizado por Chitika, en la Figura 1.4.
Otro aspecto a destacar son las cifras oficiales de descargas de la App Store y Google Play
con 50.000 millones y 48.000 millones respectivamente.
La diferencia es escasa, sin embargo hay que tener en cuenta la superioridad que tiene
Android en la cuota de mercado y esto es debido a que muchos usuarios de Android no
descargan aplicaciones en absoluto, quizás porque ni siquiera saben cómo hacerlo, no les
importa o tan solo se llevaron el teléfono que ofrecieron en la tienda.
5
Figura 1.4: Compras realizadas desde tablets
A pesar de la diferencia y aunque la tienda de Google ha mejorado, la App Store sigue
generando casi el triple de ingresos como muestra la Figura 1.5, teniendo en cuenta el caso
mas concreto de los videojuegos de iOS que generan más ingresos que los de las consolas
portátiles y dispositivos Android combinados [Ann].
Figura 1.5: Estadísticas de descargas e ingresos de la App Store y Google Play
6
Sin embargo una de las características más determinantes por la que se ha decidido realizar
el presente Trabajo Fin de Grado con el sistema operativo iOS ha sido el reparto mundial de
trabajo que ofrece este sistema como muestra la Figura 1.6, de cara al posicionamiento en el
futuro profesional [ide].
Figura 1.6: Reparto mundial de empleo en iOS y Android
1.4 Motivación
En base a la problemática de la localización indoor, se propone un sistema que se basa en
la recepción de señales que permitan localizar al usuario dentro de un edificio en un mapa
previamente facilitado y con unos puntos a recorrer para guiar al usuario hasta ellos.
A base de ejemplo, el presente Trabajo Fin de Grado se va a centrar en un organizador de
compras para una superficie comercial con una mapa que muestre la distribución del edificio,
de manera que el usuario tenga que seleccionar productos del establecimiento para después,
ser ubicado y en base a esta localización ser guiado siguiendo un orden hasta los distintos
productos escogidos.
7
Son varias las aplicaciones existentes en el mercado que permiten realizar una lista de la
compra en el smartphone para poder recordar cuáles son los productos que hay que comprar
la próxima vez que se visite el supermercado, sin embargo todas presentan determinadas
carencias como pueden ser la ausencia de una base de datos que permita elegir entre distintos
productos catalogados y ordenados, con su imagen y una búsqueda sencilla, ya sea por voz
o teclado, de manera que permita al usuario crear sus propias listas de la compra de manera
amigable y sencilla con el smartphone. A esto hay que añadir esas innumerables vueltas que
se dan por los pasillos para encontrar todo lo que quiere el cliente y no perder el tiempo
andando sin rumbo por los supermercados y grandes almacenes.
En definitiva, no existe ninguna solución aceptada mayoritariamente que contenga todos
estos detalles y proporcione las principales funcionalidades para que el usuario pueda crear
sus propias listas de la compra de manera amigable y sencilla y añada la peculiaridad de
calcular la ruta con menor coste para optimizar el recorrido del usuario, proporcionando una
experiencia agradable al ahorrar todas esas vueltas innecesarias.
En base al estudio realizado en la Subsección 1.3 se ha determinado que esta aplicación
estará destinada a dispositivos móviles con sistema operativo iOS.
1.5 Propuesta
A raiz de estas motivaciones surge la propuesta del presente Trabajo Fin de Grado. Se
plantea diseñar y desarrollar un sistema software asistencial bajo la plataforma iOS, para entornos comerciales mediante localización indoor basado en redes inalámbricas. Esta
aplicación se basa en la recepción de señales procedentes de balizas BTLE (Bluetooth Low
Energy), también denominados beacon. Mediante ellos se localizarán los distintos puntos a
recorrer que corresponderán con los productos que el usuario ha seleccionado y se le guiará
hasta ellos. Este sistema permite obtener una gran precisión en el cálculo de la posición y
además su despliegue es rápido, ya que la instalación de los beacons es muy sencilla.
Las funcionalidades principales que esta aplicación ofrecerá a sus usuarios serán las siguientes:
El usuario deberá contar con un catálogo de los productos disponibles en la superficie
comercial ordenados por categorías.
El usuario podrá buscar los productos, a partir del nombre, a través de texto o voz.
El usuario podrá guardar varias listas de la compra con productos del supermercado.
El usuario podrá crear notificaciones para las distintas listas, cuya función será avisarle
en la fecha que seleccione el usuario.
El usuario podrá visualizar la ruta que ha de seguir en el supermercado.
El usuario será guiado a través de la ruta con el menor coste, que será calculada en
8
base a los productos escogidos.
El usuario podrá visualizar su posición dentro del supermercado.
El usuario será informado al llegar a un producto.
El usuario podrá enviar por correo la lista de la compra a cualquier usuario.
La aplicación debe ser capaz de calcular la ruta para cualquier mapa.
La aplicación debe contar con un diseño extensible que permita la introducción de
mapas correspondientes a diferentes superficies comerciales, siendo capaz de calcular
y representar la ruta de manera genérica.
1.6 Estructura del documento
Este documento se ha estructurado en base a la normativa del Proyecto Fin de Grado de la
Escuela Superior de Informática de Ciudad Real de la Universidad de Castilla-La Mancha.
En base a ello, este documento cuenta con los siguientes capítulos:
Capítulo 2: Objetivos y Herramientas
En este capítulo se proporciona una visión general del sistema que se pretende desarrollar, de la cual se concluyen los requisitos funcionales, para posteriormente desglosar
cada uno de estos requisitos en varios subobjetivos.
Capítulo 3: Antecedentes
En este capítulo se analizan las principales aplicaciones relacionadas a la aplicación
que se va a desarrollar en el presente Trabajo Fin de Grado. Atendiendo al carácter de
la aplicación que se va a implementar se han agrupado las aplicaciones existentes en
dos listas independientes:
App de listas
App para localización en interiores
Se realizará un estudio para la determinación de los objetivos que Shopping Beacon
debe cumplir, mediante un análisis de las principales características: puntos fuertes y
debilidades de cada una de ellas.
Capítulo 4: Arquitectura
En este capítulo se describe el diseño e implementación del sistema, detallando los
problemas surgidos y las soluciones aportadas. El capítulo se divide en varias secciones correspondientes a los distintos módulos que componen el sistema, describiendo
en primer lugar una visión general y funcional del modulo y pasando posteriormente
a los detalles técnicos y de implementación, junto con los problemas surgidos en el
desarrollo, las soluciones planteadas y los resultados de las distintas pruebas realizadas.
9
Capítulo 5: Métodos de trabajo
En este capítulo se analiza la metodología de desarrollo escogida para el desarrollo
de la aplicación. También se listan y describen los recursos empleados tanto hardware
como software en el proceso de desarrollo.
Capítulo 6: Resultados
En este capítulo se razonan las decisiones de diseño tomadas durante el periodo de
desarrollo de la aplicación aportando datos que las refuerzan.
Capítulo 7: Conclusiones y Propuestas
En este capítulo se elabora un resumen a modo de conclusión sobre el producto final
del desarrollo, indicando las metas que se han conseguido frente a las inicialmente
propuestas. Se detalla el posible trabajo futuro y se concluye con una conclusión personal.
Anexos
En los anexos se presenta material que, dada su naturaleza, no se ha incluido en el
grueso del documento. En primer lugar se realiza un estudio sobre las diversas tecnologías de localización más relevantes. En segundo lugar se expone el proceso de
calibración de los dispositivos empleados. Finalmente, se lista el contenido del soporte físico adjunto a este documento.
10
Capítulo 2
Objetivos y Herramientas
E
este capítulo se proporciona una descripción general de la arquitectura del sistema,
ofreciendo al lector una idea de su diseño a alto nivel. En segundo lugar se proporciona
una lista de objetivos que se proponen para la consecución del desarrollo. Cada uno de estos
requisitos se encuentra desglosado en varios subobjetivos concretos, detallando qué se pretende obtener y su alcance. Finalmente se listan y describen todas las herramientas utilizadas
en el desarrollo, ya sean hardware o software.
N
2.1 Visión General
La visión general de la propuesta del Trabajo Fin de Grado es la creación de una aplicación
que permita al usuario generar sus propias listas de la compra para una superficie comercial y
ésta sea capaz de mostrarle un mapa con la distribución del edificio de manera que el usuario
pueda ser guiado hasta los distintos productos escogidos.
La aplicación deberá hacer uso de una base de datos que permita al usuario consultar
los productos ofrecidos por la superficie comercial y generar y almacenar sus propias listas
dentro de la aplicación. Una vez configurada la lista se podrá mandar por correo a cualquier
persona o ir a la superficie comercial para realizarla.
Si el usuario decide realizar la compra la aplicación debe ser capaz de ahorrar esas innumerables vueltas que se dan por los pasillos generando una ruta con un coste mínimo. Una
vez dentro de la superficie comercial la aplicación deberá reconocer los dispositivos que se
encuentren y obtener los datos que envíen, independientemente del tipo de comunicación que
se realice. Con estas señales la aplicación ha de ser capaz de posicionar al usuario y guiar de
manera eficiente durante todo el recorrido generado.
La Figura 2.1. sintetiza en un digrama de bloques este enfoque. Se describe a continuación:
La aplicación se puede dividir en dos módulos bien diferenciados.
En primer lugar se encuentra el módulo encargado de mostrar y generar las listas de la
compra del usuario. Este módulo cuenta con una base de datos que será la encargada de
almacenar los datos de carácter persistente utilizados por los usuarios de la aplicación. Se
11
Figura 2.1: Visión General de la Arquitectura del Sistema
ofrecerá una interfaz de llamadas que permita al controlador de la aplicación abstraerse totalmente de la forma en la que la estructura de la base de datos haya sido implementada.
El segundo módulo se encargará de generar la ruta de menor coste con todos los productos
seleccionados por el usuario. Una vez generada la ruta, la aplicación reconocerá los dispositivos que se encuentren dentro del recinto comercial y establecerá comunicación con ellos
a través de la Interfaz de Conexión del dispositivo. Estos paquetes pasarán a la capa de Decodificación donde se analizarán los paquetes recibidos y, si estos forman mensajes válidos,
los convertirá a datos e información válida para las capas superiores. Hasta este punto son
capas dependientes del dispositivo.
Los datos anteriores pasan a las capas superiores, independientes del dispositivo, donde
son procesados antes de ser utilizados por otros componentes de la aplicación. Debido a
que habrá varios dispositivos de manera simultánea, cada señal se procesa en una capa de
Tratamiento de señal, donde se dividen las señales dependiendo del dispositivo de origen
12
que ha mandado la señal y se almacenan para posteriormete pasarles un filtro para reducir
el ruido aleatorio en el dominio de tiempo. El siguiente paso será determinar la posición del
usuario mediante las señales ya procesadas en una capa de Posicionamiento. Esta posición se
manda a la capa de enrutamiento y guiado encargada de comprobar la posición del usuario,
calcular la ruta partiendo de dicha posición del usuario, generar la animación y guiar al
usuario mediante comandos de voz. Toda esta información pasará a la capa de controladores
que será la encargada de actuar en consecuencia y comunicarse con la vista.
2.2 Lista de objetivos
La visión general de la propuesta del Proyecto Fin de Grado es la creación de una aplicación descrita en la Sección 1.5 del Capítulo 1. A partir de dichos requisitos y partiendo de
esta descripción, se listan las siguientes funcionalidades, que deberán lograrse a lo largo del
proceso de desarrollo del sistema:
Diseñar, desarrollar y validar un sistema asitencial para superficies comerciales mediante tecnologías móviles y de posicionamiento en interiores
Desarrollo de una aplicación en iOS cuyo uso sea sencillo y abarque el mayor numero
posible de dispositivos en base a su versión del sistema operativo.
Acceso a un catálogo remoto, sostenido por una base de datos, que permita consultar
los distintos productos, ordenados por categorías.
Desarrollo de una base de datos interna en el dispositivo del cliente cuyo diseño y
arquitectura le permitan ser escalable y eficiente.
Independencia de la implementación de la base de datos de la aplicación cliente respecto a la base de datos remota de la que se toman los datos.
Búsqueda de productos, mediante teclado o voz.
Almacenamiento de varias listas de la compra con productos que existan en el catálogo
del recinto comercial.
Desarrollo de un algoritmo que permita calcular la ruta:
• El algoritmo toma como origen el punto en el que se encuentra el usuario.
• La ruta debe de guiar al usuario hasta cada uno de los productos añadidos a la
lista.
• La ruta debe de tener el menor coste.
• El algoritmo ha de contar con un diseño extensible que permita calcular de manera genérica distintas rutas para distintas superficies comerciales.
• En el caso de que el usuario se equivoque y tome una dirección errónea, el algoritmo ha de calcular la nueva ruta obviando los productos ya recogidos.
Determinar y monitorizar la posición en la que se encuentra el usuario:
13
• La precisión que debe tener la aplicación variará en función de la tecnología
utilizada.
• Como requisito mínimo y al tratarse de un supermercado debe señalar en qué
pasillo o sección se encuentra el usuario.
Guiar al usuario mediante comandos de voz:
• Informar al usuario de la siguiente dirección que tiene tomar.
• Informar al usuario de que ha llegado al pasillo o sección del supermercado donde
se encuentra el producto que ha añadido a la lista.
Notificar al usuario a modo de recordatorio que tiene que realizar la compra de una
lista.
Enviar por correo la lista creada a cualquier contacto.
2.3 Herramientas de desarrollo
En esta sección se detallan los recursos software y hardware empleados en el proceso de
desarrollo. Para cada uno de estos recursos se proporciona una breve explicación, junto con
la versión utilizada y la parte del desarrollo en la que ha sido empleado.
2.3.1
Lenguajes
Los lenguajes de programación empleados en el proceso de desarrollo son los siguientes:
Objective-C: 1 Es el lenguaje principal de programación en Mac OS X e iOS y por
tanto el lenguaje empleado para el desarrollo del proyecto.
SQL: 2 Es un lenguaje declarativo empleado en la gestión de los datos almacenados
en sistemas gestores de bases de datos relacionales. Una de sus características es la
realización de consultas y la modificación de datos a través del manejo del álgebra y
el cálculo relacional. SQL se ha utilizado en la recuperación de los datos de la base de
datos externa.
2.3.2
Hardware
A continuación se listan detalladamente el software empleado en la realización del presente Trabajo Fin de Grado.
Macbook Pro: Ordenador portátil con el que se va a desarrollar el proyecto, en él se
encuentra todo el software necesario para llevar a cabo la construcción de la aplicación. Sus características son las siguientes: Procesador Intel Core i5, 2’4GHz; 4Gb de
memoria RAM; nVIDIA GeForce GT 330M; HD 120Gb.
1
Objective-C,
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/
ProgrammingWithObjectiveC/Introduction/Introduction.html
2
Oracle Database Overview, http://docs.oracle.com/cd/E11882 01/server.112/e41084/toc.htm
14
iPad: Tableta que actúa de baliza durante las primeras fases del desarrollo, debido a la
falta de balizas iBeacon. Sus características son las siguientes: Procesador Apple A6X
dual core; 1.3GHz; 1Gb de memoria RAM; HD 16Gb.
iPhone: Smartphone con SO iOS 8.2 con el que también se van a realizar las pruebas
pertinentes del sistema durante el desarrollo del sistema. Sus características son las
si- guientes: Procesador Apple A6 doble núcleo, 1.3 GHz.; 1Gb de memoria RAM;
Pantalla táctil 4 pulgadas.
Kit de iBeacons de Estimote: Kit compuesto por tres balizas iBeacon; Versión Developer Preview
2.3.3
Software
A continuación se listan detalladamente el software empleado en la realización del presente Trabajo Fin de Grado.
Sistema Operativo
Mac OX: Sistema operativo desarrollado por Apple Inc., sobre el que se ha desarrollado el sistema. El desarrollo se ha llevado a cabo en la versión OS X Yosemite.
iOS: Sistema operativo desarrollado por Apple Inc. ,sobre el que se han desarrollado
las pruebas de la aplicación. Las pruebas de las aplicación se han llevado a cabo en la
versión 8.3
Software de desarrollo
Xcode: 3 Entorno de desarrollo integrado (IDE) de Apple Inc. que se suministra junto
con Mac OS X. Trabaja conjuntamente con Interface Builder, una herramienta gráfica
para la creación de interfaces de usuario. Se ha empleado en el desarrollo del sistema
en la versión 6.4.
SQLiteManager: 4 Gestor de Base de datos SQLite, con una interfaz muy clara, empleada para la creación de la base de datos externa. Se ha utilizado la versión 3.8.0.
3
4
Xcode, https://developer.apple.com/xcode/
SQLiteManager, http://www.sqlitemanager.org/en/
15
Documentación y Gráficos
LATEX:5 Sistema de composición de textos de alta calidad orientado especialmente a
la creación de documentación técnica y científica. Se ha empleado para realización de
la presente documentación. Se ha utilizado la distribución MacTeX-2015 y TeX Live
2015.
TeXworks: Herramienta para la creación de documentos con LATEX. Ha sido el editor
de LATEX empleado para redactar la documentación. Se ha utilizado la versión 0.4.5
(r.1280).
Balsamiq: Herramienta para la creación de bocetos de interfaces de usuario. Ha sido
empleado en el diseño de las diferentes pantallas de la aplicación. Se ha utilizado la
versión 3.1.9.
Visual Paradigm: Herramienta para el diseño de proyectos ágiles. Soporta modelado
con estándares como UML, SysML, ERD, DFD, BPN, etc. Proporciona soporte para
la identificación de casos de uso, análisis de requisitos y flujo de eventos entre otros. Se
ha empleado en la creación de los diagramas de secuencia. Se ha utilizado la versión
12.1.
Gannt Project: Herramienta para la planificación y gestión de proyectos. Ha sido
empleado en la creación de los diagramas de Gannt reflejando las iteraciones en el
proceso de desarrollo. Se ha utilizado la versión 2.6.3.
GIMP: Herramienta de manipulación fotográfica multiplataforma, que permite la realización de todo tipo de manipulación de imágenes, incluyendo retoque fotográfico y
composición de imágenes. Ha sido empleado en el tratamiento de las imágenes integradas en la documentación, cuando ha sido necesario. Se ha utilizado la versión
2.8.14p2.
LibreOffice Draw: Herramienta de dibujado vectorial perteneciente a la suite LibreOffice. Se ha empleado en la generación de diagramas presentes en la documentación. Se ha utilizado la versión: 4.4.4.3.
Floorplanner : 6 Herramienta para la creación de planos interactivos en linea. Se ha
empleado en la generación del plano de la aplicación.
5 A
LTEX6
A document preparation system, http://www.latex-project.org/
Floorplanner, http://es.floorplanner.com
16
Bibliotecas
OpenEars: 7 Biblioteca que proporciona reconocimiento de voz y conversión de texto
a voz para su uso en dispositivos iOS.
iOS SDK: 8 Incluye las bibliotecas y herramientas de desarrollo necesarias para compilar, probar y depurar aplicaciones en iOS. Ha sido utilizado para el desarrollo del
sistema, especialmente para el uso de las siguientes bibliotecas: Core Location, Core
Bluetooth, Core Data, Core Animation.
API Estimote: 9 Biblioteca proporcionada por Estimote para el control y programación de los iBeacons
7
OpenEars, http://www.politepix.com/openears/
iOS SDK, https://developer.apple.com/library/ios/navigation/
9
API Estimote, http://developer.estimote.com
8
17
Capítulo 3
Antecedentes
E
este capítulo se analizan las principales aplicaciones existentes que tengan el mismo
carácter que la aplicación que propone este Trabajo Fin de Grado, realizando un análisis de las principales características de cada una de ellas, que servirá para la confección de
la lista de objetivos que Shopping Beacon debe cumplir.
N
3.1 Trabajos relacionados
Como ya se ha comentado anteriormente, para conocer el estado actual del problema, es
necesario realizar un análisis previo que proporcione una visión general.
Es por ello que en esta sección se ha realizado un estudio de las aplicaciones existentes con
el fin de adoptar los aspectos conocidos apropiados para el problema y sustituir las carencias
que se descubran, mejorándolas o añadiendo las que se necesiten, con la finalidad obtener
una solución que se ajuste al problema que se procura resolver.
Para ello se han realizado búsquedas, de manera independiente a la plataforma en la que
se va a desarrollar la aplicación, introduciendo los términos por los que se ve afectado el
carácter de la aplicación, buscados tanto en inglés como en castellano en el buscador web
Google, en el buscador de la aplicación App Store, disponible para dispositivos iOS y en el
buscador de la aplicación Play Store disponible para dispositivos Android. Como resultado
de esta búsqueda y atendiendo al carácter de la aplicación se han agrupado las aplicaciones
en dos listas independientes:
Apps para realizar listas de la compra
Apps para localización en interiores
3.2 Apps para realizar listas de la compra
Esta búsqueda se ha orientado a aplicaciones o soluciones que permitan realizar una lista
de compra para posteriormente poder comprar en el supermercado o espacio comercial.
19
Shopping List
Esta aplicación destinada a realizar la lista de la compra sufre distintas carencias, como
puede ser una interfaz nada amigable, ya que el uso no es nada intuitivo. Esta aplicación
carece de una base de datos con productos que te permita seleccionar de manera previa y es
necesario introducir el nombre de cada uno de ellos para poder guardarlo, hasta un máximo
de 30 productos con la versión gratuita de la App. Al no tener una base de datos con los
productos tampoco tiene el precio de ellos y por tanto el precio total de la lista que el usuario
desea comprar. Tiene la opción de crear distintas listas, pero la aplicación se bloquea al
intentar crear una lista distinta de la principal, obligándo al usuario a reiniciar la App. La
única opción que parece tener sentido y funciona correctamente es la opción de compartir
que permite mandar la lista con los productos añadidos a cualquier dirección de correo.
Figura 3.1: App Shopping List. Lista
inicial
Figura 3.2: App Shopping List. Añadir
Producto
20
LiShop
LiShop1 es una aplicación destinada a realizar la lista de la compra que tiene una interfaz
más intuitiva, ya que cuenta con una base de datos con todos los productos que se pueden
seleccionar, sin embargo los productos carecen de foto que haga esa búsqueda del producto
más sencilla, aunque esa carencia la suple mediante una ordenación alfabética de los productos, además de poder buscar el nombre del producto o pasar un filtro para que sólo muestre
los productos del catálogo que el usuario elija. La aplicación permite añadir productos y
asignarles un precio para calcular el precio total de la lista, sin embargo no permite crear distintas listas y tener estas listas ordenadas. Una vez finalizada la creación de la lista permite
mandarla a cualquier dirección de correo.
Figura 3.4: App LiShop. Buscar Producto
Figura 3.3: App LiShop. Lista Inicial
1
LiShop (2015), http://www.lishopapp.com
21
Buy Me a Pie
Buy me a Pie2 es una aplicación destinada a realizar la lista de la compra que llama más
la atención al incluir más color, sin embargo la base de datos de productos esta incluida
en la esquina de la barra de búsqueda de la interfaz por lo que no es intuitivo acceder a ese
catálogo, ya que el único objetivo de la barra de búsqueda es escribir un nombre para después
buscarlo y no incluir un botón en su esquina. Posee una base de datos con todos los productos
pero no incluye ninguna foto ni precio. A la hora de buscar un producto dentro de la barra
de búsqueda, aparecen los posibles productos que se pueden buscar por la palabras que ya
se han introducido y de esa manera deshacerse de los que no se buscan, por lo que actúa
de filtro. A la hora de añadir productos a la aplicación se permite repetir productos, cuando
lo normal sería aumentar la cantidad y no que aparezca dos veces, ademas al no ordenar la
lista del usuario final, puede encontrarse el mismo producto al final y al principio de la lista.
Esta app sí permite crear otras listas y añadirles un nombre, sin embargo sólo se consigue
mediante una versión de pago. Al igual que las aplicaciones ya comentadas anteriormente,
una vez finalizada la creación de la lista permite mandarla a cualquier dirección de correo.
Esta app de origen americano, ofrece una plataforma web que permite realizar la gestión de
las compras con una interfaz similar.
Figura 3.5: App Buy Me a Pie. Creación de listas
2
Figura 3.6: App Buy Me a Pie. Lista
Inicial
Buy me a Pie (2013), http://buymeapie.com
22
ShopShop
ShopShop3 es una imitación de la aplicación Notas que incorpora el iPhone en la versión
7.1.2, por lo que para aquel usuario que haya usado esta versión de iOS, no le será difícil
acostumbrarse, es un diseño simple pero intuitivo. Al ser una imitación de la app Notas, no
contiene ninguna base de datos con productos, por lo que es necesario introducir el nombre
de cada uno de ellos para poder guardarlo en la lista. Permite crear varias listas donde cada
una corresponde a una vista independiente de las otras. Las vistas son personalizables, ya que
permite cambiar el color del fondo y el titulo de la lista. Dentro del apartado de configuración
permite cambiar el tamaño de la fuente para que se vean los nombre de los productos más
grandes y ordenar las listas por orden alfabético; como inconveniente para cambiar de lista
se tiene que ir pasando de una vista a otra hasta encontrar la lista deseada, si se tienen pocas
listas no se tarda mucho, pero si se tienen varias listas, encontrar la lista deseada puede
ser una tarea pesada. Al igual que las aplicaciones ya comentadas anteriormente, una vez
finalizada la creación de la lista permite mandarla a cualquier dirección de correo.
Figura 3.8: App ShopShop. Mandar
lista por correo
Figura 3.7: App ShopShop. Añadir
Producto
3
ShopShop (2008), http://nschum.de/apps/ShopShop/
23
Lista
Lista4 permite realizar una lista de la compra de una manera más clara, ya que posee una
interfaz más intuitiva y tan sólo contiene dos vistas, la primera de ellas con el catálogo de
productos y la segunda para añadir la cantidad. Cuenta con una base de datos de productos
propia, con una foto del producto deseado y ordenado por categorías, lo que hace fácil de
buscar el producto deseado. La app contiene una barra de búsqueda que permite buscar el
producto introduciendo texto o dictando el producto, por lo que la función de búsqueda resulta muy sencilla. Una vez seleccionado el producto permite añadirle la cantidad de producto
que se desea expresado en kilos o unidades. Como inconveniente, no permite crear distintas
listas, sólo contiene 15 productos entre los que poder elegir de manera gratuita. No permite
añadir un precio a cada uno de los productos para calcular el precio final. Una vez finalizada
la creación de la lista permite mandarla a cualquier dirección de correo.
Figura 3.10: App Lista. Añadir Producto
Figura 3.9: App Lista. Lista Inicial
4
Lista (2013), http://www.kobiuter.com
24
ShopIt
ShopIt5 es otra aplicación destinada a realizar la lista de la compra; tiene una interfaz
muy vistosa pero nada intuitiva, ya que su enfoque de simplificar al máximo llega a resultar
excesivo. La primera imagen que se encuentra al abrir la aplicación es una tabla con el
catálogo de productos, en la que aparece la imagen a la izquierda y el nombre a la derecha de
cada celda, dos botones en el margen, el primero de ellos que permite personalizar la tabla
con colores y el segundo de ellos para realizar la compra directamente, y por último entre los
botones del margen y el catálogo una barra de búsqueda y un espacio en blanco, entonces la
pregunta es, ¿cómo se añaden los productos?; la respuesta está en la primera vista que ofrece
la aplicación, aquella con el catálogo de productos. Si se deja pulsado cualquier producto se
añade al espacio en blanco en forma de cola, es decir, va añadiendo productos y poniéndolos
al final de la cola. Sin embargo no permite crear varias listas, ni añadir la cantidad, y si se
desea borrar la lista, se tienen que borrar individualmente cada uno de los productos lo que
hace una tarea tediosa si se quiere borrar una lista con muchos productos. Una vez finalizada
la creación de la lista si se pulsa el botón del margen de comprar permite visualizar la lista
de una manera mas cómoda, ya que presenta todos los productos seleccionados en una tabla
ordenada por catálogo y mandarla a cualquier dirección de correo.
Figura 3.11: App ShopIt. Lista Inicial
5
Figura 3.12: App ShopIt. Lista Final
ShopIt (2013), http://129642c2c6c30893af75-8259d49df90b36016edbf45b689de5ec.r28.cf2.rackcdn.com
25
myShopi
myShopi6 es la última aplicación que se va a comentar destinada a la creación de la lista de
la compra, tiene una interfaz vistosa, intuitiva y muy amigable al usuario final. Está mucho
más enfocada a los supermercados, ya que a la hora de crear una lista el nombre que se le
asigna a la lista es el de aquel supermercado en el que se va a realizar la compra, eligiendo
entre todos ellos a la hora de crear la lista y, en el caso de que no estuviera, con la posibilidad
de incluir el supermercado para poder elegirlo. Una vez elegido el supermercado aparecen
todas las posibles categorías, y una vez elegida la categoría aparecen todos los artículos
que le pertenecen, de la misma manera que si no estuviera la categoría o articulo deseado
da la posibilidad de incluirlo. Una vez seleccionada la lista se entra en otra ventana donde
se puede editar los artículos elegidos añadiendo una nota, como pueden ser las unidades
que se quieren comprar. Dentro de esta misma ventana se tiene la opción de borrar todos
los productos, buscar el producto introduciendo texto o dictando el producto en la barra de
búsqueda y mandar la lista a cualquier dirección de correo. Un inconveniente que tiene la
aplicación es el no tener el precio o no dejar asignárselo a cada producto para así saber el
precio final de la lista.
Figura 3.13: App myShopi. Crear Lista
Inicial
6
Figura 3.14: App myShopi. Añadir
Producto
myShopi (2014), http://www.myshopi.com
26
3.2.1
Análisis Comparativo App para realizar listas de la compra
Una vez comentadas las características de cada una de las aplicaciones, se concluye con
un análisis comparativo entre ellas teniendo en cuenta las características más destacables de
cada una de ellas y las características que una aplicación destinada a un usuario que quiera
realizar una lista de la compra ha de tener. El resultado de la comparación se puede consultar
en la Tabla 3.1.
El análisis comparativo realizado en la Tabla 3.1, permite visualizar las características de
cada aplicación que proveen diferentes servicios a sus usuarios y características deseables
para la aplicación y por lo tanto se debe valorar su incorporación en este proyecto.
Tras hacer un análisis de las características reales de las aplicaciones examinadas y deseables en una aplicación para el usuario, se ha considerado aconsejable añadir las siguientes
características a la aplicación que enlaza al proyecto:
La app debe contener una base de datos con los productos del centro comercial al que
va a estar destinada la app.
Los productos deben contener una imagen que haga más intuitiva la localización dentro
del catálogo de productos.
Los productos deben tener un precio asignado.
Los productos pueden ser buscados de manera escrita o por comandos de voz.
El usuario puede crear varias listas.
El usuario puede visualizar el precio de la lista con los productos ya escogidos.
El usuario puede compartir la lista con cualquier otra persona.
El usuario puede añadir una alerta a cada lista para que le avise en una fecha concreta.
27
28
Shopping List
LiShop
Buy me a Pie
ShopShop
Lista
ShopIt
myShopi
7
7
7
7
3
3
3
7
3
3
7
3
3
3
7
7
3
7
7
7
7
Productos
Precio
7
3
3
7
3
7
3
Búsqueda
Productos
Escrita
7
3
3
7
3
7
3
Búsqueda
Productos
Hablada
7
7
7
3
7
7
7
Crear varias
listas
7
7
3
7
7
7
7
Precio
lista
3
7
3
3
7
3
3
Compartir
lista
Tabla 3.1: Comparativa de las aplicaciones existentes que permiten realizar la lista de la compra.
Productos
Imagen
Base de
datos
Productos
7
7
3
7
7
7
7
Recordatorio
lista
7
7
7
7
7
7
3
Centro
Comercial
3.3 Apps para localización en interiores
Esta búsqueda se ha orientado a aplicaciones o soluciones que permiten una localización
en interiores más precisa que la ofrecida por redes móviles y GPS.
Point Inside
Point Inside7 permite visualizar todos los servicios disponibles en edificios de entidades
públicas o privadas tanto mayoristas como minoristas. Estos edificios son aeropuertos, centros comerciales, parques temáticos y museos asociados a América y pueden ser buscados
por ubicación y categoría.
Muestran los servicios de dichos edificios: baños, cajeros automáticos, estacionamientos,
ascensores, etc; y en el caso de minoristas, acceder a ofertas especiales, ofertas y cupones
que éstos ofrecen. Además proporciona instrucciones para llegar al destino y cuenta con
enrutamiento dentro de la sala de navegación.
Ofrece un plano dibujado de cada planta para cada uno de los edificios, y dentro de éste la
posibilidad de seleccionar los servicios buscados como pueden ser el aseo o un restaurante.
Otra punto fuerte es el amplio repositorio de planos del que dispone, accesible sin conexión
a Internet.
Figura 3.16: App Point Inside. Servicios disponibles
Figura 3.15: App Point Inside. Mapa
7
Point Inside (2011), http://www.pointinside.com
29
Wifarer
Wifarer8 facilita el posicionamiento en interiores mediante el uso de la tecnología WiFi
de entidades públicas y privadas. Disponible en museos, hospitales, aeropuertos, centros
comerciales, minoristas, estadios y universidades de Estados Unidos y Canadá.
Los usuarios reciben la localización sin problemas y son guiados sin problemas a través
de cualquier complejo hasta su destino con facilidad. Se estudian los comportamientos de
los usuarios en las distintas instalaciones, con especial importancia en pacientes, ya que, registran lo que buscan, dónde suelen ir y el tiempo empleado. Además de guiar a sus usuarios
en todos los edificios, incluye dos servicios comunes a todos los complejos:
El primero es la información que ofrecen sobre los servicios de los que dispone: restaurantes, tiendas de regalos, cafeterías, etc.
El segundo tiene en cuenta la accesibilidad para sillas de ruedas, para aquellos usuarios
con problemas de movilidad para llegar a su destino.
Volviendo al tema de los hospitales los visitantes pueden buscar la clínica o la habitación
de un paciente y ser guiados sin necesidad de consultas a recepción.
En el caso de los aeropuertos, guía a la puerta de embarque, teniendo en cuenta el tiempo
que se tarda en llegar y la distancia que queda.
Todos estos servicios, apoyados en mapas precisos de cada una de las plantas, junto con
el amplio repositorio de planos del que dispone y su continuo crecimiento, hacen que sea un
referente a la hora de tener en cuenta características del futuro proyecto.
Figura 3.17: App
Wifarer. Guiado interior
8
Figura 3.18: App
Wifarer. Servicios
Ofrecidos
Wifarer (2014), http://www.wifarer.com
30
Figura 3.19: App
Wifarer. Servicios
Ofrecidos
San Francisco Airport usa iBeacons para ayudar a a los invidentes
El aeropuerto de San Francisco esta realizando pruebas con iBeacons para ayudar a gente invidente a desplazarse dentro de la terminal, mediante la implantación de 300 balizas
distribuidas dentro de la terminal. Gracias a la tecnología iBeacons conectando los teléfonos móviles de los usuarios para recibir información y a la tecnología VoiceOver de Apple
que permite leer en voz alta dicha información, se podrá informar al usuario desde donde
encontrar una cafetería o una toma eléctrica, hasta desplazarse a localizaciones concretas
[Low14].
Figura 3.20: Mapa interior aeropuerto
de San Francisco.
Figura 3.21: Adaptacion a gente invidente aeropuerto de San Francisco.
31
MIT Mobile
MIT Mobile9 está destinada a su uso en el Massachusetts Institute of Technology o más
conocido como MIT permite buscar cualquier edificio de manera independiente dentro del
campus. Muestra un plano esquemático de todos los edificios sobre un mapa cartográfico y
ofrece información acerca de él.
Permite al usuario mantenerse en contacto con todo el personal del MIT (docentes, administrativos, estudiantes) proporcionando la información de contacto personal y saber en
qué edificio se encuentra para el caso de trabajadores del MIT (docentes y administrativos).
Además muestra todos los eventos que se realizan en el centro.
Figura 3.23: App MIT Mobile. Servicios Ofrecidos
Figura 3.22: App MIT Mobile. Guiado
9
MIT Mobile (2015), http://m.mit.edu/about/iphoneapp.html
32
Se ha realizado una breve búsqueda referente a la universidad poniendo como referencias
tres ejemplos:
Universidad de Granada
La Universidad de Granada10 provee información sobre la Universidad, los centros que
la componen y las titulaciones que en ella se imparten, de manera que el usuario sea capaz de conocer la oferta que ofrece la Universidad a la comunidad educativa. Dispone de
información como el alojamiento en Granada, el calendario académico, el uso de la tarjeta
Universitaria o el proceso para solicitar una cuenta de correo electrónico. La aplicación incluye acceso al directorio de la Universidad, con el que se puede localizar la información
sobre los miembros de esta comunidad. También se pueden localizar geográficamente los
centros y servicios de la Universidad y visualizar cada uno de los edificios señalados en un
mapa cartográfico.
Figura 3.24: App Universidad de Granada. Servicios ofrecidos
10
Figura 3.25: App Universidad de Granada. Centros de la Universidad
Universidad de Granada (2012), http://cevug.ugr.es/movil
33
Universidad de Alabama
De manera similar a la Universidad de Granada, la app University of Alabama11 ofrece
una suite de aplicaciones corporativas en una principal, con la diferencia de que permite
buscar los edificios por separado en lugar de mostrar todos los edificios sobre el mapa, utiliza
un plano dibujado para mostrar los edificios superpuestos y muestra más información del
edificio. También muestra el directorio personal de la universidad, ofreciendo la posibilidad
de mantenerse en contacto con la persona buscada.
Figura 3.27: App University of Alabama. Directorio de búsqueda
Figura 3.26: App University of Alabama. Servicios ofrecidos
11
university of Alabama (2012), http://m.ua.edu/app/
34
Universidad Rey Juan Carlos
La Universidad Rey Juan Carlos12 permite al usuario gestionar sus propias guías de ocio
o turismo, incluso para personas con discapacidad funcional o que necesiten orientación
por todo el campus de la Universidad Rey Juan Carlos ( URJC ) al combinar guiado tanto
Outdoor como Indoor ofrece indicaciones dependiendo de la incapacidad que presente (voz
para invidentes, gestos y texto para sordos, etc).
Figura 3.28: App GuideURJC. Mapa
de interior
12
Figura 3.29: App GuideURJC. Creación de rutas
Universidad rey Juan Carlos (2013), https://play.google.com/store/apps/details?id=com.dte.guideURJC&
hl=es
35
Carrefour
Carrefour está probando una nueva tecnología que utiliza Bluetooth Low Energy (BLE),
en carros y cestas para seguir el viaje de los compradores de la tienda. Estas balizas unidas a
los carros y cestas trabajan en conjunto con sensores colocados en el techo de la tienda que
recogen las señales emitidas.
Los datos de localización recogidos por los sensores se almacenan en un servidor para su
análisis. Estos datos recogen el tiempo total que están en la tienda y en cada pasillo y los
pasillos más visitados. Los datos de localización se recogen de forma anónima, pero prevé
ampliarse en el futuro vinculando los datos a cada cliente individual.
El cambio de los hábitos en un cliente es muy difícil, mediante el uso de estas balizas unidas a carros y cestas se prescinde de que los consumidores necesiten una aplicación o incluso
un teléfono móvil, de manera que no se necesite ninguna interacción con el cliente.
Sin embargo la tecnología es completamente compatible con el teléfono inteligente, de
manera que en un futuro se pueda integrar con su tarjeta de fidelización, por ejemplo. En
todo momento lo que se quiere es saber el comportamiento y el flujo de personas dentro de
la tienda sin la necesidad de saber quiénes son.
Figura 3.30: Localización Indoor dentro del supermercado Carrefour
36
3.3.1
Análisis Comparativo App para localización en interiores
De manera análoga al análisis comparativo de las aplicaciones para realizar listas de la
compra, se concluye este apartado con un análisis comparativo de las características de las
aplicaciones de localización interior mediante la creación de la Tabla 3.2.
La comparativa realizada en la Tabla permite visualizar las características de todas las
aplicaciones analizadas que proveen diferentes servicios relevantes y por tanto, se debe considerar su incorporación en este proyecto.
Sin embargo al tratarse de un usuario que va a realizar la compra a un supermercado,
algunas de estas características no sirven y el resto hay que adaptarlas, ya que, en lugar de
mencionar edificios, se referirán a productos. A continuación se enumera una adaptación de
las diferentes características destacables:
Uso de mapa cartográfico: Este punto situará el edificio en el mapa.
Indicación sobre mapa de edificios disponibles: Indicación de los productos disponibles, ya sea a través de una lista o presentada en un mapa esquemático dibujado interior
si lo tuviera la aplicación.
Búsqueda de edificios disponibles: Pasaría a llamarse “búsqueda de productos disponibles” y permitiría buscar si el producto que se desea está en la lista.
Uso de plano esquemático dibujado interior: Esta característica es similar, ya que se
mostrarían los distintos pasillos que ofrece el supermercado.
Posicionamiento interior: Esta característica es la esencia de la aplicación.
Visualización de Servicios interiores: Esta característica también se ofrece de la misma
manera en una aplicación para edificios y para ir a comprar.
Búsqueda de servicios: Esta característica no tiene sentido si se añade la característica
anterior, ya que en un supermercado son pocos y son comunes los servicios que se
ofrecen a los usuarios en todos los edificios similares, como por ejemplo un aseo.
Rutas Origen-Destino: Esta característica junto con el posicionamiento interior es la
base de la aplicación.
Guiado: Esta característica ofrece indicaciones al usuario a la hora de realizar la ruta.
37
Tras conocer y adaptar todas las características de las aplicaciones de interior se ha considerado recomendable incorporar las siguientes a el proyecto:
Indicación de los productos disponibles
Búsqueda de productos disponibles
Uso de plano esquemático dibujado interior
Posicionamiento interior
Visualización de Servicios interiores
Rutas Origen-Destino
Guiado
38
39
Point Inside
Wifarer
San Francisco Airport
MIT Mobile
Universidad de Granada
Universidad de Alabama
Universidad Rey Juan Carlos
Carrefour
3
7
7
3
3
7
3
7
3
3
7
3
3
3
3
7
3
3
7
3
7
3
3
7
Búsqueda
de edificios
disponibles
3
3
3
7
7
7
3
3
Uso de plano
esquemático
dibujado
interior
7
7
3
7
7
7
3
3
3
3
3
7
7
7
7
3
7
7
3
3
7
7
7
3
3
3
3
3
7
7
3
3
Posicionamiento Visualización Búsqueda Ruta
en interior
de servicios
de
Origeninteriores
servicios Destino
Tabla 3.2: Comparativa de las aplicaciones que permiten realizar localizacion Indoor
Indicación
sobre mapa
de edificios
disponibles
Uso de
mapa
cartográfico
7
7
3
7
7
7
3
3
Guiado
3.4 Conclusión
Una vez finalizado el análisis de las aplicaciones que se han hallado se muestra en la Tabla
3.3 el resultado de todas las características deseables que ha de tener la aplicación.
App Listas de la Compra
App Localización Indoor
Características
- La app debe contener una base de datos con los productos
del centro comercial al que va a estar destinada la app.
- Los productos deben contener una imagen que haga más
intuitiva la localización dentro del catálogo de productos.
- Los productos deben tener un precio asignado.
- Los productos pueden ser buscados de manera escrita o
por comandos de voz.
- El usuario puede crear varias listas.
- El usuario puede visualizar el precio de la lista con los
productos ya escogidos.
- El usuario puede compartir la lista con cualquier otra persona.
- El usuario puede añadir una alerta a cada lista para que le
avise en una fecha concreta.
- Indicación de los productos disponibles
- Búsqueda de productos disponibles
- Uso de plano esquemático dibujado interior
- Posicionamiento interior
- Visualización de Servicios interiores
- Rutas Origen-Destino
- Guiado
Tabla 3.3: Características de ShoppingBeacon
40
Capítulo 4
Arquitectura
E
este capítulo se describen el diseño e implementación del sistema desarrollado, siguiendo un enfoque top-down en el que en primer lugar se realiza un resumen del
sistema sin especificar detalles y a continuación se desarrolla cada parte del sistema con
mayor detalle. Como ya se ha comentado, en primer lugar se proporciona una descripción
general de la arquitectura del sistema, que sirve de introducción a los contenidos expuestos
en el resto del capítulo. En segundo lugar se presenta los patrones de diseño en la que se basa
el sistema y finalmente se presenta el estudio del diseño e implementación de cada uno de
los módulos del sistema, describiendo las responsabilidades de cada módulo, las alternativas
tecnológicas consideradas para su implementación, problemas surgidos en su desarrollo y
soluciones planteadas y los detalles técnicos de los mecanismos finalmente planteados.
N
4.1 Arquitectura General
Ampliando la visión general de la arquitectura proporcionada en la Sección 2.1 del Capítulo 2, las siguientes secciones de este capítulo realizan un análisis de los diferentes aspectos
significativos que describen cada una de las partes de la arquitectura. Esta distribución se
muestra en la Figura 4.1, tras lo que se realiza un breve reconocimiento de los distintos
componentes que comprende la plataforma. La plataforma se halla estructurada siguiendo el
patrón MVC como se describe en la Sección 4.2, en el que cada vista posee su controlador y
modelo asociado.
Siguiendo el orden vertical, el primer nivel que se puede observar es el de presentación
o interfaz de usuario (vista) que, como su nombre indica, es el medio a través del cual,
el usuario interactúa con el sistema, solicitando la realización de operaciones y recibiendo
resultados u otra información como pueden ser las notificaciones. El siguiente nivel se trata
de la capa de controladores, responsable de operar directamente con cada una de las dos
partes de la que consta la aplicación, ya que es el encargado de recibir a entrada del usuario
y reaccionar en consecuencia.
A continuación se encuentran de manera paralela las dos partes de la que consta la plataforma: Gestión y Acceso a Datos y Ubicación y Guiado.
41
Figura 4.1: Modelo de arquitectura del sistema
Gestión y Acceso a Datos
Es aquí donde se encuentra la base de datos de la aplicación. En el se pueden distinguir dos
fachadas de operaciones que le permiten comunicarse con los niveles superior e inferior. La
fachada de operaciones con listas, encargada de la operación y la comunicación del Módulo
de Gestión y Acceso a Datos con el controlador mediante el uso de delegados, como se
comenta en la Sección 4.2 y la fachada de operaciones de persistencia de datos se encargará
de operaciones con la base de datos mediante una interfaz de operaciones, utilizada para
garantizar la independencia entre las diferentes partes de la arquitectura. Ambas interfaces de
42
operaciones actúan sobre la lógica y las entidades de dominio del sistema. También se puede
observar otros cuatro módulos cuya utilidad será detallada en el análisis de su arquitectura:
Sistema de Consulta de Datos, Sistema de Creación de Listas, Sistema de Modificación de
Listas y por ultimo el Sistema de Notificación de Eventos. Finalmente se encuentra la base
de datos, encargada de almacenar todos los datos necesarios para la generación de listas
y la consulta de datos, incluidas las listas que genera el usuario. Su estructura, analizada
posteriormente, se comunica mediante la fachada de operaciones de persistencia de datos.
Ubicación y Guiado
Como nuestra la Figura 4.1, la arquitectura del sistema se encuentra estructurada modularmente y se compone de:
Módulo de Comunicaciones: Se comunica con los distintos dispositivos que se encuentren dentro del recinto comercial para recibir los datos de entrada que serán procesados y convertidos en información válida para el módulo superior. Descrito en la
Sección 4.6.1.
Módulo de Tratamiento de Señal: Gestiona todas las señales que recibe haciendo
una distinción según el dispositivo del que llega la señal. Descrito en la Sección 4.6.2.
Módulo de Filtrado de Señal: Una vez conseguido un número determinado de señales de cada dispositivo, se procesan de manera concurrente mediante el uso de hilos
para evitar los cuellos de botella y reducir el ruido aleatorio en el dominio de tiempo.
Descrito en la Sección 4.6.3.
Módulo de Posicionamiento: Una vez determinadas las posibles posiciones calculadas previamente en el módulo anterior, se decide cuál es la posición final del usuario.
Descrito en la Sección 4.6.4.
Módulo de Enrutamiento y Guiado: Se encarga de generar la ruta de menor coste
con todos los productos seleccionados por el usuario, teniendo en cuenta el lugar de
partida. Descrito en la Sección 4.6.5.
Dispositivos: El sistema debe reconocer y obtener los datos que envíen independientemente del tipo de tecnología empleada (vease Anexo A) y del tipo de comunicación
que utilicen.
La siguiente posición junto con su descripción para guiar al usuario se mandará al controlador de la aplicación que será el encargado de actuar en consecuencia y comunicarse con la
vista.
43
4.2 Patrones de Diseño
Una de las cualidades de cualquier framework o SDK es que se deben utilizar los patrones
de diseño que ofrecen al desarrollador, para así facilitar la implementación de una app.
Dentro del SDK de iOS no es una excepción, y se han utilizado distintos patrones de
desarrollo en los que se basa la aplicación y que a continuación se van a detallar.
4.2.1
Delegado
Esta clase de patrón de diseño es frecuentemente usada en el desarrollo de aplicaciones en
la plataforma iPhone OS. Normalmente suele ser la alternativa a la herencia. La delegación
es una forma de extender y reutilizar la funcionalidad de una clase, escribiendo otra clase
adicional con funcionalidad extra que usa instancias de la clase original para proveer su
propia funcionalidad. Los delegados (delegate) son un patrón en donde un objeto actúa en
nombre de un coordinador asociado a otro objeto. Un delegate básicamente delega el control
de la interfaz de usuario para un evento, o al menos se le pregunta para interpretar el evento
de una manera específica en la aplicación, es decir, mantiene una especie de vínculo con el
objeto que le permite recibir los mensajes que el objeto genérico genera.
El funcionamiento de un delegate permite coordinar su apariencia y estado con cambios
que se producen en otras partes de un programa, cambia generalmente provocado por las
acciones del usuario. Más importante aún, los delegates hacen posible que un objeto pueda
alterar el comportamiento de otro objeto sin la necesidad de tener una relación de herencia
entre los objetos. El delegate es casi siempre uno de los objetos personalizados, y por definición, incorpora la lógica específica de la aplicación que el objeto genérico no conoce.
En muchas ocasiones, la delegación resulta más apropiada que la herencia. Por ejemplo,
la herencia es útil para modelar relaciones de tipo es-un o es-una, ya que estos tipos de
relaciones son de naturaleza estática. Sin embargo, relaciones de tipo es-un-rol- ejecutadopor son mal implementadas con herencia. En este tipo de relaciones, las instancias de una
clase pueden jugar múltiples roles. Los métodos definidos con este patrón están agrupados
en un protocolo. Los protocolos en iOS son métodos que actúan sobre un objeto y pueden
ser implementados por cualquier clase. Básicamente tienen la declaración de una serie de
métodos que ejecuta otra clase y se espera que le agreguemos funcionalidad según lo necesite
cada una de las clases que invocan esta otra clase. Si una clase se ajusta a un protocolo,
entonces garantiza que implementa los métodos obligatorios de ese protocolo, que además
puede incluir métodos opcionales.
En el caso de la aplicación desarrollada para este proyecto, se han usado muchos de los
protocolos delegados que iPhone OS provee a los desarrolladores. Los componentes como
la brújula, el acelerómetro o el bluetooh, requieren de la implementación de determinados
métodos en las clases en las que se declaran instancias de las clases originales que hacen
referencia a estos sensores. De este modo, los sensores envían la información que recogen
44
a los métodos implementados por sus delegados. También las vistas de tablas, las alertas de
aviso, el envío de correo, las barras de navegación, etc.
Además de los protocolos ya existentes, iOS proporciona la posibilidad de declarar nuevos
protocolos de delegados que se adapten a las necesidades de una aplicación en concreto. En
el caso de la aplicación desarrollada se ha implementado un protocolo de delegado por cada
una de las vistas que aparecen en la aplicación
4.2.2
Target-Action
Aunque el patrón delegado es útil para la comunicación entre los objetos de un programa,
no es la manera más adecuada de comunicarse con la interfaz de usuario. La interfaz de
usuario de una aplicación típica consiste en un conjunto de objetos gráficos y quizás los más
comunes sean los controles (boton, slider, casillas de verificación,...).
El papel de un control en la interfaz de usuario es simple: Interpreta la intención del usuario y da instrucciones a otro objeto de llevar a cabo esa solicitud. De esa manera, cuando
un usuario actúa sobre cualquier control de la aplicación el dispositivo de hardware genera
un nuevo evento. El control acepta el evento y lo traduce en una instrucción especifica de la
aplicación. Un evento es generado por un usuario mediante cualquier interacción. Por ejemplo, que el usuario haga click sobre un botón generará un evento para que el que existirá un
comportamiento predeterminado por parte del sistema. Estos comportamientos pueden ser
cambiados ante un evento disparado, es decir se trata de manejadores (handlers).
Los eventos, como se ha comentado anteriormente, no dan mucha información acerca de
la intención del usuario. Simplemente refleja que el usuario hace click en un botón del ratón o
pulsa una tecla, por lo que debe existir algún mecanismo encargado de realizar la traducción
entre evento e instrucción. Este mecanismo se denomina Target-Action
Este mecanismo se utiliza para la comunicación entre un control y otro objeto. La recepción del objeto, normalmente una instancia de una clase personalizada, se llama el objetivo.
La acción es el mensaje que el control envía al objetivo.
Por lo que, este patrón es uno de los que permitirá que desde la vista se puedan invocar
manejadores del eventos presentes en el controlador. Es decir relacionar un evento de un
objeto de la vista con una acción o método de un controlador. La relación será entre el objeto
el evento(target) y la acción (action).
4.2.3
Modelo-Vista-Controlador (MVC)
MVC define una separación clara entre los componentes críticos de la aplicación (Figura 4.2). Usando este patrón de diseño se obtiene una estructura definida que puede permitir
a otros desarrolladores trabajar con el código implementado en un futuro. Además, aplicar
esta clase de estructura permite reutilizar partes del proyecto para otras aplicaciones diferentes [Joh10]. Por ejemplo, la clase que pinta un botón en la pantalla, se podría reutilizar en
45
todos los botones que tiene la aplicación siempre y cuando esa sea su única responsabilidad.
Si además de pintar un botón en la pantalla tuviese una lógica que se debe ejecutar al pulsar
el botón, no se podría reutilizar, obligando a repetir el código que pinta un botón en la pantalla para cada uno de los botones de la aplicación. Como su nombre indica, se definen tres
partes de la aplicación:
Modelo: Proporciona los datos internos y los métodos que ofrecen información al
resto de la aplicación. El modelo no define la apariencia o el comportamiento de la
aplicación.
Vista: Puede haber dentro de una misma aplicación una o más vistas, formada cada
una de ellas por diferentes componentes (etiquetas, campos, botones, etc. ) con los que
el usuario interactúa y conforman por tanto la interfaz de usuario.
Controlador: Está vinculado a la vista. El controlador es el responsable de recibir la
entrada del usuario y reaccionar en consecuencia. Los controladores pueden acceder
y actualizar una vista usando información del modelo, así como actualizar el modelo
con el resultado de las interacciones del usuario en la vista, es decir, enlaza los componentes del MVC. Es el cerebro de este patrón de diseño, haciendo trabajar a la vista
y el modelo en sincronización para que el usuario pueda ver cosas en la pantalla o para
que al presionar un botón sea efectuada alguna acción.
El patrón MVC se explica mejor con la Figura 4.2:
Figura 4.2: Objetos pertenecientes al patrón MVC
El usuario interactúa con la aplicación y la vista (U objeto de la vista) a través de la
interfaz de usuario.
46
La vista le envía un mensaje al controlador diciéndole por ejemplo que hemos presionado un botón y queremos que esto responda a alguna acción.
El controlador recibe el mensaje y contacta con el modelo para realizar la acción y
actualizar la información pertinente.
El controlador recoge la información requerida por la vista pero actualizada por el
modelo y por último actualiza la vista con los cambios que se han realizado sobre en
el modelo.
Como ya se ha comentado anteriormente, el controlador es el encargado de enlazar los
componentes del MVC con los que mantiene una comunicación “ciega” y estructurada.
A continuación se explica la comunicación entre los distintos componentes con la Figura
4.3
Figura 4.3: Comunicación entre los objetos del MVC
En cuanto a la comunicación con la vista, el Controlador crea un objetivo (target) en si
mismo, y repartirá acciones (action) a la Vista. Ésta será la encargada de enviar la acción
a este objetivo cuando suceda algún evento en la interfaz de usuario como puede ser una
pulsación sobre un botón de la Vista y será el Controlador el encargado de realizar las tareas
necesarias para responder a ese evento.
A veces, la Vista tiene que sincronizarse con el Controlador (para actualizar los datos de
la misma), es entonces cuando este Controlador se fija como delegado de la Vista a través
de un protocolo, ya que la Vista no es la propietaria de los datos que está mostrando, y en
la mayoría de los casos es el Controlador el que actúa como origen de datos interpretando y
formateando la información del Modelo.
47
El objeto encargado de delegar las funciones (en este caso la Vista) mantiene una referencia al otro objeto, el delegado (en nuestro caso el Controlador), y en el momento apropiado
envía un mensaje a dicha referencia. El mensaje informa al delegado de un evento que el
objeto que delega (la Vista), está a punto de manejar o simplemente ha manejado. El delegado puede responder al mensaje mediante la actualización de la apariencia o estado de
la Vista. La principal ventaja de la delegación, es que permite personalizar fácilmente el
comportamiento de varios objetos en un objeto central.
En cuanto a la comunicación con el Modelo, no hay una comunicación directa, sino que
el Modelo utiliza un mecanismo de transmisión que hace de “emisora de radio” permitiendo
de esa manera a los controladores (u otros Modelos) poder “sintonizar” las cosas que les
interesa. Este mecanismo son Notificaciones y KVO (Key-Value Observing) que permite a
los objetos que se les notifique de los cambios en las propiedades de otros objetos.
El aislamiento lógico creado entre las partes funcionales de una aplicación hace que el
código sea más fácil de mantener, reutilizar y ampliar. El diseño MVC en el kit de desarrollo
de Apple es natural. Cualquier proyecto creado en él sigue este patrón. Por lo tanto, el diseño
de todas las vistas (capa de presentación) es llevado a cabo por la herramienta Interface
Builder mientras que la lógica de la aplicación es implementada en la herramienta Xcode.
4.3 Posicionamiento en móviles
Se pretende conseguir la posición más exacta posible del usuario o nodo móvil en tiempo
real, de manera que el usuario no intervenga de manera activa en el cálculo de la solución
propuesta.
Hay múltiples técnicas que te permiten estimar la posición del usuario, procesando las
señales recibidas por los nodos de referencia:
Técnicas que utilizan el retardo de la señal como pueden ser Time of Arrival, Time
Difference of Arrival, Roundtrip Time of Flight.
Técnicas que se basan en el ángulo en que llega la señal como es Angle of Arrival
Técnicas que se basan en la atenuación de la señal como es el caso de Received Signal
Strength.
Sin embargo los entornos de interiores presentan problemas de la reflexión de la señal que
dificultan en gran medida el uso de estad técnicas.
Este es el problema ampliamente conocido como del camino múltiple o multipath. Este problema establece que la señal puede llegar al nodo móvil desde varios lugares y con
distintos ángulos, lo que dificulta establecer la posición exacta del nodo emisor de la señal
[AMB10].
Este problema impide que un sistema de posicionamiento en un entorno interior pueda
48
basarse en las técnicas que estudian la forma en que llega esta señal, por el problema de los
rebotes que se producirán en el entorno, por lo que se ha decidido calcular la posición del
usuario utilizando las técnicas que se basan en la atenuación de la señal (RSS).
Para la realización del presente Trabajo Fin de Grado se ha basado en la técnica basada
en la fuerza de recepción de la señal (RSS). Concretamente se ha decidido utilizar el método
RSSI (Received Signal Strength Indicator), basado en el modelo de la pérdida de la señal en
el camino, que se produce de manera exponencial durante la transmisión. [BP00]
Para ello, los nodos de referencia ofrecen un identificador unívoco. Como solución al
problema del multipath y basándose en este identificador unívoco, se usa la fuerza de la
señal recibida o RSS en tiempo real para localizar la posición del usuario o nodo móvil,
haciendo uso de un sistema de posicionamiento [DC11] que permita consultar las posibles
posiciones del nodo móvil según la fuerza de señal que obtiene de los distintos nodos de
referencia. Este sistema de posicionamiento contendrá las coordenadas de los distintos nodos
de referencia junto con la fuerza de señal que llega a las distintas coordenadas de la superficie
comercial.
Los motivos que inducen al uso de esta técnica son dos:
No se puede usar un posicionamiento basado en un solo nodo, ya que hay una alta
probabilidad de que el nodo móvil este a una posición equidistante a varios nodos de
referencia.
Un promedio de las coordenadas de los nodos de referencia dará una estimación mas
cercana a la ubicación real del usuario que utilizando un único nodo de referencia.
49
4.4 Gestión y Almacenamiento
Al tratarse de una aplicación para realizar la lista de la compra, la app debe contener
dos funcionalidad básicas, la primera de ellas que muestre un catálogo de productos donde
el usuario pueda escoger y una segunda funcionalidad básica que le permita crear una lista
donde añadir los productos escogidos. Estas funcionalidades implican que la aplicación debe
de tener datos que presentar y datos que almacenar.
iOS ofrece diversos modos de llevar esto a cabo. Se pueden guardar los objetos sin procesar en un archivo y traducirlos junto con sus relaciones a XML o crear una base de datos
SQLite.
Con independencia del sistema que se utilice, se pueden escribir muchas rutinas para guardar, leer, encontrar, eliminar o actualizar una lista o producto. Con esta base de datos se
gestiona lo principal pero aún se tiene que llevar a cabo trabajo adicional, como definir el
modelo de datos SQL o diseñar y escribir consultas SQL.
Core Data, la tecnología de almacenamiento de iOS, es un framework de persistencia
avanzada que realiza gran parte de este trabajo de forma automática. Core Data no es una
simple base de datos, sino mucho más. Incluye muchos comportamientos típicos de un ORM
(Object-Relational Mapping) que se encarga de la transformación de las tablas de una base de
datos, en una serie de entidades que simplifiquen las tareas básicas de acceso a los datos para
el programador, así como otras muchas funcionalidades como pueden ser ordenar, filtrar,
e incluso a una clase especial diseñada para trabajar con vistas de tabla, como es el caso
del presente sistema, que a la hora de mostrar el catálogo de productos o las listas trabaja
constantemente con vistas de tabla.
El trabajo con Core Data dentro del presente Trabajo Fin de Grado se va a apoyar principalmente en tres conceptos:
Modelado de datos
Guardar información
Recuperar información
Apple recomienda la arquitectura MVC para integrar Core Data, la cual se concentra en
la capa “Modelo”, por lo que Core Data se encontrará en la capa modelo de cada una de las
vistas. Al igual que en la mayoría de bases de datos, la parte que gestiona los datos de Core
Data se divide en tres capas principales:
El lugar en el que se almacenan los datos
El formato de los mismos
Un entorno de acceso a ellos
Los datos se guardan en los almacenes, y puede haber más de uno. El formato de los
50
datos se especifica con un modelo de objeto gestionado y el acceso se produce a través de un
contexto de objeto gestionado. Podría haber varios contextos activos al mismo tiempo. Las
clases correspondientes son las siguientes:
NSPersistentStoreCoordinator: Coordina todos los almacenes utilizados para los datos. Para iOS suele haber un solo almacén en el dispositivo.
NSManagedObjectModel: Describe todos los tipos de objetos de datos que se utilizan en las aplicaciones.
NSManagedObjectContext: Es un gestor para un conjunto de objetos de datos. El
contexto incluye las reglas que se usan para encontrar elementos de datos reales en los
almacenes, algunos de estos elementos y su estado actual. Es posible tener múltiples
contextos activos al mismo tiempo, con los mismos objetos en diferentes estados en
cada uno. Los contextos vuelven a escribir los elementos en el almacén solo cuando se
guardan.
Con la intención de posibilitar la mejora del sistema en un futuro e integrar un servidor
desde el que se puedan descargar y actualizar los datos, se ha decidido preparar la arquitectura para permitir añadir una base de datos externa al sistema para captar los datos e incluirlos
dentro de un array de la misma manera que si se captaran los datos de un servidor, para
posteriormente añadirlos a la tecnología de almacenamiento de iOS, Core Data. Por lo tanto
habría dos partes bien diferenciadas:
Recuperación de datos externos
Uso de Core Data en la app
4.4.1
Recuperación de datos externos
Lo que se quiere conseguir en este apartado es acceder a la base de datos externa SQLite
para extraer todos los datos y posteriormente crear una base de datos interna en iOS mediante
el uso de la tecnología Core Data para añadir todos los datos extraídos.
En primer lugar se utiliza un editor visual para definir el modelo, que es un conjunto de
objetos que representan los datos y las relaciones entre ellos, para la base de datos de Core
Data, como muestra la Figura 4.4.
El modelo de base de datos de Core Data presentado en la figura anterior se traduce en el
diagrama entidad-interrelación de la Figura 4.5
Al tratarse de una relación de cardinalidad (n, n), además de las dos entidades que se
pueden observar se hace necesario crear una tercera tabla que modelará dicha relación estableciendo la existencia de un producto en una lista, junto con el numero de unidades de
dicho producto que se desea adquirir. Esto se traduciría en el modelo relacional del Listado
4.1.
51
Figura 4.4: Modelo Base de Datos
Figura 4.5: Diagrama entidad-interrelación
SShoppingList (index, name)
SProduct (name, category, cost, image, position, orientation)
SProductInList (index, name, units)
SProductInList.index --> SShoppingList.index
SProductinList.name --> SProduct.name
Listado 4.1: Modelo relacional
52
A continuación se crean los constructores de las distintas entidades que aparezcan en la
base de datos del sistema. Una entidad describe las partes de un elemento: los nombres de
los atributos, los tipos de atributo y cualquier otra propiedad especial que permita manejar la
interacción con la base de datos externa.
Los elementos SProduct y SShoppingList corresponden a entidades de la base de datos
interna de iOS.
El siguiente paso ha sido garantizar que la base de datos tenga una instancia y un único
punto de acceso global mediante el patrón de diseño singleton, el cual está diseñado para
restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único
objeto.
Una vez inicializada la instancia de la base de datos, se construye una ruta al fichero de la
base de datos para acceder a ella.
Comprometido con el objetivo de mejorar el sistema en un futuro y añadir una base de
datos remota con los productos, se ha simulado una comprobación inicial encargada de registrar los posibles cambios en los productos como puede ser el precio o la ubicación. Al
usarse una base de datos externa que no va a ser alterada, los productos añadidos a la tecnología de almacenamiento de iOS no van a cambiar y por lo tanto una vez que se realice
el tránsito de datos de una base de datos a otra, no es necesario volver a repetir toda esta
operación. Por lo tanto la comprobación inicial se trata de confirmar si es la primera vez que
se inicia el sistema.
Cada aplicación tiene un sistema de almacenamiento por defecto para cada usuario llamado User Default System (ahora UDS), el cual está compuesto por una base de datos en la que,
a través de unos parámetros y métodos, se pueden almacenar y recuperar ciertos valores, que
suelen ser pequeñas cantidades de datos que se usan comúnmente en la aplicación. A estos
valores por defecto se les llama: preferencias del usuario. Por ejemplo, recordar la última
vez que se inició la app, mostrar alarmas en intervalos de tiempo elegidos por el usuario
o permitirle a los usuarios elegir cuán periódicamente sincronizar ciertos datos con iCloud,
almacenando dichos valores en el UDS y recuperandolos al inicio de la aplicación.
La clase NSUserDefaults permite interactuar con el UDS, proveyendo diversos métodos
para guardar y recuperar datos desde esta base de datos por defecto.
Se quiere comprobar si es la primera vez que se inicia el sistema, por lo que al iniciar el
sistema se realiza una llamada al sistema de almacenamiento UDS, comprobando si es así.
En el caso de que la contestación sea positiva se abrirá la ruta construida, y una habilitado el
acceso a la base de datos externa se procede a recuperar todos los datos. Una vez recuperados
los datos, se actualizan las preferencias de usuario indicando que ya no es la primera vez que
se inicia la app. El siguiente paso sería añadir los distintos productos de la base de datos
externa, a la base de datos interna de iOS. En caso contrario este se omite y se continúa con
53
la ejecución de la app, ya que contiene todos los datos necesarios.
4.4.2
Uso de Core Data
Antes de poder usar los datos, se debe inicializar Core Data para la app y por tanto los
objetos para cada una de las partes que componen Core Data: NSPersistentStoreCoordinator,
NSManagedObjectModel, NSManagedObjectContext.
El código para el uso de la tecnología Core Data se añade a la clase AppDelegate, ya que es
la encargada de “escuchar y reaccionar” ante cualquier cambio de estado de la aplicación.
Una vez inicializada la tecnología Core Data, definido el modelo de la base de datos e
implementados los constructores de las entidades que aparecen sólo queda añadir el código
para acceder, crear, eliminar y actualizar los datos dentro del sistema.
Dentro de la app se presentan distintas vistas donde es necesario hacer uso de las funcionalidades que ofrece Core Data. Todas y cada una de las vistas siguen el patrón MVC, por lo
que será el controlador de cada vista el encargado de realizar una petición a su modelo, donde se encuentra implementada la tecnología Core Data. A continuación se van a comentar
las distintas acciones que se realizan haciendo uso de la tecnología Core Data:
Acceder a los datos a través del contexto de objeto gestionado.
Permitir a Core Data la adición y eliminación de productos a una lista.
Permitir a Core Data la adición y eliminación de listas.
Acceder a los datos a través del contexto de objeto gestionado
Permitir a Core Data la adición y eliminación de productos a una lista.
Todas las vistas que hacen uso de la tecnología Core Data tienen vista de tabla y trabajan
con las entidades: SProduct y SShoppingList, por lo que es imprescindible acceder a la base
de datos para consultar los datos que se deben mostrar al usuario.
Lo primero que requiere la vista con la que se esté trabajando es una referencia al contexto
de objeto gestionado.
A continuación, en el Listado 4.2 se define el contenido de un array con los objetos actuales
de la entidad con la que se va a trabajar, en este caso SProduct. En primer lugar, para obtener
los datos del contexto de objeto gestionado es preciso describir los datos que se desean
en una solicitud de recuperación (o FetchRequest). Esto es tan sencillo como especificar
todos los objetos de un tipo de entidad determinado, o tan complejo como un filtro y una
clasificación.
La solicitud se utiliza como parte de executeFetchRequest:error:, un método NSManagedObjectContext para recuperar un array de objetos de datos gestionados. Se usa el mismo
54
método para obtener un conjunto de datos actualizados siempre que hay un cambio, como
añadir o eliminar algún objeto. Como el array de productos se actualiza con diversos métodos en el controlador de tabla de productos, la solicitud de recuperación es otra variable de
instancia.
NSError *error = nil;
fetchRequest = [NSFetchRequest fetchrequestWithEntityName: "SProduct"];
arrayOfProdcuts = [managedContextObject executeFetchRequest: fetchRequest error:&error];
if (error != nil){
NSLog("Unresolved error %, %", error, [error userInfo]);
abort();
}
Listado 4.2: Actualización del contenido del array
En el anterior listado ocurre lo siguiente:
Se configura la solicitud de recuperación para buscar todas las entidades de clase SProduct.
Se establece el array de productos con todos los objetos gestionados en el contexto que
cumplen con los criterios de la solicitud, en este caso, todos los productos.
Si ocurre un error al leer los objetos, se queda registrado en un archivo para informar
al usuario de lo que ocurre y lo que debe intentar.
La llamada a abort() proviene de la plantilla proporcionada por el sistema. Lo único
que hace es crear un registro de fallos y cerrar la app.
Cada vez que se modifica un dato se genera un array nuevo. Esto funciona bien porque no
hay muchos datos. Sin embargo a medida que el número de productos crece surgen problemas de rendimiento y posiblemente también de memoria. Además se necesita gran cantidad
de código, porque si el contexto del objeto gestionado es encargado de generar el array, debe
poseer información sobre la cantidad de productos incluidos y el orden en el que aparecen
haciendo necesario tener código para calcular el número de productos, de secciones y de filas
en una sección que va a poseer la tabla de la vista con la que se está trabajando, además de
actualizar la tabla basándose en los cambios en los datos. En lugar de escribir todo este código, el sistema proporciona NSFetchedResultsController y los protocolos asociados. Están
diseñados para facilitar la gestión de las tablas con objetos basados en Core Data haciendo
lo siguiente:
Configurar la sección y el número de filas de una tabla.
Obtener el dato representado por una ruta índice.
55
Devolver títulos de encabezado de sección.
Registrar cambios en el contexto de objeto gestionado y posibilitar actualizaciones de
tabla mediante un protocolo delegado.
Recuperar datos en grupos y en modo opcional almacenar datos en un archivo para
mejorar el rendimiento.
Se va a transformar la tabla de productos para utilizar un controlador de resultados recuperados para el control básico de la tabla y la presentación. A continuación se añadirán
secciones y ordenación.
Lo primero que se necesita es una variable de instancia que contenga el controlador de
resultados recuperados:
NSFetchedResultsController * fetchedResultsController
A continuación, como muestra el Listado 4.3, se inicializa el controlador de resultados
recuperados, configurando una solicitud de recuperación adecuada, ya que NSFetchedResultsController asocia el resultado de aplicar una solicitud de recuperación a un contexto de
objeto gestionado.
En el listado 4.3 anteriormente referido se utiliza un simple NSFetchRequest para devolver todas las entidades de SProduct, sin embargo el controlador de resultados recuperados
requiere al menos un filtro y una ordenación. El filtro puede ser nulo, pero para ordenar es
necesario especificar un criterio como mínimo.
- (void)fetchCatalogProduct {
NSError *error = nil;
self.fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"SProduct"];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"category"
ascending:YES];
[self.fetchRequest setSortDescriptors:[sortDescriptor]];
self.fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:self.fetchRequest
managedObjectContext:self.managedContextObject
sectionNameKeyPath:@"category"
cacheName:nil];
self.fetchedResultsController.delegate = self;
56
[self.fetchedResultsController performFetch:&error];
if (error != nil) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self.myDelegate
productCatalogControllerModel: self.fetchedResultsController];
}
Listado 4.3: Solicitud de recuperación de datos
En el anterior listado ocurre lo siguiente:
Se configura una ordenación sencilla en función de la categoría del producto.
Se definen los descriptores correspondientes de la solicitud de recuperación con el
criterio de ordenación nuevo.
Se inicializa el controlador de resultados recuperados usando la solicitud de recuperación recién asignada y el contexto de objeto gestionado del delegado de la aplicación.
Se indica al controlador que lea el conjunto inicial de datos y gestione cualquier error
que pueda ocurrir.
Se avisa al delegado, que corresponde a la vista, para que se encargue de actualizar la
variable de instancia que contiene el controlador de resultados recuperados, con el que
se trabaja en las vistas de tabla para mostrar los datos al usuario.
Cada vez que se actualizan los datos del contexto de objeto gestionado añadiendo, eliminando o modificando alguno, se envía performFetch al controlador de resultados recuperados. La llamada resulta en más trabajo en términos de procesamiento que si sólo se
actualizaran los datos modificados.
El controlador de resultados recuperados tiene la capacidad de observar cambios en el
contexto de objeto gestionado y de invocar métodos cuando ocurren estos cambios. Tan sólo
es necesario ofrecer soporte al protocolo NSFetchedResultsControllerDelegate y por tanto
modificar la declaración del protocolo añadiendo NSFetchedResultsControllerDelegate
@interface ProductCatalogTableViewController : UITableViewController
<NSFetchedResultsControllerDelegate >
A continuación se define ProductCatalogTableViewController como delegado del controlador de resultados recuperados:
self.fetchedResultsController.delegate = self;
57
Una vez definido ProductCatalogTableViewController como delegado del controlador de
resultados recuperados, éste le envía mensajes siempre que ocurre un cambio en el contexto
de objeto gestionado mediante tres llamadas que se encargan de facilitar la gestión de las
actualizaciones de la tabla:
controllerWillChangeContent: Se invoca cuando parte del contenido va a cambiar
pero antes de que se modifiquen los resultados recuperados.
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
Listado 4.4: Solicitud de recuperación de datos controllerWillChangeContent:
controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: Se invoca una vez completado el cambio y actualizados los resultados recuperados. El mensaje se envía una vez con cada cambio y se podría invocar varias veces entre llamadas
a controllerWillChangeContent: y controllerDidChangeContent:
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
//Se determina que tipo de actualizacion hacer en base al tipo de modificacion
switch(type) {
//Cuando se inserta un objeto nuevo, se inserta tambien una celda en el lugar apropiado de
la tabla
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:
UITableViewRowAnimationFade];
break;
//Se elimina un objeto, por tanto, se borra la celda correspondiente
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:
UITableViewRowAnimationFade];
break;
//Se cambia o se actualiza un objeto. Se actualiza la celda que representa los datos
case NSFetchedResultsChangeUpdate:
//code to update the content of the cell at indexPath
break;
//Se traslada la celda de datos de un lugar a otro de la tabla
58
//Se elimina la celda antigua e inserta una nueva
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:
UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:
UITableViewRowAnimationFade];
break;
}
}
Listado 4.5: Solicitud de recuperación de datos forChangeType:newIndexPath:
controllerDidChangeContent: Se invoca una vez completados los cambios y actualizados los resultados recuperados.
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
Listado 4.6: Solicitud de recuperación de datos controllerDidChangeContent:
Permitir a Core Data la adición y eliminación de productos a una lista
La mejor acción sobre la vista que permite añadir o eliminar un producto de la lista consiste en seleccionar la celda del producto y si aparece un tick verde quiere decir que la lista
contiene el producto, mientras que si aparece un tick gris quiere decir que la lista no contiene
ese producto. Al estar trabajando sobre una lista que puede contener o no los productos seleccionados se debe comprobar si el producto aparece en la lista antes de tomar una decisión.
Para ello, lo primero es acceder a los datos a través del contexto de objeto gestionado y a
continuación comprobar si el producto que ha seleccionado el usuario aparece en la lista.
En el caso de que el producto aparezca en la lista, se elimina de la lista, mientras que en
caso contrario se añadiría. Seguidamente se actualiza la lista con la que se trabaja, se guarda
la nueva lista en el contexto actual de objeto gestionado, se modifica la celda para cambiar
la imagen del tick y finalmente se avisa al delegado, que corresponde a la vista, para que
se encargue de actualizar la variable de instancia que contiene el controlador de resultados
recuperados con el que se trabaja en las vistas de tabla para mostrar los datos al usuario.
- (void)selectCell:(AddProductTableViewCell *)selectedCell
shoppingListToView:(SShoppingList *)shoppingListToView{
NSError *error = nil;
59
//Se pasa nuestra lista de productos y el nombre de la celda seleccionada
BOOL appear = [self sameObject:selectedCell.title.text];
int index = [self findName:selectedCell.title.text];
if(appear){
NSLog(@"Elemento Repetido");
NSLog(@"Se elimina de la lista: %@",[self.arrayOfProducts[index] name]);
[shoppingListToView removeProductObject:self.arrayOfProducts[index]];
}
//Sino aparece seleccionada, se selecciona y se incorpora a nuestra lista de productos
else{
NSLog(@"Elemento No Repetido");
NSLog(@"Se incorpora a la lista: %",[self.arrayOfProducts[index] name]);
[shoppingListToView addProductObject:self.arrayOfProducts[index]];
}
//Actualizamos los productos de nuestra lista
[self updateListProducts:shoppingListToView];
//Guardamos el resultado
[self.managedContextObject save:&error];
[self.fetchedResultsController performFetch:&error];
//Modificamos la Celda
[selectedCell modifyImageCell];
[self.myDelegate
addProductControllerModel: self.fetchedResultsController];
}
Listado 4.7: Solicitud de recuperación de datos de la capa de vista
En el Listado 4.7 ocurre lo siguiente:
Se comprueba si el producto existe en la lista.
Si existe en la lista, se borra de la lista.
Si no existe, se añade a la lista.
Se actualiza la lista con la que se trabaja.
Se guarda la nueva lista en el contexto actual de objeto gestionado.
Se indica al controlador de resultados que lea el conjunto inicial de datos y gestione
cualquier error que pueda ocurrir.
Se modifica la celda para cambiar la imagen del tick.
60
Se avisa al delegado, que corresponde a la vista para que se encargue de actualizar la
variable de instancia que contiene el controlador de resultados recuperados con el que
se trabaja en las vistas de tabla para mostrar los datos al usuario.
Permitir a Core Data la adición y eliminación de listas
La creación y adición de nuevas listas se realiza de manera análoga a la creación y eliminación de listas. Los pasos que se deben seguir para la creación de una nueva lista serían los
siguientes:
Se crea una lista nueva en el contexto actual de objeto gestionado
Se inicializan los atributos de la nueva lista
Se guarda la nueva lista en el contexto actual de objeto gestionado
Se indica al controlador de resultados que lea el conjunto inicial de datos y gestione
cualquier error que pueda ocurrir.
Se avisa al delegado, que corresponde a la vista, para que se encargue de actualizar la
variable de instancia que contiene el controlador de resultados recuperados con el que
se trabaja en las vistas de tabla para mostrar los datos al usuario.
En el caso de que se quiera borrar la lista, se realiza lo siguiente:
Se indica al contexto de objeto gestionado que elimine el objeto SShopingList con el
índice perteneciente a la celda que se ha seleccionado.
Se indica al controlador de resultados que lea el conjunto inicial de datos y gestione
cualquier error que pueda ocurrir.
Se avisa al delegado, que corresponde a la vista, para que se encargue de actualizar la
variable de instancia que contiene el controlador de resultados recuperados con el que
se trabaja en las vistas de tabla para mostrar los datos al usuario.
4.5 Ubicación y Guiado
Se encarga de guiar al usuario mediante el estudio de la señal. Para calcular la posición
del usuario, se basa en la señal recibida como se ha comentado anteriormente.
Sin embargo uno de los grandes problemas es la fluctuación de la potencia de la señal
producida por diferentes motivos como pueden ser la Reflexión, la Refracción, la Difracción
el Scattering y el Multitrayecto, incidiendo directamente en la perdida de precisión en la
localización. Es por ello que la parte de Ubicación y Guiado se ha desarrollado siguiendo
una arquitectura modular, en la que cada módulo desempeña un papel fundamental en la
localización del usuario.
61
El módulo de comunicaciones será el encargado de recibir el flujo de datos y procesarlos
para convertirlos en información válida. Con estos datos y para eliminar el ruido que pueda
ocasionarse, todas las señales se pasarán por un filtro que permita eliminar el ruido. Este
filtro debe hacer distinción entre las señales de los distintos dispositivos, por lo que antes
de pasar el filtro las señales deben ser tratados en un módulo de tratamiento de señal. En
dicho módulo serán almacenadas en un buffer y a continuación de manera paralela mediante
el uso de hilos para evitar los cuellos de botella cada uno de los buffer pertenecientes a los
distintos dispositivos será procesado por el módulo de filtrado de señal que se encargar de
eliminar el ruido y determinar cuál es la intensidad de señal. Una vez calculada la intensidad
de señal de cada dispositivo se pasará al módulo de posicionamiento que determinará en
función de las señales previamente calculadas la posición del usuario. Una vez calculada
la posición del usuario, si es la primera vez que se genera una posición y por tanto no hay
ruta establecida, se genera una nueva ruta. Si por el contrario ya hay una ruta establecida
se comprueba la posición que tiene el usuario y la que debería tener. En el caso de que sea
correcta la posición del usuario, se mantiene la ruta y se dan ordenes mediante voz a través
del submódulo de Guiado, en caso contrario se genera una ruta nueva con el punto de origen
en el que se encuentra el usuario y se vuelve a guiar al usuario a través del submódulo de
Guiado. Toda esta información pasará a la capa de controladores, que será la encargada de
notificarlo al usuario.
4.5.1
Módulo de Comunicaciones
El módulo de comunicaciones es el encargado de recibir el flujo de datos proveniente de
los recursos hardware iBeacon. Su función será encargarse de la comunnicación con los dispositivos, recibir los datos de entrada, procesarlos y convertirlos en información válida.
Es necesario controlar esa comunicación y administrar los datos que se reciben. Por lo
tanto ha de asegurarse la recepción de los datos y, para tratar los casos de diferencia entre frecuencia de recepción de datos y frecuencia de uso de esos datos, algún sistema de
almacenamiento intermedio.
Para proporcionar la funcionalidad descrita se han diseñado los siguientes submódulos:
Un primer submódulo encargado de leer de forma asíncrona todos los datos de entrada.
Un segundo submódulo encargado de procesar los datos de entrada para convertirlos
en información válida.
Un tercer submódulo encargado de recoger los datos ya procesados del segundo módulo y almacenarlos en un buffer intermedio entre el nivel de comunicaciones y el nivel
de tratamiento de señal.
De esa manera, teniendo una entrada de datos irregular, se puede dar una salida de datos
más uniforme. Gráficamente, la descripción funcional del nivel de comunicaciones es la
62
mostrada en la Figura 4.6.
Figura 4.6: Descripción Funcional del módulo de Comunicaciones
Aunque los dispositivos Bluetooth llevan a cabo una transmisión periódica con una frecuencia casi constante de datos sin establecer conexión con otros dispositivos, esta transmisión puede sufrir pequeñas variaciones debido a retardos aleatorios de 10ms en cada pulso
para evitar interferencias entre varios iBeacon situados en el mismo entorno y por tanto una
entrada irregular de trama de datos o Payload Data Unit (PDU). Estas tramas se leerán de
forma asíncrona sin bloquear la entrada de datos, se procesarán los datos para convertirla en
información válida y finalmente pasarán al submodulo de almacenamiento hasta que transcurra un tiempo determinado y se proporcionen los datos almacenados en ese lapso al siguiente
nivel.
La salida del módulo es regular debido a que el submódulo de almacenamiento informa
al nivel de tratamiento de señal con cierta frecuencia, una frecuencia menor que el pulso del
dispositivo Bluetooth de manera que sólo mande una trama por cada dispositivo localizado
en el recinto, aunque la cantidad de señales que pueda mandar en un instante de tiempo no
sea la misma, ya que eso dependerá de la cantidad de dispositivos que se reconozcan en ese
determinado instante y por lo tanto la distancia a la que se encuentren.
En cuanto a la dependencia con otros módulos, al ser el módulo de menor nivel, no tiene
tales dependencias. Es en la salida donde presenta interacción con el módulo de tratamiento
de señal, ya que se encarga de proporcionarle un flujo de tramas que éste tiene la responsaibilidad de convertir en información válida para calcular la posición del usuario.
Solución
El objetivo buscado es que el módulo de Comunicaciones sea capaz de administrar los
datos que se reciben de una forma eficiente y robusta. Además debe establecer un almacenamiento adecuado y óptimo para proporcionar al módulo de tratamiento de señal una entrada
consistente y constante. Para ello, se establecen una serie de características u objetivos de
desarrollo:
63
Se deben leer los datos de forma asíncrona.
Se debe procesar la lectura y convertirla en información válida
Finalmente almacenar toda la información valida en un array que valga de entrada a el
módulo de tratamiento de señal.
Antes de comenzar con la resolución del problema se debe saber cómo está formada la trama
y es por ello que se va a comentar la estructura de cada una de las tramas emitidas por los
distintos dispositivos mediante su representación gráfica como muestra la Figura 4.7.
Figura 4.7: Estructura de una trama de un iBeacon sobre BLE.
Código de Sincronización: Tiempo que utiliza el iBeacon para transmitir, utilizado por
el dispositivo receptor para referenciar la recepción de la señal.
Dirección de Acceso: contiene dos tipos de datos:
Datos Fijos y preestablecidos: Encargados de referenciar el canal estándar utilizado
para comunicaciones Low Energy.
Datos Variables del canal: Utilizado por el iBeacon para realizar conexiones.
Carga útil: Se trata de la parte que incluye lo necesario para que los dispositivos receptores puedan realizar las diferentes acciones como pueden ser la localización e identificación del iBeacon. Para ello se utilizan diferentes campos que son explicados a continuación
[Org].
Cabecera: Indica que se trata de una transmisión en modo broadcast y además informa
de la cantidad de datos que se transmitirán posteriormente.
AD Address: Indica la dirección MAC del iBeacon y datos específicos del generador
de la notificación (empresa, organismo...) [Blu].
AD Structure: Está subdividido en AD type, que indica el tipo de datos a transmitir,
AD length, que indica la longitud de los datos transmitidos y AD data, que codifica la
notificación que se quiere transmitir.
64
UUID: Se trata de un identificador estándar (norma ISO / IEC11578 [14]) único y
universal utilizado en entornos de computación distribuida (no necesita coordinación
central). Aparece generalmente representado por 32 dígitos hexadecimales de la siguiente forma [8-4-4-4-12], por ejemplo: 2150d9400-f21b-51e4-b256-416354530000.
Su función en un sistema iBeacon es identificar a todas las balizas pertenecientes a un
mismo grupo.
Major: Especifica un subgrupo de balizas dentro de un grupo principal.
Minor: Identifica a una baliza dentro de un subgrupo
Tx Power: Indicador de potencia de transmisión del iBeacon (teórica) a un metro de
distancia medida en dBm.
CRC: Por último la verificación de la trama de datos con un código de detección basado
en CRC (Cyclic Redundancy Check). Dentro de esta trama están todos lo datos necesarios
para calcular la posición del usuario utilizando las técnicas que se basan en la atenuación de
la señal (RSS). Esta técnica denominada posicionamiento por proximidad, esta basada en el
cálculo de la distancia de un iBeacon a partir de la potencia de la señal recibida (RSS).
La distancia estimada por una baliza se basa en la relación entre la potencia de la señal
recibida (RSS) por el dispositivo que capta la señal y la potencia calibrada (Tx Power) de la
baliza, obteniendo como resultado el RSSI (Received Signal Strength Indicator) que toma la
siguiente expresión:
RSSI[dBm] = −(10 ∗ n)log10 (d)A
(4.1)
Siendo:
n = constante de pérdidas por propagación. Toma valores entre 2.7 y 4. Para propagación en el vacío, n= 2.
d = distancia entre emisor y receptor en metros.
A = Tx power medida en dBm.
Despejando el valor d de la expresión 4.1, se obtiene la distancia relativa entre el emisor
y receptor. La precisión en la posición dependerá por tanto de la potencia de señal recibida
(RSS) y el valor de la potencia calibrada (Tx Power), por lo que es necesario una correcta
calibración previa del iBeacon para tener ajustado el valor Tx Power.
Un beacon no tiene aplicación por sí mismo, simplemente es un periférico que emite
ondas de baja frecuencia de forma continua, cuyo único propósito es avisar de su presencia
haciendo que cualquier otro objeto pueda ser localizado de forma sencilla.
Se podría colocar un beacon en cualquier lugar alrededor del que se que se quisiera registrar un contexto, notificando a su app pertinente solamente cuando se esté cerca de ese lugar,
65
es decir, cuando es relevante. Esa app debe ser capaz de entender la señal y actuar en función
de su contexto.
Cada iBeacon lleva asociada información unívoca en cada trama:
UUID
Major
Minor
El UUID se encarga de identificar todos los ibeacons que se van a utilizar y el major
y el minor se encargan de identificar areas concretas. Adaptando este concepto al uso del
presente trabajo, el UUID se encargaría de identificar la cadena de supermercados, el major
podría identificar la tienda física y el minor se encargaría de identificar áreas concretas de la
tienda física como puede ser la caja o cualquier sección del establecimiento.
Al trabajar dentro de un área concreta, no es necesario utilizar los tres identificadores de
los iBeacons, sino que bastaría con el UUID que identifique la región en la que se trabaja y
cualquiera de los identificadores que se refieren a secciones concretas. De manera indiferente
se ha optado por utilizar el major.
Al usar tres dispositivos iBeacon hay que saber a cuál hace referencia la señal que se capta
y es por ello que se hizo una prueba inicial para identificar el major de cada dispositivo. La
prueba consistió en colocar cada uno de los iBeacon cerca del nodo móvil para saber cuál
de ellos llega con más frecuencia, procesar la información e identificar el major para acto
seguido referenciar cada uno de los major a cada dispositivo iBeacon.
Como se ha comentado anteriormente, una vez identificado el major de cada dispositivo
se referencia para poder trabajar con ellos:
static const unsigned short greenBeacon = 62264;
static const unsigned short purpleBeacon = 52895;
static const unsigned short blueBeacon = 30039;
Listado 4.8: Identificación y Registro del major de cada dispositivo
Se debe tener en cuenta que los iBeacons no tienen un centro geográfico (ni un radio como
tal).
Aquí las regiones las definen los beacons, por lo que se tiene que registrar el id de región
con el que se va a trabajar y el UUID. Cuando el sistema detecte un iBeacon le preguntará
por el nombre de su región que, se habrá establecido con anterioridad y si resulta que se
encuentra dentro de la establecida, la app se limitará a escuchar/monitorizar las balizas que
se detecten (quedándose con la más cercana) y a procesarlas según las variables vistas antes:
el proximity UUID, el major y el minor. Por lo tanto el siguiente paso es definir el UUID y
la región en la que se va a trabajar:
66
static NSString * const kUUID = @"B9407F30-F5F8-466E-AFF9-25556B57FE6D";
static NSString * const kIdentifier = @"LabMami";
Listado 4.9: Definir el UUID y región con los que se va a trabajar
Una vez definida la región e identificados los valores de cada iBeacon se procede a localizar las balizas monitorizando la región establecida.
Siguiendo los puntos de desarrollo que se han establecido al principio, se necesita comenzar a leer las tramas de forma asíncrona. Para ello iOS proporciona el framework Core
Location, que se encarga de la comunicación con los distintos dispositivos iBeacon de forma
transparente al desarrollador. También proporciona los mecanismos necesarios para procesar
la lectura y convertirla en información válida a la par que la almacena.
Para ello lo primero que se debe hacer es añadir el framework Core Location y añadir el
protocolo asociado <CLLocationManagerDelegate> a la cabecera de la vista en la que va a
ser utilizado.
El siguiente paso es definir una región en CoreLocation. Para ello de manera transparente
al desarrollador se realiza una llamada al método delegado registerBeaconRegionWithUUID:
andIdentifier:, a la hora de definir la región como muestra el Listado 4.3
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID identifier:
kIdentifier];
[self.locationManager startMonitoringForRegion:self.beaconRegion];
Listado 4.10: Identificación y Registro del major de cada dispositivo
Este método delegado será el encargado de registrar la región en la que se encuentran los
dispositivos iBeacons con los que se va a trabajar.
Una vez registrada la región, se procede a monitorizarla en busca de regiones que contengan su identificador y el UUID de los beacons que se emplean.
El siguiente paso es detectar cuándo se encuentra dentro de la región con el método delegado locationManager: didDetermineState: forRegion:. Este método delegado será el encargado de notificar que el dispositivo se encuentra dentro de una región.
Una vez localizada la región en la que se encuentran los iBeacons, el siguiente paso es
detectarlos implementando el método locationManager: didRangeBeacons: inRegion: que
será el encargado de avisar cuando haya iBeacons en las cercanías y devolverá un array de
todos ellos, en orden de cercanía (el primero será el que esté más cerca).
Como conclusión a la solución, se presenta un diagrama de secuencia correspondiente a
la Figura 4.8
67
Figura 4.8: Diagrama de Secuencia del Módulo de Comunicaciones
4.5.2
Módulo de Tratamiento de Señal
Este modúlo tiene como función recibir el flujo de datos, procesado y convertido en información válida con la que se pueda tratar proveniente del módulo de comunicaciones y
tratarlo haciendo una distinción según el dispositivo del que llega la señal, para a continuación almacenarlo en un buffer correspondiente a cada dispositivo.
Para desempeñar estas funciones se han diseñado los siguientes submódulos:
Un primer submódulo encargado de leer los datos de entrada pertenecientes a las señales procesadas del módulo de comunicaciones y hacer una distinción, clasificando
las distintas señales segun el dispositivo del que procedan.
Un segundo submódulo encargado de recoger los datos ya procesados y almacenarlos
en el buffer perteneciente al dispositivo al que pertence la señal.
Gráficamente, la descripción funcional del nivel de tratamiento de señal es la mostrada en
la Figura 4.9
Cuando el sistema informe mediante el método delegado locationManager: didRangeBeacons: inRegion: de la llegada de señales procedentes de iBeacons en las cercanías, con un
array con todas las señales, se procesará ese array para distinguir las señales de los distintos dispositivos y clasificarlas en los buffer pertenecientes a cada dispositivo iBeacon. Una
vez clasificados y rellenados los buffer de cada dispositivo se pasarán a la capa superior, al
modulo de Filtrado de Señal.
Este módulo se relaciona por debajo con el módulo de Comunicaciones, del que obtiene
las distintas señales y, al producir la salida con el módulo de Filtrado de señal, al que manda los distintos buffer, pertenecientes a cada dispositivo, albergando señales del dispositivo
tratado.
Este módulo planteó un problema a la hora de determinar la cantidad de muestras que
68
Figura 4.9: Descripción Funcional del módulo de Tratamiento de Señal
debía tener para poder procesarlas en el módulo de Filtrado de Señal, ya que si la muestra
era demasiado corta, el filtro sería ineficiente y, si por el contrario, la muestra es demasiado
grande, la aplicación se quedaría congelada esperando a conseguir ese numero suficiente de
señales en cada unos de los buffer de cada dispositivo, antes de poder pasar la información
al módulo de Filtrado de señal.
Otro problema que surgió y no se había tenido en cuenta fue la frecuencia con la se consultaba si había señales, ya que si la frecuencia era demasiado baja, el usuario podría moverse
suficientes metros como para estar en una sección diferente y la aplicación seguiría teniendo
las localizaciones anteriores.
De la misma manera que se puede modificar la frecuencia con la que se preguntan por nuevas señales, se procede a la búsqueda de referencias e información acerca de la posibilidad
de configurar la frecuencia de emisión de señales en dispositivos iBeacon.
Solución
A la hora de determinar la cantidad de muestras que debía tener cada uno de los buffer de
almacenamiento de cada dispositivo se realizaron varias pruebas, obteniendo como conclusión que una cantidad de 10 muestras es idónea, ya que según las pruebas entre 6 y 7 de cada
10 señales son correctas y por lo tanto permite pasarle el filtro correctamente.
El primer paso será hacer una distinción de cada una de las señales como se muestra en el
Listado 4.4
switch ([beacon.major integerValue]) {
case 62264:
//Green
69
[self addRssiBeacon:beacon to:self.greenBeaconArray color:1];
break;
case 52895:
//Purple
[self addRssiBeacon:beacon to:self.purpleBeaconArray color:2];
break;
case 30039:
//Blue
[self addRssiBeacon:beacon to:self.blueBeaconArray color:3];
break;
default:
break;
}
Listado 4.11: Distinción del tipo de señal segun el major de cada dispositivo
Una vez se tengan 10 señales de cada dispositivo se mandan al módulo de Filtrado de señal
implementando un enfoque multi-hilo que permita ejecutar el filtro de cada buffer en un hilo
de ejecución diferente, de forma que no sobrecargue el hilo principal de trabajo. Para ello
Objetive-C proporciona el uso de bloques que, se encarga de la creación y gestión de hilos
de forma transparente al desarrollador.
En el momento en el que se tengan 10 señales, siempre que llegue una nueva se borrará
la última que se encuentre en la cola y se añadirá la nueva al principio de la cola para que
de esa manera el filtro sea más eficiente. Para ello las señales deben estar en un contenedor
de tipo NSMutableArray que permite añadir y eliminar elementos en el orden que desee el
desarrollador.
El otro problema se trata de la frecuencia con la que se escanean cambios en la monitorización de regiones. iOS por defecto hace lecturas a 1Hz, es decir, una lectura por segundo
aumentando aun más la frecuencia si el usuario se mantiene en movimiento y disminuyendola cuando está quieto en contraposición al consumo de batería que aumenta cuanto mayor
es la tasa de actualización.
A la hora de buscar la frecuencia de emisión de señales idónea de los dispositivos iBeacon
de Estimote se partió del SDK de Estimote. El SDK de Estimote es un wrapper sobre Core
Location con funciones añadidas para modificar el UUID, el major, el minor, la fuerza de
la señal y la frecuencia de emisión de señales. Por lo tanto se realizó una prueba (consultar
Seción 6.2 del Capítulo 6 para mas información) con el fin de analizar cuál es el mejor valor
para la frecuencia de emisión de señales.
Esta prueba consistió en la toma de 30 medidas conjuntas de RSSI de las tres balizas
para intervalos de repetición de pulsos de 100 ms, 500 ms, 1000 ms, 1280 ms y 1500 ms,
llevando a cabo el análisis numérico y gráfico de los resultados con el fin de determinar
la mejor configuración para una señal estable, obteniéndose un intervalo de repetición de
70
pulsos de 1500 ms, ya que presentan una mayor estabilidad en la propagación con unas
estimaciones de distancias aceptables. Por lo tanto, se optó por modificar la frecuencia de
emisión de señales a 1500 ms.
Como conclusión a la solución, la Figura 4.10 muestra un diagrama de secuencia presentando el comportamiento de este módulo.
Figura 4.10: Diagrama de Secuencia del Módulo de Tratamiento de Señales
4.5.3
Módulo de Filtrado de Señal
Este módulo tiene como función recibir un array con un conjunto de señales pertenecientes
a cada uno de los dispositivos iBeacon que se utilizan para la localización del usuario y
procesar las distintas señales para eliminar las posibles fluctuaciones de señal y estimar la
señal adecuada.
Este módulo se relaciona por debajo con el módulo de Tratamiento de Señal, del que
obtiene el array de señales pertenecientes a cada uno de los beacons y al producir la salida
con el módulo de Posicionamiento, al que manda la estimación de la señal calculada.
Para desempeñar esta labor, se han diseñado dos submódulos:
Un primer submódulo encargado de la gestión y control del flujo de entrada.
Un segundo submódulo encargado de proporcionar operaciones matemáticas sobre el
array de señales que se recibe de entrada para producir la salida deseada.
Gráficamente, la descripción funcional del nivel de tratamiento de señal es la mostrada en
la Figura 4.11
La necesidad de implementar este módulo es debida a uno de los grandes problemas en un
sistema de posicionamiento, la fluctuación de la potencia de la señal [LHCGHCMHJW10].
Incluso en una localización fija, la fuerza de la señal en un punto puede presentar grandes
variaciones. Howard, Siddiqi y Sukthane [AH11] han demostrado que esta variación se
mantiene en un rango de 10 dB como muestra la Figura 4.12
71
Figura 4.11: Descripción Funcional del módulo de Filtrado de Señal
Figura 4.12: Fluctuación de la potencia de la señal
Aunque el rango teórico máximo de distancia para un iBeacon es de 70 metros en condiciones ideales, a la hora de calcular una correcta posición, hay varios factores a tener en
cuenta que afectan de manera notable a la fluctuación del RSSI. Esta fluctuación puede producirse por diferentes motivos [Gho]:
Reflexión: Cambio de dirección de la onda, que al entrar en contacto con la superficie
de separación entre dos medios diferentes, regresa al punto donde se originó.
Refracción: Cambio de dirección de la onda al pasar de un medio material a otro.
Difracción: Desviación de la onda al encontrar un obstáculo.
Dispersión(Scattering): Separación de la onda de distinta frecuencia al atravesar un
material.
Multitrayecto: Propagación de una onda por varios caminos diferentes.
Orientación relativa entre emisor/receptor.
72
Al no tenerse en cuenta estos motivos, causantes de la fluctuación de la señal en los cálculos de distancia, se ven directamente reflejados en la distancia entre emisor y receptor (d). Es
por ello que el posicionamiento del iBeacon por proximidad utiliza un sistema de referencia
relativo y centrado en el receptor estableciendo la situación en tres rangos dependiendo del
valor en el que oscila d, como se muestra en la Figura 4.13
Figura 4.13: Rangos de proximidad a un iBeacon
Estos tres rangos son:
Immediate: Rango comprendido en el intervalo 0.1 <d <1 (metros).
near: Rango comprendido en el intervalo 1 ≤ d <10 (metros).
far: Rango donde la distancia d ≥ 10 (metros).
Solución
Este problema de fluctuación de señal, que incide directamente en la pérdida de precisión
en la estimación de la localización, trata de minimizarse mediante la aplicación de un filtrado
que permita eliminar los valores extremos.
Este filtro consiste en una media móvil, es decir, un cálculo utilizado para analizar un
conjunto de datos para crear una serie de promedios. Esta media móvil se calcula para una
serie temporal con una demanda estable, de manera que permita suavizar las fluctuaciones
de plazos cortos y resalte las tendencias o ciclos de plazo largo.
En la elección de la media móvil que actúe de filtro se han considerado dos alternativas
principales: la media móvil simple y la media móvil ponderada.
73
Moving Average
La media móvil simple(Moving Average) consiste en la media aritmética de los n datos
anteriores. Haciendo uso de esta técnica se pueden dar dos casos. Si el valor de la n es
grande, mayor será la influencia de los datos antiguos, sin embargo si por el contrario el
valor de la n es baja, se tendrán en cuenta datos más recientes para la predicción. Por lo que
de acuerdo a lo enunciado anteriormente se concluye que la elección de la n influenciaría
decisivamente la predicción.
Si el valor de la n es bajo, la predicción resultante tendrá una alta capacidad para responder a fluctuaciones o variaciones de un periodo a otro, ya que la predicción será altamente
influenciada por efectos aleatorios.
Si por el contrario la n es alta, la predicción resultante tendrá una baja capacidad para
responder a fluctuaciones o variaciones de un periodo a otro, ya que se filtrará la existencia de
efectos aleatorios, debido a que la predicción tendrá en cuenta el valor de datos antiguos.
Weighted Moving Average
La simplicidad que tiene la técnica de Moving Average, debido a la consideración equitativa de datos recientes y datos antiguos, sobre todo cuando el objeto de predicción son
variables cuya variabilidad en el corto plazo es importante para obtener una predicción eficaz, hace que se tenga en cuenta otra alternativa, la media móvil ponderada.
La media móvil ponderada es una media que, multiplicada por ciertos factores, asignan
determinado peso a los datos. Esta media mejora las predicciones de la media móvil simple,
ya que se trata de la media aritmética de los n valores anteriores ponderados. Esta ponderación se asigna según diferentes criterios como puede ser darle más importancia a los datos
antiguos o a los datos más recientes. Esta técnica será más eficiente que la media móvil simple a la hora de adaptar rápidamente el valor de la predicción a fluctuaciones en los datos
recientes. Sin embargo pueden seguir apareciendo valores extremos dentro de los datos más
recientes y de esa manera estropear en menor medida el filtrado de señales.
Conclusión
Partiendo de que la aplicación trata el caso de un usuario andando por los pasillos de una
superficie comercial y en cualquier giro puede cambiar de pasillo y por tanto de localización,
el filtro debe de tener las siguientes características:
La cantidad de muestras debe ser baja: Si se tuviera una cantidad de datos alta, el
usuario debería esperar a que la aplicación consiguiera las n primeras entradas para empezar
a trabajar y por lo tanto la aplicación s quedaría congelada. Además se tendrían en cuenta los
datos antiguos, afectando a la predicción negativamente, ya que la media de todas las señales
74
obtiene como resultado las localizaciones por las que va pasando el usuario, en lugar de la
posición actual del usuario y para que funcionara correctamente el usuario debería andar por
secciones y permanecer quieto hasta que la aplicación calcule su posición y le siga guiando
en lugar de ir guiando según va andando.
obteniendo como conclusión que una cantidad de 10 muestras es idónea, ya que según las
pruebas entre 6 y 7 de cada 10 señales son correctas y por lo tanto te permite pasarle el filtro
correctamente. El primer paso será hacer una distinción
En este caso la cantidad de muestras se ha optado por fijarla a 10, ya que observando las
primeras pruebas se obtiene como conclusión que entre 6 y 7 de cada señales 10 son correctas
y por lo tanto permite pasarle el filtro correctamente.
Capacidad para tratar con valores extremos: Ambas técnicas tratan con valores extremos y lo incluyen a la media aritmética. En el caso de la media móvil simple se trata de
una media aritmética de los n valores y por tanto la inclusión de valores extremos afecta
negativamente, ya que influiría notablemente en la predicción. En el caso de la media móvil
ponderada, se siguen tratando estos valores extremos e incluyendo en la media aritmética con
la peculiaridad de que si el valor extremo aparece entre los datos recientes o más antiguos
podrá tener mas o menos peso en la decisión final.
El problema se radicaría eliminando esos valores extremos y para ello antes de realizar
la media aritmética, se han procesado las señales almacenadas y de ha decidido crear un
intervalo de confianza y realizar la media con los valores que se encuentren dentro de ese
intervalo, de manera que los valores extremos queden descartados y no se tengan en cuenta
dando lugar a una predicción mas efectiva.
Un intervalo de confianza trata de un par de números entre los cuales se estima que estará
cierto desconocido valor con una determinada probabilidad de acierto. Esta probabilidad de
acierto en la estimación se representa con 1 - α y se denomina nivel de confianza, donde α
es el llamado error aleatorio o nivel de significación, esto es, una medida de las posibilidades
de fallar en la estimación mediante tal intervalo.
El nivel de confianza y la amplitud varían de manera conjunta en función del nivel de
confianza. A mayor nivel de confianza, se obtendrá un intervalo más amplio, y por lo tanto
mayor probabilidad de acierto. Por el contrario un menor nivel de confianza, dará lugar a
un intervalo más pequeño que ofrece una estimación más precisa. Para la construcción del
intervalo de confianza es necesario conocer la distribución teórica que sigue el parámetro a
estimar Φ. Por lo tanto la fórmula que se encargará de delimitar los intervalos de confianza
será:
Intervalo de Confianza
I = (X̄ − E, X̄ + E)
75
(4.2)
siendo:
E = Este valor corresponde al error aleatorio cuya fórmula es la siguiente:
σ
E = Z α2 · √
n
(4.3)
X̄ = Este valor corresponde a la media muestral cuya fórmula es la siguiente:
N
1 X
·
xi
X̄ =
N i=1
(4.4)
donde:
n = tamaño muestral que corresponde a las señales que contiene el array de entrada
con una entrada fija de 10.
σ =Este valor corresponde a la desviación tipica cuya fórmula es la siguiente:
v
u
N
u 1
X
t
σ=
·
(xi − x̄)2
N − 1 i=1
(4.5)
Como se ha comentado anteriormente, el nivel de confianza expresa la certeza de que
realmente el dato que buscamos esté dentro del margen de error. Realizando unas pruebas
previas se concluye que de cada 10 señales se reciben entre 6 y 9 correctas, es decir, entre
el 60 % y el 90 % de las pruebas son correctas y existe una tasa de error mínima del 10 %
y máxima del 40 %, por lo que se ha decidido implantar un nivel de confianza del 90 %.
Dicho de otra manera, si se repitiese 100 veces la misma prueba 90 veces la proporción
buscada estaría dentro del intervalo y 10 fuera. Con este nivel de confianza se pretende
crear un intervalo menor que ofrezca una estimación más precisa eliminando los valores
extremos.
Para un nivel de confianza del 90 %
Nivel de confianza = 1 – α = 0,9 ; α = 0,1
Se sabe que Φ( zn ) = p( z <z αn ) = 1-
α
2
=1-
0,1
2
= 0.95
Usando la tabla de la distribución Z → N(0,1), se obtiene: Z α2 = 1,64
Luego:
σ
E = 1,64 · √
n
Una vez generado el intervalo de confianza, se procesará el array de entrada y se desechan
los valores que no estén dentro de este intervalo, eliminando de esa manera los valores extremos. El siguiente paso será realizar la media, mediante la expresión 4.4, de las señales que se
conservan en el array de entrada consiguiendo de esta manera una salida mejor estimada.
Como conclusión a la solución, se presenta un diagrama de secuencia correspondiente a
la Figura 4.14
76
Figura 4.14: Diagrama de Secuencia del Módulo de Filtrado de Señal
4.5.4
Módulo de Posicionamiento
El módulo de Posicionamiento es el encargado de recibir la frecuencia estimada proveniente del módulo de Filtrado de Señal, correspondiente a cada uno de los dispositivos que
se haya detectado en el módulo de comunicaciones. Su función será recibir los datos de entrada, asegurarse el acceso a recursos compartidos, procesarlos y estimar la posición correcta
en base a las distintas frecuencias que recibe.
Es necesario controlar esta comunicación y administrar los datos que se reciben de entrada, ya que hasta que no se reciban todas las entradas necesarias, correspondientes a los
dispositivos detectados en el módulo de comunicaciones, no se puede calcular la posición estimada. Por lo tanto ha de asegurarse la recepción de frecuencias estimadas mediante algún
sistema de almacenamiento.
Para proporcionar la funcionalidad descrita se han diseñado los siguientes submódulos:
Un primer submódulo encargado de recoger los datos, procedentes del módulo de filtrado
de señal. Un segundo submódulo encargado de procesar los datos del primer submódulo y
proporcionar la posición estimada, mediante el uso de un sistema de posicionamiento. Un
tercer submódulo encargado de recoger las posiciones del segundo submódulo y almacenarlas para realizar un sistema de votaciones que concluya con una posición que servirá de
entrada al módulo de enrutamiento.
De esta manera, teniendo una entrada con un array de frecuencias estimadas por cada uno
de los dispositivos identificados y procesándolos mediante el uso de un mapa de potencias, se
concluye con la posición estimada como entrada del módulo de enrutamiento. Gráficamente,
la descripción funcional del nivel de posicionamiento es la mostrada en la Figura 4.15.
77
Figura 4.15: Descripción Funcional del módulo de Posicionamiento
En cuanto a la dependencia con otros módulos, este módulo se relaciona por debajo con el
módulo de Filtrado de señal del que obtiene las distintas frecuencias estimadas y, al producir
la salida con el módulo de enrutamiento al que manda la posición estimada.
Solución
A la entrada del módulo llegan todas las salidas procedentes del módulo de filtrado de
señal y se almacenan en un buffer, para a continuación calcular la posición en base a estas
entradas. Sin embargo este módulo planteó un problema a la hora de recoger los datos y
calcular la posición estimada debido a la entrada asíncrona de frecuencias estimadas proveniente del módulo de Filtrado de señal, ya que al hacer uso de un enfoque multi-hilo los
datos llegan de manera aleatoria, según se procesan los datos y producen la salida, que es
la entrada del módulo de Posicionamiento. Por lo tanto hay que calcular la posición, única
y exclusivamente cuando se tenga la frecuencia estimada de cada uno de los dispositivos
detectados en el módulo de comunicaciones.
Para ello se emplea el uso de una variable semáforo que impide realizar el cálculo de
dicha posición hasta que no contenga la señal estimada que produce la salida del módulo
de filtrado de señal de los distintos dispositivos que se hayan detectado en el módulo de
Comunicaciones, como muestra el siguiente pseudocódigo.
Funcion semaforo(parametros, ...)
Si semaforo = 1
Si hay n frecuencias estimadas
semaforo = 0
Calcular()
Sino
wait()
Listado 4.12: Pseudocodigo Función Semáforo
78
Como ya se indicó en la Sección 4.4, se va a utilizar un sistema de posicionamiento como
solución al problema del multipath usando la fuerza de la señal recibida o RSS para localizar
la posición del usuario o nodo móvil. El sistema más usado en sistemas de posicionamiento,
se trata del mapa de potencias como se ve en [DC11].
Este sistema de posicionamiento tendrá que almacenar los datos necesarios para realizar
la posterior estimación de la localización del nodo móvil, recogiendo los datos en una fase
inicial de calibración, en la que se almacenan los pares de coordenadas asociando a cada
uno de ellos la lista de potencias de recibidas de los nodos de referencia, entendiendo nodo
de referencia como las distintas secciones establecidas dentro del recinto comercial, que
permitirá establecer la posición del nodo móvil o usuario.
El mapa de potencias tendría, por tanto, una estructura como la mostrada en la Tabla 4.1,
donde cada RSS representa la potencia de señal recibida en esa coordenada desde el nodo
de referencia por el major del nodo referenciado i(nri ) en las coordenadas (xn , yn ), y estará
almacenado en decibelios. de la pagina 80
79
80
.
.
.
rss
.
.
.
(xn , yn )
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr2
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr3
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr4
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr5
Tabla 4.1: Estructura del Mapa de Potencias
rss
rss
rss
rss
(x0 , yn )
(x1 , y0 )
(x1 , y1 )
(x1 , yn )
.
.
.
.
.
.
.
.
.
rss
rss
(x0 , y0 )
(x0 , y1 )
.
.
.
nr1
Coordenadas/Nodos Referencia
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr6
rss
.
.
.
rss
.
.
.
rss
rss
rss
.
.
.
rss
rss
nr7
...
.
.
.
...
.
.
.
...
...
...
.
.
.
...
...
...
rss
.
.
rss
.
.
rss
rss
rss
.
.
rss
rss
nri
Como ya se comentó en el módulo de Filtrado de Señal, el posicionamiento del iBeacon
utiliza un sistema de referencia relativo y centrado en el receptor estableciendo la situación
en tres rangos, debido a la fluctuación de la señal. De la misma manera que el iBeacon utiliza
un sistema de referencia relativo, el mapa de potencias no va a establecer un valor concreto
para el RSS, sino un intervalo, debido a la fluctuación de señal.
El tercer submódulo se trata de otro filtro más que asegura que la posición calculada es
la correcta, ya que, aunque las señales pasan por un filtro que elimina valores extremos,
se puede dar el caso de que en un momento recoja muchos valores extremos y por tanto
no los elimine el filtro sino que los interprete como la posición correcta. Es por ello que
se implemento un sistema de votaciones que consiste en guardar las ultimas n posiciones
estimadas calculadas y posteriormente hacer un recuento de la posición que más aparece de
manera que si en algún momento se introdujera una posición no deseada no se tuviera en
cuenta.
Como conclusión a la solución, se presenta un diagrama de secuencia correspondiente a
la Figura 4.16.
Figura 4.16: Diagrama de Secuencia del Módulo de Posicionamiento
4.5.5
Módulo de Enrutamiento y Guiado
El módulo de enrutamiento es el encargado de recibir la información en formato de coordenadas del movimiento del usuario, proveniente del módulo de posicionamiento. Su función
será encargarse de generar la ruta que debe guiar al usuario hasta cada uno de los productos
añadidos a la lista con el menor coste.
Para proporcionar la funcionalidad descrita se han diseñado los siguientes submódulos:
Un primer submódulo encargado de la gestión y control del flujo del módulo.
Un segundo submódulo encargado de generar la ruta que le guíe hasta cada uno de los
productos añadidos a la lista tomando como punto de origen la posición que ocupe el
usuario.
81
Un tercer submódulo encargado de realizar la animación que muestre al usuario la
posición que ocupa en el plano.
Un cuarto submódulo encargado guiar al usuario mediante voz.
Gráficamente, la descripción funcional del nivel de posicionamiento es la mostrada en la
Figura 4.17.
Figura 4.17: Descripción Funcional del módulo de Enrutamiento
En cuanto a la dependencia con otros módulos, este módulo se relaciona por debajo con
el módulo de Posicionamiento del que obtiene la coordenada del movimiento del usuario y
al producir la salida con el módulo de guiado al que envía la siguiente posición a visitar.
Solución
Se trata del módulo mas importante y robusto de la aplicación. Este módulo presenta una
gran complejidad y diversos problemas en su diseño por lo que no es sencilla su implementación. Funcionalmente el módulo se encargará de tres funciones:
Generar la ruta que debe guiar al usuario hasta cada uno de los productos añadidos a
la lista con el menor coste.
Generar la animación en la pantalla posicionado al usuario en la nueva posición para
que se encuentre más orientado.
Reproducir la dirección de la siguiente posición de la ruta generada.
El listado 4.6 muestra el pseudocódigo del módulo de enrutamiento:
Enrutamiento(parametros)
Calcular ruta partiendo de la posicion actual del usuario.
82
Mientras no finaliza la compra //productos es distinto a 0
Si cambia posicion del usuario
//Si posicion del camino y posicion del usuario iguales
Si posicion actual es igual a posicion que deberia ser
Comprobacion y Actualizacion de datos
Sino
Calcular ruta partiendo de la posicion actual del usuario.
Animacion a la casilla correspondiente a la posicion del usuario
Indicacion guiada
Fin Si
Fin Mientras
Fin Enrutamiento
Listado 4.13: Pseudocódigo Módulo Enrutamiento
La primera vez que se instancia el módulo de enrutamiento se genera una ruta que pasa por
todos los productos seleccionados con menor coste. Esta ruta siempre se generará partiendo
de la posición del usuario, de manera que pueda abrir la aplicación en cualquier punto del
establecimiento comercial, y contendrá las coordenadas por las que debe pasar.
Una vez se comience a comprar, el algoritmo no se detiene hasta que el usuario haya
cogido todos los productos seleccionados en la lista que marcó previamente.
Cada vez que el algoritmo detecta un cambio de posición, mediante una comprobación de
la posición actual, emitida por el módulo de posicionamiento, con una variable encargada de
guardar siempre la ultima posición, se genera una comprobación que consiste en verificar si
la nueva posición del usuario es la correcta en la ruta previamente generada o si el usuario
se ha equivocado. De manera que se comprueba la posición que debería tener y la posición
actual, emitida por el módulo de posicionamiento. Se pueden dar dos casos:
El primer caso sería que las posiciones fueran iguales. En ese caso el usuario ha seguido
la ruta establecida y por lo tanto se realiza:
1. Una comprobación de la nueva posición y por tanto de la nueva sección que ocupa el
usuario con las secciones del supermercado en las que aparece algun producto elegido
por el usuario, para saber si esa nueva sección contiene algún producto que quiere el
usuario.
2. Una actualización de los datos que se muestran en pantalla y los datos internos como
borrar la nueva posición de la ruta, guardar la nueva posición para la siguiente comprobación y en el caso de que se haya escogido un nuevo producto borrarlo de la lista
de productos restantes, ya que en caso de que el usuario se equivoque de camino y se
realice una nueva ruta sólo tenga en cuenta los productos que aun no ha cogido.
El segundo caso sería que la posiciones fueran distintas. En ese caso el usuario ha tomado
un camino diferente al que marca la ruta y por lo tanto es necesario realizar otra nueva ruta
83
partiendo de la nueva posición, teniendo en cuenta en todo momento cuáles son los productos
que aún no ha añadido el usuario a la cesta y obviando los productos ya visitados.
A continuación, una vez actualizado el array que pertenece a la ruta, se realiza una animación que muestre al usuario la nueva posición que ocupa en el plano y posteriormente
se calcula la siguiente dirección que debe seguir el usuario. Para ello se manda la siguiente
posición a visitar en la ruta al submódulo de Guiado y éste se encarga de consultar la sección
a la que pertenecen dichas coordenadas y devolver la dirección con el fin de reproducirla.
Aunque a simple vista parece simple, este módulo planteó varios problemas de diseño:
En primer lugar la generación de la ruta más corta que guíe al usuario hasta cada uno
de los productos añadidos a la lista con el menor coste, ya que se pueden se pueden
usar dos enfoques distintos a la hora de implementar el algoritmo atendiendo al tiempo
de cómputo o al costo en memoria.
En segundo lugar la manera de guiar al usuario, enfocando las indicaciones a orientativas y visuales.
A continuación se analizan cada uno de los submódulos que conforman el módulo global
de Enrutamiento y Guiado
Generar Ruta
El modelo de la ruta más corta detalla una red en la cual cada arco (i, j) tiene asociado
un numero c(sub ij), el cual se interpreta como la distancia (tal vez costo o tiempo) desde el
nodo i hasta el nodo j. Una ruta o camino entre dos nodos es cualquier secuencia de arcos
que los conecte. El objetivo es encontrar la ruta más corta (de menor costo o más rápida)
desde un nodo específico hasta cada uno de los demás nodos de la red. Este es uno de los
problemas más comunes al utilizar grafos, encontrar el camino entre dos puntos de tal forma
que el peso total de las aristas visitadas sea mínimo.
Un grafo(Figura 4.18) es un método para representar objetos y la relación que mantienen
entre sí. La rama de las matemáticas que se encarga de su estudio se le conoce como Teoría
de Grafos. Un ejemplo clásico es cuando el grafo representa una ciudad donde las aristas son
las calles (pueden ser dirigidas o no), los vértices las intersecciones, y el peso de las aristas
el tiempo que se tarda en recorrer la calle; Puede interesar encontrar la forma para llegar de
un punto a otro de tal forma que el tiempo sea mínimo.
Un grafo está compuesto por vértices (también llamados nodos) y aristas como muestra
la Figura 4.18 . Los vértices son los objetos que se desean representar, mientras que las
aristas son la forma en que están interconectados. De manera general se representa un vértice
como un punto o un círculo y a una arista como una línea, aunque se puede elegir cualquier
representación ya que las propiedades del grafo no cambian.
84
Figura 4.18: Estructura de un Grafo
Para su uso dentro de un programa es necesario representar el grafo a través de sus vértices
o a través de sus aristas. Generalmente los vértices van numerados, por lo que lo que interesa
es la forma de guardar los vértices.
La primera forma, como muestra la Tabla 4.2, es guardar en una lista las aristas junto con
sus vértices asociados. En cada casilla del array se tienen dos valores, que son los vértices
que conecta la arista. Se pueden incluir datos adicionales, como el peso. Para la gráfica
ejemplificada arriba se tendría (considerando que el vértice a se toma como el primero, b el
segundo y así sucesivamente):
Vi
Vj
E1
1
2
E2
2
3
E3
1
3
E4
2
4
E5
7
6
E6
4
5
Tabla 4.2: Representación del grafo a través de sus aristas
Otra forma para representar el grafo, como muestra la Tabla 4.3, es mediante una matriz
de adyacencia. Cada fila y columna representan un vértice, y la matriz representa la forma en
que están conectados (comúnmente pesos o número de conexiones). Para el ejemplo anterior,
se tendría:
Partiendo de la teoría de grafos y adaptándolo a el presente Trabajo Fin de Grado, el
grafo representa un supermercado compuesto por nodos que corresponden a los productos y
aristas que equivalen a los pasillos y son la forma en que están interconectados los distintos
productos del supermercado.
85
V1
V2
V3
V4
V5
V6
V7
V1
0
1
1
0
0
0
0
V2
1
0
1
1
0
0
0
V3
1
1
0
0
0
0
0
V4
0
1
0
0
1
0
0
V5
0
0
0
1
0
0
0
V6
0
0
0
0
0
0
1
V7
0
0
0
0
0
1
0
Tabla 4.3: Representación del grafo a través de sus vertices
Para encontrar el camino más corto se aplica el principio de que para que un camino sea
óptimo, todos los caminos que contiene también deben ser óptimos y el camino más corto no
debe contener ciclos (es un árbol). Dos técnicas de programación que aprovechan esta propiedad son programación dinámica y los algoritmos ávidos (o voraces). Ambas alternativas
harán uso de una tabla de distancias que les permite saber la distancia mínima (tal vez costo
o tiempo) desde el nodo i hasta el nodo j. Es por ello que hay dos partes bien diferenciadas
en el cálculo de la ruta más corta:
Tabla de distancias que muestre el coste óptimo de un nodo origen a cualquier otro
nodo del grafo.
Cálculo del camino óptimo haciendo uso de cualquier técnica de programación.
Tabla de distancias
Para la realización de la tabla de distancias se ha optado por seguir el modelo de la matriz
de adyacencia, ya que cada fila y columna representan un vértice, sin embargo a diferencia
de la la matriz de adyacencia que representa la forma en la que están conectados los vértices y las aristas de un grafo, la tabla de distancias representa el coste mínimo de un nodo
origen(fila) a un nodo destino(columna).
Los vértices que componen la tabla de distancias corresponden a los productos que el
usuario ha seleccionado y añadido a la lista. Al ser productos repartidos por todo el establecimiento y seleccionados por el usuario, se puede dar el caso de que un producto no
esté contiguo a otro, es decir, no haya ninguna conexión entre ellos y por tanto no se tenga
un coste directo. La manera para solucionar este problema ha sido aplicar el algoritmo de
Dijkstra.
El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es un algoritmo
para la determinación del camino más corto dado un vértice origen al resto de los vértices en
un grafo con pesos en cada arista.
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más
cortos que parten del vértice origen y que llevan a todos los demás vértices. Cuando se
86
obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el
grafo, el algoritmo se detiene. El algoritmo es una especialización de la búsqueda de costo
uniforme, y como tal, no funciona en grafos con aristas de coste negativo, aunque en este
caso y para el presente Trabajo Fin de Grado se han considerado todos los pasillos con el
mismo coste.
Las características del algoritmo de Dijkstra son:
Para grafos dirigidos (la extensión a no dirigidos es inmediata).
Genera uno a uno los caminos de un nodo v al resto por orden creciente de longitud.
Usa un conjunto de vértices donde, a cada paso, se guardan los nodos para los que ya
se conoce el camino mínimo.
Devuelve un vector indexado por vértices: en cada posición w se guarda el coste del
camino mínimo que conecta v con w.
Cada vez que se incorpora un nodo a la solución se comprueba si los caminos todavía
no definitivos se pueden acortar pasando por él.
Mediante este algoritmo se pretende determinar el camino más corto dado un vértice origen al resto de los vértices en un grafo con pesos en cada arista y de esa manera completar
la tabla de distancias.
El algoritmo de Dijkstra utiliza las propiedades descritas anteriormente y funciona de la
siguiente forma:
Primero se marcan todos los vértices como no utilizados.
Entre todos los vértices, se busca el que esté más cerca del punto origen, se toma como
punto intermedio y se comprueba si se puede llegar más rápido a través de este vértice
a los demás.
Después se escoge al siguiente más cercano (con las distancias ya actualizadas) y se
repite el proceso.
Este proceso se lleva a cabos hasta que el vértice no utilizado más cercano coincida con
el destino. Al proceso de actualizar las distancias tomando como punto intermedio al nuevo
vértice se le conoce como relajación (relaxation).
Algo que se puede observar es que al obtener el camino más corto de un punto a otro,
también se está obteniendo el camino más corto del primero a todos los vértices intermedios
que se tienen que visitar. Por esto, se puede encontrar el camino más corto entre un punto y
todos los demás de forma casi igual a como se obtiene la distancia más corta de un punto a
otro.
Tal y como se muestra en el Listado 4.7 para realizar la tabla de distancias, se comienza
creando un array bidimensional de tamaño [Nodos][Nodos] y se añade un -1 a todas las
87
posiciones salvo a aquellas en las que el nodo origen y nodo destino es el mismo, al que se
le ha asignado un valor 0, ya que se supone que el camino mínimo de un nodo a sí mismo
tiene coste nulo.
//Creacion del array de costes/distancias
- (void)matrizCostes0:(NSArray *)nodos{
NSMutableArray *coste = [[NSMutableArray alloc] init];
for(int i =0; i < [nodos count]; i++){
NSMutableArray *cols = [[NSMutableArray alloc] init];
for(int j = 0; j< [nodos count]; j++){
if (i == j) {
[cols insertObject:@0 atIndex:[cols count]];
}
else{
[cols insertObject:@-1 atIndex:[cols count]];
}
}
[coste insertObject:cols atIndex:[coste count]];
}
//Esta es la matriz visual que hemos construido con el codigo anterior
/*_coste = @[
@[@0,@-1,@-1,@-1,@-1,@-1,@-1],
@[@-1,@0,@-1,@-1,@-1,@-1,@-1],
@[@-1,@-1,@0,@-1,@-1,@-1,@-1],
@[@-1,@-1,@-1,@0,@-1,@-1,@-1],
@[@-1,@-1,@-1,@-1,@0,@-1,@-1],
@[@-1,@-1,@-1,@-1,@-1,@0,@-1],
@[@-1,@-1,@-1,@-1,@-1,@-1,@0]
];*/
[self.myDelegate updateMatrizCostes0:coste];
}
Listado 4.14: Inicialización Tabla de Distancias
Lo correcto sería inicializar todas las distancias con un valor infinito relativo, ya que son
desconocidas al principio, exceptuando la diagonal principal en la que se debe colocar un 0
debido a que la distancia de un nodo a sí mismo sería 0. Sin embargo, al tratarse de un grafo
conexo y no dirigido que representa un supermercado en el que es posible ir a cualquier
producto, se ha omitido el valor infinito relativo a la hora de realizar la implementación.
Al encontrarse dentro de la capa de modelo se avisa al delegado de la vista para que
actualice matriz de costes y pueda hacer uso de ella.
Una vez construida e inicialiazada la tabla de distancias, se comienza a rellenar la matriz
haciendo uso del algoritmo de Dijkstra como muestra el pseudocódigo del Listado 4.8.
88
Se recorre el array nodos que contiene la posición de cada nodo dentro del plano y se
realiza una llamada al algoritmo de Dijkstra para calcular el coste de cada par de nodos por
encima de la diagonal principal. Una vez calculados los valores por encima de la diagonal
principal y al ser un grafo no dirigido y por lo tanto tener el mismo coste en ir del nodo i
a j que ir de j a i, es decir, una matriz simétrica, se copian los valores ya calculados a las
posiciones por debajo de la diagonal principal y de esa manera se evitan múltiples llamadas
al algoritmo de Dijkstra.
//Rellenar la matriz de costes/distancias
NSArray *aux = [NSArray array];
//Rellenar la matriz de costes con dijkstra
Desde i = 0 hasta numero de filas de tabla de distancias
Desde j= 0 hasta numero de columnas de tabla de distancias
Si i < j Entonces
coste = Dijkstra del nodo i al nodo j
tabla de distancias[i][j] = coste
Fin Si
Fin Desde
Fin Desde
Desde i = 0 hasta numero de filas de tabla de distancias
Desde j = 0 hasta numero de filas de tabla de distancias
Si i > j Entonces
tabla de distancias[i][j] = tabla de distancias[j][i]
Fin Si
Fin Desde
Fin Desde
Listado 4.15: Rellenar Tabla de Distancias.
Cálculo del camino óptimo
Como ya se ha comentado anteriormente, para encontrar el camino más corto se aplicará
el principio de optimalidad, según el cual para que un camino sea óptimo, todos los caminos
que contiene también deben ser óptimos y el camino más corto no debe contener ciclos. Se
han nombrado dos alternativas (algoritmos voraces y programación dinámica) para realizar
el camino óptimo por lo que se va a proceder a analizar cada una de ellas para posteriormente
tomar una decisión.
89
Fuerza Bruta
La primera técnica se trata de una heurística voraz para resolver el clásico problema del
viajante, en la que se trata de encontrar el itinerario más corto que permita a un viajante recorrer un conjunto de ciudades pasando una única vez por cada una y regresando a la ciudad
de partida. En este caso el viajante será un usuario que quiera recorrer el supermercado escogiendo los productos que desea. Este algoritmo tiene un ritmo de crecimiento exponencial
por lo que no es práctico a la hora de resolver ejemplares “grandes“, por lo tanto se utiliza
para problemas pequeños. El problema se suele representar mediante:
Un grafo completo no dirigido con un nodo por cada ciudad.
Utilizando una matriz de distancias (lo normal es que se trate de una matriz simétrica).
Ambas características las posee el problema ya que cada vértice corresponde a un producto
seleccionado por el usuario y se va a utilizar una matriz de distancias previamente calculada
mediante el algoritmo de Dijkstra, sin embargo se ha optado por usar un grafo dirigido, ya
que la extensión a grafo no dirigido es inmediata y por tanto se engloban tanto los grafos
dirigidos como no dirigidos.
Esta heurística consiste en:
Ir desplazándose desde cada producto seleccionado al producto mas próximo no seleccionado.
Retornar al producto desde el que se comenzó el recorrido.
Con estas dos premisas se intentan todas las posibilidades, es decir, se calculan las longitudes de todos los recorridos posibles y se selecciona la de longitud mínima. Debido a la
comprobación de más operaciones de las necesarias para resolver el problema, suele tener
un coste alto, creciendo exponencialmente con el número de puntos a visitar. Sin embargo es
bastante sencillo de implementar.
A continuación, mediante el ejemplo gráfico de la Figura 4.19 se detalla el problema de
la ruta de menor coste aplicando la técnica de Fuerza Bruta, en la que un usuario tiene que
recorrer los n productos seleccionados y regresar a la posición de salida, en este caso la
caja, de tal forma que el peso total de las aristas visitadas, en este caso pasillos sea mínimo.
Aunque en el caso del presente Trabajo Fin de Grado se trata de un grafo no dirigido y un
coste uniforme de uno para cada arista, se ha implementado con el objetivo de que se pueda
utilizar en un grafo dirigido con un coste desigual para cada arista.
Como ya se ha comentado anteriormente y basándose en la teoría de grafos, lo primero
que se hace es representar cada producto mediante un nodo de un grafo y cada camino como
una arista, en este caso dirigida, por lo que finalmente se obtiene un grafo dirigido G = (V,
A) donde:
V = 1,...,n es el conjunto de vértices (productos).
90
Figura 4.19: Descripción Gráfica del problema
A es el conjunto de aristas (i, j) con (i, j) ∈ V (caminos).
D(i,j) es la longitud de (i, j) si (i, j) ∈ A o ∞ si (i, j) ∈
/ A.
De\A
0
1
2
3
0
∞
5
2
2
1
3
∞
6
5
2
∞
4
∞
4
3
3
∞
6
∞
Tabla 4.4: Matriz de Adyacencia para el ejemplo del cálculo del camino minimo
Suponiendo que la posición de partida es la 0, si se denomina C(i,W) a la longitud del
camino mínimo de i a 0 que pasa por todos los vértices de W ⊂ V, siendo 0 ∈
/ W, entonces
(
C(i, W ) =
D(i, 0)
si W = ∅
min(D(i, j) + C(j, W − j)) para j ∈ W
si W 6= ∅
(4.6)
Como inicialmente la posición de partida es la 0, la solución al problema será C(0,V- {0})
y por tanto se cumple el principio de optimalidad.
El Listado 4.16 implementa la Técnica de Fuerza Bruta
91
- (void)fuerzaBruta_nodos2:(int)n origen:(int)i conjunto:(NSMutableArray *)conjunto coste:(NSArray
*)costes camino:(NSMutableArray*)camino {
NSMutableArray *nconjunto = [[NSMutableArray alloc] init];
nconjunto = [NSMutableArray arrayWithArray:conjunto];
[nconjunto removeObject:[NSNumber numberWithInt:i]];
if(nconjunto.count == 0){
if([self Coste:camino coste:costes] <= [self Coste:_camino coste:costes]){
_camino = [NSMutableArray arrayWithArray:camino];
_valorRecorrido = _valoraux;
}
}
else{
for(int j=0; j<n; j++){
if([nconjunto containsObject:[NSNumber numberWithInt:j]]){
[camino insertObject:[NSNumber numberWithInt:j] atIndex:[camino count]];
[self fuerzaBruta_nodos2:n origen:j conjunto:nconjunto coste:costes camino:camino];
[camino removeObject:[NSNumber numberWithInt:j]];
}
}
}
}
Listado 4.16: Implementación Técnica Fuerza Bruta
Como ya se ha comentado anteriormente, mediante el empleo de la técnica de Fuerza Bruta, el usuario se desplaza desde el punto de origen al producto más proximo no seleccionado,
hasta llegar al punto de origen en el que guardará el recorrido con un coste menor y retornará
al producto anterior hasta el comienzo del recorrido.
Esta técnica recorre todos los caminos posibles y se queda con el camino de menor coste
como se muestra en la Figura 4.20
El coste es de O(n!)
Programación Dinámica
La función anterior repite llamadas para calcular C(i,W), y por tanto es ineficiente, sin
embargo utilizando la técnica de programación dinámica se pueden guardar los valores de
C(i,W) en una tabla para evitar repetir su cálculo.
Programación dinámica (DP – Dynamic Programming) es una técnica de programación
que se puede utilizar en problemas que presentan las siguientes condiciones:
La solución al problema ha de ser alcanzada a través de una secuencia de decisiones,
92
Figura 4.20: Recorrido Técnica Fuerza Bruta
una en cada etapa.
Dicha secuencia de decisiones ha de cumplir el principio de optimalidad, es decir, el
problema puede ser resuelto de manera óptima si sus partes son resueltas de manera
óptima.
El principio de optimalidad enunciado por Bellman en 1957, es la base a la solución de
problemas mediante la técnica de programación dinámica y dice:
“En una secuencia de decisiones óptima toda subsecuencia ha de ser también óptima”.
La idea básica de la programación dinámica es guardar los resultados de los subproblemas
para no tener que volverlos a calcular después. Con esta simple técnica, se transforman algoritmos que se ejecutan en tiempo exponencial a tiempo polinomial. Este ahorro en tiempo
se refleja en la reducción del costo en memoria.
Los problemas más comunes que se resuelven mediante esta técnica son los de optimización, donde se pueden encontrar muchas soluciones pero se requiere únicamente la mejor
(posiblemente la menor o la mayor, según lo que se esté buscando). Como pueden existir varias combinaciones que resulten en la mejor solución, se dice que se encuentra una respuesta
óptima, y no la respuesta óptima.
A grandes rasgos, el diseño de un algoritmo de Programación Dinámica consta de los
siguientes pasos:
1. Planteamiento de la solución como una sucesión de decisiones y verificación de que
ésta cumple el principio de optimalidad.
2. Definición recursiva de la solución.
93
3. Cálculo del valor de la solución óptima siguiendo un enfoque Top-down donde el problema se divide en subproblemas, y éstos se resuelven haciendo uso de las soluciones
almacenadas en una tabla por si fuera necesario reutilizar los cálculos.
4. Construcción de la solución óptima haciendo uso de la información contenida en la
tabla anterior.
Por lo tanto los elementos que identifican a los algoritmos de programación dinámica
son:
Subestructura óptima: Esto implica que para poder resolver el problema de forma óptima, cualquier subparte del problema también necesita ser resuelto de forma óptima.
Si está condición se cumple, también existe la posibilidad de que un algoritmo ávido
sea útil.
Empalme de subproblemas: La ventaja principal de la programación dinámica es que
al tener los resultados de los subproblemas en una tabla, se pueden buscar en tiempo
constante. Para poder aprovechar esto, se requiere que al resolver los subproblemas
sea preciso emplear resultados anteriores, y que la cantidad de subproblemas no sea
excesivamente grande (para poder crear las tablas).
Memorización: Esto se utiliza para pasar de un algoritmo recursivo a uno de programación dinámica. Lo que se hace es utilizar el mismo algoritmo, y agregar el uso de la
tabla. Cuando se requiere un valor, primero se busca en la tabla, y en caso de que no
se encuentre, se busca recursivamente (este sería el enfoque top-down).
Para indexar la tabla en la segunda dimensión, se asigna un código único a cada subconjunto W para identificarlo. Puesto que el numero de productos seleccionados por el usuario
es n, el numero de posibles subconjuntos es 2n .
Si se representa cada subconjunto mediante un vector
(
W = [x0 , ..., xn−1 ] con xi =
0 si i ∈
/w
1 si i ∈ w
(4.7)
entonces, id(W) = x0 20 + x1 21 + ... + xn−1 2n−1 asigna un código único a cada subconjunto.
Una vez explicadas las bases de la programación dinámica se muestra el algoritmo implementado que calcula la distancia mínima usando programación dinámica.
- (int)dinamica:(int)n origen:(int)i conjunto:(NSMutableArray *)conjunto coste:(NSArray *)costes
tabla:(NSMutableArray*)tabla {
NSMutableArray *nconjunto = [[NSMutableArray alloc] init];
nconjunto = [NSMutableArray arrayWithArray:conjunto];
[nconjunto removeObjectIdenticalTo:[NSNumber numberWithInt:i]];
94
if([nconjunto count] == 0) {
return [costes[i][0] integerValue];
}
if([tabla[i][[self conjuntoId:nconjunto n:n]] integerValue] > 0){
return [tabla[i][[self conjuntoId:nconjunto n:n]] integerValue];
}
int dist, dmin = 1000;
for(int j = 0; j<n; j++){
if([nconjunto containsObject:[NSNumber numberWithInt:j]]){
dist = [costes[i][j] integerValue] + [self dinamica:n origen:j conjunto:nconjunto coste:
costes tabla:tabla];
if( dist < dmin){
dmin = dist;
}
}
}
[tabla[i] replaceObjectAtIndex:[self conjuntoId:nconjunto n:n] withObject:[NSNumber
numberWithInt:dmin]];
return dmin;
}
Listado 4.17: Implementación Técnica Fuerza Bruta
Para el ejemplo ya expuesto cuya tabla de adyancencia D(i,j) es
De\A
0
1
2
3
0
∞
3
∞
3
1
5
∞
4
∞
2
2
6
∞
6
3
2
5
4
∞
se ha calculado la tabla de distancias mínimas C(i,W)
De\A
0
0
0
0
0
-1
-1
-1
-1
1
-1
-1
-1
-1
2
-1
-1
11
10
3
-1
-1
-1
-1
4
-1
6
-1
6
5
-1
-1
-1
-1
6
-1
-1
-1
11
7
-1
-1
-1
-1
8
-1
∞
8
-1
9
-1
-1
-1
-1
10
-1
-1
16
-1
11
-1
-1
-1
-1
12
-1
12
-1
-1
13
-1
-1
-1
-1
14
14
-1
-1
-1
15
-1
-1
-1
-1
Tabla 4.5: Matriz de Adyacencia para el ejemplo del cálculo del camino minimo
El coste del algoritmo para completar la tabla C(i, W) supone:
Cáculo de C(i, ∅) para i = 1,...,n-1: n-1 consultas a tabla.
95
Cálculo de C(i, W) para 1≤ k = Cardinal(W ) ≤ n-2:
n−2
(n − 1)
ksumas;
1
(4.8)
Cálculo C(0,V): n - 1 sumas.
n=2
X
n−2
O(2(n − 1) +
(n − 1)k
) = O(n2 22 )
k
k=1
(4.9)
que, anque es exponencial, es de ornde menor que O n!
Suponiendo que la posición de partida es la 0, si llamamos C(i,W) a la longitud del camino
mínimo de i a 0 que pasa por todos los vértices de W ⊂ V, siendo 0 ∈
/ W, entonces
(
C(i, W ) =
D(i, 0)
si W = ∅
min(D(i, j) + C(j, W − j)) para j ∈ W
si W 6= ∅
(4.10)
A continuación en el listado 4.18 se calcula el itinerario que debe seguir el usuario a partir
de la tabla C(i,W)
- (void)rutaDinamica:(int)n conjunto:(NSMutableArray *)conjunto coste:(NSArray *)costes tabla:(
NSMutableArray*)tabla camino:(NSMutableArray*)camino{
int dist, dmin, jmin = 0;
for(int i= 0; i< costes.count; i++){
[camino addObject:@0];
}
for(int i = 1; i < n; i++){
dmin = 1000;
for(int j = 0; j<n; j++){
if([conjunto containsObject:[NSNumber numberWithInt:j]]){
[conjunto removeObjectIdenticalTo:[NSNumber numberWithInt:j]];
NSNumber *aux = [camino objectAtIndex:(i-1)];
int valorCoste = [costes [[aux integerValue]][j] integerValue];
int valorTabla = [tabla[j][[self conjuntoId:conjunto n:n]] integerValue];
dist = valorCoste + valorTabla;
[conjunto addObject:[NSNumber numberWithInt:j]];
if(dist < dmin){
dmin = dist;
jmin = j;
}
}
}
[camino replaceObjectAtIndex:i withObject:[NSNumber numberWithInt:jmin]];
96
[conjunto removeObjectIdenticalTo:[NSNumber numberWithInt:jmin]];
}
return;
}
Listado 4.18: Implementación Técnica Fuerza Bruta
Para este ejemplo la función anterior devuelve el itinerario que aparece en la Figura 4.21
que efectivamente es el camino de mínima longitud
Figura 4.21: Recorrido Técnica Programación Dinámica
Generar Animación
La tarea de este submódulo consiste en generar la animación del movimiento del usuario
en la pantalla. Para desplazar al usuario por el centro comercial se ha creado internamente un
mapa del centro compuesto por botones, ya que cada uno de ellos consta de una propiedad
llamada tag que actua de identificador unívoco, de manera que cada movimiento del usuario
esté representado por un tag que haga más fácil desplazarse a ese punto. Esta función recibe
un array con el movimiento del usuario, por lo que tiene un único valor que refleja la posición
actual del usuario y por lo tanto el tag al que debe desplazarse. El siguiente paso será sustituir
el centro de la esfera que identifica al usuario en el mapa por el nuevo centro del botón.
Finalmente se realiza la animación de 3 segundos que consiste en llevar la esfera desde la
posición anterior a la nueva posición.
97
Este método recibe un array de posiciones, sin embargo sólo tiene una posición. Esto se
podría evitar mandando como parámetro un valor entero perteneciente a la posición actual del
usuario, sin embargo a la hora de desplazarse a una posición que no es contigua es necesario
pasar por varias posiciones. Esto es lo que se realiza al inicio de realizar la compra, una
animación con la ruta completa que debe seguir el usuario.
Con esta implementación se pueden realizar todo tipo de animaciones, tanto contigua como recorrer varias posiciones
El Listado 4.12 muestra la implementación de la función encargada de generar animaciones.
//Realiza la animacion con la matriz que se le pasa
- (void)animate:(NSArray*)path withCompletion:(void(^)())completion {
NSMutableArray *animatePoints = [NSMutableArray array];
for (UIButton *field in path) {
void (^p)(void) = ^{
_beaconView.center = field.center;
};
[animatePoints addObject:p];
}
float duration = 3.0;
long numberOfKeyframes = path.count;
[UIView animateKeyframesWithDuration:duration*numberOfKeyframes delay:0.0 options:
UIViewKeyframeAnimationOptionCalculationModePaced animations:^{
for (long i=0; i<numberOfKeyframes; i++) {
[UIView addKeyframeWithRelativeStartTime:duration*i relativeDuration:duration animations
:animatePoints[i]];
}
} completion:^(BOOL finished) {
completion();
}];
}
Listado 4.19: Implementación Técnica Fuerza Bruta
Guiado
La tarea de este submódulo consiste en realizar las funciones de un audioguía generando
las indicaciones necesarias mediante comandos de voz para guiar al usuario hasta el siguiente
punto de la ruta.
Para la implementación de este submódulo fue necesario recopilar información sobre el
entorno en el que se va a realizar la audioguía. Esta información se refiere a las distintas
98
secciones que contiene el supermercado y la posición que ocupan.
Este submódulo se puede implementar siguiendo dos alternativas:
La primera alternativa se basa en guiar al usuario mediante orientaciones.
La segunda alternativa se basa en guiar al usuario mediante visualizaciones.
Ambas alternativas son buenas a la hora guiar al usuario; la primera alternativa consiste en
guiar al usuario mediante indicaciones basadas en la orientación del dispositivo, dando instrucciones como girar a la derecha, girar a la izquierda, seguir recto o dar la vuelta, mientras
que la segunda alternativa consiste en guiar al usuario mediante indicaciones visuales, como
seguir por la sección de frutería.
A favor de la primera alternativa está la aceptación por parte del público, ya que muchas
aplicaciones encargadas de guiar al usuario como puede ser el gps, le dan instrucciones
basadas en la orientación, sin embargo en contra de está y como suele ocurrir en entornos
de interior, están los fallos de orientación que provocan que el usuario tome la dirección
equivocada.
La segunda alternativa nace casualmente a la hora de hacer la compra con un familiar de
avanzada edad. Este familiar prefería que le dieran una indicación visual y le guiaran hasta el
producto que deseaba nombrando las seciones por las que debía pasar, ya que era más fácil
de recordar que si le guiaban mediante orientaciones.
Esta primera alternativa fue problemática en cuanto a la implementación, ya que para
realizar indicaciones basandose en la orientación del usuario es necesario controlar la orientación del dispositivo. En todo momento se conoce la posición actual y la siguiente posición
a visitar, por lo que si se sitúa al usuario en el mapa se sabe qué dirección debe tomar; Sin
embargo el problema es conocer la orientación del usuario para dar una indicación u otra.
Para ello fue necesario orientar el mapa al norte, implementar una brújula y hacer uso del
acelerómetro. Sin embargo una vez implementada la brújula y realizadas las pruebas en el
laboratorio se descartó esta alternativa debido a los numerosos fallos en la orientación producidos por los campos electromágneticos que generan las luces fluorescentes del laboratorio
que hacían que cambiara la continuamente la orientación y por tanto diera instrucciones de
guiado erróneas.
La segunda alternativa no fue difícil de implementar, ya que como se ha comentado anteriormente, en todo momento se conoce la posición actual y la siguiente posición a visitar,
de manera que comprobando a qué sección pertenece la siguiente posición a visitar ya se
puede dar una indicación guiada. Para la resolución de esta alternativa se utlizaron las clases
NSDictionary y NSMutableDictionary. Los objetos NSDictionary son inmutables (en otras
palabras, una vez que se han creado e inicializado su contenido no se puede modificar), por
lo que se inicializó agregando todas las entradas pertenecientes a las distintas secciones del
supermercado junto con la clave que refleja el tag al que pertece cada sección, de manera que
99
cada par de clave-valor contenido dentro de un diccionario se refiere a una entrada.
Finalmente se usa la segunda alternativa, debido en gran parte a los numerosos fallos de
orientación que se producen mediante el uso de la brújula.
Como conclusión a la solución, se presenta un diagrama de secuencia correspondiente a
la Figura 4.22
Figura 4.22: Diagrama de Secuencia del Módulo de Enrutamiento
100
Capítulo 5
Métodos de trabajo
E
este capítulo se analiza la metodología de desarrollo aplicada para la resolución del
presente Trabajo Fin de Grado, es decir, el desarrollo de la aplicación ShoppingBeacon.
A continuación se describe la evolución del sistema, detallando las iteraciones realizadas
hasta conseguir la versión final del sistema de acuerdo a la metodología seguida.
N
5.1 Metodología de desarrollo
Como metodología de desarrollo se ha optado por usar una aproximación a la metodología
ágil Extreme Programming [Bec99] siguiendo un modelo iterativo e incremental.
En el proceso iterativo e incremental cada una de estas iteraciones consta de varios incrementos, como muestra la Figura 5.1, que inician con el análisis y finalizan con la integración
y validación del sistema.
Figura 5.1: Evolución de los ciclos de desarrollo de Extreme Programming. Figura extraída
de [Bec99]
Lo que se busca es que en cada iteración los componentes logren evolucionar el producto a
partir de los completados en iteraciones previas, logrando una mejora mucho más completa,
por lo que este modelo establece prácticas de integración continua, exigiendo que el nuevo
código sea integrado en el sistema completo con la menor demora posible tras su producción.
Una manera de dirigir este proceso es priorizando los objetivos y requerimientos en función
101
del valor que ofrece al cliente. Por tanto este modelo requiere la involucración y participación
directa del cliente en el desarrollo del proyecto, siendo muy frecuentes las reuniones presenciales entre el cliente y el equipo de desarrollo. El modelo de ciclo de desarrollo de Extreme
Programming es una evolución del Modelo en Cascada y sus largos ciclos de desarrollo, y
del siguiente paso que constituyen los ciclos más cortos e iterativos del Modelo Incremental,
como muestra la Figura 5.1.
Mediante el empleo de la metodología Extreme Programming se fijan múltiples iteraciones con pequeños objetivos planificados a corto plazo, proporcionando un mayor control
sobre el sistema. Esta metodología debe llevarse a cabo en parejas de desarrollo, los cuales
proporcionan estimaciones de tiempo y esfuerzo al cliente en las que se basa para decidir
el alcance y periodicidad de las entregas. El cliente selecciona un pequeño conjunto de las
“historias de usuario” propuestas para la entrega en base a las estimaciones obtenidas. Cada
historia de usuario está descompuesta en un conjunto de tareas que tienen que ser llevadas a
cabo por los desarrolladores en la siguiente iteración.
Por lo tanto como metodología de desarrollo se ha optado por usar una aproximación a
la metodología ágil Extreme Programming usando estas historias de usuario, descompuestas
en funcionalidades siguiendo un modelo iterativo e incremental.
5.2 Evolución del desarrollo
De forma previa al comienzo del desarrollo se llevó a cabo una etapa de estudio de estado
del arte de los proyectos existentes exponiendo las principales ventajas y puntos débiles de
cada una de ellas y elaborando un análisis comparativo. A continuación se realizó un análisis
de requisitos inicial, estableciendo las diferentes funcionalidades que debe ofrecer el sistema
al usuario y su arquitectura general. A continuación se procedió al diseño de los módulos y
se comenzó su elaboración en iteraciones.
5.3 Iteraciones
En este proceso de desarrollo, cuya metodología elegida es una aproximación a la metodología ágil Extreme Programming siguiendo un modelo iterativo e incremental, por los
motivos expuestos en la Sección 5.1 del Capítulo 5, la labor del cliente la ha realizado D.
Ramón Hervas Lucas, director del presente Trabajo Fin de Grado, con quien se han planificado las diferentes iteraciones del desarrollo y se han seleccionado las historias de usuario
pertenecientes a cada iteración.
A continuación se muestran las iteraciones realizadas en el desarrollo, describiendo las
partes implementadas y los hitos conseguidos en cada una de ellas, junto con sus plazos de
tiempo.
102
Iteración 1
El principal objetivo que se persigue en esta iteración es la construcción del prototipo del
sistema. Este prototipo debe operar de forma aislada, simulando la operación en colaboración
con los demás componentes del sistema, aún no implementados.
En el caso de las operaciones que requieran la recuperación de datos de la base de datos,
el prototipo operará sobre un conjunto de datos predefinido y almacenado en la aplicación,
por lo que los cambios realizados a partir de la acción del usuario no son almacenados de
forma persistente, limitándose al contexto de la ejecución de la aplicación.
Esta iteración cuenta con las siguientes historias de usuario:
Los usuarios pueden visualizar un catálogo de productos.
Los usuarios pueden realizar la búsqueda de un producto escribiendo el nombre.
Los usuarios pueden realizar la búsqueda de un producto dictando el nombre.
Los usuarios pueden realizar la búsqueda aplicando un filtrado progresivo a medida
que escriben el producto buscado.
Los usuarios pueden visualizar la foto del producto.
Los usuarios pueden visualizar la categoría del producto.
Los usuarios pueden crear sus propias listas.
Los usuarios pueden borrar sus propias listas.
Los usuarios pueden añadir productos la lista.
Los usuarios pueden eliminar productos la lista.
Estas historias de usuario se traducen en las siguientes tareas:
Creación de la vista de catálogo
Creación de la vista de lista
Implementación de las funcionalidad de búsqueda
Implementación y Gestión de listas
Esta iteración se llevó a cabo desde el 22 de Diciembre de 2015 hasta el 22 de Enero de
2015. La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama
de Gannt de la Figura 5.2.
Iteración 2
El principal objetivo que se persigue en esta iteración es la construcción de la base de datos
del sistema. Esta base de datos sigue la estructura detallada en la Sección 4.4 del Capítulo
103
4. En esta operación se implementa la base de datos completa, incluyendo las clases de
entidades y la interfaz pública de operaciones. Su desarrollo es integrado en cada una de las
vistas, observando su correcto funcionamiento.
Esta iteración cuenta con las siguientes historias de usuario:
Los usuarios deben contar con una base de datos externa que respalde el contenido que
pueden visualizar desde la aplicación.
Los usuarios deben poder almacenar sus listas en una base de datos interna a la aplicación.
Estas historias de usuario se traducen en las siguientes tareas:
Diseño y construcción del modelo de base de datos
Conexión con base de datos externa
Conexión con base de datos interna
Interfaz de operaciones públicas
Construcción de clases de entidades
Integración con el modelo de vistas
Actualización automática del contenido de las vistas
Esta iteración se llevó a cabo desde el 23 de Enero de 2015 hasta el 27 de Febrero de
2015. La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama
de Gannt de la Figura 5.3
Iteración 3
El principal objetivo que se persigue en esta iteración es la comunicación con los dispositivos iBeacon. Por ello y partiendo del SDK de Estimote se implementa el módulo de
Comunicaciones. Una vez implementado el módulo de comunicaciones se realizan las primeras pruebas mediante las aplicaciones Estimote y Particle Detector, en las que se observa
que el valor de RSSI presenta variaciones, en principio debidas a la fluctuación de la señal.
Sin embargo, mediante la realización de pruebas se llega a la conclusión de que esa fluctuación no es debida sólo a las que suelen ser sus causas principales, como la difracción,
refracción y multitrayectos, sino también a una mala calibración del dispositivo por parte
del fabricante y a la orientación de las balizas. Finalmente se resuelven ambos problemas
mediante una nueva calibración y el estudio de la orientación correcta y la posterior decisión
final de colocar los dispositivos en una orientación vertical.
Sólo queda el problema de la fluctuación de la señal ocasionado por sus causas típicas, de
manera que se estudia la frecuencia de la señal idónea para eliminar esa fluctuación, llegando
104
a la conclusión de que la frecuencia idónea son 1500ms, por lo que se decide modificar el
valor de la frecuencia de la señal mediante el SDK de Estimote.
Esta iteración cuenta tan sólo con una historia de usuario, que sin embargo es de suficiente
magnitud como para ocupar toda la iteración.
El dispositivo del usuario debe ser capaz de comunicarse con dispositivos iBeacon.
Esta historia de usuario se traduce en las siguientes tareas:
Integración de la API de los dispositivos iBeacon
Comunicación con los dispositivos iBeacon
Primera y Segunda Etapa de pruebas:
• Calibración del dispositivo
• Prueba Colocación dispositivo
• Prueba frecuencia idónea
Esta iteración se llevó a cabo desde el 2 de Marzo de 2015 hasta el 23 de Marzo de 2015.
La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de
Gannt de la Figura 5.4.
Iteración 4
En esta cuarta iteración el principal objetivo que se persigue es la implementación de
una aplicación para realizar las pruebas en el Salón de Grados de la Escuela Superior de
Informática. Esta aplicación debe ser capaz de identificar cualquier cambio dentro de las
regiones conocidas y estimar la posición del usuario, calcular el camino mínimo y por último
visualizar la transición producida por dicho cambio mediante una animación.
En esta iteración por lo tanto se hace uso del módulo de Comunicaciones, se implementan
el módulo de Tratamiento de Señal para hacer una distinción con el tipo de señal recibida,
el módulo de Posicionamiento para asignar a la frecuencia de señal recibida una posición, el
algoritmo de Dijkstra para obtener el camino mínimo al realizar cada cambio de posición y
finalmente la gestión de animaciones.
Para estudiar cómo se desarrollan los cambios, esta aplicación contará con un mapa que
simule la sala donde se realizan las pruebas y con los valores RSSI obtenidos de las distintas
balizas que reflejen la decisión a los cambios de ubicación del usuario.
Esta iteración cuenta con las siguientes historias de usuario:
El usuario puede visualizar un mapa de la sala de pruebas.
El usuario puede visualizar los valores de la señal de los dispositivos.
105
El usuario puede visualizar su ubicación mediante una animación.
El sistema estima la ubicación del usuario.
Estas historias de usuario se traducen en las siguientes tareas:
Diseño y Creación de un mapa de la sala de pruebas
Diseño de la interfaz de prototipo.
Calculo del camino mínimo
• Representar estructura del grafo
• Implementación del algortimo de Dijkstra
Tratamiento de señal
• Implementación del módulo de tratamiento de señal
• Integración hilos
Interpretación de señales
• Creación de una mapa de potencias
• Registro de potencias de secciones registradas
• Implementación del módulo de Posicionamiento
Interpretación de la señal para determinar ubicación
Animación del recorrido
Esta iteración se llevó a cabo desde el 23 de Marzo de 2015 hasta el 18 de Mayo de 2015.
La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de
Gannt de la Figura 5.5.
Iteración 5
En esta quinta iteración y debido a los resultados obtenidos en las pruebas realizadas en la
iteración anterior, el principal objetivo que se persigue es la creación de un filtro que permita
eliminar los valores extremos producidos por la fluctuación de la señal. Para ello se implementa un filtro basándose en una media aritmética de todos los valores recibidos(Moving
Average), sin embargo los resultados siguen sin ser aceptables y basándose en el mecanismo
implementado, en la técnica Weighted Moving Average y la calibración de los dispositivos, se
crea un filtro que obtiene mejores resultados al no deshacerse de esos valores extremos.
Esta iteración cuenta con la siguiente historia de usuario:
El dispositivo del usuario debe ser capaz de filtrar valores extremos producidos por la
fluctuación.
106
Esta historia de usuario se traduce en las siguientes tareas:
Implementación del módulo de Filtrado de Señal
• Moving Average
• Filtro con intervalos de confianza
Esta iteración se llevó a cabo desde el 19 de Mayo de 2015 hasta el 27 de Mayo de 2015.
La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de
Gannt de la Figura 5.6.
Iteración 6
Una vez diseñada, implementada y probada la arquitectura del sistema mediante prototipos
de aplicaciones con mapas de prueba en los que sólo se registran los cambios de ubicación
y se muestran los valores de RSSI, en esta sexta iteración se crea la aplicación final. Esta
aplicación opera en colaboración con los demás módulos del sistema. Se diseña un mapa
de la sala y un mapa con las secciones pudiendo cambiar entre ambos modelos, en tiempo
de ejecución. Se debe generar una animación inicial de la ruta que debe seguir el usuario
y mostrar en todo momento el elemento al que se dirige y el número de elementos que le
quedan por coger.
Durante la fase de implementación del sistema de guiado surgen dos propuestas, la primera
de ellas se basa en guiar al usuario mediante orientaciones y la segunda se basa en nombrar
mediante voz qué es lo que puede ver el usuario. Aunque finalmente se opta por la segunda
propuesta se comienza a implementar la primera propuesta y se termina descartando.
Esta iteración cuenta con las siguientes historias de usuario:
El usuario puede visualizar un mapa de una nueva sala de pruebas.
El usuario puede visualizar un mapa de una nueva sala de pruebas mostrando las secciones.
El usuario puede cambiar el tipo de mapa.
El sistema proporciona al usuario la ruta con el camino óptimo.
El usuario visualiza una animación de la ruta con el camino óptimo.
El usuario puede visualizar el siguiente producto que debe coger.
El usuario puede visualizar el número de productos restantes por coger.
El usuario puede deshabilitar y habilitar la opción de guiado.
El sistema comunica al usuario la siguiente dirección.
Estas historias de usuario se traducen en las siguientes tareas:
107
Diseño de mapa sin secciones
Diseño de mapa con secciones
Nuevos datos para el mapa de posicionamiento
Diseño de la interfaz de la aplicación final
Implementación del algoritmo de fuerza bruta
Implementación del sistema de guiado
Guiado Orientaciones
• Integración Framework OpenEars
• Implementación brújula
• Análisis valores brújula
• Análisis valores acelerómetro
Guiado Visual
Esta iteración se llevó a cabo desde el 28 de Mayo de 2015 hasta el 23 de Junio de 2015.
La actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de
Gannt de la Figura 5.7.
Iteración 7
Una vez terminada la implementación del sistema y realizadas las pruebas, se revisa el código buscando partes susceptibles de ser mejoradas y nuevas funcionalidades. Se consideró
oportuno la adición de la clase NSFetchedResultsController y los protocolos asociados para
la realizar una solicitud de recuperación de datos. También se realizó una nueva implementación del algoritmo para la búsqueda del camino mínimo mediante el empleo de programación
dinámica, suponiendo un mayor coste en memoria en pro de tiempo de cómputo.
Esta iteración no contiene historias de usuario , albergando la realización de las siguientes
tareas:
Implementación del algoritmo de dinámica.
Optimización en gestión y almacenamiento.
Esta iteración se llevó a cabo desde el 24 de Junio de 2015 hasta el 3 de Julio de 2015. La
actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de Gannt
de la Figura 5.8.
Iteración 8
108
En esta iteración se añade un sistema de notificaciones que muestre una alerta al usuario
en una fecha y hora determinada por éste, en el momento de creación de una nueva lista, y la
opción de mandar la lista del usuario por correo.
Esta iteración cuenta con las siguientes historias de usuario:
El usuario puede configurar una alerta a modo de recordatorio al crear su lista.
El usuario puede recibir notificaciones.
El usuario puede mandar la lista por correo.
Estas historias de usuario se traducen en las siguientes tareas:
Implementación del servicio de notificaciones.
Integración de la funcionalidad de envío de correos.
Esta iteración se llevó a cabo desde el 28 de Junio de 2015 hasta el 2 de Julio de 2015. La
actividad desarrollada a lo largo de esta iteración puede observarse en el diagrama de Gannt
de la Figura 5.9.
109
110
Figura 5.3: Proceso de desarrollo: Iteración 2
Figura 5.2: Proceso de desarrollo: Iteración 1
111
Figura 5.5: Proceso de desarrollo: Iteración 4
Figura 5.4: Proceso de desarrollo: Iteración 3
112
Figura 5.7: Proceso de desarrollo: Iteración 6
Figura 5.6: Proceso de desarrollo: Iteración 5
113
Figura 5.9: Proceso de desarrollo: Iteración 8
Figura 5.8: Proceso de desarrollo: Iteración 7
Capítulo 6
Resultados
E
este capítulo se presentan las principales pruebas realizadas junto con los resultados
obtenidos tras el desarrollo del sistema iBeacon para la recepción de señales procedentes de balizas BTLE (Bluetooth Low Energy) y posterior localización, animación y guiado al
usuario.
N
En primer lugar se realizan unas pruebas iniciales para observar el comportamiento de
las señales. Tras las primeras pruebas y los resultados obtenidos se observan variaciones
en la frecuencia y se plantean distintas causas que pudieran provocar dicha variación. Una
vez implementadas las soluciones y tras una localización positiva se plantea el escenario de
localización de un usuario en una superficie comercial. Por último se realiza una conclusión
personal sobre las pruebas obtenidas.
De esta manera, los experimentos se han realizado en tres etapas principales y con diferentes objetivos en cada una de ellas. La primera etapa consiste en una primera toma de
contacto para observar el comportamiento de la señal Bluetooth. La segunda etapa se ha centrado en el análisis de RSSI en diferentes posiciones, y su relación con la distancia y en base
a estos resultados a la configuración del sistema iBeacon con el fin de validar la posibilidad
de implementación del sistema de localización basado en iBeacon. Finalmente, en la tercera
etapa se simulan distintos entornos de localización con el fin de analizar la viabilidad de
implementación del sistema iBeacon como método de localización en interiores.
En el desarrollo de las pruebas se han utilizado tres balizas iBeacon para la emisión de las
señales Bluetooth y un dispositivo iPhone 5 para la recepción y lectura de RSSI.
6.1 Primera etapa: Análisis del comportamiento de la señal BLE
Como ya se explicó en la Sección 4.6.1 del Capítulo 4, un iBeacon se encarga de transmitir
paquetes de datos basándose en la tecnología BLE. De estos paquetes de datos se utilizan los
valores de UUID, Major, Minor y Tx Power para la identificación del mismo y el cálculo
estimado de la distancia a la que se encuentran los dispositivos. En esta primera etapa, como
ya se ha comentado, se observa el comportamiento de la señal Bluetooth mediante el uso de
diferentes aplicaciones: Estimote y Particle Detector.
Este primera etapa se llevó a cabo en el salón de grados de la Escuela Superior de Infor115
Figura 6.1: App Estimote
Figura 6.2: App Particle Detector
mática colocando tres balizas en la sala.
Mediante las pruebas con estas aplicaciones, se comprobó que el valor de RSSI presentaba
variaciones. Estas variaciones del valor RSSI, se debían a la fluctuación de la señal haciendo
complicada la determinación de la distancia. Sin embargo en una de las pruebas se descubrió
que un dispositivo presentaba variaciones del valor de RSSI en igualdad de condiciones
que las otras dos, es decir, con la misma posición y la misma colocación. Esta variación
perteneciente a la baliza azul se debía a una mala calibración por parte del fabricante de
manera que se realizó una calibración del dispositivo(Anexo A). Al realizar esta calibración
se obtuvieron resultados similares para las tres balizas.
Otro agente que variaba el valor RSSI de las tres balizas fue la colocación de éstas. De la
misma manera que el estudio anterior, esta prueba consiste en la toma de 30 medidas de una
de las balizas cambiando la orientación de ésta a una distancia de 5 y 10 metros, obteniendo
los siguientes resultados:
116
Distancia Real
No Mediciones
Horizontal RRSI Media
Distancia Media
Dif. Distancia
No Mediciones
Vertical
RRSI Media
Distancia Media
Dif. Distancia
5m
30
-63.11
3.21
1.79
30
-65.11
4.06
0.94
10m
30
-68.21
5.70
4.30
30
-72.65
8.84
1.16
Tabla 6.1: Resultados de estudio de valores según el plano de orientación.
Como se puede observar en las Tabla 6.1, los resultados más exactos se obtienen colocando
la baliza verticalmente. Por lo tanto se decide orientar las tres balizas en su eje vertical.
Mediante las pruebas con estas aplicaciones, se comprueba que el valor de RSSI variaba
debido a:
Colocación de dispositivos.
Mala calibración por parte del fabricante.
Fluctuaciones.
Los dos primeros puntos se consiguen resolver, sin embargo aun quedan por resolver las
causas principales de fluctuación de RSSI como son la difracción, refracción y multitrayectos. Por ello se realizó un estudio acerca de la posibilidad de ajustar la potencia de transmisión y la frecuencia de transmisión de pulsos con el fin de minimizar la fluctuación. A la
hora de buscar la potencia de transmisión y la frecuencia de emisión de señales idónea de los
dispositivos iBeacons de Estimote, se partió del SDK de Estimote. Se obtuvieron resultados
positivos, ya que era posible modificar ambos valores, el primero de ellos ya utilizado en la
calibración del dispositivo.
6.2 Segunda etapa: Análisis de RRSI
La segunda etapa se llevó a cabo en el salón de grados de la Escuela Superior de Informática y consistió en dos fases de mediciones (primera fase a 5 metros y segunda fase a 10
metros), cada una de ellas con 30 medidas de RSSI, colocando las tres balizas verticalmente
en la pared.
Esta etapa pretende solventar los problemas de fluctuación mediante el estudio de la frecuencia de señal idónea de manera que se toman 30 medidas de RSSI con los siguientes
intervalos de repetición: 100 ms, 500 ms, 1000 ms, 1500 ms 2000 ms, llevando a cabo un
estudio con el fin de configurar un intervalo de repetición que produzca una señal estable,
obteniéndose los datos de la Tabla 6.2.
117
iBeacon1
5m
10m
iBeacon2
5m
10m
iBeacon3
5m
10m
PRI
Distancia Real
100 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-67.12
3.4
5.11
-62.3
1.16
2.92
-68.36
3.02
5.76
-64.11
0.7
3.59
-67.45
1.3
5.31
-70.1
2.01
7.14
500 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-63.9
1.3
3.48
-67.1
1.89
5.02
-68.5
1.48
5.96
-71.2
3.34
8.18
-65.89
1.5
4.3
-70.17
3.51
7.22
1000 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-63.49
1.2
3.34
-68.7
1.09
6.11
-64.3
2.2
3.87
-71.47
3.16
8.38
-61
0.88
2.54
-70.97
2.99
7.91
1300 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-68.63
2.1
6.05
-66.1
3.1
4.79
-68.4
1.1
5.86
-67.6
1.5
5.41
-64.01
2.76
3.55
-67.13
3.68
5.14
1500 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-63.89
0.54
3.45
-72.18
2.1
8.65
-63.2
0.91
3.24
-71.7
1.8
8.51
-64.2
0.76
3.8
-71.53
1.53
8.45
2000 ms
RRSI Media(dBm)
Desviación
Distancia según RRSI
-63.53
1.4
3.26
-70.09
2.99
7.17
-68.71
3.1
6.19
-68.82
1.87
6.25
-68.83
1.56
6.31
-65.17
2.27
4.06
Tabla 6.2: Medición de fluctuación de RSSI con diferentes intervalos de repetición de pulsos.
Los valores marcadas en color verde son aquellos que se adaptan con mejor exactitud a la
distancia real de medida. Se trata de los valores de desviación típica sobre un valor central
y la distancia estimada. Como se puede observar en la tabla 6.2, la señal iBeacon presenta
una mayor estabilidad en los valores con un intervalo de repetición de pulsos de 1500ms. De
manera que una vez finalizada la segunda etapa y tras los resultados obtenidos se establece
el intervalo de pulsos en 1500ms.
6.3 Tercera etapa: Desarrollo del experimento
La tercera etapa se llevó a cabo en el salón de Grados y en el laboratorio MAMI de
la Escuela Superior de Informática. El objetivo de esta etapa es analizar la viabilidad de
implementación del sistema iBeacon mediante el análisis de 3 experimentos, dos de ellos en
el Salón de Grados y el tercero en el laboratorio MAMI.
Primer Experimento
El primer experimento consiste en analizar los cambios que se producen en la sala al
cambiar de ubicación. Para ello lo primero que se realizó fue un plano de la sala simulando
los pasillos de un supermercado. A continuación se realizó un estudio para identificar el
118
mayor numero de secciones que se pudieran registrar mediante el uso de 3 balizas. Debido al
numero reducido de balizas, las medidas de la sala, el ser un espacio abierto y a la distancia
mínima y máxima entre balizas que toman los valores de 3 y 10 metros respectivamente, sólo
se pudo registrar 4 secciones. Estas secciones corresponden a los tag 01, 05, 31 y 35 de la
Figura 6.3.
Figura 6.3: Primer Experimento
En principio se registraron 6 secciones, sin embargo las dos secciones más apartadas reciben una señal muy similar a los dos secciones más cercanas que pertenecen a los tag 31 y
35, de manera que las pruebas intercambiaban los valores de las dos secciones a la izquierda
y las dos secciones a la derecha, por lo que se decidió registrar 4 secciones.
El experimento consiste en recorrer cada una de las 4 secciones registradas dos veces de
manera aleatoria, de manera que el sistema iBeacon sea capaz de determinar la posición que
se ocupa y realizar una animación hasta ese punto.
Durante la realización de este experimento se comprobó que el valor de RSSI presentaba
variaciones cuando el usuario se acerca a una luz fluorescente produciendo una variación de
-65 -75, que equivale a un error de medida de +-2.5metros. Además, cuando se desplaza alrededor de la sala, se descubrió que el propio usuario actúa de pantalla dando al dar la espalda
a un dispositivo produciendo una variación en el valor RSSI equivalente a 2-3 metros.
119
Con estos resultados se llega a la conclusión de que el posicionamiento en interiores empleando el uso de iBeacon no está orientado a la exactitud en la posición concreta del usuario,
sino que estará enfocado a determinar la sección en la que se encuentra.
Segundo Experimento
El segundo experimento se realiza en la misma sala con la misma posición de los dispositivos iBeacon y las mismas secciones registradas, sin embargo este experimento consiste en
analizar y monitorizar las señales procedentes de las tres balizas a medida que el usuario se
desplaza por las 4 secciones establecidas siguiendo un itinerario. Este itinerario consiste en
una ruta compuesta por las 4 secciones que contiene la sala.
El itinerario comienza en el tag 43, y se visitan en orden los tag: 05, 35, 31, 01, 31, 05 y
03. La ruta se realiza de manera constante usando el sistema implementado que incorpora un
filtro.
El entorno interior de la sala y sus dimensiones, permiten establecer los dispositivos en un
radio no superior a 10 metros, por lo que el rango de proximidad se centrará entre Immediate
y Near. Para situar al usuario dentro del entorno se analizara la frecuencia de señal que
recibe de cada uno de los dispositivos con posiciones conocidas identificando en que rango
de proximidad se encuentran. La ubicación de los iBeacon es:
iBeacon Morado colocado en la pared detrás de la posición del usuario.
iBeacon Verde colocado en la pared entre los tag 00 y 30.
iBeacon Azul colocado en la pared entre los tag 06 y 36.
La Tabla 6.3 muestra una comparativa entre los rangos de proximidad real y la proximidad
obtenida con la medida de RSSI.
Punto de
Medida
05
35
31
01
31
05
01
iBeacon Morado
Real
Medida
Near
Near
Immediate Immediate
Immediate Immediate
NULO
Near
Immediate
Near
Near
Near
Near
Immediate
iBeacon Verde
Real
Medida
Near
Near
Near
Near
Immediate Immediate
Immediate Immediate
Immediate
NULO
Near
Near
Immediate
Far
iBeacon Azul
Real
Medida
Immediate
Near
Immediate Immediate
Near
NULO
Near
Near
Near
Far
Immediate Immediate
Near
Near
Tabla 6.3: Comparativa de proximidad real-media.
Con estos resultados se finaliza el experimento y se concluye que el dato principal para
determinar la ubicación de un usuario es el rango de distancias, haciendo uso de las pro120
ximidades Near e Immediate, que aseguran una localización admisible, obviando el uso de
la proximidad Far ya que se utiliza para distancias de más de 10 metros y por lo tanto no
permite una correcta localización. Por tanto, si sólo se desea contener proximidades Near e
Inmediate, el factor más influyente e importante a tener en cuenta es la correcta colocación
de los dispositivos que permita establecer zonas de cobertura comprendidas entre estos dos
rangos.
Tercer Experimento
El tercer experimento se realiza en el laboratorio MAMI, en el que se colocan de manera
análoga los tres dispositivos y se registran 4 secciones. Para ello lo primero que se realizo fue un plano del laboratorio simulando un supermercado que contiene varias secciones,
distinguiendo dos tipos de mapas:
Plano esquemático dibujado del laboratorio, como muestra la Figura 6.4.
Plano esquemático dibujado del laboratorio que te permita distinguir las distintas secciones, como muestra la Figura 6.5.
Figura 6.4: Plano Esquemático del laboratorio
Figura 6.5: Plano esquemático del laboratorio con secciones
A continuación y de manera análoga al Experimento 1 se realiza un estudio para identificar
el mayor número de secciones que se pudieran registrar mediante el uso de tres balizas.
121
Debido al número reducido de balizas, las medidas de la sala y a la distancia mínima y
máxima entre balizas que toman los valores de 3 y 10 metros respectivamente, la cantidad
de fluctuación debido a los números dispositivos y fluorescentes que se encuentran en la sala
y generan ondas electromagnéticas, se consiguen únicamente 4 secciones a pesar de tener
armarios que hacen la función de pasillo y por tanto de pantalla.
De manera análoga al experimento 2, este experimento consiste en analizar y monitorizar
las señales procedentes de las tres balizas a medida que el usuario se desplaza por las 4
secciones establecidas siguiendo una ruta. Esta ruta, que parte de la posición en la que se
encuentra inicialmente el usuario, pasa por las secciones de Perfumería, Mascotas, Bollería y
Frutas y Verduras, repitiendo el ciclo dos veces y finalmente regresa a la posición inicial.
Por lo tanto, el itinerario comienza en el tag 64, y se visitan en orden los tag: 63, 60, 10,
13, 63, 60, 10 y 13. La ruta se realiza de manera constante usando el sistema implementado,
que incorpora un filtro.
Al tener este laboratorio unas medidas similares al salón de grados donde tuvo lugar el
Experimento 2, se vuelve a establecer el rango de proximidad entre Immediate y Near.
El mapa se ha realizado de la misma manera que el usado en el salón de Grados, pero en
este caso, se ha dividido el aula en 7 filas y 5 columnas.
La ubicación de los iBeacon es:
iBeacon Morado colocado en la pared detras del tag 54 que corresponde a la sección
de hogar, representada por una pila.
iBeacon Verde colocado en la estanteria detras del tag 41 que corresponde a la sección
de congelados y bebidas, representado por el símbolo del congelado y una botella.
iBeacon Azul colocado en la pared detras del tag 10 que corresponde a la sección de
horno y bollería, representado por una rebanada de pan.
La Tabla 6.4 muestra una comparativa entre los rangos de proximidad real y la proximidad
obtenida con la medida de RSSI.
Era de esperar que estos valores fueran peores que en el Experimento 2, debido a la cantidad de fluctuación, sin embargo estos valores sólo son peores en la sección de Frutería cuyo
tag es el numero 13 y contiene un único acierto. Esto sucede por no tener ningun dispositivo
cerca, y por el contrario el resultado del resto de secciones, al disponer de un dispositivo
cerca, es similar al obtenido en el Experimento 2. De igual manera que en el experimento 2
el factor más influyente e importante a tener en cuenta es la correcta colocación de los dispositivos que permita establecer zonas de cobertura comprendidas entre estos dos rangos.
Como ya se ha comentado con anterioridad, una vez finalizado el experimento y observando los resultados obtenidos en la Tabla 6.4 se concluye que el dato principal para determinar
122
Punto de
Medida
63
60
10
13
63
60
10
13
iBeacon Morado
Real
Medida
Immediate Immediate
Near
Near
Near
NULO
Near
Far
Immediate Immediate
Near
Near
Near
Far
Near
Far
iBeacon Verde
Real Medida
Near
Near
Near
Near
Near
Near
Near
Near
Near
Near
Near
Near
Near
Far
Near NULO
iBeacon Azul
Real
Medida
Near
Far
Near
Far
Immediate Immediate
Near
Far
Near
NULO
Near
Far
Immediate Immediate
Near
Far
Tabla 6.4: Comparativa de proximidad real-media.
la ubicación de un usuario es el rango de distancias, haciendo uso de las proximidades Near
e Immediate, que aseguran una localización admisible, obviando el uso de la proximidad Far
ya que se utiliza para distancias de más de 10 metros y por lo tanto no permite una correcta
localización.
6.4 Conclusión
Una vez realizadas las pruebas se llega a la conclusión de que el sistema implementado no
está orientado a la exactitud en la posición concreta del usuario sino enfocado a determinar
la sección en la que se encuentra. Partiendo de esta base se determina que el usuario se
encuentra en un rango de distancias, tomando como referencia los rangos establecidos en
iOS cuyos valores son:
Near: El nodo móvil se encuentra a una distancia menor de 2 metros.
Immediate: El nodo móvil se encuentra a una distancia comprendida entre 2 y 10
metros.
Far: El nodo móvil se encuentra a una distancia mayor de 10 metros.
El radio de acción máximo de los iBeacons está en 70 metros pero en realidad es mucho
menor, como se ha podido comprobar en las pruebas realizadas, debido a las interferencias
que producen los elementos circundantes tales como mobiliario, paredes, vidrio, hormigón,
el propio cuerpo humano e incluso los agentes atmosféricos.
Los iBeacons han sido elogiados por su capacidad para proporcionar servicios de localizacion indoor, asegurando que pueden localizar un dispositivo móvil con una precisión
de centímetros mediante la triangulación de la señal desde múltiples balizas. Sin embargo
tras una búsqueda y realizar las pruebas se puede afirmar que la no hay ninguna función de
ubicación por triangulación implementada dentro del Protocolo BLE o API de iBeacons.
Además, el rango de localización de un nodo móvil respecto a la posición del iBeacon
oscila en metros, de ahí que Apple recomiende [App] usar el valor RSS para la localización,
123
ya que al oscilar el valor en metros, nunca se puede llegar a tener una certeza en la precisión
de centímetros y por lo tanto no puede usarse para localizar con exactitud un nodo móvil.
Además, dependiendo del sistema operativo, en casos como iOS7 es necesario estar al menos 20 segundos en la zona de cobertura del iBeacon para recibir una notificación [You14].
Si se pretende una localización basada en la exactitud del usuario, sería necesario una
mayor cobertura que implique mayor información y mayor fiabilidad, ya que al recibir la
señal de múltiples dispositivos y por múltiples caminos se garantiza una mayor exactitud.
Para ello sería necesario una red con topología de malla en el que la distancia entre nodos
tenga un máximo de 10 metros y un mínimo de 4 metros, de manera que el nodo móvil
reciba la señal de un número suficiente de nodos de referencia para realizar una estimación
más correcta de la posición del nodo móvil.
Para la superficie en la que se han realizado las pruebas, lo idóneo hubiera sido un total
de 9 nodos de referencia, donde el esquema de coberturas quedaría como muestra la Figura
6.6.
Figura 6.6: Nodos de Referencia en topología de malla
Un aumento de los nodos de referencia supondría una mayor exactitud, sin embargo utilizar más nodos de los necesarios supondría una perdida de precisión, ya que lo más lejanos
contendrían valores extremos que se utilizarían en la estimación y por tanto corromperían el
cálculo de la media de la señal [BP00]. De manera que aunque se tengan multiples nodos de
referencia solo se utilizarían los n nodos más cercanos.
124
6.5 Modulos funcionales de la aplicación
La estructura de la aplicación ShoppingBeacon se compone de los siguientes módulos
funcionales:
Catálogo
Listas
Comprar
El acceso a los diferentes módulos se realiza a través de la barra de acceso directo situada
en la parte inferior de la pantalla, aunque por defecto aparece el Catálogo de productos.
Cada uno de estos módulos es examinado a continuación, incluyendo capturas de la interfaz
de usuario que reflejan la operación con cada uno de ellos.
Catálogo
Permite al usuario buscar cualquier producto mediante la barra de búsquedas que permite
localizar el producto de manera escrita o hablada, o de manera manual buscando entre todos
los productos del catálogo.
Figura 6.7: Catálogo de productos
125
Listas
Permite al usuario generar una lista personalizando ésta con el título que desea el usuario. Al generar la lista aparece una ventana emergente, preguntando si se desea realizar una
alerta a base de recordatorio. Una vez creada la lista, se puede editar con la incorporación
y eliminación de productos. De la misma manera que en el módulo funcional del Catálogo,
la obtención del producto que se desea añadir a la lista se puede hacer de manera manual
o mediante una barra de búsqueda que permite al usuario escribir el producto que desea o
dictarlo. También permite al usuario mandar por correo la lista generada.
Figura 6.8: Listas de listas
Figura 6.9: Creación de alertas
126
Figura 6.10: Selección de fecha y hora
Figura 6.11: Notificación de alerta
127
Figura 6.13: Modficaión de la lista de
porductos
Figura 6.12: Lista de procutos
128
Figura 6.14: Generar un correo con la lista de la compra
129
Comprar
Este módulo presenta un mapa del centro en el que se realiza la compra, pudiendo alternarse con otro mapa de la zona en la que aparecen las secciones. Este módulo comienza
calculando la ruta que suponga la ruta de coste mínimo y pase por todos los productos que
desea el usuario, y en base a esta ruta genera una animación. A continuación se dedica a
la monitorización de señales y a detectar cualquier cambio en la posición del usuario para generar la animación del movimiento. La interfaz muestra en todo momento el siguiente
producto a recoger y los productos restantes. Además, el usuario puede añadir la opción de
guiado mediante voz.
Figura 6.16: Mapa de interior consecciones
Figura 6.15: Mapa de interior
130
Capítulo 7
Conclusiones y Propuestas
E
este capítulo se muestran los objetivos alcanzados durante el desarrollo de este Proyecto Fin de Grado y se detallan el posible trabajo futuro de cara a la mejora o la
ampliación del sistema desarrollado. Se finaliza con una conclusión personal de lo que ha
supuesto llevarlo a cabo.
N
7.1 Objetivos Alcanzados
Una vez finalizado, el presente Trabajo Fin de Grado cumple con todos y cada uno de
los objetivos que se especificaron en el Capítulo 2. Sin embargo, mas allá de la lista formal
de requisitos, el propósito del presente Trabajo Fin de Grado es el que se anunció como
motivación en la Sección 1.4 del Capítulo 1: construir un sistema que se basa en la recepción
de señales que permitan localizar al usuario dentro de un edificio en un mapa previamente
facilitado y con unos puntos a recorrer para guiar al usuario hasta ellos. Por ello y basándose
en el análisis de las aplicaciones ya existentes que ofrecen un servicio similar, que se expone
en el Capítulo 3, se muestra la Tabla 7.1, señalando las características deseables que ha de
tener la aplicación y cuáles han sido alcanzadas, de manera que permita comprobar en qué
medida se ha cumplido con esta especificación inicial.
Durante el desarrollo del proyecto se ha tratado de utilizar enfoques de diseño y prácticas
de programación y herramientas que contribuyan no sólo a un producto final caracterizado
por lo que ofrece sino por su calidad. El diseño del sistema se ha realizado tratando de garantizar la independencia de los subsistemas obteniendo un sistema fácilmente mantenible y
extensible tanto a la hora de generar rutas en distintas superficies comerciales o la incorporación de más dispositivos beacon que supongan una mayor exactitud.
131
App Listas de la Compra
App Localización Indoor
Características
- La app debe contener una base de datos con los productos
del centro comercial al que va a estar destinada la app. 3
- Los productos deben contener una imagen que haga más
intuitiva la localización dentro del catálogo de productos. 3
- Los productos deben tener un precio asignado. 3
- Los productos pueden ser buscados de manera escrita o
por comandos de voz. 3
- El usuario puede crear varias listas. 3
- El usuario puede visualizar el precio de la lista con los
productos ya escogidos. 3
- El usuario puede compartir la lista con cualquier otra persona. 3
- El usuario puede añadir una alerta a cada lista para que le
avise en una fecha concreta. 3
- Indicación de los productos disponibles 3
- Búsqueda de productos disponibles 3
- Uso de plano esquemático dibujado interior 3
- Posicionamiento interior 3
- Visualización de Servicios interiores 3
- Rutas Origen-Destino 3
- Guiado 3
Tabla 7.1: Características de ShoppingBeacon
132
7.2 Trabajo Futuro
El presente Trabajo Fin de Grado cumple con todos los requisitos descritos en la Sección 2.2 del Capítulo 2, sin embargo durante el desarrollo del sistema surgen nuevas vías de
trabajo que pueden mejorar el sistema ShoppingBeacon, y que debido a restricciones temporales no se han llevado a cabo, por lo que se proponen como trabajo futuro. Las siguientes
propuestas de ampliación y mejora son:
Integración de un servidor de base de datos: Uno de los objetivos del presente Trabajo Fin de Grado es el acceso a un catálogo remoto, sostenido por una base de datos,
que permita consultar los distintos productos. Debido a restricciones temporales dicha
base de datos externa consiste en un archivo SQLite interno en la propia carpeta de la
aplicación. Esta base de datos almacenará los datos de carácter persistente y simula el
comportamiento como si de un servidor de base de datos se tratara, al ser necesario
realizar consultas a ésta para mostrar los productos. Sin embargo no es posible actualizar de forma remota los datos que almacena y supone un coste añadido en memoria. Es
por ello que se propone como trabajo futuro un servidor de base de datos que almacene
los catálogos disponibles para el usuario. Con la implementación de este servidor de
base de datos se podrá realizar una actualización periódica de los catálogos, como es
el caso del precio de los productos o la adición de nuevos productos, sin necesidad de
recurrir a actualizaciones de la App.
También se propone, de manera análoga a la aplicación myShopi comentada en la Sección 3.2 del Capítulo 3, hacer una distinción inicial con la superficie comercial donde
se va a realizar la compra. De esa manera se podría acceder a la lista de productos,
precios y mapa de la superficie comercial de cada uno de los supermercados. Toda esta
información estaría disponible en el servidor de base de datos por lo que la App realizaría una revisión periódica para mantener los datos accesibles al usuario actualizados.
Añadiendo un servidor de base de datos se dispondría de un mayor volumen de memoria, se ofrecería más funcionalidad a la App y se mantendrían los datos actualizados,
por lo que tendría una prioridad alta a la hora de realizar el trabajo futuro.
Posibilidad de reajustar el algoritmo de localización: Debido a la inexactitud en
la localización del usuario producida por la fluctuación de la señal y el uso de tres
dispositivos beacon, se determina en la Sección 6.4 del Capítulo 6 que el sistema está
enfocado a determinar la sección en la que se encuentra. Sin embargo, si se desea
una localización basada en la exactitud del nodo móvil, sería necesaria una mayor
cobertura que implique mayor información y por tanto mayor fiabilidad, ya que al
recibir la señal de múltiples dispositivos y por múltiples caminos se garantiza una
mayor exactitud. Para ello se propone una topología de malla, donde los dispositivos
tengan un radio entre ellos en un rango mayor a cuatro metros y menor de diez metros,
133
consiguiendo por tanto que el nodo móvil reciba más señales y de esa manera realice
una estimación más correcta.
Un aumento de los nodos de referencia supondría una mayor exactitud, sin embargo
utilizar más nodos de los necesarios supondría una perdida de precisión, ya que los
más lejanos contendrían valores extremos que se utilizarían en la estimación y por
tanto corromperían el cálculo de la media de la señal; de manera que aunque se tengan múltiples nodos de referencia solo se utilizarían los k nodos más cercanos. Según
muestran Bahl y Padmanabhan en su estudio RADAR [BP00], el número de nodos de
referencia idóneo para el posicionamiento es 5. Por lo tanto, para estimar la posición
del nodo móvil en el sistema, se utilizaría una sistema basado en la cercanía a múltiples nodos de referencia, usando de igual manera la fuerza de la señal recibida para
localizar los 5 nodos más cercanos en localizaciones conocidas al estar almacenados
en un mapa de potencias. Una vez almacenados los 5 nodos más cercanos se aplicaría la función propuesta por Serodio y Coutinho [CS] que consiste en una función
difusa asignando pesos a los nodos tomados como referencia para calcular las coordenadas del nodo móvil. La asignación de pesos se basa en la proximidad de los nodos
de referencia, asignando pesos mayores a los nodos más cercanos, cuyo valor en la
ponderación desciende cuando aumenta la distancia desde el nodo móvil.
134
7.3 Conclusión Personal
Durante el desarrollo del Trabajo Fin de Grado un Ingeniero debe hacer uso de los conocimientos adquiridos en los años que se ha formado, no sólo pertenecientes a los campos de la
informática, sino a muchas más áreas de conocimiento como las Matemáticas, Álgebra, Estadística, incluso Sociología, aunque dadas sus características y las restricciones temporales
numerosas áreas no hayan tenido cabida en él.
El presente Trabajo Fin de Grado constituye el fin de la formación de un Ingeniero Informático, sin embargo y a pesar de acabar mi formación, durante el desarrollo me he dado
cuenta de que la formación adquirida durante estos años es sólo la punta del iceberg y el
haber terminado este proceso de formación no implica que haya que dejar de formarse, ya
que la nuestra es una ciencia en constante evolución en la que todos los días se aprende algo
nuevo.
El desarrollo de este Trabajo Fin de Grado ha supuesto la experiencia más cercana durante
toda la carrera a un proyecto real y de gran envergadura. Considero que a partir de este
momento soy capaz de desempeñar mi labor profesionalmente, debido en gran parte a su
desarrollo en el que se establecen unos requisitos y he buscado la solución más apropiada
para cada uno de ellos, afrontando varios problemas como puede ser el desconocimiento
sobre un área y siendo necesaria la formación autodidacta.
Es por ello que me siento orgulloso de haber afrontado y resuelto cada uno de los objetivos
establecidos, de haber escogido esta magnífica carrera en la que no se deja de aprender y de
ser parte de esta gran área de la ciencia en la que somos capaces de imaginar y desarrollar
sistemas capaces de buscar soluciones a las necesidades de las personas y facilitar nuestro
día a día.
135
ANEXOS
137
Anexo A
Fundamentos sobre tecnologías de localización
De manera genérica, un sistema de localización en interiores consiste en un conjunto de
estaciones fijas y unos dispositivos inalámbricos asociados a las personas que se desean
seguir.
A la hora de tener diseñar el sistema se ha de tener en cuenta que debe ser usado por
cualquiera, ha de basarse en tecnologías estándares, que se encuentren disponibles a bajo
coste en el mercado, al igual que lo referente a la parte de instalar en el recinto el sistema que
vaya a implantarse, atendiendo a los costes de implantación y mantenimiento, fundamentales
para la posible expansión del sistema.
Atendiendo a las consideraciones expuestas y antes de realizar la elección entre las diferentes opciones disponibles para la localización en interiores, es necesario considerar las
características que debe satisfacer el sistema:
Disponibilidad: Posibilidad de que el sistema, ante una solicitud de localización, consiga una señal precisa para cumplir sus objetivos.
Precisión: Dispersión del conjunto de valores obtenidos de mediciones repetidas de
una magnitud, es decir, lo cerca que los valores medidos están unos de otros. La precisión puede variar significativamente en función de la aplicación que se pretende implementar, pudiendo variar de centímetros a metros.
Latencia: En términos de ingeniería se entiende como el tiempo entre una acción y
el resultado de la misma, en este caso, tiempo que pasa desde que un dispositivo se
mueve en la realidad, hasta que el sistema reconoce ese movimiento y lo representa en
la interfaz de la aplicación.
Respuesta en tiempo real: Tiempo mínimo que pasa entre que se realiza una lectura
de una posición y la siguiente. Conforme aumente la precisión, también ha de elevarse
la frecuencia de actualización y por tanto aumentar la tasa de muestreo.
Comunicación: La comunicación entre dispositivo y sistema de localización puede ser
unidireccional o bidireccional. En este caso se trata de comunicación unidireccional,
ya que el dispositivo inalámbrico será el encargado de enviar información al sistema,
y éste tendrá que ser capaz procesar la información para determinar de qué dispositivo
139
se trata y la posición que ocupa.
Otra de las consideraciones, más importantes a la hora de diseñar el sistema son los componentes hardware, específicamente los nodos de referencia del sistema que permiten saber
la posición del nodo móvil, que se tratará del usuario.
Esta elección marcará el diseño del resto del sistema y para ello se han tenido en cuenta
varias características que el sistema debe poseer:
Bajo coste: A la hora de implantar un sistema con una posible salida al mercado es necesario escoger unos componentes hardware que no impliquen realizar un desembolso
importante. Por lo tanto el precio de los mismo y la instalación no deberían suponer
un obstáculo para la implantación del sistema de localización y guiado.
Fácilmente accesible: Por la misma razón que el punto anterior, la tecnología escogida
ha de ser fácilmente adquirible en el mercado, de manera que el acceso a la tecnología
no suponga un problema a la hora de implantarse o mantenerse, bien sea por averías o
por un aumento en tamaño de la superficie comercial y por tanto el tamaño de la red
de nodos fijos del sistema.
Estándares: Ya que esáa orientado hacia la mayor implantación posible, es necesario
basarse en estándares reconocidos, que faciliten el diseño y desarrollo del sistema.
Compatibilidad: Por último y no menos importante, otra característica a tener en
cuenta es la compatibilidad en la comunicación de señales entre distintos tipos de
nodos de referencia y móviles. Decantándose por aquella que ofrezca más opciones y
facilidades, ya que supondrá un mejor resultado en la implantación del sistema.
A continuación se detallan las diferentes alternativas tecnológicas consideradas, para la implantación de sistemas de localización en interiores:
A.1 Wi-Fi
La creciente disponibilidad de dispositivos móviles así como la presencia masiva de redes
inalámbricas WiFi, capaces de soportar la localización de éstos, han aumentado en forma
significativa el interés del posicionamiento indoor a partir de la infraestructura de estas redes,
que permiten que, las aplicaciones basadas en posición en entornos de área local resulten
viables.
La infraestructura de estas redes cubre zonas de hasta 75 metros en el interior de edificios. Encontrandose Implementadas en un grupo de estándares (Tabla A.1), denominado
IEEE 802.11, que comprende varias tipos. La clase más popular es la denominada 802.11b,
ampliamente superada por el estándar 802.11a restringida al uso militar en España.
donde:
140
Estándar
Velocidad Máxima
802.11b
802.11a
802.11g
HomeRF2
HiperLAN2
11Mbps
54Mbps
54Mbps
10Mbps
54Mbps
Interfaz de aire
Ancho de Banda
de canal
DSSS
OFDM
OFDM/DSSS
FHSS
OFHDM
25MHz
25MHz
25MHz
5MHz
25MHz
Frecuencia
2.4GHz
5GHz
2.4GHz
2.4GHz
5GHz
Tabla A.1: Estándares de Wireless LAN. Figura extraida de [UPM].
DSSS:Direct Sequence Spread Spectrum.
OFDM:Orthogonal Frequency Division Multiplexing.
FHSS:Frequency Hopping Spread Spectrum.
En contra del uso de esta infraestructura, se ecuentran tales como la vulnerabilidad a las
interferencias, su señal es afectada por obstáculos móviles que absorben parte de su energía,
reflexiones y dispersión. Ambas afectan directamente a la precisión.
A pesar de estos contras este sistema no requiere hardware adicional, ya que todos los
teléfonos actuales tienen dicha tecnología incorporada.
A.2 Bluetooth
Aunque en un principio la tecnología Bluetooth no fue pensada como una tecnología de
localización, debido a la reciente llegada de la tecnología BTLE(Bluetooth Low Energy) es
posible implementar un sistema para calcular la posición de un dispositivo. La tecnología
BTLE permite interactuar en un radio de acción de 70 metros con balizas con una precisión
de hasta dos metros si procesa medidas de cuatro o más balizas y cuya batería pueda tener
una autonomía de hasta 2 años, debido a un consumo de energía relativamente bajo y que
por tanto permite colocarlas en puntos fijos sin necesidad de preocuparse por ellas.
Esta tecnología utiliza una red de tipo malla colocando las distintas balizas distanciadas
unas de otras, normalmente cada 10 ó 15 metros, con el fin de cubrir las distintas zonas que
se quiere monitorizar. La manera de actuar del usuario sería escanear el área en búsqueda
balizas previamente localizadas y calcular su posición mediante la potencia recibida.
Otra ventaja es que todos los teléfonos vienen también con dicha tecnología disponible.
Actualmente, existen varias empresas que desarrollan soluciones de localización basadas en
Bluetooth como pueden ser Tadlys, BlueLon, Blueposition, etc. Las aplicaciones van dirigidas a proveer localización o grabar rutas, servicios útiles en hospitales, centros de trabajo,
colegios, servicios comerciales, etc.
141
A.3 UWB
UWB emplea ráfagas de potencia más baja que cualquier otra de las tecnologías mencionadas con una frecuencia amplia (3,1-10,6GHz) y velocidades de transferencia de datos
mucho mayores que las tecnologías mencionadas llegando a transferir datos a velocidades
de centenares de megabytes por segundo.
Esta tecnología está basada en pulsos ultracortos, calculando la distancia al móvil mediante el retardo de un pulso desde que es emitido por el transmisor hasta que llega al receptor
permitiendo localizar el terminal móvil con un error mínimo.
Debido a su baja complejidad, coste reducido y a la capacidad para solucionar los problemas de precisión y seguridad que caracteriza a la red Wi-Fi, es una tecnología a considerar.
Como ejemplo comercial, la empresa Parco PAL que ofrece servicios de localización basados en UWB, para seguimiento de objetos en hospitales. Su bajo nivel de potencia evita
las interferencias con equipos médicos y proporciona localización muy precisa. [?]
La Tabla A.2 muestra una tabla comparativa en la que se puede observar como UWB tiene
una capacidad muy superior al resto, con una potencia de emisión insignificante, pero está
limitada en alcance.
Tecnología
Tasa de datos (Mb/s)
Bluetooth
IrDA
UWB
IEEE 802.11a
IEEE 802.11b
IEEE 802.11g
1-2
4
100-500
54
11
54
Potencia (mW)
100
100
1
40-800
200
65
Alcance(m)
100
1-2
10
20
100
50
Frecuencia
2.4GHz
Infrarrojo
3.1-2.6GHz
5GHz
2.4GHz
2.4GHz
Tabla A.2: Tabla Comparativa tecnologías UWB. Tabla extraída de [UPM]
A.4 ZigBee
La tecnología ZigBee está basada en el estándar IEEE 802.15.4, estándar que define el
nivel físico y el control de acceso al medio de redes inalámbricas de área personal.
Es una tecnología diseñada para ser el estándar de comunicación de las redes inalámbricas
de sensores como se puede observar en la Figura A.1 , presentando tres principios básicos de
trabajo: low cost, low power y low data rate.
Diversos trabajos realizados en la actualidad con esta tecnología ponen en evidencia la
viabilidad y opciones que presenta esta tecnología para la localización en interiores, debido
principalmente a su bajo coste y baja potencia de emisión.
Sin embargo, presenta grandes limitaciones de utilidad para aplicaciones donde sea necesario un cierto volumen de transmisión de datos debido a su limitada tasa de bit. A mayores,
142
Figura A.1: Red de sensores con tecnología ZigBee
se producen fluctuaciones de la señal debido a la configuración del entorno o el movimiento
de personal, que se ven reflejadas en pérdida de precisión.
A.5 RFID
El sistema RFID (Radio Frequency Identification) se basa en etiquetas de radiofrecuencia
que permiten la identificación a distancia de una objeto o persona.
Esta tecnología esta formada por tres componentes: etiquetas que contienen un transpondedor con un chip digital de memoria para comunicarse con los receptores. Los receptores,
están formados por una antena encargada de activar la etiqueta y leer los datos almacenados,
incluso escribir en la memoria y el sistema central de control. Las etiquetas pueden ser de
dos tipos:
Pasivas: No poseen ninguna batería, sino un circuito que se activa al recibir la potencia
emitida por un receptor. Con esta potencia es capaz de transmitir los datos almacenados
en la memoria. Su coste, tamaño y su alcance es bajo, entre decenas de centímetros y
algunos metros.
Se emplean para reemplazar el sistema de código de barras tradicional.
Activas: Poseen una batería que le permite transmitir sus datos de manera autosuficiente. Su memoria, tamaño, coste y alcance es mayor, pasando de algunos metros
hasta a decenas de metros.
143
Una etiqueta activa de altas prestaciones combinado con un lector de las mismas prestaciones ofrece hasta 70 metros de alcance, una frecuencia de 100 etiquetas/seg, una
memoria de 32KB y una duración de la batería en el mejor de los casos de 5 años, que
varía significativamente en función de la frecuencia.
Se emplean en la identificación de productos en movimiento como pueden ser palés.
En nuestro caso para aplicaciones de localización en interiores, las etiquetas más adecuadas disponibles hoy en día son las activas, principalemten por su mayor rango de lectura.
Se recominenda utilizar esta tecnología en una estructura de malla colocando etiquetas
RFID de referencia por metro cuadrado, de manera que se consiga una precisión de 1 a 2
metros y se consiga reducir los errores inducidos por la presencia de obstáculos o cuerpos
en movimiento. Los principales problemas a los que un desarrollador se enfrenta al usar esta
tecnología son:
La frecuencia a la que se pueden recibir los datos es muy limitada, para evitar la posibilidad de colisión.
Hay variabilidad entre distintas etiquetas, ya que dos etiquetas no emiten en las mismas
condiciones la misma potencia, por lo que implica hacer una clasificación previa por
potencia.
Algunos materiales, como el metal, no son los más adecuados para soportar una etiqueta y actualmente existen productos que no pueden ser envasados de otra forma.
Sin embargo la localización mediante RFID no es viable debido a la necesidad de un
lector apropiado y a la tecnología NFC cuyo uso es similar y se esta extendiendo no solo
en los Smartphones sino en las funcionalidades llendo mas allá del almacenamiento en el
uso de mecanismos de control de apertura en productos ligados con la tecnología, gestión de
almacén, pago de peajes, control de acceso, etc.
La tecnología es madura y el coste de desarrollo e implantación va disminuyendo progresivamente, sin embargo, no dejan de ser aplicaciones de logística y distribución.
Hay multitud de empresas que ofrecen y desarrollan soluciones empleando etiquetas RFID:
Alien Technologies, Matrics, Deisler Electronics, RFID Inc., AWID, IDENTEC Solutions. . .
A.6 Justificación de alternativa seleccionada
Tras el análisis de diversas tecnologías, se consideran poderosas alternativas a tener en
cuenta en la elección de la tecnología de RF utilizada en ShoppingBeacon los siguientes 4
estándares: UWB (IEEE 802.15.3), ZigBee (IEEE 802.15.4), WiFi (IEEE 802.11.a/b/g) y
Bluetooth (IEEE 802.15.1). A continuación se muestra en la Tabla A.3 un resumen de cada
una de las tecnologías consideradas para su uso en el desarrollo del presente Trabajo Fin de
Grado.
144
145
Estándar \
Caracteristicas
Banda de frecuencia
Máxima tasa de señal
Alcance nominal
Potencia nominal de TX
Número de canales
RF soportados
Ancho de Banda
de canal
3.1 - 10.6 GHz
110 Mb/s
10 m
-41.3 dBm/MHz
1-15
500 MHz - 7.5 GHz
2.4 GHz
1 Mb/s
10 m
-10 - 0 dBm
79
1 MHz
0.3/0.6 MHz; 2 MHz
2.4 GHz
250 Kb/s
10-100 m
(-25) - 0 dBm
1-10 ; 16
ZigBee
Tabla A.3: Comparativa de tecnologías de RF.
UWB
Bluetooth
22 MHz
2.4GHz; 5GHz
54 Mb/s
100 m
15 - 20 dBm
14
WiFi
Como se observa en la Tabla A.3, Bluetooth y ZigBee están principalmente pensados para
dispositivos portátiles con alcances relativamente cortos y bajo consumo. En el caso de UWB
esta diseñado para tasas elevadas de transmisión de datos a corto alcance, lo que supone un
mayor consumo energético. De la misma manera WiFi, implica una conexión y transmisión
de datos por lo que estos dispositivos están provistos de fuentes de alimentación.
A continuación, la Figura A.3 [Gra] muestra una comparativa de consumo energético
referido a la tasa de bit (1 MB/s)
Figura A.2: Gráfica de consumo de potencia de tecnologías RF
Finalmente, en la Figura A.4 se expone una comparación de tecnologías en lo referente al
coste de dispositivos y complejidad para aplicar las tecnologías citadas a la localización en
interiores.
Tras realizar un análisis de las diferentes tecnologías hasta el momento, se ha optado por
el estándar Bluetooh como una tecnología con tasa de bit, alcance, potencias de operación,
arquitectura, relación coste/complejidad, rapidez de despliegue, simplicidad de uso, fiabilidad, seguridad y duración de la batería totalmente aceptables y factibles para la ejecución
del presente Trabajo Fin de Grado.
Como balizas Bluetooth se han utilizado tres dispositivos propiedad de Estimote. Transmisores de bajo consumo capaces de localizar a dispositivos iOS por proximidad, permitiendo
el envío de notificaciones push entre dispositivos. Hay multitud de balizas bluetooth, sin
embargo se ha optado por la elección de estos transmisores debido en gran medida a las
siguientes razones:
SDK: Se trata de un conjunto de herramientas de desarrollo de software que permite
146
Figura A.3: Gráfica de coste/complejidad de tecnologías RF para localización en interiores
al desarrollador de software crear aplicaciones para el sistemas de los iBeacon.
Una baliza para muchas apps: Las balizas iBeacon puedan ser leídas e interpretadas
no sólo por una app corporativa de tienda sino por software de terceros. Por ejemplo,
un comercio puede desarrollar su propia app compatible con iBeacons desplegados en
tienda y al mismo tiempo confiar los identificadores de dichas balizas a un tercero,
como Google con su software Google Maps.
Compatibilidad de iBeacon con dispositivos Android: Las balizas iBeacon pueden
ser leídas por un sistema operativo Android.
147
Anexo B
Calibración del dispositivo iBeacon
Los beacons suelen venir calibrados de fábrica, sin embargo nunca está de más realizar
una prueba inicial y comprobar la potencia de emisión de éstos.
Cada uno de los beacon de Estimote, a través de su SDK, aparte de los valores estándares
de CLBeacon de Core Location ofrece una propiedad más: measured power. Esta propiedad
indica la potencia en dBs que se debería obtener si se pone a un metro del beacon. Otra
propiedad que ya se ha nombrado y con la que se trabaja para estimar la posición del usuario,
es el valor rssi, que corresponde al valor de la potencia de la señal recibida por el dispositivo
desde el que se están monitorizando los beacon, un iPhone en este caso. Por tanto, si se pone
a un metro del beacon, el valor rssi y el valor measuredPower deben ser similares como
muestra la Figura B.1
Figura B.1: Calibración de un dispositvo iBeacon
149
Al igual que se ha hecho en el resto de las pruebas, se deben almacenar un conjunto de
muestras para realizar una media del conjunto, ya que dependiendo de las interferencias que
se puedan dar en el momento de la calibración, puede fluctuar bastante. Apple [App14b]
recomienda almacenar muestras del valor rssi durante 20 segundos (iOS hace lecturas a 1Hz,
es decir, una lectura por segundo) y calcular la media sobre el percentil 80 de los valores
almacenados. Aunque en el resto de pruebas se han tomado 30 medidas del valor rssi, que
suponen algo más de 30 segundos debido a la pérdida de alguna señal, en este caso se ha
optado por tomar valores durante 20 segundos y realizar una media sobree el percentil 80
como recomienda Apple.
// Measured power is an average of the mid-80th percentile of RSSI samples.
NSInteger balancedRSSI = 0;
NSUInteger outlierPadding = allBeacons.count * 0.1f;
[allBeacons sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"rssi" ascending:YES
]]];
NSArray *sample = [allBeacons subarrayWithRange:NSMakeRange(outlierPadding, allBeacons.count - (
outlierPadding * 2))];
balancedRSSI = [[sample valueForKeyPath:@"@avg.rssi"] integerValue];
Listado B.1: Calibración iBeacon. Listado Extraído de [App14a]
Las lecturas de rssi se almacenan en la propiedad allBeacons y posteriormente se realizan
los cálculos necesario para obtener el valor rssi válido para la calibración del beacon.
Una vez obtenida el valor medio del rssi, se debe ajustar la potencia de emisión para que
los valores rssi (el valor balancedRSSI del código de arriba) y measuredPower sean los más
similares posibles.
Para ello se hace uso del SDK de Estimote que permite conectarse al beacon que se desea
calibrar a través de Bluetooth para modificar la potencia de transmisión mediante el método
writeBeaconPower:withCompletion: de la clase ESTBeacon del SDK de Estimote, y de esa
manera el valor rssi y el valor measuredPower sean lo más similares posible.
150
Anexo C
Contenido del soporte fisico adjunto
El soporte físico adjunto contiene el producto software final resultante del proceso de
desarrollo del presente Trabajo Fin de Grado, su código fuente y su documentación, correspondiente al presente documento en versión digital. Todos estos recursos se hallan distribuidos en el CD adjunto a este documento. La estructura de directorios que el CD alberga es la
siguiente:
Código fuente del producto final
Contiene el código fuente del producto final, de acuerdo a su jerarquía de directorios junto
con las bibliotecas necesarias para su compilación (excepto aquellas directamente dependientes de iOS que deben encontrarse instaladas en el sistema). Se incluyen también todos
los demás archivos necesarios para el proceso de compilación: imágenes y base de datos
externa.
Código fuente de las App para realizar pruebas
Contiene el código fuente necesario de la App para realizar las pruebas, de acuerdo a su
jerarquía de directorios junto con las bibliotecas necesarias para su compilación (excepto
aquellas directamente dependientes de iOS que deben encontrarse instaladas en el sistema).
Se incluyen también todos los demás archivos necesarios para el proceso de compilación:
imágenes y base de datos externa.
Documentación
Contiene la documentación perteneciente al presente documento en versión digital.
151
Referencias
[AH11]
Gaurav S. Sukhatme. Andrew Howard, Sajid Siddiqi. An experimental study of localization using wireless ethernet. http://www.
springerlink.com/content/mu1333820763207h/, Dic 2011.
[AMB10]
Paula Tarrío Ana M. Bernardos, José R. Casar. Real time calibration for rss indoor positioning systems. International Conference on
Indoor Positioning and Indoor Navigation, Sep 2010.
[Ann]
App Annie. ios app store revenue 2.6x that of google play.
blog.appannie.com/app-annie-index-market-q1-2013/.
[App]
Apple. Documentation class clbeacon. https://developer.apple.com/
http://
library/prerelease/ios/documentation/CoreLocation/Reference/
CLBeacon class/index.html#//apple ref/occ/instp/CLBeacon/
accuracy.
[App14a]
Apple. Airlocate: Using corelocation to monitor, range, and configure your device as an ibeacon. https://developer.apple.com/library/
ios/samplecode/AirLocate/Introduction/Intro.html, 2014.
[App14b]
Apple. Getting started with ibeacon.
https://developer.apple.com/
ibeacon/Getting-Started-with-iBeacon.pdf,
June 2014.
[Bec99]
Kent Beck. Embracing change with extreme programming. Computer, 23, Oct 1999.
[Blu]
B. sig,company identifiers.
https://www.bluetooth.org/en-us/
specification/assigned-numbers/company-identifiers.
[BP00]
Paramvir Bahl and Venkata N. Padmanabhan. RADAR: An inbuilding
RF-based user location and tracking system, pages 775–784. INFOCOM, 2000.
[CNE]
CNET. Google y yahoo también se interesan en flipboard: reporte.
http://www.cnet.com/es/noticias/google-yahoo-compra-flipboard/.
153
[CS]
Hugo Pinto Pedro Mestre Carlos Serodio, Luıs Coutinho. A comparison of multiple algorithms for fingerprinting using ieee802.11.
6-8/06/2011.
[DC11]
Fang YiYuan. Deng Chen. Improved rssi indoor location system based on fuzzy algorithm. In Computer Science and Automation Engineering (CSAE), Jun 2011.
[Des12]
Rahul Desai. Nokia leads the way with indoor mapping.
http://360.
here.com/2012/07/16/nokia-leads-the-way-with-indoor-mapping/,
2012.
[Fet13]
John Fetto.
Americans spend 58 a day on their smarthphones.
http://www.experian.com/blogs/marketing-forward/2013/05/
28/americans-spend-58-minutes-a-day-on-their-smartphones/
?WT.srch=PR EMS smartphones 052813 press,
May 2013.
[Gho]
C. B. T. C. Avik Ghose. Blueeye – a system for proximity detection
using bluetooth on mobile phones.
[Gra]
F. S. Granja. Sistemas de localización en interiores basados en
radiofrecuencia, instituto de automática industrial (csic). www.car.
upm-csic.es/lopsi/static/publicaciones.
[ide]
ideup. desarrollador android vs desarrollador ios.
http://www.ideup.
com/blog/desarrollador-android-vs-desarrollador-ios.
[Joh10]
John Ray; Sean Johnson. Desarrollo de aplicaciones para iPhone.
Anaya, 2010.
[LHCGHCMHJW10] E.H. Lyu-Han Chen Gen-Huey Chen Ming-Hui Jin Wu. International
conference on parallel processing workshops. In A Novel RSS-Based
Indoor Positioning Algorithm Using Mobility Prediction., number 39,
pages 549–553. ICPPW, Oct 2010.
[Low14]
Josh Lowensohn.
San francisco airport testing beacon system for blind travelers. http://www.theverge.com/2014/7/31/5956265/
san-francisco-airport-testing-beacon-system-for-blind-travelers,
July 2014.
[Org]
Bluetooth Org.
Core specification - bluetooth.
bluetooth.org/docman.
154
https://www.
[SMI14]
DAVE SMITH.
ios continues to dominate android in web
traffic
read
more:
http://www.businessinsider.com/chart-ofthe-day-ios-continues-to-dominate-android-in-web-traffic2014-7ixzz3ja73bhks.
http://www.businessinsider.com/
chart-of-the-day-ios-continues-to-dominate-android-in-web-traffic-2014-7,
Julio 2014.
[Sta15]
Statista. Global smartphone shipments forecast from 2010 to
2019 (in million units). http://www.statista.com/statistics/263441/
global-smartphone-shipments-forecast/, 2015.
[UPM]
UPM.
de la
Tecnologías
información.
y
servicios
para
la
sociedad
http://www.upm.es/sfs/Rectorado/
Organos%20de%20Gobierno/Consejo%20Social/Actividades/
tecnologias servicios para sociedad informacion.pdf.
[Xat13a]
Xataka. Google maps se renueva en android (y en ios, y en versión web).
http://www.xatakandroid.com/aplicaciones-android/
google-maps-se-renueva-en-android-y-en-ios-y-en-version-web,
Mayo 2013.
[Xat13b]
Xataka. Twitter music ya está disponible, pero sólo para ios y
determinados países.
http://www.xatakamovil.com/aplicaciones/
twitter-music-ya-esta-disponible-pero-solo-para-ios-y-determinados-paises
Abril 2013.
[Xat13c]
Xataka.
¿dónde
está
twitter
music
para
android?
http://www.xatakandroid.com/aplicaciones-android/
donde-esta-twitter-music-para-android,
Abril 2013.
[Xatil]
Xataka. Vine llegará a android ’pronto’. http://www.xatakamovil.com/
aplicaciones/vine-llegara-a-android-pronto, 27 Abril.
[You14]
David
mes.
G.
Young.
Background
beacon
detection
ti-
http://developer.radiusnetworks.com/2014/03/12/
ios7-1-background-detection-times.html,
155
Marzo 2014.
Este documento fue editado y tipografiado con LATEX
empleando la clase esi-tfg que se puede encontrar en:
https://bitbucket.org/arco group/esi-tfg
[Respeta esta atribución al autor]
157
Descargar