NMEA - Geschwindigkeit berechnen

Allgemeine Fragen zu GPS und verwandten Themen

Moderator: Roland

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 25.01.2008 - 11:52

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):

Code: Alles auswählen

Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
Sollte mit Pythagoras äquivalent sein:

Code: Alles auswählen

d = sqrt((X2 - X1)^2 + (Y2 - Y1)^2) 
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

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 25.01.2008 - 13:15

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.

macnetz
Beiträge: 553
Registriert: 13.08.2004 - 08:41
Wohnort: Memmingen
Kontaktdaten:

Re: NMEA - Geschwindigkeit berechnen

Beitrag von macnetz » 25.01.2008 - 13:17

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

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 25.01.2008 - 13:25

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.

Deichgraf
Beiträge: 506
Registriert: 09.02.2006 - 13:22

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Deichgraf » 25.01.2008 - 13:29

...Du musst den Zeitstempel auswerten.

Gruß
Günther

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 25.01.2008 - 13:32

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

macnetz
Beiträge: 553
Registriert: 13.08.2004 - 08:41
Wohnort: Memmingen
Kontaktdaten:

Re: NMEA - Geschwindigkeit berechnen

Beitrag von macnetz » 25.01.2008 - 16:00

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

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 25.01.2008 - 16:06

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.

Code: Alles auswählen

13.653229423705211 km/h
raus, bei den NMEA Daten steht aber die Geschwindigkeitsangabe.

Code: Alles auswählen

15.6 km/h
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?

Benutzeravatar
Roland
Beiträge: 2055
Registriert: 18.02.2004 - 22:33
Wohnort: Wusterhausen(Dosse)

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Roland » 25.01.2008 - 19:15

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. :roll:

3. Hoffe ich inständig, dass Du bei weiteren Berechnungen über mehrere Zeitintervalle näher an die 15 km/h rankommst.


Grüße Roland

macnetz
Beiträge: 553
Registriert: 13.08.2004 - 08:41
Wohnort: Memmingen
Kontaktdaten:

Re: NMEA - Geschwindigkeit berechnen

Beitrag von macnetz » 26.01.2008 - 13:30

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

Deichgraf
Beiträge: 506
Registriert: 09.02.2006 - 13:22

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Deichgraf » 26.01.2008 - 16:30

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

Benutzeravatar
Jörn Weber
Beiträge: 789
Registriert: 03.02.2007 - 16:11
Wohnort: Jena

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Jörn Weber » 26.01.2008 - 19:23

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. :roll:
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

Benutzeravatar
Roland
Beiträge: 2055
Registriert: 18.02.2004 - 22:33
Wohnort: Wusterhausen(Dosse)

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Roland » 27.01.2008 - 13:47

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

Benutzeravatar
Jörn Weber
Beiträge: 789
Registriert: 03.02.2007 - 16:11
Wohnort: Jena

Re: NMEA - Geschwindigkeit berechnen

Beitrag von Jörn Weber » 27.01.2008 - 14:51

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

y0dA
Beiträge: 21
Registriert: 25.01.2008 - 11:38

Re: NMEA - Geschwindigkeit berechnen

Beitrag von y0dA » 28.01.2008 - 09:34

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

Antworten