Ich habe mir vor einigen Jahren in der Bucht einen GPS Logger von Skytraq gekauft. Ein Gerät mit dem man einfach nur einen GPS-Track aufzeichnen kann um im nach hinein zu sehen wo man lang gelaufen oder gefahren ist. Jahre bevor es SmartPhones gab oder das erste Handy eine GPS-Antenne hatte. Mit ca. 50€ eine richtig günstige Alternative zu den teuren Sportnavis von damals. Funktionieren tut das Gerät heute noch. Nur wie lese ich die Daten unter Linux aus?
Skytraq GPS Datalogger

Skytraq GPS Datalogger

Skytraq-Datalogger

Geräte dieser Art konnte man damals wie auch heute noch in einigen Variationen bei den unterschiedlichsten Händlern finden. Die meisten sind sehr spartanisch und haben neben einem An- und Ausschalter noch ein paar Leuchtdioden. Man bekommt ein einfaches Gerät mit dem man einen GPS-Track aufzeichnen kann, des weiteren kann es noch als GPS Mouse verwendet werden. Neben dem USB-Anschluss hat mein Gerät noch die Möglichkeit Bluetooth zu verwenden.

Es gibt 3 Leuchtdioden: Eine grüne für GPS die blinkt sobald eine Position bestimmt werden konnte, eine rote Ladeanzeige und eine blaue Bluetooth LED. Unten ist ein Schiebeschalter zum an- bzw. ausschalten, oben ist die USB-Buchse.

Diese Geräte werden in den meisten Fällen mit der Software iTravel Tech PhotoTagger (http://www.itravel-tech.com/) ausgeliefert welche nur unter Windows läuft. Ob diese per wine (http://www.winehq.org) unter Linux ebenfalls funktioniert habe ich bisher noch nicht getestet.

Linux

Es sollte doch möglich sein das Gerät auch von Linux aus zu bedienen. So ein Tracker an für sich ist ja nichts außerordentlich spezielles und zunächst ein ganz normales USB-Gerät. Also einfach mal eingesteckt und nachgeschaut was passiert. lsusb brachte folgende Informationen zu Tage:

dr.disk@local:~$ lsusb
Bus 007 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Sieh an, sieh an: Ein PL2303. Der Tracker meldet sich als normaler serieller Anschluss am System. Dazu finden sich weitere Details im dmesg:

dr.disk@local:~$ dmesg | tail
[23945.432040] usb 7-2: new full-speed USB device number 4 using uhci_hcd
[23945.595067] usb 7-2: New USB device found, idVendor=067b, idProduct=2303
[23945.595073] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[23945.595076] usb 7-2: Product: USB-Serial Controller D
[23945.595079] usb 7-2: Manufacturer: Prolific Technology Inc.
[23945.598094] pl2303 7-2:1.0: pl2303 converter detected
[23945.610122] usb 7-2: pl2303 converter now attached to ttyUSB0

Der Tracker ist verbunden als serieller Anschluss via /dev/ttyUSB0. Damit lässt sich doch schon mal was anfangen 🙂

Das lässt vermuten, dass per Bluetooth ebenfalls ein serieller Anschluss bereit gestellt wird. An meinem Rechner reichte mir jedoch die USB-Verbindung – jedoch müsste mit Bluetooth dies sinngemäß funktionieren.

Die Anschlusseinstellungen, vor allem die Baud-Rate, kann mit //stty -F /dev/ttyUSB0// ermittelt werden:

dr.disk@local:~$ stty -F /dev/ttyUSB0
speed 9600 baud; line = 0;
min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -iexten -echo

Der Logger läuft also mit 9600 Baud. Diese Info reicht fürs Erste.

GPS Mouse

Um zu testen ob bzw. welche Daten der Logger im Moment liefert verwende ich gpsd und gpsmon (http://catb.org/gpsd/). gpsd habe ich einfach mit gpsd /dev/ttyUSB0 gestartet. gpsmon erzeugte im Anschluss daran folgende Ausgaben:

tcp://localhost:2947          NMEA0183>
┌──────────────────────────────────────────────────────────────────────────────┐
│Time: n/a Lat: n/a Lon: n/a │
└───────────────────────────────── Cooked TPV ─────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────┐
│ GPGGA GPGSA GPRMC GPVTG GPGSV │
└───────────────────────────────── Sentences ──────────────────────────────────┘
┌──────────────────┐┌────────────────────────────┐┌────────────────────────────┐
│Ch PRN Az El S/N ││Time: 075908.000 ││Time: 075908.000 │
│ 0 ││Latitude: 0000.0000 N ││Latitude: 0000.0000 │
│ 1 ││Longitude: 00000.0000 E ││Longitude: 00000.0000 │
│ 2 ││Speed: 000.0 ││Altitude: 0.0 │
│ 3 ││Course: 000.0 ││Quality: 0 Sats: 00 │
│ 4 ││Status: V FAA: N ││HDOP: 0.0 │
│ 5 ││MagVar: ││Geoid: 0.0 │
│ 6 │└─────────── RMC ────────────┘└─────────── GGA ────────────┘
│ 7 │┌────────────────────────────┐┌────────────────────────────┐
│ 8 ││Mode: A1 Sats: ││UTC: RMS: │
│ 9 ││DOP: H=0.0 V=0.0 P=0.0 ││MAJ: MIN: │
│10 ││TOFF: ││ORI: LAT: │
│11 ││PPS: ││LON: ALT: │
└────── GSV ───────┘└──────── GSA + PPS ─────────┘└─────────── GST ────────────┘
(40) $GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02

Das sieht doch schon mal sehr schön aus! Als GPS Mouse funktioniert das Gerät bereits wunderbar. Ok, ich war in einem Gebäude, deswegen wurde keine Position ermittelt. Dies deckt sich mit der grünen Status-LED fürs GPS: Diese leuchtete noch permanent, d.h. es wurde noch keine Postion ermittelt.

Als GPS Mouse habe ich für dieses Gerät keine Verwendung. Ich bin Sportler. Von daher gesehen will ich eigentlich nur aufzeichnen wo ich war und nicht unterwegs nachschauen wo ich bin. Vielleicht ein anderes Mal, aber derzeit ist das für mich uninteressant.

Wer es etwas einfacher haben will: Ein cat /dev/ttyUSB0 zeigt den NMEA Datenstrom an (https://de.wikipedia.org/wiki/NMEA_0183). Unterm Strich sind das die gleichen Daten die beim gpsmon ganz unten ebenfalls mit durchs Bild huschen:

dr.disk@local:~$ cat /dev/ttyUSB0
,T,,M,000.0,N,000.0,K,N*02
$GPGGA,141514.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*69
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPRMC,141514.000,V,0000.0000,N,00000.0000,E,000.0,000.0,081013,,,N*79
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02
$GPGGA,141515.000,0000.0000,N,00000.0000,E,0,00,0.0,0.0,M,0.0,M,,0000*68
$GPGSA,A,1,,,,,,,,,,,,,0.0,0.0,0.0*30
$GPRMC,141515.000,V,0000.0000,N,00000.0000,E,000.0,000.0,081013,,,N*78
$GPVTG,000.0,T,,M,000.0,N,000.0,K,N*02

skytraq-datalogger: Konfigurieren und Auslesen des Loggers

Auf der Suche nach einer Möglichkeit den Logger unter Linux zu konfigurieren und auszulesen bin ich auf skytraq-datalogger (http://code.google.com/p/skytraq-datalogger/) gestoßen.

Das Programm ist einfach gehalten und sollte sich auch auf neueren Linux-Systemen übersetzen lassen. Alternativ dazu, falls man die deb-Pakete nicht installieren will oder einen anderen Paketmanager verwendet, kann man mit alien -t <Paketname> das Paket in eine tar.gz-Datei umwandeln lassen. Die darin enthaltene skytraq-datalogger kann dann an jede beliebige Stelle kopiert werden.

Mit skytraq-datalogger –help gestartet erhält man die möglichen Optionen:

dr.disk@local:~$ ./skytraq-datalogger --help
USAGE: ./skytraq-datalogger <OPTIONS> ACTION
ACTION is one of:
--info get information about software version and configuration
--delete delete all track lists from the data logger
--dump dump track lists to STDOUT
--set-config change configuration of the data logger
--set-baud-rate configure speed of the device's serial port
--set-output-off disable output for GPS data
--set-output-nmea enable output for GPS data in NMEA format
--set-output-bin enable output for GPS data in binary format
--update-agps upload to AGPS data on the device
(needs internet connection)
OPTIONS:
--device <DEV> name of the device, default is /dev/ttyUSB0
--permanent write serial port speed to FLASH
--baud-rate set baud-rate manually
OPTIONS for configuration:
--time <SECONDS> log every <SECONDS> seconds
--max-time <SECONDS>
--dist <METERS> log every <METERS> meters
--max-dist <METERS>
--speed <KMPH> only log if faster than <KMPH> km/h
--max-speed <KMPH>
--enable-log turn on logging
--disable-log turn off logging
--mode-fifo overwrite oldest entries when no space is left
--mode-stop stop logging when no space is left

Mit –info kann man die Einstellungen sowie den noch freien Platz auslesen. Falls ein andere serieller Anschluss als ttyUSB0 verwendet wird muss dies per –device <Anschluss> mit übergeben werden.

steffen@ws-0908173:/tmp/usr/bin$ ./skytraq-datalogger --device /dev/ttyUSB0 --info
kernel version: 1.3.3 -- ODM version: 1.4.5 -- revision: 2007-12-11
log_wr_ptr: 92636
total sectors: 254
sectors left: 235
max time: 3600 s
min time: 5 s
max distance: 1000 m
min distance: 2 m
max speed: 1000 km/h
min speed: 0 km/h
datalog enable: 1
log fifo mode: 0
AGPS enabled: 0
AGPS data left: none
baud-rate: 9600 bps

Mit –dump kann der Inhalt des Speichers ausgegeben werden. Per skytraq-datalogger –dump > /tmp/test.gpx kann die Ausgabe in eine Datei umgeleitet werden. Diese Datei kann bereits von Tools wie google earth, viking oder gpsprune geöffnet werden. Jedoch sind die Tracks nicht in einzelne Bereich geschnitten.

Weitere interessante Optionen sind –erase mit dem man den Speicher wieder leeren kann bzw. –set-config mit dem die Einstellungen geändert werden.

gpsbabel: Eine Alternative zum auslesen der Tracks

Gpsbabel kann ebenfalls SkyTraq Geräte ansprechen. Infos hierzu finden sich in der Dokumentation: http://www.gpsbabel.org/htmldoc-development/fmt_skytraq.html.

  • Eine Variante mit dem die Daten als gpx ausgelesen werden kann sieht so aus:
    dr.disk@local:~$ gpsbabel -i skytraq -f /dev/ttyUSB0 -o gpx -F gpsbabel.gpx
  • Falls man die Daten auf dem Logger gleich noch mit löschen will kann dies mit erase erfolgen:
    dr.disk@local:~$ gpsbabel -i skytraq,erase -f /dev/ttyUSB0 -o gpx -F gpsbabel.gpx
  • Wer wie ich erst mal alles lesen und später nachdem die Daten das erste Mal ausgewertet sind alles löschen möchte kann die Ausgabe abschalten:
    dr.disk@local:~$ gpsbabel -i skytraq,erase,no-output -f /dev/ttyUSB0

Anstatt der Befehlszeile kann die GUI von gpsbabel analog dazu verwendet werden:

gpsbabel-gui

Datalogger via gpsbabel auslesen

Weitere Schalter zu Skytraq und gpsbabel finden sich in obiger angegebener Dokumentation. Zu gpsbabel selbst lohnt sich der Blick in dessen Doku unter http://www.gpsbabel.org/readme.html.

Trennen der Tracks

Wer mehrere Tracks auf dem Logger hat und diese trennen will kann dies zum Beispiel hiermit tun (trennt pro Tag, andere Varianten siehe gpsbabel Handbuch):
gpsbabel -i skytraq -f /dev/ttyUSB0 -xtrack,split,title=“Track %D“ -o gpx -F gpsbabel.gpx

Falls wie hier nicht alle Tracks in einer Datei landen sollen kann mit //start// und //stop// gearbeitet werden um einzelne Bereiche separat aus zuschneiden. Für mehrere Dateien muss dieser Befehl dann entsprechend mehrfach verwendet werden:
gpsbabel -i skytraq -f /dev/ttyUSB0 -xtrack,start=20130709,stop=20130711 -o gpx -F gpsbabel.gpx

AGPS – schnellere Initialisierung nach dem Start

Das lästigste bei diesen Geräten dürfte die lange Zeitspanne bis zur ersten Positionsbestimmung sein. Mit AGPS wird diese drastisch verkürzt. Ebenso berichten viele Benutzer, dass die Empfangsqualität dadurch deutlich besser wird. Infos zu AGPS gibt es zum Beispiel hier: https://en.wikipedia.org/wiki/Assisted_GPS.

Damit dies funktioniert muss man den Almanach im Gerät aktualisieren. Diesen Schritt sollte man regelmäßig wiederholen damit stets aktuelle Daten hinterlegt sind.

skytraq-datalogger

Die notwendigen Schritte kann man zum Beispiel mit dem skytraq-datalogger durchführen. Falls es nicht klappen sollte: Gerät aus- und wieder einschalten und nochmals probieren.

dr.disk@local:~$ skytraq-datalogger --update-agps
Downloading AGPS data from SkyTraq's FTP-server...
Uploading AGPS data to GPS device...
7% done
14% done
21% done
28% done
35% done
42% done
48% done
55% done
62% done
69% done
76% done
83% done
90% done
97% done
Upload completed.

Sparkfun Forum

Im Internet habe ich noch folgendes gefunden: https://forum.sparkfun.com/viewtopic.php?p=81423. Hier wird ein kleines c-Programm gezeigt welches ebenfalls den Almanach aktualisieren können soll. Das Tool ist sehr einfach gehalten und sollte sich leicht an die eigenen Anforderungen anpassen lassen.

Die benötigte Almanach-Datei kann zum Beispiel mit wget geholt werden:
wget ftp://skytraq:skytraq@60.250.205.31/ephemeris/Eph.dat

Windows

Unter Windows kann die mitgelieferte Software verwendet werden. Alternativ müsste zumindest der Teil mit gpsbabel ebenfalls funktionieren. Versuche ob die obigen Tools direkt oder per Cygwin laufen überlasse ich jedem selbst 😀