Seite 1 von 2
NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 11:52
von y0dA
Hallo!
Vorweg habe ich jenen Thread schon gesehen und durchgelesen, leider führten jene Kommentare aus dem Thread nicht zu einer Lösung meines momentanen Problems.
Also ich bekomme über einen GPS Logger NMEA Daten zugespielt, in welchen ja unter GPVTG oder GPRMC die Geschwindigkeiten des aufgezeichneten Punktes aufscheint. Nur muss ich aber auch die Möglichkeit berücksichtigen andere Daten zu bekommen, welche keine Geschwindigkeitsangaben beinhalten.
Nun stehe ich eben vor dem Problem mir um vom "aktuellen" Punkt die Geschwindigkeit berechnen zu können, zunächst die Distanz zum vorhergehnenden Punkt zu berechnen, welches zur Zeit noch Oracle für mich macht weil ich nicht weiß wie ich die Distanz berechnen soll.
Zum Thema Distanz bestimmen habe ich folgendes versucht (Java):
Sollte mit Pythagoras äquivalent sein:
Hierbei kommt es dann schon zu großen Unterschieden (zum Oracle Ergebnis und meinen Ergebnis mittels Pythagoras)!
Frage: In welchem Koordinaten Format muss ich die Distanz bestimmen um eben Meter oder Kilometer zu bekommen (Mercator, GPS, LAT/Lon)?
Zum Thema Geschwindigkeit:
Die NMEA Aufzeichnungen sind mit 1 Sekunde aufgezeichnet, also pro Sekunde 1 Punkt.
Nun dachte ich mir dass ich die Geschwindigkeit einfach mittels Weg / Zeit berechne, hierbei bekomme ich aber immer sehr kleine Geschwindigkeiten raus, da ja zwischen den Punkten nur 1 Sekunde liegt.
Wie komme ich hierbei auf die Geschwindigkeitsangaben, welche NMEA liefert (jene liefern ja bspw für den "aktuellen" Punkt 15km/h und nicht etwa 0.0005411 km/h)?
Ich hoffe ihr könnt mir hierbei ein wenig helfen bzw mich aus meinem Denkkomma wecken.
mfg
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 13:15
von y0dA
Also die Distanz habe ich nun korrekt berechnen können!
Hier die beiden Varianten:
Code: Alles auswählen
public static double distance(final double[] p1, final double[] p2) {
/* longitude point 1 */
double lon1 = CalculateDistance.toRad(p1[0]);
/* latitude point 1 */
double lat1 = CalculateDistance.toRad(p1[1]);
/* longitude point 2 */
double lon2 = CalculateDistance.toRad(p2[0]);
/* latitude point 2 */
double lat2 = CalculateDistance.toRad(p2[1]);
double c = Math.acos((Math.sin(lat1) * Math.sin(lat2)) + (Math.cos(lat1) * Math.cos(lat2)
* Math.cos((lon2) - (lon1))));
return CalculateDistance.EARTH_RADIUS * c;
}
/**
* use haversine formula to calculate distance (in km) between two points specified by
* latitude/longitude (in numeric degrees)
* @param p1 point with lat/long in numeric values
* @param p2 geometry point with lat/long in numeric values (e.g. lat = 47.325265; lon = 9.62748)
* @return distance in km
*/
public static double distanceHaversine(final double[] p1, final double[] p2) {
/* longitude point 1 */
double lon1 = p1[0];
/* latitude point 1 */
double lat1 = p1[1];
/* longitude point 2 */
double lon2 = p2[0];
/* latitude point 2 */
double lat2 = p2[1];
/* delta latitude */
double dLat = CalculateDistance.toRad((lat2 - lat1));
/* delta longitude */
double dLon = CalculateDistance.toRad(lon2 - lon1);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(CalculateDistance.toRad(lat1)) * Math.cos(CalculateDistance.toRad(lat2))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
return CalculateDistance.EARTH_RADIUS * c;
}
Nun bräuchte ich nur noch die Informationen bezüglich der Geschwindigkeit.
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 13:17
von macnetz
y0dA hat geschrieben: In welchem Koordinaten Format muss ich die Distanz bestimmen um eben Meter oder Kilometer zu bekommen (Mercator, GPS, LAT/Lon)?
Hallo,
da geht noch einiges durcheinander . . .
Den Pythagoras kannst du nur mit Meter-Koordinaten anwenden, z.B. UTM oder GK
sonst kannst du mit Winkeln und Bogenlängen rechnen.
Grüsse - Anton
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 13:25
von y0dA
macnetz hat geschrieben:y0dA hat geschrieben: In welchem Koordinaten Format muss ich die Distanz bestimmen um eben Meter oder Kilometer zu bekommen (Mercator, GPS, LAT/Lon)?
Hallo,
da geht noch einiges durcheinander . . .
Den Pythagoras kannst du nur mit Meter-Koordinaten anwenden, z.B. UTM oder GK
sonst kannst du mit Winkeln und Bogenlängen rechnen.
Grüsse - Anton
Siehe oben, Distanz ist berechnet!
Es geht mir nun nur mehr darum wie ich die Geschwindigkeit berechnen kann, welche dem der NMEA Daten entspricht.
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 13:29
von Deichgraf
...Du musst den Zeitstempel auswerten.
Gruß
Günther
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 13:32
von y0dA
Deichgraf hat geschrieben:...Du musst den Zeitstempel auswerten.
Gruß
Günther
Möchtest du das näher erläutern?
Bisher dachte ich, ich müße delta t der beiden Zeitangaben zur Berechnung nehmen - stimmt natürlich nicht.
Betreffend NMEA Daten habe ich mir den Zeitstempel aus GPRMC (Datum) und GPGGA (UTC) zusammengestellt
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 16:00
von macnetz
y0dA hat geschrieben:Es geht mir nun nur mehr darum wie ich die Geschwindigkeit berechnen kann, welche dem der NMEA Daten entspricht.
Hallo,
das geht nicht . . .
Aus den Positionsangaben mit Zeitstempel kannst du nur Geschwindigkeiten nach v=ds/dt nachträglich berechnen.
Die Geschwindigkeits-Angabe im NMEA stammt aus der Empfänger-Berechnung (Orts- und Geschwindigkeits-Vektor).
Grüsse - Anton
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 16:06
von y0dA
Alles klar, also berechne ich wie folgt die Geschwindigkeit:
Punkt 1:
Zeitstempel: 2007-12-07 10:59:05.0
Koordinaten: [16.336716666666668, 48.197476666666674]
Punkt 2:
Zeitstempel: 2007-12-07 10:59:08.0
Koordinaten: 16.33686833333333, 48.19746166666667
1. Distanz berechnet mittels:
Code: Alles auswählen
Math.acos((Math.sin(lat1) * Math.sin(lat2)) + (Math.cos(lat1) * Math.cos(lat2)
* Math.cos((lon2) - (lon1)))) * 6378.388;
2. Geschwindigkeit bestimmen:
Geschwindigkeit = (Weg (in Meter) / Zeit (Sekunden)) + 3,6
Damit bekomme ich als Geschwindigkeit bei diesem Bsp.
raus, bei den NMEA Daten steht aber die Geschwindigkeitsangabe.
Also stimmt dann die von mir errechnete Geschwindigkeit schlichtweg nicht oder kann man sie schon als Annäherung zur tatsächlich gefahreren Geschwindigkeit nehmen bzw. ist die NMEA Angabe die korrekte Geschwindigkeit?
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 25.01.2008 - 19:15
von Roland
Hallo,
1. Du hast richtig gerechnet.
Ich komme überschlägig auf 13,64 km/h.
Das mit dem simplen Pythagoras. Mehr Stellen sind übrigens kaum sinnvoll.
2. Die NMEA-Geschwindigkeit.
Steckt für mich voller Rätsel. Soll aus Doppler-Effekten abgeleitet sowie gefiltert werden.
Also mit gesundem Menschenverstand ist kaum zu glauben, dass aus
14.000 km/h Satellitengeschwindigkeit
1.000 km/h Erdrotation in unseren Breiten
14 km/h Dopplereffekt rausgerechnet werden können ..
Scheint aber doch zu gehen.
3. Hoffe ich inständig, dass Du bei weiteren Berechnungen über mehrere Zeitintervalle näher an die 15 km/h rankommst.
Grüße Roland
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 26.01.2008 - 13:30
von macnetz
y0dA hat geschrieben:Also stimmt dann die von mir errechnete Geschwindigkeit schlichtweg nicht oder kann man sie schon als Annäherung zur tatsächlich gefahreren Geschwindigkeit nehmen bzw. ist die NMEA Angabe die korrekte Geschwindigkeit?
Hallo,
man kann unterscheiden:
- Geschwindigkeit als Vektor (Richtung und Länge) zu einem bestimmten Zeitpunkt = aktuelle Geschwindigkeit
- Geschwindigkeit als Quotient von Weg und Zeit = Durchschnittsgeschwindigkeit
die interne Berechnung des Geschwindigkeits-Vektors ergibt die aktuelle Geschwindigkeit
die nachträglich Berechnung der Geschwindigkeit aus Weg und Zeit ergibt die durchschnittliche Geschwindigkeit
beide Geschwindigkeiten sind selten identisch.
Aus der Praxis meine ich, dass bei längeren Zeiträumen und höheren Geschwindigkeiten (KFZ) die nachträgliche Berechnung der Durchschnittsgeschwindigkeit genauer ist als die jeweilige aktuelle Geschwindigkeit. Bei kurzen Zeiträumen (wie in deinem Beispiel) und bei langsamer Fortbewegung (Wandern, Rad, Ampelhalt) ist die aktuelle Geschwindigkeit aus dem Geschwindigkeits-Vektor genauer als die nachträglich berechnete Geschwindigkeit aus v = ds / dt
Grüsse - Anton
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 26.01.2008 - 16:30
von Deichgraf
Hi,
bei der Trackanalyse habe ich letztens auf der Autobahn zwischen den Trackpunkten Strecken von annähernd 1 km gefunden, vom ersten bis zum letzten Meter dieses Abschnitts wurde eine Geschwindigkeit von 173 km/h angezeigt. Die absolute Spitzen-Geschwindigkeit wird nur im Trip-Computer ausgewiesen, wobei, sollte die Position einmal springen, auch schon 243 km/h als Fussgänger erzielt werden können.
Gruß
Günther
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 26.01.2008 - 19:23
von Jörn Weber
Roland hat geschrieben:
Steckt für mich voller Rätsel. Soll aus Doppler-Effekten abgeleitet sowie gefiltert werden.
Also mit gesundem Menschenverstand ist kaum zu glauben, dass aus
14.000 km/h Satellitengeschwindigkeit
1.000 km/h Erdrotation in unseren Breiten
14 km/h Dopplereffekt rausgerechnet werden können ..
Scheint aber doch zu gehen.
Das funktioniert schon sehr genau. Das Ergebniss dient den Empfängern intern auch für die Schaltschwelle der Funktion "Static-Navigation". Diese liegt je nach Chipsatz bei ca. 4 km/h.
Gruss Joern Weber
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 27.01.2008 - 13:47
von Roland
Hallo,
habe zum Rechenbeispiel noch einen Gedanken.
Wenn die Position um 1 m/s springt, was realistisch ist, macht das schon 3,6 km/h Unterschied aus.
Jetzt wage ich mich mal ein bisschen weit vor.
Es scheint etwa vier Möglichkeiten zu geben, die Geschwindigkeit zu ermitteln:
- die Doppler-Shifts bei der Frequenzsuche
- die Doppler-Shifts aus Trägerphasendifferenzen
- die Positionsunterschiede pro Zeiteinheit (wie hier im Beispiel)
- die Kalman-gefilterten Ergebnisse.
Nirgends finde ich einen Artikel, in dem steht "Roland these are the explanations for a Dummy like you..."
Grüße Roland
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 27.01.2008 - 14:51
von Jörn Weber
Hallo Roland,
Roland hat geschrieben:
- die Doppler-Shifts bei der Frequenzsuche
- die Doppler-Shifts aus Trägerphasendifferenzen
- die Positionsunterschiede pro Zeiteinheit (wie hier im Beispiel)
Nehme Variante 3 nachdem mit Variante 4 schon die fehlerhaften Messungen aussortiert worden sind.
Gruss Joern Weber
Re: NMEA - Geschwindigkeit berechnen
Verfasst: 28.01.2008 - 09:34
von y0dA
Guten Morgen!
Ich danke für die Beiträge

Ich werde wohl bei der Berechnung oben bleiben, da ich die Geschwindigkeit auch nicht mit 100% Genauigkeit benötige bzw. "genauere" Berechnungen nicht kenne (Formel).
Weiters habt Roland meine Berechnung mehr oder weniger eh abgesegnet

(bzw scheint jene in diesem Forum eh öfters auf).
Jedoch würde mich folgendes schon noch interessieren, wenn es sich implementieren läßt:
Jörn Weber hat geschrieben:Hallo Roland,
Roland hat geschrieben:
- die Doppler-Shifts bei der Frequenzsuche
- die Doppler-Shifts aus Trägerphasendifferenzen
- die Positionsunterschiede pro Zeiteinheit (wie hier im Beispiel)
Nehme Variante 3 nachdem mit Variante 4 schon die fehlerhaften Messungen aussortiert worden sind.
Gruss Joern Weber
Formeln?
mfg