UNIVERSIDAD PONTIFICIA COMILLAS ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI) INGENIERÍA EN INFORMÁTICA PROYECTO FIN DE CARRERA Desarrollo de una aplicación de posicionamiento mediante Wifi en plataforma Android PABLO SUAZO FERNÁNDEZ MADRID, febrero de 2010
127
Embed
Desarrollo de una aplicación de posicionamiento mediante Wifi ...
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERÍA EN INFORMÁTICA
PROYECTO FIN DE CARRERA
Desarrollo de una aplicación de
posicionamiento mediante Wifi en
plataforma Android
PABLO SUAZO FERNÁNDEZ
MADRID, febrero de 2010
Autorizada la entrega del proyecto al alumno:
Pablo Suazo Fernández
EL DIRECTOR DEL PROYECTO
Giovanni Arturo Vecchione
Fdo: Fecha:
EL CO-DIRECTOR DEL PROYECTO
José Luis Gahete Díaz
Fdo: Fecha:
Vº Bº del Coordinador de Proyectos
David Contreras Bárcena
Fdo: Fecha:
Agradecimientos iii
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERÍA EN INFORMÁTICA
PROYECTO FIN DE CARRERA
Desarrollo de una aplicación de
posicionamiento mediante Wifi en
plataforma Android
PABLO SUAZO FERNÁNDEZ
MADRID, febrero de 2010
Agradecimientos iv
El futuro tiene muchos nombres.
Para los débiles es lo inalcanzable.
Para los temerosos, lo desconocido.
Para los valientes es la
oportunidad.
Victor Hugo
Agradecimientos v
Agradecimientos
No ha sido fácil y he recorrido un gran camino para terminar este proyecto, aunque no
habría sido posible sin el apoyo y la ayuda de muchas personas.
En primer lugar, me gustaría agradecer a mis padres el apoyo recibido, en todos los
momentos de mi vida en que me han hecho falta y en especial en este proyecto, gracias
por vuestra confianza en mí.
También querría agradecer a todos mis amigos, por estar a mi lado y ayudarme a
desconectar cuando era necesario. No podría haber hecho esto solo y me alegro de
haber contado con vosotros.
No podría desaprovechar la ocasión para agradecer a Jose Luis Gahete Diaz todo el
apoyo e interés que ha demostrado durante mi paso por la Universidad, más allá de la
mera obligación académica.
Mis agradecimientos para la Universidad y para todos los profesores y demás personas
que han contribuido a mi formación como ingeniero y como persona, me he cruzado
con gente magnífica.
Gracias a GMV por permitirme realizar este proyecto. En especial quiero agradecer a
Manuel Toledo y a Jose Javier Rosales por contactarme y elegirme para el proyecto y a
Giovanni A. Vecchione por ayudarme en el día a día.
A todas las personas que me han apoyado y han creido en mí, muchas gracias por
todo.
Resumen vi
Resumen
La idea de este proyecto ha surgido por el vacío tecnológico existente en relación al
posicionamiento en interiores. El propósito del mismo consiste en el desarrollo de una
aplicación que sea capaz de establecer la posición del usuario en interiores mediante la
detección de la potencia de las redes WiFi colindantes. La implementación realizada se
ejecuta en un teléfono móvil que emplea el sistema operativo para dispositivos móviles
desarrollado por Google: Android.
Se ha preferido esta plataforma; Android; sobre otras al considerar múltiples
aspectos positivos que justifican esta elección. Está basada en código fuente abierto, por
lo que el soporte es global, con un montón de programadores en todo el mundo
dispuestos a corregir errores. Las aplicaciones se desarrollan en Java, un lenguaje
maduro y ampliamente adoptado. Está basada en el concepto de aplicaciones “en la
nube”, es decir, emplear aplicaciones online para realizar el trabajo que hasta ahora se
hacía mediante aplicaciones instaladas en el equipo del usuario y utilizar como medio
de almacenamiento un espacio virtual localizado en un servidor de Internet. No
debemos olvidar que detrás de esta iniciativa está la Open Handset Alliance, una
asociación entre empresas fabricantes de móviles y proveedores de telefonía móvil.
Destacar a Google como el principal impulsor de dicha alianza. Es de suponer que esta
plataforma dará mucho de qué hablar en un futuro, y ciertamente está logrando una
gran expectación y predisposición de los fabricantes de hardware y del público
especializado (y cada vez ampliándose a más tipo de público).
La memoria tiene unas partes teóricas para entender los conceptos y diseñar la
solución, otras prácticas que describen el proceso de construcción y funcionamiento de
la aplicación y los manuales necesarios para configurar el entorno de desarrollo y
utilizar el prograa. Además, en los anexos se incluye el código fuente agrupado en
paquetes, por si se desea conocer la solución adoptada o es necesario revisar algún
aspecto de la implementación.
En estas páginas se van a explicar algunas características de la señal utilizada en
802.11, para seguidamente describir las técnicas que explotan dichas características y
por tanto pueden ser aprovechadas para resolver el problema del posicionamiento en
interiores. El siguiente paso es el estudio de los diferentes algoritmos de
Resumen vii
posicionamiento y sus ventajas y desventajas. Hasta aquí la parte teórica de la
memoria. La conclusión de esta parte es que lo más conveniente es emplear la potencia
recibida de señal como punto de partida para resolver el problema.
Respecto al algoritmo de posicionamiento, se ha escogido, por su sencillez de
implementación y sus bajos requisitos técnicos (tanto de CPU como de memoria)
consecuencia de su baja complejidad, el KNN (K-nearest neighbours). Es un algoritmo
de clasificación supervisada que permite establecer, gracias a un entrenamiento previo,
una estimación de la posición que ocupa el usuario de la aplicación. La elección parece
adecuada al ser la primera versión de la aplicación, puesto que al ser un dispositivo
móvil con menores recursos y autonomía que un ordenador convencional el encargado
de ejecutarla, se debe comenzar el desarrollo empleando algoritmos sencillos que
permitan concentrarse en obtener una solución al problema, sin distracciones causada
por las limitaciones del dispositivo.
El proyecto cuenta con una componente de Inteligencia Artificial, ya que KNN es
empleado para solucionar con éxito problemas de otra índole, combinado con el
fingerprinting. Básicamente, se debe crear una base de datos con unas muestras en
determinados puntos del lugar donde se quiere realizar posteriormente el posicionado.
Estas muestras contienen la potencia recibida desde los diferentes puntos de acceso
detectados. El algoritmo permitirá establecer qué posiciones dentro del sistema son
posibles y en qué grado, obteniendo una localización aproximada.
En la parte práctica, se puede encontrar un manual de instalación donde se podrá
poner a punto el entorno de desarrollo de una manera fácil y cómoda. Se ha incluido
por considerar que el conocimiento sobre Android aún es escaso. Es de esperar que, a
medida que aumenten tanto el número de dispositivos que lo emplean como el número
de desarrolladores y de aplicaciones, los conceptos en este campo serán más valorados.
Seguidamente se describe el proceso de desarrollo de la aplicación, tanto su diseño
como programación. El lenguaje empleado, como se ha mencionado anteriormente, es
Java. Se emplea una API publicada por Google y que se actualiza en cada nueva
versión del Sistema Operativo. Se ha prestado especial atención a documentar todas las
clases que conforman este programa, empleando diagramas de clases para visualizar
sus relaciones y dependencias. También se incluyen las pruebas, las mejoras
consideradas y el desarrollo futuro.
Resumen viii
Como resultado de las pruebas, no sólo se puede decir de manera cualitativa que el
posicionamiento indoor es posible, sino que los resultados cuantitativos reflejan un
error de posición menor de 3 metros. Se puede decir que esta aplicación es el esqueleto
de un programa que podría servir para el posicionamiento en cualquier circunstancia,
combinando técnicas de posicionamiento tanto en interiores como en el exterior (GPS,
por ejemplo). El valor de la aplicación podría ser bastante elevado, al cubrir una
problemática para la que aún no hay muchas soluciones precisas.
Se deben mencionar futuras mejoras del algoritmo, que incluyen el empleo de
algoritmos probabilísticos u otros métodos pertenecientes a ámbito de la Inteligencia
Artificial, uso de preprocesado y postprocesado, como el filtrado de Kalman con objeto
de mejorar la precisión y exactitud de la estimación respecto a la posición real.
No se podía completar este trabajo sin incluir un manual de explotación, que
permitirá a usuarios sin conocimientos usar la aplicación. Se adjuntan capturas de
pantalla de la aplicación para explicar mejor su uso.
Para finalizar la memoria, se incluye tanto el presupuesto como la planificación que
se han seguido a lo largo del proyecto. Indicar que se han cumplido los plazos y el
presupuesto ha sido bastante reducido, por lo que se puede decir que se han
optimizado los recursos.
Por último, añadir que la realización de este proyecto abarca dos grandes temas que
serán cada vez de mayor importancia en el futuro: la localización en interiores y
Android, por lo que adquirir destrezas en ambos supone un gran valor añadido para
un Ingeniero Informático. La investigación de los algoritmos de posicionamiento y el
desarrollo en una plataforma nueva como Android, han puesto a prueba muchos
conceptos aprendidos durante la carrera, permitiendo realizar un proyecto interesante
y actual.
Summary ix
Summary
The lack of a reliable service for indoor positioning has been the main motivation
for starting this project. The scope of this project is developing an application that will
be able to establish the user's position by polling the received signal strength of the
surrounding Wi-Fi networks (RSSI); the final implementation may run on a mobile
phone using Android, the operating system for mobile devices developed by Google.
This platform is preferred because for its multiple advantages: it is based on open
source code, so the support is global, with a lot of programmers around the world
willing to correct bugs and improve its functionality. Android is based on the concept
of “cloud computing”, i.e. employing online applications to make the work and using
as storage medium the virtual space on an Internet server, instead of using programs
installed on the user's computer, the main language for development is Java, a mature
and widely adopted language.
The Android project has been launched by a consortium of company (the Open
Handset Alliance) composed by the major handset produces and mobile operators,
with Google as a main actor. The platform has been adopted by the marked with much
interest and presumably, this platform will continue to grow up in the future,
practically every month new handsets with Android are presented by hardware
manufacturers gaining the favor of the market.
The report is divided in several parts: the first part of the report contains the theory
supporting the adopted solution, then the development and testing of the application
is described. Last part contains a description about the necessary steps to configure the
integrated development environment successfully and a user manual.
The signal characteristics of 802.11 will be explained on these pages: this is useful to
understand the positioning algorithm used to solve the indoor positioning problem.
Here the state of the art of positioning algorithms has been analyzed: as a conclusion it
has been highlighted that using the received signal strength is the best choice to solve
the problem.
The positioning algorithm used is the K-nearest neighbors (KNN), chosen for its
easy implementation and its low technical requirements, both CPU and memory. It is a
Summary x
supervised classification algorithm that, using some previous training examples,
estimates the position of the user; as already said this algorithm doesn’t have high
complexity which makes it suitable for a portable device implementation. The
development must start using simple algorithms that allows focusing on getting a
solution to the problem, not necessarily the best but eliminating distractions caused by
the hardware limitations of the device.
The project has an AI (Artificial Intelligence) component, since KNN is successfully
used to solve other problems, combined with the fingerprinting technique. It creates a
database with samples points of the place where indoor positioning will be used, these
samples contain the received signal strength of all the access points detected, using this
database the algorithm will determine which positions within the system are possible
and more probable, obtaining an approximate location.
The last part of the report contains a user manual, which describes the process for
tuning the development environment in an easy and convenient way. It is included
because the knowledge about Android is still low. Hopefully, as the number of devices
that use it as the number of developers and applications increase, the concepts in this
field will be more appreciated.
Below the development process of implementation is described, both the design and
application programming. The language used, as mentioned above, is Java, it uses an
API released by Google that is updated with each new OS version. It has paid
particular attention in the documentation of all the classes that conforms the program,
using class diagrams to visualize their relationships and dependencies. Tests,
improvements and future development are also included.
As a result of the tests, not only it can be said that the indoor positioning is possible
in a qualitative form, but quantitative results reflect a positioning error less than 3
meters. This application is the skeleton of a program that could be used for positioning
in any circumstance, combining both indoor and outdoor positioning techniques; i.e.
GPS. The application value could be quite high, covering a problem for which many
solutions are not very precise taking advantage also by the use of COTS (Commercial
Off-The-Shelf) equipment.
Summary xi
Future improvements of the algorithm, including the use of probabilistic algorithms
or other artificial intelligence methods, the use of preprocessing and post processing
such Kalman filtering are foreseen to improve precision and accuracy.
This report cannot be finished without the inclusion of a user’s guide allowing
inexperienced users to be managed using the application. Find attached some
screenshots of the application to explain its use in a better way.
To close this report, it is included both the budget and planning that have been
followed throughout the project. The deadlines have been met and the budget was
fairly small, so it can be said that resources are optimized.
Finally, the realization of this project comprises two main issues that will become
more important in the future: the indoor location and Android. Acquiring skills in both
issues is a great value for a Computer Engineer. Investigation of positioning algorithms
and developing in a new platform as Android have been tested many concepts learned
during the career, allowing to realize an interesting and a very up-to date project.
Índice xii
Índice
1 CONCEPTOS SOBRE LAS CARACTERÍSTICAS DE LA SEÑAL EN 802.11 ...................... 21
Figura 1. Obtención de la posición ........................................................................................................ 31
Figura 2. Cálculo de distancia j .............................................................................................................. 32
Figura 3. Cálculo del centro de masas .................................................................................................. 32
Figura 4. Filtrado de Kalman ................................................................................................................. 35
Figura 5. Gestor del SDK de Android .................................................................................................. 42
Figura 6. Instalación del plugin de Android en Eclipse ..................................................................... 44
Figura 7. Configuración del plugin de Android en Eclipse ............................................................... 45
Figura 8. Opciones de creación de un dispositivo virtual ................................................................. 46
Figura 9. Confirmación en la creación del dispositivo virtual .......................................................... 47
Figura 10. Administrador de dispositivos virtuales ........................................................................... 47
Figura 11. Dispositivo virtual cargando Android ............................................................................... 48
Figura 12. Dispositivo virtual bloqueado ............................................................................................. 49
Figura 13. Escritorio del dispositivo virtual ........................................................................................ 49
Figura 14. Dispositivo virtual en modo panorámico .......................................................................... 50
Figura 15. Instalación ia32-libs .............................................................................................................. 51
Figura 16. DFD Aplicación ..................................................................................................................... 54
Figura 17. Fases de desarrollo, pruebas y entregables ....................................................................... 54
Figura 18. Diagrama de clases del menú principal ............................................................................. 67
Figura 19. Diagrama de clases de Generación archivos ..................................................................... 67
Figura 20. Diagrama de clases de Generación BD .............................................................................. 68
Figura 21. Diagrama de clases de Wipode ........................................................................................... 69
Figura 22. Uso CPU Menú principal ..................................................................................................... 71
Figura 23. Uso Memoria Menú principal ............................................................................................. 71
Figura 24. Uso CPU Generación Archivos ........................................................................................... 72
Figura 25. Uso Memoria Generación Archivos ................................................................................... 72
Figura 26. Uso CPU Generación BD ..................................................................................................... 73
Figura 27. Uso Memoria Generación BD .............................................................................................. 73
Figura 28. Uso CPU Wipode .................................................................................................................. 74
Figura 29. Uso Memoria Wipode .......................................................................................................... 74
Figura 30. Diagrama Gantt de la planificación del proyecto ............................................................. 76
Figura 31. Icono del instalador de Wipode .......................................................................................... 92
Figura 32. Ventana de detalles del paquete ......................................................................................... 93
Figura 33. Confirmación de la instalación ........................................................................................... 93
Figura 34. Proceso de instalación .......................................................................................................... 94
Figura 35. Notificación de instalación completada ............................................................................. 94
Índice de Figuras xvii
Figura 36. Icono ejecución de Wipode .................................................................................................. 95
Figura 37. Menú principal ...................................................................................................................... 96
Figura 38. Ventana principal de Generación de archivos .................................................................. 97
Figura 39. Introducción de coordenadas .............................................................................................. 97
Figura 40. Especificación del retardo .................................................................................................... 98
Figura 41. Activación Wifi en la Generación de Archivos ................................................................. 99
Figura 42. Comienzo del muestreo ....................................................................................................... 99
Figura 43. Proceso de muestreo ........................................................................................................... 100
Figura 44. Finalización del muestreo .................................................................................................. 101
Figura 45. Resumen del muestreo ....................................................................................................... 101
Figura 46. Comienzo del procesado de archivos .............................................................................. 102
Figura 47. Procesando archivos ........................................................................................................... 103
Figura 48. Fin de proceso ..................................................................................................................... 103
Figura 49. Wipode ................................................................................................................................. 104
Figura 50. Activación de Wifi .............................................................................................................. 105
Figura 51. Comienzo del procesado de archivos .............................................................................. 105
Figura 52. Posición determinada por Wipode ................................................................................... 106
Figura 53. Desactivación Wifi .............................................................................................................. 106
Figura 54. Mensaje de error por no informar las coordenadas ....................................................... 107
Figura 55. Mensaje de error por introducir caracteres no váldos en las coordenadas ................. 108
Figura 56. Comienzo del procesado de archivos .............................................................................. 108
Figura 57. Error en Wipode al no existir la base de datos ............................................................... 109
Índice de Tablas xviii
Índice de Tablas
Tabla 1. Tabla con las posiciones y sus vectores de potencia asociados .......................................... 29
Tabla 2. Planificación proyecto .............................................................................................................. 75
Tabla 3. Presupuesto del proyecto ........................................................................................................ 79
1 Conceptos sobre las
características de la señal en
802.11b/g
1 Conceptos sobre las características de la señal en 802.11b/g 21
1 Conceptos sobre las características de la señal en 802.11b/g
1.1 Introducción
Las tecnologías wireless empleadas actualmente; más concretamente el estándar
802.11; introducen unos nuevos conceptos relacionados con la señal. Si bien el
significado de estos conceptos puede inferirse de manera intuitiva, al ser conceptos
interrelacionados pueden ser empleados de manera incorrecta o inexacta. Es por esto
que a continuación se explicarán algunos de estos conceptos y su importancia a la hora
de crear una red inalámbrica.
1.2 Potencia de señal
La potencia de la señal recibida, se mide, normalmente, en mW o dBm.
Se usa dBm por ser más simple a la hora de representar la potencia de una señal.
Las fórmulas para calcular la equivalencia dBm-mW son:
dBm = log (mW) * 10
mW = 10 ^(dBm/10)
De manera intuitiva, si la potencia medida en mW se reduce a la mitad, esto supone
un descenso de aproximadamente 3 dBm, y si la potencia medida en mW aumenta al
doble, esto supondrá un incremento aproximado de 3 dBm.
1.3 Potencia RSS
La potencia de señal RSS1 utilizada en 802.11 es un valor entero que depende del
fabricante del chip inalámbrico empleado. Entre dos fabricantes no tiene por qué haber
una conversión o equivalencia directa, por lo que las mediciones realizadas con el chip
1 Received Signal Strength (Potencia señal recibida)
1 Conceptos sobre las características de la señal en 802.11b/g 22
de un fabricante no son válidas para otro chip de otro fabricante. Esto es porque cada
fabricante calcula este valor de una forma distinta y la escala no es igual.
Por ejemplo, Atheros usa una escala de 0-60, Symbol una escala de 0-31 y Cisco una
escala de 0-100.
En general, valores mayores denotan una mayor potencia de señal recibida. Estos
valores son usados de manera interna por el controlador, para, por ejemplo, saber
cuándo cambiar a otro AP2 con mayor potencia, qué modulación se debe usar, la
potencia de emisión…
1.4 Calidad de la señal
La calidad de la señal es calculada a partir del número de errores que se produzcan
en la capa de enlace. Por lo tanto es un buen indicador de las perturbaciones o
interferencias que produce el entorno en la señal recibida desde el emisor.
Como en el caso de la Potencia RSS, cada fabricante usa su propio método para
calcular la calidad de la señal.
1.5 Ratio Señal-Ruido
Este término suele ser incorrectamente definido por una confusión de conceptos.
Desde el punto de vista de un diseñador de un chip de radiofrecuencia, el ratio
señal-ruido se referirá a la potencia de la señal recibida respecto al ruido producido por
el chip. Este ruido es producido por el simple hecho de la circulación de electricidad y
del calor que ésta genera. Esto es conocido como ruido Boltzmann.
Desde el punto de vista de un administrador de 802.11, el ratio señal-ruido podría
ser interpretado como la señal recibida respecto al ruido ambiente (interferencias
producidas por el entorno). Esto es incorrecto, ya que esto debería ser definido como el
ratio señal-interferencias.
2 Access Point (Punto Acceso)
1 Conceptos sobre las características de la señal en 802.11b/g 23
1.6 Sensibilidad del receptor
Es un valor que va asociado con una tasa de bits. Suele medirse en dBm y es
indicado por el fabricante tras realizar una serie de pruebas a sus productos. Por
ejemplo, un receptor indica que puede recibir datos a 1 Mbps con una potencia de
señal de -95 dBm, esto revela que si la señal recibida tiene al menos dicha potencia, se
garantiza que los datos se recibirán a una tasa de 1 Mbps. Por lo tanto se deduce que
cuanto menor sea la sensibilidad (mayor valor negativo) más facilidad tendrá para
recibir datos en casos en que la potencia recibida sea muy baja.
Se suelen indicar intervalos en los que se muestran diferentes tasas de datos para
cada sensibilidad. Si se requieren tasas de datos deseadas, la potencia recibida deberá
ser mayor que si se requieren menores tasas de datos, siempre en el caso de que se
refieran al mismo receptor.
1.7 Margen de atenuación
Es un margen de seguridad que se establece para garantizar una calidad mínima de
la señal.
Por ejemplo, se requiere que en un enlace haya una tasa de datos mínima de 11
Mbps, y el receptor tiene una sensibilidad para dicha tasa de -80 dBm. Esto significa
que la potencia de la señal recibida deberá ser en todo momento mayor o igual a 80
dBm.
Como las señales inalámbricas está sujetas a muchas interferencias producidas por
el entorno, se deberá establecer un margen de seguridad para poder garantizar que la
potencia recibida siempre supere el valor mínimo, ya que interferencias puntuales
podría provocar que no se cumpliera el requisito de potencia y, por tanto, la tasa de
datos no se mantenga al valor deseado.
1 Conceptos sobre las características de la señal en 802.11b/g 24
Normalmente, los administradores de 802.11 determinan que un margen de
atenuación de 10 dB suele ser suficiente, aunque este valor podrá incrementarse en
caso de que se necesite una mayor seguridad.
2 Algoritmos de localización
2 Algoritmos de localización 26
2 Algoritmos de localización
2.1 Introducción
En los últimos años ha habido un incremento en las investigaciones para poder
desarrollar sistemas de localización en interiores. Se pueden encontrar numerosas
soluciones tecnológicas que de una manera más o menos elegante (y precisa) cubren
esta necesidad. La mayoría suelen ser soluciones propietarias, que no siguen ningún
estándar y con poca documentación al respecto.
Centrándose en la localización mediante Wifi, se pueden encontrar muchos estudios
de calidad, realizados en su mayoría por Ingenieros para sus tesis o para la publicación
de artículos. Cabe destacar el sistema RADAR, desarrollado el departamento de
investigación de Microsoft y que supone el punto de partida para los posteriores
estudios que han ido surgiendo.
2.2 Técnicas de localización mediante señales electromagnéticas
Existen varias técnicas de localización que emplean alguna característica de la
sseñales electromagnéticas para determinar la posición. A continuación se detallan
algunas de ellas.
2.2.1 TOA3
Es una técnica basada en el tiempo de propagación de una señal electromagnética.
Ya que existe una relación lineal entre el tiempo de propagación y la distancia entre un
emisor y un receptor, se podría, con un único receptor (con una posición a determinar)
y con varios emisores (cuya posición es conocida), triangular la posición del receptor
basándose en las distancias a los emisores del receptor.
3 Time of Arrival (Tiempo de llegada)
2 Algoritmos de localización 27
Para calcular dichas distancias, será necesario que los relojes de los emisores y los
receptores estén sincronizados y la distancia sea calculada a partir del tiempo de
propagación desde que es emitida hasta que es recibida.
La principal desventaja de esta técnica es que tendrá que emplear un algoritmo de
sincronización de relojes muy robusto, además del empleo de relojes muy precisos,
para minimizar el error.
2.2.2 TDoA4
Esta técnica es similar a la anterior, en cuanto que emplea la relación lineal que
existe entre el tiempo de propagación y la distancia recorrida, pero en este caso no
necesita que los relojes entre emisores y receptores estén en sincronía. Para ello se
emplea una señal acústica y una electromagnética que se emiten simultáneamente.
Como su velocidad de propagación es distinta (la acústica se propaga a la velocidad
del sonido y la electromagnética a la de la luz), el receptor podrá calcular la distancia
al emisor mediante la diferencia temporal entre la recepción de la señal
electromagnética y la señal acústica.
La ventaja de esta técnica respecto al ToA, es que usa medidas de tiempo relativas,
por lo que se eliminan los errores que pueden aparecer por pequeñas diferencias entre
los relojes.
2.2.3 AoA5
Se basa en el cálculo de la posición mediante el cálculo del ángulo de llegada de la
señal.
Esta técnica tiene dos inconvenientes principales. El primero, que es determinante y
por el cual no la hace válida para posicionamiento indoor, es que requiere que el
emisor y el receptor tengan línea directa de visión para evitar el multipath y poder
4 Time Difference of Arrival (Diferencia de tiempo entre llegadas)
5 Angle of Arrival (Ángulo de llegada)
2 Algoritmos de localización 28
calcular el ángulo correctamente. El segundo, es que requiere múltiples antenas para
poder calcular el ángulo, por lo que se requiere hardware adicional.
2.2.4 RSS
Su fundamento está basado en la atenuación que sufre la señal a medida que se aleja
de la fuente emisora. Calculando la atenuación sufrida, se puede calcular la distancia al
emisor.
El principal problema es que la atenuación es muy variable ya que depende de
factores externos (además de la distancia) como pueden ser paredes, interferencias de
otras señales, agentes atmosféricos (lluvia, iones, temperatura, luz solar), reflexiones,
objetos, personas…
Aunque este inconveniente puede sugerir que esta técnica no será fiable a la hora de
determinar una posición, finalmente será la opción elegida ya que es la más sencilla de
implementar y no requiere hardware adicional. Asimismo no requiere cálculos ya que
es el propio controlador el que calcula la potencia de la señal recibida.
En vez de emplear la triangulación para calcular la posición, se empleará el
fingerprinting o reconocimiento de patrones, ya que de esta manera se minimiza el
error introducido por los factores externos que contribuyen a la volatilidad de la
atenuación.
2.3 Fingerprinting
Se basa en el reconocimiento de patrones. Para ello, se parte de un área en la cual se
quiere ser capaz de determinar la posición de un receptor. Dicha área debe recibir señal
de varios APs. La señal de los APs debe cubrir todo el área y debe recibirse señal en
todos los puntos del área de al menos 3 APs distintos. Mediante la potencia de la señal
recibida (RSS) de cada AP en un punto, se puede inferir la posición. Al conjunto de
todas las potencias de los APs recibidas en un punto, se le denomina vector de
potencias.
Consta de dos fases:
2 Algoritmos de localización 29
2.3.1 Fase de entrenamiento
En esta fase, se debe determinar el área que se requiere cubrir. A continuación se
fijarán unos puntos en el interior del área donde se deberán realizar mediciones para
determinar el vector de potencias recibido en cada punto. Se deben estipular el mínimo
número de puntos necesarios para que el error cometido entre la posición calculada y
la real sea aceptable. A mayor número de puntos, serán mayores las necesidades de
almacenamiento, y el uso de memoria y de tiempo de proceso. Aún así, aunque se
dispongan de suficientes recursos, a partir de un determinado número de puntos de
entrenamiento, aunque se incremente el número de puntos, el error no se reduce.
Para reducir errores, es recomendable que en cada punto, la medición del vector de
potencias se realice a distintas horas del día y con distinta orientación del receptor y se
calcule la media. Esto es necesario ya que el propio cuerpo humano atenúa la señal (ya
que opera en la banda de 2,4 GHz, que es justamente la frecuencia de excitación de la
molécula de agua, por lo que al contener el cuerpo humano un 70% de la misma,
absorbe la señal y produce una atenuación), y por esto por lo que se debe el receptor en
varias direcciones en un mismo punto. Además, se debe realizar a distintas horas del
día, porque los factores externos que influyen en la atenuación pueden variar su
influencia dependiendo de la hora (mayor afluencia de personas, temperatura,
máquinas funcionando…).
Finalmente, las posiciones y sus vectores de potencia asociados, se almacenarán en
una tabla del tipo:
X1 Y1 RSSAP1,1 RSSAP2,1 … RSSApi,1 … RSSAPm,1
X2 Y2 RSSAP1,2 RSSAP2,2 … RSSApi,2 … RSSAPm,2
… … … … … … … …
Xj Yj RSSAP1,j RSSAP2,j … RSSApi,j … RSSAPm,j
… … … … … … … …
Xn Yn RSSAP1,n RSSAP2,n … RSSApi,n … RSSAPm,n
Tabla 1. Tabla con las posiciones y sus vectores de potencia asociados
2 Algoritmos de localización 30
Donde n será el número de puntos que se muestrearán y se almacenarán en la tabla.
El número total de APs será m, que aunque no tengan porque ser todos los que existan
en el área, sí que es necesario que se almacene la potencia recibida de cada uno de ellos
en cada punto.
Por tanto, la potencia RSSApi,j denota la potencia recibida del AP i en el punto j.
Hay que tener en cuenta que estas mediciones serán válidas siempre que no cambie
la posición de ninguno de los APs o se introduzcan nuevos objetos u otros agentes que
puedan atenuar la señal.
2.3.2 Fase de obtención de la posición
En esta fase se obtiene la posición. Para estimar la posición, es necesaria la matriz de
posiciones obtenida en la fase anterior y el vector de potencias de la posición a calcular.
Lo que varía es el algoritmo empleado para realizar la estimación. Principalmente hay
dos tipos de algoritmos empleados en el fingerprinting, los algoritmos deterministas y
los probabilísticos. Ambos tipos de algoritmos son heurísticos, ya que a partir del
entrenamiento previo, se encargan de calcular la posición más aproximada según la
información de entrada y de descartar posiciones para reducir las posibilidades.
2 Algoritmos de localización 31
Matriz de posiciones
Vector potencias
Algoritmo de localización
(X,Y)
Posición calculada
Figura 1. Obtención de la posición
2.3.2.1 Algoritmo determinista
El principal algoritmo determinista empleado es el KNN (K-Nearest Neighbours),
que trata de obtener los K puntos de la matriz de posiciones más cercanos al vector de
potencia medido. Una vez obtenidos, se promedian y con ello se obtiene la posición.
El algoritmo se describe a continuación:
Se considera el conjunto de mediciones {F(p1), F(p2),… F(pn)} obtenidas de la matriz
de posiciones, siendo F(pj) = (µj1, µj2, …, µjm) donde µjm denota el RSS del AP m en la
posición pj.
Se define r = (r1, r2, …, rm) como el vector de potencias obtenido en la posición a
determinar.
Para cada vector de potencia almacenado en la matriz de posiciones, se calcula su
distancia usando la fórmula de la distancia euclídea, siendo m el número total de APs:
2m
j
22
j
221
j
1 )µ...()µ()µ(1 m
j rrrm
Dist
2 Algoritmos de localización 32
Figura 2. Cálculo de distancia j
Una vez que están todas las distancias calculadas para todos los vectores de la
matriz de posiciones, se seleccionan los K vectores cuya distancia euclídea al vector de
potencia medido sea menor.
Para promediar los vectores recuperados de la matriz de posiciones, se puede usar
la media aritmética o, preferiblemente, calcular el centro de masas de manera
ponderada, tomando como pesos la inversa de la distancia euclídea calculada, para
otorgar mayor peso a los vectores de potencia más cercanos al vector de potencia
medido.
K
i i
K
i i
i
Dist
Dist
p
p
1
1
1
Figura 3. Cálculo del centro de masas
Este método tiene la ventaja de que es muy fácil de implementar y no requiere
cálculos complejos. Obtiene la posición desde la primera medición y no es necesario un
período de arranque hasta que empiece a proporcionar valores válidos.
El problema que puede surgir es que cuanto mayor sea la matriz de posiciones;
tanto por la longitud de los vectores de potencia (que depende de los diferentes APs
almacenados), como por el número de posiciones almacenadas; mayor será la
complejidad del método.
A pesar de la simplicidad de este método, en pruebas ha demostrado que las
posiciones calculadas son bastante precisas, con un error típico de 3 metros.
2 Algoritmos de localización 33
2.3.2.2 Algoritmo probabilístico
El principal algoritmo probabilístico empleado es el método del kernel. Este método
estima la posición a partir del cálculo de la función de densidad de las posibles
ubicaciones del entorno.
Con éste algoritmo se suele conseguir una mejor estimación de la posición que con
el KNN, aunque es un poco más compleja la implementación y la ejecución.
2.3.2.3 Otros algoritmos
Otros algoritmos que se podrían emplear podrían ser aquellos basados en redes
neuronales. Se definirían los tamaños de las capas y los pesos asociados a las diferentes
conexiones entre capas y se entrenaría la red con varios ejemplos o con la base de datos
de posiciones y vectores de potencia asociados. Este algoritmo requeriría un mayor
trabajo previo para ajustar la red y permitir que se obtengan buenos resultados.
2.4 Mejoras en el algoritmo de localización
Hay tres formas de mejorar el algoritmo de localización. Una sería realizar un
preprocesado, otra realizar un postprocesado y la tercera sería emplear información
recibida de otros sensores. Estas tres maneras de mejorar la precisión del algoritmo
pueden ser combinadas entre sí aunque hay que tener en cuenta que aumentarían los
requisitos de memoria y procesador, por lo que habría que estudiar la conveniencia de
emplear cada una. Seguidamente se explicará cada alternativa.
2.4.1 Preprocesado
La principal técnica a emplear en esta etapa sería el filtrado espacial. Esto consiste
en eliminar algunas posiciones de la base de datos por ser imposibles o poco probables.
Por ejemplo, una vez que el algoritmo ha arrancado y se conoce una posición válida,
cuando haya que conocer la posición en el siguiente instante de tiempo, lo más
2 Algoritmos de localización 34
probable es que la posición sea adyacente o cercana, por lo que se podría descartar
puntos de la base de datos que estén muy alejados.
La ventaja del preprocesado es que si se elige una función sencilla que filtre las
posiciones, se puede ahorrar tiempo de proceso cuando el algoritmo calcule la posición
en el siguiente paso, ya que tendrá que calcular las distancias de menos puntos.
Un inconveniente del preprocesado podría aparecer en el caso de que la función que
se escoja no contemple ciertos casos y elimine puntos que deberían ser candidatos, por
lo que el algoritmo perdería precisión.
2.4.2 Postprocesado
Se puede emplear un postprocesado para corregir la posición del sistema como
consecuencia de errores de medida o de ruido. El postprocesado también puede ser útil
para predecir la posición o posiciones que podría tener el sistema en el próximo paso.
2.4.2.1 Filtrado de Kalman
El filtrado de Kalman se encarga de estimar la posición del sistema mediante un
sistema de retroalimentación. Se compone de dos tipos de ecuaciones. El primer tipo de
ecuaciones sirve para predecir la posición en el siguiente paso. El segundo tipo de
ecuaciones se utiliza para corregir la posición y además para ajustar las ecuaciones de
predicción.
2 Algoritmos de localización 35
Predicción Corrección
Comprobación
Ajuste
Posición anterior
Posición predichaPosición predicha
Posición calculada
Figura 4. Filtrado de Kalman
3 Entorno de desarrollo
3 Entorno de desarrollo 37
3 Entorno de desarrollo
3.1 Introducción
Para implementar la aplicación, la solución más sencilla es la recomendada por
Google en su portal para desarrolladores de Android. Google sugiere emplear el
entorno de desarrollo Eclipse, con el plugin ADT6 que permitirá integrar el SDK7 de
Android para poder utilizarlo en Eclipse.
A continuación se muestran los diferentes pasos que se deben seguir para poner a
punto el entorno de desarrollo, que nos permitirá una programación más eficiente y
por tanto obtener resultados rápidamente.
3.2 Elección del sistema operativo
Google pone a disposición de los desarrolladores un SDK para tres plataformas:
Windows, Mac OS X y Linux.
Por carecer de un ordenador equipado con Mac OS X, no se ha podido probar el
funcionamiento del SDK y su integración con el entorno de desarrollo en este sistema
operativo. En cambio, se ha podido configurar satisfactoriamente el mismo tanto en
Windows como en Linux. La instalación en ambos sistemas operativos no difiere
significativamente en ningún paso por lo que no se hará una distinción entre los
mismos, aunque se expondrán la ventajas e inconvenientes de cada uno y la
recomendación sobre cuál utilizar.
3.2.1 Windows
Se ha empleado como sistema operativo Windows 7 Ultimate en su versión de 64
bits, ya que el ordenador empleado tiene 4 GB de memoria RAM y las versiones de 32
bits sólo pueden direccionar hasta 3.3 GB de memoria física.
6 Android Development Tools (Herramientas de desarrollo de Android)
7 Software Development Kit (Kit desarrollo software)
3 Entorno de desarrollo 38
Aunque usar una versión tan reciente de Windows para un entorno de desarrollo
puede resultar contraproducente al poder aparecer fallos porque el sistema operativo
aún no esté maduro, se ha preferido esta opción por ser el sistema operativo que
presumiblemente más se empleará para desarrollar en un futuro bajo Windows, sobre
todo después de la poca aceptación que ha tenido Windows Vista en las empresas de
desarrollo y el interés de Microsoft por la migración a Windows 7 desde Windows
Vista y Windows XP. Microsoft está realizando un gran esfuerzo por la poca
aceptación que ha tenido Windows Vista entre los desarrolladores, que permanecen
anclados a Windows XP por no considerar que Windows Vista aporte un valor
añadido que justifique la migración.
La principal ventaja de emplear este sistema operativo, es que es el más extendido
en entornos de usuario y porque muchas de las aplicaciones comerciales no son
compatibles con Linux (siempre que no se hable de proyectos como Wine, que ya
permiten instalar y ejecutar aplicaciones nativas de Windows, tales como Office en
cualquiera de sus versiones mediante la emulación del API Win32).
Algunos de los inconvenientes de utilizar este sistema operativo se describen a
continuación. El pago de licencias de uso (319€ de la versión Windows 7 Ultimate que
se reducen a 299 € en caso de actualización desde versiones anteriores). La
imposibilidad de ver el código fuente del sistema, por lo las correcciones tendrán que
venir siempre desde Microsoft además de no poder colaborar en su solución, por lo
que puede tardar más de lo debido.
A pesar de que puede haber más inconvenientes, el desarrollo de aplicaciones
Android en Windows es posible, aunque en el apartado de consideraciones de
rendimiento, se verá si es lo más conveniente.
3.2.2 Linux
Linux se está imponiendo en los últimos años como una alternativa plausible a
Windows en el entorno de usuario. Cada vez más aplicaciones comerciales son
compatibles con este sistema operativo, y siempre se pueden encontrar alternativas de
calidad a dichas aplicaciones, con lo que el pago de licencias deja de ser un
impedimento para el empleo de tecnologías de información. Aunque en la actualidad
3 Entorno de desarrollo 39
podemos encontrar muchas distribuciones de Linux, una de las más extendidas y que
más ha mimado la facilidad de uso es Ubuntu. Como en el caso de Windows, se ha
empleado la última versión disponible, la 9.10 (distribuida en Octubre de 2009).
La instalación del entorno de desarrollo en este sistema operativo es muy sencilla,
además de que hay múltiples manuales en la red y muchos foros de soporte en el caso
de que aparezcan problemas.
Utilizar Windows para desarrollar es posible, aunque en el apartado de Linux vs
Windows, se verá si es lo más conveniente.
3.2.3 Linux vs Windows
Tras haber instalado y configurado el entorno de desarrollo en ambos sistemas
operativos y haber desarrollado en ambos, se extraen varias conclusiones que inclinan
la balanza hacia el empleo de Linux.
A la hora de configurar el entorno en Linux, se han debido realizar dos pasos
adicionales para instalar el SDK de Android y solucionar un bug de Eclipse, por lo que
aquí Windows es el ganador aunque estos pasos no son complicados y no llevan
mucho tiempo, aparte de que estuvieron documentados en diversas páginas web tan
pronto como los desarrolladores detectaron el problema. Este bug sólo está presente en
la última versión de Ubuntu, la 9.10.
En el apartado de funcionalidad, no se ve ninguna diferencia entre un sistema
operativo y otro, en ambos se dispone de las mismas herramientas y posibilidades de
desarrollo
A la hora de obtener soporte, se pueden encontrar foros para ambos sistemas
operativos, aunque en el apartado de desarrollo en Android, es independiente el
sistema operativo ya que el empleo del lenguaje es el mismo al ser la plataforma final
(el sistema operativo Android) común para ambos sistemas operativos.
La principal desventaja de emplear Windows viene a la hora de comparar el
rendimiento en ambos sistemas. La ejecución inicial de Eclipse en Linux es de 10
segundos aproximadamente, aumentando este tiempo a 30 segundos
3 Entorno de desarrollo 40
aproximadamente en Windows. Tras cargar el entorno de desarrollo, se realiza
automáticamente la carga del SDK de Android. En Linux esta carga apenas toma 5
segundos, en Windows tarda hasta un minuto. Haciendo diferentes pruebas, se pueden
atribuir estas diferencias al empleo de antivirus en Windows, aunque con el antivirus
desactivado, los tiempos de carga siguen siendo mayores. Aún así, aún en la ejecución
del emulador de Android para probar y detectar fallos en aplicaciones que están
siendo desarrolladas, el rendimiento es mejor en Linux, cuya carga y respuesta son
mejores que en Windows.
Como conclusión, se recomienda realizar los desarrollos bajo Linux, ya que aunque
la configuración inicial puede tomar un poco más de esfuerzo (aunque en ningún caso
más de 5 minutos adicionales y ninguna complicación técnica), el rendimiento
posterior la compensará con creces, facilitando un entorno de desarrollo más veloz,
eficiente y con mejor sensación de respuesta para el usuario.
3.3 Instalación de Java
La instalación de Java en Ubuntu es muy sencilla, puesto que basta con instalar el
paquete sun-java6-jdk desde el gestor de paquetes, aunque también se puede usar apt
en una consola de comandos.
A pesar de que en algunos sitios recomiendan la utilización de la versión 5 de Java
ya que la 6 puede tener incompatibilidades con la utilización del indicador @Override,
he podido constatar que se puede trabajar con ambas versiones de manera
transparente. SUN ya no ofrece soporte para la versión 5 y se recomienda que se
emplee la versión 6.
Aún así, a continuación se describe el procedimiento para instalar Java 5 en Ubuntu
9.10 por si fuera necesario para el desarrollo. Como en los repositorios de Ubuntu 9.10
ya no está el paquete correspondiente a Java 5, se deberán emplear los repositorios de
la versión anterior de Ubuntu, la 9.04, para ello debemos editar el fichero sources.list
situado en /etc/apt/ ejecutando:
$ sudo gedit /etc/apt/sources.list
Se deberán añadir las siguientes líneas:
3 Entorno de desarrollo 41
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
A continuación se deberá guardar y cerrar el archivo. El siguiente paso es actualizar
la información de los repositorios e instalar el paquete necesario, lo cual se realiza con
los siguientes comandos:
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
Por ultimo, se deberá ejecutar el comando:
$ sudo update-alternatives --config java
Este comando sirve para indicar al sistema que debe emplear Java 5 por defecto, por
lo que al ejecutarlo se debe seleccionar la opción java-1.5.0-sun
3.4 Instalación del entorno de desarrollo: Eclipse
La instalación del entorno de desarrollo Eclipse se limita a bajar el fichero zip
correspondiente al sistema operativo, descomprimirlo y ejecutarlo. En Ubuntu también
se puede emplear el gestor de paquetes, que se encargará de descargar e instalar el
entorno de desarrollo. Tras la primera ejecución, se pide al desarrollador que escoja su
carpeta de trabajo, que será el directorio donde se almacenen los diferentes proyectos
que se desarrollen en Eclipse. Con dicha carpeta se deberá tener especial cuidado,
realizando backups periódicos ya que su pérdida supondría la pérdida del trabajo
realizado. Esta carpeta también nos permitirá mover proyectos entre diferentes
entornos de trabajo siempre que se emplee como entorno de desarrollo Eclipse.
En Ubuntu 9.10, hay un bug que produce que no se detecten correctamente las
pulsaciones en los botones de la aplicación, por lo que habrá que emplear un script
sencillo para lanzar la aplicación y así no sufrir el molesto bug (en versiones anteriores
de Ubuntu no se produce este bug). El script es el siguiente:
#!/bin/sh
3 Entorno de desarrollo 42
export GDK_NATIVE_WINDOWS=1
/RUTA_DONDE_ESTA_INSTALADO_ECLIPSE/eclipse
3.5 Instalación del Android SDK
Para instalar el SDK de Android, se debe obtener de la dirección
http://developer.android.com/sdk/ la versión correspondiente a Linux en este caso.
Se deberá bajar el .zip y descomprimir. Tras esto, se debe entrar en la carpeta del sdk y
acceder al directorio tools, ejecutando el archivo android (también se puede hacer por
ventana de comandos).
Figura 5. Gestor del SDK de Android
Tras la ejecución, se abrirá el gestor del SDK de Android, que permite:
Descargar diferentes versiones del SDK (1.1, 1.5, 1.6, 2.0, 2.0.1, 2.1 …)
Actualizar las herramientas a la última versión disponible.
Bajar las Google APIs, que permiten el uso de interfaces para utilizar
funcionalidad de aplicaciones de Google como Maps, Gmail, etc.