Daten aus einer GPS-Maus erfassen und verarbeiten

Aus LinuxUser 06/2016

Daten aus einer GPS-Maus erfassen und verarbeiten

© Vadim Georgiev, 123RF

Sicher navigieren

GPS-Daten erlauben es Ihnen, Ihre momentane Position exakt zu bestimmen. Open-Source-Tools helfen dabei, die Daten auszuwerten.

Kaum ist es eingeschaltet, findet ein Smartphone seine Position. Dabei stützt es sich im Wesentlichen auf drei Funksysteme: Mobilfunkortung, WLAN-Ortung und GNSS. Im ersten Fall weiß der Anbieter, in welche Funkzelle sich das Handy eingebucht hat; auf Wunsch teilt er das dem Gerät mit. Die Genauigkeit hängt dabei von der Größe der Zelle ab: In der Stadt liegt sie bei wenigen Hundert Metern, auf dem Land bei einigen Kilometern. Bei der WLAN-Ortung scannt das Handy alle WLAN-Netze der Umgebung und sendet deren Kennungen an einen Server. Dieser sieht in seiner Datenbank nach, wo sich die Hotspots befinden. Über die ihm mitgeteilte Stärke der Signale verfeinert er die Daten zur Position und informiert das Handy.

Das dritte Verfahren nutzt Satellitenkonstellationen, neudeutsch Global Navigation Satellite Systems (GNSS), deren bekanntestes GPS ist. Es steht unter der Leitung des US-amerikanischen Verteidigungsministeriums. Manche Geräte empfangen auch Signale des russischen Netzes GLONASS. Das europäische System Galileo befindet sich noch im Aufbau.

Die Navigation via Satellit funktioniert komplementär zu den terrestrischen Verfahren. Die Genauigkeit von 5 bis 20 Metern steht nahezu weltweit bereit. Der Fehler bei terrestrischen Systemen liegt zwischen 10 Metern und unendlich (außerhalb eines Mobilfunknetzes). Dafür arbeiten sie schnell, während eine Ortung über Satellit unter Umständen einige Minuten dauert. Zum Bestimmen der Position in Gebäuden fällt das Signal von Satelliten zu schwach aus.

Diese wenigen Grundlagen verdeutlichen, warum Provider ihre terrestrischen Daten zur Position nur im Tausch gegen GPS-Daten der Nutzer freigeben. Dadurch halten die Betreiber ihre WLAN-Datenbank aktuell, ohne selbst vor Ort nach neuen Hotspots suchen zu müssen. Technisch arbeitet GPS jedoch völlig unabhängig von anderen Systemen. Bei GPS weiß nur der Empfänger, wo er sich befindet – das Koppeln mit der WLAN-Ortung wäre nicht notwendig.

GPS-Empfang

Die meisten GNSS-Systeme ermitteln die Position über Multilateration. Dabei misst der Empfänger die Laufzeiten des Signals vom Satelliten, die umso länger ausfällt, je weiter ein Satellit entfernt ist. Die genaue Position der Satelliten und die Zeit finden sich kodiert in den GPS-Signalen.

Die Intensität des Signals beim Empfänger liegt unter der des thermischen Rauschens. Ein Empfang gelingt nur, weil das Signal einen großen Frequenzbereich von einigen Megahertz belegt und nur wenige Signalmuster (“Pseudo Random Codes”) vorkommen, die der Empfänger durchprobieren muss. Die Datenrate beschränkt sich auf 50 Bit/s. Ein Kaltstart eines GPS-Empfängers, bei dem dieser die kompletten GPS-Ephemeriden der GPS-Satelliten einliest, dauert deshalb fast eine Viertelstunde.

Spezielle Mikroprozessoren verrechnen die Daten. Chips für den Consumer-Bereich begnügen sich damit, die verarbeiteten Daten auszugeben, Zwischenergebnisse sind nicht zugänglich. Dafür kosten solche Bausteine nur wenige Euro. Zu den bekannteren Herstellern zählen Qualcomm (Sirfstar-V), Skytraq (Venus 8), Mediatek (MT3329) und U-Blox. Der Kasten “Positionsdaten” zeigt, welche typischen Daten ein solcher Chip im NMEA-Format ausgibt.

Positionsdaten

  • Position, angegeben in geografischer Länge und Breite
  • Höhe über Normalhöhennull
  • Geoidundulation, Korrektursummand für Höhenbestimmung
  • Datum, Uhrzeit
  • Maßzahl für die Qualität der Daten
  • Hinweis, ob Korrektursignale verarbeitet wurden (EGNOS, WAAS)
  • Grobposition der Satelliten, bezogen auf den Standort
  • Stärke der Satellitensignale

Die ersten Daten

Die Ergebnisse für diesen Test liefert eine USB-GPS-Maus mit einem Venus-8-Chip der Firma Skytraq (Abbildung 1). Sie besitzt 167 Kanäle. Zum Vergleich: Die frühen Taschenempfänger galten als fortschrittlich, wenn sie die Daten von 32 Satelliten gleichzeitig verarbeiten konnten. Die Empfindlichkeit gibt der Hersteller mit -190 dB an.

Abbildung 1: Im Gegensatz zu den frühen Empfängern für den privaten Gebrauch weisen die heutigen Modelle in Form einer USB-Maus eine wesentlich größere Empfindlichkeit auf.

Abbildung 1: Im Gegensatz zu den frühen Empfängern für den privaten Gebrauch weisen die heutigen Modelle in Form einer USB-Maus eine wesentlich größere Empfindlichkeit auf.

Treiber zum Auswerten des Datenstroms aus dem USB-Interface der Maus stehen im Kernel bereit. Um den Datenstrom zu lesen, benötigen Sie den Namen, unter dem das System die GPS-Maus erkannt hat. Diesen finden Sie über die Abfrage mit dmesg in der ersten Zeile von Listing 1 heraus.

Listing 1

$ dmesg -T | grep tty
[12:07:15 2016] usb 1-9: cp210x converter now attached to ttyUSB0
[12:07:16 2016] pps pps0: source "/dev/ttyUSB0" added
[12:08:20 2016] cp210x ttyUSB0: cp210x converter now disconnected from ttyUSB0

Der Filter grep tty schränkt die Angabe der Treiber auf spezielle Eingabegeräte ein. Hier kommt es auf die letzten Zeilen der Antwort an, in Listing 1 in den Zeilen 2 bis 4 wiedergegeben: Das System erkannte das Einstecken (um 12:07 Uhr) sowie das Abziehen (um 12:08 Uhr) der GPS-Maus, die demnach unter dem Namen /dev/ttyUSB0 aktiv war. Dieser Name dient im Folgenden als Platzhalter; bei anderen Systemen passen Sie ihn entsprechend an.

Im Prinzip sollten die Daten der GPS-Maus nach Eingabe des folgenden Befehls auf der Konsole erscheinen:

$ cat < /dev/ttyUSB0

Drei mögliche Ursachen verhindern in vielen Fällen zunächst die Ausgabe: Lautet die erste Fehlermeldung Permission denied, so fügen Sie das aktuelle Benutzerkonto der Gruppe dialout hinzu. Das erledigen Sie mit folgendem Befehl:

$ sudo adduser Benutzername dialout

Der Befehl groups kontrolliert das Ergebnis. Damit die Änderung wirkt, müssen Sie sich einmal ab- und dann wieder anmelden.

Die Fehlermeldung Device busy deutet darauf hin, dass ein anderer Prozess auf das Gerät zugreift (Listing 2). Um welchen es sich dabei handelt, stellen Sie mithilfe des Befehls lsof fest, über den wir bereits in einer früheren Ausgabe berichtet haben [1]. Im Beispiel aus Listing 2 stört das Programm Gpsd (Zeile 6). Deshalb beenden Sie es mit dem Befehl aus Zeile 7.

Listing 2

$ ps -eo 'tty,pid,comm' | grep "gpsd"
?         3195 gpsd
$ sudo lsof | grep ttyUSB
lsof: WARNING: cannot stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
gpsd   3382    gpsd   9u   CHR   188,0   0t0   544   /dev/ttyUSB0
$ sudo killall gpsd

Die letzte Hürde liegt gelegentlich darin, die richtige Baudrate einzustellen. Die Stty-Abfrage in Listing 3 liefert einen Wert von 115?200 Baud. Für die hier genutzte GPS-Maus liegt der korrekte Wert bei 4800 Baud.

Listing 3

$ stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
-brkint -imaxbel
$ stty -F /dev/ttyUSB0 ispeed 4800
stty: /dev/ttyUSB0: unable to perform all requested operations

Jetzt sollte es gelingen, die Ausgaben der GPS-Maus abzufragen (Listing 4). Eine NMEA-Datenzeile beginnt mit einem $, gefolgt von typischerweise fünf Buchstaben, welche die folgenden Felder charakterisieren. Die Zeile endet mit einem Asterisk (*) und einem zweistelligen Kontrollcode.

Listing 4

$ cat < /dev/ttyUSB0
$0,0.0,0.0*30
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPRMC,111105.000,V,0000.0000,N,00000.0000,E,000.0,000.0,200316,,,N*75
$GPGGA,111106.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*6B
[...]

In Listing 4 sind die Daten in Zeile 3 noch unvollständig. Die beiden folgenden Zeilen bestehen aus Leerstellen und Nullen, da außer der Zeit noch keine Daten von Satelliten empfangen wurden. Im Folgenden spielen vor allem die Zeichenketten ein Rolle, die mit $GPGGA beginnen. Hinsichtlich der Bedeutung der anderen Ketten sei auf Quellen im Internet [2] verwiesen.

Daten filtern

Um aus dem NMEA-Datenstrom die Koordinaten zu extrahieren, greifen Sie zu Awk. Das Programm filtert den Datenstrom, den es über eine Pipe erhält. Dabei dient im Beispiel aus Listing 5 das Komma als Feldtrenner (FS). Das Tool gibt das erste Feld ($1) aus, hier also das Dollar-Zeichen und die fünf folgenden Buchstaben. Im Beispiel aus Listing 6 wertet es nur diejenigen Zeilen aus, die den String GPGGA enthalten, und nennt die Felder für die Zeit und Position (Listing 6).

Listing 5

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } ; { print $1 }'

Listing 6

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } /GPGGA/ \
  { print "ID: ", $1, "Zeit: ",  $2, \
    "Breite: ",    $3, "Länge: ", $5, "Höhe: ", $10}'

Das Beispiel in Listing 7 formatiert die Ausgabe so, dass die Koordinaten in Dezimalgrad erscheinen statt in Grad und Minuten (Abbildung 2). Fünf Nachkommastellen genügen für eine metergenaue Positionsangabe, entsprechend der Auflösung von GPS. Die Variable OFMT regelt, dass die Software diese fünf Nachkommastellen anzeigt. Für Europa genügt die Beschränkung auf zwei führende Ziffern für die Grad-Angabe.

Listing 7

$ cat < /dev/ttyUSB0 | awk 'BEGIN { FS = "," } {OFMT = "%2.5f"} /GPGGA/ \
  { print "Uhrzeit:", \
    substr($2,1,2), ":", substr($2,3,2), ":", substr($2,5,4), ";", \
    "Breite:", substr($3,1,2)+ substr($3,3,7)/60, \
    "Länge:",  substr($5,1,3)+ substr($5,4,7)/60, \
    "Höhe:",   $10, "m"}'

Abbildung 2: Mithilfe von Awk formatieren Sie die Ausgabe der GPS-Maus so um, dass die Felder der Datenzeilen für Menschen leichter lesbar sind.

Abbildung 2: Mithilfe von Awk formatieren Sie die Ausgabe der GPS-Maus so um, dass die Felder der Datenzeilen für Menschen leichter lesbar sind.

Erscheinen Ihnen die Vorbereitungen zu mühselig, um die Daten in die Konsole umzuleiten, greifen Sie zum Programm Putty, das Sie über sudo apt-get install putty auf einem Debian-System installieren (Abbildung 3). Setzen Sie den Aufruf sudo putty -log terminaldata.nme in einem Terminal ab, dann landen alle eingelesenen Daten in der entsprechenden Datei.

Abbildung 3: Das Terminalprogramm Putty hilft Ihnen dabei, die Daten aus einer GPS-Maus in einer Datei zu speichern.

Abbildung 3: Das Terminalprogramm Putty hilft Ihnen dabei, die Daten aus einer GPS-Maus in einer Datei zu speichern.

Damit das klappt, passen Sie nach dem Start von Putty die drei Parameter Connection type (Serial), Serial line (/dev/ttyUSB0) und Speed (4800) an. Die Daten der Protokolldatei stehen für eine nachträgliche Analyse bereit. Dazu ersetzen Sie den Parameter < /dev/ttyUSB0 durch den Dateinamen der Protokolldatei aus der Putty-Session, hier terminaldata.nme.

Komfortabler bereitet das Programm Gpsmon die NMEA-Daten auf (Abbildung 4). Es gehört zum Paket gpsd-clients, dessen Programme fast alle auf Gpsd aufsetzen. Das Programm agiert flexibel: Es startet ohne Gpsd, anschließend übergeben Sie ihm einfach den Namen der entsprechenden Gerätedatei (im Beispiel /dev/ttyUSB0). Rufen Sie die Software ohne Parameter auf, holt es sich die Informationen über den Gpsd-Daemon.

Abbildung 4: Das Programm Gpsmon liefert eine übersichtliche Ausgabe der GPS-Daten, die es aus einer via USB angeschlossenen GPS-Maus ausliest.

Abbildung 4: Das Programm Gpsmon liefert eine übersichtliche Ausgabe der GPS-Daten, die es aus einer via USB angeschlossenen GPS-Maus ausliest.

Die Applikation präsentiert alle Daten, die sie in den Datenströmen findet. Das Feld Cooked PVT fasst Zeit und Position zusammen. Die Höhe fehlt an dieser Stelle, was auf den Ursprung des Datenformats hinweist: In der Hochseeschifffahrt bewegen sich alle Teilnehmer immer auf einer Höhe um null Meter.

Die Angabe Sentences listet die unterschiedlichen NMEA-Zeilen, hier sieben Gruppen. Die Daten im Feld (GP)GSV benennen die erkannten Satelliten. Die Auswertung erläutern wir im Zusammenhang mit dem Programm Xgps im Abschnitt “Genauigkeit”. Zeit und Position stehen im Feld (GP)RMC – im Format, in dem NMEA sie ausgibt. Dabei handelt es sich um eine Reminiszenz an die Zeit, in der die angeschlossenen Geräte lediglich Zahlen anzeigten, aber nicht selbst umrechneten.

Im Prinzip ließe sich die Geschwindigkeit aus der Dopplerverschiebung der Signale vom Satelliten unabhängig von der Position berechnen. Einfache Geräte wie die vorliegende GPS-Maus verzichten darauf. Stattdessen leiten sie die Geschwindigkeit aus der zeitlichen Änderung des Orts ab, ebenso den Kurs. Ein ruhender GPS-Empfänger dieser Bauart kennt keine Orientierung und weiß nicht, wo Norden ist.

Besondere Bedeutung hat der Eintrag FAA. Der Buchstabe D bedeutet, dass die Hardware Korrektursignale über geostationäre EGNOS-Satelliten (Europa) oder die WAAS-Pendants (USA) empfängt. Bei schlechtem Empfang gelingt das nicht, FAA trägt dann den Wert A.

Das GPS-System weiß erst einmal nichts über die Qualität der Signale. Als Hinweis dient die abgeleitete Größe Dilution of Precision (DOP). Der Geometriefaktor sagt aus, wie gut die Satelliten am Himmel verteilt sind. Ein Wert kleiner 2 ist gut, einer über 5 schlecht. Der Geometriefaktor zählt zu den Gründen, warum das Bestimmen der Höhe weniger präzise erfolgt als das Bestimmen der Position in der Ebene: Die Erde schirmt die Satelliten unterhalb des Betrachters ab. Ein weiterer Grund liegt in der Unsicherheit der Geoidbestimmung, also der Berechnung der Entfernung vom Erdmittelpunkt zur Erdoberfläche.

Schnittstelle

Gpsd [3] filtert als Hilfsprogramm die Nutzdaten aus dem NMEA-Datenstrom eines GPS-Geräts und stellt sie für andere Programme am Port 2947 auf Abruf bereit. Geht alles gut, erkennt die Software das angeschlossene Gerät und vereinbart den bestmöglichen Datenaustausch.

Die hier verwendete GPS-Maus nimmt keine Steuerbefehle entgegen. Deshalb beschränkt sich Gpsd darauf, die Baudrate richtig zu erkennen. Seine Default-Werte holt sich das Programm aus der Datei /etc/default/gpsd (Listing 8). Der erste Wert legt fest, dass die Software als Hintergrunddienst (“Daemon”) startet, mit USBAUTO=true erkennt es automatisch angeschlossene GPS-Geräte.

Listing 8

START_DAEMON="true"
GPSD_OPTIONS="-n -b"
DEVICES=""
USBAUTO="true"
GPSD_SOCKET="/var/run/gpsd.sock"

So einfach der Einsatz scheint, gibt es dennoch zwei Dinge, die Benutzer unter Umständen in die Verzweiflung treiben. So kennt das Protokoll NMEA keinen Rückkanal. Um dennoch Parameter für das Gerät einzustellen, wie etwa die Übertragungsrate, nehmen manche GPS-Geräte chipspezifische Binärcodes entgegen. Viele davon kennt Gpsd und versucht, die Baudrate zu optimieren. Manche Geräte interpretieren die Befehlsfolgen jedoch falsch und verweigern anschließend das Übermitteln der Daten. Sicherheitshalber haben die Entwickler die Liste der Optionen um den Schalter -b ergänzt, um ein Senden durch Gpsd zu unterbinden.

Das zweite Problem tritt auf, wenn der Daemon mit einem anderen Dienst konkurriert – beispielsweise mit sich selbst, wenn Sie den Dienst mit anderen Parametern oder mit dem Programm Gpsfake starten möchten. Listing 9 veranschaulicht das Problem am Beispiel des Aufrufs gpsd -N -n -D 3 /dev/ttyUSB0, der oft bei der Fehleranalyse zum Einsatz kommt.

Listing 9

$ sudo killall gpsd
$ gpsd -N -n -D 3 /dev/ttyUSB0
gpsd:INFO: launching (Version 3.11)
gpsd:ERROR: can't bind to IPv4 port gpsd, Address already in use
$ gpsmon
tcp://localhost:2947          JSON slave driver>

Der Befehl killall in Zeile 1 beendet Gpsd. Mit den Schaltern -N (nicht als Daemon starten) und -D 3 (im Terminal anzeigen, was gerade passiert) schlägt der Neustart des Programms (Zeile 2) mit der Fehlermeldung already in use fehl (Zeile 4).

Den Aufruf von Gpsmon ohne Angabe des GPS-Geräts hätte das Programm mit der Fehlermeldung gpsmon: activation of device tcp://localhost:2947 failed, errno=111 (Connection refused) quittieren müssen, wenn Gpsd nicht aktiv ist. Stattdessen startet das Programm, wartet aber erfolglos auf Daten.

Ein kurzes Abziehen und erneutes Einstecken der GPS-Maus startet den Daemon korrekt; Gpsmon erhält nun die Daten vom Satelliten. In dem Zustand hilft das Programm Lsof [1] dabei, den Port 2947 zu untersuchen, auf dem der Daemon sendet (Listing 10). Wie erwartet laufen die Programme Gpsmon und Gpsd (Zeile 5 bis 8).

Listing 10

$ sudo lsof -i :2947
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd    1 root   39u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
systemd    1 root   40u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
gpsd    4525 gpsd    4u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
gpsd    4525 gpsd    5u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
gpsd    4525 gpsd    9u  IPv4  72940      0t0  TCP localhost:gpsd->localhost:57664 (ESTABLISHED)
gpsmon  4556   rp    3u  IPv4  74098      0t0  TCP localhost:57664->localhost:gpsd (ESTABLISHED)
$ sudo killall gpsd
$ sudo lsof -i :2947
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd   1 root   39u  IPv6  71185      0t0  TCP ip6-localhost:gpsd (LISTEN)
systemd   1 root   40u  IPv4  71186      0t0  TCP localhost:gpsd (LISTEN)
$ sudo systemctl stop gpsd.service
Warning: Stopping gpsd.service, but it can still be activated by: gpsd.socket
$ sudo systemctl stop gpsd.socket

Zusätzlich ist ein Socket (Schnittstelle zum System) über Systemd aktiv. Beenden Sie den Daemon mit killall (Zeile 9), bricht Gpsmon erwartungsgemäß ab. Aber das Socket über Systemd bleibt weiterhin präsent. Übersehen Sie diese Tatsache, verzweifeln Sie bei der Fehlersuche: Die GPS-Programme scheinen ordnungsgemäß zu laufen, finden aber keine Daten.

Der Befehl systemclt stop gpsd in Zeile 14 liefert das gleiche Ergebnis wie das Kommando killall. Aber er gibt einen Hinweis, was zu tun ist. Stoppen Sie das Socket (Zeile 16), enden alle Zugriffe auf Port 2947.

Jetzt gelingt auch der Aufruf von Gpsd im Editor-Modus, wie wir ihn bereits in Listing 6 versucht haben. Startet das Programm Gpsmon in einem eigenen Terminalfenster, sehen Sie im Gpsd-Fenster die Daten, die über den Port 2947 fließen.

Gpsfake

Die Suite Gpsd entkoppelt nicht nur die Hardware zum Bestimmen der Position von der Software, die die Daten auswertet: Sie geht noch einen Schritt weiter und erlaubt es, GPS-Daten von einem Datenträger einzuholen. Das wiederum ermöglicht es, einen einmal aufgezeichneten NMEA-Datenstrom immer wieder einzuspielen, sodass die Programme zum Auswerten diese für neue Daten halten. Wer eigene Programme schreibt, weiß diese Debugging-Option zu schätzen.

Bei korrekter Baudrate und deaktiviertem Gpsd sammelt der Befehl cat < /dev/ttyUSB0 > test.nme die Ausgabe in der Datei test.nme. Im Prinzip genügt für die Simulation der Aufruf gpsfake test.nme. Besser ist es jedoch, die Wiederholfrequenz der Daten festzulegen. Der Schalter -c 1 würde die Daten genauso schnell ausgeben wie die verwendete GPS-Maus, also einen Datensatz pro Sekunde. In Listing 11 wählen wir 0,1 Sekunden, was einem zehnfachen Zeitraffer entspricht.

Listing 11

$ gpsfake -c 0.1 test.nme
Processing test.nme
gpsd:ERROR: can't bind to IPv4 port 2947, Address already in use
[...]
gpsfake: log cycle of test.nme begins.
$ sudo systemctl stop gpsd.socket
$ gpsfake -c 0.1 test.nme
Processing test.nme
gpsfake: log cycle of test.nme begins.

Gpsd-Clients

Die Gpsd-Suite bringt noch weitere Programme mit: Das Programm Gpspipe entspricht dem Cat-Befehl, mit dem Unterschied, dass Gpsd den Datenverkehr regelt. Der Aufruf gpspipe -r > test.nme schreibt so lange Rohdaten in die Datei test.nme, bis Sie das Programm mit [Strg]+[C] abbrechen. Alternativ fügen Sie den Schalter -n 500 hinzu, woraufhin die Software selbstständig nach 500 Zeilen abbricht.

Das Programm Gpslogger transformiert NMEA-Daten in das XML-Format GPX. GPX-Tracks enthalten lediglich Daten mit vier Parametern: Länge, Breite, Höhe und Zeit. Manchmal kommt ein Hinweis auf die Qualität der Daten hinzu. Erweitern Sie die einzelnen Punkte um einen Namen, spricht man von Wegpunkten oder – wenn sie in einer Reihenfolge zueinanderstehen – von einer Route. Die XML-Auszeichnungen führt die Tabelle “GPX-Elemente” auf. Eine GPX-Datei kann gleichzeitig mehrere Tracks, Routen und Wegpunkte enthalten (Listing 12).

GPX-Elemente

<trk> Track
<trkpt> Tracking-Punkt
<rte> Route
<rtept> Routenpunkt
<wpt> Wegpunkte

Listing 12

<?xml version="1.0" encoding="utf-8"?>
<gpx ...>
 <trk>
  <src>GPSD 3.11</src>
  <trkseg>
   <trkpt lat="50.886080" lon="6.967878">
    <ele>62.900000</ele>
    <time>2016-03-05T13:24:11.000Z</time>
    <src>GPSD tag=""</src>
    <fix>3d</fix>
   </trkpt>
[...]
   </trkpt>
  </trkseg>
 </trk>
</gpx>

Genauigkeit

Die kurze Antwort auf die Frage, wie genau GPS einen Standort verortet, lautet: schlechter als ein Meter, oft besser als zehn Meter. Das Programm Gpsprof veranschaulicht den Sachverhalt. Nach der Eingabe von gpsprof -n 1000 -T png | gnuplot -persist und 1000 Sekunden Wartezeit, während der Sie den Empfänger nicht bewegen dürfen, entsteht ein Bild ähnlich wie in Abbildung 5.

Abbildung 5: Die Präzision von GPS-Daten schwankt, wie ein Versuch mit dem Programm Gpsprof und der Ausgabe über Gnuplot deutlich macht.

Abbildung 5: Die Präzision von GPS-Daten schwankt, wie ein Versuch mit dem Programm Gpsprof und der Ausgabe über Gnuplot deutlich macht.

Der äußere Kreis entspricht dabei einem Radius von 6,5 Metern. Er schließt 99 Prozent der Messpunkte ein (CEP-99%, “Circular Error Probability”). Bei 95 Prozent streuen die Werte nur um plus-minus 4 Meter. Trotz der hohen Präzision (kleine Streuung) ist die Genauigkeit zum Referenzwert schlechter als acht Meter.

Der rote Kreis symbolisiert den nachträglich eingetragenen Referenzwert; er stammt aus anderen Messungen. Noch größer fallen die Unterschiede beim Bestimmen der Höhe aus. Trotz kleiner Streuung (um wenige Meter) liegt die gemessene Höhe um 15 Meter über dem tatsächlichen Wert.

Differenzielle GNSS-Verfahren steigern die Genauigkeit, wenn Sie die Position nicht absolut bestimmen, sondern in Relation zu einem genau ausgemessenen Punkt. Durch den Empfang bodengestützter, kostenpflichtiger Korrektursignale erreichen Geodaten eine DGPS-Genauigkeit von wenigen Zentimetern, durch ein Postprocessing noch eine Größenordnung mehr.

Die Dienste EGNOS (Europa) und WAAS (Nordamerika) stellen für alle GPS-Nutzer global satellitengestützte Korrektursignale bereit, die eine recht stabile Genauigkeit um fünf Meter sicherstellen. Transponder strahlen die Signale von geostationären Satelliten ab, die nur unter günstigen Bedingungen zu empfangen sind. Das Programm Xgps verdeutlicht die Situation. Nach Eingabe des Programmnamens ohne weitere Parameter in einem Terminal öffnet sich das Hauptfenster (Abbildung 6).

Abbildung 6: Xgps visualisiert auf Wunsch die Position der Satelliten, die im jeweiligen Moment zum Bestimmen der Position bereitstehen.

Abbildung 6: Xgps visualisiert auf Wunsch die Position der Satelliten, die im jeweiligen Moment zum Bestimmen der Position bereitstehen.

Die linke Tabelle ist aus Abbildung 4 des Programms Gpsmon vertraut: Die stereografische Projektion rechts zeigt die Satelliten (PRN) mit ihren Koordinaten Elevation (Elev) und Azimuth (Azim). So steht Satellit 13 nahe dem Zenit. Der Kreis erscheint gefüllt, da seine Signale zum Berechnen der Position beitragen (used). Er ist grün wegen der relativ hohen Stärke des Signals. Satellit 8 steht am Horizont in nordnordöstlicher Richtung. Sein schwaches Signal fließt nicht in die Berechnung ein (roter, offener Kreis).

Eine Besonderheit weisen die Satelliten 120 und 136 auf, die EGNOS-Transponder auf den Satelliten Inmarsat AOR-E und SES-5. Sie übertragen keine Informationen, die unmittelbar beim Bestimmen der Position helfen (offenes Symbol), dafür senden sie Daten für die Signalkorrektur der anderen Satelliten (daher Quadrate statt Kreise).

Abbildung 7: Cgps arbeitet ähnlich wie Gpsmon, versucht aber gleichzeitig Abweichungen in den Positionsdaten aufzuzeigen. Allerdings blieb im Test unklar, worauf diese Abschätzung beruht.

Abbildung 7: Cgps arbeitet ähnlich wie Gpsmon, versucht aber gleichzeitig Abweichungen in den Positionsdaten aufzuzeigen. Allerdings blieb im Test unklar, worauf diese Abschätzung beruht.

Der Vollständigkeit halber sei das Programm Cgps erwähnt (Abbildung 7). Im Vergleich zu Gpsmon bemüht es sich zusätzlich um eine Angabe der Fehler der Positionsdaten. Worauf die Abschätzung basiert, bleibt ein Rätsel [4].

Es verwirrt etwas, dass die Monitorprogramme die Angaben zur Qualität unterschiedlich bezeichnen. Tatsächlich steht nur die Informationen bereit, ob eine Positionsangabe gelingt (2D, 3D, DGPS) oder nicht, ob die Satelliten günstig stehen (DOP) sowie die statistische Analyse vieler Datenpunkte.

Da sich fast immer mehr als drei Satelliten in Sichtweite befinden, gilt ein 3D-Fix heute als Standard, wie es das Programm Xgps im Feld Status vermerkt. Viel wichtiger ist die Angabe, ob DGPS-Korrektursignale bereitstehen. Bei Xgps erschließt es sich aus den Quadraten in der stereografischen Projektion. Cgps macht dazu keine Angaben, bei Gpsmon steht im Feld FAA der Buchstabe D (kein DGPS: A).

Alternativ sehen Sie direkt in den NMEA-GPGGA-Daten nach: Steht im siebten Feld eine Null, wie in Listing 4, fehlen die Daten zur Position komplett. Steht dort eine Zwei, stützen sich die Angaben auf DGPS.

Anwendungsprogramme

Das Programm Xgpsspeed verrät, wie schnell Sie sich bewegen. Dabei passt sich der Tacho der Geschwindigkeit an. Übersteigt sie den Messbereich – 100 km/h im linken Teilbild von Abbildung 8 – wechselt der Tacho zur Darstellung rechts.

Abbildung 8: Tachometer mit Xgpsspeed.

Abbildung 8: Tachometer mit Xgpsspeed.

Beim Programm Foxtrotgps handelt es sich um ein vollwertiges Wandernavigationsgerät mit einer Offline-Kartenfunktion. Der Befehl aus der ersten Zeile von Listing 13 installiert die Software auf einem Debian-basierten System. Zusätzlich lernt Foxtrotgps über die zusätzlichen Tools, die Sie über den Befehl in Zeile 2 ins System integrieren, mit Geotags für Fotos umzugehen [6].

Listing 13

$ sudo apt-get install foxtrotgps
$ sudo apt-get install gpscorrelate gpscorrelate-gui

Es bietet sich an, mit Simulationsdaten zu arbeiten. So steht der Rechner fest auf dem Tisch, um die vorab aufgezeichneten Bewegungen zu visualisieren. Das folgende Beispiel bezieht sich auf Daten aus der Datei GPS_20121104_1330.log, mit der Robert Nielsen im März 2013 seinen Spaziergang durch den Zoo von Kopenhagen dokumentierte [5]. Um eine ähnliche Ansicht zu erhalten wie in Abbildung 9, starten Sie im ersten Terminal zunächst das Programm Gpsfake und wählen eine Wiederholrate von 0,1 Sekunden:

$ gpsfake -c 0.1 GPS_20121104_1330.log
Abbildung 9: Das Programm Foxtrotgps zeigt die gesammelten Daten aus einem GPS-Log als Punkte auf einer Karte an.

Abbildung 9: Das Programm Foxtrotgps zeigt die gesammelten Daten aus einem GPS-Log als Punkte auf einer Karte an.

Im zweiten Terminalfenster rufen Sie Foxtrotgps auf. Als Ansicht wählt es, sofern Sie nichts anderes konfigurieren, die freie Karte OpenStreetMap [7]. Weitere Karten hält das Menü bereit, das Sie mit einem Klick auf das i oben links öffnen. Optional speichert das Programm die Kacheln der Karte im Verzeichnis Maps im Home-Verzeichnis. So stehen diese auch ohne Internetzugang bereit.

Besondere Wegpunkte (“Point of Interest”, POI) legt das Programm in einer SQLite-Datenbank im Verzeichnis ~/.foxtrotgps ab. Das Programm misst Abstände zwischen Punkten, speichert GPX-Tracks, erstellt Routen und kann Fotos mit den Geodaten zu versehen.

Andere Anwendungsprogramme, etwa zum Verwalten von Tracks und dem Bearbeiten oder Konvertieren in andere Formate, stellte unsere Schwesterzeitschrift Linux-Magazin in einem früheren Artikel vor [8].

Fazit

Wer unter Linux mit einer GPS-Maus experimentiert, stellt schnell fest, dass es einen reichhaltigen Fundus an Programmen gibt, um diese Daten zu verarbeiten. Da sich viele Anwendungen auf bereits geloggte Daten verstehen, fällt es leicht, den Einsatz der jeweiligen Software in einer Trockenübung zu testen. 

Glossar

GPS-Ephemeriden

Bahndaten aller GPS-Satelliten. Aus diesen Daten leitet der Empfänger ab, wo sich die Satelliten in den nächsten Stunden aufhalten.

NMEA

ASCII-Ausgabeformat für Positionsdaten, um 1960 von der National Marine Electronics Association* eingeführt.

DGPS

Differentielles Globales Positionierungssystem. Verfahren, das unter Zuhilfenahme von am Boden befindlicher Stationen die Genauigkeit von Positionsdaten verbessert.

DOP

Dilution of Precision. Angabe darüber, ob die Satelliten günstig stehen, nicht über die Qualität des Signals. Eine statistische Analyse erkennt die Streubreite, nicht die absolute Genauigkeit der Position.

Infos

[1] Lsof: Karsten Günther, Jörg Luther, “Offene Türen”, LU 04/2016, S. 84, https://www.linux-community.de/35930

[2] Erläuterungen zum NMEA-Protokoll: http://www.gpsinformation.org/dale/nmea.htm

[3] Gpsd und Client-Programme: http://www.catb.org/gpsd/

[4] Fehlerberechnung: http://manpages.ubuntu.com/manpages/natty/man8/gpsd.8.html

[5] NMEA-Testdaten: https://rodhern.wordpress.com/2013/03/24/gps-data-logger-log-files-nmea-0183/

[6] Foxtrotgps-Handbuch: http://www.foxtrotgps.org/doc/foxtrotgps.html

[7] OpenStreetMap: http://www.openstreetmap.org/#map=14/55.6706/12.5265

[8] GPS-Daten verarbeiten: Heike Jurzik, “GPS-Daten auslesen und bearbeiten”, LM 08/2014, http://www.linux-magazin.de/Ausgaben/2014/08/Bitparade

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 06/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben