GPSD: un demonio GPS

GPSD es un demonio para el tratamiento de información GNSS. 

Un demonio (daemon)  no es mas que un proceso que se inicia en un sistema operativo y que está siempre activo, capturando los datos recibidos en formato NMEA de dispositivos GNSS (GPS) y  de AIS, procesando dichos datos y  enviandolos   a los programas clientes que los solicitan. Tambien permite la recepción y procesado de sistemas GPS diferencial que corrigen los errores.

El GPSD tiene dos módulos

  • El daemon que captura los datos de un dispositivo GNSS  (GPS)  local o remoto
  • El cliente que consulta los datos que dispone el daemon

Vamos a describir el proceso para hacer funcionar el cliente GPS de la distribución dragonOS sobre una Raspberry Pi model 3, gracias al GPS de que dispone un teléfono móvil Android. También le puede servir para otros dispositivos.

Para conocer que constelaciones de satélites es capaz de recibir el dispositivo móvil que vamos a usar y si recibe solamente en una banda o es dual, nada mejor que la app GPSTest disponible en Google PLay, de esta forma en caso de tener varios dispositivos candidatos podemos seleccioanr el mejor de todos ellos para este fin, En todo caso se necesita Android 8 o superior y disponer de un chip GNSS dual.


Instalar el dispositivo receptor GNSS (GPS)

Si el dispositivo es local bastará con conectarlo al puerto USB (en principio lo debe reconocer) o al puerto RS232C del ordenador donde se instalará el GPS Daemon (GPSD). 

Si quiere reusar el GPS de un dispositivo móvil debe instalar una app como "NMEA Over Network" para Android disponible en Google Play (no descargue app de terceros sitios, se expone a instalar virus). 

Para configurar la app necesitará conocer la IP del ordenador dónde estará el GPSD, que si es LINUX la podrá averiguar desde el terminal con el comando ifconfig.

Por otra parte la app "ping" que para Android puede encontrar en Google Play le ayudará para conocer la IP del dispositivo móvil y comprobar la conectividad del dispositivo móvil con el ordenador que tienen el GPS Daemon mediante el "ping". Si el PING no funciona revise todo antes de continuar, sin PING nada le funcionara.


Instalación y arranque del GPS Daemon

Antes que nada comprobar que está instalado el GPSD en su distribución Linux, en caso contrario instalarlo mediante el comando de  terminal: "sudo apt-get install gpsd" 

Despues salvar el fichero de configuración actual que está en /etc/default/gpsd  (Salve siempre los ficheros antes de modificarlos apra disponer de una vuelta a trás).

Crear un nuevo  fichero de configuración de GSPD y salvarlo en  /etc/default/gpsd, cuyo contenido debe ser 

# arranca el gpsd daemon de forma automatica con el boot o encendido de la Raspberry 
START_DAEMON="true"
# Deshabilitamos el reconocimiento automatico de GPS USB, pues no lo usamos
USBAUTO="false"
# sustituir la direccion x.x.x.x por la del ordenador donde tenemos gpsd 
DEVICES="udp://x.x.x.x:20175" 
# estas opciones las mantengo
GPSD_OPTIONS="-b -n"

GPSD_SOCKET="/var/run/gpsd.sock" 

Comandos desde terminal:

  • sysemctl start gpsd 
  • sysemctl stop gpsd 
  • systemctl restart gpsd
  • systemctl enable gpsd => disponible
  • systemctl is-active gpsd => active si está activo 
  • systemctl status gpsd => indica si está activo o no y todos los valores del arranque
  • gpsd -h => help
  • gpsd -V => gpsd: 3.22
  • gpsd -l => protocolos que es capaz de procesar
  • gpsmon => muestra los parámetros de arranque y los datos recibidos y procesados 

gpsdmon muestra dos pantallas una con datos de los satélites (sistema, numero, posición) y otra con el procesado de los mismos donde aparece la Longitud, latitud, velocidad, altitud, etc.

 

cgps es un cliente gps que comprueba el funcionamiento del daemon y los parametros con los que ha sido arrancadocon CTRL+C se sale del mismo, basta con teclear cgps desde el terminal apra arrancarlo

Arranque e instalación del cliente GPS

En nuestro caso ya tenemos instalado en dragonOS el cliente xgps (http://gpsd.io ), basta con abrirlo desde su localización (applications/Accessories/xgps) o teclear xgps desde el terminal., pulsar "connect" y deberiamos ver los datos proporcionados por el receptor GPS del dispositivo móvil.

 

Pantalla del xgps con la posición de los satélites GNSS (GP: GPS - Global  de USA, SB= SBAS - Sistema aumentado  , BD=Beidou - Global de China, GL: GLONASS - Global de Rusia,  GL: Galileo - Global de Europa, QZ: QZSS - Regional de Japón ,  IM:  IRNSS - Regional India)

Resumen de las opciones  que tenemos operativas en la actualidad: 

  1. El teléfono móvil (Xiaomi A2, Android 10) recibe las señales de los GNSS que es capturada por la app NEMEA over Network que los reenvía en formato NMEA (NMEA0183) por udp a la ip/puerto de la raspberry pi model 3B.  En la Raspberry que tiene instalado el sistema operativo dragonOS (una distribución LINUX basada en Ubuntu),  está escuchando el daemon gpsd que trata la información y la pone disponible a través de conexiones tcp al puerto 2947 de todos aquellos clientes que la soliciten, por ejemplo  los programas  cgps o xgps que se ejecutan en la misma Raspberry. 
  2. El teléfono móvil (Xiaomi A2, Android 10) recibe las señales de los GNSS que es capturada por la app NEMEA over Network que los reenvía en formato NMEA (NMEA0183) por udp a la ip/puerto de un ordenador windows/macOS/linux. En dicho ordenador tenemos instalada la aplicación openCPN en la que hemos configurado la IP/puerto/protocolo configurado en el NEMEA over Network. 
    1. Para instalar openCPN en la Raspberry bastaria con sudo apt-get install opencpn y para usar como fuente el  gpsd habría que configurar una conexión con 
      • protocol:GPSD
      • IP: 127.0.0.1 
      • Port:2947

openCPN trabajando sobre un ordenador y recibiendo los datos de NMEA oevr Network del teléfono móvil Android


Futuros pasos: En estos momentos estoy instalando un servidor NTP (Probaré con ntp, open-ntp y chrony) en la Raspberry para que use los GNSS como patrón de tiempos y probando aplicaciones para que desde otras plataformas se conecten al gpsd (puede haber temas de firewalls y concurrencia de conexiones)

Notas de trabajo

  • NetStumbler (windows) es posible que funciones como  gpsd sobre windows, pero desconozco mas pues el gpsd original y soportado por la comunidad es apra linux. 
  • gpsfeed+ es un programa que simula la salida de un receptor GPS para realizar pruebas
  • openCPN (windows. macOS, linux/ubuntu) en teoría podria procesar los datos procedentes de la app NMEA over Network ademas de los del Android los del daemon  gpsd de la Raspberry ... estamos trabajando en ello, por ahora tiene buena pinta, pero no le llegan los datos

Para leer mas


Prohibida la reproducción parcial o total de este artículo sin permiso previo del autor

 

Comentarios

Entradas populares de este blog

SDR - Software Defined Radio - IIIb: Receptores RSP o MSI (MSI3001: MSI2500 + MSI001)

Ayudas a la navegación aerea: NDB, VOR, ILS y ATIS

Por una montaña más segura