User Tools

Site Tools


tecnica:gps_cartografia_gis:fake_gps

Simulare un GPS via gpsd o via seriale

Il problema: simulare la presenza di un GPS in modo che un programma client possa leggere i dati via via che arrivano. Vogliamo fornire in input i dati memorizzati in un tracciato GPX.

Il programma client potrebbe voler leggere via TCP/IP tramite gpsd oppure aprire direttamente la seriale (es. /dev/ttyS0) per leggere le stringhe NMEA.

Anzitutto convertiamo il file .gpx in stringhe NMEA:

gpsbabel -i gpx -f track.gpx -o nmea -F track.nmea

Quindi si lancia il comando gpsfake (fornito dal pacchetto Debian python-gps):

gpsfake -b -c 0.5 percorso.nmea

In questo caso facciamo il replay del tracciato intervallando ogni stringa NMEA di 0.5 secondi. Aggiustare l'intervallo fino ad ottenere la velocità di replay desiderata.

gpsfake si comporta cone un gpsd, cioè si pone in ascolto sulla porta 2947 TCP e risponde ai client che si connettono. Se il programma client utilizza una connessione del genere abbiamo finito.

Se invece il programma client vuole aprire una porta seriale, dobbiamo scoprire quale pseudo terminale sta usando gpsfake:

niccolo@delfi:~$ lsof | grep gpsfake | grep pts
gpsfake   6031           niccolo    0u      CHR      136,7       0t0      10 /dev/pts/7
gpsfake   6031           niccolo    1u      CHR      136,7       0t0      10 /dev/pts/7
gpsfake   6031           niccolo    2u      CHR      136,7       0t0      10 /dev/pts/7
gpsfake   6031           niccolo    5u      CHR     136,10       0t0      13 /dev/pts/10

In questo caso si vede che il programma utilizza due terminali: /dev/pts/7 e /dev/pts/10. Il primo di solito è il terminale dal quale abbiamo lanciato il comando, il secondo (/dev/pts/10 nel nostro caso) è il terminale su cui sta ripetendo i dati NMEA.

Per conferma possiamo vedere se escono le stringhe NMEA con:

cat /dev/pts/10

Sarebbe fatta, a meno che il progrmma client in questione voglia per forza usare /dev/ttySx, allora tocca fare un link simbolico:

rm /dev/ttyS4
ln -s /dev/pts/10 /dev/ttyS4

Abbiamo utilizzato /dev/ttyS4 perché è una porta seriale inesistente sul nostro computer. Al prossimo reboot il /dev/ttyS4 dovrebbe essere ripristinato come in origine.

tecnica/gps_cartografia_gis/fake_gps.txt · Last modified: 2010/10/01 16:45 by niccolo