Wie erhalte ich einen Geschwindigkeitsvektor aus GPS-NMEA-Daten?

Ich schreibe ein Programm, um NMEA-Daten von einem GPS-Empfänger zu empfangen und zu interpretieren. Ich arbeite mit einem Adafruit Ultimate GPS-Empfänger, der in einen Arduino integriert ist.

Der $GPRMC NMEA-Satz enthält den Parameter Geschwindigkeit in Knoten , an dem ich interessiert bin. Ich möchte dies in einen Geschwindigkeitsvektor umwandeln, dh die Geschwindigkeit in jeder Richtung ermitteln (Vx, Vy, Vz). Ist dies durch eine mathematische Berechnung oder durch die NMEA-Daten möglich?

Die Adafruit-Bibliothek für das GPS bietet auch eine Funktion zum Abrufen des Geschwindigkeitswerts (in Knoten (wie oben)).

Sie "schreiben keinen Code". Das ist nichts, was getan wird. Sie schreiben Code in Ihrem Programm. Soweit ich weiß, bekommt man Geschwindigkeit, aber keine Geschwindigkeit. Um die Geschwindigkeit zu erhalten, müssten Sie aufeinanderfolgende Sätze von GPS-Koordinaten erhalten, von Grad in Meter übersetzen und dann die Geschwindigkeiten daraus und die verstrichene Zeit zwischen den Koordinatensätzen berechnen.
@JRE Weltuntergang wurde knapp vermieden; "a" "manche".

Antworten (2)

Obwohl der Empfänger dies selbst weiß, scheint es leider nicht zugestellt zu werden. Die meisten Anwendungen wollen nur die 2D-Geschwindigkeit, also wird diese von den NMEA-Sätzen gesendet. Und ich bin mir ziemlich sicher, dass die Adafruit-Bibliothek nur die NMEA-Daten liest.

Jedes GPS-Hipset hat andere Methoden, um auf die Daten zuzugreifen, von denen einige wahrscheinlich die 3D-Geschwindigkeit wiederherstellen könnten, die es verfolgt, aber das wird mehr Arbeit zum Aufspüren und Empfangen sein.

Vielleicht reicht es aus, es aus aufeinanderfolgenden 3D-Standorten zu berechnen, aber das ist komplexer. Wenn Sie über genügend CPU verfügen, kann die Konvertierung von NMEA Lat/Long zu UTM hilfreich sein. Dann können Sie aufeinanderfolgende Punkte subtrahieren und haben Nord/Ost/Höhenunterschiede in Metern, die leicht als 3D-Geschwindigkeit (relativ zur Oberfläche) abgelesen werden können.

+1Während die Frage speziell nach dem Generieren eines Geschwindigkeitsvektors unter Verwendung von GPS-NMEA-Daten fragt , ist Ihre Antwort wichtig, da sie hervorhebt, dass Sie früher oder später wirklich versuchen müssen, in die Firmware des Moduls einzusteigen, um zeitnaher und roher darauf zuzugreifen, um dies richtig zu machen Parameter, die dort verfügbar sind.

Das Adafruit Ultimate GPS und das Video von Lady Ada werden in der Frage erwähnt und verlinkt. Hat der NASA PhoneSat tatsächlich versucht, das GPS vom Telefon selbst zu verwenden? :

wo die Firmware geändert wurde, um die Höhe als Beispiel auf mindestens 50 km zu erweitern.

Auch die Verwendung kommerzieller Verbraucher-GPS-Geräte für Raumfahrtanwendungen wird in den folgenden Fragen und insbesondere in ihren Antworten erörtert:

Wie dieser Kommentar andeutet, müssen Sie zuerst eine Reihe von GPS-Fixes in einige kartesische Koordinaten umwandeln und dann eine Art numerischer Ableitung verwenden, um einen Geschwindigkeitsvektor abzuleiten.

Die meisten Hobby-GPS-Module für Verbraucher generieren NMEA-Sätze, die GPS-Koordinaten mit einer "Herzschlag"-Frequenz von 1 Hz bereitstellen. Sie müssen Ihre Dokumentation sehr sorgfältig lesen, um das Timing zu interpretieren, aber es sollte einen NMEA-Satz geben, der SOWOHL die 3D-GPS-Koordinaten Breite, Länge und Höhe enthält, die zum Erstellen eines Vektors erforderlich sind, als auch die GPS-Zeit. Wenn Sie all das in einem einzigen Satz haben, können Sie es vielleicht glauben, aber Sie müssen die Dokumentation sorgfältig lesen.

Wenn Sie diese für zwei aufeinanderfolgende Sekunden haben, können Sie jede in eine XYZ-Koordinate im Rahmen Ihrer Wahl in Einheiten von Metern umwandeln, sie subtrahieren, um eine Delta-Position zu erhalten, dividieren durch die Zeitdifferenz (in Sekunden) zwischen den beiden (vermutlich 1 Sekunde) und voilà , Sie haben einen ungefähren Geschwindigkeitsvektor aus Ihrem Adafruit Ultimate GPS NMEA-Datenstrom!

Sie würden diese Geschwindigkeit dann dem zeitlichen Mittelpunkt zwischen diesen beiden Zeiten zuweisen . Sie könnten auch drei Punkte verwenden und eine quadratische Anpassung verwenden, um diese drei zu positionieren, das Quadrat zum Zeitpunkt in der Mitte zu differenzieren, um einen Geschwindigkeitsvektor zu erhalten, der für diese bestimmte Herzschlaginstanz gilt.

Natürlich sind Ihre Geschwindigkeiten in jedem dieser Fälle jetzt historisch und nicht augenblicklich, aber es sollte für eine einfache Kalman-Filteranwendung gut genug sein .

So konvertieren Sie von GPS lat / lon / alt, das auf ein geodätisches Referenzellipsoid (ich glaube, GPS verwendet WGS84 ) in erdzentrierte Koordinaten (entweder erdfest für die Referenzierung auf die Erde oder "Trägheit" für die Referenzierung auf die Erdumlaufbahn) referenziert ist eine andere Frage, und Antworten finden Sie hier in Space SE (siehe beispielsweise die Antwort von @DavidHammen ) oder auf anderen Stack Exchange-Sites wie beispielsweise GIS .

Sie können auch in diesen Links weiterlesen, obwohl vieles (aber nicht alles) für fortgeschrittenere Daten im GPS-Modul gilt, nicht für die endgültigen NMEA-Ergebnisse:

Lab 2 scheint die Great Circle Equation zu verwenden, die Erde ist als Kugel modelliert, nicht als Ellipsoid.
@Uwe Du hast natürlich recht. Ich wollte eine Reihe von Schwierigkeitsgraden und Tiefen einbeziehen, sowohl für das OP als auch für zukünftige Leser. Das ist eine Berechnung, mit der man beginnen kann, aber Sie haben Recht, ein Referenzellipsoid ist die richtige zu verwendende Oberfläche. Dadurch fällt mir auch auf, dass mein Link zu "Referenzkugel" defekt ist und ich ihn auch dort in "Ellipsoid" ändern sollte.
GPS wird häufig mit WGS84 verwendet, aber flexible GPS-Empfänger ermöglichen die Auswahl eines lokalen Referenzellipsoids wie CH-1903, Potsdam, Cape, Tokyo, Australian 1954 und viele mehr. Hier ist eine schöne Karte von München mit denselben Koordinatenwerten in verschiedenen Kartensystemen. Unterschiede von bis zu 700 m. Bei den meisten GPS-Empfängern ist WGS84 jedoch bei Auslieferung ausgewählt.
@Uwe das ist ein spannender Artikel! Ich werde mir etwas Zeit nehmen und es sorgfältig durchlesen. Danke für die Klarstellung.