User Tools

Site Tools


tecnica:gps_cartografia_gis:fake_gps

This is an old revision of the document!


Simulare un GPS via seriale o via gpsd

Il problema: simulare la presenza di un GPS in modo che un programma client possa leggere i dati via via che arrivano.

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

Vogliamo fornire i dati provenienti da un file GPX, 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 /dev/pts/7 e /dev/pts/10. La prima 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:

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

Nel nostro caso /dev/ttyS4 è una porta seriale inesistente sul computer. Al prossimo reboot il /dev/ttyS4 dovrebbe essere ripristinato come in origine.

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