GPS con NXT y LabVIEW

El GPS (Global Positioning System) es un sistema que permite determinar en todo el mundo la posición del receptor que recibe dichas señales. Dicho receptor puede formar parte del sistema de navegación de un coche, un avión, un ciclista, o un excursionista, y lo hace con una precisión habitual de varios metros, por lo que tiene tanto aplicaciones civiles como militares. Es posible incrementar la precisión del sistema mediante el uso del denominado GPS diferencial, aunque dicha posibilidad es normalmente empleada de forma exclusiva por sistemas militares. Veamos cómo trabajar el GPS con NXT.

La base de este sistema de localización reside en la medida de las distancias hasta un mínimo de 3 satélites, convenientemente 4. Esto es lo que se conoce como triangulación. Una forma de determinar la posición de un objeto es medir su distancia a otros cuya posición es conocida (en nuestro caso sería la de los satélites). Si trabajamos en dos dimensiones, una circunferencia de radio R1 define la ubicación de todos los posibles puntos que se encuentran a una distancia R1 del centro C1 de dicha circunferencia. La intersección de la anterior con una segunda circunferencia produce normalmente dos posibles puntos de ubicación, los que distan R1 de C1 y R2 del nuevo centro C2. Habitualmente es necesaria una tercera medida o información adicional que nos permita discernir en cuál de los dos puntos anteriores nos encontramos. Del mismo modo, cuando trabajamos en el espacio, la información que recibimos de un satélite nos indica la distancia existente entre nosotros y dicho satélite, lo que supone una esfera de posibles ubicaciones. La intersección de las esferas producidas por las distancias a 3 satélites produce dos posibles puntos. Para determinar cuál de ellos es nuestra posición verdadera, podríamos efectuar una nueva medición a un cuarto satélite. Pero normalmente uno de los dos puntos posibles resulta ser muy improbable por su ubicación demasiado lejana de la superficie terrestre y puede ser descartado sin necesidad de mediciones posteriores.

constelacion GPS, por El Pak
La anterior es una simulación que indica con líneas verdes cuáles de los 24 satélites (4 satélites por cada una de las 6 órbitas) son los que serían visibles para nuestro GPS si consideramos que la visibilidad se entiende como que podemos trazar una recta entre ellas hasta un ángulo máximo de 45º.

La medida de distancias a los satélites se basa en el cálculo del tiempo empleado en la propagación de ondas de radio entre el satélite y nuestro sistema. Con este objetivo se requiere que tanto satélite como el sistema generen una misma señal (pseudoaleatoria): el desfase entre ambas medido en el receptor proporciona la medida de la distancia. Teniendo en cuenta que dicha propagación se produce a la velocidad de la luz, es necesaria una imprescindible sincronización entre los relojes de nuestro sistema y el de los satélites, así como el uso de relojes muy precisos.

Aunque parece obvio, las medidas anteriores parten de la base de que es necesario conocer dónde están los satélites en el espacio. El sistema GPS fue desarrollado e instalado por el Departamento de Defensa de los Estados Unidos, que mantiene 24 satélites a unas órbitas cercanas a los 20.000 km y cuyas posiciones son conocidas. La antigua Unión Soviética tenía un sistema similar (GLONASS), mientras que la Unión Europea está desarrollando en la actualidad su propio sistema de posicionamiento por satélite (Galileo).

Teniendo en cuenta que la precisión habitual del GPS es de varios metros si no consideramos sistemas de corrección diferencial (DGPS), el uso de un GPS en un MINDSTORMS no suele ser de utilidad alguna en un entorno cerrado, puesto que el propio error de medida es del tamaño igual o mayor que el espacio en el que nos encontramos, y esta información no nos aporta nada: en cualquier punto de la habitación recibiremos seguramente la misma señal. Pero si llevamos el NXT al exterior sí podemos disponer de un sistema de ayuda al posicionamiento y navegación. Alternativamente podemos compaginar la información del GPS con la proporcionada por otros sensores y crear un sistema más robusto.

Existen varios ejemplos de uso del GPS con el NXT. La arquitectura más simple es la de hacer uso de un receptor GPS comercial externo que nos proporcione la información de localización, como una PDA. En este caso, la forma habitual de conexión de nuestro NXT con el receptor GPS será habitualmente bluetooth. Los sistemas GPS hacen uso de un protocolo de comunicaciones serie denominado NMEA 0183, o NMEA, que define cómo debe transmitirse la información en formato ASCII desde un transmisor hasta los posibles escuchas.

El aspecto de lo que nos puede devolver un receptor GPS, de acuerdo al formato NMEA, es similar al siguiente:

$GPRMC,145055,V,4453.6083,N,00944.9533,E,000.0,000.0,070399,,,N*7F

en donde cada uno de los elementos anteriores debe ser parseado teniendo en cuenta que:

 

$GPRMC indica el tipo de cadena NMEA
145055 corrección de posición del tiempo GPS (segundos)
V calidad de los datos: A = posición válida, V = aviso de alarma
4453.6083 latitud “ddMM.mmnn”
N latitud N o S hemisferio
00944.9533 longitud “DddMM.mmnn”
E longitud E o W hemisferio
000.0 velocidad sobre tierra (nudos)
000.0 rumbo sobre tierra (0-359.9 grados)
070399 fecha de la correción de posición “ddmmyy”
no empleado
no empleado
N N = Dato no válido; A = Modo Autónomo etc.
* delimitador
7F byte de checksum (= byte1 eor byte2 eor byte3 eor … byte62)

La cadena finaliza con los códigos ASCII “13” (retorno de carro) y “10” (line feed).

La rutina para parsear la información proveniente de los receptores tendrá en cuenta por tanto los caracteres de inicio, que siempre son del tipo $GP y extraerá por tanto toda la cadena existente hasta ubicación del siguiente string $GP. Una vez extraída la información de localización del string que recibimos del GPS, lo que hagamos con esa información depende de nuestra aplicación: seguir una ruta, etc.

Una opción más atrevida es la de desarrollar nuestro propio sensor GPS, tal como hizo Martijn ten Bhömer. Dicho receptor GPS se conecta al NXT mediante un cable a unos de los puertos convencionales haciendo uso del protocolo I2C. En el interior de este sensor existe un microcontrolador que hace de puente entre el NXT y el sensor GPS USGlobalSat EM-406A. Este micro se comunica con el sensor mediante el protocolo NMEA-0183, y con el NXT a través del I2C. Una de las ventajas de esta arquitectura, frente a la anterior, es que el micro intermedio permite liberar al NXT de la sobrecarga que impone el parsing del código recibido por el GPS. La desventaja es la necesidad de crear el hardware. La aplicación elegida para demostrar la utilidad de este sensor consistía en desarrollar un robot capaz de seguir una ruta. El software que se ejecutaba en el NXT corría en LeJOS y Martijn se resiente de las imprecisiones matemáticas en esta plataforma, en concreto para las raíces cuadradas necesarias para el cálculo de distancias. Podemos ver dicha aplicación funcionando en el siguiente video.

Otra implementación distinta es la realizada por convict. En este caso también implementaron su propio hardware, e hicieron uso del módulo GPS SkyTraq Venus 6 ST22 de perthold. La filosofía de este proyecto es exactamente la misma que la del anterior, pero en este caso programaron el NXT mediante LabVIEW Education Edition, y el micro encargado de comunicarse con el módulo GPS fue un PIC16F88.

Información adicional:

Comments are closed.