Informatik und Kram

Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...

Jogging, GPS und Gnuplot
de-flagge aktiviert en-flagge deaktiviert

Da ich ja jetzt nen XDA mit GPS habe, bin ich verpflichtet, was cooles damit zu machen...Also GPS-Daten loggen, analysieren, und ordentlich in ein Diagram plotten. So kann man sich dann easy seine Jogging-Erfolge und Statistiken anzeigen lassen.

Vorbereitung

XDA/PDA mit GPS-Logging-Software, ich habe in meinem Versuch VisualGPSce benutzt,http://www.visualgps.net/VisualGPSce/Dann auf zum Joggen (jahaaa, hab ich bock), Logging anschalten, Laufen, Logging ausschalten.
Die Daten werden im NMEA-Format geloggt, das ist ein gängiges Format für GPS-Daten.
Mal schnell mit vi geöffnet, hat man lauter Blöcke mit folgendem Inhalt:
$GPRMC,091802.9,A,5008.932410,N,00838.324603,E,,,200208,,,A*6E
$GPGSA,A,3,03,18,19,21,,,,,,,,,3.6,1.9,3.1*3C
$GPVTG,,T,,M,0.0,N,0.0,K*4E
$GPGSV,3,1,12,03,76,281,30,06,13,115,18,08,08,331,17,15,09,035,*76
$GPGSV,3,2,12,16,39,191,26,18,46,074,23,19,44,292,22,21,26,064,21*75
$GPGSV,3,3,12,22,49,140,,25,08,285,,26,07,023,,27,10,306,17*77
$GPGGA,091804.0,5008.932415,N,00838.324587,E,1,04,3.8,119.5,M,,,,*01
Die Zeilen mit $GPVTG sind ziemlich interessant, weil dort bereits die aktuelle Geschwindigkeit in km/h gespeichert wird. Um das ganze einer Zeit zuzuordnen, braucht man noch die Zeile $GPGGA, der erste Eintrag ist direkt die Zeit, 091804 wird als 09:18:04 gelesen!

Das Programm

Da ich nun weiß, welche Daten ich woher bekomme, und ausserdem bock hatte, mal wieder was mit c++ zu machen, ein kleines Prog gebaut, dass die Log-Datei nach relevanten Einträgen durchsucht, und mir je Zeit, km/h und die vom prog errechnete Durchschnittsgeschwindigkeit in eine Datei schreibt.
Über die ermittelte Durchschnittsgeschwindigkeit lässt sich nun anhand der Laufdauer bestimmen, wie weit man ungefähr gelaufen ist.
Ich werde das ganze wohl aber demnächst nochmal "glätten", um die Fehlmessungen zu beseitigen und eine genauere Wegstreckenmessung zu realisieren..
Hier erstmal die Version 1.0 von meinem gps-analyzer, der spuckt die Tabelle aus, die man dann für gnuplot oder ähnliches verwenden kann.

Plotten mit gnuplot

Gar nicht soo einfach!
eigentlich reicht ein einfaches
gnuplot> plot "my_gps_data.txt"
um die Daten in ne Grafik zu bekommen. Aber wir sind anspruchsvoller, wir wollen Achsenbeschriftungen, Farben, das ganze in Postscript speichern, und Gitterlinien.
gnuplot> set xlabel "Uhrzeit"
gnuplot> set ylabel "km/h"
gnuplot> set out "diagram.ps"
gnuplot> set terminal post enhanced color solid
gnuplot> plot "my_gps_data.txt" using 1:2 title "Geschwindigkeit" with lines linewidth 2,\
                "my_gps_data.txt" using 1:3 title "Durchschnittsgeschwindigkeit" with lines linewidth 2
Die Datei diagram.ps kann man nun mit dem beliebten linux-tool ps2pdf in ein pdf umwandeln.
Bei mir sieht das ganze so aus:

Update

Mittlerweile hab ich endlich mal mit gtkmm eine minimalistische GUI und einen system-call für gnuplot eingebaut..Der Filechooser ist nach stundenlangem Lesen auch endlich drin, und soweit sieht alles ganz gut aus..Was fehlt sind noch error-correction und abfangen von bösartigen Sachen..

Kommentare

hmmm 20 km/h gejoggt oder was, das is ja brudalst^^
aber gnuplot is ja rischtisch geil für sowas, deluxe

Was du noch einbauen könntest, wäre eine grafische Darstellung der Route, die du gelaufen bist. Das wäre recht einfach, wenn du einen weg findest, die Google Maps API anzusprechen und eine Polylinie auf eine entsprechende karte zu malen, die alle gps positionen verbindet.

Ja das mit der Google API ist eine kritische Sache. Die Terms of Service für den Dienst kann man hier nachlesen: http://code.google.com/apis/maps/terms.htmlzusammengefasst steht da: es sei ein Dienst um Google Inhalte auf einer "Website" anzuzeigen, welche nicht ausschließlich für Angemeldete oder ähnlich eingeschränkte Benutzergruppen verfügbar sein muss (You may not use the API for any service that requires a subscription or other restricted access, or for which a fee is charged) "Your use of this Content is limited to displaying it to end users within the Service itself, and in the same manner, form, format, and appearance as it is provided by the Service.", also streng genommen könnte man den Inhalt genauso im App anzeigen wie im Browser und es wäre sogar legal ;) Aber zur Sicherheit würde ich wirklich lieber nochmal was an Google schreiben, bevor die uns noch mehr hassen als eh scho...

ausserdem kann ein Google-Maps-API-key nur von einem bestimmten Server verwendet werden. D.h. ich müsste eine I-Net-Verbindung vorraussetzen, Routen-Punkte an Infolexikon.de schicken, Karte erzeugen lassen, und diese dann wieder zurück ans Programm schicken. Also nicht cool..Ich werd mich mal mit OpenMaps beschäftigen, vllt geht da was...

Kommentar schreiben