Vous êtes sur la page 1sur 60

Estudio y aplicación de Filtros de Kalman

sobre sistemas de posicionamiento global


para el suavizado de trayectorias
geoposicionadas
Autor: Julio Bianco
Director: Dr. Gabriel Infante-Lopez
Trabajo especial de grado
Estudio y aplicación de Filtros de
Kalman sobre sistemas de
posicionamiento global para el suavizado
de trayectorias geoposicionadas

Autor: Julio Bianco


Director: Dr. Gabriel Infante-Lopez

.
Universidad Nacional de Córdoba
Facultad de Matemática, Astronomı́a y Fı́sica

19 de Diciembre de 2013
“The best way to follow your dreams, is to put a gps on the back of your eye lids.”

Michael Phelps
Resumen

Los Filtros de Kalman son un algoritmo desarrollado por Rudolf E. Kalman en 1960 que
sirve para poder identificar el estado oculto (no medible) de un sistema dinámico lineal,
pero sirve además cuando el sistema está sometido a ruido poco aditivo. Los Filtros
de Kalman son capaces de escoger la ganancia K de realimentación del error de forma
óptima cuando se conocen las variaciones de ruido que afectan al sistema.

Desde su introducción los Filtros Kalman han llegado a ser un componente integral
dentro de miles de sistemas de navegación tanto militares como civiles. Los Filtros de
Kalman, son algoritmos digitales recursivos aparentemente simples, han sido los favori-
tos para integrar los datos de los sensores de navegación para alcanzar un rendimiento
óptimo de todo el sistema. Para proveer valores estimados correctos del sistema tales
como coordenadas de posición el filtro usa modelos estadı́sticos, los cuales ponderan
apropiadamente cada una de las mediciones nuevas relativas a la información obtenida
anteriormente. También determinar los valores estimados de incerteza, utilizados para
realizar evaluaciones cualitativas en tiempo real ó para estudios de los sistemas de cálcu-
los no convencionales. A causa de que se obtiene un rendimiento óptimo, versatilidad y
una fácil implementación, los Filtros Kalman han resultado ser populares especialmente
para los cálculos de la posición en los sistemas de posicionamiento global. En la actuali-
dad los sistemas de geolocalización se encuentran disponibles en diversos dispositivos de
uso cotidiano, y particularmente se encuentran integrados y disponibles en gran varie-
dad de teléfonos Smartphones. A pesar de los esfuerzos para obtener datos precisos, la
información obtenida se encuentra afectada por ruido, la cual puede ser mejorada con
la utilización de filtros de Kalman para obtener un camino más suave y preciso basa-
do en la reducción del error y el cálculo de la posición real que se desprende del algoritmo.

Clasificación: I.4.4 Restoration / Kalman filtering

Palabras clave: ingenierı́a de software, Sistemas de posicionamiento global, GPS, Fil-

tros de Kalman, suavizado de trayectorias, Android


Agradecimientos
Muchas personas han colaborado directa e indirectamente en la ejecución de este trabajo
acompañando, apoyando, corrigiendo, y empujando para que finalmente suceda, y es mi
voluntad agradecérselo a todos ellos. Nombro sólo a algunos que en este momento se me
hacen presente.

A Carolina, por las incesantes horas de compañı́a y apoyo que me dieron la fuerza
necesaria para no bajar los brazos y terminar. Este trabajo es tan tuyo como mı́o.

A Caro Dania, que peleó este trabajo palmo a palmo conmigo, revisó y ayudó corrigiendo
incesantemente, me incentivó a continuar en cada tropiezo, y ayudando a poner en
contexto muchas ideas locas y palabras cruzadas.

A Javier, quien se sentó conmigo a revisar y encontrar soluciones a los problemas que
surgieron al codificar. La calidad del código y la capacidad de tenerlo en tiempo y en
forma se concretaron gracias a sus aportes desinteresados.

A mis viejos, hicieron muchos esfuerzos para darme una educación, y hoy finalmente van
a ver cerrar esta etapa.

A Pedro D’argenio, el incansable empujador de alumnos. Me guió y acompañó mucho


tiempo en mis decisiones, y me ayudó a ver la luz al final del túnel.

Al Flaco, compañero incansable de largas noches de facultad y amigo incondicional.

A Cesar Martinez, ex-jefe que me empujó y retó a cerrar esta etapa. Gracias a su buena
predisposición y compromiso pude terminar con las materias que adeudaba y enfocarme
en este trabajo.

A Gabriel Infante-Lopez, quien aceptó dirigir este trabajo, me ayudó con el planteo de
la temática, y me dio libertad para que pudiera desarrollarlo respetando mi criterio y
conocimientos.

A los amigos, los de la Picada Moreana, Guille, Walter, los chicos de la facu que me
regalaron su amistad, y que llegué a conocer gracias a mi paso por esta institución.
Ustedes son también parte de este camino.

Julio

iv
Índice general

Resumen III

Agradecimientos IV

1. Introducción 1
1.1. Bases y lineamientos del trabajo . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Organización del trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Fundamentos de los filtros de Kalman 4


2.1. Filtros de Kalman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1. El modelo de sistema dinámico subyacente . . . . . . . . . . . . . 4
2.1.2. Rendimiento del algoritmo y performance del comportamiento . . 5
2.2. Filtros de Kalman discretos . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1. El proceso de estimación . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.2. El origen computacional del filtro . . . . . . . . . . . . . . . . . . . 6
2.2.3. El origen probabilı́stico de los filtros . . . . . . . . . . . . . . . . . 8
2.2.4. El algoritmo discreto de filtros de Kalman . . . . . . . . . . . . . . 8

3. Fundamentos de los sistemas de posicionamiento global, y uso de los


Filtros de Kalman en GPS 12
3.1. Estructura de la señal de GPS . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.1. Descripción general de las señales de GPS . . . . . . . . . . . . . . 12
3.1.1.1. La señal portadora del GPS . . . . . . . . . . . . . . . . 13
3.1.1.2. Código de Oro . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.1.3. Mensaje de dato . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.1.4. Resumen sobre GPS . . . . . . . . . . . . . . . . . . . . . 16
3.2. Software de receptores de GPS tradicionales . . . . . . . . . . . . . . . . . 16
3.2.1. Descripción general . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.2. Entrada del receptor . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.3. Adquisición de datos de los satélites . . . . . . . . . . . . . . . . . 18
3.2.4. Lazos de seguimiento . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.5. Determinación de la posición . . . . . . . . . . . . . . . . . . . . . 19
3.3. Algoritmo de seguimiento basado en Filtros de Kalman . . . . . . . . . . 20
3.3.1. Lazos de seguimiento como Filtros de Kalman . . . . . . . . . . . 20

4. Suavizado de trayectorias geoposicionadas utilizando Filtros de Kal-


man 26
v
vi

4.1. Análisis del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26


4.1.1. Adaptación del método de Filtros de Kalman al contexto del pro-
blema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2. Caracterı́sticas de la solución . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2.1. Almacenamiento de datos . . . . . . . . . . . . . . . . . . . . . . . 31
4.2.2. Modos de visualización de la información . . . . . . . . . . . . . . 31
4.2.2.1. Visualización a través de tabla de registros . . . . . . . . 31
4.2.2.2. Visualización en mapa . . . . . . . . . . . . . . . . . . . . 32
4.2.2.3. Exportación de registros para visualización externa . . . 34
4.2.3. Obtención y almacenamiento de los datos de geoposicionamiento . 34
4.2.3.1. Uso de los proveedores de localización . . . . . . . . . . . 36
4.2.4. Uso de tecnologı́as HTML5 para representar las trayectorias geo-
localizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3. Procesamiento de datos de geoposicionamiento para suavizar una trayectoria 38
4.3.1. Aplicación de Filtros de Kalman simplificados sobre los datos . . . 41

5. Análisis de la información 44
5.1. Análisis comparativo de los valores de precisión . . . . . . . . . . . . . . . 44
5.2. Análisis de trayectorias geolocalizadas sobre mapas . . . . . . . . . . . . . 46

6. Conclusión y futuros trabajos 49


6.1. Conclusión del trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2. Futuros trabajos propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Bibliografı́a 52
Capı́tulo 1

Introducción

1.1. Bases y lineamientos del trabajo

Los mapas de papel, sobre todo aquellos que contienen información sobre caminos, ru-
tas y autopistas, se utilizan cada vez menos. 20 años atrás habı́a un mapa de ruta en
cada automóvil, pero hoy en dı́a han quedado completamente obsoletos. El invento res-
ponsable de dicha obsolescencia es el sistema de posicionamiento global llamado GPS,
un sistema electrónico que utiliza una constelación de satélites y receptores de bajo
precio capaces de determinar en tiempo real su posición con una precisión de pocos
metros. En la actualidad los sistemas de geolocalización se encuentran disponibles en
diversos dispositivos de uso cotidiano, y particularmente en una gran variedad de teléfo-
nos Smartphones, los cuales nos permiten obtener la posición del dispositivo con cierto
error en cada momento. Es importante a la hora de utilizar esta información, contar con
una posición con el menor ruido posible, pero entonces ¿Qué se puede descartar de este
ruido? La primera respuesta que nos viene a la mente es el tomar el promedio de alguna
secuencia de muestras. Este enfoque no funciona en la mayorı́a de los problemas de la
vida real ya que deberı́amos mantener la historia de toda la información para lograr este
cálculo, y no estamos asegurando que el nuevo valor sea correcto, pues estamos tomando
datos basados en la media del error, y obteniendo un dato con un error alto, alterarı́a
toda la secuencia. Por lo tanto necesitamos un abordaje más sofisticado a la solución de
estos problemas, y para este trabajo utilizaremos Filtros de Kalman [1].

Los filtros de Kalman son un conjunto de ecuaciones matemáticas que proveen recursos
computacionales (iterativos) para estimar el estado de un proceso, de una manera que
se minimice la media del error cuadrático. Los filtros de Kalman son muy poderosos
en los siguientes aspectos: soportan estimaciones de estados pasados, presente, e incluso

1
2

futuros, y lo pueden hacer incluso cuando la naturaleza precisa del sistema modelado es
desconocida.

En su esencia, los filtros de Kalman son un conjunto de ecuaciones matemáticas que


implementan un estimador de tipo corrector/predictor, que es óptimo en el sentido de
que minimiza el error estimado cuando algunas condiciones presupuestas son alcanzadas.
Desde que fueron introducidos, los filtros de Kalman han sido sujeto de investigación
y aplicación, particularmente en el área de la navegación autónoma o asistida. Esto es
debido en buena medida por los avances en la computación digital, que le dan un uso
práctico a los filtros, pero también a la relativa simplicidad y la robustez de los filtros
de por sı́. Pocas veces las condiciones óptimas realmente existen, y sin embargo los
filtros trabajan correctamente para muchas aplicaciones mas allá de esta situación [2].
Algunos de los usos mas extensamente usados de los Filtros de Kalman son, por ejemplo,
filtrado de ruido, análisis de señales subespaciales, procesamiento de imágenes entre
otros. en definitiva, se pueden usar los Filtros de Kalman con una aproximación muy
buena modelando inteligentemente el problema.

A fines de encarar este trabajo, mejoraremos y corregiremos las posiciones obtenidas por
un sistema de posicionamiento global aplicándoles Filtros de Kalman, logrando ası́ obte-
ner un valor más ajustado a la realidad basándonos en los datos anteriormente medidos
y estimados. Esta técnica nos permitirá ajustar el camino realizado en cada paso, ob-
teniendo como resultado una trayectoria geolocalizada más suave y con un error mucho
menor.

Este trabajo nos permitirá aprender el uso de las técnicas antes mencionadas, y su ma-
nipulación para calcular datos más uniformes a los medidos, suavizando las trayectorias
a trazar sobre un mapa.

1.2. Organización del trabajo

A fines de poder llevar adelante este trabajo necesitaremos en principio estudiar los
Filtros de Kalman en general, proveyendo el marco teórico adecuado para su posterior
implementación. También estudiaremos y analizaremos los conceptos fundamentales del
análisis de señales de los sistemas de posicionamiento global desde el punto de vista del
emisor (satélite), como del punto de vista del receptor.

A posteriori, y ya con el marco teórico necesario analizado, nos enfocaremos en la des-


cripción de la solución propuesta, y la implementación de una aplicación móvil para
sistemas Android. Para ello analizaremos tres aspectos del trabajo:
3

La lectura de los datos provistos por el sistema relacionados con la posición

La utilización de la técnica de manipulación de datos basada en Filtros de Kalman

La visualización de los datos analizados

La implementación de una aplicación para dispositivos utilizando sistemas Android

Para finalizar analizaremos el comportamiento de la salida obtenida comparando estos


datos con los obtenidos a través de las mediciones, y dilucidando como esta técnica afecta
las mediciones y permite asegurar una mejor utilización de los dispositivos móviles.
Capı́tulo 2

Fundamentos de los filtros de


Kalman

2.1. Filtros de Kalman

En esta sección nos abocamos al estudio de los filtros de Kalman en general, para poder
dilucidar su funcionamiento, y los algoritmos que se implementan, y que a posteriori
utilizaremos para mejorar los valores de geolocalización que presentaremos basándonos
en las mediciones obtenidas con los sistemas de posicionamiento global.

2.1.1. El modelo de sistema dinámico subyacente

Los filtros de Kalman están basados en sistemas dinámicos lineales discretizados en el


dominio del tiempo. Estos son modelados en una cadena de Markov [3] construida en
operaciones lineales perturbadas por ruido Gaussiano. El estado del sistema es represen-
tado como un vector de números reales. En cada paso discreto de tiempo una operación
lineal es aplicada al estado para generar el nuevo estado, con parte de ruido mezclado, y
opcionalmente alguna información proveniente de los controles del sistema si estos son
conocidos. Al mismo tiempo, otra operación lineal mezclada con más ruido genera la
salida observada del estado verdadero (escondido).

Los filtros de Kalman pueden ser considerados como análogos al modelo de Markov es-
condido, con la diferencia clave que la variable de estado escondido toma valores en un
espacio continuo (en oposición a un espacio de estado discreto como es en el modelo de
Markov escondido). Además, y en contraste con el modelo de ruido Gaussiano utilizado
por los filtros de Kalman, los modelos de Markov escondidos pueden representar distri-
buciones arbitrarias para el siguiente valor de las variables de estado. Notemos que hay
4
5

una fuerte dualidad entre las ecuaciones de los filtros de Kalman y las de los modelos
de Markov escondidos [4] [5].

2.1.2. Rendimiento del algoritmo y performance del comportamiento

Es conocido, en la teorı́a, que los filtros de Kalman son óptimos en casos en que a) el
modelo coincide perfectamente con el sistema real, b) el ruido de entrada es ruido blanco,
y c) la covarianza del ruido es conocido exactamente. Muchos métodos para la estimación
de la covarianza del ruido han sido propuestos durante las últimas décadas.

Después de que las covarianzas son identificadas, es útil evaluar la performance del filtro,
por ejemplo, si es posible mejorar la calidad estimada del estado o no. Se sabe que si
los filtros de Kalman trabajan de manera óptima, la secuencia de innovación (el error
de predicción de salida) es un ruido blanco.

Para la evaluación del rendimiento del filtro es necesario inspeccionar la propiedad de


testigo de las innovaciones. Varios métodos diferentes pueden ser usados para este fin [6].

2.2. Filtros de Kalman discretos

En esta sección nos enfocaremos en detallar los conceptos fundamentales que sugerimos
en la sección anterior, y daremos un contexto mas profundo al análisis de los filtros de
Kalman. Describiremos los filtros en su formulación original [7], donde el valor medido
ocurre y el estado es estimado en un momento discreto del tiempo.

2.2.1. El proceso de estimación

Los filtros de Kalman abordan el problema general de tratar de estimar el estado x ∈ <n
de un proceso controlado discreto en el tiempo. Dicho proceso es gobernado por una
ecuación diferencial lineal estocástica:

xk = Axk−1 + Buk + wk−1 (2.1)

con una medición z ∈ <n que es

zk = Hxk + vk (2.2)
6

las variables aleatorias wk y vk representan el proceso de medición del ruido respectiva-


mente. Son asumidas independientes (una de la otra), y con distribución de probabilidad
normal.

p(w) ∼ N (0, Q) (2.3)

p(v) ∼ N (0, R) (2.4)

En la práctica, las matrices de covarianza de ruido de proceso Q, y de covarianza de


ruido de medición R pueden cambiar con cada paso o medición, sin embargo asumimos
que son constantes.

La matriz cuadrada A de tamaño n x n en la ecuación 2.1 relaciona el estado en el


instante (paso) actual k, con el estado en el instante anterior k − 1, en la ausencia de
una función de manejo o ruido de proceso. Notar que en la práctica A puede cambiar con
cada paso, pero asumiremos que es constante. La matriz B relaciona la entrada control
opcional con el estado x. La matriz en la ecuación de medición 2.2 relaciona el estado
de la medición zk . En la práctica puede cambiar con cada instante o medición, pero
será asumida constante pare nuestro análisis.

2.2.2. El origen computacional del filtro

El objetivo es el de encontrar una ecuación que compute un estimado del estado a poste-
riori x b−
bk como una combinación lineal de un estimado a priori x k y una diferencia pesada
entre una medición actual y una predicción de medición. A continuación introduciremos
b−
los elementos requeridos para generar nuestras definiciones. Llamaremos x n
k ∈ < a la
estimación a priori del estado en el paso k dado el conocimiento del proceso antes del
bk ∈ <n a la estimación a posteriori del estado en el paso k dada la medición
paso k, y x
zk . Ahora estamos en condiciones de definir el estado estimado del error a priori y a
posteriori de la siguiente manera

e− b−
k ≡ xk − x k
(2.5)
e k ≡ xk − x
bk

La covarianza del error estimado a priori la definimos como

Pk− = E[e− −T
k ek ] (2.6)
7

y la covarianza del error estimado a posteriori es

Pk = E[ek eTk ] (2.7)

Por lo cual, basados en la información antes descripta, podemos escribir

x b−
bk = x b−
k + K(zk − H x k) (2.8)

La justificación para la ecuación 2.8 la podemos encontrar en .El origen probabilı́stico del
b−
filtro”. En la ecuación 2.8 el término (zk − H x k ) es llamado la medición de innovación,
b−
o el residual. El residual refleja la discrepancia entre la medición predicha H x k y la
medición real zk . Un residual de cero significa que los dos valores están en completa
concordancia, mientras que la matriz K de tamaño n x m es escogida como la ganancia
o factor de mezcla que reduce al mı́nimo la ecuación de covarianza del error a posteriori
2.7. Esta minimización puede lograrse sustituyendo la ecuación 2.8 en la definición 2.5,
sustituyéndola en la ecuación 2.7, alcanzando las expectativas, tomando la derivada de la
traza del resultado con respecto a K, configurando ese resultado igual a cero, devolviendo
entonces para K [8] [9] [10].

Pk− H T
Kk = Pk− H T (HPk− H T + R)−1 = (2.9)
HPk− H T + R

Esta es una de las formas en que el K resultante que minimiza la ecuación 2.7. Notemos
que Todas las ecuaciones del filtro de Kalman pueden ser manipuladas algebráicamente
de diferentes maneras. Si observamos la ecuación 2.9 vemos que mientras la covarianza
del error medido se acerca a cero, pondera el valor residual de la ganancia K más
fuertemente. Especı́ficamente,

lı́m Kk = H − 1
Rk →0

Por otro lado, mientras la covarianza de error estimado a priori Pk− se acerca a ce-
ro,pondera el valor residual de la ganancia K más débilmente. Especı́ficamente,

lı́m Kk = 0
Pk− →0

Otra forma de pensar la ponderación de K es la siguiente: mientras la covarianza del


error estimado R se acerca a cero, el valor medido zk es más y más çonfiable”, mientras
8

b−
la medición predicha H x k es cada vez menos confiable. Por otro lado, mientras la co-
varianza del error medido a priori Pk− se acerca a cero, el valor medido zk es cada vez
b−
menos confiable, mientras que la medición predicha H x k es más confiable.

2.2.3. El origen probabilı́stico de los filtros

El origen de la justificación para la ecuación 2.8 nació en la probabilidad de la estimación


b−
a priori de x k condicionada en toda medición anterior zk (regla de Bayes). Por ahora
basta con señalar que el filtro de Kalman mantiene los dos primeros momentos de la
distribución de estado,

E[xk ] = x
bk
E[(xk − x bk )T ] = Pk
bk )(xk − x

La ecuación 2.8 refleja el sentido (el primer momento) de la distribución de estado - Esta
es normalmente distribuida si la condición de las ecuaciones 2.3 y 2.4 son alcanzadas. Por
otro lado, la ecuación de covarianza del error estimado a posteriori 2.7 refleja la varianza
de la distribución del estado (el segundo momento no central), en otras palabras:

P (xk |zk ) ∼ N (E[xk ], E[(xk − x bk )T ]) = N (b


bk )(xk − x xk , Pk )

En [10] podemos encontrar mas detalles del origen probabilı́stico de los filtros de Kal-
man.

2.2.4. El algoritmo discreto de filtros de Kalman

Los filtros de Kalman estiman un proceso a través del uso de una forma de control de
retroalimentación. El filtro estima el estado del proceso en un cierto momento para luego
obtener feedback en la forma de mediciones (ruidosas). Como tales, las ecuaciones de
los filtros de Kalman caen en dos grupos: ecuaciones de actualización de tiempo, y ecua-
ciones de actualización de medición. Las ecuaciones de actualización de tiempo son las
responsables de proyectar hacia adelante (en el tiempo) el estado actual y la covarianza
estimada del error para obtener el estimado a priori para el paso siguiente en el tiempo.
Las ecuaciones de actualización de medición son responsables de la retroalimentación;
por ejemplo, para incorporar una nueva medición en el estimado a priori para obtener
un estimado a posteriori mejorado.
9

Actualización de tiempo Actualización de medición


(Predicción) (Corrección)

Figura 2.1: El ciclo de un filtro de Kalman en funcionamiento.

También podemos pensar las ecuaciones de actualización de tiempo como ecuaciones de


predicción, y a las ecuaciones de actualización de medición como ecuaciones de correc-
ción. En efecto el algoritmo de estimación final se asemeja a un algoritmo de predic-
ción/corrección para resolver problemas numéricos como podemos apreciar en la figura
2.1. En la figura observamos que la actualización de tiempo proyecta el estado actual
estimado de antemano en el tiempo, mientras que la actualización de medición ajusta
la estimación proyectada por una medición real en ese momento.

Actualizaciones de tiempo
(Predicción)

b − = Ab
X xk−1 + Buk (2.10)
k

Pk− = APk−1 AT + Q (2.11)

Tabla 2.1: Ecuaciones de actualización de tiempo del filtro discreto de Kalman

El las tablas 2.1 y 2.2 mostramos la ecuación que representa las actualizaciones de tiempo
y de medición.

Como podemos observar, las ecuaciones de actualización de tiempo en la tabla 2.1 pro-
yectan el estado y los estimados de covarianza hacia adelante desde el instante k − 1 al
instante k. Además, las matrices A y B son las involucradas en la ecuación 2.1, mientras
que Q proviene de la ecuación 2.3.

La primera tarea a realizar durante la actualización de medición es computar la ganancia


de Kalman Kk . 1 El próximo paso es medir el proceso para obtener zk , y generar un
1
Notar que la ecuación 2.12 es la misma que la ecuación 2.9.
10

Actualizaciones de mediciones
(Corrección)

Kk = Pk− H T (HPk− H T + R)− 1 (2.12)

x b−
bk = x b−
k + Kk (zk − H x k) (2.13)
Pk = (I − Kk H)Pk− (2.14)

Tabla 2.2: Ecuaciones de actualización de medición del filtro discreto de Kalman

Paso siguiente

Actualizaciones
de mediciones
Actualización de tiempo (corrección)
(predicción)
1. Computar la ganancia de Kalman
1. Proyectar el estado Kk = P− T − T
k H (HPk H + R) 1

b − = Ab
X xk−1 + Buk
k 2. Actualizar el estimado vı́a zk
2. Proyectar el error de covarianza x b−
bk = x k + Kk (zk − Hbx−k)
P−
k = APk−1 A + Q
T
3. Actualizar el error de covarianza
Pk = (I − Kk H)P− k

La salida en k será la entrada en k + 1

Estimación inicial para x


bk−1 y Pbk−1

Figura 2.2: Una imagen completa de la operación de los filtros de Kalman

estimado del estado a posteriori mediante la incorporación de la medición como en la


ecuación 2.8. 2 El paso final es obtener una estimación de covarianza del error a posteriori
vı́a la ecuación 2.14.

Después de cada par de actualizaciones de tiempo y de medición, el proceso se repite


con los estimados a posteriori anteriores usados para proyectar o predecir los nuevos
estimados a priori. La naturaleza recursiva de de los filtros de Kalman es una de sus
caracterı́sticas más interesantes. Esto permite que las implementaciones prácticas sean
mucho más factibles que, por ejemplo, una implementación de los filtros de Wiener [10].
2
Notemos que la ecuación 2.13 es la ecuación 2.8 la cual volvemos a introducir por completitud.
11

Los filtros de Wiener son diseñados para operar sobre todos los datos directamente
para cada estimación, mientras que los filtros de Kalman condicionan recursivamente
la estimación actual en todas las mediciones pasadas. La figura 2.2 ofrece una imagen
completa de la operación del filtro, combinando el diagrama de alto nivel de la figura
2.1 con las ecuaciones de la tablas 2.1 y 2.2.
Capı́tulo 3

Fundamentos de los sistemas de


posicionamiento global, y uso de
los Filtros de Kalman en GPS

3.1. Estructura de la señal de GPS

Para poder entender el funcionamiento de los sistemas de posicionamiento global, de-


bemos analizar su señal en dos etapas diferentes, la generación de la señal y la lectura
para su posterior utilización de dichas señales. En esta sección analizaremos estructura
de las señales generadas en la constelación de satélites que proveen la información de
geolocalización, y de que manera hacen posible que las señales de toda la constelación
sean accedidas por un receptor sin ser interferidas entre si.

3.1.1. Descripción general de las señales de GPS

El sistema de GPS es un enlace de comunicación digital basado en división de código y


acceso múltiple (CDMA). Las señales satelitales consisten en una portadora sinusoidal,
un mensaje de navegación digital, y una secuencia única de ruido pseudo aleatorio de
amplio espectro (PRN ). El mensaje de navegación y la secuencia PRN (código) son
codificados en la fase de la señal de la portadora a través del uso de la técnica de
modulación por desplazamiento de fase binaria (BPKS ) [11]. Los múltiples satélites del
sistemas operan en la misma frecuencia mas no interfieren entre si con los otros, dicha
operación es posible a través del uso de secuencias únicas de PRN. Además, los códigos
PRN son usados para medir el rango entre cada satélite y el usuario. El mensaje de datos
transmitido por cada satélite provee información suficiente para calcular la posición del
12
13

satélite. Mediante el uso de mediciones de distancia a cuatro o más satélites y utilizando


además el mensaje de datos para determinar las posiciones de satélites, los usuarios
pueden encontrar su posición en la tierra.

Las señales satelitales consisten actualmente de componentes civiles y militares. El com-


ponente civil de la señal está disponible para todos los usuarios y pueden ser utilizados
para determinar la posición. La parte militar de la señal del satélite se encuentra solo
disponible para usuarios seguros y proveen capacidades de posicionamiento mejoradas.
Durante este trabajo utilizaremos solo componentes civiles de la señal de GPS.

Para determinar la posición del satélite, el usuario debe obtener el mensaje de datos.
Además, el usuario debe medir la fase de cada uno de las secuencias de PRN que son
recibidas de los satélites. A su vez, el usuario debe medir la fase de cada una de las
secuencias de PRN recibidas de los satélites. Es trabajo del receptor el realizar estas
tareas, la cual es realizada explotando las propiedades de la portadora y las señales
de PRN. Las propiedades de auto-correlación de la secuencia de PRN son usadas para
determinar la fase de los códigos de PRN recibidos.

3.1.1.1. La señal portadora del GPS

Los satélites de GPS transmiten a dos frecuencias diferentes, la frecuencia de enlace 1


(L1 ) es aproximadamente 1575.42 MHz y la frecuencia de enlace 2 (L2 ) es apenas 1227.6
MHz. Las frecuencias exactas de L1 y L2 son mostradas en la ecuación 3.1.

L1 = 154 × 10,23M Hz
(3.1)
L2 = 120 × 10,23M Hz

Las frecuencias L1 y L2 son ambas múltiplos de un reloj maestro de 10.23 MHz y se


encuentran parcialmente desplazadas de sus valores normales cuando son transmitidas
para ayudar a corregir los efectos de la relatividad. Además, debido a las frecuencias
duales, los usuarios pueden compensar los efectos de la ionosfera.

La señal L1 transmitida por el i-esimo satélite llamada SL1i , está compuesta de compo-
nentes en fase y de cuadratura, y se define de la siguiente manera

p p
SL1i = 2Pc Gi (t)Di (t)cos(ω1 t + φ) + 2Pp L1 Pi (t)Di (t)sen(ω1 t + φ) (3.2)
14

Ambos componentes consisten de una secuencia PRN (también llamada código de Oro),
el mensaje de datos de navegación y sus portadoras sinusoidales. El componente en fase
es modulado por Coarse/adquisition (C/A), código de Oro Gi (t) y el mensaje de datos
Di (t) del satélite. El componente de cuadratura de la señal L − 1 es modulada por
precisión P código de Oro Pi (t) y el mismo mensaje de datos que la componente en
fase requiere. El código C/A, P y el mensaje de datos son especı́ficos de cada satélite.
La potencia Pc de la componente en fase es 3 dB más fuerte que la potencia de la
componente cuadrafase, Pp . Para más detalles se puede consultar [12]

La señal L2 , llamada SL2i , es modulada con el mismo mensaje de datos que la señal L1 .

p
SL 2i = 2Pp,L2 Pi (t)Di (t)cos(ω2 t + φ) (3.3)

Ésta es modulada por alguno de los códigos P o C/A. Actualmente el canal L2 es


modulado con código P . Como el acceso al código P es propietario, no estará disponible
durante este trabajo, y consecuentemente el código P y la señal L2 no serán discutidos
de aquı́ en adelante.

3.1.1.2. Código de Oro

La secuencia PRN, Gi (t) y Pi (t) usadas por el satélite, son llamadas códigos de Oro. Los
códigos de Oro tienen un gran ancho de banda y son usados para difundir el espectro de
los mensajes de datos sobre un ancho de banda mucho más amplio. En el receptor, el
efecto de difusión de la secuencia PRN es removida usando réplicas generadas localmen-
te de los códigos de Oro transmitidos. Cada satélite transmite su único y propio código
de Oro, y el usuario recibe múltiples señales de satélites en casi la misma frecuencia. El
usuario puede rastrear los códigos individuales recibidos porque los códigos son prácti-
camente ortogonales entre si, esto quiere decir que si el receptor está usando un código
de Oro para rastrear un satélite especı́fico, en un canal del receptor, la señal recibida
del otro satélite son efectivamente anuladas en ese canal. Este aspecto de los códigos de
Oro hacen las propiedades del CMDA del sistema de GPS posible [13].

Los códigos de Oro son formados por una suma módulo 2 de dos secuencias de largo
máximo. Las secuencias de longitud máxima son formadas por generadores de registros
corridos (SRG) y se repiten a si mismo cada 2N −1 bits, donde N es el número de etapas
del SRG.
15

Los códigos de Oro C/A usados por el satélite están todos formados agregándoles las
mismas dos secuencias de longitud máxima, nombradas G1 y G2. Sin embargo los códigos
de Oro transmitidos por cada satélite son diferentes. Los diferentes códigos de Oro están
formados moviendo las secuencias G1 y G2 con respecto a cada uno de los otros en
el tiempo antes de agregarlos. Cada código de Oro tiene un desplazamiento de tiempo
especı́fico asociado a él. Todo lo necesario para producir una secuencia de PNR especı́fico
de un satélite es el retardo de tiempo definido por ese satélite y las secuencias G1 y
G2 [12].

Los códigos de Oro C/A son transmitidos a una velocidad de ficha de 1.023 Mbps. Los
sı́mbolos individuales de los códigos se conocen como fichas, en oposición a los bits del
mensaje de navegación. Para modular la señal e portadora S(t) utilizamos un código
g(t) generado como una secuencia binaria, utilizándolo de la siguiente manera:

S(t) = cos(ω1 t + πg(t)) (3.4)

Como la fase de la señal es desplazada unos 180◦ , el código de Oro es expresado como
sigue:

S(t) = G(t)cos(ω1 ) (3.5)

En esta ecuación, la secuencia binaria original g(t) ha sido mapeada a una secuencia de
±1 G(t). La forma mostrada en la ecuación 3.5 es la manera usual en que es representada
la modulación del código de Oro. Los códigos de Oro tienen una muy angosta función
de auto-correlación de tiempo. La función de auto corrección es lineal para π < 1f icha
de desalineación. Más allá que π = 1f icha, la función de auto-correlación es aproxima-
damente cero. las propiedades de auto-correlación del código de Oro son usadas para
rastrear la señal del satélite y hacer mediciones de pseudo-rango. Las propiedades de
correlación cruzadas de los códigos de Oro permiten a todos los satélites transmitir en
la misma frecuencia. Los diferentes códigos de Oro son prácticamente ortogonales entre
si. Cuando un receptor junta los datos de radio frecuencia (RF ), múltiples señales de
satélites son guardadas en la misma banda de frecuencia, el receptor toma la informa-
ción de un satélite especı́fico multiplicando el dato por una réplica en fase de el código
de Oro del satélite. Esta multiplicación efectivamente cancela todas las señales de los
16

otros satélites mientras remueve la modulación PRN de la señal recibida del satélite
seleccionado.

3.1.1.3. Mensaje de dato

El mensaje de datos transmitido por cada satélite contiene información sobre la órbita
del satélite, su estado de mantenimiento, el tiempo del sistema de GPS y el almanaque
de los otros satélites en la constelación. El mensaje de datos contiene la información
necesaria para que los usuarios sincronicen los relojes de sus sistemas y determinen su
posición.

El mensaje de datos es transmitido a 50 bits por segundo (bps), los mensajes se en-
cuentran armados en palabras de treinta bits. Diez palabras constituyen un subframe, y
cinco subframes arman un frame. En cada frame, los primeros tres subframes contienen
información del reloj y efemérides del satélite que transmite. Los subframes cuatro y
cinco proveen alternativamente información de soporte, como los datos de almanaque y
datos de corrección de ionosfera. Los datos de efeméride del satélite es información sobre
la órbita del satélite, y usando estos datos se calcula la posición del satélite. Finalmente,
los datos de almanaque son aproximadamente los datos de efeméride en el subframe 2 y
3, pero son válidos por un perı́odo de tiempo más largo.

3.1.1.4. Resumen sobre GPS

La habilidad de los usuarios de calcular su posición, velocidad y tiempo es posible gracias


a las señales del GPS. Todos los satélites transmiten una única secuencia de PRN, la
cual permite a todos los satélites transmitir en la misma frecuencia y no interferir entre
ellos. Las secuencias de PRN son también usadas para hacer mediciones de rango a los
satélites. Cada satélite también transmite un mensaje de navegación, el cual habilita al
usuario a calcular precisamente la posición del satélite que emite. Además, el mensaje
de navegación de un satélite puede ser usado para calcular la posición aproximada de
los otros satélites NAVSTAR. Los usuarios de los sistemas de GPS pueden procesar la
señal recibida a fin de extraer las fases de código de PRN, los datos de navegación y la
frecuencia de portadora.

3.2. Software de receptores de GPS tradicionales

La segunda parte de nuestro estudio de las señales de los sistemas de posicionamiento


global está enfocada en la recuperación de las señales emitidas por la constelación de
17

Control
Antena automático
de ganancia

IF analógico
Conversor Digital IF
4.1304 MHz
Preamplificador Convertidor analógi-
L1 co digital
(1.57542 GHz)

Oscilador de Sintetizador
referencia de frecuencia

Figura 3.1: Diagrama en bloques del receptor general de GPS

satélites, y en la obtención de los datos de geolocalización que posteriormente serán


entregados para obtener la localización requerida.

3.2.1. Descripción general

La primera tarea de cualquier receptor es determinar que satélites están a la vista y


luego de conocer la señal de qué satélite se encuentra disponible, el receptor intenta
localizar los componentes de portadora y PRN de esta señal especı́fica. Un receptor
tradicional usa un lazo de Costas para realizar el seguimiento de la portadora y un lazo
de retardo para realizar el seguimiento de la secuencia PRN, y usando la salida del lazo
de seguimiento, el mensaje de navegación para cada satélite es decodificado. El mensaje
de navegación provee al usuario de información suficiente para calcular la posición de
los satélites. Finalmente el usuario puede calcular su posición usando mediciones de
pseudo-rango del lazo de seguimiento.

3.2.2. Entrada del receptor

Antes que la señal L1 sea muestreada, la señal es pasada a través de varias etapas de
amplificación, conversión descendente, y filtrado. La figura 3.1 muestra un diagrama
en bloques de un receptor utilizado de GPS. La señal L1 es recibida por una antena
y es entonces pasada a través de un preamplificador. El preamplificador normalmente
consiste de filtrado, protección de desgaste y un amplificador de bajo ruido (LNA). A
continuación la señal se mezcla a una frecuencia intermedia llamada (IF ), y la señal de
GPS L1 es transmitida a una frecuencia de 1.57542 GHz como vimos en las ecuaciones
3.1. El receptor utilizado mezcla la señal L1 a una frecuencia IF de 4.1304 MHz. La salida
del oscilador de referencia es usada por el sintetizador de frecuencias para generar la
oscilación local necesaria (LOs) para el convertidor de reductor de frecuencia. Finalmente
la señal L1 de frecuencia reducida es muestreada por un conversor analógico digital.
18

3.2.3. Adquisición de datos de los satélites

Antes de que el receptor pueda comenzar a seguir satélites, este debe determinar que
satélites están a la vista. Además, el receptor debe determinar el corrimiento Doppler
causado por el movimiento relativo de los satélites y el código de fase de la secuencia
de PRN de los satélites. El proceso de la determinación de estas variables se denomina
adquisición. El estimado del desplazamiento Doppler debe ser de una precisión de unas
pocas decenas de Hertz para que el lazo de seguimiento pueda traerla y fijarla a la
portadora. La fase de la secuencia de PRN debe ser precisa alrededor de media ficha
debido a la función de autocorrección de los códigos de Oro [14]. El número de satélites
que deben ser buscados puede ser fuertemente reducido si se usa información a priori,
como datos de almanaque o una vaga estimación de la localización del receptor.

Existen muchos algoritmos diferentes que buscan el posible desplazamiento Doppler y


los códigos de fase, sin embargo todos funcionan basados en los mismos principios. Pri-
mero los datos son recolectados y un satélite especı́fico es seleccionado para ser buscado.
Entre 1 y 20 milisegundos de datos son usualmente usados, ya que el código C/A tiene
un perı́odo de 1 milisegundo y la probabilidad de la ocurrencia de una transición de bits
de datos aumenta después de 20 milisegundos. Entonces un rango de posibles despla-
zamientos Doppler es definido. El algoritmo busca sobre un rango de desplazamientos
Doppler empezando por las frecuencias más bajas e incrementándolas a través del rango
de pasos de frecuencias. Para un observador quieto, el rango de desplazamiento Doppler
es de -5 KHz a +5 KHz [14]. Un tamaño de paso común para el algoritmo de adquisición
es de aproximadamente 500 Hz. Cada estimación de frecuencia es usada para despla-
zar la señal recibida hacia la banda base, asumiendo que la estimación de frecuencia
está suficientemente cerca a la frecuencia Doppler real, será desplazada a banda base
y solo quedará el código de Oro del satélite. Una versión replicada del código de Oro
del satélite será entonces convolucionada con la secuencia PRN recibida. Cuando los
códigos recibidos y generados localmente se alinean dentro de media ficha, un pico apa-
recerá como salida de la función de salida convolucionada. Si el pico excede algún valor
de barrera, el programa de adquisición generalmente considerará la frecuencia estimada
actual y la función del ı́ndice de convolución será el desplazamiento Doppler y código de
fase correctos respectivamente. Las propiedades de correlación cruzadas de los códigos
de Oro previenen que las secuencias de PRN de un satélite se confundan con las de
otros.
19

3.2.4. Lazos de seguimiento

El lazo por seguimiento cumple un rol central en la operación de un receptor de GPS.


Seguir lazos permite que la información de efemérides (enviada por el satélite) sea de-
codificada y usada para determinar su posición, y también para hacer mediciones de
pseudo rango que permiten calcular la posición del usuario. Los lazos de seguimiento
operan generando réplicas de los códigos de Oro y señales de portadora transmitidas por
cada satélite. Los lazos de seguimiento procuran producir una réplica de fase y frecuencia
idéntica a la que es recibida. La modulación de la portadora y de los códigos de Oro
es removida usando estas réplicas generadas localmente, dejando el mensaje de datos
atrás. Las mediciones de pseudo rango son hechas usando el código de Oro localmente
generado.

3.2.5. Determinación de la posición

El mensaje de dato enviado por cada satélite es recuperado por un lazo de seguimiento
y es usado para calcular la posición del satélite. Además el lazo bloqueado por demora
produce mediciones de pseudo rango de cada satélite. Una vez que la posición de al
menos cuatro satélites son conocidas, y sus mediciones de pseudo rango producidos, el
receptor puede determinar su posición. Cada medición de pseudo rango individual puede
ser expresada como se muestra en la siguiente ecuación:

ρi = kSi − uk + ctu
p (3.6)
ρi = (xi − xu )2 + (yi − yu )2 + (zi − zu )2 + ctu

El modelo de arriba ignora los errores causados por la ionosfera, troposfera, y el corri-
miento del reloj del satélite. El pseudo-rango ρi del i-esimo satélite es una función de las
coordenadas del usuario (xu , yu , zu ) y la tendencia del reloj tu .

Obtener la posición del usuario y la tendencia del reloj requiere resolver las ecuaciones
no lineales de segundo orden mostradas a continuación:
20

p
ρ1 = (x1 − xu )2 + (y1 − yu )2 + (z1 − zu )2 + ctu
p
ρ2 = (x2 − xu )2 + (y2 − yu )2 + (z2 − zu )2 + ctu
.. (3.7)
.
p
ρi = (xi − xu )2 + (yi − yu )2 + (zi − zu )2 + ctu

Estas ecuaciones pueden ser resueltas usando soluciones analı́ticas, técnicas numéricas
iterativas, o el Filtro de Kalman extendido.

3.3. Algoritmo de seguimiento basado en Filtros de Kal-


man

A fin de entender la utilización de la técnica de Filtros de Kalman en sistemas de


posicionamiento global, introduciremos un algoritmo de seguimiento basado en Filtros
de Kalman, el funcionamiento del algoritmo y su potenciales ventajas.

3.3.1. Lazos de seguimiento como Filtros de Kalman

Los lazos de seguimiento descriptos en 3.2.4 operan bien en entornos con baja dinámica
de usuarios y altos niveles de C/No. Sin embargo los lazos de seguimiento tienen fallas
inherentes. Estos usan filtros de ancho de banda fijo que no se adapta a niveles C/No
variables y dinámica del usuario. Las mediciones realizadas por el discriminador son
todas igualmente ponderadas. Las mediciones realizadas durante perı́odos de alta C/No
son igualmente ponderadas con aquellas realizada durante perı́odos de bajo C/No. Los
lazos de seguimiento también tienen una limitado control de cambios en la dinámica de
usuarios. El orden de los filtros de lazo dictan las dinámicas que el lazo puede seguir sin
error de estado estacionario. Cuando se diseña el filtro de lazo, el diseñador es enfrentado
a una solución de compromiso. Por un lado, incrementar el ancho de banda del filtro
permite al lazo seguir mejor la dinámica del usuario. Sin embargo un ancho de banda
más amplio hace al lazo más susceptible a ruido e interferencia.

Los Filtros de Kalman tienen la capacidad de superar los inconvenientes de los lazos de
seguimiento tradicionales. El Filtro de Kalman es, en esencia, un filtro con ganancia va-
riable en el tiempo. Las ganancias varı́an con estadı́sticas de ruido medido y estadı́sticas
de ruido procesado cambiantes. Las estadı́sticas de ruido medido cambia con valores de
C/No e interferencia. Las estadı́sticas de ruido procesado con la dinámica de usuario.
21

Provistas con las matrices de covarianza de medición y procesado, el Filtro de Kalman


puede separar óptimamente la señal del ruido. La tarea de seguir la portadora y el código
puede ser combinado en un Filtro de Kalman, el cual reemplaza los dos lazos de segui-
miento en cada canal con un solo Filtro de Kalman por satélite. Los estados del Filtro
de Kalman y la matriz de transición de estado son mostrados en la ecuación 3.8

    
θc,k+1 1 ∆t 0 0 0 0 θc,k
    
 fc,k+1  0 1 ∆t 0 0 0  fc,k 
    
 ˇ    ˇ 
 fc,k+1  0 0 1 0 0 0  fc,k 
 
 =  (3.8)
 θG,k+1  0 0 0 1 ∆t 0  θG,k 
    
    
f
 G,k+1  0 K1 0 0 0 1  fG,k 
   
CG,k+1 0 0 0 0 0 1 CG,k

El primer estado del filtro θc,k+1 corresponde a la fase de la portadora de IF. La derivada
de la fase de la portadora es la frecuencia IF, la cual es el segundo estado, fc,k+1 . La
frecuencia de la portadora es modelada variando linealmente en el tiempo. La derivada
de la frecuencia de la portadora es modelada como una tendencia que varı́a lentamente
en el tercer estado, fˇc,k+1 . El valor del tercer estado puede ser determinado usando las
efemérides del satélite o por ajuste de curvas. El cuarto estado es la fase del código de
Oro local θG,k+1 . La frecuencia en la cual el receptor incrementa a través del código
de Oro local es el quinto estado fG,k+1 . La frecuencia del código es una combinación
de una frecuencia nominal CG,k+1 más un término causado por el desplazamiento del
efecto Doppler en la portadora. El término causado por el desplazamiento Doppler es
modelado como la frecuencia de portadora multiplicado por una constante K1 . Este es
el equivalente de usar la frecuencia Doppler de un lazo Costas para ayudar al lazo de
seguimiento de código.

El Filtro de Kalman usado para seguir la portadora y el código es similar al filtro usado
para seguir la posición del usuario. Las mediciones provistas al filtro no son mediciones
del estado directamente, sino más bien los errores entre ciertos estados y los de la señal
recibida. Las mediciones son por lo tanto residuales. El filtro tiene acceso a tres residua-
les, las cuales son mediciones del error en la fase y frecuencia de la portadora, y el error
en la fase del código de Oro local. En cada periodo de medición, las ganancias residuales
y de Kalman son usadas para computar correcciones a los estados. Los estados después
de la actualización de mediciones son entonces los estados propagados más el vector de
correcciones.

La señal usada para generar las mediciones para el filtro se resumen en la ecuación 3.9
22

r
2ST sin(πferr T )
IEk = R( + τ )Dk cos(πferr T + θe rr) + ηIE,k
N0 πferr T
r
2ST sin(πferr T )
IP = R()Dk cos(πferr T + θe rr) + ηIP,k
N0 πferr T
r
2ST sin(πferr T )
IL = R( − τ )Dk cos(πferr T + θe rr) + ηIL,k
N0 πferr T
r
2ST sin(πferr T ) (3.9)
QE = R( + τ )Dk sin(πferr T + θe rr) + ηQE,k
N0 πferr T
r
2ST sin(πferr T )
QP = R()Dk sin(πferr T + θe rr) + ηQP,k
N0 πferr T
r
2ST sin(πferr T )
QL = R( − τ )Dk sin(πferr T + θe rr) + ηQL,k
N0 πferr T
η = N (0, 1)

En la ecuación 3.9, η representa las muestras de ruido en la salida de cada bloque integra-
do y volcado. Los muestreos de ruido son asumidos Gaussianos, blancos e independientes
del muestreo de ruido en las otras funciones integradas y volcadas. El error en la ali-
neación de la replica del código de Oro recuperado y del código recibido es representado
por . Los errores de frecuencia y de fase entre las portadoras recibidas y replicadas son
denotadas por ferr y θerr respectivamente.

Las mediciones de los tres errores en la señal local son generadas por el uso de funciones
de discriminación no lineal. Un discriminador early-minus-late normalizado es usado para
producir un estimado del error en alineación entre el receptor y la replica del código de
Oro, como es mostrado en la ecuación 3.10

p p
IE 2 + QE 2 − Σ IL2 + QL2
Σ
≈ p p (3.10)
Σ IE 2 + QE 2 + Σ IL2 + QL2

Un discriminador arcotangente de dos cuadrante se utiliza para medir el error de fase


θerr , como se muestra en la ecuación 3.11

QP
θerr ≈ arctan( ) (3.11)
IP
23

Salida del discriminador de código (chips)


0,6

0,4

0,2

−0,2

−0,4

−0,6
−1 −0,5 0 0,5 1
Desalinemiento de código (chips)

Figura 3.2: Salida del discriminador de código

Un discriminador de frecuencias genera una medición del error de frecuencia ferr a través
del uso de los datos recolectados durante dos intervalos integrados y volcados, como se
muestra en la ecuación 3.12

dot = IPt1 · IPt2 + QPt1 · QPt2


cross = IPt1 · QPt2 + IPt2 · QPt1 (3.12)
arctan( cross
dot )
ferr ≈
360(t2 − t1 )

Estos intervalos no pueden montar una transición del bit de datos. El primer intervalo
es denotado por T1 , y el segundo intervalo es denotado por t2 . Las señales en fase y
de cuadratura son usadas para formar productos de dot y cross. Estos productos son
entonces usados para estimar el error de frecuencia [15].

Todos los discriminadores tienen no linealidades inherentes. La salida del discriminador


early-minus-late normalizado saturado en un sigma desalineado correspondiente a la
mitad una ficha del código de Oro. La figura 3.2 muestra la salida del discriminador de
código versus el dealineamiento de código real.

Los dos discriminadores arco-tangente de cuadrante solo producen estimaciones desam-


biguas del error de fase (θerr ) para valores de error entre ±90◦ . La figura 3.3 muestra
la salida del discriminador de fase para diferentes errores de fase. El discriminador de
frecuencia produce el mismo tipo de error envolvente como el discriminador de fase. La
magnitud del error de frecuencia en el que ocurre la envoltura es dependiente del perı́odo
24

Estimado de discriminador de fase (grados)


100

50

−50

−100
−150 −100 −50 0 50 100 150
Error de fase (grados)

Figura 3.3: Salida del discriminador de fase de arcotangente


Estimado de discriminador de fase (grados)

40

20

−20

−40

−100 −50 0 50 100


Error de fase (grados)

Figura 3.4: Salida del discriminador de frecuencia

de integración de t1 y t2 . Un perı́odo de integración de 10 milisegundos produce la salida


del discriminador mostrada en la figura 3.4. Reducir el tiempo de integración aumenta
los rangos no ambiguos de la frecuencia del discriminador, pero también incrementa la
cantidad de ruido en la medición [15].

La matriz e covarianza de ruido medido contiene las estadı́sticas del ruido medido,
mostrados en la ecuación 3.13
25

 
2 ]
E[θerr E[θerr · ferr ] E[θerr · ]
 
E[θerr · ferr ] 2 ]
E[ferr E[ · ferr ] (3.13)
 
E[θerr · ] E[ · ferr ] E[2 ]

Los términos fuera de la diagonal de la matriz de covarianza de ruido medido son asu-
midos iguales a cero. Los términos en la diagonal de la matriz son computados empı́rica-
mente y pueden ser implementados como una tabla de consulta para niveles variables de
C/No. La covarianza de ruido de proceso es usado para acumular errores no modelados
y ajustado a mano para dar un seguimiento satisfactorio.
Capı́tulo 4

Suavizado de trayectorias
geoposicionadas utilizando Filtros
de Kalman

4.1. Análisis del problema

Los sistemas de posicionamiento global brindan la posibilidad de contar con datos fide-
dignos sobre la geolocalización de los dispositivos. Es común en la actualidad contar con
diversos dispositivos que provean de esta información, ya sea como sistemas de navega-
ción satelital, proveyendo la posición en un mapa digital, e incluso dando indicaciones
paso a paso para llegar de un punto A a un punto B, o también agregando valor a
dispositivos de uso general como los actuales smartphones y cámaras fotográficas.

Los dispositivos que cuentan con sistemas de posicionamiento global proveen coordena-
das de latitud y longitud que indican la geoposición del dispositivo, en conjunto con otra
información relevante como la precisión de la medición, entre otros. De hecho, podemos
pensar a estos datos multidimensionales ruidosos como una señal multidimensional más
ruido.

Los Filtros de Kalman entonces filtran las mediciones ruidosas para estimar la señal
deseada. Las estimaciones son estadı́sticamente óptimas en el sentido que pueden mini-
mizar el error de estimación media cuadrático.

La técnica que estudiamos tiene un uso generalizado en los sistemas de posicionamiento


global, y en particular, en los sistemas Android los Filtros de Kalman se aplican pre-
viamente para obtener una ubicación más precisa, tanto a nivel software, como incluso
durante su procesamiento en el hardware. Debido a ello se decidió enfocar el trabajo en
26
27

obtener los datos más precisos posibles, eliminando el ruido utilizando estas técnicas. Al
reducir el ruido corrigiendo la señal medida, obtendremos una nueva posición, la cual
será próxima al siguiente punto real, pero eliminando el error medido, lo que generará un
camino más preciso que el obtenido de la lectura del dispositivo. Como valor agregado
entrega datos más uniformemente distribuidos, puliendo el trazo del recorrido.

4.1.1. Adaptación del método de Filtros de Kalman al contexto del


problema

La teorı́a de los Filtros de Kalman pone mucho énfasis y esfuerzo en la estimación


de vectores con la precisión de los valores estimados representados en las matrices de
covarianza. Sin embargo, para la estimación de posiciones sobre dispositivos móviles, la
teorı́a general se reduce a un caso más sencillo de resolver.

Decidimos utilizar Tecnologı́a Android como base de nuestro sistema debido a su am-
plia disponibilidad y accesibilidad. Utilizamos su interfaz de programación de aplicación
(API ), ya que cuenta con maneras directas para obtener los datos de los proveedores de
localización[16], brindando información de geolocalización con valores de longitud y su
latitud, junto con información adicional relacionada, como la precisión de la medición
(accuracy). Esta medida es especificada como un solo número medido en metros.

Volviendo a la teorı́a, vemos que los filtros de Kalman abordan el problema general de
tratar de estimar el estado x ∈ <n de un proceso controlado discreto en el tiempo. Dicho
proceso es gobernado por una ecuación diferencial lineal estocástica:

xk = Axk−1 + Buk + wk−1 (4.1)

con una medición z ∈ <n que es

zk = Hxk + vk (4.2)

las variables aleatorias wk y vk representan el proceso de medición del ruido respectiva-


mente. Son asumidas independientes (una de la otra), y con distribución de probabilidad
normal.

p(w) ∼ N (0, Q) (4.3)

p(v) ∼ N (0, R) (4.4)


28

La matriz de covarianza cuadrada A de tamaño n x n en la ecuación 4.1 relaciona el


estado en el instante (paso) actual k, con el estado en el instante anterior k − 1. La
matriz B relaciona la entrada control opcional con el estado x. La matriz en la ecuación
de medición 4.2 relaciona el estado de la medición zk . En la práctica puede cambiar con
cada instante o medición, pero será asumida constante.

Los datos utilizados en el cálculo del nuevo trazado utilizando Filtros de Kalman serán
cuatro

La latitud expresada en grados.

La longitud expresada en grados.

La precisión de la medición expresada en metros.

El tiempo transcurrido entre pasos, expresada en milisegundos.

De estos valores se desprende que la precisión de la medición viene dada en un solo


componente escalar incluso cuando la posición está compuesta por un vector de dos
dimensiones formado por la longitud y la latitud. Por lo tanto, la covarianza de ruido de
medición R, estará representada en base al valor de precisión de la medición obtenido
del dispositivo.

También representaremos a la covarianza de ruido de proceso Q con un escalar expresado


en metros sobre segundo, que describe cuan rápido la precisión disminuye en ausencia de
una nueva estimación de posición. A medida que el valor de Q es mayor, en ausencia de
nuevos datos reales los valores calculados serán más imprecisos. El valor correspondiente
a Q es medida en metros, y corresponde a la desviación estándar de la distribución
cuando ha transcurrido 1 segundo.

Como vimos anteriormente, con el fin de encontrar una ecuación que compute un es-
timado del estado a posteriori x
bk , definimos una serie de ecuaciones que representan
la covarianza del error estimado a priori y la covarianza del error estimado a posterio-
ri, basándonos en el estado estimado del error a priori y a posteriori, definidos de la
siguiente manera:

e− b−
k ≡ xk − x k
(4.5)
e k ≡ xk − x
bk
29

La covarianza del error estimado a priori la definimos como

Pk− = E[e− −T
k ek ] (4.6)

y la covarianza del error estimado a posteriori como

Pk = E[ek eTk ] (4.7)

En nuestra implementación, simplificamos el valor estimado de la covarianza del error


estimado como el cuadrado del valor del error medido, ya que asumimos que la mejor
estimación para la posición inicial es la primera posición medida y, por lo tanto, el error
estimado es igual al valor medido. Por lo cual el valor inicial de la ecuación 4.7 es

P0 = e20

Notemos que los valores expresados en grados que representan a la latitud y longitud, y
aquel expresado en metros para representar el valor de la precisión de la medición, tienen
todos unidades de medida diferentes. Si utilizamos un factor de corrección de escala para
convertir todos estos valores a una misma unidad, se terminarı́an cancelando entre si,
convirtiendo a los resultados en sus unidades de medida originales.

Entonces, hemos visto que:

La matriz de covarianza de ruido de proceso R se obtiene del escalar obtenido del


dispositivo que representa la precisión de la medición

El valor de covarianza de ruido Q es un valor contante definido previamente

La covarianza A entre el valor medido y el calculado es representado por un escalar.


Dada la naturaleza lineal del sistema consideramos a A = 1

El valor inicial del error de covarianza es el cuadrado del valor de la precisión


inicial

No tenemos una señal de control uk , lo que elimina el segundo término de la


ecuación 4.1

La matriz H será igual a 1. Sabemos que la medición está compuesta por el valor
de la posición y algo de ruido1
1
No se encuentran en general en aplicaciones concretas muchos casos donde H sea diferente a 1
30

Basados en estas decisiones y simplificaciones realizadas al sistema, podemos reducir


las ecuaciones. Teniendo en cuenta los datos recientemente expresados, las ecuaciones
simplificadas de Actualización de tiempo se encuentran descriptas en la tabla 4.1, y las
ecuaciones simplificadas de Actualización de corrección se pueden observar en la tabla
4.2

Actualizaciones de tiempo
(Predicción)

Pk− = Pk−1 + Q (4.8)

Tabla 4.1: Ecuaciones de actualización de tiempo del filtro discreto de Kalman sim-
plificadas para la implementación propuesta

Actualizaciones de mediciones
(Corrección)

Pk−
Kk = (4.9)
(Pk− + R)
x bk−1 + Kk (zk − x
bk = x bk−1 ) (4.10)
Pk = (1 − Kk )Pk− (4.11)

Tabla 4.2: Ecuaciones de actualización de medición del filtro discreto de Kalman


simplificadas para la implementación propuesta

Como podemos observar, el cálculo de este sistema simplificado reduce considerablemen-


te la computación de los valores obtenidos utilizando Filtros de Kalman.

4.2. Caracterı́sticas de la solución

La solución del problema planteado en la sección anterior presenta varios costados a


destacar, como la obtención de los datos de geolocalización, la manipulación de dicha
información, su correcta visualización, y la implementación de la solución antes propues-
ta. Cada una de estas caracterı́sticas representa un desafı́o técnico que debimos llevar
adelante sorteando desafı́os a través de decisiones, implementaciones, y el uso de las
herramientas correctas para obtener el resultado esperado en cada caso.
31

4.2.1. Almacenamiento de datos

La primera caracterı́stica de la solución implementada que vamos a presentar es la persis-


tencia de los datos. Toda la información obtenida deberá ser apropiadamente almacenada
para su posterior visualización y manipulación, tanto los datos obtenidos de los provee-
dores de localización del dispositivo[16], como aquellos datos obtenidos tras la aplicación
del algoritmo de Filtros de Kalman simplificado descripto en la sección 4.1. Para resolver
el problema de almacenamiento de dados decidimos utilizar la API Android, utilizando
su implementación de base de datos SQLite[17] para mantener la persistencia y obtener
una correcta manipulación de los datos. Este motor de base de datos provee todas las
caracterı́sticas necesarias de una base de datos relacional estándar, pero a su vez presen-
ta ventajas como mantener la información almacenada de la base de datos en un archivo
local, disminuyendo los tiempos de conexión, y por lo tanto de manipulación de los da-
tos, utilizando menos memoria, y siendo auto contenida, caracterı́sticas fundamentales
para los dispositivos móviles.

4.2.2. Modos de visualización de la información

La siguiente caracterı́stica que guió el desarrollo de la solución estuvo ligada a los méto-
dos usados para visualizar la información obtenida. Se optó por mostrar los resultados
de las siguientes maneras:

En forma de tabla de registro de los datos almacenados

En forma de mapa con el trazado del camino recorrido

Exportando los datos de la base de datos a un archivo que será luego compartido

4.2.2.1. Visualización a través de tabla de registros

La tabla de registros implementada en base a cursores provistos por la API de Android[18]


es la forma más simple de visualizar los datos almacenados en la base de datos, los cuales
se pueden apreciar en la figura 4.1. Los datos se encuentran distribuidos en columnas de
la siguiente manera.

Name nombre del proveedor, pueden ser network, gps o kalman

Lat latitud

Lng longitud
32

Figura 4.1: Vista principal: tabla de registro de los datos almacenados

Kalman registra si el dato ya ha sido utilizado para generar valores aplicando


Filtros de Kalman. 0 en caso negativo y 1 en caso positivo

Time instante en el que se obtuvo el dato

Acc precisión del dato medido

Aprovechando las capacidades de la interfaz de programación de Android, se utilizó el


sistema de notificaciones que cuando un nuevo valor es provisto por el proveedor de
localización del dispositivo, la aplicación lo agrega a la base de datos y actualiza la tabla
de registros.

4.2.2.2. Visualización en mapa

Para el segundo método de visualización de los datos decidimos utilizar los mapas provis-
tos por la API javascript de google maps[19], dibujando en una interfaz web el mapa que
pretendemos visualizar y poder trazar sobre ellos el camino recorrido. Esta interfaz de
programación nos permite obtener de manera sencilla un mapa de una región basándose
en la información de geolocalización provista en uno de sus parámetros.

Otra caracterı́stica que provee la API javascript de google maps, y sobre la cual basamos
nuestra implementación, es la capacidad de realizar dibujos sobre el mapa. Esto nos
33

Figura 4.2: Vista mapa: Imagen representando un camino trazado con los datos ob-
tenidos del GPS del dispositivo

permitió trazar el recorrido dibujando aristas entre cada par de puntos, ya sean aquellos
obtenidos por el proveedor de localizaciones, o calculado utilizando el algoritmo de Filtros
de Kalman simplificado descripto en la sección 4.1. Esta información termina formando
trazados que, al ser visualizados sobre un mapa, muestran la idea de un camino recorrido
como se aprecia en la figura 4.2.

En la figura 4.3 podemos observar como la aplicación de los Filtros de Kalman a los
datos obtenidos del dispositivo disminuyen el error y ajustan las posiciones a lo largo
del trazado. Para ello utilizamos la misma caracterı́stica de realizar dibujos, pero en esta
oportunidad utilizando cı́rculos con centro en la posición obtenida, y con radio igual al
error estimado.

Junto con las vistas ya presentadas de la aplicación, hay una vista adicional en la cual
se pueden realizar las configuraciones básicas de la aplicación, tanto de actualizaciones,
de visualización y las relacionadas con la información almacenada que se muestra en la
figura 4.4. En este punto haremos foco en las opciones de visualización de la aplicación,
la cual nos indica basados en que información se deberá generar la trayectoria sobre el
mapa. Esta cuenta con tres opciones:

GPS: datos obtenidos desde el sistema de posicionamiento global del dispositivo


34

Figura 4.3: Comparación de precisión entre el dato obtenido del dispositivo (lı́neas
roja) y el dato calculado utilizando Filtros de Kalman simplificado (lı́neas verde)

Network: datos obtenidos de la geolocalización provista por las redes de datos


(redes celular, redes WIFI, etc.) provista por el dispositivo

Kalman: datos calculados utilizando el algoritmo simplificado de Filtros de Kalman


descripto en la sección 4.1

4.2.2.3. Exportación de registros para visualización externa

Finalmente la tercer manera de visualizar los datos es exportar la información almace-


nada en la base de datos, y compartirla a través de google drive, email u otros. En la
figura 4.4 podemos observar las posiciones de configuración de la aplicación, mientras
que en la figura 4.5, las opciones de exportación. El archivo de salida tiene un formato
de valores separados por coma (CSV ) y lista la información en el mismo formato que
utilizamos en la tabla de registros.

4.2.3. Obtención y almacenamiento de los datos de geoposicionamiento

En secciones anteriores hemos mencionado en reiteradas oportunidades que los datos


obtenidos del dispositivo utilizan proveedores de localización del dispositivo[16]. A con-
tinuación describiremos cual es la tarea realizada por estos, y que información nos es
suministrada. También describiremos el enfoque en el cual nos basamos para el almace-
namiento y posterior manipulación de los datos de posicionamiento utilizando la imple-
mentación de base de datos SQLite que provee Android[17].

Android cuenta con la API de localización, la cual hace que realizar aplicaciones que
sepan de la localización del dispositivo sea simple, sin necesitar hacer foco en la tecnologı́a
de localización subyacente. Cuando desarrollamos una aplicación de geolocalización para
35

Figura 4.4: Vista de configuración de Figura 4.5: Compartir archivo con in-
la aplicación formación de la base de datos

Android, se pueden utilizar tanto los valores obtenidos del proveedor de posiciones del
GPS como de la red para adquirir la posición del dispositivo. Aunque el GPS es más
preciso, sólo funciona al aire libre, consume energı́a de la baterı́a de forma rápida y
no devuelve la ubicación tan rápido como los usuarios desean. La Red de Proveedores
de Ubicación de Android determina la ubicación del usuario utilizando la torre celular
y señales Wi-Fi, que proporciona información sobre la ubicación de una manera que
funciona en el interior y al aire libre, responde más rápido y utiliza menos energı́a de la
baterı́a. Para obtener la ubicación del usuario en la aplicación, se puede utilizar tanto
el GPS como el del proveedor de red, o sólo uno.

La base de nuestro sistema consiste en obtener la mayor cantidad de datos disponibles


posibles y almacenarlos debidamente para su posterior visualización. Debido a que los
datos de red no son precisos en lugares donde la información de torres de redes celulares
se encuentran muy dispersas, y dado que el objeto de la aplicación es trazar caminos
de rutas caminadas por el usuario, lo cual impide tomar otros datos de señal como las
provistas por los routers de Wi-Fi, decidimos optar por utilizar solo datos provistos por
GPS para realizar la suavización de la trayectoria.

Más allá de esto, obtener la ubicación de un dispositivo móvil puede resultar muy com-
plicado, y hay varias razones por las cuales una lectura de posición (independientemente
36

del origen de la información) puede contener errores y ser imprecisas. El origen de alguno
de dichos errores en la posición del dispositivo incluyen:

Múltiples orı́genes de la posición GPS, celdas de celular y Wi-Fi pueden


proveer una pista de la locación del dispositivo. Determinar cual de ellas usar
depende de la precisión, velocidad y consumo de baterı́a que el sistema requiera.

Movimiento del usuario Debido a que la ubicación del usuario cambia, se deben
actualizar la ubicación del usuario causado por este movimiento cada cierto tiempo.

Precisión variable Las estimaciones de ubicación procedentes de cada fuente


de ubicación no son consistentes en su precisión. Una ubicación obtenida hace 10
segundos de una fuente podrı́a ser más precisa que la nueva ubicación de esa misma
fuente.

Este problema puede hacer difı́cil la tarea de obtener una lectura de ubicación del dispo-
sitivo confiable. Es por esto que la utilización de suavizado de la trayectoria genera datos
con mejor precisión ya que los Filtros de Kalman reducen el error estimado, obteniendo
posiciones más precisas, y eliminando el error de medición.

4.2.3.1. Uso de los proveedores de localización

A fin de obtener la medición de los datos provistos por los proveedores de localiza-
ción, lo primero que debemos tener en cuenta en la aplicación es contar con los per-
misos apropiados para que esta pueda recibir actualizaciones de datos provistos NET-
WORK PROVIDER o por GPS PROVIDER, que son los proveedores de datos de GPS
y de Red de la API Android. En caso de no tener estos permisos, la aplicación fallará en
tiempo de ejecución cuando requiera una actualización de la posición.

Para facilitar el análisis del problema de la obtención de posiciones, guiaremos esta


sección basándonos en el siguiente modelo

Inicio de la aplicación

Comenzar a escuchar actualizaciones de los proveedores solicitados

Dejar de escuchar las actualizaciones

Al momento de iniciar la aplicación, esta inicializa una serie de tareas que nos permitirán
en un futuro inmediato empezar a escuchar actualizaciones de posiciones. Entre las tareas
de inicialización que se realizan, debemos comenzar con las preferencias compartidas[20],
37

las cuales brindan información almacenada de ejecuciones anteriores de la aplicación,


obteniendo ası́ información de las posiciones anteriores y los datos de configuración,
haciendo consistente a la aplicación entre cada uso.

Al ingresar a la ventana principal, encontraremos dos botones en la parte superior,


como se observó en la figura 4.1. El primer botón, etiquetado como Start será el que
realice la acción de inicializar el escuchador de ubicaciones, el cual notifica a quienes
estén escuchando que una nueva posición está disponible. Para ello nos suscribimos
a esa notificación llamando al método requestLocationUpdates. Esta inicialización se
realizará de manera tal que el servicio de localización de posiciones de la aplicación
continúe ejecutándose hasta que explı́citamente digamos que lo detenemos. Cuando hay
un nuevo dato de posición, este es notificado llamando al método onLocationChanged,
el cual escribe la información actualizada en la base de datos. Este cambio en la base de
datos es propagado a los cursores ya inicializados de la misma.

Los cursores de la base de datos[18] actúan como puentes entre una vista de la aplicación
y los datos subyacentes de esa vista. En nuestra aplicación utilizamos cursores simples de
base de datos, los cuales mapean columnas de un cursor a una vista de texto o una vista
de imagen definida en un archivo XML. Se puede especificar que columnas se requieren,
en que vistas se quiere mostrar que columna, y el archivo XML que define el aspecto
de esa vista. De esta manera, cuando un nuevo dato es ingresado a la base de datos, el
cursor es actualizado y se muestra la nueva información en el cursor que representa la
tabla de registros mostrada en la vista principal.

Para dejar de escuchar las actualizaciones de nuevas posiciones de geolocalización, uti-


lizaremos el mismo botón que para su inicialización, pero esta vez tendrá una etiqueta
que dirá Stop. Al hacerlo, se llamará el método removeUpdates, el cual dará de baja la
aplicación del pedido de notificaciones, evitando que se siga informando de nuevos datos.

4.2.4. Uso de tecnologı́as HTML5 para representar las trayectorias


geolocalizadas

Nuestro siguiente objetivo, una vez garantizada la obtención y almacenamiento de los


datos geolocalizados como se describe en la sección 4.2.3, es mostrar la trayectoria reco-
rrida de manera consistente y fácilmente observable en el dispositivo. Para hacer dicha
tarea, haremos uso de la interfaz de programación provista por google para manipular
mapas utilizando Javascript[19]. Además utilizamos otra de las capacidades brindadas
por la API de Android para poder renderizar una página web directamente desde la
aplicación nativa, llamada WebView [21].
38

Un WebView es una vista que exhibe una página web dentro de una aplicación nativa de
Android. La API provee esta caracterı́stica que permite mostrar contenido proveniente
de una página web dentro de una actividad. Usa el WebKit del motor de render de
Android para exponer páginas web, incluye métodos para navegación histórica, zoom,
búsquedas de texto entre otras caracterı́sticas. Para poder utilizar esta caracterı́stica es
necesario contar con privilegios para acceder a Internet.

El modo escogido para generar el mapa con la trayectoria recorrida está basada en una
página web que se distribuye junto con la aplicación, la cual realiza el siguiente proceso

En la vista principal al presionar el botón Show Map, el cual inicializa la WebView,


cargando la página web almacenada en el dispositivo,

al cargar la página, recibe una notificación que ejecuta la acción definida cuando
se termina de cargar la página (método onPageFinished ),

el método onPageFinished obtiene el nombre del proveedor que debemos graficar


en pantalla (GPS, Network, o Kalman) y en base a este nombre, obtiene los datos
apropiados de la base de datos,

con los datos obtenidos y apropiadamente estructurados (datos separados por co-
ma entre columnas y punto y coma entre filas), ejecutamos la función Javascript
visualiseDataWithParams utilizando los datos anteriores como parámetro,

esta función parsea apropiadamente los datos, guardándolos en un arreglo, selec-


ciona el color con el cual graficará, y dibuja los datos sobre el mapa,

para dibujar las trayectorias, la aplicación Javascript itera sobre los puntos, y traza
una recta entre pares de puntos que los unen, haciendo uso de la propiedades de
la API de google maps google.maps.LatLng,

Esto nos dará como resultado una página web conteniendo un mapa que muestra la
trayectoria utilizada como se observa en la figura 4.6

4.3. Procesamiento de datos de geoposicionamiento para


suavizar una trayectoria

Desde el comienzo del trabajo nos planteamos como objetivo el obtener una trayectoria
generada por punto obtenidos del GPS incluido en dispositivos Android, y a partir de
estos generar un nuevo camino que aproxime mejor la realidad, reduciendo el error,
generando un camino más uniforme, y en consecuencia suavizando el trayecto para una
39

GPS Network Kalman

Figura 4.6: Visualización de los distintos proveedores de posiciones

mejor visualización. A fin de lograr nuestro objetivo decidimos utilizar el algoritmo


de Filtros de Kalman ajustado a nuestro problema, y para ello hicimos un análisis
profundo de la implementación ajustada a contexto particular del problema detallando
las particularidades en la sección 4.1.1.

Lo primero que notaremos son las diferencias entre el modelo original, y la versión
simplificada como se describió en la sección 4.1.1, como se observa en la figura 4.7. De la
comparación de dichos algoritmos podemos notar la simplificación de la implementación,
que se basa fundamentalmente en la eliminación de los cálculos matriciales, ya que estas
fueron reemplazándose por escalares, simplificando la aritmética necesaria en cada paso.

Con el algoritmo simplificado a nuestra disposición, solo resta tomar los datos ya obteni-
dos y almacenados en la aplicación y generar nuevos valores, obteniendo ası́ una mayor
precisión y mejorando el error entre cada paso. La forma escogida para implementar
dicha tarea es realizando la ejecución de los Filtros de Kalman simplificados en el mo-
mento en que se detiene la obtención de datos. Al oprimir el botón señalizado con la
palabra Stop en la vista principal, este detiene la obtención de datos y se comienza a
procesar la ejecución. En cada paso encontramos un nuevo valor que es almacenado en
la base de datos utilizando el mismo formato que para los valores de GPS o Network,
como se describe a continuación:

Name kalman

Lat latitud calculada

Lng longitud calculada


40

Paso siguiente

Actualizaciones
de mediciones
Actualización de tiempo (corrección)
(predicción)
1. Computar la ganancia de Kalman
1. Proyectar el estado Kk = P− T − T
k H (HPk H + R) 1

b − = Ab
X xk−1 + Buk
k 2. Actualizar el estimado vı́a zk
2. Proyectar el error de covarianza x b−
bk = x k + Kk (zk − Hbx−k)
P−
k = APk−1 A + Q
T
3. Actualizar el error de covarianza
Pk = (I − Kk H)P− k

La salida en k será la entrada en k + 1

Estimación inicial para x


bk−1 y Pbk−1

Paso siguiente

Actualizaciones
de mediciones
Actualización de tiempo (corrección)
(predicción)
1. Computar la ganancia de Kalman
P−
1. Proyectar el estado Kk = (P−
k
k +R)
b− = x
X bk−1
k
2. Actualizar el estimado vı́a zk
2. Proyectar el error de covarianza x bk−1 + Kk (zk − x
bk = x bk−1 )
P−
k = Pk−1 + Q
3. Actualizar el error de covarianza
Pk = (1 − Kk )P− k

La salida en k será la entrada en k + 1

Estimación inicial para x


bk−1 y Pbk−1

Figura 4.7: comparativa de algoritmos de Filtros de Kalman estándar y simplificado


41

Kalman 1 indicando que es un dato ya procesado

Time instante en el que se obtuvo el dato original

Acc precisión del dato calculado

4.3.1. Aplicación de Filtros de Kalman simplificados sobre los datos

A continuación describiremos como es aplicado nuestro proceso de ejecución de los Filtros


de Kalman simplificados en nuestra implementación, tomando como referencia los datos
obtenidos en la trayectoria ya visualizada en las pantallas mostradas a lo largo del
informe. Del análisis realizado en la sección 4.1.1 se desprenden los datos que componen
los valores utilizados en la implementación del algoritmo a la hora de calcular la nueva
trayectoria, cuyas caracterı́sticas se detallan a continuación:

La matriz de covarianza de ruido de proceso R se obtiene del escalar obtenido del


dispositivo que representa la precisión de la medición

Utilizamos para representar el valor de covarianza de ruido Q un valor contante


definido previamente

La covarianza A entre el valor medido y el calculado es representado por un escalar.


Dada la naturaleza lineal del sistema consideramos a A = 1

El valor inicial del error de covarianza es el cuadrado del valor de la precisión


inicial

No tenemos una señal de control uk , lo que elimina el segundo término de la


ecuación 4.1

La matriz H es igual a 1, ya que sabemos que la medición está compuesta por el


valor de la posición y algo de ruido2

Con todos estos valores disponibles, podemos comenzar a utilizar el algoritmo de Fil-
tros de Kalman simplificado. Utilizaremos como valores iniciales aquellos obtenidos del
proveedor de GPS en el instante 0 que se encuentran en la primer fila de la tabla 4.3,
y que inicializan a la posición inicial x0 = (−31,4528366210717, −64,1756712557967) y
y el valor del error medido P0 = 32. El valor de el error medido es distinto de cero, y
es correcto que sea ası́, porque si tomásemos un valor igual a 0, esto querrı́a decir que
nuestra medición no tiene error de ambiente, y esa suposición nos llevarı́a a la conclusión
b−
que x k deberı́a ser 0.
2
No se encuentran en general en aplicaciones concretas muchos casos donde H sea diferente a 1
42

Tiempo Latitud Longitud Precisión


en ms en grados en grados en metros
40660337 -31.4528366210717 -64.1756712557967 32
40660542 -31.4528366210717 -64.1756712557967 32
40661633 -31.4528573478009 -64.1756597777355 16
40661951 -31.4528573478009 -64.1756597777355 16
40662417 -31.4528573478009 -64.1756597777355 32
40662763 -31.4528573478009 -64.1756597777355 32
40663365 -31.4528573478009 -64.1756597777355 16
40663884 -31.4528573478009 -64.1756597777355 16
40664347 -31.4528573478009 -64.1756597777355 6
40664724 -31.4528573478009 -64.1756597777355 6
40665289 -31.4528088978413 -64.1756027176411 6
40665863 -31.4528088978413 -64.1756027176411 6
40666472 -31.452791138506 -64.1755947701889 6
40666763 -31.452791138506 -64.1755947701889 6
40667359 -31.452791138506 -64.1755947701889 6
40667936 -31.452791138506 -64.1755947701889 6

Tabla 4.3: Valores obtenidos de las mediciones realizadas por el GPS

Figura 4.8: Comparación de precisión entre el dato obtenido del dispositivo (lı́neas
roja) y el dato calculado utilizando Filtros de Kalman simplificado (lı́neas verde)

A partir de este punto, lo que resta hacer es calcular cada uno de los valores estimados
utilizando el algoritmo de Filtros de Kalman, para ası́ tener nuevos valores estimados, con
una mejor precisión, y más uniformes. Podemos observar a partir de estos cálculos, los
primeros 16 valores obtenidos y los calculados a partir de ellos, utilizando las ecuaciones
expuestas en las tablas 4.1 y 4.2, que se muestran en detalle en la tabla 4.4.

Se puede observar con esta pequeña muestra de datos, que la estimación del error se
reduce rápidamente a valores mucho menores que los valores del error del dispositivo,
haciendo que la diferencia de cálculo de la siguiente posición a estimar se encuentre en
un área más próxima al elemento anterior, haciendo ası́ más uniforme el trazado del
camino, y por lo tanto suavizando la trayectoria. Esta situación es fácilmente observable
en la figura 4.8.
k ∆ zk Precisión Pk− x
bk Pk
tiempo
1 0 (-31.4528366210717, -64.1756712557967) 32 32 (-31.4528366210717, -64.1756712557967) 32
2 205 (-31.4528366210717, -64.1756712557967) 32 32.028815 (-31.4528366210717, -64.1756712557967) 22.627417
3 1091 (-31.4528573478009, -64.1756597777355) 16 22.843357 (-31.4528505186002, -64.1756635596146) 13.101572
4 318 (-31.4528573478009, -64.1756597777355) 16 13.210344 (-31.4528532597135, -64.1756620416391) 10.136745
5 466 (-31.4528573478009, -64.1756597777355) 32 10.341547 (-31.4528536619358, -64.1756618188962) 10.037439
6 346 (-31.4528573478009, -64.1756597777355) 32 10.191377 (-31.4528539920994, -64.175661636058) 9.577339
7 602 (-31.4528573478009, -64.1756597777355) 16 9.856136 (-31.4528549395586, -64.1756611113734) 8.501755
8 519 (-31.4528573478009, -64.1756597777355) 16 8.772162 (-31.4528554697994, -64.1756608177364) 7.507692
9 463 (-31.4528573478009, -64.1756597777355) 6 7.780259 (-31.4528566808275, -64.1756601470925) 4.818151
10 377 (-31.4528573478009, -64.1756597777355) 6 5.158253 (-31.4528569423088, -64.1756600022892) 3.7567935
11 565 (-31.4528088978413, -64.1756027176411) 6 4.381608 (-31.4528381568245, -64.1756376038755) 3.7518094
12 574 (-31.4528088978413, -64.1756027176411) 6 4.386578 (-31.4528299323065, -64.1756277975722) 3.1810968
13 609 (-31.452791138506, -64.1755947701889) 6 3.949731 (-31.4528164675464, -64.1756163342511) 3.534837
14 291 (-31.452791138506, -64.1755947701889) 6 3.887682 (-31.4528099413534, -64.1756107781293) 3.0455928
15 596 (-31.452791138506, -64.1755947701889) 6 3.826177 (-31.4528036142162, -64.1756053914752) 3.4805117
16 577 (-31.452791138506, -64.1755947701889) 6 4.160163 (-31.4528004731261, -64.1756027172854) 3.0106397

Tabla 4.4: Cálculo de los valores calculados usando Filtros de Kalman simplificado
43
Capı́tulo 5

Análisis de la información

5.1. Análisis comparativo de los valores de precisión

En el capı́tulo 4 describimos como se obtienen, procesan, y visualizan los datos obte-


nidos de los proveedores de posiciones, y generados utilizando el algoritmo de Filtros
de Kalman simplificado. A partir de esta información, y teniendo en cuenta los datos
obtenidos de un recorrido caminando, nos dedicaremos a analizar el comportamiento de
los datos obtenidos, y su diferencia en relación a los datos medidos.

Para poder tener una idea más precisa de la información con la que contamos, tome-
mos como punto de partida datos relevantes al análisis del comportamiento del sistema
utilizando los valores obtenidos del GPS y de aquellos calculados utilizando Filtros de
Kalman simplificados:

Cada dato obtenido está formado por latitud, longitud, precisión, e instantes en el
que el dato fue tomado

La cantidad de elementos obtenidos, y por lo tanto también calculados es 1634


datos

El promedio del error medido es de 8.8 mts, los cuales fluctúan en un rango entre
4 y 32 mts.

El promedio del error calculado es de 3.9 mts., , los cuales fluctúan en un rango
entre 2.3 y 22.6 mts.

44
Figura 5.1: Comparación de los valores de precisión entre los datos obtenido del dispositivo y los calculados a lo largo del tiempo

45
46

Figura 5.2: Trazado en mapa de GPS y Kalman con detalle

Apreciamos claramente que las diferencias en la precisión es importante, y en promedio


el estimado del error calculado es menor al 50 % del error estimado. Para ver con mayor
claridad esta condición de la precisión, observamos la información presentada en la figura
5.1, la cual muestra las tendencias de dichos valores en el tiempo, y como el valor
estimado desciende rápidamente y se estabiliza,mientras que el valor medido fluctúa de
manera importante. Es este error de precisión medido hace que la posición obtenida del
proveedor de GPS tenga un alto grado de incertidumbre, y sumándole el echo de que
cada medición es independiente a las anteriores, vuelven poco confiable a la trayectoria.
En contraste con el error estimado, el cual se mantiene uniforme y estable, haciendo la
trayectoria más suave.

5.2. Análisis de trayectorias geolocalizadas sobre mapas

Con los valores medidos y calculados ya agregados a la base de datos, estamos en con-
diciones de analizar los resultados obtenidos a través de las representaciones visuales
trazadas en mapas.

Los valores obtenidos del proveedor de localización del GPS muestra información acerca
de la trayectoria, con un grado importante de incertidumbre. Este error de medición
es independiente de mediciones anteriores, por lo que los nuevos valores obtenidos no
47

Figura 5.3: Trazado en mapa usando Figura 5.4: Trazado en mapa usando
datos obtenidos del GPS mostrando la datos generados usando Kalman mos-
precisión trando la precisión

necesariamente mantienen una trayectoria uniforme y vinculada a los valores anteriores.


Esto genera que en mediciones contiguas, podamos divisar quiebres en la trayectoria
que reflejan los errores de medición. Un ejemplo particular de este caso se observamos
claramente en la figura 5.2. La imagen representando a los datos obtenidos (imagen de la
izquierda) presenta quiebres abruptos y saltos importantes, mientras que la trayectoria
calculada, a pesar de mostrar una trayectoria equivalente, muestra ángulos redondeados
y caminos uniformes.

Siguiendo con este análisis basado en la información visualizada utilizando los datos
obtenidos y generados sobre los mapas, podemos continuar detallando el análisis de los
valores de precisión, agregando en este caso imágenes que muestran la trayectoria para
cada proveedor (GPS y Kalman), pero con el extra de cı́rculos con centro en la posición,
que muestran la precisión de manera visualmente clara.

Podemos apreciar que la figura 5.3 deja a la luz que los diversos valores de precisión
obtenidos en cada paso cambian con una frecuencia alta, y sus valores ocupan una
importante sección del mapa, en contraposición con la figura 5.4 que muestra valores
más homogéneos y parejos, y de un tamaño mucho menor al valor medido.
48

Figura 5.5: Trazado en mapa de GPS y Kalman superpuestos

Figura 5.6: Detalle del trazado en mapa de GPS y Kalman superpuestos

Pero basados en esta información no podemos precisar cuan cerca o lejos la trayectoria
medida está de las posiciones obtenidas aplicando el algoritmo de Filtros de Kalman sim-
plificado. Para poder adentrarnos en este análisis comparemos primero ambos trazados
sobre el mapa que muestra la figura 5.5. Observamos que ambas trayectorias coinciden
en gran escala en sus trazados, lo cual indica que el cálculo utilizando el algoritmo de
Filtros de Kalman simplificado no se aleja de los valores reales, lo cual es una de las
condiciones requeridas, ya que nuestra propuesta es suavizar las trayectorias haciéndo-
las más precisas y, a pesar que el error en los valores medidos es de consideración, nos
basamos en estos datos para calcular los datos calculados.

A fin de agregar más claridad a la información provista por la figura 5.5, podemos
observar una sección particular de dicho mapa visualizado en la figura 5.6, en la cual
apreciamos como los datos provistos por el GPS muestran aristas entrecortadas, mientras
que aquellas generadas realizan una trayectoria uniforme, suavizándola y proveyendo un
trazo equivalente al medido, pero más uniforme.
Capı́tulo 6

Conclusión y futuros trabajos

6.1. Conclusión del trabajo

Desde la aparición de los Filtros de Kalman en los años 60, el uso de la técnica ha crecido
considerablemente, y desde la masificación de los sistemas de posicionamiento global de
uso civil, mucho se a escrito e investigado al respecto. Nuestro trabajo hizo foco en la
suavización de las trayectorias obtenidas del proveedor de localización de los dispositivos
Android, haciendo uso de una versión simplificada del algoritmo, para poder visualizar
dicha trayectoria en mapas provistos por Google Maps.

Gracias a las interfaces de programación provistas por la API de Android, llevamos


adelante la implementación del sistema que obtiene y manipula los datos, y su poste-
riormente visualización sin mayores complicaciones programáticas. La implementación
de aplicaciones para Android cuenta con caracterı́sticas programáticas bien definidas y
de amplio uso, lo que permitió que a la hora de realizar la implementación, cuestiones
como la manipulación de datos (adquisición, almacenamiento, y consulta de la infor-
mación) se pudiese realizar utilizando técnicas de base de datos estándar (usando una
base de datos SQLite). La visualización del mapa con su trayectoria también fue posible
gracias al manejo de visualización de páginas web de la API de Android, y el manejo de
mapas de Google utilizando la API de Google Maps. Otro de los aspectos que facilitó la
tarea fue la presentación de las posiciones usando el GPS del dispositivo utilizando el
proveedor de localización implementado por Android, el cual nos brinda las posiciones
del dispositivo a lo largo del tiempo sin necesidad de realizar las tareas de manipulación
de señales de GPS por nuestra cuenta. Estas facilidades entre otras caracterı́sticas de la
API de Android permitieron ası́ enfocarnos en estudiar el problema, analizar la solución,
realizar la simplificación del algoritmo, y obtener los datos necesarios para presentar este
trabajo.

49
50

El método de Filtro de Kalman tiene su mayor complejidad en ajustar el problema al


modelo que estamos resolviendo, y este problema se vuelve más complejo en la medi-
da que necesitemos utilizar cálculos matriciales. Como vimos durante el desarrollo del
trabajo, el modelo que nos propusimos resolver se ajusta perfectamente a un modelo
lineal el cual reduce las matrices al uso de escalares. Esto hace que el calculo de las
posiciones utilizando el algoritmo de Filtros de Kalman simplificado se reduzca a una
serie de ecuaciones aritméticas simples.

En base a esta técnica somos capaces de tomar los datos de GPS obtenidos del provee-
dor de localización, y aplicar el algoritmo para ası́ obtener un camino uniformemente
suavizada. Vimos que la trayectoria medida y la calculada coinciden en la visualización
de sus trayectorias sobre el mapa, y este comportamiento es el esperado, ya que usando
Filtros de Kalman para reducir el error y calcular una posición más ajustada a la reali-
dad nos brinda nuevos valores estimados más precisos que los medidos, pero basados en
las mediciones. En conjunto con ello observamos que el error estimado por el algoritmo
es considerablemente menor que el error medido, haciendo que las posiciones calculadas
generen una trayectoria uniforme y más suave que aquella realizada con los valores me-
didos. Por lo tanto los datos obtenidos utilizando Filtros de Kalman representan una
trayectoria más cercana a la realmente recorrida, con un error más pequeño.

La funcionalidad del sistema puede ser dividida en dos perı́odos, el tiempo de recolección
de datos y el tiempo de visualización. La visualización de los datos en la pantalla principal
y en el mapa no tienen un alto impacto en el desempeño de la aplicación, ya que, aunque
son dinámicamente generadas, ya cuentan con la información almacenada, y solo realizan
tareas de presentación. En cambio, la recolección de datos si afecta el desempeño del
equipo, ya que esta se realiza utilizando las radios (GPS, WiFi, y red de telefonı́a) para
obtener la posición del dispositivo, y consumo de memoria y procesador para realizar
los cálculos que realiza el algoritmo. El uso de memoria y CPU a la hora de obtener los
datos son bajos, pues se está consumiendo recursos provistos por el sistema propiamente
dicho, incluso sin necesidad de tener la pantalla encendida. El punto potencialmente más
problemático es durante el cálculo de los datos estimados usando los Filtros de Kalman,
más al eliminar los cálculos matriciales gracias a la simplificación del modelo, descripta
en el la sección 4.1.1, este cálculo se basa en una serie de cálculos aritméticos simples,
lo que refuerza la idea de un desempeño óptimo.

El inconveniente que aparece con mayor presencia en esta implementación, y el cual


está ligado al uso de las radios para obtener la posición del dispositivo (WiFi, GPS, la
red de telefonı́a celular, entre otras) es que tienen un alto consumo de baterı́a. al utilizar
valores provenientes del receptor de GPS integrado en el dispositivo, y este consumir
51

mucha energı́a para obtener y procesar las señales de la grilla de satélites, la aplicación
causará un drenaje importante de la baterı́a del dispositivo.

Para observar los detalles de la implementación de los Filtros de Kalma, y de la aplicación


en general se puede obtener la misma desde el siguiente proyecto en Github:

https://github.com/jbianco/LocationMapper/tree/yan

En conclusión los Filtros de Kalman reducen rápidamente el error estimado, obtiene


datos uniformes, y producen caminos correctos que representan las trayectorias que
buscamos generar.

6.2. Futuros trabajos propuestos

Para ampliar este trabajo podemos realizar algunas mejoras a la aplicación, como agregar
el uso de sensores disponibles en los dispositivos que provean información adicional a fin
de saber si el dispositivo está en movimiento, o si cambió el sentido en el que se desplaza
el dispositivo, entre otras cosas, y ası́ agregar precisión al cálculo de la trayectoria, y
reducir aún más el error estimado. La complicación adicional resulta de la necesidad de
ampliar el modelo generado para este problema, haciendo necesario el uso de las matrices
que eliminamos durante la simplificación. Esto también trae aparejado un error adicional
adquirido de los datos los sensores.

Otro posible trabajo adicional que se desprende de este sistema es la utilización de


el algoritmo de Filtros de Kalman simplificado para generar puntos intermedios entre
mediciones, evitando ası́ consultar al proveedor de localización de manera seguida, y
trazando una trayectoria confiable con un menor uso de baterı́a del dispositivo móvil.
Bibliografı́a

[1] Greg Welch and Gary Bishop. An introduction to the Kalman filter. July 2006.
URL http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf.

[2] Greg Welch and Gary Bishop. An introduction to the Kalman fil-
ter, 2001. URL http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_
CoursePack_08.pdf.

[3] J Laurie Snell Charles M Grinstead. Introduction to Probability: Second Revised


Edition. American Mathematical Society, 1997. URL http://www.dartmouth.edu/
~chance/teaching_aids/books_articles/probability_book/Chapter11.pdf.

[4] Sam Roweis and Zoubin Ghahramani. A unifying review of linear gaussian models.
Neural Computation, 11(2), February 1999.

[5] James Douglas Hamilton. Time Series Analysis. Princeton University Press, 1994.

[6] Peter Matisko and Vladimir Havlena. Optimality tests and adaptive Kalman filter.
IFAC, 2012. URL http://www.ifac-papersonline.net/Detailed/54941.html.

[7] Rudolph E. Kalman. A new approach to linear filtering and prediction problems.
Transaction of the ASME—Journal of Basic Engineering, 1960. URL http://www.
cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf.

[8] Peter S. Maybeck. Stochastic models, estimation, and control. 1979.

[9] O. L. R. Jacobs. Introduction to Control Theory (Second ed.). Oxford University


Press., Wellington Square, Oxford OX1 2JD, United Kingdom, 1993.

[10] Robert Grover Brown and Patrick Y. C. Hwang. Introduction to Random Signals
and Applied Kalman Filtering: with MATLAB Exercises and Solutions. Wiley &
Sons, Inc., Hoboken, New Jersey, 1996.

[11] Bernard Sklar. Digital Communications: Fundamentals and Applications. Prentice


Hall, 2 edition, 2001.

52
Bibliography 53

[12] James J. Spilker. Global Positioning System: Theory and Applications, volume 1.
Parkinson, B. W., editor, 1996.

[13] P. Misra and P. Enge. Global Positioning System: Signals, Measurements, and
Performance. Ganga-Jamuna Press, 2001.

[14] James Bao-Yen Tsui. Fundamentals of Global Positioning System Receivers, A


Software Approach. John Wiley & Sons, 2000.

[15] Phillip Ward. Understanding GPS: Principles and Applications. Artech House
Publishers, 1996.

[16] Android. Location provider, November 2013. URL http://developer.android.


com/reference/android/location/LocationProvider.html.

[17] Android. SQLite data, November 2013. URL http://developer.android.com/


reference/android/database/sqlite/SQLiteDatabase.html.

[18] Android. Cursor adapters, November 2013. URL http://developer.android.


com/reference/android/widget/SimpleCursorAdapter.html.

[19] Google. Google maps javascript API, November 2013. URL https://developers.
google.com/maps/documentation/javascript/reference.

[20] Android. Shared preferences, November 2013. URL http://developer.android.


com/reference/android/content/SharedPreferences.html.

[21] Android. Webview, November 2013. URL http://developer.android.com/


reference/android/webkit/WebView.html.

Vous aimerez peut-être aussi