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 RaspberrySTART_DAEMON="true"# Deshabilitamos el reconocimiento automatico de GPS USB, pues no lo usamosUSBAUTO="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 mantengoGPSD_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
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.
Resumen de las opciones que tenemos operativas en la actualidad:
- 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.
- 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.
- 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
Publicar un comentario