Navegación Integrada para Ambientes Cerrados
Transcripción
Navegación Integrada para Ambientes Cerrados
Departamento de Electrónica Facultad de Ingenierı́a Universidad de Buenos Aires Tesis de Grado Navegación Integrada para Ambientes Cerrados David Vilaseca <vilaseca at gmail.com> Director de Tesis: Dr. Ing. Juan Giribet Jurado: Dr. Ing. Leonardo Rey Vega Jurado: Dr. Ing. Silvano Zanutto Jurado: Dr. Ing. Claudio Estienne Diciembre de 2012 Índice general 1. Introducción 11 1.1. Navegación en ambientes cerrados . . . . . . . . . . . . . . . . . . . . . . . . 11 1.2. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3. Estado del Arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2. Navegación usando señales WiFi 19 2.1. ¿Por qué WiFi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2. ¿Qué se mide? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3. Modelos estudiados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.1. Triangulación por potencia de señal - RSSI . . . . . . . . . . . . . . . 21 2.3.2. Análisis de escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.2.1. Método de los k vecinos más cercanos . . . . . . . . . . . . . 22 2.3.2.2. Modelo probabilı́stico . . . . . . . . . . . . . . . . . . . . . . 22 2.4. Experimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4.1. Dataset - Pruebas con métodos estadı́sticos . . . . . . . . . . . . . . . 25 2.4.1.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.1.2. Preparación . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.1.3. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.1.4. Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . 27 2.4.2. Caracterización del fingerprint . . . . . . . . . . . . . . . . . . . . . . 30 2.4.2.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.2.2. Preparación . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.4.2.3. Procedimiento . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.4.2.4. Resultados obtenidos (usando el dataset real) . . . . . . . . . 33 2.4.2.5. Resultados obtenidos (usando el dataset simulado) . . . . . . 35 3. Sistema de navegación inercial - INS 40 3.1. Sistema de referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.2. Ecuaciones del INS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.3. Errores de los sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 1 ÍNDICE GENERAL 2 3.4. Ensayo de los sensores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Plataforma de vuelo 44 49 4.1. ¿Por qué un quadrotor? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Descripción general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.2.1. Principio de funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . 51 4.2.2. Diagrama en bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 5. Filtro de Kalman extendido - EKF 53 5.1. Ecuaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.2. Modelo dinámico del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.3. Modelo del observador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 5.3.1. Ubicación más probable . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6. Implementación 59 6.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1.1. IMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1.1.1. Acelerómetro . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.1.1.2. Giróscopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 6.1.2. Computadora de bajo nivel (LLC) . . . . . . . . . . . . . . . . . . . . 62 6.1.3. Computadora de abrodo (OBC) . . . . . . . . . . . . . . . . . . . . . 63 6.1.4. WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.2. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.2.1. C++ - Boost - GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.2.1.1. Operaciones con matrices . . . . . . . . . . . . . . . . . . . . 67 6.2.1.2. Cuaterniones . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.2.1.3. Generación de VV.AA . . . . . . . . . . . . . . . . . . . . . . 68 6.2.1.4. Portabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 6.2.1.5. Acceso a periféricos . . . . . . . . . . . . . . . . . . . . . . . 68 6.2.1.6. Threads y conectividad . . . . . . . . . . . . . . . . . . . . . 68 6.2.2. Modificaciones en aircrack / airodump . . . . . . . . . . . . . . . . . . 68 6.2.3. Data logger / viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.2.4. Organización de clases . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 6.2.4.1. Access Piont - ap::ap() . . . . . . . . . . . . . . . . . . . . . 72 6.2.4.2. Filtro de Kalman extendido - ekf::ekf() . . . . . . . . . . . . 72 6.2.4.3. Sistema de navegación integrada - ins::ins() . . . . . . . . . . 75 6.2.4.4. Unidad de mediciones inerciales - imu::imu() . . . . . . . . . 75 6.2.4.5. Logger TCP - tcp logger::tcp logger() . . . . . . . . . . . . . 78 6.2.4.6. Sensor WiFi - wifi sensor::wifi sensor() . . . . . . . . . . . . 79 ÍNDICE GENERAL 6.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 81 7. Conclusiones 87 8. Trabajo Futuro 89 A. Rotaciones en el espacio 91 A.1. Cuaterniones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 A.2. Matriz de Cosenos Directores - DCM . . . . . . . . . . . . . . . . . . . . . . . 93 A.3. Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 A.3.1. DCM a Cuaternión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 A.3.2. Cuaternión a DCM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 B. Método de Runge–Kutta - RK4 95 C. Triangulación por RSSI 96 C.1. Sistema propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 C.1.1. Campo de fuerza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 C.1.2. Dinámica del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 C.1.3. Modelo de observación . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 C.2. Filtro de Kalman - EKF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 C.2.1. Descripción de las matrices . . . . . . . . . . . . . . . . . . . . . . . . 98 C.2.2. Condiciones iniciales / ruidos / covarianzas . . . . . . . . . . . . . . . 99 C.3. Implementación del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 C.3.1. Mapa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 C.3.2. Campo de fuerza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 C.3.3. Observaciones / secuencia de mediciones . . . . . . . . . . . . . . . . . 100 C.3.4. Filtrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 C.4. Resultados obtenidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 C.5. Simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 D. Caracterización por cuadrados mı́nimos 109 E. Formato de archivos 110 E.1. Mediciones WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 E.2. Mediciones inerciales - IMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 E.3. Muestras de entrenamiento - histogramas . . . . . . . . . . . . . . . . . . . . 112 Índice de figuras 1.1. Modelo 3D de un quadrotor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2. Clasificación de sistemas de navegación indoor . . . . . . . . . . . . . . . . . . 15 2.1. Sistemas de navegación indoor estudiados en el trabajo . . . . . . . . . . . . . 21 2.2. Histograma de potencia WiFi recibida para una posición . . . . . . . . . . . . 23 2.3. Sistema de coordenadas y ubicación de los routers durante el experimento . . 25 2.4. Distribución espacial de la potencia . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5. Histogramas de potencia WiFi medidos en cada punto de la grilla . . . . . . . 29 2.6. Camino obtenido a partir de locate vs ground truth, usando 4 routers . . . . 31 2.7. Camino obtenido a partir de locate vs ground truth, usando 2 routers . . . . 32 2.8. Error vs routers utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.9. Error vs mediciones tomadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.10. Error vs varianza de ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.11. Error vs routers utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.12. Error vs routers utilizados (extendido) . . . . . . . . . . . . . . . . . . . . . . 36 2.13. Error vs mediciones tomadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.14. Error vs varianza de ruido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.15. Error vs cantidad de mediciones offline . . . . . . . . . . . . . . . . . . . . . . 38 2.16. Error vs densidad de la grilla . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.1. Sistema de Navegación Inercial . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.2. Sistemas de referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.3. Clasificación de errores comunes en sensores inerciales . . . . . . . . . . . . . 44 3.4. Rotación de la IMU durante la caracterización . . . . . . . . . . . . . . . . . 45 4.1. Modelo 3D de un quadrotor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Diagrama en bloques de un quadrotor . . . . . . . . . . . . . . . . . . . . . . 52 6.1. IMU utilizada en la implementación del trabajo . . . . . . . . . . . . . . . . . 60 6.2. Principio de funcionamiento de un acelerómetro MEMS . . . . . . . . . . . . 60 6.3. Diagrama en bloques de un acelerómetro MEMS . . . . . . . . . . . . . . . . 61 4 ÍNDICE DE FIGURAS 5 6.4. Diagrama en bloques de un giróscopo MEMS . . . . . . . . . . . . . . . . . . 62 6.5. LPCXpresso 1768 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.6. Beagleboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.7. Adaptador WiFI USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.8. Salida del programa airodump-ng . . . . . . . . . . . . . . . . . . . . . . . . . 69 6.9. Salida del programa airodump-ng modificado . . . . . . . . . . . . . . . . . . 70 6.10. Pruebas con datalogger desarrollado en SimuLink . . . . . . . . . . . . . . . . 70 6.11. Pruebas con datalogger desarrollado en LabView . . . . . . . . . . . . . . . . 71 6.12. Clases C++ del navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.13. Organización de la clase AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.14. Métodos de la clase ekf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.15. Miembros de la clase ekf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.16. Matrices de la clase ekf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.17. Organización de la clase INS . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6.18. Métodos de la clase IMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.19. Miembros de la clase IMU usados en las mediciones . . . . . . . . . . . . . . . 77 6.20. Miembros de la clase IMU de uso general . . . . . . . . . . . . . . . . . . . . 77 6.21. Miembros de la clase IMU usados en la calibración . . . . . . . . . . . . . . . 78 6.22. Organización de la clase tcp logger . . . . . . . . . . . . . . . . . . . . . . . . 79 6.23. Métodos de la clase tcp logger . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 6.24. Miembros de la clase tcp logger . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.25. Funciones usadas por la clase tcp logger . . . . . . . . . . . . . . . . . . . . . 81 6.26. Navegador inercial + WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.27. Navegador inercial + WiFi con 5m de error en posición inicial . . . . . . . . . 82 6.28. Navegador inercial con 5m de error en posición inicial . . . . . . . . . . . . . 83 6.29. Navegador inercial con error en posición y actitud inicial . . . . . . . . . . . . 84 6.30. Navegador inercial + WiFi con error en posición y actitud inicial . . . . . . . 84 6.31. Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 0,1 sm2 0,2 sm2 0,4 sm2 0,8 sm2 . . . . . 85 . . . . . 85 . . . . . 86 . . . . . 86 6.35. Autocorrelación de las innovaciones . . . . . . . . . . . . . . . . . . . . . . . . 86 C.1. Mapa del espacio a navegar con su respectivo campo de fuerza . . . . . . . . 97 C.2. Mapa y recorrido propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.32. Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 6.33. Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 6.34. Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = C.3. Nivel de potencia en el espacio para cinco routers (centro y esquinas) . . . . . 100 C.4. Resultado obtenido para SNR = 30dB, α = 3, λ = 0,5, σν = 1m, Fcr = 1 . . . 101 C.5. Resultado obtenido para SNR = 20dB, α = 3, λ = 0,5, σν = 1m, Fcr = 1 . . . 101 ÍNDICE DE FIGURAS 6 C.6. Resultado obtenido para SNR = 10dB, α = 3, λ = 0,5, σν = 1m, Fcr = 1 . . . 102 C.7. Resultado obtenido para SNR = 0dB, α = 3, λ = 0,5, σν = 1m, Fcr = 1 . . . 102 Índice de tablas 6.1. Caracterı́sticas del acelerómetro MMA7361L . . . . . . . . . . . . . . . . . . . 61 6.2. Caracterı́sticas del giróscopo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.3. Caracterı́sticas del LPCXpresso 1768 . . . . . . . . . . . . . . . . . . . . . . . 63 6.4. Caracterı́sticas de la OBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.5. Caracterı́sticas del adaptador WiFi USB . . . . . . . . . . . . . . . . . . . . . 67 7 Siglas y Acrónimos AP Access Point GPS Global Positioning System - sistema de posicionamiento global GLONASS Globalnaya Navigatsionnaya Sputnikovaya Sistema GNSS Global Navigation Satellite System UAV Unmanned Aerial Vehicle - vehı́culo aéreo no tripulado IMU Inertial Measurement Unit - unidad de mediciones inerciales INS Inertial Navigation System - sistema de navegación inercial RSSI Received signal strength indication - Indicador de potencia de señal recibida OBC On Board Computer - Computadora de abrodo EKF Extended Kalman Filter - filtro de Kalman extendido TOA Time of Arrival - Tiempo de arribo TDOA Time Difference of Arrival - Diferencia en tiempo de arribo NLOS Non Line of Sight - falta de lı́nea de visión RTOF Roundtrip time of flight - Tiempo de viaje AOA Angle of arrival - ángulo de arribo kNN k-Nearest Neighbors - k vecinos más cercanos SVM Support vector machine SMP Smallest M-vertex polygon RFID Radio Frequency IDentification - identificación por radiofrecuencia IR Infra Rojo 8 ÍNDICE DE TABLAS SPKF Sigma Point Klalman Filter SPKS Sigma Point Kalman Smoother FIUBA Facultad de Ingenierı́a de la Universidad de Buenos Aires MAC Media Access Control ESSID Extended Service Set IDentifier BSSID Basic Service Set IDentification MEMS Micro-electro-mechanical Systems - sistemas micro-electro-mecánicos LS Least Squares - mı́nimos cuadrados VTOL Vertical take-off and landing - aterrizaje y despegue vertical PWM Pulse Width Modulation ESC Electronic Speed Controller - control electrónico de velocidad MSE Mean Squared Error - error cuadático medio AWGN Additive white Gaussian noise LLC Low Level Computer - Computadora de bajo nivel ASIC Application-specific integrated circuit - circuito integrado de aplicación especı́fica RTOS Real Time Operating System - sistema operativo de tiempo real ADC Analog to Digital Converter UART Universal asynchronous receiver/transmitter I2 C Inter-Integrated Circuit SPI Serial Peripheral Interface CPU Central processing unit USB Universal Serial Bus GCC GNU Compiler Collection BLAS Basic Linear Algebra Subprograms VV.AA Variables Aleatorias ARM Advanced RISC Machine 9 ÍNDICE DE TABLAS IEEE Institute of Electrical and Electronics Engineers IPC Inter-process communication - comunicación entre procesos TCP/IP Transmission Control Protocol / Internet Protocol RK4 Runge–Kutta 4 SI Le Système International d’Unités 10 Capı́tulo 1 Introducción Un viaje de mil millas comienza con el primer paso. Lao-tsé 1.1. Navegación en ambientes cerrados Se entiende como navegación al arte de conocer la posición, velocidad y orientación de determinado objeto respecto a un sistema de referencia conocido: un sistema de navegación integrada es aquel que combina distintas fuentes de información para poder obtener los datos deseados. Para conocer las coordenadas de un objeto se puede acudir a referencias externas: en función de la distancia o el ángulo del objeto respecto a cada una de esas referencias se puede inferir su ubicación. Por ejemplo, los antiguos navegantes usaban el astrolabio para ubicarse en altamar midiendo el ángulo formado entre las estrellas y el horizonte. Hoy en dı́a los sistemas de posicionamiento global como GPS y GLONASS toman como referencia satélites cuya posición es conocida y miden la distancia a cada uno de ellos. De esta forma se obtiene una posición relativa a estos objetos de referencia. Una alternativa a esto es usar sensores inerciales que registren ciertas cantidades fı́sicas aplicadas al objeto que se navega, permitiendo reconstruir su trayectoria a partir de estos datos. Teniendo mediciones de fuerza especı́fica (provinientes de acelerómetros), de velocidad angular (provinientes de giróscopos) y conociendo las condiciones iniciales es posible inferir la posición y orientación del vehı́culo. Por ejemplo, si se toma un objeto inicialmente en reposo, se registra su aceleración y se la integra, se obtiene su velocidad. Si se integra nuevamente se obtiene la posición. De esta forma es posible conocer la ubicación del objeto tomando como origen la posición donde comenzó el experimento1 . 1 Para este sencillo experimento mental se supone conocida la orientación del objeto con lo cual no es 11 1.1 Navegación en ambientes cerrados 12 Algunos sistemas de navegación integrada combinan sensores inerciales (giróscopos y acelerómetros) y sistemas que funcionan en base a referencias externas como los sistemas de navegación global por satélite (GNSS): los sensores inerciales no dependen de parámetros externos al vehı́culo (campo magnético terrestre, lı́nea de visión, etc), son aptos para usar con dinámicas rápidas y son bastante robustos a perturbaciones o interferencias, pero al integrar las mediciones para calcular la posición y orientación, cualquier error en los sensores implica una deriva en los datos de posición. En cambio los sistemas que calculan la posición a partir de referencias externas mantienen el error acotado a lo largo del tiempo pero son más vulnerables a perturbaciones externas y tienen una dinámica más lenta: al combinar algunos de estos instrumentos con sensores inerciales se pueden lograr muy buenos resultados, siempre y cuando se sepan aprovechar las vantajas de cada uno. En definitiva, el objetivo de un sistema de navegación integrada es combinar toda la información disponible de forma óptima. En el presente trabajo se analiza la problemática de navegar en entornos cerrados donde, por lo general, no hay disponibilidad de sistemas de navegación global. Para sortear este problema se acude a otros recursos que permitan conocer la posición con confianza a largo plazo, de alguna forma, reemplazar el sistema GNSS por un instrumento que sı́ esté disponible en ambientes cerrados. A lo largo de la historia el hombre pasa cada vez más tiempo bajo los techos que construye. Esta tendencia es clara y las superficies cubiertas son cada vez mayores. A tal punto ha llegado esto que en lugares como aeropuertos, estaciones de tren, shoppings y supermercados (por mencionar algunos) el caudal de personas que circula es enorme. En este contexto se torna un tema de interés poder navegar en esas condiciones [6]. Algunas aplicaciones de este enfoque son: Tracking de mercaderı́a en un depósito Navegación indoor para visitas guiadas a museos o edificios grandes Tracking de personas o equipos dentro de edificios Navegación indoor de un UAV Este trabajo se enfoca sobre el último de estos ı́tems. En particular se usa un quadrotor: una plataforma de vuelo no tripulada que puede permanecer suspendida en el aire gracias a cuatro hélices que le dan sustento. necesario un giróscopo. También se supone medible la aceleración lineal aunque en realidad un acelerómetro mida fuerza especı́fica, que es la suma de la aceleración lineal y la fuerza gravitatoria. 1.1 Navegación en ambientes cerrados 13 Figura 1.1: Modelo 3D de un quadrotor A diferencia de un helicóptero se basa en una estructura mecánica muy simple, permitiendo transladar toda la complejidad del control y estabilidad a los algoritmos y programas encargados de ello. Esto hace a la plataforma muy atractiva para investigaciones an el área de electrónica y ciencias de la computación, a tal punto que en los últimos años se ha vuelto muy popular [17]. Al tener dimensiones reducidas (un diámetro de decenas de centı́metros) es posible navegar en entornos cerrados. Las aplicaciones de esta combinación (quadrotor y sistema de navegación) son muy variadas: desde vigilancia de edificios hasta reconocimiento y asistencia a vı́ctimas en un derrumbe, pasando por control de fallas en lineas de alta tensión u otros sistemas crı́ticos. En los siguientes capı́tulos se describe en detalle el problema planteado y se analiza e implementa una posible solución. Se comienza planteando los objetivos del trabajo y una breve reseña del estado del arte de la navegación integrada en entornos cerrados. Se hace una introducción a los sistemas de navegación y se presentan distintos enfoques de localización en ambientes cerrados. A continuación, en el capı́tulo 2 se desarrollan los conceptos de localización mediante señales WiFi. Se fundamenta la elección de la tecnologı́a y la técnica usada en el trabajo, y se detallan las experiencias diseñadas para optimizar los parámetros de las mediciones. Luego, en el capı́tulo 3 se detallan temas generales sobre navegación integrada como el sistema de referencia usado, las ecuaciones del sistema y el modelo de error usado para los sensores. También se describe la técnica usada para caracterizar la unidad de mediciones 1.2 Objetivo 14 inerciales (IMU). En el capı́tulo 4 se presentan caracterı́sticas y limitaciones de la plataforma de navegación usada -un quadrotor-. El diseño del algoritmo de fusión de datos se detalla en el capı́tulo 5: toda la información de navegación e información a priori alimenta un filtro de Kalman extendido (EKF) que se ocupa de fusionar los datos del sistema de navegación inercial (INS) con las mediciones externas -nivel de potencia WiFi-. Posteriormente en el capı́tulo 6 se detalla la implementación del sistema completo, con sus componentes de software y hardware: este capı́tulo abarca temas relacionados a los sensores inerciales, el Indicador de potencia de señal recibida (RSSI), la Computadora de abrodo (OBC), las bibliotecas de software utilizadas, y el diseño de clases y herramientas que fueron necesarias durante el desarrollo. Por último, en el capı́tulo 7 se presentan las conclusiones obtenidas a lo largo del trabajo seguidas, en el capı́tulo 8, por lineas de trabajo futuro en el área. 1.2. Objetivo El objetivo de este trabajo es implementar un sistema de navegación integrada para ambientes cerrados que sea capaz de funcionar en tiempo real y pueda ser parte de la carga de un quadrotor. Para esto se propone una serie de tareas necesarias para cumplir el objetivo, a saber: Conocer el estado del arte, tanto de temas de navegación como localización indoor. Plantear la problemática general y acotar el problema. Encontrar alternativas para poder navegar en entornos cerrados sin señales de sistemas GNSS. De las alternativas encontradas, explotar aquellas que aprovechen las restricciones y condiciones impuestas por el quadrotor. Plantear un modelo de fusión de datos para integrar la información obtenida de la localización indoor con las mediciones de la IMU. Implementar todo lo anterior diseñando un sistema capaz de resolver el problema planteado en tiempo real y en la plataforma de vuelo propuesta 1.3. Estado del Arte Este trabajo combina dos áreas principales, necesarias para llevar a cabo su desarrollo. Por un lado se estudian temas de navegación integrada en general. Por otro lado se exploran 1.3 Estado del Arte 15 técnicas de localización indoor. La parte de navegación se enfoca en el estudio y la investigación de la dinámica y evolución temporal de los sistemas de navegación, basándose en las mediciones de sensores inerciales. También se estudia el modelo de error de los sensores usados. Todo esto se detalla en el capı́tulo 3. La principal referencia para estos temas fue [25] Las técnicas de localización indoor son más incipientes. A partir de 2002 se comenzaron a publicar trabajos en este área [19]. Existe gran variedad de enfoques disponibles considerando distintos niveles de información a priori que se puede tener sobre el espacio a navegar o el modelo de propagación de señal que se considere. La localización indoor haciendo uso de beacons2 se puede abordar de distintas formas, pero siempre se busca relacionar la posición del objeto a navegar con beacons o emisores cuya posición sea conocida. Se pueden clasificar los sistemas de localización indoor según el principio de medición: Figura 1.2: Clasificación de sistemas de navegación indoor 1. Por triangulacición: estos metodos funcionan obteniendo caracterı́sticas del triángulo formado por el objeto a localizar y algunas referencias cuya posición sea conocida. a. Midiendo los lados (para ubicar un objeto en el espacio se necesitan por lo menos tres referencias) i. Tiempo de arribo (TOA): Mide el tiempo que tarda una señal en llegar desde la referencia al objeto a localizar. El tiempo es directamente proporcional a la distancia que los separa. Este enfoque requiere un sistema dedicado ya que los distintos componentes deben estar sincronizados, hace falta una infraestructura dedicada. Además el sistema pierde performance cuando no hay lı́nea de 2 Balizas o puntos de referencia 1.3 Estado del Arte 16 visión directa entre el navegador y el beacon por efectos de multipath. ii. Diferencia en tiempo de arribo (TDOA): con esta técnica se puede calcular la posición relativa del objeto a localizar en función de la diferencia de tiempo con que una señal enviada por dicho objeto llega a las referencias. Tiene como ventaja respecto a TOA que no es necesaria la sincronización pero sufre el mismo problema cuando no se dispone lı́nea de visión directa. iii. Indicador de potencia de señal recibida (RSSI): Con este enfoque se busca inferir la posición del objeto a localizar midiendo la potencia que le llega de cada una de las referencias. Esto permite usar un modelo de propagación subyacente que puede tener en cuenta el comportamiento de los campos en ambientes cerrados, lo cual es una ventaja respecto a los dos esquemas anteriores. En otras palabras, si bien no se eliminan los efectos por propagación multipath y por falta de lı́nea de visión (NLOS), se puede adaptar el modelo de propagación para apaciguar estos problemas. iv. Tiempo de viaje (RTOF): Esta técnica es parecida a TOA, pero tiene menos restricciones en la sincronización del sistema ya que lo que se mide es el tiempo que tarda una señal en ir y volver desde el objeto a localizar a una referencia. El talón de Aquiles en este caso es la incertidumbre en el tiempo de procesamiento que se tome el equipo que recibe y retransmite la señal. b. Midiendo el ángulo de arribo (AOA): Se puede determinar la posición de un objeto conociendo el ángulo que forma respecto a tres referencias conocidas. De todas maneras este enfoque no es muy popular ya que la medición de ángulos de arribo requiere hardware especı́fico, y los resultados obtenidos no son alentadores. 2. Por análisis del escenario: estas técnicas involucran dos etapas. Durante la primer etapa se extraen features o huellas -fingerprints- del terreno obteniendo una base de datos con información a priori. Luego, en la segunda etapa se toma una medición para inferir la posición en que fue tomada, considerando toda la información a priori. Lo más común es extraer features a partir del RSSI a. Métodos probabilı́sticos: utilizan un filtro bayesiano para hacer una estimación a posteriori de la posición basándose en una medición y en la información a priori disponible. b. k vecinos más cercanos (kNN): Consiste en hallar, mediante una función costo, los k elementos de la base de datos (con puntos de entrenamiento) más parecidos a la medición tomada. Luego se decide la posición en función de los k puntos encontrados. c. Redes neuronales: se basan en la interconexión de unidades básicas -neuronas- 1.3 Estado del Arte 17 que son entrenadas en la etapa offline. Luego estas redes entrenadas se usan para decidir la ubicación del objeto que se navega a partir de las mediciones tomadas. d. Support vector machine (SVM): es un método de aprendizaje supervisado en el que se realizan transformaciones en el espacio de las muestras de tal forma que la regla de decisión, en el espacio transformado, tenga una forma simple respecto al espacio original. e. Smallest M-vertex polygon (SMP): Se basa en calcular por lo menos un candidato de posición para cada referencia de forma independiente. Luego se selecciona el candidato de cada referencia de tal forma que el polı́gono formado por los M candidatos (uno por cada referencia) sea mı́nimo. La posición final se calcula como el baricentro de este polı́gono. 3. Por proximidad: consiste en equipar el espacio a navegar con receptores, y el navegador con un transmisor. Cada receptor define una zona correspondiente a la posición del objeto a navegar en caso que la lectura de ese receptor sea mayor a los demás. Esto se puede implementar con tags de identificación por radiofrecuencia (RFID) o con dispositivos Infra Rojos (IRs) Todos estos enfoques, en mayor o menor medida son afectados por fenómenos de propagación multipath, ruido de fuentes ajenas al sistema y NLOS. En general se utilizan combinaciones de los métodos presentados anteriormente, buscando complementar las ventajas de cada uno. En [21] Anindya y Wan se plantea un modelo de potencial y random walk basado en el mapa del espacio a nevagar. Se usa un modelo de observación basado en la forma de propagación de las ondas electromagnéticas. Se compraran distintos métodos de filtrado: EKF vs SPKF vs SPKS y también se aplica el uso de sensores IR pasivos y pulsadores en el suelo para mejorar la calidad de las mediciones. Una de las conclusiones de este trabajo es la notable mejora del sistema usando sensores IR y pulsadores, logrando bajar el error de 2m a 0.37m. Si bien es una mejora significativa, implica la necesidad de modificaciones en la infraestructura que no siempre son posibles, haciendo poco escalable el sistema en términos de usuarios. En Gezici Et al. [16] se aborda el tema desde un punto de vista más teórico, se analizan los distintos enfoques para navegación usando señales de radio. Se buscan cotas teóricas en la varianza del estimador para cada enfoque (cota de Cramér-Rao), se analizan los problemas más comunes en estas técnicas (NLOS, multipath) algunas técnicas de espectro ensanchado. En evennou y Marx [14] se presentan y comparan los modelos de propagación, fingreprint y estimación probabilı́stica basada en histogramas. Se fusionan los datos de RSSI con una IMU y usa filtro de partı́culas comparando distintos enfoques. A pesar de obtener mejores 1.3 Estado del Arte 18 resultados usando un filtro de partı́culas que un filtro de Kalman, la complejidad computacional del primero complica la implementación de un sistema embebido y en tiempo real. Al igual que en Anindya y Wan [21] se obtiene un error cercano a los 2m. Por otra parte, en Frank Et al. [15] se cubren temas parecidos a los presentados en Evennou y Marx [14] pero se dedica más a desarrollar el modelo de observación con la IMU: con esta se estiman los pasos de un peatón mediante un modelo de caminante, restringiendo el uso del sistema únicamente a personas. El modelo de caminante le quita generalidad al navegador, no pudiendo usarse entonces para plataformas de vuelo, por ejemplo. Para la localización por WiFi usan estimación por histograma. Los métodos y técnicas utilizados de detallan en el capı́tulo 2 Capı́tulo 2 Navegación usando señales WiFi I do not think that the wireless waves I have discovered will have any practical application. Heinrich Rudolf Hertz 2.1. ¿Por qué WiFi? En la sección 1.3 se hace un análisis técnico de los distintos métodos para localización indoor, pero un factor decisivo a la hora de implementar un sistema son los costos y la disponibilidad que va a tener el servicio. El hecho de poder usar hardware y drivers que funcionan, que están probados y disponibles en el mercado presenta una serie de ventajas interesantes. También es un hecho que las redes WiFi, y por lo tanto los Access Point (AP) están por doquier, con lo cual a la hora de implementar el sistema quizá ni siquiera haya que instalar APs. La principal desventaja que trae esta tecnologı́a es la baja resolución en las mediciones de potencia que permite el hardware, y el comportamiento complejo que tienen los campos en la banda de 2.4GHz en ambientes cerrados. Está claro que WiFi no fue pensado para aplicaciones de localización, pero analizando la relación de compromiso entre las ventajas y desventajas que ofrece se ve una buena perspectiva. Más aún teniendo en cuenta resultados de trabajos publicados en los últimos años. Aplicando esquemas de fusión de datos y combinando mediciones WiFi con mediciones de otros sensores se pueden lograr buenos resultados. 2.2. ¿Qué se mide? El estándar IEEE 802.11 define un beacon o baliza que es enviado periódicamente por el access point para anunciar su presencia. No es necesario estar conectado a la red para tener 19 2.3 Modelos estudiados 20 acceso a los beacons, el único requisito es estar en el rango del access point. Esto también es ası́ si la red está encriptada, el contenido de los beacons es accesible por todos. Además, con un adaptador se pueden recibir beacons de muchas redes distintas. Estos paquetes transmiten información de sincronización y un identificador único de la red. El RSSI se calcula en el receptor al obtener el beacon y esta es la cantidad que se toma como medida en el trabajo. En general no se encuentra un consenso en la forma de medir la potencia recibida. Cada fabricante provee una medida distinta, y para poder utilizar datos de manera intercambiable entre distintas interfaces es necesaria una adaptación entre dBm, %, o la medida correspondiente a cada interfaz. Este problema en particular no es tratado en este trabajo, ya que se usa siempre la misma interfaz. En relación a periodicidad de los beacons, lo más común es encontrar los access point configurados para transmitir 10 beacons por segundo y esta velocidad va a ser una restricción en la frecuencia del lazo de mediciones WiFi del navegador. Al diseñar este subsistema es importante tener en cuenta lo siguiente: IEEE 802.11 define 14 canales en los que se puede establecer una comunicación WiFi y los adaptadores pueden enviar/recibir información solamente en el canal que tengan sintonizado. Por eso no es posible escuchar beacons de todos los canales al mismo tiempo, si los access point están distribuidos en varios canales es necesario sintonizar el adaptador un tiempo en cada uno para poder escuchar los beacons correspondientes. Esto establece una relación de compromiso donde a mayor diversidad de canales WiFi que se quieren usar, menor frecuencia de mediciones se consigue. Este trabajo estudia el caso de usar un único canal. 2.3. Modelos estudiados De todos los métodos de localización indoor presentados en (1.3) se estudian en detalle localización por RSSI (usando un modelo de propagación de onda), y dentro de la categorı́a de análisis de escenacio se estudian métodos basados en filtro Bayesiano y kNN. Se analizan en profundidad estos métodos por diversos motivos. En el caso de RSSI es el método que tiene menos requerimientos de hardware. A diferencia de los métodos basados en medición de tiempo, la potencia de señal recibida es una cantidad que se puede obtener de la mayorı́a de equipos comerciales. En el caso de los métodos por análisis de escenario se estudia el filtro bayesiano y el método de los k vecinos más cercanos debido a su bajo costo computacional comparado con redes neuronales, SVM y SMP. No se estudian métodos de localización por proximidad debido al setup especı́fico de hardware que requieren: parte del objetivo de este trabajo es que la implementación del sistema no requiera grandes cambios en la infraestructura disponible. 2.3 Modelos estudiados 21 Figura 2.1: Sistemas de navegación indoor estudiados en el trabajo 2.3.1. Triangulación por potencia de señal - RSSI El modelo de propagación de onda es el método más simple. Se basa en suponer conocida la forma de propagación y atenuación de la onda. Por ejemplo, tal como se propone en [14]. Prx (d) = Prx (d0 ) − 10 · α · log � d d0 � (2.1) El parámetro α modela la forma de propagación en el entorno (para espacio libre α = 2, para ambientes cerrados α � 3). Prx es la potencia recibida en la posición x, d es la distancia del objeto a la fuente y d0 es una distancia de referencia. También se puede tener en cuenta la atenuación causada por obstáculos (paredes, objetos) Prx (d) = Prx (d0 ) − 10 · α · log � d d0 � − Nv � i=0 ni · w i (2.2) donde Nv representa la clase de obstáculo y ni la cantidad de obstáculos con wi dB de atenuación. En general este método es pobre para navegar un objeto en un ambiente cerrado, debido a la naturaleza de las ondas electromagnéticas en estos entornos (multipath, difracción, etc.) 2.3.2. Análisis de escenario Los métodos de fingerprint se basan en mediciones previas de los niveles reales de potencia para distintos puntos del espacio donde se desea navegar. La base de datos generada a partir de estas mediciones es usada para estimar la posición del objeto. Esto implica que todos los métodos de localización indoor por análisis de escenario se dividen en dos etapas. La primera (offline) consiste en recopilar datos y extraer features 2.3 Modelos estudiados 22 del terreno a navegar. En otras palabras, obtener información a priori. La segunda etapa (online) es la localización en sı́. Tomando las mediciones que correspondan según el método y teniendo disponible la información a priori se busca estimar la ubicación del objeto. 2.3.2.1. Método de los k vecinos más cercanos Consiste en tomar una medición de los M access point que haya disponibles y con esa información se genera un vector (espacio de la señal) cuyas componentes tienen la potencia de señal recibida de cada access point. Esta información puede estar basada en una única muestra o en un promedio de varias. Luego se buscan los k vecinos más cercanos a la medición (en la base de datos). Se usa la distancia euclı́dea en el espacio de la señal � �M � 1 � d(Z, Zi ) = ·� [RSSj (x, y) − RSSj (xi , yi )]2 M (2.3) j=1 donde d(Z, Zi ) define la distancia entre la posición de medición actual Z y la posición correspondiente a la medición a priori Zi . RSSj (x, y) es la medición actual y RSSj (xi , yi ) es el valor de señal del j-ésimo AP en la posición (xi , yi ). Por último, se toma como posición estimada al baricentro de los k vecinos más cercanos. X= �k j=1 1/d(Z, Zj ) �k · Xj j=1 1/d(Z, Zj ) (2.4) donde X1 , ...Xk son los vecinos más cercanos Si la densidad de puntos con que se arma la base de datos de mediciones no es grande, el enfoque de los k vecinos más cercanos no tiene buena performance [21] [14]. Esto refleja el comportamiento complejo del campo electromagnético en ambientes cerrados y en el caso de no disponer de una base de datos densa hay que abordar el problema desde otra perpectiva: el método de los k vecinos más cercanos propone como estimación de la posición al baricentro entre los k candidatos obtenidos, poniendo como hipótesis subyacente que un punto intermedio entre dos vectores del espacio de la señal corresponde a un punto intermedio entre dos puntos en el espacio fı́sico y esto no es consistente con los datos empı́ricos. 2.3.2.2. Modelo probabilı́stico El modelo probabilı́stico propone tomar un histograma de la potencia recibida en cada lugar, en vez de tomar un promedio de la potencia (como lo anteior) De esta forma se obtiene una información más completa de la dinámica de propagación y se pueden estimar mejor los comportamientos no-monótonos del campo. 2.3 Modelos estudiados 23 Para obtener P (X|Z), que es la probabilidad de estar en la posición X luego de haber hecho la medición Z, se mide P (Z|X) que es la probabilidad de obtener mediciones Z en la posición X. Aplicando la regla de Bayes se llega a P (X|Z) = P (Z|X) · P (X) P (Z) (2.5) donde P (X) es la probabilidad a priori de estar en una posición X y se puede usar para introducir información adicional al sistema. P (Z) no depende de la posición, se puede tratar como una constante normalizadora. Finalmente se aplica una función costo entre todas las posibles ubicaciones para obtener la estimación buscada. Al implementar este método, la P (X|Z) no tiene por qué ser una distribución univariada con lo cual se translada la complejidad de decidir la posición al subsistema que procese esta información. En la práctica, este método requiere una etapa de entrenamiento en la que se releva información sobre la distribución de potencia WiFi. Es necesario definir puntos en el espacio que se quiere navegar donde serán tomadas las mediciones. Una grilla puede ser una opción para esto. La ecuación 2.5 indica que el resultado del filtro bayesiano será una función densidad de probabilidad. Los puntos en los que se realice la etapa de entrenamiento serán el dominio de esta función densidad de probabilidad. Es por eso que la densidad de puntos requiere un análisis (ver sección 2.4.2). 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.7 P(RSSI) 0.6 0.5 0.4 0.3 0.2 0.1 0 −100 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 Figura 2.2: Histograma de potencia WiFi recibida para una posición Como resultado de la etapa de entrenamiento se obtiene una base de datos que contiene, para cada punto de la grilla un histograma de RSSI para cada AP visible en dicho punto. 2.4 Experimentos 24 Por ejemplo en la figura 2.2 se pueden observar los histogramas (P (Z)) obtenidos para un punto X. Es decir, P (Z|X) para 4 APs distintos. Una vez recolectados los datos de entrenamiento es posible tomar mediciones en el espacio medido y estimar la posición. Para esto se propone el siguiente algoritmo locate Algoritmo 1 locate Xi ← posiciones disponibles (i.e. puntos de la grilla) Ai ← access point en rango RSSI(Ai ) ← potencia recibida de cada AP en rango [dBm] score(Xi ) ← 0 for each Ai do for each Xi do score(Xi ) ← score(Xi ) + histogram(Xi , Ai )[RSSI(Ai )] end for end for Este algoritmo presenta para cada punto de la grilla (Xi ) un puntaje proporcional a la probabilidad de que la medición haya sido realizada en dicho punto. Para transmitir esta información a la etapa del sistema que procese los datos existen distintos enfoques: el más simple consiste en indicar como posición estimada aquella que haya recibido el mayor puntaje. Otra alternativa es informar los N puntos con mayor puntaje. No es una buena idea hacer operaciones con estos puntos, como por ejemplo calcular el baricentro, ya que al ser distribuciones multivariadas el resultado puede degradar la información que proveen los datos crudos. 2.4. Experimentos Durante el estudio de los métodos de localización por señales WiFi se relizaron algunas pruebas para evaluar los distintos métodos. Primero se simuló un sistema de localización WiFi basado en triangulación y medición de potencia recibida. Se usó un esquema parecido al propuesto por Anindya Et al. [21]: además de la potencia medida se tiene en cuenta información del mapa en que se navega. No se siguieron estudiando este tipo de técnicas basadas en una ley conocida de propagación del campo debido a su bajo desempeño en ambientes cerrados. Para más detalles sobre este experimento consultar el apéndice C Luego se realizaron una serie de mediciones con señales WiFi reales para realizar pruebas con métodos probabilı́sticos y abandonando la hipótesis de conocer la forma de propagación del campo. Esto parece acertado al comparar la distribución de campo sintetizada de acuerdo a una 2.4 Experimentos 25 ley conocida (figura C.3) con los datos obtenidos de forma experimental (figura 2.4): Si bien los resultados de la simulación son alentadores, no es realista considerar que el campo respeta una ley de propagación de acuerdo a la ecuación (2.1) 2.4.1. Dataset - Pruebas con métodos estadı́sticos Este experimento es fundamental para poder implementar y probar métodos estadı́sticos ya que es muy complicado modelar mediante simulaciones o datos sintetizados un escenario realista de mediciones WiFi. Para hacer esto serı́a necesario implementar técnicas de raytracing y tener una información muy detallada del espacio (medidas, materiales, etc.) 2.4.1.1. Objetivo Generar y tener disponible una base de datos tomada en un escenario real para poder realizar pruebas y comparaciones entre distintos algoritmos y métodos. 2.4.1.2. Preparación El experimento se llevó a cabo en el gimnasio de la Facultad de Ingenierı́a de la Universidad de Buenos Aires (FIUBA). Se trabajó con una grilla de 5x10 unidades de 80cm (x ∈ [0 . . . 5], y ∈ [0 . . . 10]). Fuera de la grilla (a ∼ 1m en cada diagonal) se colocaron cuatro routers Linksys WRT54G configurados para funcionar bajo la norma IEEE 802.11G, canal 7. Todos sobre el piso. Figura 2.3: Sistema de coordenadas y ubicación de los routers durante el experimento 2.4 Experimentos 26 Como dispositivo de medición se usó el sistema de navegación implementado (ver capı́tulo 6) usando el programa locate cuyo objetivo es tomar una serie de mediciones de RSSI con la placa de red WiFi y armar un histograma de los datos obtenidos para cada router. Las mediciones se tomaron a una altura de ∼ 1m del piso. Cada medición tiene el siguiente aspecto. 8 9 1 0 5 2 1 8 8 5 9 , rusell , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2 ,2 ,15 ,56 ,119 ,6 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 200 [ −99 dBm . . . 0 dBm ] 9 7 5 5 7 7 7 7 4 1 4 , Helena , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,6 ,13 ,20 ,29 ,18 ,39 ,16 ,29 ,20 ,9 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 1 2 0 5 4 1 1 0 8 2 5 2 , laplace , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2 ,3 ,2 ,7 ,14 ,15 ,36 ,49 ,48 ,22 ,2 ,0 ,0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 1 3 2 6 9 4 4 5 1 0 7 8 , galileo , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,48 , 77 ,70 ,1 ,3 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,200 [ −99 dBm . . . 0 dBm ] Donde cada linea (párrafo para que entre en el informe) corresponde a un AP y contiene valores separados por comas indicando: la dirección MAC (en base 10) del AP, su nombre o ESSID, los 100 buckets del histograma indicando la frecuencia de aparición de cada medición donde el primero corresponde a -99dBm y el último a 0dBm. Pur último se encuentra la cantidad total de elementos en el histograma y una referencia de la escala utilizada. Se puede ver con más detalle la descripción de los formatos utilizados en el apéndice E 2.4.1.3. Procedimiento Una vez armado el banco de pruebas se comenzaron a tomar las mediciones barriendo la grilla. Por cada vértice se obtuvieron los histogramas correspondientes cuidando que el área de la grilla quede despejada de obstáculos durante la medición. Durante todas las meciciones el navegador mantuvo su orientación y al finalizar toda la grilla se tomaron algunas mediciones con la otientación cambiada para realizar comparaciones en este aspecto. 2.4 Experimentos 2.4.1.4. 27 Resultados obtenidos galileo [dBm] rusell [dBm] 10 10 9 9 8 8 6.1 −4 y −4 9. 47 12 3 −55.83 5 3 2 −55. 83 2 −42.728 7 1 0 6 1 4 −42 4 −52.9 2. 91 5 .728 7 y 6 7 −5 7 −4 −47. 4.15 0 −49.9 7 9 1 0 1 2 3 4 0 5 0 1 2 x laplace [dBm] 4 5 helena [dBm] 10 10 9 9 8 8 −56 .482 7 5 −50.9725 −60.445 −54.13 7 6 51354.13 −52.5 − 6 5 y −56.4825 9612 −53. 5 4 3. 9 61 2 4 3 −51 .44 − −46.3 48.918 8 975 −43.8 762 2 1 0 3 −5 y 3 x 0 1 2 3 x 4 −54.13 2 1 5 0 0 1 2 3 x Figura 2.4: Distribución espacial de la potencia 4 5 2.4 Experimentos 28 En la figura 2.4 se puede ver la distribución espacial de la potencia para cada router (rojo indica más potencia y azul menos potencia). Se puede ver que la señal de galileo es más fuerte cerca de (0,0) la de rusell cerca de (0,10), la de laplace cerca de (5,0) y la de helena cerca de (5,10). En este último dataset hubo un inconveniente durante el experimento y se perdieron los datos para y > 7 Estos gráficos fueron generados calculando para cada router la media del histograma obtenido en cada punto de la grilla. Si bién no contiene toda la información del histograma es útil para ver cualitativamente la distribución espacial de la señal. En la figura 2.5 se puede ver el histograma correspondiente a cada punto de la grilla con el valor medio de potencia para cada AP marcado con linea punteda. Las imágenes están acomodadas de acuerdo al mismo sistema de referencia que la figura 2.4, es decir, con el origen en el margen inferior izquierdo. 2.4 Experimentos 1 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.6 0.6 0.6 0.5 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.9 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.2 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.7 0.7 0.6 0.8 0.6 0.6 0.5 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.8 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0.8 0.7 0.6 0.6 P(RSSI) 0.7 0.6 0.5 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 1 rusell linksys laplace galileo <length: 0> FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 HPF0891F 0.9 0.7 P(RSSI) −80 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.5 −90 0.9 0.8 0.5 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.8 0.7 0.7 0.7 0.6 0.6 0.6 0.5 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.9 0.8 P(RSSI) P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 0.8 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.9 0.8 P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 uFi_D02202 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.9 0.8 P(RSSI) P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 0.8 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.9 0.8 P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.9 0.8 P(RSSI) P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 1 uFi_D02202 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo <length: 0> FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 0.8 0.7 0.6 0.6 P(RSSI) 0.7 0.6 P(RSSI) −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0.5 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.7 0.7 0.6 0.6 0.5 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.8 0.9 0.8 P(RSSI) P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.9 0.8 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 −100 0 0.9 0.8 P(RSSI) 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.5 0.4 0.4 0.4 0.4 0.4 0.3 0.3 0.3 0.3 0.3 0.3 0.2 0.2 0.2 0.2 0.2 0.1 0.1 0.1 0.1 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0 −100 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0 −100 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0 −100 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0 −100 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 rusell Helena laplace galileo <length: 0> FIUBA − BIBLIOTECA − 1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.5 0.4 0 −100 −80 0.8 0.6 0.5 −90 0.9 0.7 0.5 0 1 rusell Helena laplace galileo <length: 0> FIUBA − BIBLIOTECA − 1 0.6 0.5 −10 0.1 −80 0.7 0.5 −20 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.2 −90 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 uFi_D02202 −30 0.5 0.4 0 −100 −50 −40 RSSI [dBm] 0.8 0.7 0.6 0.5 −60 0.9 0.7 0.5 −70 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −80 0.1 −80 0.7 0.5 0 0.2 −90 1 rusell Helena laplace galileo <length: 0> FIUBA − BIBLIOTECA − 1 −10 0.5 0.4 −70 −90 0.8 0.4 −80 −20 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.4 −90 −30 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.4 0 −100 −50 −40 RSSI [dBm] 0.1 −80 0.9 0.5 −60 0.2 −90 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 2 FIUBA − BIBLIOTECA − 1 HPF0891F uFi_D02202 0.8 0.7 P(RSSI) −70 0.9 0.6 0.5 −80 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.7 0.5 −90 0 −100 P(RSSI) −80 0 −100 P(RSSI) −90 0 −100 −70 0.5 0.4 0 −100 −80 0.8 0.7 0.6 0.5 −90 0.9 0.7 0.5 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −10 0.1 −80 0.7 0.5 −20 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.2 −90 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 −30 0.5 0.4 0 −100 −50 −40 RSSI [dBm] 0.8 0.6 0.5 −60 0.9 0.7 0.5 −70 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −80 0.1 −80 0.7 0.5 0 0.2 −90 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 1 −10 0.5 0.4 0 −100 −90 0.8 0.7 0.6 0.5 −20 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.7 0.5 −30 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −50 −40 RSSI [dBm] 0.1 −80 0.7 0.5 −60 0.2 −90 1 rusell Helena laplace galileo DlinkHall FIUBA − BIBLIOTECA − 1 uFi_D02202 −70 0.5 0.4 0 −100 −80 0.8 0.6 0.5 −90 0.9 0.7 0.5 0 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −10 0.1 −80 0.7 0.5 −20 rusell linksys laplace galileo DlinkHall FIUBA − BIBLIOTECA − 1 0.2 −90 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 −30 0.5 0.4 0 −100 −50 −40 RSSI [dBm] 0.8 0.7 0.6 0.5 −60 0.9 0.7 0.5 −70 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 0.6 0.5 −80 0.1 −80 0.7 0.5 0 0.2 −90 1 rusell Helena laplace galileo FIUBA − BIBLIOTECA − 1 −10 0.5 0.4 0.3 −90 −90 0.9 0.4 0 −100 −20 rusell linksys laplace galileo FIUBA − BIBLIOTECA − 1 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.5 −30 0.1 −80 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 −50 −40 RSSI [dBm] 0.2 −90 P(RSSI) −70 0 −100 P(RSSI) −80 0 −100 P(RSSI) −90 0 −100 −60 0.5 0.4 0 −100 −70 0.8 P(RSSI) 0.7 0.6 P(RSSI) 0.7 0.6 P(RSSI) 0.8 0.7 P(RSSI) 0.8 0.5 −80 0.9 0.6 0.5 0.8 0.9 0.7 0.5 −90 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.8 P(RSSI) P(RSSI) P(RSSI) 0.5 0.4 0.3 0.8 P(RSSI) 0.5 0.4 0.3 0.9 P(RSSI) 0.5 0.4 1 P(RSSI) 0.5 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.8 P(RSSI) 0.6 P(RSSI) 0.6 P(RSSI) 0.7 P(RSSI) 0.7 0.5 0.8 0.9 0.7 0 −100 P(RSSI) 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.7 0.9 P(RSSI) 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.7 1 P(RSSI) 1 rusell laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 0.7 0 −100 P(RSSI) 1 rusell <length: 0> laplace galileo FIUBA − BIBLIOTECA − 1 0.9 0.8 P(RSSI) P(RSSI) 0.9 P(RSSI) 29 0.2 0.1 −90 −80 −70 −60 −50 −40 RSSI [dBm] −30 −20 −10 0 0 −100 −90 −80 −70 −60 −50 −40 RSSI [dBm] Figura 2.5: Histogramas de potencia WiFi medidos en cada punto de la grilla −30 −20 −10 0 2.4 Experimentos 2.4.2. 30 Caracterización del fingerprint Durante el desarrollo del algoritmo de localización WiFi fue necesario usar varios parámetros. Es razonable hacer una evaluación de estos parámetros para justificar la elección de cada uno. Más teniendo en cuenta que algunos de ellos tienen influencia directa en el costo del sistema. En este experimento se usa la base de datos de mediciones presentada en 2.4.1. 2.4.2.1. Objetivo Determinar el impacto/influencia de los siguientes factores en la calidad de la medición WiFi Mediciones online: es la cantidad de mediciones que se toman para obtener la localización. Es decir, cuántas veces se mide la potencia de todos los AP disponibles antes de estimar la posición. Cantidad de APs tomados en cuenta para la estimación. Varianza de ruido aditivo a la medición WiFi Mediciones offline: es la cantidad de mediciones que se toman para armar el histograma en la etapa de entrenamiento. Densidad de la grilla: indica la cantidad de mediciones por unidad de superficie para armar la base de datos. Los dos últimos ı́tems son difı́ciles de probar con las mediciones obtenidas en 2.4.1, principalmente por el tamaño reducido de la grilla. Para evaluar estos parámetros se realizó una simulación en la que se sintetizan todos los datos necesarios. 2.4.2.2. Preparación Se modificó la aplicación locate para que acepte como parámetros los ı́tems que se quieren caracterizar (cantidad de mediciones, densidad de histograma, granularidad de la grilla y cantidad de AP) y para que tome las mediciones WiFi de un archivo de texto en lugar de obtenerlas de la placa de red. locate presenta como resultado la posición de la grilla con mayor probabilidad a posteriori. 2.4 Experimentos 31 Figura 2.6: Camino obtenido a partir de locate vs ground truth, usando 4 routers Luego se generó un script MATLAB que corre una simulación de montecarlo probando cada uno de estos parámetros por separado: Se crea un camino aleatorio dentro de la grilla en la que está definido el dataset. Una vez generado el camino se crea un archivo con las mediciones WiFi correspondientes a ese camino, es decir, se toma del histograma de cada punto del camino el valor medio y se lo contamina con ruido. El objetivo de esto es recrear una medición real en el escenario en que fue tomado el dataset. 2.4 Experimentos 32 Figura 2.7: Camino obtenido a partir de locate vs ground truth, usando 2 routers En el caso de los últimos dos ı́tems a probar, fue necesario crear un conjunto de utilidades que presenten como resultado la base de datos (mediciones offline, de entrenamiento) que se hubiera medido en un escenario ficticio. De esta manera se pueden hacer experimentos en una grilla arbirariamente grande, usando cualquier cantidad de routers. Esto es mucho más flexible que el dataset real, pero hay que interpretarlo con cuidado ya que la dispersión y el comportamiento del campo WiFi en este caso se hace mediante una ley conocida, en contraposición con la hipótesis de trabajo del comportamiento complejo del campo. Los resultados de esta simulación son valiosos y tienen sentido solamente si se los analiza con cuidado y a la par de los experimentos realizados con el dataset real. 2.4.2.3. Procedimiento El desarrollo del experimento consiste en una serie de corridas de locate (usando el dataset con datos reales y luego el simulado) con todos los parámetros fijos salvo el que se está evaluando (este último parámetro va recorriendo todo el rango que se quiera evaluar a lo largo del experimento) y se calcula el error cuadrático medio entre el resultado de locate y el camino original. Esto se repite para todos los parámetros que se quieren evaluar. 2.4 Experimentos 2.4.2.4. 33 Resultados obtenidos (usando el dataset real) En las figuras 2.6 y 2.7 se pueden ver las comparaciones entre el camino generado aleatoriamente y el camino estimado usando locate, para una realización en particular. Se marcan con etiquetas verdes los puntos del gráfico donde coinciden los dos caminos. Cuando no coinciden se marca con etiqueta azul el camino verdadero y en rojo el estimado. Es interesante observar cómo es modificado el camino estimado por los errores, teniendo en cuenta el comportamiento no monótono del campo de potencia respecto al espacio. Es razonable que un pequeño error en la medición tenga un impacto grande en la estimación considerando los resultados obtenidos en 2.4.1.4 A continuación se presentan los resultados del experimento. Se grafica el error cuadrático de la estimación (en metros) en función del parámetro a evaluar. En azul se presenta la media y en trazo rojo punteado la banda de ± 2 desvı́os. Tanto la media como el desvı́o estándar son el resultado de 30 corridas de locate por cada valor del parámetro bajo observación. Figura 2.8: Error vs routers utilizados En la figura 2.8 se puede observar como decrece el error a medida que se usan más APs para decidir la posición. El resultado es razonable y sugiere que tiene sentido tener un dataset con diversidad de AP pero hasta cierto punto. Es necesario realizar mediciones con más que 4 routers para poder realizar afirmaciones en este aspecto. 2.4 Experimentos 34 Figura 2.9: Error vs mediciones tomadas En la figura 2.9 se puede observar que tomar más de 5 mediciones para decidir la ubicación no presenta grandes ventajas. Esto es importante porque es uno de los factores que determina la frecuencia del lazo que va a tener el sistema de mediciones WiFi. Figura 2.10: Error vs varianza de ruido Por último en la figura 2.10 se puede observar como incrementa el error de estimación al contaminar las mediciones con ruido blanco gaussiano. El eje horizontal de este gráfico indica la varianza del ruido en dBm. 2.4 Experimentos 2.4.2.5. 35 Resultados obtenidos (usando el dataset simulado) A continuación se presentan los resultados del experimento usando el dataset simulado. Se grafica el error cuadrático de la estimación (en metros) en función del parámetro a evaluar. En azul se presenta la media y en trazo rojo punteado la banda de ± 2 desvı́os, también correspondientes a 30 corridas de locate Para la evaluación de los primeros tres parámetros se usan las mismas condiciones que en el dataset real. Es decir, mismo tamaño de grilla, misma cantidad de routers, misma ubicación de los routers, etc. Esto se hace ası́ para poder aceptar el modelo y luego extrapolar resultados en los casos que no se analizaron con el dataset real. Figura 2.11: Error vs routers utilizados En la figura 2.11 se puede observar como decrece el error a medida que se usan más APs para decidir la posición. El resultado es consistente con lo obtenido en la sección 2.4.2.4. 2.4 Experimentos 36 Figura 2.12: Error vs routers utilizados (extendido) En la figura 2.12 se puede observar otra corrida de la simulación, esta vez extendiendo la cantidad de routers. Esto no hubiera sido posible usando el dataset real y presenta un resultado interesante: tener disponibles más de 4 o 5 routers no mejora las mediciones en gran medida. Figura 2.13: Error vs mediciones tomadas En la figura 2.13 se puede observar que tomar muchas mediciones para decidir la ubicación no presenta grandes ventajas. Esto es importante porque es uno de los factores que determina la frecuencia del lazo que va a tener el sistema. Este resultado también se verifica en la sección 2.4.2.4 con el dataset real. 2.4 Experimentos 37 Figura 2.14: Error vs varianza de ruido Por último en la figura 2.14 se puede observar como incrementa el error de estimación al contaminar las mediciones con ruido blanco gaussiano. El eje horizontal de este gráfico indica la varianza del ruido en dBm. Nuevamente el gráfico verifica los resultados obtenidos en la sección 2.4.2.4. Quedan ahora por evaluar los últimos dos parámetros, para los cuales no era útil el dataset real. En la figura 2.15 se puede observar el error en función de la cantidad de muestras de entrenamiento tomadas para armar el histograma. Aparentemente no hay una mejora en la estimación a medida que se toman más muestras. Hay que analizar cuidadosamente este resultado, porque con el dataset simulado la dispersión de RSSI es gaussiana, generando una distribución univariada. De esta forma, una sola muestra de entrenamiento podrı́a dar una buena idea de la distribución. En un caso real donde la distribución tenga más de un máximo local puede tomar importancia la cantidad de muestras en el histograma. El impacto de esto en la práctica serı́a una reducción del tiempo de entrenamiento pero no provoca cambios significativos en el sistema durante la etapa de estimación 2.4 Experimentos 38 3.5 3 Error RMS 2.5 2 1.5 1 0.5 0 5 10 15 mediciones offline 20 25 Figura 2.15: Error vs cantidad de mediciones offline Por último se puede observar en la figura 2.16 como incrementa el error a medida que baja la densidad de puntos en la base de datos. El eje horizontal de la figura indica el factor de downsample con el que se usó la grilla. Un factor de downsample n significa que se usaron solamente como información a priori la base de datos de los puntos de la forma (x · n, y · n). 12 10 Error RMS 8 6 4 2 0 1 1.2 1.4 1.6 1.8 2 2.2 1/densidad de grilla 2.4 2.6 2.8 3 Figura 2.16: Error vs densidad de la grilla Es interesante analizar este resultado teniendo en cuenta que en una implementación real del sistema no es necesario respetar una grilla, es decir, el filtro bayesiano no requiere un dominio perı́odico para poder realizar la estimación. Simplemente es necesario asociar la información a priori con una ubicación en el espacio. Este esquema off-the-grid se puede aprovechar para no tomar mediciones innecesarias 2.4 Experimentos 39 durante la etapa de entrenamiento aceptando un incremento del error en ciertas zonas1 a costa de tomar menos mediciones. También se puede usar para ir completando la base de datos de información de entrenamiento a medida que se navega. Partiendo de un set de información a priori mı́nimo y suficiente para navegar, se pueden ir creando nuevos puntos en la grilla tomando mediciones WiFi y ubicándolos en los momentos que el navegador tenga una buena covarianza en la estimación de la posición. Esto presenta ciertas caracterı́sticas de bootstrapping que son estudiadas en detalle en los problemas de SLAM. 1 quizá espacios grandes o con disponibilidad de otros sistemas de navegación como GNSS Capı́tulo 3 Sistema de navegación inercial INS Quia parvus error in principio magnus est in fine. Aristóteles El sistema de navegación inercial se encarga de calcular la posición, velocidad y orientación (en la jerga, actitud) del vehı́culo a partir de las mediciones inerciales de los giróscopos y acelerómetros. Giróscopos ωb Posición Acelerómetros fb INS Velocidad Actitud Aceleración gw pw vw qw b gravitatoria Figura 3.1: Sistema de Navegación Inercial Su principio de funcionamiento se basa en integrar las mediciones inerciales obtenidas de la IMU: integrando la velocidad angular medida por el giróscopo se obtiene la (diferencia en) orientación respecto al momento inicial. Conociendo la orientación y la fuerza especı́fica (medición del acelerómetro) se puede calcular la aceleración lineal. Al integrar dos veces la aceleración lineal se obtiene la (diferencia en) posición respecto al momento inicial. La principal dificultad que se encuentra al implementar un INS es el drift o corrimiento que se genera a medida que pasa el tiempo: tanto la posición como la actitud son el resultado 40 3.1 Sistema de referencia 41 de integrar mediciones. Si estas mediciones están contaminadas con ruido (en menor o mayor medida siempre va a suceder esto) en el resultado se obtiene un error no acotado en el tiempo. 3.1. Sistema de referencia Teniendo en cuenta las caracterı́sticas de la aplicación, se usa un sistema de referencia cartesiano cuyo origen es arbitrario pero está siempre asociado a un mapa o información a priori que se tiene sobre el terreno. No tiene sentido usar sistemas de referencia globales ya que el entorno de trabajo siempre se reduce a un edificio o predio en particular. Se define una terna w fija en algún punto del terreno que se desea navegar. Todas las coordenadas de navegación quedan definidas a partir de esta terna. También se define una terna b fija al objeto que se quiere navegar. La diferencia entre las dos ternas en el momento inicial queda definida por las condiciones iniciales y un cuaternión representa la rotación de la terna w a la terna b. Todas las mediciones inerciales se obtienen en terna b ya que los instrumentos están fijos al vehı́culo. Esto es conocido como Strap Down Navigation. Este esquema requiere mayor poder de cómputo que su contraparte, Gimballed Navigation donde los sensores quedan orientados según la terna w gracias a una plataforma estabilizadora. Sin embargo este último método presenta desventajas respecto a la complejidad mecánica del sistema. Existen varias técnicas para cambiar la terna en que está expresado un vector. En este trabajo se usan cuaterniones y matrices de cosenos directores, explicados en los apéndices A.1 y A.2 respectivamente. zw zb yb xb yw xw Figura 3.2: Sistemas de referencia 3.2 Ecuaciones del INS 3.2. 42 Ecuaciones del INS El sistema a propagar se define a partir de las siguientes ecuaciones [10] ṗ = v v̇ = q ◦ q̇ = � fb 1 ·q◦ 2 0 � � (3.1) ◦ q∗ + g ωb 0 (3.2) � (3.3) Con condiciones iniciales Donde p = R3 � x y z �T p 0 , v 0 , q0 ∈ R3 es la posición del objeto a navegar, v = � vx vy vz �T ∈ es su velocidad y q es un cuaternión que define la orientación del objeto respecto al sistema de referencia. g ∈ R3 es la fuerza de gravedad que se considera constante en un entorno de navegación indoor, f b ∈ R3 es la fuerza especı́fica medida por el acelerómetro y ω b ∈ R3 es la velocidad angular medida por el giróscopo. La fuerza especı́fica es una combinación de la aceleración inercial y gravitacional. Es por eso que el navegador también tiene que tener en cuenta la fuerza de gravedad [25] (cáp 5). ẋ indica la derivada temporal de x, ◦ el producto entre cuaterniones � y�∗ su conjugado. � � b fb ω Con ∈ R4 y ∈ R4 se representan dos cuaterniones cuyas primeras tres 0 0 componentes son el vector de mediciones f b y el vector de mediciones ω b respectivamente. La última componente es un cero en los dos casos. Se puede ver que las ecuaciones están definidas en terna w. En la ecuación (3.2) se usa el producto entre cuaterniones para rotar la medición f b de la terna b a la terna w y entonces poder sumarle g que está definida en w. La ecuación (3.3) también cambia de terna la medición ω b usando el cuaternión q. Para detalles sobre la definición de cuaterniones y sus operaciones consultar el apéndice A.1 3.3. Errores de los sensores Siempre que se mida una cantidad ésta estará acompañada de ruido, o una señal no deseada. Esto es inherente a la acción de medir, y los sensores basados en sistemas microelectro-mecánicos (MEMS) no están exceptuados. Haciendo una comparativa histórica los sensores MEMS representan un avance extraordinario en cuanto a costo, tamaño y consumo energético respecto a sus antecesores. Sin 3.3 Errores de los sensores 43 embargo para usarlos es necesario tener una idea clara de cómo funcionan y cuál es el origen de los errores de medición. Actualmente los sensores MEMS consisten en una estructura mecáncia construida en silicio o cuarzo con un tamaño del orden de las decenas o centenas de micrometros (dependiendo el sensor y la tecnologı́a). Esta microarquitectura se logra usando las mismas técnicas de fotolitografı́a ya conocidas y dominadas en la industria de los circuitos integrados. El funcionamiento de los sensores se basa en la deformación mecánica que sufre la estructura al ser sometida a una aceleración lineal o una rotación. Distintas estructuras definen distintos sensores: un giróscopo va a requerir una estructura que sea sensible (i.e. que se deforme) ante rotaciones pero que no sufra modificaciones ante una aceleración lineal. Contrariamente un acelerómetro tiene que ser sensible a la aceleración lineal y no a rotaciones. Lo más común es medir la deformación de la estructura en términos de capacidad eléctrica. Si pensamos en un capacitor de placas planas paralelas, su capacidad estará definida de acuerdo a la distancia de las placas, entre otros factores. Si conocemos el capacitor podemos inferir la distancia entre las placas a partir de su capacidad. Las estructuras de los sensores MEMS están armadas para que la deformación mecánica que sufren impacte en la capacidad eléctrica entre dos nodos. Esta deformación es tan pequeña que es común tener que medir capacidades del orden de los atto Farad (1aF=10−18 F) Es por eso que pequeñas diferencias en la construcción pueden tener un impacto enorme en la medición final. Las fuentes de errores sistemáticos más comunes en sensores MEMS son [27] Sesgo Factor de escala Sesgo dependiente de g (para giróscopos) No ortogonalidad entre ejes Se propone un modelo de error para los sensores inerciales en el que se separan las fuentes de error: por un lado los errores inherentes a la construcción (desapareamiento de partes, asimetrı́as, etc) y por otro lado los errores dependientes de las condiciones de operación. Los errores del primer grupo son fijos para un sensor dado, no cambian a lo largo del tiempo pero sı́ cambian de sensor a sensor. 3.4 Ensayo de los sensores 44 Figura 3.3: Clasificación de errores comunes en sensores inerciales La IMU usada pasa por un proceso de caracterización en el que se estima el sesgo y factor de escala provinientes de la construcción. Esos valores, luego del experimento se asocian al sensor y todo el procesamiento posterior se realiza compensando estos errores. A continuación se presenta el modelo de error que se usa para caracterizar los sensores (offline) fˆb = (1 + sf ) · f b + bf + ηf ωˆb = (1 + sw ) · ω b + bw + ηw (3.4) (3.5) fˆb y ωˆb son los valores medidos, f b y ω b los valores reales, con s se indica el factor de escala, con b el sesgo y con η ruido blanco. Una vez compensados los errores inherentes a la construcción, el sesgo y factor de escala relativos a las condiciones de operación se tienen en cuenta como una variable de estado más en el sistema y se estiman durante el funcionamiento del mismo. A continuación se muestra la ecuación que define el modelo de error una vez ensayada la IMU, es decir, luego de haber compensado los errores inherentes a la construcción. f˜b = (1 + sof ) · fˆb + bof + ηfo o ω˜b = (1 + sow ) · ωˆb + bow + ηw (3.6) (3.7) f˜b y ω˜b son los valores medidos, fˆb y ωˆb los valores compensados, con s se indica el factor de escala, con b el sesgo y con η ruido blanco. El superı́ndice ’o’ indica que estos valores son estimados online. El error debido a la no ortogonalidad entre ejes no es tomado en cuenta en este trabajo ya que en sensores MEMS de bajo costo esta fuente de error es despreciable frente al sesgo y factor de escala [29] 3.4. Ensayo de los sensores Para estimar el sesgo y factor de escala de la IMU se propone hacer el siguiente experimento. 3.4 Ensayo de los sensores 45 Para el acelerómetro: se lo coloca en una plataforma alineada con los ejes del sensor, de tal forma que se mida la fuerza de gravedad en un eje. Luego se comienza a girar la plataforma de forma coaxial a otro de los ejes conociendo el ángulo de rotación y las mediciones del instrumento en todo momento. Por dificultades mecánicas a la hora de armar el experimento, es imposible ubicar el sensor en el plano de rotación. Esto trae aparejado un error que es necesario contemplar si se requiere una calibración final del instrumento. Figura 3.4: Rotación de la IMU durante la caracterización Como resultado se va a obtener una medida de la fuerza de gravedad modulada por el ángulo de giro, entre los dos ejes del acelerómetro en el plano de giro. Se repite la experiencia cambiando la posición del acelerómetro para obtener información del eje que estaba ortogonal al giro de la plataforma. Conociendo la fuerza de gravedad es posible sintetizar una tira de datos equivalente a la medida, pero sin errores de sesgo ni factor de escala. A continuación se plantea un problema de mı́nimos cuadrados en el que se busca adaptar la tira de datos medida a la tira de datos sintetizada mediante el modelo propuesto (error de sesgo y factor de escala) Se parte de: y = Ax + η Donde yT = � AM 1 AM 2 ··· (3.8) AM N � es el vector de N mediciones del acelecómetro en el experimento, 3.4 Ensayo de los sensores 46 T A = � Ai1 Ai2 · · · 1 ··· 1 � AiN 1 tiene una columna con los N valores de la tira de datos sintetizada y una columna de N unos, x= � 1 + sf bf � es el vector con los parámetros que se quieren estimar (sf es el factor de escala y bf es el sesgo). Por último ηT = � η1 η2 · · · ηN tiene el ruido gaussiano que afecta a la medición. � El estimador de mı́nimos cuadrados (LS) de x es x̂ = (AT A)−1 AT y. La espectación E[x̂] del estimador es igual a la espectación del vector E[x] con lo cual el estimador es insesgado. E[x̂] = E[(AT A)−1 AT y] = E[(AT A)−1 AT (Ax + η)] = E[(AT A)−1 AT Ax + (AT A)−1 AT η)] = E[x] + (AT A)−1 AT E[η] = E[x] La matriz de covarianza del estimador Σx̂ Σx̂ = E[|x̂ − E[x̂]|2 ] = E[|x̂ − E[x]|2 ] = E[(x̂ − E[x])(x̂ − E[x])T ] = E[((AT A)−1 AT (Ax + η) − E[x])((AT A)−1 AT (Ax + η) − E[x])T ] = E[(x + (AT A)−1 AT η − E[x])(x + (AT A)−1 AT η − E[x])T ] = E[xxT ] − E[x]E[x]T + (AT A)−1 AT ση2 A(AT A)−1 Para poder continuar con el cálculo es necesario aclarar que el sesgo y el factor de escala que se buscan están ligados a un sensor en particular por cuestiones constructivas y no cambian a lo largo del tiempo (i.e. se comportan como un número desconocido y no como una 3.4 Ensayo de los sensores 47 variable aleatoria.). Por lo tanto podemos tratarlos como números al calcular sus mementos de 1er y 2do orden. Hipótesis 1: Tanto el factor de escala como el sesgo inherentes a la construcción son números no conocidos. E[x] = � 1 + E[sf ] E[bf ] � = � 1 0 � var(sf ) = 0 var(bf ) = 0 Teniendo en cuenta la hipótesis 1 se puede seguir calculando Σx̂ Σx̂ = E[xxT ] − E[x]E[x]T + (AT A)−1 AT ση2 A(AT A)−1 � � � � 1 + 2sf + s2f bf + bf sf 1 0 − = E + ση2 (AT A)−1 bf + bf s f b2f 0 0 � � � � 1 + 2E[sf ] + var(sf ) E[bf ] + E[bf sf ] 1 0 = − + ση2 (AT A)−1 E[bf ] + E[bf sf ] var(bf ) 0 0 � � � � 1 0 1 0 = − + ση2 (AT A)−1 0 0 0 0 = ση2 (AT A)−1 = N ση2 �N i2 k=1 Ak −( �N i 2 k=1 Ak ) � − N �N i k=1 Ak � � i − N A k=1 k �N i2 k=1 Ak (3.9) Por la forma en que se realiza el experimento se puede calcular N � Aik = g k=1 N � k=1 Aik 2 = g2 N � N sin k=1 N � � k2π k2π =g cos =0 N N k=1 N sin2 k=1 � k2π k2π = g2 cos2 N N k=1 � � (2(2πN + π)) 21 −1 (2π) = g 2N − sin sin +1 4 N N (2N − 1 + 1) = g2 4 N = g2 2 Ahora se puede escribir Σx̂ como Σx̂ = ση2 � 2 N g2 0 0 1 N � (3.10) 3.4 Ensayo de los sensores 48 De esta forma se puede definir la cantidad de muestras a tomar durante el experimento en función del ruido del instrumento. Es razonable cuestionarse qué impacto tiene en la caracterización una mala alineación de la plataforma giratoria, y analizando las condiciones del experimento se puede ver que es robusto en ese sentido: el error que pueda haber en el ángulo debido a una calibración manual del setup hace que las mediciones queden moduladas por una función cos(α), donde α es el ángulo formado entre la normal a la plataforma y el plano horizontal. Idealmente con la normal de la plataforma en el plano horizontal (α = 0) y cos(α) = 1. Un error en el ángulo (δ) tiene como consecuencia un error en las mediciones dado por cos(α + δ) = α=0 cos(α) · cos(δ) − sin(α) · sin(δ) = cos(δ) Mientras δ quede acotado por unos pocos grados la modulación en los datos obtenidos no es apreciable. De todas formas, el error que se cometa en este ensayo terminará siendo estimado por el sistema como parte del error debido a las condiciones de operación. Se pueden encontrar los detalles del cálculo en el apéndice D Para ensayar el giróscopo se realiza un experimento similar: en lugar de modular la fuerza de gravedad con la orientación de la IMU, se gira la plataforma a velocidades constantes y conocidas. Luego se hace un ajuste por cuadrados mı́nimos entre los datos medidos y los generados por el modelo de error. Al no tener un equivalente de g en términos de velocidad angular para usar como patrón, el ensayo del giróscopo es un poco más complejo en cuanto a las herramientas involucradas, pero en escencia es el mismo experimento. Es necesaria una plataforma capaz de girar a velocidad controlada y conocida. Luego de tomar mediciones a distintas velocidades (en este experimento las distintas velocidades equivalen a los distintos ángulos en el caso del acelerómetro) se plantea un problema de optimización por cuadrados mı́nimos similar al caso del acelerómetro: conociendo las velocidades angulares usadas se puede sintetizar una tira de datos correspondiente a las lecturas deseadas, es decir, velocidad angular sin contaminación de ruido. Una vez hecho esto se proyectan las mediciones obtenidas (i.e. las lecturas del giróscopo para cada velocidad angular) en el espacio de la tira de datos generada. Usando el modelo de error propuesto obtendremos el sesgo y factor de escala del giróscopo. Hasta la ecuación (3.9) son válidas las cuentas para el ensayo del giróscopo. Lo único que cambia es la forma en que se obtienen los datos. Capı́tulo 4 Plataforma de vuelo If birds can glide for long periods of time, then. . . why can’t I. Orville Wright El término UAV se usa para referirse a un vehı́culo aéreo no tripulado. Un caso particular de esto es el quadrotor. Un quadrotor es un dispositivo de aterrizaje y despegue vertical (VTOL) capaz de volar gracias a cuatro hélices que le dan el sustento necesario para despegar del piso. Se diferencia de un helicóptero en la manera de ser controlado: en el quadrotor no se controla el ángulo de ataque de las hélices. Estas tienen paso fijo y el control se logra actuando sobre la velocidad angular de los motores. Si bien existen quadrotores tripulados y para transporte de cargas grandes este trabajo se enfoca en los no tripulados y con una carga útil -payload- de pocos kg. Figura 4.1: Modelo 3D de un quadrotor 4.1. ¿Por qué un quadrotor? La elección se basa en la simplicidad del quadrotor en varios aspectos. En primer lugar desde el punto de vista de la implementación mecánica un quadrotor es simple en el sentido 49 4.2 Descripción general 50 de que las únicas partes móviles que tiene son las hélices. Dado que estas están acopladas directamente a los ejes de los motores no es necesario implementar ningún tipo de mecanismo. Otra ventaja interesante del quadrotor en términos de simplicidad es la cancelación de torque total que se obtiene (ya que 2 motores giran hacia un lado y 2 hacia otro). Esto permite dejar de lado consideraciones respecto a la estabilización del dispositivo en el eje vertical. Y comparando el quadrotor con un vehı́culo volador de alas fijas tiene como ventaja el aterrizaje y despegue vertical, y la capacidad de volar en cualquier dirección o quedarse flotando en un punto fijo. Teniendo en cuenta que la aplicación involucra moverse en un entorno cerrado estas diferencias son importantes. Por último pero no menos importante, tener cuatro hélices dispuestas en dos ejes ortogonales permite controlar el quadrotor de una forma relativamente simple. En definitiva, el usar de un quadrotor presenta ciertas ventajas [11] respecto a otras aeronaves: Acople directo entre la hélice y el eje del motor (i.e. no necesita caja reductora, piezas de transmisión o engranajes) Hélices de paso fijo: en general son de una pieza y se evita el sistema de control de ángulo de ataque que tiene los helicópteros. Cuatro motores chicos en lugar de uno grande acumulan menos energı́a cinética aumentando la seguridad en caso de accidente. Bajo costo de mantenimiento respecto a helicópteros y aviones. Los quadrotores se pueden usar en tareas de búsqueda y rescate, para explorar terrenos peligrosos (con elementos explosivos, o altos niveles de radiación). Debido a su capacidad de permanecer flotando en un punto fijo se pueden usar también para inspección de calidad y mantenimiento de estructuras. 4.2. Descripción general Caracterı́sticas del quadrotor: Peso total entre 1kg y 2kg. Esto se distribuye entre el sistema en sı́ y el payload o carga útil que lleva el vehı́culo (por ejemplo, una cámara, sensores) Autonomı́a de vuelo entre 10 y 20 minutos. Para definir la autonomı́a siempre existe una relación de compromiso entre la capacidad de la baterı́a o fuente de poder y el tamaño total del vehı́culo. Capacidad de cómputo suficiente para poder resolver los algoritmos de navegación. 4.2 Descripción general 51 Conectividad inalámbrica para transmitir telemetrı́a y recibir comandos de configuración. 4.2.1. Principio de funcionamiento Para controlar el quadrotor es necesario generar incrementos en la potencia entregada a cada motor. Se asume que la plataforma está volando estable con una potencia de motores PWMQ (en los cuatro motores). Hay tres posibilidades de giro de la plataforma: roll, pitch y yaw. Roll y pitch son giros en torno a los ejes horizontales del quadrotor. Una inclinación en cualquiera de estos ejes produce un movimiento lineal cuya velocidad depende del ángulo. Esto se denomina ángulo de ataque y es la forma en que se translada el vehı́culo. Yaw es un giro respecto a la vertical y no produce movimiento lineal. Para modificar el pitch y el roll es necesario incrementar la potencia de un motor. De esta manera la plataforma se inclina en torno al eje correspondiente. En cambio para modificar el yaw se incrementa en igual medida la potencia de dos motores del mismo eje. Esto genera un torque resultante que hace que la plataforma gire. Recordar que dos motores giran para un lado y dos para el otro. Por último, se puede lograr también cambiar la altura del quadrotor variando la potencia de los cuatro motores en igual medida. De esta forma se puede hacer ascender o descender la plataforma. 4.2 Descripción general 4.2.2. 52 Diagrama en bloques Figura 4.2: Diagrama en bloques de un quadrotor Componentes principales del quadrotor: Cuatro motores eléctricos brushless con sus respectivo control electrónico de velocidad (ESC) Cuatro hélices (dos dextrógiras y dos levógiras) Computadora de abrodo (OBC) IMU compuesta por un giróscopo de 3 ejes y un acelerómetro de 3 ejes Adaptador WiFi IEEE 802.11 usado para medir potencia de señal WiFi y para comunicación con tierra Baterı́a de Li-Po Cuadro (estructura mecánica que soporta el resto de los componentes) Capı́tulo 5 Filtro de Kalman extendido - EKF Caminante, no hay camino, se hace camino al andar. Antonio Machado El filtro de Kalman [18] es un algoritmo recursivo que estima el estado de un sistema lineal combinando información obtenida de sensores con información a priori acerca de la dinámica del sistema. Siempre que se mida una cantidad fı́sica, esta estará contaminada por ruido. En el filtro de Kalman esto se conoce como ruido de medición. De la misma forma, siempre que se modele un sistema existe una diferencia entre el modelo y el sistema real. Esto también se considera un ruido y en el filtro de Kalman se conoce como ruido de proceso. Se dice que el algoritmo es recursivo porque en cada paso de cálculo se usa solamente la información del paso anterior y no toda la información previa. Esto representa una ventaja importante respecto a otros métodos en cuanto a la potencia de cómputo requerida para implementar el filtro. Uno de los principales inventores del filtro y la teorı́a detrás fue Rudolf E Kálmán en la década de los 60’, de ahı́ el nombre del filtro. Su principio de funcionamiento es simple en términos cualitativos: el filtro evalúa la calidad de la medición proveniente de los sensores y la compara con la calidad de la estimación obtenida a partir de la información a priori del sistema. El resultado del filtro será una combinación ponderada de estas dos fuentes de información de forma tal que el error se minimice en términos estadı́sticos. Ambas calidades se calculan en base a los parámetros estocásticos de cada proceso. El filtro de Kalman es el estimador óptimo en términos de error cuadático medio (MSE) para un sistema lineal con ruido blanco gaussiano. Dada la naturaleza no lineal del sistema que se quiere resolver hay que modificar el filtro 53 5.1 Ecuaciones 54 en algunos aspectos para que sea un buen estimador aún cuando el sistema no es lineal. Para esto se define el filtro de Kalman extendido (EKF) [3] que lo que hace es linealizar el sistema tomando como punto de operación (bias, centro de la linealización) el estado estimado del sistema. En resumen, el filtro de Kalman toma distintas fuentes de información y las combina para obtener una estimación del sistema mejor que la que se podrı́a calcular con cada una de estas fuentes por separado: Modelo del sistema (información a priori) Mediciones de los sensores y errores de los mismos Descripción estadı́stica de los ruidos (de proceso y medición) Información sobre las condiciones iniciales del sistema En el caso del filtro de Kalman esta estimación es óptima siempre que el sistema sea lineal y los ruidos AWGN. Para el Filtro de Kalman Extendido la estimación no es óptima debido a la linealización del sistema. 5.1. Ecuaciones El filtro de Kalman Extendido se define a partir de las siguientes ecuaciones [3] Xk = f (Xk−1 ) + G(Xk−1 ) · wk−1 zk = h(Xk ) + vk (5.1) (5.2) Con ruido de proceso y ruido de medición wk ∼ N (0, Qk ) vk ∼ N (0, Rk ) La función f permite propagar el sistema (i.e. obtener el estado actual a partir del estado anterior del sistema) y la función h estima las mediciones que se obtendrı́an. Ambas usando la información a priori del sistema: el modelo dinámico. El filtro combina dos instancias de cálculo en su funcionamiento: una etapa de predicción, donde se modifica el estado de acuerdo a la información a priori. Y una etapa de actualización donde se modifica el estado incorporando la información de las mediciones externas (i.e. sensores) 5.1 Ecuaciones 55 La predicción se realiza en cada paso del filtrado, pero la actualización solamente se hace cuando hay información de mediciones. Dependiendo del sistema puede haber más de una predicción por cada actualización. Predicción X̂k|k−1 = f (X̂k−1|k−1 ) � Pk|k−1 = Fk−1 Pk−1|k−1 Fk−1 + Gk−1 Qk−1 G� k−1 (5.3) (5.4) Actualización ỹk = zk − h(X̂k|k−1 ) (5.5) Sk = Hk Pk|k−1 Hk� + Rk (5.6) Kk = Pk|k−1 Hk� Sk−1 (5.7) X̂k|k = X̂k|k−1 + Kk ỹk (5.8) Pk|k = (I − Kk Hk )Pk|k−1 (5.9) Se entiende X̂k|k−1 como la estimación del estado X en el instante k conociendo el estado del sistema en el instante k − 1. Pk es la matriz de covarianza del error de estimación en el instante k. De alguna forma es una medida de la calidad de la estimación para determinado instante. Fk y Hk son los jacobianos de las funciones f y h respectivamente. Representan la linealización de la dinámica para el instante k. Fk−1 = Hk = � ∂f �� ∂X �X̂k−1|k−1 � ∂h �� ∂X �X̂k|k−1 ỹk es la innovación calculada a partir de la medición externa zk . Sk es la covarianza de la innovación. La innovación es la información que obtiene el sistema al tomar una medición y que no pudo ser estimada con h. Si el sistema está bien caracterizado y el ruido es AWGN, entonces las innovaciones son otrogonales entre sı́ (i.e. la secuencia temporal de innovaciones es un proceso de ruido blanco). Por último, Kk es la ganancia de Kalman. Esta matriz va a determinar cuanta importancia se le da al modelo y cuanta importancia se le da a la medición para calcular la estimación del estado a posteriori X̂k|k 5.2 Modelo dinámico del sistema 5.2. 56 Modelo dinámico del sistema Como se presentó en el capı́tulo 5, el filtro de Kalman extendido se basa en la linealización del modelo dinámico involucrado. La performance del filtro va a depender de cuanto se parezca la función linealizada a la función original. Es por eso que resulta beneficionso usar el modelo del error en lugar del modelo del sistema directamente. Si asumimos que el algoritmo del INS hace su trabajo correctamente, entonces el error en las variables de navegación deberı́an ser cercanas a 0 (o por lo menos más parecidas a 0 que las variables de navegación en sı́). Tomando esta hipótesis de trabajo que es razonable y se verifica en los experimentos, tiene sentido que el EKF trabaje con la dinámica del error. El vector de estado del sistema es Xk δp δv Xk = φ b f bw Donde δp ∈ R3 es el error en la posición, es decir, x̂ − x donde x es la posición real y x̂ la posición estimada por el INS. δv ∈ R3 es el error en la velocidad, es decir, v̂ − v donde v es la velocidad real y v̂ la velocidad estimada por el INS. El error en la matriz de cambio de base que permite transformar la terna w en terna b se define como φ ∈ R3 tal que C = Ĉ · (1 + S(φ)) donde C es la matriz de cambio de base real y Ĉ es la matriz de cambio de base calculada a partir del cuaternión q del INS. bf ∈ R3 y bw ∈ R3 son los sesgos de los acelerómetros y de los giróscopos respectivamente. A continuación se presentan las ecuaciones que definen la dinámica del error: δ˙p = δv δ˙v = Ĉ · S(f ) · φ + C · δf + C · bf φ̇ = S(w) · φ − δw − bw b˙f = 0 b˙w = 0 5.3 Modelo del observador 57 Y la función f que describe la evolución temporal del sistema δp k + h · δvk δvk + h · [Ĉk · S(fk ) · φk + Ck · bf ] k f = φk + h · [S(wk ) · φ − bwk ] bf k bwk (5.10) La matriz G se usa para acomodar (shape) el ruido gaussiano w a la dinámica del sistema. 0 0 0 h · Ck G = −I · h 0 0 0 0 0 � � δwk wk = δ fk (5.11) Y por último el jacobiano de f para usar en el filtro de Kalman extendido. I h·I 0 ∂f = 0 ∂X 0 0 5.3. I 0 0 0 0 h · Ĉk · S(fˆk ) h · Ck I + h · S(ŵ) 0 0 0 I 0 0 0 0 −I 0 I (5.12) Modelo del observador El algoritmo de localización por WiFi obtiene como resultado una función densidad de probabilidad cuyo dominio es la grilla, o el conjunto de puntos definidos previamente a las mediciones, sobre los cuales se tomaron las muestras de entrenamiento. Este resultado a diferencia de una predición de posición hace posible implementar distintas estrategias para obtener la medición a partir de la f.d.p. La primera opción en términos de simplicidad es quedarse con la ubicación más probable de la f.d.p. Para armar esquemas más complejos de observador pueden combinarse los sigiuentes criterios Descartar posiciones que estén más lejos que cierta cantidad de desvı́os de la posición estimada. Para esto se puede usar la distancia euclı́dea o la distancia de mahalanobis. Esto permite reducir el dominio de posibilidades a una zona razonable de acuerdo al modelo inercial que se use. 5.3 Modelo del observador 58 Alimentar el filtro de Kalman con las k ubicaciones más probables, para k > 1. Asignando distinta covarianza a las mediciones en función de la probabilidad a posteriori que se haya obtenido como resultado del filtro bayesiano. 5.3.1. Ubicación más probable En caso de usar como medición externa la ubicación más probable obtenida de la localización WiFi, la función h se define como h(Xk ) = δp Quedando definido el jacobiano H H= de forma tal que H · Xk = � � I3x3 0 0 0 0 I3x3 � δp (5.13) δv � � � 0 0 0 0 · φ = δp b f bw En este caso la observación de x (la posición) se arma como x̂ − xw donde x̂ es la posición estimada por el INS y xw es la posición más probable estimada por el filtro bayesiano. Capı́tulo 6 Implementación Oigo y olvido. Veo y aprendo. Hago y entiendo. Confucio 6.1. Hardware En esta sección se describen todos los componentes de hardware utilizados en el trabajo. 6.1.1. IMU La IMU utilizada se basa en sensores MEMS: un acelerómetro triaxial MMA7361L de Freescale, un giróscopo biaxial LPR510AL (pitch, roll) y un giróscopo uniaxial LY510ALH (yaw), ambos de STMicroelectronics. Los tres sensores tienen una interfaz analógica: presentan las mediciones en términos de una tensión. Para incorporar las mediciones al sistema de navegación estas se digitalizan en la Computadora de bajo nivel (LLC) para luego ser enviadas a la OBC. Todos los sensores de la IMU vienen integrados en una placa de desarrollo con un tamaño de 50x23mm y un peso menor que 50g. 59 6.1 Hardware 60 Figura 6.1: IMU utilizada en la implementación del trabajo 6.1.1.1. Acelerómetro Este sensor tiene en su interior una masa suspendida por un resorte que se deforma al aplicarle una fuerza. Entre la masa y el marco que la sostiene se forma un capacitor que varı́a de acuerdo a la geometrı́a (impuesta al aplicarle una fuerza). Esta variación en la capacidad se mide y se acondiciona con un circuito integrado de aplicación especı́fica (ASIC) Figura 6.2: Principio de funcionamiento de un acelerómetro MEMS A continuación se puede observar un diagrama en bloques del sensor. El bloque G-CELL representa la parte MEMS y el resto del sistema es un ASIC dedicado a acondicionar la señal. 6.1 Hardware 61 Figura 6.3: Diagrama en bloques de un acelerómetro MEMS En la tabla 6.1 se reúnen algunas caracterı́sticas del sensor provistas por el fabricante. Caracterı́stica Valor min Consumo Tensión de operación 2.2 Temperatura de operación -40 Unidad typ max 400 600 µA 3.3 3.6 V 85 ºC ±1.5 Rango 1 Rango 2 Sensibilidad @ Rango1 740 Sensibilidad @ Rango2 Tensión de offset ±6.0 g g 800 860 mV/g 190.6 206 221.5 mV/g 1.485 1.65 1.815 V Tabla 6.1: Caracterı́sticas del acelerómetro MMA7361L 6.1.1.2. Giróscopo Este sensor tiene en su interior una estructura mecánica que vibra gracias a un actuador integrado. Al aplicarle una velocidad angular la estructura sufre una deformación de acuerdo al principio de Coriolis [5] [7]. Esta deformación es medida en términos de capacidad eléctrica y acondicionada mediante un ASIC. 6.1 Hardware 62 Figura 6.4: Diagrama en bloques de un giróscopo MEMS En la tabla 6.2 se reúnen algunas caracterı́sticas del sensor provistas por el fabricante. Caracterı́stica Valor min Consumo typ Unidad max 5+6.8 Tensión de operación 2.7 Temperatura de operación -40 3 mA 3.6 V 85 ºC ±400 Rango x1 Rango x4 Sensibilidad @ Rango x1 Sensibilidad @ Rango x4 Tensión de offset ±100 º/S º/S 2.5 mV/º/S 10 mV/º/S 1.23 V Tabla 6.2: Caracterı́sticas del giróscopo 6.1.2. LLC La computadora de bajo nivel (o Low Level Computer ) es la encargada de generar una interfaz entre algunos periféricos y la OBC. Existen tareas especı́ficas para las cuales tiene sentido desacoplar el procesamiento. En este caso la LLC se ocupa de muestrear los sensores analógicos y eventualmente generar las señales de PWM para controlar los motores. 6.1 Hardware 63 Figura 6.5: LPCXpresso 1768 Esta computadora cuenta con un sistema operativo de tiempo real (RTOS) que garantiza que los perı́odos de muestreo sean correctos. Se comunica con la OBC mediante una interfaz serie. La LLC está basada en un microcontrolador de 32 bits LPC1769 con núcleo Cortex-M3. En la tabla 6.3 se pueden encontrar algunos detalles del dispositivo. Caracterı́stica Valor min Consumo @ 100MHz typ Unidad max 50 Tensión de operación 2.4 Temperatura de operación -40 3.3 mA 3.6 V 85 ºC Memoria flash 512 kBytes Memoria ram 32 kBytes Canales ADC 8 Resolución ADC 12 bits Muestreo ADC 200 KHz Canales UART 4 Velocidad UART 115.2 6250 kbps Bus I2 C Bus SPI Salida PWM Tamaño Peso 140x35 50 mm g Tabla 6.3: Caracterı́sticas del LPCXpresso 1768 6.1.3. OBC Para seleccionar la computadora de abrodo se tuvieron en cuenta los siguientes factores Peso y tamaño 6.1 Hardware 64 Consumo Potencia de cálculo Comunidad de usuarios La mayorı́a de los quadrotores tienen un payload cercano a 1kg. Es por eso que la restricción en peso y tamaño de la computadora de abordo es importante. Una vez montado todo el sistema debe quedar payload dispobible para montar la carga especı́fica de la aplicación que se esté desarrollando (camara fotográfica, telemetrı́a, etc). Otro factor limitante es la capacidad de las baterı́as. En general la autonomı́a de estos sistemas es del orden de las decenas de minutos. Por eso la energı́a abordo es un recurso escaso y debe aprovecharse en forma óptima. Por otra parte se busca una computadora de abordo con potencia de cálculo suficiente como para poder resolver el algoritmo inercial, el filtro de Kalman y las mediciones WiFi. Se sobredimensionó la potencia de cálculo requerida para poder probar distintos algoritmos que puedan ser más o menos exigentes en este sentido. Si bién existe una relación de compromiso entre la potencia de cálculo y el consumo se decidió relajar el compromiso a favor de la potencia de cálculo, perdiendo autonomı́a. Una vez definidos los algoritmos y haciendo mediciones del uso de CPU se puede ajustar nuevamente esta relación. Otro factor importante en la definición de la computadora fue la comunidad de usuarios o la popularidad. Esto es importante para reducir los tiempos en la resolución de problemas relativos a la plataforma y poder concentrar la dedicación en en núcleo de la tesis. 6.1 Hardware 65 Figura 6.6: Beagleboard Se usa como plataforma una placa BeagleBoard C4 ya que resulta conveniente luego de evaluar los criterios de selección mencionados. La BeagleBoard cuenta con un procesador OMAP3530DCBB72 que corre a 720MHz y para el desarrollo del software corre un sistema operativo Linux. En la tabla 6.4 se pueden encontrar algunos datos de la placa provistos por el fabricante. 6.1 Hardware 66 Caracterı́stica Valor min Consumo typ Unidad max 350 Tensión de operación 4.8 Temperatura de operación -40 5.0 mA 5.2 V 85 ºC Memoria NAND 256 MBytes Memoria ram 256 kBytes Memoria SD 2 GBytes Canales UART 2 Velocidad UART 115.2 250 kbps Bus I2 C Bus SPI Bus USB Tamaño Peso 79x77 mm 50 g Tabla 6.4: Caracterı́sticas de la OBC 6.1.4. WiFi Para realizar las mediciones de potencia WiFi y para establecer un link de comunicación con el navegador se usa un adaptador WiFi-USB. La principal restricción al seleccionar el adaptador es que tenga driver para sistemas Linux. Se eligió el dispositivo TL-WN321G de TP-LINK. En la tabla 6.5 se pueden encontrar algunos datos provistos por el fabricante. Figura 6.7: Adaptador WiFI USB 6.2 Software 67 Caracterı́stica Valor min typ Consumo Frecuencia de operación max 500 Tensión de operación Temperatura de operación Unidad 5.0 V 0 40 2.400 2.4835 Sensibilidad @ 1Mbps, 8 %PER mA ºC GHz -90 dBm 20x75 mm Interfaz USB2.0 Estandar IEEE 802.11b/g Tamaño Peso 50 g Tabla 6.5: Caracterı́sticas del adaptador WiFi USB 6.2. Software En esta sección de describen las herramientas que fueron creadas, usadas y modificadas durante la relaización del trabajo, ası́ como los criterios de diseño involucrados en el proceso. 6.2.1. C++ - Boost - GCC Se decidió implementar todo el sistema de navegación en C++, haciendo uso de la biblioteca Boost1 . Esta decisión fue tomada en base a ciertos requisitos que eran necesarios para la implementación del sistema. Como se mencionó en la sección 6.1.3 se relajaron las relaciones de compromiso a favor de la velocidad de desarrollo y la simplicidad del sistema. Para hacer funcionar el navegador es necesario contar con las siguientes funcionalidades: 6.2.1.1. Operaciones con matrices Tanto el filtro de Kalman como el algoritmo de navegación hacen uso extensivo de operaciones con matrices como el producto o la inversión. La biblioteca Boost permite acceder de forma simple a funciones de la biblioteca BLAS, pudiendo operar con matrices y acceder a las mismas por bloques. 6.2.1.2. Cuaterniones Para el algoritmo de navegación es necesario el uso de cuaterniones y la biblioteca BLAS ofrece una implementación probada y funcional de cuaterniones, con todas sus operaciones definidas. 1 http://www.boost.org/ 6.2 Software 6.2.1.3. 68 Generación de VV.AA El sistema permite simular la entrada de algunos sensores para poder realizar pruebas sin tenerlos conectados fı́sicamente. Para esto en necesario poder sintetizar procesos aleatorios que modelen el ruido de los sensores. La biblioteca Boost tiene herramientes para generar procesos estocásticos con la distribución y parámetros convenientes para cada caso. 6.2.1.4. Portabilidad Si bién el programa final está pensado para correr en la OBC que tiene un procesador ARM, es deseable que el sistema pueda ser ejecutado en controladores de arquitectura Intel (u otras) para poder agilizar los procesos de debugging y testing. También es deseable que el sistema sea apto para correr en otras plataformas en caso que se qiera cambiar la OBC en el futuro. La herramienta GCC permite generar ejecutables para distintas arquitecturas a partir de un único código portable. 6.2.1.5. Acceso a periféricos Para acceder a las mediciones de los sensores es necesario leer datos de un puerto serie. Boost ofrece herramientas para realizar esto de forma independiente al sistema que se esté usando. 6.2.1.6. Threads y conectividad Para realizar telemetrı́a es necesario tener un servicio que envı́e datos al exterior del sistema pero sin estar acoplado a éste de forma rı́gida. Cada servicio de logging corre en un thread independiente del programa principal para evitar bloqueos en el navegador causados por cuellos de botella o interrupciones en los medios de almacenamiento y comunicacion. Este esquema facilita también agregar nuevos servicios para realizar mediciones sin hacer grandes cambios en el sistema principal. 6.2.2. Modificaciones en aircrack / airodump Como se explicó en la sección 2.2 este trabajo se basa en la medición de potencia de las balizas (beacons) que transmiten los routers WiFi. Si bien los sistemas basados en Unix permiten realizar mediciones de potencia de señal, no ofrecen buena performance en cuanto a tiempo de respuesta y en elgunos casos no es posible configurar el canal en que se desea medir. Tanto iwlist en plataformas Linux como airport en OSX están pensados para realizar un sondeo de los routers disponibles para que el usuario pueda evaluar a cuál conectarse, pero tienen capas de abstracción que interfieren con una buena medición. Por 6.2 Software 69 ejemplo, dependiendo la periodicidad del pedido, el programa puede devolver una repetición de los últimos datos tomados. Otro problema relacionado con la herramienta es que al ejecutar el programa, este tiene que acceder al dispositivo de red, abrirlo y generar el pedido de medición. Esto tiene asociado un overhead o tiempo muerto que no es despreciable cuando se quieren relizar varias mediciones por segundo. Para resolver estos problemas se tomó como punto de partida la aplicación airodump-ng2 del paquete aircrack-ng.3 9 ] [ Elapsed : 1 min ] [ 2007−04−26 1 7 : 4 1 ] [ WPA handshake : 0 0 : 1 4 : 6 C : 7 E : 4 0 : 8 0 CH BSSID PWR RXQ Beacons #Data , #/s CH MB ENC CIPHER AUTH ESSID 0 0 : 0 9 : 5 B : 1 C : AA : 1 D 11 16 10 0 0 11 54. OPN 00:14:6 C :7 A :41:81 34 100 57 14 1 9 11 e WEP WEP 00:14:6 C :7 E :40:80 32 100 752 73 2 9 54 WPA TKIP BSSID STATION PWR Rate Lost Packets 00:14:6 C :7 A :41:81 0 0 : 0 F : B5 : 3 2 : 3 1 : 3 1 51 36−24 2 ( not associated ) 0 0 : 1 4 : A4 : 3 F : 8 D : 1 3 19 0−0 0 4 00:14:6 C :7 A :41:81 0 0 : 0 C : 4 1 : 5 2 : D1 : D1 36−36 0 5 00:14:6 C :7 E :40:80 0 0 : 0 F : B5 : FD : FB : C2 −1 54−54 0 99 35 NET big PSK teddy Probes 14 mossy teddy Figura 6.8: Salida del programa airodump-ng airodump-ng es una herramienta para capturar paquetes crudos de la norma IEEE 802.11. Esto permite obtener los beacons a medida que van llegando y configurar el canal que se desea medir. Se modificó la herramienta para que quede corriendo como un proceso paralelo al navegador con el objetivo de que se inicialice una sola vez para evitar el overhead de apertura del dispositivo. También se modificó el formato de la salida para obtener únicamente los datos de interés (BSSID, ESSID, RSSI) en un formato conveniente. Por último se creó un mecanismo de comunicación entre procesos (IPC) para sincronizar la captura de datos en el momento que los necesita el navegador. Esto se implementó mediante una zona de memoria compartida entre el navegador y airodump-ng. 2 3 http://aircrack-ng.org/doku.php?id=airodump-ng http://aircrack-ng.org/ 6.2 Software 70 $START , BSSID , RSSI , RXQ , BEACON , DATA , DATAPS , ESSID , $ $DATA , 0 0 : 1 E : E5 : 3 4 : A3 : 8 6 , − 4 1 , XX , XX , XX , XX , galileo , $ $DATA , 0 0 : 1 4 : BF : 1 5 : BD : 2 B , −59 , XX , XX , XX , XX , rusell , $ $DATA , 0 0 : 1 C : 1 0 : CF : 5 8 : 1 C , −59 , XX , XX , XX , XX , laplace , $ $DATA , 0 0 : 1 6 : B6 : E5 : 8 C : 0 6 , − 5 7 , XX , XX , XX , XX , Helena , $ $END , BSSID , RSSI , RXQ , BEACON , DATA , DATAPS , ESSID , $ Figura 6.9: Salida del programa airodump-ng modificado De esta forma se pudo agilizar el proceso de tomar mediciones de potencia WiFi, obteniendo más de 10 mediciones por segundo. 6.2.3. Data logger / viewer Una parte muy importante del trabajo, además de la implementación del sistema, es verificar que funcione correctamente. Para esto es fundamental poder observar las variables de estado y los eventos que suceden durante la navegación. Durante el desarrollo del trabajo se consideraron y analizaron distintas alternativas para poder visualizar y graficar en tiempo real las variables del sistema. Se realizaron ensayos con GNUPlot y Simulink pero no se consiguió un buen desempeño en tiempo real. Los mejores resultados de obtuvieron usando LabView Figura 6.10: Pruebas con datalogger desarrollado en SimuLink 6.2 Software 71 Se desarrolló un programa que se conecta vı́a TCP/IP a servidores de telemetrı́a que tienen los distintos subsistemas del navegador (INS, EKF, WiFi) y baja los datos en tiempo real para graficarlos de forma conveniente. El programa también tiene la capacidad de mandar comandos al navegador para poder ajustar parámetros tales como los sesgos y factores de escala de los sensores, y otras variables que se quieran modificar para evaluar el sistema. Figura 6.11: Pruebas con datalogger desarrollado en LabView 6.2.4. Organización de clases Dada la complejidad involucrada, se separó el sistema en distintos objetos representados por clases C++ cuyo objetivo es modelar el comportamiento de cada subsistema de forma independiente. Esto se pensó para poder realizar pruebas aisladas e intercambiar o actualizar bloques sin modificar el resto del sistema. Se detallan a continuación cada una de las clases implementadas. 6.2 Software 72 Figura 6.12: Clases C++ del navegador 6.2.4.1. Access Piont - ap::ap() Esta clase está pensada para representar un access point genérico. Se crea mediante su dirección MAC uint64_t y un nombre (opcional). Puede almacenar tanto el histograma de mediciones como el valor de la última medición del access point. Tiene definida una relación de orden (==, <, >) para que pueda ser parte de estructuras de datos como árboles binarios de búsqueda. La relación de orden queda definida por la dirección MAC del access point. Figura 6.13: Organización de la clase AP lastRSSI apunta a la última medición de potencia tomada y histRSSI apunta a un arreglo de buckets elementos que funciona como historgama de las count mediciones tomadas. 6.2.4.2. Filtro de Kalman extendido - ekf::ekf() Esta clase contiene todas las funciones y matrices para implementar un filtro de Kalman extendido. El método update() se encarga de propagar el sistema, actualizar las matrices e 6.2 Software 73 incorporar las observaciones cuando corresponde. Se le pasa como parámetro un timestamp y la medicion externa en caso de haber una. La función f() implementa la dinámica no lineal del sistema: devuelve Xk+1 a partir de Xk (ec 5.10). Cp() calcula la matriz Ĉ a partir del cuaternión q del INS y C() calcula la matriz de cambio de base C a paritr de Ĉ y φ tal como se explicó en la sección 5.3. Los métodos S() permiten calcular la matriz S(x) del producto cruzado (ver apéndice A.1) Los métodos print permiten imprimir el estado del sistema en varios formatos. Figura 6.14: Métodos de la clase ekf La clase contiene un objeto tcp_logger que permite reportar el vector de estado a un monitor remoto, ası́ como ajustar parámetros del filtro en tiempo real. También tiene un objeto ins que es el sistema navegador sobre el cual se filtra el error. Con h se configura el paso temporal de discretización para los cálculos numéricos rng es un generador de números aleatorios basado en el algoritmo Mersenne Twister [20] usado por ndA, ndW, var_norA y var_norB para generar AWGN. 6.2 Software 74 Figura 6.15: Miembros de la clase ekf Por último, la clase también contiene las matrices necesarias para hacer los calculos. Si bien estas matrices también son miembros de la clase se detallan aparte por claridad. G ∈ R15x6 es el shaper del ruido de proceso (ec 5.11). F ∈ R15x15 es el jacobiano de la función f (ec 5.12). Q = cov(wk ) ∈ R2x2 y R = cov(vk ) ∈ R3x3 son los ruidos de proceso y de medición respectivamente. K ∈ R15x3 es la ganancia de Kalman definida en la ecuación 5.7 H ∈ R3x15 es el jacobiano de la función de observación h() (ec 5.13). P y P P ∈ R15x15 se usan para calcular la covarianza del estado. Por último X y XX ∈ R15x1 se usan para calcular el vector de estado. Figura 6.16: Matrices de la clase ekf 6.2 Software 6.2.4.3. 75 Sistema de navegación integrada - ins::ins() La clase INS representa un navegador inercial. Toma los datos de una IMU y el método update() actualiza el estado del navegador aplicando la función fdyn(). Esta fución propaga una versión discretizada de las ecuaciones del sistema explicado en la sección 3.2 usando como método numérico Runge–Kutta 4 (RK4) (ver apéndice B). Los métodos print permiten imprimir las variables del navegador en distintos formatos para ser usados por el sistema de telemetrı́a o para facilitar el desarrollo. Figura 6.17: Organización de la clase INS h define el paso temporal de discretización para los cálculos numéricos. q ∈ R4 el cuater- nion que determina la rotación entre la terna b y la terna w como se explicó en la sección 3.2. Xp ∈ R10 es el vector de estado donde se almacena la posición p, la velocidad v y el cuaternión q. imu1 es un objeto de la clase imu que representa el sensor inercial utilizado en el navegador. G ∈ R3 es la fuerza de gravedad en terna w y Ki , i ∈ {1, 2, 3, 4} son los coeficientes utilizados en la integración numérica por RK4 6.2.4.4. Unidad de mediciones inerciales - imu::imu() Esta clase representa una IMU. En particular se conecta mediante un puerto serie y obtiene los datos a partir de un stream con valores separados por comas, pero la estructura 6.2 Software 76 está preparada para usar otra interfaz como I2 C o SPI. El método update() obtiene los datos crudos de la fuente correspondiente y los transforma en mediciones en SI. Para esto hace los ajustes de offset y factor de escala correspondientes. Estos valores de calibración se ajustan para cada IMU de acuerdo a los ensayos realizados para cancelar los errores inherentes a la fabricación (recordar modelo de error propuesto en 3.3). La clase también utiliza generadores de AWGN para poder realizar pruebas sin los sensores fı́sicamente conectados. Los métodos print permiten imprimir el estado del sistema en varios formatos. La clase dispone de métodos para configurar el sesgo y el factor de escala de los giróscopos y los acelerómetros de forma independiente para poder hacer pruebas y evaluar los cambios del sistema ante distintas configuraciones. Figura 6.18: Métodos de la clase IMU Los datos obtenidos del sensor de almacenan en variables de tipo entero para luego ser convertidas a SI usando la configuración de la calibración. Un timestamp indica el momento en que fueron tomadas las mediciones de acuerdo al RTOS de la LLC. El flag lostflag indica si se perdió información (i.e. si llegaron dos mediciones con timestamp no consecutivo). 6.2 Software 77 Figura 6.19: Miembros de la clase IMU usados en las mediciones La clase IMU tiene la opción de obtener los datos de un archivo en caso de que no se esté usando una IMU fı́sica. Esto es sumamente útil en entornos de desarrollo o para hacer simulaciones del tipo software in the loop. Figura 6.20: Miembros de la clase IMU de uso general Las variables de calibración de la IMU guardan la configuración particular de una IMU y el conversor AD al que esté conectada en caso de que tenga una interfaz analógica. Con VccRange y QuantizationLevels se pueden convertir cuentas del ADC en volts. Esto es importante ya que la sensibilidad de algunos sensores está definida en función de la tensión de salida. También se almacenan los sesgos y factores de escala de los giróscopos y acelerómetros de acuerdo a la caracterización que se haya hecho. 6.2 Software 78 Figura 6.21: Miembros de la clase IMU usados en la calibración 6.2.4.5. Logger TCP - tcp logger::tcp logger() Esta clase fue implementada para poder monitorear el estado de las distintas clases en una terminal remota. Dado que todo el navegador es parte de un sistema embebido que no tiene interfaz con el usario por estar montado en una platforma de vuelo, es importante poder conocer la situación de las variables de estado, las lecturas de los sensores, y otras variables relevantes para tareas de desarrollo y diagnóstico. Se implementó una clase genérica que al ser instanciada define un puerto y un nombre de servicio sobre el que abre un servidor TCP/IP. La clase entrega un stream para que cada servicio pueda imprimir con un formato conveniente la salida. 6.2 Software 79 Figura 6.22: Organización de la clase tcp logger A tcp_logger también se le puede definir un handler que reciba información desde la terminal de telemetrı́a. El handler es una función de la clase que usa el tcp_logger (por ejemplo, la IMU) y esta función permite interpretar datos provenientes de la consola. Esto es útil para realizar cambios en la configuración del navegador en tiempo real. Un caso de uso en la implementación es poder cambiar los sesgos y factores de escala de la IMU mediante la consola para poder hacer una ajuste fino con el sistema ya funcionando. tcp_logger crea un thread nuevo por cada servicio que se registre en la telemetrı́a de forma tal de desacoplar el código y los tiempos de cada thread. 6.2.4.6. Sensor WiFi - wifi sensor::wifi sensor() La clase wifi_sensor está pensada para manejar las mediciones de potencia WiFi mediante el programa airodump-ng modificado, la base de datos con mediciones de entrenamiento y el algoritmo de filtrado bayesiano. El método update() se encarga de pedirle una nueva medición a airodump-ng y a partir del resultado genera un vector con un elemento de la clase ap por cada router que haya en rango. La clase wifi_sensor tiene la posibilidad de simular mediciones WiFi tomándolas de un archivo en lugar de realizar las mediciones. En ese caso update() lee el archivo entregando el resultado en el mismo formato que con las mediciones reales. El método measure(unsigned int place) llama a update() y una vez obtenidas las mediciones, las asigna al punto de la grilla especificado en place. De esta forma se van 6.2 Software 80 armando los histogramas de cada router y de cada punto de la grilla. Este método se usa durante la etapa de entrenamiento y no se usa al estimar la posición. loadAPfromFILE se encarga de cargar los archivos correspondientes a las bases de datos y asociarlos con cada punto de la grilla. El método locate(), contrariamente a measure se usa al estimar la posición y no al generar la base de datos. Este método es el encagado de tomar una (o varias) mediciones WiFi y procesar el algoritmo de filtrado (ver algoritmo 1) para generar la f.d.p con las probabilidades a posteriori de ubicación. Los métodos locationX y locationY permiten obtener las coordenadas x e y de la posición más probable después de la última medición. La coordenada z queda definida en función del plano en que se hayan tomado las mediciones WiFi en la etapa de entrenamiento. Los métodos print permiten imprimir las variables del navegador en distintos formatos para ser usados por el sistema de telemetrı́a o para facilitar el desarrollo. Figura 6.23: Métodos de la clase tcp logger La clase wifi_sensor tiene también un tcp_logger para tareas de telemetrı́a, los sets y pares de AP permiten realizar búsquedas de access points basadas en la dirección MAC que es la información disponible cuando se relaliza una nueva medición, para asociar el dato nuevo con la base de datos de entrenamiento. Las variables dentro de IPC se usan para sincronizar la comunicación entre procesos con airodump-ng. 6.3 Resultados 81 Figura 6.24: Miembros de la clase tcp logger Por último hay funciones que si bien no son miembros de la clase son útiles. miatol convierte una cadena de caracteres en un número entero de 64 bits, y string_to_mac convierte una cadena de caracteres de la forma xx:xx:xx:xx:xx:xx con cada x un dı́gito en hexadecimal en enteros de 64 bits. Figura 6.25: Funciones usadas por la clase tcp logger 6.3. Resultados Para probar y medir el sistema completo se escribió un script MATLAB que sintetiza los datos de entrada (mediciones WiFi e inerciales) y ejecuta el navegador en un software in the loop. Luego toma el resultado de la navegación y lo compara con los datos reales, o ground-truth para poder evaluar el sistema. Se realizaron las simulaciones en una grila WiFi de 10x10m. La relación entre mediciones WiFi e inerciales es de 1 : 100 (i.e. 100 mediciones inerciales por cada medición WiFi). Las mediciones inerciales se tomaron a 100Hz 6.3 Resultados 82 9 GT WiFi locate WiFi GT INS navegador WiFi+INS 8 7 11 11 10 6 15 5 12 12 14 14 4 3 3 3 2 1 0 13 4 4 9 9 8 8 13 2 2 5 5 7 7 1 0 1 10 6 6 1 2 3 4 5 6 7 8 9 Figura 6.26: Navegador inercial + WiFi En la figura 6.26 se puede ver el desempeño del navegador para un camino de 15 segundos. En verde los datos verdaderos (ground truth) y en rojo el resultado del navegador. Las etiquetas verdes y rojas corresponden a la secuencia de las posiciones reales y mediciones WiFi respectivamente. Por ejemplo, en el paso 13 las etiquetas verde y roja están en distintos lugares, eso indica que el filtro bayesiano tuvo un error en la estimación. 9 GT WiFi locate WiFi GT INS navegador WiFi+INS 8 7 6 15 5 4 4 4 3 3 3 2 2 2 1 0 5 5 14 6 6 13 14 13 7 7 8 8 12 12 1 0 1 9 9 1 2 3 4 5 6 11 11 10 7 10 8 9 Figura 6.27: Navegador inercial + WiFi con 5m de error en posición inicial 6.3 Resultados 83 En la figura 6.27 se puede ver como responde el navegador ante una mala especificación de las condiciones iniciales. En este caso fueron 5m de error en el eje x. A medida que el sistema incorpora mediciones externas va corrigiendo la trayectoria hasta que logra reducir la distancia al camino verdadero. 9 GT WiFi locate WiFi GT INS navegador INS 8 7 13 13 6 12 5 14 14 4 11 12 11 15 3 3 3 10 10 2 1 0 2 2 9 9 4 5 4 7 7 1 0 1 8 8 5 1 2 3 6 6 4 5 6 7 8 9 Figura 6.28: Navegador inercial con 5m de error en posición inicial Una pregunta válida es qué pasa si dejamos correr el algoritmo inercial sin incorporar mediciones externas. En caso de haber un error en las condiciones iniciales la consecuencia es una discrepancia sustancial entre el camino del navegador y el camino verdadero. Esto se puede observar en la figura 6.28 para un error en la posición inicial y en la figura 6.29 para un error en la posición y actitud inicial. 6.3 Resultados 84 9 9 9 8 8 8 7 7 7 11 11 10 12 6 6 5 13 6 13 12 15 5 5 4 14 14 3 3 3 2 1 0 GT WiFi locate WiFi GT INS navegador INS 10 4 4 2 2 1 0 1 1 2 3 4 5 6 7 8 9 Figura 6.29: Navegador inercial con error en posición y actitud inicial En la figura 6.30 se aprecia la respuesta del sistema completo, nuevamente incorporando mediciones WiFi. A pesar de un error en posición y actitud inicial puede retomar la trayectoria pasados unos segundos. 15 9 8 14 14 7 13 13 8 8 7 12 12 6 7 4 4 4 3 3 3 2 2 2 0 10 10 11 11 6 6 5 1 9 9 GT WiFi locate WiFi GT INS navegador WiFi+INS 5 5 1 0 1 1 2 3 4 5 6 7 8 9 Figura 6.30: Navegador inercial + WiFi con error en posición y actitud inicial Luego se realizaron corridas del sistema para caracterizarlo mediante el método Monte 6.3 Resultados 85 Carlo. Para un camino de 200 segundos se fijó un set de parámetros y se corrió el navegador 20 veces. Por cada corrida se computó el error en posición respecto al camino verdadero. A partir de los vectores de error se calculó la media y el desvı́o estándar. La media se espera que sea nula ya que en cada corrida el camino es aleatorio. Una media no nula serı́a indicio de un bias en alguna parte del algoritmo. Por otra parte, el desvı́o estándar indica la dispersión en el error a lo largo del tiempo. Se espera que sea acotado. 3 3 2 2 1 1 0 0 −1 −1 −2 −2 −3 −3 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 4 2 4 x 10 x 10 Figura 6.31: Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 0.1 sm2 3 4 2 3 1 2 0 1 −1 0 −2 −1 −3 −2 −4 −3 −5 −4 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 4 x 10 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 4 x 10 Figura 6.32: Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 0.2 sm2 6.3 Resultados 86 3 3 2 2 1 1 0 0 −1 −1 −2 −2 −3 −3 −4 −4 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 4 2 4 x 10 x 10 Figura 6.33: Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 0.4 sm2 6 6 4 4 2 2 0 0 −2 −2 −4 −4 −6 −8 −6 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 4 2 4 x 10 x 10 Figura 6.34: Valor esperado ±2σ para 20 corridas de 200 segundos. σaccel = 0.8 sm2 Como se puede ver en los gráficos, el navegador cumple lo pedido. Este tipo de pruebas son de suma importancia porque permiten detectar modos de falla en cualquier parte del sistema. Desde errores en el modelo hasta cuestiones de inestabilidad numérica. Por último y para validar la modelización del sistema se registró el vector de innovaciones. Si el sistema está bien modelado y el ruido del sistema es gaussiano, entonces las innovaciones tienen que ser ortogonales y el vector de innovaciónes ruido blanco. Para probar esto se observó la autocorrelación de cada componente del vector de innovaciones (figura 6.35) para δx, δy, δz y ruido blanco gaussiano generado en MATLAB respectivamente. 1000 800 350 700 300 600 250 500 200 400 150 300 100 200 50 100 0 500 800 400 600 300 400 200 200 100 0 0 0 −200 −50 −100 0 100 200 300 400 500 600 700 800 900 1000 −100 0 100 200 300 400 500 600 700 800 900 1000 −100 0 100 200 300 400 500 600 700 800 900 1000 Figura 6.35: Autocorrelación de las innovaciones 0 100 200 300 400 500 600 700 800 900 1000 Capı́tulo 7 Conclusiones A lo largo de este trabajo se estudiaron distintos sistemas de navegación, tanto basados en sensores inerciales como en referencias externas. Se estudiaron distintas técnicas y métodos para poder realizar navegación indoor donde no hay disponibilidad de sistemas GNSS. Luego de analizar sistemas de navegación indoor en general, se decidió implementar el sistema basado en mediciones de beacons WiFi por diversos motivos, principalmente por la disponibilidad de hardware y la masividad de AP en lugares de interés. En el capı́tulo 2 se estudiaron en detalle diversos modelos de navegación mediante señales WiFi y se decidió utilizar en la implementación un filtro bayesiano. Se analizó también un esquema de modelo de propagación sumado a un mapa del terreno (apéndice C). A pesar de obtener buenos resultados en las simulaciones se decidió abandonar este enfoque dejando de lado la idea de utilizar un modelo fı́sico de propagación debido a la complejidad que este deberı́a tener para ser fidedigno, principalmente por los efectos de la propagación multipath, NLOS, difracción y otros efectos que se acentúan en ambientes cerrados. Se realizó un experimento con el objetivo de caracterizar y definir algunos de los parámetros involucrados en el filtro bayesiano. Una parte del experimento se realizó con un dataset real, y algunas parametrizaciones se obtuvieron extrapolando los resultados obtenidos a partir de simulaciones. A partir de esto se pudieron optimizar y fundamentar ciertos valores relacionados con la etapa de entrenamiento y con la etapa de estimación. Se obtuvieron resultados satisfactorios. Del sistema de navegación con señales WiFi se obtuvieron mediciones con un error de 2m a 4m dependiendo las condiciones. Estos son los valores tı́picos que se encuentran actualmente en la biliografı́a. También se obtuvo como conclusión que para obtener una buena medición son necesarios al menos 3 o 4 routers, pero poner muchos más no reduce significativamente el error. Tampoco lo hace tomar muchas mediciones en lugar de una sola a la hora de estimar la posición. Dado el tamaño reducido del dataset tomado en la FIUBA y para tener una perspectiva más amplia respecto a algunos parámetros se diseñó una simulación con el objetivo de mo87 88 dificar parámetros más allá de lo que permitı́a el dataset. Con esta simulación se verificaron los resultados obtenidos anteriormente y se obtuvo una idea de aquellos experimentos imposibles de realizar con el dataset (por ejemplo, cambiar el tamaño o densidad de la grilla de mediciones offline). De todas formas, esto fue solo un accesorio y no pueden desprenderse resultados concluyentes de esta experiencia debido a la hipótesis de trabajo sobre la complejidad de propagación de campos indoor. Para arrojar más luz sobre el tema es fundamental realizar nuevos experimentos con un dataset más abundante. En el capı́tulo 3 se estudió el navegador inercial, definiendo sus ecuaciones, y se estudiaron las fuentes de error relacionadas con los sensores MEMS. Luego de clasificar los errores se estudió cómo palearlos. Si bien la industria de sensores inerciales evoluciona a pasos agigantados, las técnicas para obtener trayectorias a partir de mediciones inerciales no tienen buena perspectiva en el corto y mediano plazo. Es por eso que en el capı́tulo 5 se estudian algoritmos de fusión de datos para poder mantener acotado el error del navegador. En ese sentido se buscó una forma robusta de incorporar nueva información al sistema. Se describieron varias alternativas para incorporar la información del filtro bayesiano al navegador, y si bien se implementó la más simple de ellas, quedan disponibles las demás para futuras mejoras del sistema. En la figura 6.29 se puede ver la respuesta al sistema cuando se navega solo con instrumentos inerciales y las condiciones iniciales no fueron especificadas correctamente. Es evidente la diferencia entre el camino real y el camino estimado. En cambio, en la figura 6.30 se observa la respuesta del sistema con mediciones externas además de la navegación inercial, y para las mismas condiciones iniciales. Pasado un tiempo los dos caminos se acercan y mantienen una diferencia acotada. En el capı́tulo 4 se describió la plataforma de vuelo utilizada, dejando en evidencia las restricciones en cuanto a tamaño, peso y consumo energético que puede tener el sistema. Esto no implicó grandes restricciones en el desarrollo teórico del trabajo, sin embargo la implementación del mismo tuvo que amoldarse a estas condiciones. Por último en el capı́tulo 6 se llevó a cabo todo el trabajo necesario para poder transformar los temas estudiados en los capı́tulos anteriores en un sistema funcional, capaz de correr bajo las condiciones propuestas en el objetivo del trabajo. También se presentaron todas las herramientas que hubo que modificar y construir para el desarrollo del trabajo. Si bien no son un bloque funcional del sistema fueron un factor decisivo en el proceso que tuvo como resultado el sistema per se. Capı́tulo 8 Trabajo Futuro Siempre que se diseña algo existen ajustes, mejoras y detalles que permiten ir refinando el sistema. Estos cambios pueden tener que ver con completar de alguna forma lo que ya está hecho, o rehacerlo y encararlo desde otro enfoque. A lo largo del trabajo se fueron tomando decisiones para poder definir, acotar y seguir con el objetivo propuesto. Sin embargo existen muchos aspectos a explorar para probar variaciones y mejoras respecto a lo implementado en esta tesis. Para profundizar la investigación comenzada en este trabajo es fundamental disponer de un dataset con muestras de entrenamiento más tupido y abundante que el que se considera en el capı́tulo 2. Es necesario disponer una base de datos que cubra una superficie mayor (i.e. más de ∼ 50 puntos de entrenamiento), con más de 4 routers, muestras a más de una altura (en el eje z). Para poder abandonar el esquema de puntos en una grilla y usar puntos de entrenamiento arbitrariamente distribuidos (propuesto en 2.4.2.5) hace falta incluir dentro del archivo que guarda los histogramas la ubicación donde fue tomada la muestra. Con todos estos cambios se pueden realizar ensayos más confiables e implementar opciones más flexibles, donde los puntos de entrenamiento se vayan creando o mejorando a medida que funciona el sistema. Para esto es posible implementar algoritmos y técnicas de SLAM. En términos del dataset, también se puede tomar más de una medición en cada punto con distintas orientaciones del navegador, para evaluar si es posible extraer datos de actitud a partir de la no isotropı́a de la antena WiFi en el receptor. En este sentido es posible también modificar el patrón de radiación de la antena receptora para fortalecer esta posible respuesta en actitud. Aprovechando el diseño por clases en la implementación, es posible crear alternativas al filtro bayesiano usado en wifi_sensor para comparar distintos algoritmos y obtener mayores precisiones de las ventajas y falencias de cada uno. Solo es necesario respetar la interfaz de wifi_sensor y la clase que implemente los nuevos algoritmos puede ser usada de forma intercambiable con la original. 89 90 Este tipo de modificaciones se pueden realizar en la clase ekf para adoptar nuevos observadores como se propone en la sección 5.3. Teniendo en cuenta la probabilidad a posteriori de la estimación bayesiana y la distancia a la posición actual se pueden armar esquemas que aprovechen más la información y descartar outliers. Otra modificación posible al trabajo es reemplazar el receptor WiFi usado por un frontend de software defined radio. Este tipo de dispositivos permite sintonizar el o los canales de interés y procesar la señal cruda en banda base. Si bien requiere más poder de cómputo que analizar los beacons 802.11 directamente, también permite obtener mucha más información a partir de la señal. Actualmente se consiguen en el marcado dispositivos capaces de hacer esto por el mismo precio que un dongle USB-WiFi con lo cual no implica ninguna difrencia en el costo del sistema. Apéndice A Rotaciones en el espacio A.1. Cuaterniones Los cuaterniones son una extensión de los números complejos. Fueron descriptos por William Rowan Hamilton en 1843 para ser aplicados en mecánica, y entre otras cosas pueden usarse para expresar rotaciones en el espacio, al igual que las matrices de cosenos directores o los ángulos de Euler. Las rotaciones con cuaterniones son más compactas y eficientes para calcular que las rotaciones mediante matrices. Además, a diferencia de los ángulos de Euler no tiene puntos de indeterminación (Gimball Lock). Ası́ como un número complejo z ∈ C puede ser expresado en términos de números reales y una unidad imaginaria (z = a + b · i). Un cuaternión puede ser expresado unı́vocamente de la siguiente forma, q ∈ H, q = a + b · i + c · j + d · k con a, b, c, d ∈ R. De forma tal que las unidades i, j, k cumplen las siguientes ecuaciones, i2 = j 2 = k 2 = i · k · j = −1 (A.1) En el espacio de cuaterniones se definen varias operaciones: suma, multiplicación por un escalar y multiplicación entre cuaterniones. Para la suma y multiplicación por un escalar se procede de la misma forma que los números complejos, respetando las unidades i, j, k. Sean q 1 = a 1 + b1 · i + c 1 · j + d 1 · k y q 2 = a 2 + b2 · i + c 2 · j + d 2 · k Entonces qs = q1 + q2 = a1 + a2 + (b1 + b2 ) · i + (c1 + c2 ) · j + (d1 + d2 ) · k qp = p · q1 = p · a1 + p · b1 · i + p · c1 · j + p · d1 · k, con p ∈ R 91 A.1 Cuaterniones 92 Para el producto entre cuaterniones se define el producto de Hamilton, distribuyendo los términos del producto normalmente y usando las identidades definidas en (A.1). Sean q 1 = a 1 + b1 · i + c 1 · j + d 1 · k q 2 = a 2 + b2 · i + c 2 · j + d 2 · k y Entonces q1 ◦ q2 = (a1 + b1 · i + c1 · j + d1 · k) · (a2 + b2 · i + c2 · j + d2 · k) = a 1 a 2 + a 1 b2 i + a 1 c 2 j + a 1 d 2 k + + b1 a2 i + b1 b2 i2 + b1 c2 ij + b1 d2 ik + + c1 a2 j + c1 b2 ji + c1 c2 j 2 + c1 d2 jk + + d1 a2 k + d1 b2 ki + d1 c2 kj + d1 d2 k 2 + (A.1) = a 1 a 2 − b1 b 2 − c 1 c 2 − d 1 d 2 + + (a1 b2 + b1 a2 + c1 d2 − d1 c2 )i + + (a1 c2 − b1 d2 + c1 a2 + d1 b2 )j + + (a1 d2 + b1 c2 − c1 b2 + d1 a2 )k Al trabajar con rotaciones en el espacio, es cómodo definir los cuaterniones en términos de un vector �εq correspondiente a la dirección en torno a la cual se gira, y una parte escalar ηq correspondiente a la magnitud del giro. q= � �εq ηq � qx q y = qz qr Para representar una rotación de ángulo θ en torno a un vector unitario n̆, se expresa el � � � � cuaternión q tal que �εq = n̆ · sin 12 · θ y ηq = cos 12 · θ Y bajo estas restricciones se define el conjugado q ∗ de un cuaternión q ∗ q = � −�εq ηq � Por último se define el producto entre cuaterniones en función del producto entre matrices qr −qz qy qx rx � � � � q ηq · I3 + S(�εq ) �εq �εr z qr −qx qy ry q◦r = · · = T qy qx rz q q ηr −� ε η r z q q qx −qy −qz qr rr A.2 Matriz de Cosenos Directores - DCM con 93 0 S(x) = x3 −x2 A.2. −x3 0 x1 x2 −x1 0 Matriz de Cosenos Directores - DCM Partiendo de las tres matrices básicas de rotación en torno a los ejes cartesianos, Rx (φ), Ry (θ) y Rz (ψ) podemos definir una matriz R que represente una rotación arbitraria en el espacio. 1 cos θ 0 − sin θ 0 0 Rx (φ) = 0 cos φ sin φ 0 − sin φ cos φ Ry (θ) = 0 1 0 sin θ 0 cos θ cos ψ sin ψ 0 Rz (ψ) = − sin ψ cos ψ 0 0 0 1 http://xkcd.com/184/ Recordando la propiedad de composición de las matrices de rotación se obtiene R = Rz (ψ) · Ry (θ) · Rx (φ) cos θ cos ψ cos φ sin ψ + sin φ sin θ cos ψ sin φ sin ψ − cos φ sin θ cos ψ R= − cos θ sin ψ cos φ cos ψ − sin φ sin θ sin ψ sin φ cos ψ + cos φ sin θ sin ψ sin θ − sin φ cos θ cos φ cos θ Es importante notar el orden en que se efectuan las rotaciones es importante, y es necesario definir una convención y respetarla. Esta es una de las desventajas de las matrices de cosenos directores frente a los cuaterniones. A.3. Conversiones A.3.1. DCM a Cuaternión Para transformar una matriz de cosenos directores R en un cuaternión q se pueden usar las siguientes identidades A.3 Conversiones 94 1 (R32 − R23 ) 4qr 1 qy = (R13 − R31 ) 4qr 1 qz = (R21 − R12 ) 4qr 1� qr = 1 + R11 + R22 + R33 2 qx = A.3.2. Cuaternión a DCM Para transformar un cuaternión q en una matriz de cosenos directores R se puede usar la siguiente identidad 1 − 2qy2 − 2qz2 R= 2(qx qy + qz qr ) 2(qx qy − qz qr ) 2(qx qz + qy qr ) 2(qy qz − qx qr ) 2 2 2(qx qz − qy qr ) 2(qx qr + qy qz ) 1 − 2qx − 2qy 1 − 2qx2 − 2qz2 Apéndice B Método de Runge–Kutta - RK4 Runge Kutta es un método para aproximar soluciones de ecuaciones diferenciales ordinarias. La ténica fue desarrollada por los matemáticos alemanes Carl David Tolmé Runge y Martin Wilhelm Kutta cerca de 1900. Su forma más popular es la de cuarto orden (RK4), donde se parte de un problema con condiciones iniciales ẏ = f (t, y), y(t0 ) = y0 y se obtiene una aproximación deiscetizada de la función y: yn+1 = yn + 16 (k1 + 2k2 + 2k3 + k4 ) + O(h5 ) tn+1 = tn + h con h el intervalo de discretización y O(h5 ) el error de quinto orden, yn+1 es la proximación RK4 de y(tn+1 ) donde k1 = hf (tn , yn ), k2 = hf (tn + 12 h, yn + 12 k1 ), k3 = hf (tn + 12 h, yn + 12 k2 ), k4 = hf (tn + h, yn + k3 ). El método fue usado para obtener la solución del INS a partir de las ecuaciones definidas en el capı́tulo 3. Debido al paso temporal semientero (de los coeficientes k2 y k3 ) es necesario alimentar el algoritmo con datos inerciales al doble de frecuencia que el lazo de propagación numérica. 95 Apéndice C Triangulación por RSSI C.1. Sistema propuesto El sistema propuesto en este caso tomará el modelo más simple de propagación de onda con α como parámetro (ver 2.3.1). Se propone una dinámica de sistema basada en un proceso de random-walk en un campo de potencial. Este campo está definido en base al mapa del entorno (información a priori). Se consideran movimientos en el plano y se usa como vector de estado X = [x C.1.1. y vx vy ] Campo de fuerza Se define Ξi,j (x, y) como la fuerza ejercida en el objeto a navegar en (x, y) debido a la celda del mapa (i, j) Este campo de fuerza actúa como información a priori o dinámica del sistema, estableciendo una tendencia del objeto que navega a alejarse de las paredes. Ξcr · C(i, j) Ξi,j (x, y) = − 2 · di,j (x, y) � x − xic y − ycj · �x + · �y di,j (x, y) di,j (x, y) � (C.1) donde di,j (x, y) es la distancia entre el objeto a nevagar (x, y) y la celda (xic , ycj ) y Ξcr es la constante de fuerza del sistema. C(i, j) = 1 0 si (xic , ycj ) es pared - obstáculo si (xic , ycj ) es piso Por último se calcula la fuerza total para una posición dada Ξr (x, y) = � i,j 96 Ξi,j (x, y) (C.2) C.2 Filtro de Kalman - EKF 97 que se calcula offline y no cambia durante el filtrado. 50 50 45 45 40 40 35 35 30 30 25 25 20 20 15 15 10 10 5 5 5 10 15 20 25 30 35 40 45 50 5 10 15 20 25 30 35 40 45 50 Figura C.1: Mapa del espacio a navegar con su respectivo campo de fuerza C.1.2. Dinámica del sistema Las siguientes ecuaciones modelan el random walk combinado con el campo de fuerza propuesto. h2 · Ξxk (xk , yk ) 2 h2 = y k + h · v yk + · Ξyk (xk , yk ) 2 = λ · vxk + h · Ξxk (xk , yk ) + (1 − λ) · νx xk+1 = xk + h · vxk + (C.3) yk+1 (C.4) vxk+1 vyk+1 = λ · vyk + h · Ξyk (xk , yk ) + (1 − λ) · νy (C.5) (C.6) h es el tiempo de integración, λ permite suavizar los cambios en la velocidad y [νx νy ] es un proceso de ruido blanco gaussiano de media nula. C.1.3. Modelo de observación � �− 1 RSSi = Pi · (xk − Axi )2 + (yk − Ayi )2 α + ηi (C.7) Pi es la potencia del i-ésimo access point y (Axi , Ayi ) su ubicación. α es parámetro del sistema y ηi es ruido blanco gaussiano de media nula. C.2. Filtro de Kalman - EKF Para resolver el problema y debido a que este no es lineal se propone usar un filtro de Kalman extendido (EKF) con el siguiente sistema asociado. Para una referencia teórica del filtro de Kalman consultar el capı́tulo 5 C.2 Filtro de Kalman - EKF 98 Xk = f (Xk−1 , uk−1 ) + νk−1 (C.8) zk = h(Xk ) + ηk (C.9) donde cov(νk ) = Q y cov(ηk ) = R y sus correspondientes ecuaciones X̂k+1|k = f (X̂k|k , uk ) (C.10) Pk+1|k = Fk · Pk|k · FkT + Qk (C.11) T T Kk+1 = Pk+1|k · Hk+1 · (Hk+1 · Pk+1|k · Hk+1 + Rk )−1 C.2.1. (C.12) X̂k+1|k+1 = X̂k+1|k + Kk+1 (zk − h(X̂k+1|k )) (C.13) Pk+1|k+1 = (I − Kk+1 · Hk+1 ) · Pk+1|k (C.14) Descripción de las matrices xk + h · vxk + h2 /2 · Ξxk (xk , yk ) y + h · v + h2 /2 · Ξ (x , y ) yk yk k k k f (Xk , uk ) = λ · vxk + h · Ξxk (xk , yk ) λ · vyk + h · Ξyk (xk , yk ) 0 0 νk = (1 − λ) · νx k (1 − λ) · νyk � �− 1 P1 · (xk − Ax1 )2 + (yk − Ay1 )2 α 1 P2 · �(xk − Ax )2 + (yk − Ay )2 �− α 2 2 h(Xk ) = . .. 1 � � y 2 −α x 2 PM · (xk − AM ) + (yk − AM ) η 1k η2 k ηk = . .. η Mk 2 rx h2 ∂Ξrx 1 + h2 · ∂Ξ h 0 ∂x 2 · ∂y � 2 2 ∂Ξ ∂Ξ r h · ry 1 + h2 · ∂yy 0 h ∂f �� 2 ∂x Fk = = rx rx ∂X �X̂k|k ,uk h · ∂Ξ h · ∂Ξ λ 0 ∂x ∂y ∂Ξry ∂Ξry h · ∂x h · ∂y 0 λ C.3 Implementación del sistema � ∂h �� Hk = = ∂X �X̂k|k 99 2·P1 ·(xk −Ax 1) α 2·P ·(x −Ax ) − 2 αk 2 − .. . − 2·PM ·(xk −Ax M) α � �− 1 −1 con ϕi = (xk − Axi )2 + (yk − Ayi )2 α C.2.2. · ϕ1 · ϕ2 · ϕM 2·P1 ·(yk −Ay1 ) α 2·P2 ·(yk −Ay2 ) − α − .. . − 2·PM ·(yk −AyM ) α · ϕ1 · ϕ2 · ϕM 0 0 0 0 .. .. . . 0 0 Condiciones iniciales / ruidos / covarianzas La posición inicial se asume desconocida. Se toma un punto cualquiera de la grilla (se podrı́a tomar el centro). Se toma un desvı́o estandar de 1m para el ruido de proceso νk . La potencia de ruido de medición ηk se modifica para simular diversos escenarios. C.3. Implementación del sistema Todo el sistema está simulado mediante un script MATLAB (ver C.5). Sintetizando los datos de las mediciones y en un mapa ficticio. También se sintetiza una trayectoria a seguir, de donde se tomarı́an las mediciones de señal WiFi C.3.1. Mapa El plano de navegación es un mapa de bits binario, donde un pixel blanco simboliza una pared y un pixel negro el piso. También se genera un mapa de bits que contiene el camino recorrido. Esta imagen es luego transformada en una secuencia temporal de coordenadas (x, y) Figura C.2: Mapa y recorrido propuesto C.3 Implementación del sistema C.3.2. 100 Campo de fuerza Recordando el modelo de sistema, se calcula el campo de fuerza como Ξr (x, y) = � i,j Ξcr · C(i, j) − 2 · di,j (x, y) � x − xic y − ycj · �x + · �y di,j (x, y) di,j (x, y) � (C.15) usando como C(i, j) el mapa de bits que define el entorno. Luego se calculan las derivadas parciales del campo de fuerza ∂Ξrx ∂Ξrx ∂Ξry ∂x , ∂y , ∂x y ∂Ξry ∂y aproximando con la primer diferencia C.3.3. Observaciones / secuencia de mediciones Para generar las observaciones se generan 5 campos con la señal emitida por 5 access points distintos: en las 4 esquinas y en el centro del mapa. Para esto se usa el parámetro α anteriormente mencionado, se determina una potencia Pi para cada AP y se le agrega un ruido blanco gaussiano (ruido de medición η) 50 45 40 35 30 25 20 15 10 5 5 10 15 20 25 30 35 40 45 50 Figura C.3: Nivel de potencia en el espacio para cinco routers (centro y esquinas) C.3.4. Filtrado Por último se implementa el algoritmo del EKF con la dinámica presentada y tomando como mediciones los puntos del campo de los AP, tomados de la secuencia temporal correspondiente al camino simulado. En otras palabras, se simula un móvil recorriendo el camino y tomando mediciones de señal de los 5 AP. C.4 Resultados obtenidos C.4. 101 Resultados obtenidos Se grafican los resultados (cı́rculos verdes) en el mismo mapa, superpuestos al camino verdadero (rojo). 50 45 40 35 30 25 20 15 10 5 5 10 15 20 25 30 35 40 45 50 Figura C.4: Resultado obtenido para SNR = 30dB, α = 3, λ = 0.5, σν = 1m, Fcr = 1 50 45 40 35 30 25 20 15 10 5 5 10 15 20 25 30 35 40 45 50 Figura C.5: Resultado obtenido para SNR = 20dB, α = 3, λ = 0.5, σν = 1m, Fcr = 1 C.4 Resultados obtenidos 102 50 45 40 35 30 25 20 15 10 5 5 10 15 20 25 30 35 40 45 50 Figura C.6: Resultado obtenido para SNR = 10dB, α = 3, λ = 0.5, σν = 1m, Fcr = 1 50 45 40 35 30 25 20 15 10 5 5 10 15 20 25 30 35 40 45 50 Figura C.7: Resultado obtenido para SNR = 0dB, α = 3, λ = 0.5, σν = 1m, Fcr = 1 Si bien los resultados de las simulaciones son prometedores, incluso para baja relación señal a ruido, este método presenta varias desventajas que dificultan su uso en la práctica. Una de ellas es la necesidad de un mapa a priori de las paredes y obstáculos del terreno, esto es costoso de generar y mantener. Por otra parte, la función propuesta como campo de fuerza es muy dependiente de la aplicación. Para un peatón en un pasillo tiene sentido la premisa de mantenerse alejado de las paredes, pero para un UAV no es necesariamente cierta. � � Además la hipótesis de propagación ∼ α · log dd0 no se sustenta en ambientes cerrados donde los efectos de la propagación multipath son apreciables. C.5 Simulaciones 103 Por todos estos motivos se dejó de lado la idea de implementar métodos basados en RSSI sin análisis estadı́stico posterior. C.5. Simulaciones clc clear all close all % modelo de potencial para usar con random−walk % %mapa de la habitacion , 1 es pared , 0 es piso binmap=zeros ( 5 0 , 5 0 ) ; binmap ( 1 , : ) =1; binmap ( 5 0 , : ) =1; binmap ( : , 1 ) =1; binmap ( : , 5 0 ) =1; binmap ( 2 0 , 1 : 2 5 ) =1; binmap ( 2 0 : 4 0 , 2 5 ) =1; binmap ( 4 0 , 3 5 : 5 0 ) =1; binmap ( 1 : 3 0 , 3 5 ) =1; % para grabar / levantar mapas %imwrite ( binmap , ' mapa . bmp ' , 'BMP' ) %camino=imread ( ' camino . bmp ' , 'BMP' ) ; load ( ' s e c u e n c i a . mat ' ) %secuencia temporal del camino % tiene las coordenadas por donde paso el objeto ( ground truth ) figindex =1; %mapa figure ( figindex ) , contourf ( binmap , 1 ) figindex=figindex +1; % %campo de fuerza para la dinamica del sistema % basado en WI−FI BASED INDOOR LOCALIZATION AND TRACKING % USING SIGMA−POINT KALMAN FILTERING METHODS % de Anindya S . Paul and Eric A . Wan forcex=zeros ( 5 0 , 5 0 ) ; forcey=zeros ( 5 0 , 5 0 ) ; forcemod=zeros ( 5 0 , 5 0 ) ; Fcr =1; %cte de la fuerza x =1:50; C.5 Simulaciones 104 y =1:50; f o r i =1:50 , f o r j =1:50 , f o r x =1:50; f o r y =1:50 , i f ( x==i && y==j ) , % evitar division por cero else forcex ( y , x )=forcex ( y , x )+Fcr . ∗ binmap ( j , i ) ∗ ( ( x−i ) / ( ( ( x−i ) ˆ2+(y−j ) ˆ 2 ) ←� ˆ ( 1 / 2 ) ) ) / ( ( x−i ) ˆ2+(y−j ) ˆ 2 ) ; forcey ( y , x )=forcey ( y , x )+Fcr . ∗ binmap ( j , i ) ∗ ( ( y−j ) / ( ( ( x−i ) ˆ2+(y−j ) ˆ 2 ) ←� ˆ ( 1 / 2 ) ) ) / ( ( x−i ) ˆ2+(y−j ) ˆ 2 ) ; end end end end end f o r i =1:50 , f o r j =1:50 , forcemod ( i , j )=sqrt ( forcex ( i , j ) ˆ2+forcey ( i , j ) ˆ 2 ) ; end end figure ( figindex ) , contourf ( forcex ) figindex=figindex +1; figure ( figindex ) contourf ( forcey ) figindex=figindex +1; figure ( figindex ) contourf ( forcemod ) figindex=figindex +1; % derivada del campo de fuerza , despues se usa en el EKF % probar calcular las derivadas de otra manera dforcexdx=forcex−circshift ( forcex , [ 0 , 1 ] ) ; dforcexdy=forcex−circshift ( forcex , [ 1 , 0 ] ) ; dforceydx=forcey−circshift ( forcey , [ 0 , 1 ] ) ; dforceydy=forcey−circshift ( forcey , [ 1 , 0 ] ) ; figure ( figindex ) , surf ( dforcexdx ' ) f i g i n d e x=f i g i n d e x +1; figure ( figindex ) s u r f ( dforcexdy ' ) figindex=figindex +1; C.5 Simulaciones 105 figure ( figindex ) , contourf ( dforceydx ' ) f i g i n d e x=f i g i n d e x +1; figure ( figindex ) contourf ( dforceydy ' ) figindex=figindex +1; % %mapa de observaciones obs=zeros ( 5 0 , 5 0 , 5 ) ; % 5 access points , en las esquinas y en el centro pot =1000; aplocation =[1 , 1 ; 1 ,50; 50 ,50; 50 ,1 ; 25 ,25]; sigma =1000; alpha =3; f o r m =1:5 , f o r i =1:50 , f o r j =1:50 , obs ( j , i , m )=pot . / ( ( ( i−aplocation ( m , 2 ) ) ˆ2+(j−aplocation ( m , 1 ) ) ˆ 2 ) ˆ ( 1 / alpha ) ←� ); end end obs ( aplocation ( m , 2 ) , aplocation ( m , 1 ) , m )=pot ; end ruido=sqrt ( sigma ) ∗ randn ( 5 0 , 5 0 , 5 ) ; obs=obs+ruido ; mediciones=zeros ( 9 5 , 5 ) ; % secuencia de mediciones de los 5 sensores f o r i =1: length ( secuencia ) , f o r j =1:5 , mediciones ( i , j )=obs ( secuencia ( i , 1 ) , secuencia ( i , 2 ) , j ) ; end end % en la matriz mediciones se guarda la simulacion de lo que leeria % un sensor de RSS % %EKF ( ya estan todos los datos ) % en forcex y forcey esta la fuerza de control ( estan tambien las deriv ) % en secuencia esta el camino verdadero % en mediciones estan los datos medidos de los 5 AP C.5 Simulaciones 106 lambda = 0 . 5 ; N=length ( secuencia ) ; h =1; % paso temporal de las estimaciones estim=zeros ( 4 , N ) ; %vector que guarda las estimaciones % ruido de proceso %−−−−−−−−−−−−−− s_x = 0 ; % bajar a algo mas parecido a 1 s_y = 0 ; s_vx = 1∗(1 − lambda ) ; s_vy = 1∗(1 − lambda ) ; r_proc = [ sqrt ( s_x ) ∗ randn ( 1 , N ) ; sqrt ( s_y ) ∗ randn ( 1 , N ) ; sqrt ( s_vx ) ∗ randn ( 1 , N ) ; sqrt ( s_vy ) ∗ randn ( 1 , N ) ]; %−−−−−−−−−−−−−−− Q = cov ( r_proc ' ) ; % r u i d o de m e d i c i o n ( sigma e s t a d e f i n i d o cuando s e arma l a s e n a l de m e d i c i o n e s ) e t a 1 = sigma ; e t a 2 = sigma ; e t a 3 = sigma ; e t a 4 = sigma ; e t a 5 = sigma ; e t a = [ s q r t ( e t a 1 ) ∗ randn ( 1 ,N) ; s q r t ( e t a 2 ) ∗ randn ( 1 ,N) ; s q r t ( e t a 3 ) ∗ randn ( 1 ,N) ; s q r t ( e t a 4 ) ∗ randn ( 1 ,N) ; s q r t ( e t a 5 ) ∗ randn ( 1 ,N) ]; R = cov ( e t a ' ) ; %41 y 7 x_0_0 = [ p_0_0 = [ (41+1∗ round ( randn ( 1 , 1 ) ) ) ; (0+ 1∗ randn ( 1 , 1 ) ) ; (0+ 1∗ randn ( 1 , 1 ) ) ]; 1 0 0 0 ; 0 1 0 0 ; 0 0 1 0 ; 0 0 0 1 ]; x_k_k = x_0_0 ; p_k_k = p_0_0 ; f o r n =1: N , ; (7+ 1∗ round ( randn ( 1 , 1 ) ) ) C.5 Simulaciones 107 y_kk=mediciones ( n , : ) ' ; x kk k = [ x k k ( 1 ) + h∗ x k k ( 3 ) + ( h ˆ 2 ) . / 2 ∗ f o r c e x ( ( round ( x k k ( 2 ) ) ) , ( round←� ( x k k (1) ) ) ) ; x k k ( 2 ) + h∗ x k k ( 4 ) + ( h ˆ 2 ) . / 2 ∗ f o r c e y ( ( round ( x k k ( 2 ) ) ) , ( round←� ( x k k (1) ) ) ) ; lambda ∗ x k k ( 3 ) + h∗ f o r c e x ( ( round ( x k k ( 2 ) ) ) , ( round←� ( x k k (1) ) ) ) lambda ∗ x k k ( 4 ) ; + h∗ f o r c e y ( ( round ( x k k ( 2 ) ) ) , ( round←� ( x k k (1) ) ) ) ]; %d f /dx d e r i v a d a de l a d i n a m i c a d e l s i s t e m a ( random walk + mapa ) F = [1+h ˆ2/2∗ d f o r c e x d x ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) ˆ2/2∗ d f o r c e x d y ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) h h←� 0 ; h ˆ2/2∗ d f o r c e y d x ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) 1+h←� 0 ←� ˆ2/2∗ d f o r c e y d y ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) h ; h∗ d f o r c e x d x ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) ←� h∗ d f o r c e x d y ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) lambda 0 ; ←� ←� h∗ d f o r c e y d x ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) 0 ←� h∗ d f o r c e y d y ( ( round ( x k k ( 2 ) ) ) , ( round ( x k k ( 1 ) ) ) ) lambda ] ; p kk k = F ∗ p k k ∗ F ' + Q ; % dh / dx derivada del modelo de observacion H = [ −pot ∗ 2 ∗ ( x_k_k ( 1 )−aplocation ( 1 , 2 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 1 , 2 ) ) ←� −pot ∗ 2 ∗ ( x_k_k ( 2 )−←� ˆ2+( x_k_k ( 2 )−aplocation ( 1 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) aplocation ( 1 , 1 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 1 , 2 ) ) ˆ2+( x_k_k ( 2 )−←� aplocation ( 1 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) 0 0 ; −pot ∗ 2 ∗ ( x_k_k ( 1 )−aplocation ( 2 , 2 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 2 , 2 ) ) ←� −pot ∗ 2 ∗ ( x_k_k←� ˆ2+( x_k_k ( 2 )−aplocation ( 2 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) ( 2 )−aplocation ( 2 , 1 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 2 , 2 ) ) ˆ2+( x_k_k←� ( 2 )−aplocation ( 2 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) 0 0 ; −pot ∗ 2 ∗ ( x_k_k ( 1 )−aplocation ( 3 , 2 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 3 , 2 ) ) ←� −pot ∗ 2 ∗ ( x_k_k←� ˆ2+( x_k_k ( 2 )−aplocation ( 3 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) ( 2 )−aplocation ( 3 , 1 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 3 , 2 ) ) ˆ2+( x_k_k←� ( 2 )−aplocation ( 3 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) 0 0 ; −pot ∗ 2 ∗ ( x_k_k ( 1 )−aplocation ( 4 , 2 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 4 , 2 ) ) ←� −pot ∗ 2 ∗ ( x_k_k←� ˆ2+( x_k_k ( 2 )−aplocation ( 4 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) ( 2 )−aplocation ( 4 , 1 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 4 , 2 ) ) ˆ2+( x_k_k←� ( 2 )−aplocation ( 4 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) 0 0 ; −pot ∗ 2 ∗ ( x_k_k ( 1 )−aplocation ( 5 , 2 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 5 , 2 ) ) ←� −pot ∗ 2 ∗ ( x_k_k←� ˆ2+( x_k_k ( 2 )−aplocation ( 5 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) ( 2 )−aplocation ( 5 , 1 ) ) / alpha ∗ ( ( x_k_k ( 1 )−aplocation ( 5 , 2 ) ) ˆ2+( x_k_k←� ( 2 )−aplocation ( 5 , 1 ) ) ˆ 2 ) ˆ( −1/ alpha −1) s_kk = H ∗ p_kk_k ∗ H ' + R; 0 0 ; ]; C.5 Simulaciones 108 k kk = p k k k ∗ H ' ∗ ( s_kk ) ˆ( −1) ; fh = [ pot ∗ ( ( x_k_k ( 1 )−aplocation ( 1 , 2 ) ) ˆ2+( x_k_k ( 2 )−aplocation ( 1 , 1 ) ) ˆ 2 ) ˆ( −1/←� alpha ) ; pot ∗ ( ( x_k_k ( 1 )−aplocation ( 2 , 2 ) ) ˆ2+( x_k_k ( 2 )−aplocation ( 2 , 1 ) ) ˆ 2 ) ˆ( −1/←� alpha ) ; pot ∗ ( ( x_k_k ( 1 )−aplocation ( 3 , 2 ) ) ˆ2+( x_k_k ( 2 )−aplocation ( 3 , 1 ) ) ˆ 2 ) ˆ( −1/←� alpha ) ; pot ∗ ( ( x_k_k ( 1 )−aplocation ( 4 , 2 ) ) ˆ2+( x_k_k ( 2 )−aplocation ( 4 , 1 ) ) ˆ 2 ) ˆ( −1/←� alpha ) ; pot ∗ ( ( x_k_k ( 1 )−aplocation ( 5 , 2 ) ) ˆ2+( x_k_k ( 2 )−aplocation ( 5 , 1 ) ) ˆ 2 ) ˆ( −1/←� alpha ) ]; x_kk_kk = x_kk_k + k_kk ∗ ( y_kk − fh ) ; p_kk_kk = ( eye ( 4 , 4 )−k_kk ∗ H ) ∗ p_kk_k ; %next step x_k_k = x_kk_kk ; p_k_k = p_kk_kk ; %save estim ( : , n ) = x_kk_kk ; end % resultados % circulos verdes para la estimacion % trazo rojo para la verdad figure ( figindex ) contourf ( binmap , 1 ) hold , plot ( estim ( 1 , : ) , estim ( 2 , : ) , ' og ' ) plot ( secuencia ( : , 2 ) , secuencia ( : , 1 ) , ' r ' ) figindex=figindex +1; Apéndice D Caracterización por cuadrados mı́nimos load ( ' e n s a y o . mat ' ) modelo = −9.8∗[ sin ( tita ) , cos ( tita ) ] ; % en la variable datos estan las mediciones de los dos canales del % acelerometro en funcion de tita % % se crea la variable modelo que tiene la simulacion del mismo experimento % pero con un acelerometro ideal , tomando g =9.8 m / s ˆ2 Ax = [ modelo ( : , 1 ) ones ( length ( tita ) , 1 ) ]; Ay = [ modelo ( : , 2 ) ones ( length ( tita ) , 1 ) ] ; Yx = datos ( : , 1 ) ; Yy = datos ( : , 2 ) ; Xpx = ( ( Ax ' ∗Ax) ˆ−1)∗Ax ' ∗ Yx ; Xpy = ( ( Ay ' ∗Ay) ˆ−1)∗Ay ' ∗ Yy ; % en Xpx y Xpy estan las estimaciones de los parametros del modelo de % acelerometro , Xp = [ 1+E_e E_s ] 109 Apéndice E Formato de archivos En este apéndice se detallan los formatos utilizados en los distintos archivos que usa el programa. Para poder implementar el sistema de forma modular y probar sus partes por separado se establecieron interfaces entre los distintos bloques. Tanto la IMU como el sensor WiFi pueden ser reemplazados por archivos de texto para poder reproducir escenarios de prueba. Esto fue necesario para correr las simulaciones de montecarlo en software-in-the-loop para caracterizar y perfilar el navegador. E.1. Mediciones WiFi wifidata es la interfaz entre el navegador y la fuente de mediciones WiFi, que puede ser la versión modificada de airodump-ng o un archivo de texto plano. Por cada medición de RSSI se obtiene una serie de lineas formadas por: Un header: $START,BSSID,RSSI,RXQ,BEACON,DATA,DATAPS,ESSID,$ Una linea por cada AP en rango: $DATA,<MAC>,<RSSI>,XX,XX,XX,XX,<nombre>,$ donde <MAC> indica la dirección MAC o BSSID del AP, <RSSI> indica el nivel de señal, medido de acuerdo al fabricante del adaptador. En el caso del TL-WN321G de TPLINK la medición en en dBm. Las XX indican datos provistos por el sensor que no son usados en el filtro bayesiano. Estos valores son ignorados. Por último, <nombre> indica el nombre del AP, o ESSID. Un footer: $END,BSSID,RSSI,RXQ,BEACON,DATA,DATAPS,ESSID,$ A continuación se puede ver un ejemplo del stream de datos para una medición: 110 E.2 Mediciones inerciales - IMU 111 $START , BSSID , RSSI , RXQ , BEACON , DATA , DATAPS , ESSID , $ $DATA , 0 0 : 0 0 : E5 : 3 4 : A3 : 8 6 , − 4 3 , XX , XX , XX , XX , galileo , $ $DATA , 0 0 : 0 0 : BF : 1 5 : BD : 2 B , −43 , XX , XX , XX , XX , rusell , $ $DATA , 0 0 : 0 0 : 1 0 : CF : 5 8 : 1 C , −47 , XX , XX , XX , XX , laplace , $ $DATA , 0 0 : 0 0 : B6 : E5 : 8 C : 0 6 , − 4 7 , XX , XX , XX , XX , Helena , $ $DATA , 0 0 : 0 0 : B6 : E5 : 8 C : F6 , −43 , XX , XX , XX , XX , newguy , $ $END , BSSID , RSSI , RXQ , BEACON , DATA , DATAPS , ESSID , $ E.2. Mediciones inerciales - IMU imudata es la interfaz entre el navegador y la fuente de mediciones inerciales, que puede ser una IMU conectada al puerto serie o un archivo de texto plano. Por cada medición inercial se obtiene un linea como la siguiente: $IMUDATA,<timestamp>,<Ax>,<Ay>,<Az>,<Wx>,<Wy>,<Wz>,<prom> Donde IMUDATA es un header, <timestamp> un número entero que identifica temporalmente a la muestra, <Ai> es la fuerza especı́fica en el eje i (terna b), medida en cuentas del conversor AD de la LLC. Esta cantidad tiene que ser convertida a SI antes de usarla en el algoritmo inercial. <Wi> es la velocidad angular en el eje i (terna b), medida en cuentas del conversor AD de la LLC. Esta cantidad tiene que ser convertida a SI antes de usarla en el algoritmo inercial. y por último, <prom> indica la cantidad de mediciones que se tomaron y promediaron en la LLC, correspondientes a la presente muestra. A continuación se puede ver un ejemplo del stream de datos: $IMUDATA , 0 0 0 0 0 2 0 1 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 2 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 3 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 4 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 5 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 6 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 $IMUDATA , 0 0 0 0 0 2 0 7 , 1 9 8 8 , 2 0 4 8 , 2 0 4 8 , 1 5 2 6 , 1 5 2 6 , 1 5 2 6 , 1 6 E.3 Muestras de entrenamiento - histogramas E.3. 112 Muestras de entrenamiento - histogramas La información a priori o muestras de entrenamiento del filtro bayesiano se guardan en forma de histograma, clasificados por ubicación espacial donde fueron tomados. Por cada punto del espacio que se defina como dominio del filtro bayesiano se define un archivo de texto plano que contiene un histograma por cada AP en rango. Dentro del archivo correspondiente a un punto se define un histograma por linea, respetando el siguiente formato: <MAC>,<nombre>,<b99>, ... ,<b00>,<counts> <ref> Donde <MAC> indica la dirección MAC o BSSID del AP, <nombre> indica el nombre del AP (i.e. ESSID), <bi> indica el bucket del histograma, con i = 0 . . . 100, <counts> indica la cantidad total de mediciones en el histograma y por último, <ref> indica una referencia de la escala utilizada. A continuación se puede ver como ejemplo el archivo correspondiente a una posición particular con los histogramas de los AP en rango desde esa ubicación: 8 9 1 0 5 2 1 8 8 5 9 , rusell , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,16 ,33 ,104 ,37 ,9 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 9 7 5 5 7 7 7 7 4 1 4 , Helena , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,34 ,73 ,91 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 1 2 0 5 4 1 1 0 8 2 5 2 , laplace , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,4 ,27 ,43 ,77 ,38 ,11 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 1 3 2 6 9 4 4 5 1 0 7 8 , galileo , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,21 ,75 ,101 ,1 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 0 0 [ −99 dBm . . . 0 dBm ] 1 4 2 4 2 8 6 1 5 6 9 7 , DlinkHall , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 8 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 8 0 [ −99 dBm . . . 0 dBm ] 1 4 7 4 9 0 5 9 7 1 3 3 , FIUBA − BIBLIOTECA − 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,183 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , 0 , 0 , 1 8 3 [ −99 dBm . . . 0 dBm ] Bibliografı́a [1] 802.11 beacons revealed http://www.wi-fiplanet.com/tutorials/print.php/1492071. [2] Beacon frames, 802.11 devices, and kismet http://www.techrepublic.com/blog/opensource/beacon-frames-80211-devices-andkismet/3279. [3] Extended kalman filter https://en.wikipedia.org/wiki/extended kalman filter. [4] Ieee 802.11 http://en.wikipedia.org/wiki/ieee 802.11. [5] An overview of mems inertial sensing technology http://www.sensorsmag.com/sensors/acceleration-vibration/an-overview-memsinertial-sensing-technology-970. [6] Un gps en el movil para no caerse del mapa http://www.lanacion.com.ar/1449290-un-gps-en-el-movil-para-no-caerse-del-mapa. [7] Vibrating structure gyroscope http://en.wikipedia.org/wiki/vibrating structure gyroscope. [8] J. Bilbao, A. Olozaga, E. Bravo, O. Garcı́a, C. Varela, and M. Rodrı́guez. How design an unmanned aerial vehicle with great efficiency in the use of existing resources. International Journal of Computers, (4):442–451. [9] R. Chandra, J. Padhye, L. Ravindranath, and A. Wolman. Beacon-stuffing: Wi-fi without associations. In Mobile Computing Systems and Applications, 2007. HotMobile 2007. Eighth IEEE Workshop on, pages 53–57. IEEE, 2007. [10] A.B. Chatfield. Fundamentals of high accuracy inertial navigation, volume 174. AIAA (American Institute of Aeronautics & Astronautics), 1997. [11] Jorge Miguel Brito Domingues. Quadrotor prototype, 2009. 113 BIBLIOGRAFÍA 114 [12] D. Eberly. Quaternion algebra and calculus. Magic Software, Inc, 21, 2002. [13] N. El Sheimy, EW Shin, and X. Niu. Kalman filter face-off: Extended vs. unscented kalman filters for integrated gps and mems inertial. In Proceedings of the International Symposium on Global Navigation Satellite Systems (GNSS’06), pages 48–54, 2006. [14] F. Evennou and F. Marx. Advanced integration of wifi and inertial navigation systems for indoor mobile positioning. EURASIP journal on applied signal processing, 2006:164– 164, 2006. [15] K. Frank, B. Krach, N. Catterall, and P. Robertson. Development and evaluation of a combined wlan & inertial indoor pedestrian positioning system. In ION GNSS, 2009. [16] S. Gezici, Z. Tian, G.B. Giannakis, H. Kobayashi, A.F. Molisch, H.V. Poor, and Z. Sahinoglu. Localization via ultra-wideband radios: a look at positioning aspects for future sensor networks. Signal Processing Magazine, IEEE, 22(4):70–84, 2005. [17] S. Gupte, P.I.T. Mohandas, and J.M. Conrad. A survey of quadrotor unmanned aerial vehicles. IMU, 21(26):35–72. [18] R.E. Kalman et al. A new approach to linear filtering and prediction problems. Journal of basic Engineering, 82(1):35–45, 1960. [19] H. Liu, H. Darabi, P. Banerjee, and J. Liu. Survey of wireless indoor positioning techniques and systems. Systems, Man, and Cybernetics, Part C: Applications and Reviews, IEEE Transactions on, 37(6):1067–1080, 2007. [20] M. Matsumoto and T. Nishimura. Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator. ACM Transactions on Modeling and Computer Simulation (TOMACS), 8(1):3–30, 1998. [21] Anindya S. Paul and Eric A. Wan. Wi-fi based indoor localization and tracking using sigma-point kalman filtering methods. Position, Location and Navigation Symposium, 2008 IEEE/ION, pages 646 – 659, 2008. [22] L. Pei, R. Chen, J. Liu, H. Kuusniemi, T. Tenhunen, and Y. Chen. Using inquirybased bluetooth rssi probability distributions for indoor positioning. Journal of Global Positioning Systems, 9(2):122–130, 2010. [23] M. Quan, E. Navarro, and B. Peuker. Wi-fi localization using rssi fingerprinting. 2010. [24] S. Riisgaard and M.R. Blas. Slam for dummies. A Tutorial Approach to Simultaneous Localization and Mapping, 22:1–127, 2003. BIBLIOGRAFÍA 115 [25] R.M. Rogers. Applied mathematics in integrated navigation systems. Number v. 1 in AIAA education series. American Institute of Aeronautics and Astronautics, 2003. [26] E.H. Shin and N. El-Sheimy. An unscented kalman filter for in-motion alignment of low-cost imus. In Position Location and Navigation Symposium, 2004. PLANS 2004, pages 273–279. IEEE, 2004. [27] D.H. Titterton and J.L. Weston. Strapdown inertial navigation technology, volume 17. Peter Peregrinus Ltd, 2004. [28] R. Van Der Merwe and E.A. Wan. Sigma-point kalman filters for integrated navigation. In Proceedings of the 60th Annual Meeting of the Institute of Navigation (ION), pages 641–654, 2004. [29] J.H. Wang. Intelligent MEMS INS/GPS integration for land vehicle navigation, volume 67. University Microfilms International, P. O. Box 1764, Ann Arbor, MI, 48106, USA, 2006. [30] GV Zaruba, M. Huber, FA Kamangar, and I. Chlamtac. Indoor location tracking using rssi readings from a single wi-fi access point. Wireless networks, 13(2):221–235, 2007.