Download sistema de localización para redes inalámbricas de
Document related concepts
no text concepts found
Transcript
UNIVERSITAT JAUME I DE CASTELLÓN Escuela Superior de Tecnología y Ciencias Experimentales II31 - Sistemas Informáticos Memoria Técnica del Proyecto SISTEMA DE LOCALIZACIÓN PARA REDES INALÁMBRICAS DE SENSORES MEDIANTE ZIGBEE Director: Raúl Marín Prades Alumno: Sandra Pallarés Gual Fecha: 30 – 03 - 2009 2 Resumen El proyecto ha consistido en el diseño e implementación de un sistema de localización espacial para redes inalámbricas de sensores con el protocolo IEEE 802.15.4, conocido como ZigBee. Este estándar se caracteriza por ser un sistema de bajo coste, con envío de datos de baja capacidad (kbps), bajo consumo de energía, corto alcance, seguro y fiable. Las redes inalámbricas de sensores se encuentran catalogadas como redes ad-hoc, se distinguen por estar compuestas de un conjunto autónomo y espontáneo de routers móviles, conectados por enlaces inalámbricos que no precisan de una infraestructura fija. Se proyectan para operar en ambientes hostiles e irregulares, siendo capaces de modificar su topología para adoptar nuevas formas y mantener la red igual de funcional. Sus aplicaciones en la actualidad resultan ser muy extensas, tales como redes de área personal, entornos militares, entornos ciudadanos, operaciones de emergencia, recolección de información medioambiental, como los más destacados. En la implementación del sistema se ha buscado obtener un sistema altamente preciso dentro de las posibilidades, se dispone de una fuerte limitación al emplear la fuerza de la señal en los cálculos. La fuerza de la señal, también conocida como RSS (Received Signal Strength), no es más que la atenuación de la señal recibida, y en base a ella, se puede estimar la distancia que separa un nodo de la red de otro. El problema que se genera surge de la relación distancia/potencia de la señal, la presencia de reflexiones, difracciones y multitrayecto, alteran los valores que puede tomar la RSS en una misma situación, presentando un carácter dinámico y difícil de predecir. Como requisito de esta clase de redes, una parte de los nodos que integran la red inalámbrica deben jugar el rol de puntos de referencia para el resto, esto quiere decir, que se debe conocer la ubicación de los nodos en el espacio y, por consiguiente, que estos no puedan variar su posición perdiendo así la capacidad de movilidad. El sistema ha sido desarrollado sobre la plataforma proporcionada por Crosbow, la cual esta constituida por 4 nodos inalámbricos programados en nesC y un programa servidor para la recepción de los paquetes provenientes desde la red. La aplicación se compone de los módulos programados para los nodos, así como una de una interfaz en C# para la edición de los parámetros de configuración y la visualización de los puntos calculados por el sistema de localización programado. La planificación recogida en el documento detalla la lista de actividades llevadas a cabo así como las estimaciones realizadas para cada una de ellas. También se provee de un listado de los recursos empleados en el proyecto y un seguimiento de la planificación. Palabras Clave Ad Hoc, RRS, ZigBee, nesC, trilateración 3 4 Índice General 1.- INTRODUCCIÓN ..................................................................................................... 9 1.1.- Motivación............................................................................................................. 9 1.2.- Objetivos del proyecto .......................................................................................... 10 1.3.- Conceptos esenciales............................................................................................. 10 1.3.1.- Introducción a las redes Ad-Hoc............................................................................. 10 1.3.2.- ZigBee............................................................................................................. 11 1.4.- Estructura del documento ..................................................................................... 12 2.-PLANIFICACIÓN ..................................................................................................... 15 2.1.- Planificación temporal............................................................................................ 15 2.2.- Estimación de los recursos...................................................................................... 18 3.- PLATAFORMA DE DESARROLLO ........................................................................... 19 3.1. Hardware de la plataforma....................................................................................... 19 3.1.1.- Estación base .................................................................................................... 19 3.1.2.- Nodo inalámbrico .............................................................................................. 20 3.1.3.- Sensor ............................................................................................................. 20 3.2. Software de la plataforma ........................................................................................ 21 3.2.1.- XMESH........................................................................................................... 21 3.2.2.- XSERVE .......................................................................................................... 22 3.2.3.- Herramientas de desarrollo................................................................................... 22 3.3. TinyOS y nesC ....................................................................................................... 22 4.- ALGORITMOS DE LOCALIZACIÓN ........................................................................ 25 4.1. Introducción........................................................................................................... 25 4.2. ToA (Tiempo de llegada)......................................................................................... 26 4.3. AoA (Ángulo de llegada).......................................................................................... 27 4.4. RSS (Fuerza de la señal recibida) .............................................................................. 27 4.5. APS (Ad-hoc positioning system).............................................................................. 28 4.6. Métodos de estimación para la técnica RSS ................................................................ 30 4.6.1.- Triangulación y trilateración................................................................................ 30 4.6.2.- Reconocimiento de patrones .................................................................................. 32 4.7. Refinamiento de las localizaciones ............................................................................ 33 4.7.1.- Filtro de partículas............................................................................................. 33 4.7.2.- Filtro de Kalman ............................................................................................... 33 4.7.3.- Modelos Ocultos de Markov (HMM) ....................................................................... 33 5.-DISEÑO................................................................................................................... 35 5.1. Esquema del sistema de comunicaciones.................................................................... 35 5.2. Diagrama de clases de la aplicación ........................................................................... 37 5 4-IMPLEMENTACIÓN.................................................................................................. 41 6.1. Algoritmo de localización adoptado .......................................................................... 41 6.2. Chip de radio.......................................................................................................... 45 6.3. Sistema de comunicaciones ...................................................................................... 48 6.3.1.- Estructura de los paquetes .................................................................................... 49 6.3.2.- Nodo móvil (coordenadas desconocidas) ................................................................... 51 6.3.3.- Estación Base .................................................................................................... 53 6.3.4.- Nodo de referencia (coordenadas fijas)..................................................................... 54 6.4. Aplicación cliente para la monitorización .................................................................. 54 7.- RESULTADOS......................................................................................................... 59 7.1. Experimentos con el chip de radio y la fuerza de la señal............................................. 59 7.2. Experimentos con el sistema de localización .............................................................. 64 8.-SEGUIMIENTO Y CONTROL DEL PROYECTO......................................................... 69 8.1. Control de la planificación ....................................................................................... 69 8.2. Seguimiento de la planificación................................................................................. 70 7.-CONCLUSIONES ..................................................................................................... 73 7.1. Grado de cumplimiento de los objetivos iniciales ...................................................... 73 7.2. Posibles extensiones del proyecto............................................................................. 75 A.- PROGRAMACIÓN EN nesC..................................................................................... 77 A.1. Características de nesC ........................................................................................... 77 A.2. Estructura de una aplicación .................................................................................... 79 A.2.1.- Makefile .......................................................................................................... 79 A.2.2.- Makefile.component............................................................................................ 79 A.2.3.- Configuración de la aplicación.............................................................................. 80 A.2.4.- Módulo de implementación................................................................................... 81 A.3. Componentes empleados en el proyecto................................................................... 83 A.3.1.- Componente GenericComm ................................................................................... 83 A.3.2.- Componente HPLCC2420C.................................................................................. 85 B.- PUESTA EN MARCHA DEL SISTEMA....................................................................... 87 6 Índice de Ilustraciones Ilustración 1: Diagrama de Gantt con la planificación del proyecto desde el 13 de octubre hasta el 21 de noviembre . 16 Ilustración 2: Diagrama de Gantt con la planificación del proyecto desde el 24 de noviembre hasta 4 de enero........ 16 Ilustración 3: Diagrama de Gantt con la planificación del proyecto desde el 5 de enero hasta 15 de febrero............. 17 Ilustración 4: Diagrama de Gantt con la planificación del proyecto desde el 16 de febrero hasta el 3 de marzo ........ 17 Ilustración 5: Asignación de tareas para cada uno de los recursos. ................................................................. 18 Ilustración 6: Estación Base MIB520 ..................................................................................................... 20 Ilustración 7: Mote MICAz a 2.4 GHz ................................................................................................... 20 Ilustración 8: Sensor MDA100 ............................................................................................................. 21 Ilustración 9: DToA cálculo de distancias................................................................................................ 26 Ilustración 10: Medición de los ángulos de llegada .................................................................................... 27 Ilustración 11: Ad-hoc positioning system............................................................................................... 29 Ilustración 12: Comparativa entre las diversas opciones del APS.................................................................... 29 Ilustración 13: Sistema de triangulación/trilateración............................................................................... 30 Ilustración 14: Reducción del problema de la triangulación a una trilateración................................................ 31 Ilustración 15: Esquema de comunicaciones entre nodos.............................................................................. 36 Ilustración 16: Esquema de comunicaciones entre la red de motes y el XServe ................................................... 37 Ilustración 17: Diagrama de clases de la aplicación................................................................................... 38 Ilustración 18: Esquema de las partes de un Mote Micaz............................................................................. 42 Ilustración 19: RSSI calculado teóricamente frente al RSSI real.................................................................... 43 Ilustración 20: Refinamiento de la localización ........................................................................................ 45 Ilustración 21: Campos del registro de configuración del control de la ganancia ............................................... 46 Ilustración 22: Diferentes valores para la relación señal ruido...................................................................... 48 Ilustración 23: Estructura de los paquetes................................................................................................ 50 Ilustración 24: Interfaz gráfica de la aplicación ....................................................................................... 55 Ilustración 25: Formulario de carga de las coordenadas de los nodos de referencia ............................................. 56 Ilustración 26: Interfaz para la configuración del sistema ........................................................................... 56 Ilustración 27: Gráfico con los resultados de diversos canales con el máximo poder de emisión, para el control automático de la ganancia................................................................................................................... 60 Ilustración 28: Gráfico con los resultados de diferentes potencias de emisión con un mismo canal, para el control automático de la ganancia................................................................................................................... 60 Ilustración 29: Gráfico con los resultados de la fuerza de la señal para grandes distancias, sin y con obstáculos, para el control automático de la ganancia......................................................................................................... 61 Ilustración 30: Proceso de recolección de datos para distancias grandes ........................................................... 61 Ilustración 31: fuerza de la señal sin control automático, con ganancia máxima............................................... 62 Ilustración 32: Fuerza de la señal sin control automático y con ganancia mínima. ............................................ 62 Ilustración 33: Camino seguido por el robot para la realización de los experimentos .......................................... 63 Ilustración 34: Posición del robot en un escenario real (1) ........................................................................... 64 Ilustración 35: Posición estimada del robot en un escenario real (1) ............................................................... 65 Ilustración 36: Posición del robot en un escenario real (2) ........................................................................... 65 Ilustración 37: Posición estimada del robot en un escenario real (2) ............................................................... 66 Ilustración 38: Posición del robot en un escenario real (3) ........................................................................... 66 Ilustración 39: Posición estimada del robot en un escenario real (3) ............................................................... 67 Ilustración 40: Estimación del error cometido por el sistema de localización..................................................... 67 Ilustración 41: Diagrama de GANTT real del proyecto desde el 13 de octubre hasta el 30 de noviembre................. 70 Ilustración 42: Diagrama de GANTT real del proyecto desde el 1 de diciembre hasta el 18 de enero...................... 70 Ilustración 43: Diagrama de GANTT real del proyecto desde el 19 de enero hasta el 8 de marzo ......................... 71 7 Ilustración 44: Diagrama de GANTT real del proyecto desde el 9 de marzo hasta el 12 de marzo......................... 71 Ilustración 45: Variaciones de cada una de las tareas respecto a la estimación inicial......................................... 72 8 Capitulo 1. Introducción 1 1.- INTRODUCCIÓN En este capítulo aparece descrita la motivación del proyecto, los objetivos fijados, una recopilación de conceptos previos que son indispensables para la posterior comprensión del resto de apartados y, finalmente, un desglose de las secciones en que se encuentra estructurado el presente documento. Como conceptos previos se han considerado relevantes exponer las características detalladas de las redes ad-hoc y las ventajas e inconvenientes del estándar ZigBee. 1.1.- Motivación La localización en interiores es una de las áreas más prometedoras en el campo de la computación móvil. Estos sistemas permiten desarrollar innumerables aplicaciones gracias al posicionamiento de objetos o personas en tiempo real. Alguno de los principales servicios están relacionados con el control de accesos, gracias a la identificación de los usuarios, la seguridad en red, basada en la localización física de los usuarios; servicios de emergencia y estadísticas. La problemática de la localización en interiores ha sido objeto de un intenso estudio e investigación durante los años anteriores. Hasta ahora, ninguna de las soluciones propuestas ha conseguido el éxito que han alcanzado los sistemas de localización y navegación empleados en exteriores, como el GPS. Las razones de este fracaso han sido técnicas, necesidad de una evolución tecnológica, y también económicas, debido a la cantidad de infraestructuras fijas que se precisan (sensores, puntos de control, estaciones base, …). El enfoque que se le ha dado al proyecto apunta hacia la seguridad, de modo que se pueda tener la localización de una persona monitorizada en cada momento, pudiendo reaccionar en caso de que ocurriera alguna emergencia. 9 1.2.- Objetivos del proyecto 1.2.- Objetivos del proyecto El objetivo principal del proyecto es diseñar e implementar un sistema de localización espacial que pueda ser integrado en la plataforma proporcionada por Crossbow. Esta plataforma dispone de un módulo de radio que puede estimar la RSS, y puede emplear placas de sensores con diferentes prestaciones. Recibe el nombre de “MoteWorks”, en ella se incluye por una parte, el hardware necesario para la comunicación entre los nodos y por otra, el software donde se encuentran implementados los algoritmos de rutado, así como el procesamiento y almacenamiento de la información entre el ordenador y la red. Otras funcionalidades soportadas son la monitorización de la red y el almacenamiento de la información sobre una base de datos, las cuales no van a ser utilizadas para los objetivos fijados por el proyecto. El segundo de los objetivos consiste en la obtención de resultados lo más precisos posibles, dentro de las limitaciones que son impuestas por la plataforma de trabajo. La precisión del sistema vendrá marcada por la RSS, factor utilizado durante la estimación de la distancia y sobre el cual se producen fuertes variaciones, ocasionadas por reflexiones, difracciones y multitrayecto. Como se va a monitorizar la trayectoria que sigue un objeto móvil, peden ser aplicados filtros que aporten una mayor calidad a los resultados generados. Por otra parte, los nodos pueden presentar configuraciones diversas en cuanto a potencia de envío de la señal o al canal utilizado para transmitir (modificación de la frecuencia de la señal). La modificación de la configuración va a generar repercusiones en la variación del valor de la RSS para una misma distancia, según los parámetros seleccionados. Esta circunstancia introduce como objetivo que el sistema sea configurable, para así poder adaptarse al mayor número de situaciones. Además, si se desea trabajar sobre un entorno del cual no se dispone ningún tipo de información no supondrá ningún problema, puesto que el sistema no se encuentra ligado a una estructura prefijada. 1.3.- Conceptos esenciales 1.3.1.- Introducción a las redes Ad-Hoc Las redes Ad-Hoc son un conjunto autónomo y espontáneo de routers móviles, conectados por enlaces inalámbricos que no precisan de una infraestructura fija. Se proyectan para operar en ambientes hostiles e irregulares, siendo capaces de modificar su topología para adoptar nuevas formas y mantener la red igual de funcional. Sus aplicaciones en la actualidad resultan ser muy extensas, tales como redes de área personal, entornos militares, entornos ciudadanos, operaciones de emergencia, recolección de información medioambiental, como los más destacados. Las características de este tipo de redes se detallan a continuación: 10 Capitulo 1. Introducción Movilidad: Los nodos son móviles de manera que la topología de la red pueda cambiar continuamente, creándose y destruyéndose los enlaces dinámicamente. Nodos autónomos y sin infraestructura: No se dispone de una administración centralizada, cada nodo opera en modo “peer-to-peer” actuando como un router independiente. Encaminamiento “multihop” (múltiples saltos): No se requiere un router dedicado al encaminamiento, cada nodo de la red se comporta como un router y envía paquetes procedentes de otros nodos. Ancho de banda limitado: Al disponer de una interfaz inalámbrica las comunicaciones se ven atenuadas por interferencias de señales electromagnéticas. Consumo de energía: Los nodos están alimentados por baterías. El control de la potencia se vuelve un aspecto clave para estas redes, puesto que se desea que los nodos sean independientes y activos el mayor tiempo posible. 1.3.2.- ZigBee ZigBee es el nombre de la especificación de un conjunto de protocolos de alto nivel de comunicación inalámbrica para su utilización con radios digitales de bajo consumo, basada en el estándar IEEE 802.15.4 de redes inalámbricas de área personal (wireless personal area network, WPAN). Su objetivo son las aplicaciones para redes Wireless que requieran comunicaciones seguras y fiables con baja tasa de envío de datos y maximización de la vida útil de sus baterías. IEEE 802.15.4 es un estándar que define el nivel físico y el control de acceso al medio de redes inalámbricas de área personal con tasas bajas de transmisión de datos (low-rate wireless personal area network, LR-WPAN). La actual revisión del estándar se aprobó en 2006. El grupo de trabajo IEEE 802.15 es el responsable de su desarrollo. También es la base sobre la que se define la especificación de ZigBee, cuyo propósito es ofrecer una solución completa para este tipo de redes construyendo los niveles superiores de la pila de protocolos que el estándar no cubre. El nombre “ZigBee” se deriva de los patrones erráticos comunicativos que hacen muchas abejas entre las flores durante la recogida de polen. Esto es evocador de las redes invisibles de las conexiones existentes en un entorno totalmente inalámbrico. Actualmente, ZigBee es un sistema ideal para redes domóticas específicamente diseñado para reemplazar la proliferación de sensores/actuadores individuales. ZigBee fue creado para cubrir la necesidad del mercado de un sistema de bajo coste, un estándar para redes “Wireless” de pequeños paquetes de información, bajo consumo, seguro y fiable. Las características detalladas son presentadas a continuación: ZigBee, también conocido como “Homero Lite”, es una tecnología inalámbrica con velocidades comprendidas entre 20 kB/s y 250 kB/s. 11 1.3.- Conceptos esenciales Los rangos de alcance son de 10 a 75 metros. Puede usar las bandas libres ISM de 2.4 GHz (Mundial), 868 MHz (Europa) y 915 MHz (EEUU). Una red ZigBee puede estar formada por hasta 255 nodos los cuales tienen la mayor parte del tiempo el transmisor ZigBee en modo pausado con objeto de consumir menos que otras tecnologías inalámbricas. Un sensor equipado con un transmisor ZigBee puede ser alimentado con dos pilas AA durante al menos 6 meses y hasta 2 años. Acceso de canal mediante CSMA/CA (acceso múltiple por detección de portadora con evasión de colisiones). Escalabilidad de red. Fragmentación, capacidad para dividir mensajes más largos y permitir la interacción con otros protocolos y sistemas. Agilidad de frecuencia, las redes cambian los canales en forma dinámica en caso que ocurran interferencias. Recolección centralizada de datos. 1.4.- Estructura del documento El proyecto se ha estructurado en 9 capítulos y dos anexos. A continuación se va a realizar una breve descripción de los contenidos tratados en cada uno de ellos. 12 ◊ Capítulo 1: Recoge la motivación y los objetivos del proyecto, además de introducir los conceptos básicos relacionados con las redes inalámbricas de sensores. ◊ Capítulo 2: Se detallan las actividades y los recursos que se han estimado para el desarrollo del proyecto. ◊ Capítulo 3: Se describe la plataforma de desarrollo proporcionada por el fabricante Crossbow, así como el hardware y sus características principales. ◊ Capítulo 4: Se exponen las diversas técnicas existentes para el diseño de sistemas de localización espacial, así como la refinación de sus resultados. Capitulo 1. Introducción ◊ Capítulo 5: Recoge los aspectos de diseño del sistema de localización desarrollado. ◊ Capítulo 6: Se expone la solución adoptada, así como los detalles de implementación del sistema. ◊ Capítulo 7: Aparecen recopilados los experimentos generados tras el desarrollo del sistema, describiendo los resultados obtenidos. ◊ Capítulo 8: Se realiza un control y seguimiento de la planificación temporal estimada en el capítulo 2 tras la finalización el proyecto. ◊ Capítulo 9: Se describen las conclusiones a las que se ha llegado tras la finalización del sistema y se exponen las líneas futuras de trabajo disponibles. ◊ Anexo A: Recoge ejemplos de la programación en nesC, a modo de un pequeño tutorial. ◊ Anexo B: Describe como empezar a trabajar con el sistema diseñado. 13 14 Capitulo 2. Planificación 2 2.-PLANIFICACIÓN Tras la definición del ámbito del proyecto, en esta sección se presenta el desglose de tareas llevado a cabo durante su desarrollo, así como, los recursos utilizados para desempeñar cada una de ellas. 2.1.- Planificación temporal Seguidamente se va a desglosar el desarrollo del proyecto en diversas tareas, para las cuales se realizó una estimación previa de su duración. Estas tareas se agrupan a su vez en varias categorías: Análisis, Estudio, Diseño e Implementación. En el análisis se determina el ámbito del proyecto, se establecen los requisitos y se determina la tecnología a emplear. En el estudio, tras haber sido escogida la tecnología a emplear, se debe proceder a la adquisición de los conocimientos necesarios para poder llevar a cabo un diseño que cumpla con las especificaciones dictaminadas en el periodo de análisis. El diseño recogerá los diagramas UML que definen la estructura de la aplicación a desarrollar, mostrando las partes de que se compone, así como, las funcionalidades que presenta cada parte. Finalmente, la implementación consiste en la programación de los módulos que van a integrar la aplicación, basándose en los diseños realizados tras el estudio. El inicio del proyecto según la planificación estimada es el 13 de octubre y la fecha de finalización el 12 de marzo. Los días empleados en la realización del proyecto ascienden a un total de 81 días. 15 2.1.- Planificación temporal En las ilustraciones 1, 2 y 3 se puede apreciar la planificación realizada mediante la herramienta de Microsoft Office llamada Project 2003. Ilustración 1: Diagrama de Gantt con la planificación del proyecto desde el 13 de octubre hasta el 21 de noviembre La parte más extensa como se puede observar es la dedicada a la implementación, puesto que se divide en tres partes: prototipo de comunicaciones, aplicación final y evaluación y pruebas. El prototipo de comunicaciones sirve para verificar los aspectos estudiados sobre la plataforma y hacer de esqueleto del sistema. En la aplicación final se reaprovecha la base de comunicaciones y se mejora para los 4 motes de que consta el sistema final, además, en esta sección es donde se implementa todo el algoritmo de localización espacial diseñado. Finalmente la evaluación y las pruebas testean el sistema para verificar el cumplimiento de los requisitos y objetivos. Ilustración 2: Diagrama de Gantt con la planificación del proyecto desde el 24 de noviembre hasta 4 de enero. 16 Capitulo 2. Planificación El apartado del estudio, es una sección también amplia debido a que nunca se ha trabajado anteriormente con este tipo de plataforma, además de que tampoco se ha programado para el sistema operativo en cuestión y se desconocen sus características. Con esta decisión de conceder este tiempo al estudio se quiere conseguir reducir el tiempo de diseño y las posibles rectificaciones que podrían surgir por falta de conocimiento sobre el entorno de desarrollo. El tiempo del diseño aunque sea reducido resulta suficiente para realizar unos diagramas eficientes que cubran los requisitos especificados por el sistema a desarrollar. Además, los diagramas deben de pasar la validación del tutor, con lo cual se obtiene un diseño completo y validado. Ilustración 3: Diagrama de Gantt con la planificación del proyecto desde el 5 de enero hasta 15 de febrero. La planificación realizada fue una buena estimación para el transcurso del proyecto, no obstante surgieron algunos imprevistos que produjeron el retraso de ciertas tareas. Las modificaciones sufridas por el plan original se encuentran recopiladas en el apartado de Seguimiento y Control de la planificación. Ilustración 4: Diagrama de Gantt con la planificación del proyecto desde el 16 de febrero hasta el 3 de marzo 17 2.2.- Estimación de recursos 2.2.- Estimación de los recursos Para el desarrollo del proyecto aparte de realizar una estimación de las tareas, también se hizo una planificación de los recursos necesarios. En cuanto a los recursos humanos se disponen del programador (el propio alumno) y el director del proyecto (el tutor). Los materiales empleados son los proporcionados por la plataforma “Moteworks”, estos se corresponden de 4 motes (nodos) y una estación base. El programador por su parte aporta el ordenador donde instalar el entorno de trabajo y desarrollar el sistema. Ilustración 5: Asignación de tareas para cada uno de los recursos. 18 Capitulo 3. Plataforma de desarrollo 3.- PLATAFORMA DE DESARROLLO 3 PLATAFORMA DE DESARROLLO Este capítulo describe la tecnología sobre la que se ha basado el sistema de localización espacial. Son detallados tanto el hardware como el software de que provee Crossbow para trabajar con redes inalámbricas de sensores. 3.1. Hardware de la plataforma 3.1.1.- Estación base La estación base es la encargada de actuar de mediadora entre la red inalámbrica de sensores y el ordenador. Un nodo que se encuentre emplazado sobre la estación base es capaz de recibir paquetes de la red o enviar paquetes vía el puerto USB hacia el ordenador. El modelo de placa del que se dispone usa el puerto USB para las comunicaciones con el PC, pero otros modelos existentes disponen de otros sistemas. El modelo sobre el que se va a desarrollar el proyecto es el MIB520 (ilustración 6). El fabricante provee de unos “drivers” para cada modelo de estación base, que generan dos COMMs de comunicaciones, uno para la programación de los nodos y otro para escuchar los paquetes provenientes de la red inalámbrica. Normalmente, el COMM con identificador más bajo es el empleado para la programación y el alto para las comunicaciones. La plataforma, así como los drivers suministrados, se encuentran disponibles sólo para entornos Windows, por ese motivo el desarrollo se ha desenvuelto sobre este sistema operativo. 19 3.1.- Hardware de la plataforma Ilustración 6: Estación Base MIB520 3.1.2.- Nodo inalámbrico Los nodos inalámbricos poseen una fuente de energía propia, que no es más que un par de baterías AA emplazadas en el nodo. Como ya se comentó anteriormente, este tipo de red se caracteriza por reducir los costes energéticos, consiguiendo así prolongar el tiempo de vida medio de cada uno de los nodos que integran la red. El modelo disponible se corresponde con un MicaZ a 2.4 GHz. Se componen de un microprocesador, una memoria flash, un modulo de radio, un pin 51 para las conexiones entre dispositivos, tres Leds y un identificador generado por el fabricante. Ilustración 7: Mote MICAz a 2.4 GHz 3.1.3.- Sensor En la actualidad, Crossbow ha diseñado una amplia gamma de sensores compatibles con su plataforma, los cuales cubren diferentes aspectos según las necesidades que se tengan. El modelo del que se dispone es un modelo empleado en las labores de captura de valores medio ambientales, encontrándose disponibles la medición de la temperatura y la luz ambiental. 20 Capitulo 3. Plataforma de desarrollo El modelo recibe el nombre de MDA100 y se puede encontrar una imagen en la ilustración 8. Para los fines fijados en el proyecto no es necesario el empleo de estos sensores, puesto que no son tomados valores ambientales para realizar los cálculos del sistema de localización. Ilustración 8: Sensor MDA100 3.2. Software de la plataforma La plataforma proporcionada por Crossbow recibe el nombre de Moteworks. Esta plataforma esta diseñada para la creación de redes inalámbricas de sensores e incluye tres niveles de software: Mote (Nodo), Servidor, Cliente. El software recopilado en el nivel cliente no va a ser utilizado puesto que el algoritmo de localización espacial va a ser un software de ese mismo nivel. 3.2.1.- XMESH La funcionalidad en el nivel del Mote (Nodo) se encuentra recopilada en la librería llamada XMesh. Esta librería desarrolla un protocolo para redes de sensores inalámbricos, donde los nodos pueden comunicarse con el resto y son capaces de enviar mensajes de radio saltando entre los nodos hacia la estación base, la cual actúa de puente entre la red y el ordenador. Esta capacidad de salto amplia el rango de radio de las comunicaciones y reduce la potencia de transmisión de los mensajes, lo cual alarga el tiempo de vida de las baterías que incorporan los nodos. XMesh proporciona dos beneficios importantes, mejora la cobertura de la radio y mejora también la fiabilidad de las transmisiones. Dos nodos no necesitan estar en contacto directo para poder comunicarse entre ellos. Un mensaje puede ser entregado a uno o más nodos en el camino que sigue hasta que llega a su destino. Si existe un nodo caído entre dos nodos, ese obstáculo puede ser salvado encontrando un nodo cercano con el que pueda continuar su camino. Típicamente, los nodos que trabajan en modo de bajo consumo, pasan la mayor parte de su tiempo en un estado de reposo, de modo que puedan mantener su autonomía durante años. 21 3.2.- Software de la plataforma 3.2.2.- XSERVE El nivel del servidor por su parte, actúa de puerta de enlace entre la red inalámbrica y las aplicaciones en el ordenador que requieran interactuar con la información que es recibida de ella. Debido a la baja potencia y a los requisitos de memoria que presentan las redes inalámbricas de sensores, la comunicación resulta ser más eficaz a través de mensajes sin formato y los protocolos de la red. Este software servidor es llamado XServe, y proporciona servicios de análisis, transformación y procesamiento de la información recibida desde la red, incluyendo una API XML para la comunicación con otras aplicaciones clientes. Otra funcionalidad que incorpora XServe es el almacenamiento de información en una base de datos, de modo que la información enviada por los sensores pueda ser monitorizada para realizar análisis con las lecturas obtenidas. Esto es muy utilizado para fines agrónomos puesto que los sensores registran los valores medioambientales. La plataforma de trabajo Moteworks está adaptada para funcionar sobre el sistema operativo Windows, emplea la herramienta denominada Cygwin para proporcionar un comportamiento similar a los sistemas Unix en cuanto a gestión de redes. Posee una biblioteca que implementa la API POSIX usando para ello llamadas a la API nativa de Windows Win32. 3.2.3.- Herramientas de desarrollo Las redes de tipo ad-hoc sufren ciertas limitaciones en cuanto a los recursos que disponen los nodos, por ese motivo, se trabaja bajo un sistema operativo empotrado llamado TinyOS programado en nesC. La plataforma Moteworks provee de Programers Notepad 2, una herramienta que dispone de un compilador acondicionado para el sistema operativo TinyOS. 3.3. TinyOS y nesC El sistema operativo que poseen los nodos de la red inalámbrica, recibe el nombre de TinyOS y permite la ejecución de programas en el hardware de que disponen. Está basado en componentes para redes inalámbricas de sensores y escrito en el lenguaje de programación nesC, como un conjunto de tareas y procesos que colaboran entre sí. Su diseño permite la incorporación de nuevas innovaciones rápidamente y hace que funcione bajo las importantes restricciones de memoria que se dan en este tipo de redes. TinyOS proporciona interfaces, módulos y configuraciones específicas, que permiten a los programadores construir programas como una serie de módulos que hacen tareas específicas. Los módulos de TinyOS proporcionan interfaces para los tipos estándar de entradas y salidas de 22 Capitulo 3. Plataforma de desarrollo hardware y sensores. Para una profundización en la programación en nesC se puede recurrir al apéndice A que presenta el documento. 23 24 Capitulo 4. Algoritmos de localización 4.- ALGORITMOS DE LOCALIZACIÓN 4 ALGORITMOS DE LOCALIZACIÓN Este capítulo recoge los diversos algoritmos de localización espacial que se han estudiado para el desarrollo del proyecto. Se exponen los diversos factores que son empleados en este tipo de sistemas y las diversas técnicas que posibilitan el filtrado de los resultados, para tratar de ajustar con mayor precisión los puntos generados. En la sección de implementación se describe la solución adoptada para cubrir los objetivos fijados de antemano. 4.1. Introducción Para redes del tipo ad-hoc, caracterizadas por constar de un gran número de nodos desatendidos con ciertas capacidades de medición (incorporadas en el propio nodo o en placas sensoras acoplables a los nodos), lo habitual, es basarse en estas mediciones a la hora de desarrollar algoritmos de cálculo espacial de posiciones. Estas capacidades son diversas y son enumeradas a continuación: ToA (Tiempo de llegada) AoA (Ángulo de llegada) RSS (Fuerza de la señal) La explotación de más de una de ellas incrementa la precisión obtenida en la estimación de las posiciones. Según los dispositivos de que se disponga pueden ser combinadas. 25 4.1.- Introducción El uso de estos recursos provee un algoritmo semejante en prestaciones al GPS o a las brújulas magnéticas, sin la necesidad de una infraestructura extra, pero a cambio los nodos deben colaborar entre ellos para poder encontrar sus coordenadas. Ello implica que un cierto número de nodos en la red tenga que permanecer como puntos de referencia para el resto, con posiciones previamente fijadas de antemano. La pregunta que surge es cómo obtiene sus propias coordenadas un nodo. Existen diversos modos para lograrlo. El primero es incorporar un dispositivo GPS en el propio nodo para que obtenga su localización, y el otro es por la introducción humana de esta. El inconveniente de la inserción de nuevas infraestructuras es que se pierde una de las ventajas que disponen las redes ZigBee y es el factor económico. La suma de nuevos dispositivos encarece la implantación de la red y hace que sean viables otras salidas en vez de este tipo de redes. 4.2. ToA (Tiempo de llegada) La técnica ToA (“Time of Arrival” ) se basa en el hecho de que una señal electromagnética tarda un tiempo en llegar de emisor a receptor. Hay una relación lineal entre tiempo de propagación y distancia recorrida, y por ello, mediante técnicas de triangulación se puede inferir la distancia que los separa. Adicionalmente, está la técnica TDoA (“Time difference of Arrival”), similar pero que hace uso de dos señales, cada una con velocidades de propagación diferentes. La primera de ellas es una señal de radio que tiene un tiempo de propagación TR; la segunda, en cambio, es una señal acústica cuyo tiempo de propagación se expresa como TS. La ilustración 9 muestra este comportamiento. Ilustración 9: TDoA cálculo de distancias Como el tiempo que tarda en llegar una señal de radio de un transmisor a un receptor situado a pocos metros es muy pequeña, se puede asimilar a un tiempo 0. Por ello, se observa cuánto tiempo más ha tardado la recepción de la señal acústica, y multiplicándolo por su velocidad de propagación, se obtiene una medida bastante precisa de la distancia. 26 Capitulo 4. Algoritmos de localización 4.3. AoA (Ángulo de llegada) Las técnicas AoA (“Angle of Arrival”) son comunes en el procesado de señales con “arrays”. En lugar del uso de una sola antena, se despliegan varias antenas de forma que se pueda inferir el ángulo de llegada de la señal. Después de esto, la estimación de la localización se basa en la triangulación de estos ángulos. Aunque el sistema es bastante preciso, no cualquier dispositivo posee un “array” de antenas con lo que se precisaría un hardware adicional para poder implantar un sistema de este tipo. Un inconveniente que presenta esta técnica, es que resulta efectiva únicamente para el caso de transmisiones donde no se produzcan multitrayectos. En caso de haberlos, cuando un dispositivo recibe la señal puede pensar que la señal proviene de otro lugar al medir el ángulo de una señal reflejada. Este tipo de sistemas resultan por tanto útiles en espacios despejados donde residan el menor número de objetos posibles para poder realizar estimaciones bastante aceptables. Ilustración 10: Medición de los ángulos de llegada 4.4. RSS (Fuerza de la señal recibida) Esta técnica usa la atenuación de la señal recibida para inferir la localización del nodo con posición desconocida. En base a esta atenuación se puede estimar la distancia que separa los nodos, pero la relación distancia/potencia de la señal recibida no es un valor estable y lineal. Se ve afectada por las reflexiones, difracciones y multitrayectos que se presentan en las transmisiones. 27 4.4.- RSS (Fuerza de la señal recibida) Esta opción no requiere de infraestructuras adicionales, aunque por las variaciones que se pueden producir en la fuerza de la señal se recomienda emplear algún otro método que propicie una mayor precisión al sistema. Esto se puede lograr mediante el empleo de alguna de las técnicas comentadas o por medio de un filtrado de los resultados a posteriori. 4.5. APS (Ad-hoc positioning system) El problema en las redes punto a punto (Ad Hoc), es que un nodo puede comunicarse únicamente con sus vecinos inmediatos, los cuales puede que no sean siempre nodos de referencia. APS es un hibrido entre dos conceptos principales: vector de distancias de rutado y posicionamiento GPS. Lo que lo hace similar al vector de distancias de rutado es el hecho que la información es enviada a través de los nodos saltando entre ellos, de modo que los puntos de referencia propagan sus datos al resto de nodos aunque ellos no estén accesibles directamente. Por otra parte, lo que lo hace similar al posicionamiento del GPS, es que eventualmente cada nodo estima su propia posición basada por las lecturas conseguidas de los puntos estáticos. El APS trabaja tanto con distancias, como con orientaciones, de modo que se pueda conseguir una mayor precisión en los resultados. Para ello, los nodos que no estén en contacto directo con los puntos de referencia deben de poder inferir sus orientaciones. Cuando hablamos de orientación nos encontramos ante diferentes métodos, DV-Bearing y DV-Radial. El primero permite a cada nodo conseguir la orientación del propio eje respecto los otros nodos y el segundo permite al nodo obtener tanto la orientación respecto los otros nodos como la orientación respecto el Norte (radial). El algoritmo asume que el nodo A posee una orientación propia representada por el eje sobre A en la ilustración 11, de modo que son conocidos los ángulos ĉ y b̂ , vecinos inmediatos. Además C y B conocen los ángulos respecto sus orientaciones y el vecino inmediato L. Con lo que el problema es para A encontrar su orientación respecto L. Como B y C son los vecinos de A, es factible para A obtener los ángulos del triángulo ∆ABC y ∆BCL , permitiendo de este modo calcular el ángulo LAˆ C que sumado al propio ĉ da como resultado el ángulo respecto de la orientación de A al nodo L. Para el caso de emplear también el radial aparte de conocer la orientación respecto B y C, se debe de conocer también el radial de B ( BLˆ N ) y el de C ( CLˆ N ) respecto el nodo L, de modo que se pueda calcular el radial de A ( ALˆ N ) a través de los dos triángulos que se conocen. 28 Capitulo 4. Algoritmos de localización Ilustración 11: Ad-hoc positioning system El problema de emplear tanto el radial como la orientación independiente de cada nodo es que hay que enviar sobre la red inalámbrica el doble de señales, pero si se dispone de una brújula en cada uno de los nodos, los dos métodos en efecto se convierten en idénticos porque cuando todos los ángulos están medidos frente a la misma dirección de referencia (Norte, por ejemplo), la orientación entre dos nodos pasa a ser la de la Ecuación 4.5.1. orientación = π − radial Ecuación 4.5.1 A continuación se va a presentar una ilustración que refleja cómo la utilización de uno o los dos métodos comentados, influye sobre la congestión de la red y la precisión del algoritmo. Ilustración 12: Comparativa entre las diversas opciones del APS 29 4.6.- Métodos de estimación para la técnica RSS 4.6. Métodos de estimación para la técnica RSS 4.6.1.- Triangulación y trilateración La triangulación se basa en la propiedad de que si se conocen los puntos que forman los vértices de un triángulo y los ángulos interiores de este, es posible determinar cualquier posición interna al triángulo. La trilateración por su parte, en vez de emplear los ángulos requiere el conocimiento de las distancias a los vértices, pero sigue unas pautas similares al anterior. Para hallar el punto desconocido en el método de la triangulación, se debe encontrar el punto de intersección entre los tres puntos estáticos y el punto a calcular. En la ilustración 13 se puede observar un ejemplo de la situación comentada. Ilustración 13: Sistema de triangulación/trilateración Para el cálculo del punto en el caso de la trilateración, se puede recurrir a la resolución de un sistema de ecuaciones, el cual utiliza los puntos que forman el triángulo (xi ,yi), y la distancia que los separa de él (di), donde i representa cada uno de los vértices de triángulo. La expresión empleada es presentada en la Ecuación 4.6.1, y se obtiene al aplicar las propiedades de la fórmula de la distancia euclídea. ( x − xi ) 2 + ( y − yi ) 2 = d i2 {i = 1,..., n} Ecuación 4.6.1 Si pasamos la expresión a un sistema linear, este podrá ser resulto por cualquier método estándar de resolución de sistema de ecuaciones, como puede ser aplicar Gauss, entre otros. La nueva expresión se corresponde con la Ecuación 4.6.2. 2 x( xi − x1 ) + 2 y ( yi − y1 ) = d12 − d i2 + xi2 − x12 + yi2 − y11 {i = 2,..., n} 30 Ecuación 4.6.2 Capitulo 4. Algoritmos de localización La pregunta que queda por responder entonces, es cómo obtener una expresión que permita calcular el sistema pero con los ángulos del triángulo. El modo es reducir el problema a una trilateración mediante unas simples transformaciones. Ilustración 14: Reducción del problema de la triangulación a una trilateración Si disponemos del ángulo que forma D con el par de puntos de referencia A y B, se puede inferir que su posición se encuentra en algún lugar en el círculo determinado por el ángulo y la posición de los dos puntos fijos A y B. En la ilustración 14 se encuentra reflejada esta situación, los puntos xa , ya , xb , yb y el ángulo ADˆ B son conocidos, lo cual ayuda a transformar el sistema de () un problema de triangulación de tamaño n en una trilateración de tamaño n2 , si para cada par de de puntos de referencia observados por un nodo se crea una ecuación de trilateración usando x, y, x0 , y0 y el radio del circulo como la distancia. Otro método de localización que utiliza ángulos es VOR (VHS Omni-directional Range), el cual está actualmente todavía siendo empleado en navegación de aeronaves. Su principio es muy simple: un punto de referencia envía dos señales, una que es periódica y omnidireccional, mientras que la otra es unidireccional y gira sobre el punto de referencia. El equipamiento de la nave recibe las dos señales e interpreta la diferencia como un radial a la estación. Las coordenadas de la estación son conocidas, por lo tanto se ubica en cualquier punto dentro de la línea dada otro lector de señales. Este segundo lector proporciona una segunda línea que debe ser intersecada con la primera. El resultado son las coordenadas y el radial al punto de referencia i ( xi , yi , ri ) , con lo que un nodo puede construir la ecuación de la línea en la cual se encuentra ubicado, detallada en la Ecuación 4.6.3. ai x + bi y = ci Ecuación 4.6.3 Además si tenemos en cuenta el radial calculado, y combinamos la ecuación de la línea con él obtenemos lo siguiente: if cos(ri ) = 0 ai = 1; bi = 0; ci = xi ; else ai = tan(ri ); 31 4.6.- Métodos de estimación para la técnica RSS bi = −1; ci = − yi + xi tan(ri ); Donde el sistema lineal resultante se puede observar en la Ecuación 4.6.4. x [ aT | bT ] = [cT ] y Esta aproximación es menos cara computacionalmente que la expuesta anteriormente de la reducción a un problema de trilateración, pero requiere la introducción de una brújula en los puntos de referencia de modo que se puede calcular el radial. 4.6.2.- Reconocimiento de patrones Las técnicas de reconocimiento de patrones, o “fingerprinting”, intentan encajar el vector de potencias recibidas (RSS) procedente de varios puntos estáticos, con una muestra de calibración sin necesidad de usar algoritmos geométricos. Para su uso, primero hay que obtener un radio mapa patrón, que se podría almacenar en una base de datos. La RSS se puede calcular de forma teórica, con el uso de un modelo de predicción de potencias, o bien se puede obtener de forma práctica en cada punto de interés la potencia recibida. La ventaja de este método frente la triangulación es que los cálculos son más reducidos, y a diferencia del anterior, la discretización del entorno hace que no sea posible obtener una localización que no se haya definido. Por el contrario, la ventaja de la triangulación es que puede localizar en cualquier punto del espacio por no haberse discretizado sobre ninguna habitación. Los cálculos que permiten la estimación de la localización en los algoritmos de reconocimiento de patrones son sencillos y cambian según sea el método a emplear, pero se basan en, dado un vector de potencias, encontrar la localización que tenga el vector de potencias más parecido. El mayor reto de estos sistemas, es diferenciar entre dos posiciones con parecidos vectores de potencia. 32 Capitulo 4. Algoritmos de localización 4.7. Refinamiento de las localizaciones Un sistema de localización basado en ZigBee no tendrá un buen rendimiento en términos de error cometido, si sólo se basa en la determinación de la RSS para cada uno de los puntos de referencia. Esto, como ya se ha comentado anteriormente, está causado por las difracciones, reflexiones y multitrayectos presentes en la señal, los cuales son impredecibles. Existen diferentes algoritmos para el refinamiento de la localización, en base a múltiples estimaciones de la localización en momentos consecutivos. A continuación se van a exponer los más relevantes. 4.7.1.- Filtro de partículas El filtro de partículas tiene como principal objetivo realizar el seguimiento de una variable de interés, la posición del nodo móvil, y su evolución a lo largo del tiempo. Para ello, se utiliza una función de distribución de probabilidad no gaussiana. Las acciones del nodo móvil modifican el estado de la variable siguiendo un modelo predefinido. Cada cierto tiempo se obtienen observaciones que comprueban el estado de la posición del nodo. El algoritmo es recursivo, y opera en dos fases: predicción y actualización. Después de cada acción, cada partícula se modifica de acuerdo con el modelo existente (predicción), incluyendo una aportación de ruido aleatorio para simular el efecto del ruido en la variable de interés. Entonces, el peso de cada partícula es evaluado basándose en la última información de observación disponible (actualización). En cada iteración, las partículas con un peso muy bajo se eliminan y se realiza un nuevo muestreo. 4.7.2.- Filtro de Kalman Los filtros de Kalman, al igual que los filtros de partículas, son capaces de calcular la distribución de probabilidad a posteriori en tiempo real. Resuelve la estimación de distribución de probabilidad a posterior sobre los posibles mapas y posiciones del nodo móvil, en función de las observaciones y acciones almacenadas. El inconveniente que presentan es el elevado coste computacional. 4.7.3.- Modelos Ocultos de Markov (HMM) El algoritmo basado en HMM (Hidden Markov Models) presenta un conjunto de estados, correspondientes a las posiciones del nodo móvil, y observaciones que se modelan de la misma manera que en los filtros de Kalman, pero además, se añade una matriz de probabilidad de transición que indica la probabilidad de pasar de una estado a otro. 33 4.7.- Refinamiento de las localizaciones Esta matriz se inicializa suponiendo que dicha probabilidad es mayor entre estados adyacentes, ya que representa el movimiento de un usuario que se desplaza de forma lenta. Asimismo, en el contexto de la localización, se pueden modelizar con este modelo de modo muy natural, paredes y puertas, ya que entre dos habitaciones no comunicadas entre sí por estar separadas por una pared, la probabilidad de transición será 0, mientras que la probabilidad de ir de una habitación a otra, las cuales estén separadas por una puerta, será no nula. 34 Capitulo 5. Diseño 53 5.-DISEÑO La sección de diseño recopila los diagramas UML (Unified Modeling Language) generados como paso previo a la implementación del sistema. Además se muestra un esquema del sistema de comunicaciones empleado entre los nodos de la red y el ordenador. 5.1. Esquema del sistema de comunicaciones El sistema de localización espacial implementado consta de una red de 4 motes más una estación base que hace de puente con el ordenador. La jerarquía de red esta compuesta por una parte móvil formada por un único nodo y una parte estática (requerimiento del algoritmo de localización) formada por los tres motes restantes. Por otro lado uno de los nodos estáticos debe permanecer conectado a la estación base. Los detalles sobre el algoritmo de localización espacial se verán descritos en la sección de implementación, en la parte de diseño tan solo se describen los aspectos imprescindibles para la compresión de los esquemas. El sistema de comunicación se basa en la emisión por parte del nodo móvil, de una secuencia de paquetes a cada uno de los motes que actúa de punto de referencia, recolectando de ese modo un cierto número de muestras, el cual va a servir para obtener un valor ponderado de la fuerza de la señal desde ese nodo a los restantes. El motivo para hacer esto es que el algoritmo de localización espacial, precisa de las distancias entre el nodo desconocido y los otros integrantes de la red para poder realizar sus cálculos. Dentro del sistema diseñado se estima a partir de la fuerza de la señal el valor de la distancia. 35 5.1.- Esquema del sistema de comunicaciones La ilustración 15 representa el esquema de las comunicaciones que se producen entre los puntos de la red y por otra banda la ilustración 16 se centra en las comunicaciones que se producen una vez el ordenador ha captado la información desde la estación base. MOTE 2 MOTE 3 MOTE 1 2 1 3 MOTE 4 4 Ilustración 15: Esquema de comunicaciones entre nodos. Tras la recolección de información nodo a nodo, el flujo de información en la ilustración 15 numerado como 4 representa el envío de los datos finales al sistema para que realice los cálculos pertinentes. Los datos enviados a la estación base son transmitidos a través del cable USB conectado a esta, hacia el software servidor proporcionado por la plataforma “Moteworks” llamado XServe. Este módulo permite la visualización de los datos posibilitando su procesamiento para ser expresados en las unidades correspondientes. Por otro lado, también permite la conexión de subscriptores a un puerto determinado para la lectura de tramas XML con la información enviada. 36 Capitulo 5. Diseño Mote Estación Base PC Server Tier SOCKET Gateway Server SW (“XServe”) Serial Forwarder APLICACIÓN XOtap XMesh XML Databas e Custom Ilustración 16: Esquema de comunicaciones entre la red de motes y el XServe 5.2. Diagrama de clases de la aplicación Tras el diseño de las comunicaciones, en este apartado se van a comentar cada una de las clases que componen el diseño de clases realizado como paso previo a la implementación. La ilustración 17 recoge el diseño UML (Unified Modeling Language) generado tras el análisis. LocationEngineForm Esta clase actúa como la ventana principal de la aplicación, consta de un componente de gráficos donde se van a ir dibujando las posiciones de los nodos, a medida que se vayan calculando y además se ocupa de la gestión de los hilos, de modo que pueda suspenderlos o reanudarlos según las exigencias del usuario. 37 5.2.- Diagrama de clases de la aplicación Permite también la configuración del algoritmo de localización para que pueda adaptarse a las diversas configuraciones que pueden presentar los nodos. CargaPuntosForm Esta clase actúa de formulario para la introducción de las posiciones de los motes estáticos de la red de sensores, los cuales son imprescindibles para los cálculos realizados por el sistema. LocationEngineForm CargaPuntosForm CThreadCalculator 1 CThreadListener 1 * 1 * CPunto CBuffer CSockectXml * CPacketXml Ilustración 17: Diagrama de clases de la aplicación CThreadCalculator Esta clase es la base del algoritmo de localización, es la encargada de resolver el sistema de ecuaciones a partir de los datos proporcionados por la clase CThreadListener y posteriormente publicarlos en la vista principal para su visualización. 38 Capitulo 5. Diseño CThreadListener Esta clase se ocupa de la gestión de las comunicaciones entre la red y la aplicación. Establece un socket con el software proporcionado por la plataforma “Moteworks” llamado “XServe ” y almacena en un buffer los CPacketXml devueltos por este, para que el CThreadCalculator pueda acceder a ellos y así realizar los cálculos pertinentes. CSocketXml Esta clase extiende la funcionalidad proporcionada por el propio objeto Socket, de modo que aquello que es recibido como una trama xml, se procesa y convierte en una nueva estructura llamada CPacketXml, contenedora solo de aquellos datos que son necesarios en etapas posteriores. CPacketXml Esta clase es empleada como contenedor de los datos enviados por los motes, consta de tres elementos de tipo “double” que representan la fuerza de la señal entre el nodo con posición desconocida y un de los nodos con ubicación fija (un total de tres motes fijados). CBuffer Esta clase actúa de almacén de estructuras CPacketXml, para el intercambio de información entre la clase CThreadCalculator y CThreadListener. CPunto Esta clase actúa de contenedor de datos, almacenado las coordenadas X e Y de las posiciones de los nodos en el espacio. 39 40 Capitulo 6. Implementación 6 4-IMPLEMENTACIÓN Este capítulo recoge la implementación del sistema de localización diseñado, describiendo en detalle el sistema de comunicaciones, el algoritmo empleado, y el chip de radio subministrado por Crossbow. Aspectos básicos en cuanto a la programación sobre esta plataforma pueden ser encontrados en los anexos para una mayor compresión por parte del lector. 6.1. Algoritmo de localización adoptado En esencia, los sistemas presentados se basan para realizar los cálculos de los siguientes factores: Ángulo de llegada de la señal Diferencia de tiempos de llegada Fuerza de la señal Como lo que se desea es aplicar un algoritmo de localización espacial sobre una plataforma determinada, como es la proporcionada por Crossbow, se va a pasar a exponer los dispositivos que incorpora para saber sobre que tipo de algoritmo se va a poder trabajar posteriormente. Los nodos de que se dispone son el modelo MicaZ a 2.4 GHz, en la ilustración 18 se pueden observar los elementos que lo constituyen, los cuales son descritos a continuación: 41 6.1.- Algoritmo de localización adoptado Un módulo de radio que permite la recepción y emisión de paquetes por la red, así como la estimación de la fuerza de la señal. Un microprocesador capaz de ejecutar instrucciones en nesC, lenguaje similar al C. Un conector del tipo 51-pin, para la comunicación entre el propio nodo y los sensores compatibles con él. Además es el medio por el cual se programan los nodos. Serial ID, identificador único establecido por el fabricante. Logger Flash, para el registro de información. Con estos componentes que vienen de fábrica en los nodos se puede emplear un algoritmo de localización espacial que base sus cálculos en la distancia entre los vecinos inmediatos (trilateración), puesto que según la fuerza de la señal que se estime durante la recepción de una paquete se puede saber, con un cierto grado de error, la distancia a la que se encuentra el emisor. Aunque dentro de las técnicas basadas en RSS también se encuentra la de reconocimiento de patrones, se debe descartar esta técnica porque impide el cumplimiento de uno de los objetivos del proyecto, y es que se adapte al mayor número de situaciones posibles. Emplear este algoritmo, obliga a que el entorno sobre el que se implante el sistema de localización sea uno del que se hayan podido extraer muestras previamente. El empleo de un único factor para la estimación de las posiciones ocasiona una menor precisión en los resultados, pero para compensarlo, en la obtención de las distancias entre los nodos se ha buscado el método que aporte mayor precisión en los cálculos y, por otro lado, que se pueda adaptar a las diferentes configuraciones que pueden presentar los motes (los cuales varían la frecuencia y la intensidad de envío). El empleo de un filtro para el refinamiento de las localizaciones, aunque no es capaz de eliminar el error al cien por cien, reduce considerablemente el error introducido. Ilustración 18: Esquema de las partes de un Mote Micaz 42 Capitulo 6. Implementación Como ya se expuso en la sección donde se describía la trilateración, el método para encontrar las coordenadas de un nodo móvil entre puntos de referencia se basa en la resolución de un sistema de ecuaciones lineal, Ecuación 6.1.1. 2 x( xi − x1 ) + 2 y ( yi − y1 ) = d12 − d i2 + xi2 − x12 + yi2 − y11 {i = 2,..., n} Ecuación 6.1.1 El problema que se tiene en realidad no es la resolución del sistema, sino la estimación de las distancias que son necesarias para ello, puesto que el empleo de la fuerza de la señal introduce un elevado porcentaje de error en los cálculos. Este error viene marcado por los objetos que puedan actuar de obstáculos en la trayectoria de los paquetes, los rebotes de las señales durante el transcurso del envío hasta el receptor, o incluso la propia congestión del canal puede alterar los cálculos de la fuerza de la señal debido a alteraciones sobre la señal original. La fuerza de la señal recibida se halla en función del poder de transmisión y la distancia entre el emisor y el receptor. Esta teóricamente, se debe reducir según se vaya incrementando la distancia entre ambos, la ecuación 6.1.2 refleja su comportamiento teórico. RSS = −(10n log10 d + A) Ecuación 6.1.2 Donde las partes de la ecuación 6.1.2 son: n: Constante que representa la propagación de la señal. d: Distancia al emisor. A: Valor de la fuerza de la señal a una distancia de un metro. RSS: Fuerza de la señal (Received Signal Strength) La ilustración 19 recoge el comportamiento de la fuerza de la señal para el caso teórico (primera figura) frente al caso real (tercera figura), el cual dista mucho de ser un comportamiento regular. Ilustración 19: RSS calculado teóricamente frente a la RSS real En la práctica los valores que se obtienen cuando se mide la fuerza de la señal presentan valores muy dispares debido a la degradación de la señal cuando se encuentra moviéndose por el medio de difusión. Las oscilaciones que se producen dificultan a la hora de conseguir unas buenas estimaciones de las distancias, puesto que la gráfica generada pasa de ser una recta decreciente a ser una curva que decrece pero con muchos altibajos. La idea que se persigue al trabajar con la 43 6.1.- Algoritmo de localización adoptado fuerza de la señal, es tratar de conseguir esa curva decreciente lo más suavizada posible (ilustración 19 figura 2), lo cual se consigue al trabajar con valores de RSS ponderados. El algoritmo de localización implementado trabaja con valores de RSS ponderados con 10 transmisiones, aunque cuantos más valores son empleados se obtiene una mayor precisión, también se incorpora una mayor congestión en la red y una mayor espera en las respuestas del sistema. Por ese motivo se decidió que 10 valores darían robustez al sistema sin resultar en una pérdida de prestaciones por parte de él. La expresión para el cálculo de la RSS presenta dos parámetros que confieren configurabilidad al sistema. Se adaptan a los cambios de potencia de emisión y al propio entorno de comunicaciones y estos son A y N. A hace referencia a la fuerza de la señal a un metro de distancia, debería ser teóricamente igual en todas las direcciones, pero esto en la práctica no se cumple, puesto que dicho valor es calculado de modo diferente en cada uno de los diversos receptores, debido a que las antenas poseen un comportamiento isotópico. En definitiva, la estimación de este valor debe obtenerse de la ponderación de las fuerzas de la señal recibidas tras diversos envíos. Tras cada cambio de la potencia de la señal debe reajustarse este parámetro. N describe como la fuerza de la señal decrece cuando la distancia hacia el transmisor sube. Es altamente dependiente del entorno de difusión. Por ejemplo, el grosor de las paredes que envuelven a los nodos puede influenciar en los resultados. Este valor puede ser obtenido únicamente empíricamente. Toma valores de 0 hasta 31. Para saber cual es el valor idóneo para el entorno con el que se va a trabajar, debe de realizarse una calibración previa basada en la prueba de diversos valores hasta encontrar el que mejor se ajuste. En conclusión, se va a emplear la fórmula presentada con los valores de A y N que se obtengan tras una prueba inicial del sistema para encontrar los que mejor resultados presenten. De la expresión obtendremos las distancias que separan al nodo móvil de los puntos de referencia, las cuales serán empleadas en el sistema de ecuaciones propuesto por el algoritmo de trilateración ya comentado. La expresión resultante aparece ilustrada en la ecuación 6.1.3. d = 10 RSS + A −10 n Ecuación 6.1.3 El punto que se obtenga tras la resolución del sistema, no es pintado inmediatamente en la interfaz, antes de ello, debe pasar por un refinamiento para que el porcentaje de error sea filtrado y, de ese modo, reducido. En el capítulo 4 se han expuesto diversos algoritmos para el refinamiento de localizaciones, pero ninguno de ellos se adapta a las necesidades de que se dispone. Los algoritmos del tipo HMM precisan de un conocimiento previo del entorno, para la generación de matrices de transición entre estados, los cuales representarían las habitaciones que hay en una planta. Este motivo nos obliga a descartar este tipo de filtro, puesto que no se va a disponer de ese conocimiento del espacio donde la red va a trabajar. 44 Capitulo 6. Implementación Los filtros de Kalman o de partículas, por su parte, presentan un coste computacional demasiado alto, aunque sirven como base para el filtro que se ha utilizado para refinar los puntos calculados. La suposición que se ha hecho es la siguiente, el nodo móvil se encuentra alojado sobre un robot móvil el cual presenta velocidades uniformes no elevadas. Esto implica que para diversas observaciones tomadas en cortos instantes de tiempo, las posiciones que puede tomar el nodo móvil vienen delimitadas por las posiciones adyacentes que se pueden alcanzar dada la velocidad del robot. Por tanto, como el tiempo entre observaciones es fijo y se puede indicar a la interfaz la velocidad del robot, se puede conocer la distancia a la que se puede llegar entre varias emisiones de datos. Según la posición de las ruedas del robot está distancia puede verse afectada, aumentándola o disminuyéndola, pero el filtro ha conseguido reducir el error cometido. La ilustración 20 muestra un esquema del comportamiento del filtro. Ilustración 20: Refinamiento de la localización 6.2. Chip de radio El módulo de radio integrado en los nodos es el chip CC2420 a 2.4 GHz, diseñado para redes inalámbricas de bajo consumo (bajo voltaje y bajo poder de emisión). La señal recibida es amplificada por el amplificador de bajo ruido que incorpora, el cual es un dispositivo electrónico usado en sistemas de comunicación para amplificar débilmente las señales capturadas por una antena, y posteriormente, se aplica una demodulación de amplitud en cuadratura. Esta modulación se caracteriza por transportar los datos cambiando la amplitud de dos ondas portadoras. Estas portadoras tienen igual frecuencia pero están desfasadas ̟/2 radianes entre sí. Comúnmente se utiliza para la transmisión de datos a alta velocidad por canales con ancho de banda restringido. 45 6.2.- Chip de radio La amplificación del modelo CC2420 se realiza mediante un procesamiento variable de la ganancia de la señal, el cual esta vinculado a un control automático de la ganancia. Los registros internos del chip de comunicaciones permiten realizar modificaciones sobre la configuración del control de la ganancia, pudiendo escoger entre un modo de ganancia automático y otro con ganancia fija. Los valores para la segunda modalidad de control oscilan entre valores bajos, medios y altos, predeterminados internamente por el hardware (aunque también existe una secuencia de bits dentro del registro que permite fijar por el usuario un valor de ganancia a aplicar). La ilustración 21 recoge la descripción de todos los campos dentro del registro de configuración. Ilustración 21: Campos del registro de configuración del control de la ganancia El envío de las señales a través del medio de difusión depende de diversos factores que pueden ser configurados en el chip de comunicaciones, estos son el poder de emisión y el canal empleado para transmitir. El poder de emisión es el consumo que se produce en cada emisión, cuanto mayor sea, mas desgaste de las baterías se va a producir, por otra parte, el canal no es más que la frecuencia que se emplea al emitir la señal, se pueden producir solapamientos de la señal enviada con emisiones cercanas que se encuentren dentro de la misma banda, o canales contiguos. Para el modelo de nodo que se dispone (MicaZ) y el chip de radio integrado que se posee, existen diversas configuraciones, tanto el poder de emisión como el canal de transmisión pueden tomar diferentes valores especificados por el hardware. A continuación se van a describir dichos valores para el modelo CC2420, disponible para los nodos de la red inalámbrica. 46 Poder de emisión: ◊ -25 dBm ◊ -15 dBm ◊ -10 dBm ◊ -5 dBm ◊ 0 dBm (Consumo mínimo) (Consumo máximo) Capitulo 6. Implementación Canal de emisión: ◊ Canal 11 – 2405 MHz ◊ Canal 12 – 2410 MHz ◊ Canal 13 – 2415 MHz ◊ Canal 14 – 2420 MHz ◊ Canal 15 – 2425 MHz ◊ Canal 16 – 2430 MHz ◊ Canal 17 – 2435 MHz ◊ Canal 18 – 2440 MHz ◊ Canal 19 – 2445 MHz ◊ Canal 20 – 2450 MHz ◊ Canal 21 – 2455 MHz ◊ Canal 22 – 2460 MHz ◊ Canal 23 – 2465 MHz ◊ Canal 24 – 2470 MHz ◊ Canal 25 – 2475 MHz ◊ Canal 26 – 2480 MHz Los criterios que hacen que se escoja un valor u otro, varían entre preservar el consumo para tratar de maximizar la vida útil de las baterías y tratar de emitir a distancias lo más extensas posibles, como los más relevantes. Para conseguir mayores distancias se debe enviar paquetes con el máximo poder de emisión para que la señal tarde más tiempo en degradarse y pueda así conseguir alcanzar puntos más lejanos. Además hay que reducir la frecuencia al mínimo, empleando el canal más bajo (siempre que la probabilidad de solapamiento con otras señales en la misma banda lo permita), de modo que la forma de la señal presente una apariencia más estirada y se vea menos afectada al ruido. En el caso de que se pretenda únicamente ahorrar en consumo, solamente se debe configurar la potencia de envío como la mas baja y escoger el canal de comunicaciones que se crea oportuno. El sistema de localización, por tanto, enfoca su configuración hacia la emisión de paquetes a distancias lo más extensas posibles, de modo que se pueda abarcar una mayor extensión. Decidida la configuración de la potencia de emisión y su frecuencia, tan solo queda lidiar entre una configuración de la ganancia automática o estática. Con una ganancia automática resulta muy difícil eliminar las oscilaciones de la señal, puesto que al detectar que la señal va disminuyendo se inyecta una ganancia más alta, lo cual ocasiona que para distancias más lejanas el valor de la RSS sea más buena que para zonas más próximas. Este comportamiento no es el deseado, el error aportado sería demasiado elevado. En conclusión, se va a configurar el chip con un control estático de la ganancia. La siguiente cuestión a resolver tras saber que es mejor el control estático sobre uno automático, es averiguar que valor de ganancia se debe emplear para obtener mejores resultados. Para ello, se va a introducir el concepto de relación señal/ruido (SNR) como el margen que hay entre la potencia de la señal que se transmite y la potencia del ruido que la corrompe (medido en 47 6.3.- Sistema de comunicaciones decibelios). Cuanto menor sea la diferencia entre la señal y el ruido, menor calidad va a tener la señal transmitida. La ilustración 22 recoge este comportamiento. Ilustración 22: Diferentes valores para la relación señal ruido Cuando se amplifica la señal la potencia de la señal se ve aumentada, pero al mismo tiempo el ruido es acentuado también, con lo que el valor de la relación señal/ruido se ve disminuido y esto empeora la calidad de la señal. En conclusión, el uso del mínimo valor posible en la inyección de ganancia va a propiciar unos gráficos más suavizados y por concluyente un menor error en los cálculos que se realicen posteriormente con esos valores. 6.3. Sistema de comunicaciones La red de sensores se compone de un total de 4 nodos, entre los cuales existen dos roles diferentes, el punto de referencia y el nodo móvil. Los puntos de referencia conocen su ubicación mediante el software cliente desarrollado, ya que para cada uno de ellos son introducidas manualmente sus coordenadas. El nodo móvil, por su parte, se encarga de enviar paquetes a los puntos estáticos cada cierto tiempo, para poder conseguir una estimación de la fuerza de la señal entre ellos. 48 Capitulo 6. Implementación Además dentro de los puntos que actúan como referencia, hay uno que posee un comportamiento que difiere del resto, el propio nodo se encuentra acoplado a la estación base, con lo que se convierte en el único que puede enviar paquetes hacia el ordenador. Las aplicaciones residentes en el sistema pueden recibir información de la red de sensores, mediante el software servidor, el cual se mantiene a la escucha de un puerto especial de comunicaciones que emplea el nodo. Este servidor genera un socket a través del cual envía tramas en formato XML para que aquellos que lo deseen puedan conectarse y procesar lo que se recibe desde la red de sensores. Cuando un paquete es recibido por un nodo, este se almacena en una estructura de datos llamada “TOS_Msg” proporcionada por el sistema operativo TinyOS, la cual se compone de los siguientes campos: ◊ ◊ ◊ ◊ ◊ ◊ ◊ ◊ ◊ Addr (2 bytes) Type (1) Group (1) Length (1) Data[TOSH_DATA_LENGTH] (4) CRC (2) Strength (2) ACK (1) Time (2) Para el sistema de localización que se está realizando, el campo “strength” es muy importante, es el valor que va a permitir saber la distancia a la que se encuentra un nodo de otro. Esta información va a ser enviada por un único nodo hacia la estación base de modo que no se genere congestión en el canal de comunicaciones. El nodo encargado de esta tarea es el propio nodo móvil, debido a que al recibir la información de todos los puntos de referencia puede encapsular en un único paquete todas las RSS, minimizando los intercambios de información entre los nodos. A continuación, en el punto 6.3.1 se va a exponer la estructura de los paquetes para la plataforma de trabajo empleada, y se va a realizar un estudio de los posibles campos que se pueden emplear para contener las RSS u otros datos que se precisen intercambiar por la red. Además en esta sección también se va a exponer la implementación de las comunicaciones por separado, para cada tipo de nodo, estación base, nodo móvil y punto de referencia. 6.3.1.- Estructura de los paquetes Los paquetes se componen de una cabecera y campos de datos asociados al sensor, los cuales varían según el modelo con el que se esté trabajando. La ilustración 23 muestra esta estructura con algo más de detalle. 49 6.3.- Sistema de comunicaciones Bytes: 5 TinyOS Header 0/7 XMesh Header 4 X (según sensor) XSensor Data Header Fields 2 CRC Ilustración 23: Estructura de los paquetes Dentro de la cabecera existen tres grandes bloques que se distinguen por el nivel que tratan, el primer nivel se corresponde con el del propio sistema operativo de los nodos (TinyOS), y contiene los siguientes campos: ◊ ◊ ◊ ◊ Destination Address (2 bytes) Active Message Type (1) Active Message Group (1) Length (1) El segundo nivel, contiene los aspectos que hacen referencia al protocolo de rutado que emplean los nodos inalámbricos, el cual es llamado XMesh. Los campos que lo componen son los descritos a continuación: ◊ ◊ ◊ ◊ Source Address (2 bytes) : dirección mac del nodo Origin Addres (2): id del nodo de origen Sequence Number (2) Application ID Finalmente, el tercer nivel en las cabeceras referencia al sensor sobre el que se desea enviar la información, los campos que lo forman son los siguientes: ◊ ◊ ◊ Sensor Board ID (1 byte) Sensor Packet ID (1) Parent (2) El sensor del que se dispone se corresponde con el modelo MDA100, los campos de datos que proporciona este modelo se describen a continuación: ◊ ◊ ◊ ◊ ◊ ◊ 50 Vref : Lectura del voltaje de la batería Thermistor : Lectura de la temperatura. Photo : Lectura del sensor de luz. Adc2 : Lectura analogica/digital. Adc3 : Lectura analogica/digital. Adc4 : Lectura analogica/digital. Capitulo 6. Implementación ◊ ◊ Adc5 : Lectura analogica/digital. Adc6 : Lectura analogica/digital. Los campos que se prestan a posibles modificaciones se corresponden con los campos de datos que presenta el sensor. En la práctica, cualquiera puede ser empleado para contener los valores de RSS, pero por si se desea captar valores ambientales a partir de los dispositivos que incorpora el sensor, se van a emplear únicamente los campos ADC de que dispone. El software servidor es el encargado de recibir la información y aplicar una conversión para que las aplicaciones clientes que accedan a los datos, reciban directamente los valores con las unidades correctas. Esto se consigue mediante un fichero de configuración en XML, existe uno para cada modelo de sensor soportado por la plataforma. 6.3.2.- Nodo móvil (coordenadas desconocidas) Para este nodo se desconocen sus coordenadas, y se desea realizar una monitorización de las diversas posiciones por las que va pasando mediante una aplicación cliente que se encuentre escuchando los paquetes enviados por la red de sensores inalámbricos. Este nodo en cuestión, es el encargado de recoger los valores de las RSS de cada uno de los puntos de referencia que tiene alrededor y enviárselos a la estación base. Como ya se comentó en la sección 6.1, la fuerza de la señal sufre muchas variaciones por factores en el medio de transmisión, por ello siempre se debe trabajar con valores ponderados de RSS. Esto se consigue realizando diversos envíos al mismo nodo y calculando la media entre los valores captados en esos envíos. Para la implementación llevada a cabo se realizan 5 transmisiones por nodo, y estas transmisiones no se originan en modo “broadcast”, hasta que no se terminan de recibir los 5 paquetes de un nodo, no se pasa al siguiente. La ilustración 15 de la sección de diseño recoge este comportamiento. La posible producción de perdidas en el canal no origina ningún bloqueo en el sistema, puesto que cada 5 segundos salta un temporizador y vuelve a inicializar las comunicaciones. Lo único que puede suceder en ese periodo de tiempo es que la aplicación cliente no sea capaz de pintar nada hasta el siguiente ciclo de envío. No se ha implementado un sistema con reconocimientos (ACKs) para evitar la congestión del canal, puesto que eso repercute gravemente sobre las mediciones que se realizan para obtener la RSS en los módulos de radio. El sistema operativo que incorporan los nodos requiere de una programación en nesC, un tipo de C extendido para redes de sensores, en el apéndice A se puede profundizar en los aspectos en que se basa este lenguaje, en esta sección se va a emplear seudo código para la compresión del código de las funciones que intervienen. Cuando los paquetes son recibidos por el nodo, automáticamente el sistema operativo genera un evento y se captura por el programa compilado en él. El paquete es procesado y como respuesta se envía un nuevo paquete por la red. A continuación se va a exponer en pseudo-código la función que es ejecutada cuando se recibe un paquete: 51 6.3.- Sistema de comunicaciones //almacenar RSS buffer[index] = messageReceived->data->ADC2; buffer[index+1] = messageReceived->strength; index += 2; nPaquetes ++; if (nPaquetes > 5) //se han recibido 5 paquetes cambiar de nodo { numValues = 1; media = buffer[i]; if (media > 255) signed = true; else signed = false; for (i=1; i<10; i++) { if (buffer[i] > 255 and signed) media += buffer[i]; numValues ++; else if (buffer[i] < 256 and !signed) media += buffer[i]; numValues ++; } //almacenar la media Media[idMote-1] = media/numValues; nPaquetes = 1; index = 0; //cambiar de nodo idMote = idMote + 1; } if (idMote <= 3) //todavia no ha recibido de los tres motes { messageToSend->ADC2 = 1; send_radio_msg(); } else //tiene todos las RSS, mensaje a la estación base { messageToSend->ADC2 = Media[0]; messageToSend->ADC3 = Media[1]; messageToSend->ADC4 = Media[2]; send_toBaseStation_msg(); } El nodo móvil almacena las RSS de los tres nodos de referencia, cuando recibe un paquete de un nodo debe coger la RSS de la estructura TOS_Msg, que ha sido calculado por su propio chip de radio. También debe guardar la RSS que se encuentra encapsulada en los datos del paquete, el cual reside dentro del campo ADC2, según el modelo de sensor que se está utilizando. Para cada nodo, si se hacen un total de 5 envíos, se van a almacenar 10 valores de RSS. Las limitaciones de memoria que sufre el hardware obligan a que los tipos de datos con los que se puede trabajar sean sin signo, y se representen en complemento A2. Los valores de RSS que son recibidos pueden contener tanto valores normales, como negativos, con lo que estos no 52 Capitulo 6. Implementación pueden ser mezclados ya que afectarían sobre el resultado real de la media. Para evitar esta situación la media solo se realiza sobre uno de los dos tipos de valores. Mientras que el número de paquetes recibidos sea inferior a cinco, el nodo va a proceder a enviar un paquete al mismo nodo del cual está recibiendo la información. El significado de poner un 1 en el campo ADC2, es que la estación base que también actúa como nodo de referencia, pueda distinguir entre un paquete de solicitud de RSS (como es el caso cuando se envía el 1) y uno de envió de las tres RSS, con lo cual debe enviarlo por el cable USB hacia el ordenador. Cuando el número de paquetes recibidos alcanza el valor de cinco, entonces se almacena el valor de la media y se modifica el identificador que especifica la dirección del nodo al que se van a enviar los paquetes. Una vez se tienen las 3 medias se envía un paquete hacia la estación base para que esta transmita la información hacia el ordenador. Cuando el temporizador acabe su tiempo de espera, el proceso volverá a empezar. Las funciones que son llamadas para el envío, tanto “send_radio_msg” como “send_ToBaseStation_msg”, llaman a otra función que proporciona el sistema operativo para realizar las transmisiones de los paquetes. Lo que se requiere configurar en las llamadas a dicha función es el nodo destino al que se va enviar o se puede indicar que se desea realizar en modo broadcast. En el caso en el que nos encontramos, solo utilizamos direcciones, para “send_radio_msg” empleamos el identificador del mote al que se debe enviar y la otra función posee el identificador de la estación base que siempre vale lo mismo. 6.3.3.- Estación Base El comportamiento que sigue este nodo es más simple que el del nodo móvil. Cuando recibe un paquete comprueba el valor del campo de datos ADC2, si este vale 1, entonces es que debe devolver el paquete hacia el nodo emisor. Si el valor recibido es otro, se trata de una paquete con todas las RSS, por lo tanto, debe componer un paquete con la información que ha llegado y transmitirla hacia el ordenador, donde el software servidor estará escuchando. El siguiente seudo código ilustra el comportamiento adoptado por este nodo en la recepción de paquetes de la red: if (packReceived->xData.datap1.adc2 == 1) { messageToSend->ADC2 = messageReceived->strength; SendStrength(); } else { messageToSend->ADC2 = messageReceived->ADC2; //RSS 1 messageToSend->ADC3 = messageReceived->ADC3; //RSS 2 messageToSend->ADC4 = messageReceived->ADC4; //RSS 3 SendDataUART(); } 53 6.3.- Sistema de comunicaciones Las funciones “sendStrength” y “sendDataUART” siguen la misma idea que las planteadas para el nodo móvil, la primera utiliza la función “send” del sistema operativo para devolver el paquete al emisor con el RSSI encapsulado. La segunda emplea “TOS_UART_ADDR” para enviar el paquete a través del cable USB que une a la estación base con el ordenador. 6.3.4.- Nodo de referencia (coordenadas fijas) Este nodo responde a los paquetes que recibe enviando otro paquete al emisor con la fuerza de la señal encapsulada en el campo ADC2 de los datos. En la red de que se dispone existen dos nodos funcionando con este programa, el tercer punto de referencia es el que se encuentra fijado a la estación base y aunque presente un comportamiento similar posee un programa diferente como se ha expuesto en el punto anterior. El seudo código de la función de recepción es el que aparece a continuación: messageToSend->ADC2 = messageReceived->strength; // RSS SendStrength(); La función “SendStrength” es la misma que la comentada en el punto anterior para la estación base. 6.4. Aplicación cliente para la monitorización La aplicación de monitorización cuenta con una interfaz desarrollada en C#, la cual presenta una ventana con un componente gráfico donde se van a ir pintando los puntos a medida que vayan siendo recogidos, una pestaña de configuración para adaptar el algoritmo de localización espacial a diversos entornos y configuraciones de los motes (en la sección 6.1 aparece descrito en profundidad el algoritmo empleado). Y finalmente, un formulario para la introducción de las coordenadas de los nodos de referencia que forman la red de sensores inalámbricos. La ventana principal posee tres botones, uno muestra el diálogo de la carga de coordenadas para los nodos fijos comentada antes, el otro limpia los puntos generados para el 54 Capitulo 6. Implementación nodo móvil, y el último inicia la conexión con el socket del software servidor de la plataforma “MoteWorks”, además de iniciar la ejecución de los hilos. Por defecto el puerto sobre el que se conecta la aplicación con el socket del software servidor es el 9001, aunque este puede ser modificado por otro primero desde el servidor y posteriormente en la interfaz, de otro modo no se podría proceder a la conexión. Para una visualización más detallada de los cálculos realizados por el sistema, en la parte derecha de la interfaz se han dispuesto campos informativos con los valores de la RSS y su respectiva estimación de la distancia. La ilustración 24 muestra la interfaz gráfica. Ilustración 24: Interfaz gráfica de la aplicación Como es posible que se trabaje muchas veces sobre un mismo escenario, se ha creído oportuno generar un modo rápido de carga de la ultima configuración de los puntos utilizada, para ahorrar tiempo al usuario en esa labor. El componente gráfico auto ajusta los ejes X e Y según los valores de las muestras a pintar. Al lado derecho aparece una leyenda para asociar los colores de línea con su respectivo significado en el dibujo. Solo existen dos series para el gráfico, por un lado el color rojo está ligado a los nodos que actúan como referencia, solo habrá tres marcas para esta serie. El color verde está asociado a los puntos que son calculados por el algoritmo de localización tras la recepción de las RSS por parte de la red de nodos. En la parte inferior aparece una barra de estado, la cual indica como se encuentra la conexión con el servidor en cada momento. Si el socket es cerrado se verá reflejado en ella. La aplicación no permite realizar una conexión, si como paso previo no se ha procedido a la carga de los puntos fijos. Sin sus coordenadas no se puede resolver el sistema de ecuaciones que presenta el algoritmo de localización espacial. El formulario de carga de las coordenadas puede observarse en 55 6.4.- Aplicación cliente para la monitorización la ilustración 25. Una vez los puntos son guardados, estos aparecen pintados en el componente gráfico. Ilustración 25: Formulario de carga de las coordenadas de los nodos de referencia La pestaña de configuración permite cambiar diversos parámetros empleados en el algoritmo de localización espacial, los cuales se corresponden a la RSS aproximada en un metro de distancia, el factor en que disminuye la señal al aumentar la distancia y la velocidad a la que se mueve el robot. La ilustración 26 recoge esta interfaz. Ilustración 26: Interfaz para la configuración del sistema 56 Capitulo 6. Implementación Cuando se realiza una conexión tras haber cargado las coordenadas, la aplicación pone en ejecución a dos hilos, uno que se encarga de la lectura de los paquetes desde el socket al software servidor y otro que emplea las RSS recibidas para calcular los puntos a pintar en el componente gráfico. El hilo de lectura, gestiona el socket y almacena la información que le devuelve en un buffer compartido por él y el hilo que realiza los cálculos. Si el socket no contiene nada, el hilo se suspende temporalmente un tiempo para dar ocasión a este de llenarse con nuevos datos. A continuación se presenta el seudo código del programa que es ejecutado por el hilo: while( true ) { if (socketFailed) { socketFailed = false SocketConnectionFailed() } else { try { if (socket == null) { socket = new CSocketXml(server, port) } else { if ((packet = socket.SocketReceive()) != null) buffer.Add(packet) else Thread.Sleep(2000) //espera dos segundos } } catch { socketFailed = true } } } Por su parte, el socket devuelve una estructura CPacketXml que contiene los valores de las 3 RSS de los nodos de referencia, cada vez que se llama la función “SocketReceive”. Esta función lee el “stream” XML proveniente del servidor y extrae los valores que se encuentran recogidos dentro de los campos ADC2, ADC3 y ADC4 del documento XML. El hilo que calcula las coordenadas del nodo con posición desconocida, coge los paquetes del buffer compartido que tiene con el lector. Si no existen paquetes disponibles, se queda bloqueado hasta que el lector almacena un nuevo paquete (problema productor-consumidor). Para cada una de las RSS que contiene el paquete (en total 3), se realiza la conversión a distancia en centimetros mediante la ecuación 6.1.3 obtenida en la sección 6.1. d = 10 RSS + A −10 n Ecuación 6.1.3 57 6.4.- Aplicación cliente para la monitorización Una vez se dispone de las distancias y se saben las coordenadas de los nodos fijos, ya que han sido introducidas previamente en el sistema, se puede proceder a la resolución del sistema de ecuaciones (Ecuación 6.1.2) expuesto en la sección 6.1. 2 x( xi − x1 ) + 2 y ( yi − y1 ) = d12 − d i2 + xi2 − x12 + yi2 − y11 {i = 2,..., n} Ecuación 6.1.2 El punto que se obtiene tras la resolución no puede ser pintado directamente por el propio hilo, esto se debe a que los controles tales como botones o gráficos están asociados a la vista que los crea. La solución a esto es llamar un delegado que previamente se haya definido en la vista, para que se ejecute una determinada función desde ella. El seudo código del programa del hilo es el que aparece a continuación: while (true) { packet = buffer.Get(); exp = (Abs(packet.Strength1) distancias[0] = Pow(10, exp) exp = (Abs(packet.Strength2) distancias[1] = Pow(10, exp) exp = (Abs(packet.Strength3) distancias[2] = Pow(10, exp) * * * Abs(A)) / (10 * N); 100; //cm Abs(A)) / (10 * N); 100; //cm Abs(A)) / (10 * N); 100; //cm //resolución del sistema de ecuaciones matrixSystem = GeneratePositioningSystem(distancias); LinearEquationSolver(matrixSystem, solution); puntoApintar = new CPunto(Abs(solution[0]), Abs(solution[1])); //invocar método de la vista mainForm.Invoke(mainForm.m_delegatePintarPunto, puntoApintar); } Los hilos son gestionados desde la vista, cuando se pulsa el botón de pausa la ejecución de estos se suspende hasta que se vuelve a producir una nueva conexión, o simplemente se elimina si la aplicación es cerrada. La configuración puede cambiarse mientras se está conectado, de modo que se pueda realizar una calibración del sistema para ajustar los valores y conseguir una mayor precisión en los cálculos realizados. Como último paso antes de que el punto sea pintado en el gráfico, se procede al refinamiento de la localización, para ello, se realiza una estimación de la distancia que puede recorrer el robot entre cada recepción de un mensaje por parte de la red. Con ello se obtiene el valor de la nueva ubicación, dentro del radio que puede alcanzar desde la posición donde se encontraba anteriormente. 58 Capitulo 7. Resultados 7 7.- RESULTADOS Tras la implementación del proyecto, este capítulo recoge las pruebas realizadas con un robot móvil para la red inalámbrica de que se dispone. Por una parte se detallan aquellos experimentos realizados para validar el comportamiento de las diversas configuraciones del chip de radio integrado en los nodos, y por la otra, los experimentos que recogen el comportamiento del sistema de localización en un escenario real. 7.1. Experimentos con el chip de radio y la fuerza de la señal Como se ha comentado en la sección del chip de radio, es posible variar la frecuencia de envío, así como, la potencia de emisión. Para comprobar el comportamiento que tiene la selección de un canal con una misma potencia de envío sobre los valores recogidos en la fuerza de la señal, se realizó un experimento en un recinto donde se pudiera ver afectado por el menor número posible de solapamientos de señales por transmisiones en el mismo canal. La ilustración 27 recoge los resultados. Como se puede observar en el gráfico, emplear un canal u otro no repercute prácticamente a distancias cortas. Las oscilaciones que se producen vienen marcadas por el carácter de la señal analógica y el ruido que la afecta. Si el muestreo se hubiera prolongado hasta valores más grandes de la distancia, según el canal empleado se habría dejado de recibir paquetes en unos antes que en otros. 59 7.1.- Experimentos con el chip de radio y la fuerza de la señal Variación de le fuerza de la señal para varios canales 0 Fuerza de la señal (dBm) -10 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 -20 -30 2405 Hz -40 2420 Hz 2440 Hz -50 2460 Hz -60 2480 Hz -70 -80 -90 -100 Distancia (cm) Ilustración 27: Gráfico con los resultados de diversos canales con el máximo poder de emisión, para el control automático de la ganancia Si en vez de variar el canal, lo que se varía es la potencia de emisión, aunque la señal presente desniveles, la tendencia general va a ser que la fuerza resultante empeore a medida que se vaya aumentando la distancia. Los valores recogidos son a distancias relativamente cortas pero aun así el comportamiento resulta ser es el esperado, a mayor potencia más altos serán los resultados recogidos en la RSS. La ilustración 28 muestra el experimento. Fuerza de la señal segun el RF Power 0 -10 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 Fuerza de la señal (dBm) -20 -30 0dBm -40 3dBm -50 5dBm 10dBm -60 15dBm -70 25dBm -80 -90 -100 Distancia (cm) Ilustración 28: Gráfico con los resultados de diferentes potencias de emisión con un mismo canal, para el control automático de la ganancia Los experimentos anteriores han servido para validar el comportamiento de los parámetros configurables de la radio. Como el criterio de configuración que requiere el sistema es alcanzar la máxima distancia posible sin necesidad de preservar las baterías incorporadas en los nodos, los valores para el poder de emisión y el canal, van a ser respectivamente, 0 dBm (la máxima) y 2405 MHz (la mínima). Para los experimentos de aquí en adelante se va a asumir que está es la configuración empleada, a menos que se indique lo contrario explícitamente. 60 Capitulo 7. Resultados El experimento recopilado en la ilustración 29, muestra el comportamiento que presenta la fuerza de la señal a medida que se va incrementando la distancia. Además, para ver como los obstáculos afectan en el deterioro de las señales, se realizó otro registro de valores en el caso de mantener un cuerpo justo entre el emisor y el receptor. Potencia de la señal en varios entornos 0 Fuerza de la señal (dBm) -10 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -20 Medición Directa -30 Medición con Cuerpo 25 -40 -50 -60 -70 -80 -90 -100 Distancia (m) Ilustración 29: Gráfico con los resultados de la fuerza de la señal para grandes distancias, sin y con obstáculos, para el control automático de la ganancia En la recopilación de la información, para introducir las mínimas interferencias, se dejó uno de los nodos que actuara como receptor encima de la plataforma de un robot, y el otro se posicionó encima de otro robot que iba desplazándose un metro cada vez, para la anotación de los resultados. La ilustración 30 muestra el proceso de recogida de datos. Ilustración 30: Proceso de recolección de datos para distancias grandes En distancias grandes se puede apreciar como el control de la ganancia, comentado al principio de esta sección, es un control automático. A pesar de ir progresivamente alejándonos, la fuerza de la señal presenta fluctuaciones bastante pronunciadas, las cuales son producidas por la inyección de una ganancia sobre la señal. El valor de la ganancia viene dado por el algoritmo de 61 7.1.- Experimentos con el chip de radio y la fuerza de la señal control automático que lleva integrado el chip, y cuyo comportamiento va ligado a la intensidad de la señal recibida, aplicando mayor o menor valor de ganancia según sea necesaria. Para mejorar el comportamiento del hardware sobre este aspecto, el departamento ha adquirido el modelo CC2431. Este modelo incorpora un chip de radio más eficiente, además de un chip integrado llamado “location engine” que realiza los cálculos de las posiciones en el hardware. Fuerza de la señal con ganancia máxima 0 -10 RSS (dBm) -20 -30 -40 -50 -60 -70 -80 -90 -100 1 2 3 4 5 6 7 8 9 10 Distancia (m) Ilustración 31: fuerza de la señal sin control automático, con ganancia máxima. Los resultados obtenidos son los esperados, por eso es mejor emplear un control estático de la ganancia. Aunque igual pueden aparecen oscilaciones en el gráfico, están se van a producir en menor medida y van a estar menos marcadas, dependiendo del valor de la ganancia que se inyecte a la señal, puesto que a mayor ganancia más pronunciado va a ser el ruido. Fuerza de la señal con ganancia mínima 0 -10 RSS (dBm) -20 -30 -40 -50 -60 -70 -80 -90 1 2 3 4 5 6 7 8 9 10 Distancia (m) Ilustración 32: Fuerza de la señal sin control automático y con ganancia mínima. 62 Capitulo 7. Resultados La reducción de la ganancia implica la presencia de menos altibajos en el gráfico, aunque también implica la reducción de la distancia que se es capaz de alcanzar. La decisión de cual escoger vendrá pues determinada por la finalidad que se esté buscando, o bien precisión, o bien longitud en la emisión de la señal. La ilustración 33 muestra el recorrido de los nodos durante la realización de los experimentos. El plano representa uno de los pasillos del edificio de profesorado que se encuentra en las inmediaciones de la escuela superior de tecnología y ciencias experimentales. Ilustración 33: Camino seguido por el robot para la realización de los experimentos 63 7.2.- Experimentos con el sistema de localización 7.2. Experimentos con el sistema de localización La red inalámbrica de los experimentos se compone de tres robots fijos en una ubicación preestablecida de antemano, y un robot móvil. Cada uno de los robots tiene incorporado un nodo inalámbrico programado con uno de los módulos nesC diseñados según el rol que ocupe. Se han captado 3 instantes diferentes durante la evaluación del sistema desarrollado, para cada uno de ellos se dispone por una parte, de la captura de la interfaz de monitorización diseñada y por otra, de la imagen de la posición real que ocupa el robot en el laboratorio donde se han realizado las muestras. Con estas ilustraciones se pretende mostrar el comportamiento de la aplicación frente a un escenario real de uso. La distribución adoptada por los robots puede verse en la ilustración 34, el robot que permanece dentro del triángulo que forman el resto, es el que actúa como el punto móvil del cual se desconoce su ubicación y se va calculando en cada intercambio de paquetes. El robot es controlado remotamente desde el ordenador donde se está ejecutando la aplicación de localización. Como paso previo, se ha iniciado la aplicación servidor que permite la comunicación entre la red inalámbrica y el propio ordenador, llamada “Xserve” y la cual fue comentada en el capítulo de exposición de la plataforma de desarrollo. ◊ Posición 1 Ilustración 34: Posición del robot en un escenario real (1) 64 Capitulo 7. Resultados Ilustración 35: Posición estimada del robot en un escenario real (1) ◊ Posición 2 Ilustración 36: Posición del robot en un escenario real (2) 65 7.2.- Experimentos con el sistema de localización Ilustración 37: Posición estimada del robot en un escenario real (2) ◊ Posición 3 Ilustración 38: Posición del robot en un escenario real (3) 66 Capitulo 7. Resultados Ilustración 39: Posición estimada del robot en un escenario real (3) Como se puede comprobar tras las diversas posiciones mostradas, el sistema de localización es capaz de ubicar el robot en el espacio con cierta precisión en sus cálculos, para tratar de estimar el error producido por las señales de radio se ha realizado un experimento que evalúe para 30 puntos en el espacio, las respectivas ubicaciones que va ocupando el nodo móvil, de modo que se ilustre el máximo error cometido en cada uno de ellos. Para cada uno de los puntos se muestran el error cometido en metros por parte del eje X y el error cometido por el eje Y. La ilustración 40 recoge los resultados. Error cometido en la evaluación de los puntos 1,6 1,4 Error (m) 1,2 1 Error en X 0,8 Eror en Y 0,6 0,4 0,2 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 Puntos Ilustración 40: Estimación del error cometido por el sistema de localización 67 68 Capitulo 8. Seguimiento y control del proyecto 8.-SEGUIMIENTO Y CONTROL DEL PROYECTO 8 SEGUIMIENTO Y CONTROL DEL PROYECTO Este capítulo contiene el seguimiento de la planificación realizada al inicio del proyecto, así como el control de las tareas incluidas en la estimación. Las desviaciones surgidas en el transcurso del proyecto son enumeradas y detalladas como parte del seguimiento realizado. 8.1. Control de la planificación Durante la ejecución del proyecto se realizó un seguimiento para verificar que se estaba cumpliendo la planificación y que los objetivos establecidos se estaban logrando. A continuación, se detallan las desviaciones producidas en el transcurso del proyecto, así como, las justificaciones de los retardos para cada una de las tareas que han superado el tiempo estimado. Estudio de la plataforma Moteworks: Durante las pruebas del conjunto de aplicaciones que forman el set provisto por Crossbow, se encontraron algunos problemas de configuración que alargaron el tiempo necesario para realizar el estudio de la plataforma. Esto solamente implicó el desvío de la planificación en un día. Estudio de la programación en nesC: Aunque nesC es una ampliación de C, del cual ya se disponían conocimientos, resultó presentar un comportamiento algo más complejo de lo esperado. La concurrencia de los programas capaces de correr en los nodos inalámbricos, supuso un estudio más profundo y costoso, para poder aprovechar al máximo, las prestaciones proporcionadas para este tipo de arquitecturas. El tiempo adicional requerido fue de 4 días más sobre la estimación inicial. Creación de la aplicación C#: La falta de experiencia en la programación con este lenguaje, ha supuesto una desviación de 3 días sobre el coste estimado en un principio. 69 8.2.- Seguimiento de la planificación 8.2. Seguimiento de la planificación Las ilustraciones 41, 42, 43 y 44 recogen el seguimiento de la planificación respecto a las estimaciones iniciales. La línea gris que aparece, actúa de línea base del proyecto y se corresponde con los tiempos de la planificación original. Las barras azules, equivalen al coste real de las tareas del proyecto. Ilustración 41: Diagrama de GANTT real del proyecto desde el 13 de octubre hasta el 30 de noviembre Ilustración 42: Diagrama de GANTT real del proyecto desde el 1 de diciembre hasta el 18 de enero 70 Capitulo 8. Seguimiento y control del proyecto Ilustración 43: Diagrama de GANTT real del proyecto desde el 19 de enero hasta el 8 de marzo Ilustración 44: Diagrama de GANTT real del proyecto desde el 9 de marzo hasta el 12 de marzo La ilustración 45 recoge las desviaciones producidas en la planificación con un mayor detalle, para poder contrastar los retrasos sufridos en el desarrollo del proyecto. 71 8.2.- Seguimiento de la planificación Ilustración 45: Variaciones de cada una de las tareas respecto a la estimación inicial 72 Capitulo 9. Conclusiones 9 7.-CONCLUSIONES En este capítulo se van a recoger las conclusiones obtenidas tras el desarrollo del proyecto. Por un lado se va a exponer el cumplimiento de los objetivos fijados de antemano, documentando cuales y en que medida han sido superados. Además, se van a detallar posibles extensiones del proyecto, que podrían ser llevadas a cabo en un futuro. 7.1. Grado de cumplimiento de los objetivos iniciales Tras la finalización del proyecto, se puede afirmar que la mayor parte de los objetivos marcados al inicio del proyecto han sido superados satisfactoriamente. En primer lugar, se ha logrado diseñar e implementar un algoritmo de localización espacial que resulte eficiente y preciso en la obtención de las coordenadas del nodo móvil. La precisión del sistema ha sido ajustada a las restricciones que presenta la plataforma de trabajo. Trabajar con la fuerza de la señal ha supuesto un gran coste a la hora del desarrollo del algoritmo, puesto que es un parámetro que se ve afectado por muchas condiciones, tales como reflexiones de la señal, difracciones, solapamientos en el canal, o multitrayectos. La realización de experimentos sobre el chip de radio integrado en los nodos, ha sido la clave para incrementar la precisión, y obtener los mejores resultados permitidos por el sistema. Aunque los resultados obtenidos están lejos de sistemas como los que emplean ultrasonidos, si se acercan a las prestaciones dadas por el GPS, el cual utiliza una triangulación como algoritmo de localización. El error cometido por este sistema varia en unos metros, para nuestro caso, el error cometido pueda alcanzar a lo sumo el mismo, pero su comportamiento normal si no hay condiciones que alteren el comportamiento de la señal suele rondar sobre un metro de error como promedio. En segundo lugar, se ha conseguido que el sistema desarrollado presente un comportamiento configurable. El algoritmo de localización ha basado los cálculos en dos 73 9.1.- Grado de cumplimiento de los objetivos parámetros externos que pueden ser introducidos por el usuario. La interfaz presentada incluye una pestaña de configuración donde los valores pueden ser modificados hasta encontrar aquella combinación que aporte la mayor precisión para el entorno en que se encuentra. La calibración inicial del sistema es un factor muy importante para la obtención de una precisión mayor en los resultados. Por tanto, con la ayuda de este paso previo en la puesta en marcha de la aplicación y el refinamiento de las coordenadas mediante el filtro de la velocidad diseñado, se satisface el objetivo de la precisión aunque no se llegue al 100 %. La programación para el sistema operativo TinyOS resultó costosa en un principio, los programas para los sensores inalámbricos no presentan un sistema de “debug” elaborado. El único medio de hacerlo fue empleando los leds de que dispone un nodo (el sistema operativo proporciona una llamada para iluminar los leds cuando se pasa por una determinada función). La realización de un diseño previo a la implementación ayudó a que se pudieran cumplir los objetivos dentro de los plazos estipulados de antemano. Aunque la planificación llevada a cabo resultó ser bastante buena, la producción de contratiempos y la falta de experiencia en la plataforma de trabajo Moteworks, retrasaron algunas tareas y por consiguiente se prolongó el tiempo empleado en el desarrollo del proyecto. El trabajo realizado en el desarrollo de este proyecto, ha sido introducido en el artículo “Networking aspects for localization and control of a swarm of mobile sensors and actuators: Cross-layer desing, distance estimation, and trasport protocols” de la revista “Autonomous Robots”. 74 Capitulo 9. Conclusiones 7.2. Posibles extensiones del proyecto El sistema de comunicaciones desarrollado en nesC, considera que los nodos son accesibles directamente, puesto que tan solo se disponía de un total de cuatro nodos, más la estación base. Una extensión del proyecto sería diseñar e implementar un sistema de comunicaciones que aprovechara el sistema de saltos que dispone el protocolo XMesh. Para nuestro caso se suponía que tres de los nodos actuaban como puntos de referencia, pero en una red donde existen un mayor número de nodos, probablemente nunca se pueda estar alrededor de los nodos de referencia. Los saltos permitirían que durante un breve periodo de tiempo un nodo móvil pasara a jugar el rol de punto de referencia para que otros nodos móviles pudieran conocer sus coordenadas. Otra posibilidad, sería introducir otro dispositivo en el sistema de localización para así incrementar la precisión. Para los nodos disponibles, lo mejor sería obtener un dispositivo que actuara de brújula para poder emplear el algoritmo APS descrito en la sección 4.1.4. Posicionar el nodo encima del soporte de un robot con brújula sería otro modo de conseguir mayor información del entorno y poder emplear un algoritmo con mayor precisión. Dentro de los sensores creados por Crossbow, existe el modelo MTS300 o MTS310 que incorporan un altavoz y un micrófono entre otras funcionalidades, que permitirían el empleo de la diferencia de tiempos de llegada para sumar precisión a la estimación de las distancias. (Hay que tener en cuenta que el empleo de este sensor solo podría ser aplicable en entornos sin exceso de ruido). Cuando se dispone de una red con muchos nodos, definir las coordenadas de los puntos de referencia se convierte en una ardua tarea. Para ese caso, se debería disponer de un dispositivo GPS conectado al nodo, el cual le indicaría sus coordenadas automáticamente. El nodo debería enviar un paquete hacia la estación base para que almacenase el identificador del nodo con su correspondiente coordenada para lo que pueda necesitar hacer. Los módulos de radio empleados no poseen mucha potencia de transmisión, si se dispusiera del modelo Mica2 a 433 MHz, se podría diseñar un sistema de localización espacial en tres dimensiones, con lo que se podría ubicar un nodo dentro de un edificio, con diversas plantas. El departamento ha adquirido el modelo CC2431 de la plataforma Crossbow, el cual lleva integrado un chip denominado “location engine” que realiza los cálculos de las posiciones en el hardware. Como trabajo futuro se pretende sustituir los nodos actuales por estos para evaluar el rendimiento del algoritmo que lleva integrado. Por otro lado, se va a desarrollar un sistema de localización basado en la técnica TRoA (diferencia de tiempos de llegada) mediante el empleo de un sonar, para tratar de conseguir una precisión de un centímetro. Su desarrollado va a ser llevado a cabo por Jorge Sales. 75 76 APÉNDICE A. Programación en nesC A.- PROGRAMACIÓN EN nesC A PROGRAMACIÓN EN nesC Este apéndice es una introducción a la programación en nesC, en él se van a describir las características del lenguaje, así como algún ejemplo de uso. A.1. Características de nesC nesC (network embedded systems C), es una extensión de C diseñada para el modelo de ejecución y las estructuras del sistema operativo TinyOS. Sus principales características son las siguientes: Separación de la construcción y la composición: Los programas están compuestos de componentes, que se montan, para formar un conjunto de programas. Los componentes se definen en dos ámbitos, la especificación (contiene los nombres de las instancias de sus interfaces) y la implementación. Especificación del comportamiento de los componentes, en términos de un conjunto de interfaces: Las interfaces pueden ser proporcionadas o usadas por el componente. Las que son proporcionadas representan la funcionalidad que el componente proporciona al usuario. Por otro lado, las que son usadas por el componente representan, aquella funcionalidad que el componente requiere para llevar a cabo su trabajo. Las interfaces son bidireccionales: Las interfaces especifican un conjunto de funciones a ser implementadas por el proveedor de la interfaz (comandos) y un conjunto a ser implementado por la interfaz del usuario solicitante (eventos). Esto permite una única interfaz para representar una interacción compleja entre componentes. 77 A.1.- Características de nesC 78 Los componentes son enlazados entre sí a través de sus interfaces: Esto aumenta la eficiencia en tiempo de ejecución, propicia un diseño robusto, y permite un mejor análisis de los programas. Uso de compiladores específicos: nesC está diseñado bajo la expectativa de que el código será generado por los compiladores compatibles con TinyOS. Tareas y manejadores de interrupciones: El modelo de concurrencia de nesC está basado en ejecutar tareas al completo, y manejar interrupciones las cuales permitan interrumpir la ejecución de las tareas y otros procedimientos por el estilo. APÉNDICE A. Programación en nesC A.2. Estructura de una aplicación Dentro de la plataforma de trabajo empleada llamada Moteworks, se requieren un mínimo de 4 archivos para poder generar una aplicación para la red de sensores inalámbricos. Según la funcionalidad que implemente la aplicación variará en el número de módulos que la van a componer. El esqueleto de una aplicación en TinyOS consiste de los siguientes ficheros: Makefile Makefile.component Configuración de la aplicación Módulo con la implementación README (opcional) A.2.1.- Makefile Un makefile consiste en líneas de texto que definen a un archivo o a un conjunto de ellos, o que definen el nombre de una regla dependiendo de un conjunto de archivos. Los archivos de salida necesitan de sus dependencias, y las dependencias también pueden tener sus propias dependencias internas. A continuación se muestra un ejemplo de Makefile utilizado para generar la aplicación de los nodos: include Makefile.component include $(TOSROOT)/apps/MakeXbowlocal include $(MAKERULES) El entorno de desarrollo tiene declarado unas variables de entorno que son empleadas para agilizar la generación de reglas (makerules), así como para referenciar rutas relativas (tosroot). El fichero MakeXbowlocal, proporciona una vía rápida para los cambios que pueda realizar el usuario, sobre la potencia de transmisión, canal de emisión o identificador del grupo de sensores. A.2.2.- Makefile.component Este fichero describe a alto nivel la configuración del componente. Un componente se caracteriza por poseer un nombre que lo identifica y trabajar sobre una placa de sensor en concreto, la cual viene especificada por la marca del modelo. La directiva que identifica el sensor 79 A.2.- Estructura de una aplicación sirve para dar información al compilador sobre las sentencias de compilación que debe utilizar a la hora de generar el código. Un ejemplo de programación de este archivo para el sensor MDA100 empleado en el desarrollo del proyecto sería: COMPONENT = MiAplicacion SENSORBOARD = mda100 A.2.3.- Configuración de la aplicación El nombre establecido en el Makefile.component debe de corresponderse con el nombre del fichero de configuración, acabado con la extensión “.nc”. Este módulo emplea la interfaz llamada StdControl, la cual proporciona las funcionalidades básicas para la inicialización, puesta en marchada y parada, de una aplicación basada en el sistema operativo TinyOS. Las siguientes líneas son una muestra de la programación para este módulo: configuration MiAplicacion { } implementation { components Main, MiAplicacionM, TimerC, LedsC; Main.StdControl -> TimerC.StdControl; Main.StdControl -> MiAplicacion.StdControl; MiAplicacionM.Timer -> TimerC.Timer[unique(“Timer”)]; MiAplicacionM.Leds -> LedsC.Leds; } Conceptualmente las aplicaciones de TinyOS son una colección de componentes y un planificador llamado “Main”. Este planificador ejecuta las tareas creadas por los componentes que se incluyen en la configuración y es el primero en ejecutarse dentro del sistema operativo. La interfaz “StdControl” utilizada por el planificador permite inicializar y arrancar los componentes preparados para TinyOS. En el componente llamado “MiAplicacionM”, es donde va a residir la implementación de la aplicación. Los componentes “TimerC” y “LedsC” son módulos definidos por el sistema para aprovechar el hardware de los nodos, de los cuales ya se dispone su implementación, actuando como interfaces proveedoras de servicios para otros componentes nuevos. 80 APÉNDICE A. Programación en nesC La configuración recoge todos aquellos servicios que son utilizados por un componente, los cuales pueden ser provistos por una o más interfaces. En la implementación se deberá especificar un nombre para la instancia de la interfaz, que debe coincidir con la empleada en este fichero. Un ejemplo serían los nombres “Timer” o “Leds”. La razón por la que existe de modo separado la configuración e implementación, es para proporcionar al desarrollador un conjunto de librerías de componentes que puedan ser reutilizadas en una amplia gama de aplicaciones. A.2.4.- Módulo de implementación Este módulo siguiendo con la nomenclatura del ejemplo debe ser llamado “MiAplicacionM”, como aparece referenciado en el fichero de configuración. En él es donde se implementa la programación de las funciones proporcionadas por la interfaz Timer, Leds y StdControl. A continuación se expone un ejemplo de implementación: module MiAplicaciónM { provides { interface StdControl; } uses { interface Timer; interface Leds; } implementation { //Inicializa el componente. //devuelve SUCCESS siempre command result_t StdControl.init() { call Leds.init(); return SUCCESS; } //Arranca la aplicación //devuelve SUCCESS siempre command result_t StdControl.start() { return call Timer.start(TIMER_REPEAT, 1000); //1s } //Pausa la ejecución de la aplicación //devuelve SUCCESS siempre command result_t StdControl.stop() { return call Timer.stop(); } //Se ejecuta cada vez que termina la cuenta del temporizador //devuelve SUCCESS siempre 81 A.2.- Estructura de una aplicación event result_t Timer.fired() { call Leds.redToggle(); return SUCCESS; } } } La interfaz “StdControl” provee tres funciones básicas para el sistema operativo: init(), start(), stop(). La mayor parte de los componentes disponen también de alguna de estas llamadas para su inicialización o parada. El Timer es un ejemplo de ello, el cual hace un start y un stop a la par con el planificador. Por otra parte, una interfaz puede estar formada por algunas funciones las cuales se corresponden a eventos del sistema. La función “timer.fired” es una muestra, se produce cuando el tiempo de reloj fijado expira. Esto es un ejemplo, de la bidireccionalidad de la interfaz (proporciona comandos para ser llamados por el usuario y se lanzan eventos que son implementados por él). LedsC además de proporcionar las funciones ya comentadas, posee una funcionalidad más, empleada en el “debug” de las aplicaciones a modo de punto de referencia para el programador, dando idea de por donde pasa el hilo de ejecución de la aplicación. Esta funcionalidad consiste en iluminar o apagar el led del color especificado en la placa del nodo. 82 APÉNDICE A. Programación en nesC A.3. Componentes empleados en el proyecto Para el desarrollo del proyecto ha sido necesaria la utilización de ciertos componentes para aplicaciones TinyOS. En este apartado se van a recoger y describir dichos componentes, mostrando un simple ejemplo a modo de uso. Los componentes empleados se enumeran a continuación: GenericComm TimerC LedsC HPLCC2420C Algunos de los componentes presentes en la lista han sido expuestos ya en la sección anterior, como ejemplo de la estructura de una aplicación en nesC. Estos son “TimerC” y “LedsC”. Su comportamiento resulta muy intuitivo con lo cual no se va a profundizar más en esta sección sobre ellos. A.3.1.- Componente GenericComm Este componente se emplea para el envío y recepción de mensajes sobre el puerto de comunicaciones establecido hacia el ordenador o bien por radio. El envío y la recepción residen en dos interfaces diferentes, las cuales deben ser incluidas en la configuración. Un ejemplo de la configuración de este componente se expone a continuación, siguiendo con los nombres ya utilizados en ejemplos anteriores: configuration MiAplicacion { } implementation { components GenericComm as Comm, …; … MiAplicacionM.SendMsg -> Comm.SendMsg[AM_XSXMSG]; MiAplicacionM.ReceiveMsg -> Comm.ReceiveMsg[AM_XSXMSG]; … } Para la recepción, se implementa el evento “receive” de la interfaz “ReceiveMsg” de modo que publique una tarea para el procesado del mensaje y mientras se mantiene a la escucha de 83 A.2.- Estructura de una aplicación nuevos eventos. Las tareas son ejecutadas de modo síncrono, hasta que esta no haya terminada el hilo de ejecución, el sistema se mantendrá ocupado con su evolución. Si se publican nuevas tareas, estas son encoladas en una lista para ser procesadas en cuanto el planificador del sistema operativo lo disponga. La tarea de procesado de mensajes se ha declarado como “RadioRcvdTask”, en ella según el nodo en cuestión desarrolla una tarea diferente, la cual se ha comentado con seudo código en la sección 6.3. Aquí solo resulta relevante el modo de ejecución que hace TinyOS. Para el envío de mensajes, se requiere de otra tarea que sea publicada cuando se precise realizar una transmisión, ya sea por radio o vía COMM. Existe una definición de tarea diferente para cada tipo de envío, puesto que la llamada a la interfaz “SendMsg” difiere. La interfaz provee de un comando “send” el cual se encarga de realizar las comunicaciones, como parámetro de entrada recibe la dirección a la que se va a enviar el paquete, pudiéndose corresponder con un nodo vigente en la red, la propia estación base o bien el COMM de comunicaciones que existe entre la estación base y el ordenador. La interfaz “SendMsg”, además, dispone de un evento que se produce cada vez que un mensaje ha sido enviado, este recibe el nombre de “sendDone”. Un ejemplo de implementación de un módulo con la utilización de este componente aparece a continuación: module MiAplicaciónM { … uses { interface SendMsg; interface ReceiveMsg; } implementation { … //Envía un paquete //no devuelve nada task void send_radio_msg(){ if (sending_packet) return; atomic sending_packet=TRUE; call SendMsg.send(idMote,sizeof(XDataMsg),&msg_buf); return; } //Evento producido cuando se envía un mensaje satisfactoriamente //devuelve SUCCESS siempre event result_t SendMsg.sendDone(TOS_MsgPtr msg, result_t success) { atomic sending_packet = FALSE; return SUCCESS; } … 84 APÉNDICE A. Programación en nesC //Evento producido cuando se recibe un mensaje //devuelve el Mensaje recibido event TOS_MsgPtr ReceiveMsg.receive(TOS_MsgPtr Msg) { packReceived = (XDataMsg *)Msg->data; msgP = Msg; post RadioRcvdTask(); return Msg; } //Procesa el mensaje recibido //no devuelve nada task void RadioRcvdTask ){ … } } A.3.2.- Componente HPLCC2420C Este componente es utilizado para la configuración de los parámetros del chip de la radio. Algunos de sus parámetros ya se encuentran disponibles en el fichero “Make”, comentado en la sección anterior, pero para el desarrollo de la aplicación se ha precisado de una configuración más avanzada, accesible únicamente mediante la interfaz que proporciona. Lo que se necesita es escribir en el registro encargado de gestionar el control de la ganancia aplicada a la señal, para que cambie el algoritmo aplicado y permita introducir el valor deseado, el cual se va a mantener constante durante todas las comunicaciones. Existe una interfaz llamada “HPLRadio” que permite realizar dicha acción a través del comando “write”. Como parámetros de entrada se deben indicar la dirección del registro a la que se desea acceder (dicha dirección puede ser consultada en el manual del chip de radio integrado en la placa) y, también, el valor a introducir en el registro. Un ejemplo de la configuración de este componente se puede encontrar a continuación: configuration MiAplicacion { } implementation { components HPLCC2420C, …; … MiAplicaciónM .HPLRadio -> HPLCC2420C.HPLCC2420; … } 85 A.2.- Estructura de una aplicación La configuración del valor del registro debe ser realizada en el proceso de inicialización de que provee el sistema operativo, el cual se encuentra en la interfaz “StdControl”. Tras su modificación todas las emisiones que se realicen se harán bajo esa regla. module MiAplicaciónM { … uses { interface HPLCC2420 as HPLRadio;; } implementation { … //Inicialización de la aplicación //siempre devuelve SUCCESS command result_t StdControl.init() { … call HPLRadio.write(0x23, 0x1000); … } … } } 86 APÉNDICE B. Puesta en marcha del sistema B.- PUESTA EN MARCHA DEL SISTEMA PUESTA EN MARCHA DEL SISTEMA B Este apéndice expone como se debe proceder para poder utilizar el sistema de localización desarrollado. El primer paso fundamental para poder trabajar sobre el sistema es tener instalado el software proporcionado por el fabricante de los nodos inalámbricos. Este se puede encontrar dentro del CD que Crossbow proporciona en el kit de trabajo. El segundo paso es disponer de los nodos inalámbricos con los programas desarrollados instalados en ellos. Para la instalación de los programas se emplea la herramienta “Programmers Notepad 2” provista por el fabricante de las placas. Se debe abrir el fichero de configuración del módulo a instalar mediante la introducción del siguiente comando en la shell: Make micaz install,X mib520,comY X hace referencia al número del nodo e Y hace referencia al número del COMM de programación. Crossbow proporciona los controladores para el puerto USB, cuando se instalan generan dos COMM nuevos, el de numeración inferior sirve para la programación de los nodos, el otro es empleado para la comunicación de los paquetes procedentes de la red. Una vez se tenga los nodos dispuestos, se debe proceder a arrancar el software servidor. Este es el encargado de generar el socket xml que se vincula a la aplicación de localización, para que esta pueda procesar los paquetes y realizar los cálculos pertinentes para obtener los puntos en el espacio. Para lanzar el servidor se necesario abrir el “Cigwin” y escribir el siguiente comando: Xserve –device=comY –xmlc Con el servidor preparado, el último paso que queda por hacer es lanzar el sistema de localización. Para la obtención de buenos resultados, se debe proceder a la calibración del sistema, ajustando los valores de A y N tras diversas pruebas con varios valores. 87 88 BIBLIOGRAFÍA [1] K. Aamondt “CC2431 Location Engine” Chipcon Products from Texas Instruments. [2] Crossbow “XServe Users Manual” Revision D, March 2007. [3] Crossbow “Moteworks Getting Started” Revision D, March 2007. [4] Philip Levis “TinyOS/nesC Programming Reference Manual” January 30, 2006. [5] Crossbow “XMesh Users Manual” Revision C, March 2007. [6] Crossbow “Moteview Users Manual” Revision A, May 2007. [7] Chipcon Products from Texas Instruments Transceiver ” CC2420 2007. “2.4 GHz IEEE 802.15.4 / ZigBee-ready RF [8] Dragos Niculescu y Badri Nath “Ad Hoc Positioning System (APS) Using AOA” DATAMAN lab, Rutgers University. 89