NMEA-Protokoll
NMEA 0183 ist das Standardprotokoll, über das praktisch alle GNSS-Empfänger Positions-, Satelliten- und Genauigkeitsdaten übertragen. Wenn Sie einen externen Empfänger mit Mapit GIS verbinden (unter Android per Bluetooth, auf beiden Plattformen per TCP/IP), sendet der Empfänger einen fortlaufenden Strom von NMEA-Sätzen über die serielle Verbindung.
Was ist NMEA?
NMEA steht für National Marine Electronics Association. Der Standard NMEA 0183 definiert ein textbasiertes Protokoll, in dem jede Nachricht (ein sogenannter Satz, englisch sentence) aus einer einzelnen Zeile ASCII-Text besteht:
$GPGGA,120000.00,5133.82,N,00042.24,W,1,08,0.9,45.4,M,47.0,M,,*47
Jeder Satz ist gleich aufgebaut:
| Bestandteil | Beispiel | Beschreibung |
|---|---|---|
| Anfang | $ | Jeder Satz beginnt mit einem Dollarzeichen |
| Talker-ID | GP | Kennzeichnet das Satellitensystem (GP = GPS, GL = GLONASS, GA = Galileo, GB/BD = BeiDou, GN = Multi-GNSS) |
| Satztyp | GGA | Dreibuchstabiger Code für das Datenformat |
| Datenfelder | 120000.00,5133.82,... | Kommagetrennte Werte |
| Prüfsumme | *47 | XOR aller Bytes zwischen $ und *, als zwei Hexadezimalziffern kodiert |
| Abschluss | \r\n | Wagenrücklauf und Zeilenvorschub |
Die Talker-ID gibt an, aus welchem Satellitensystem die Daten stammen:
| Talker-ID | Satellitensystem |
|---|---|
GP | GPS (USA) |
GL | GLONASS (Russland) |
GA | Galileo (Europa) |
GB / BD | BeiDou (China) |
QZ | QZSS (Japan) |
GN | Multi-GNSS (kombinierte Lösung) |
Unterstützte Satztypen
Mapit GIS wertet die folgenden NMEA-Satztypen aus. Der NMEA-Parser (NmeaParser) verarbeitet jede eingehende Zeile, prüft das Format und extrahiert die relevanten Datenfelder.
GGA – Global Positioning System Fix Data
Der wichtigste Satz für die Vermessung. GGA liefert die zentrale Positionslösung mit Koordinaten, Höhe, Fix-Qualität, Satellitenanzahl und Genauigkeit.
| Feld | Daten |
|---|---|
| UTC-Zeit | Stunden, Minuten, Sekunden |
| Breite / Länge | Grad und Dezimalminuten |
| Fix-Qualität | 0 = Ungültig, 1 = GPS, 2 = DGPS, 3 = PPS, 4 = RTK Fixed, 5 = RTK Float, 6 = Koppelnavigation, 7 = Manuell, 8 = Simulation |
| Satelliten in Gebrauch | Anzahl der Satelliten, die zur Positionslösung beitragen |
| HDOP | Horizontale Genauigkeitsminderung |
| Höhe (MSL) | Höhe über dem mittleren Meeresspiegel in Metern |
| Geoidundulation | Abstand zwischen dem Ellipsoid WGS 84 und dem mittleren Meeresspiegel in Metern |
| DGPS-Alter | Sekunden seit der letzten differenziellen Korrektur |
| DGPS-Stations-ID | Kennung der Referenzstation |
Unterstützte Talker-IDs: GPGGA, GNGGA
RMC – Recommended Minimum Navigation Data
Liefert Position, Geschwindigkeit und Kurs. Wird als Ersatz verwendet, wenn kein GGA verfügbar ist.
| Feld | Daten |
|---|---|
| UTC-Zeit und Datum | Vollständiger Zeitstempel |
| Status | A = Active (gültige Positionslösung), V = Void (keine Positionslösung) |
| Breite / Länge | Position |
| Geschwindigkeit über Grund | In Knoten (intern in m/s umgerechnet) |
| Kurswinkel | Rechtweisender Kurs in Grad |
Unterstützte Talker-IDs: GPRMC, GNRMC
GSA – GNSS DOP and Active Satellites
Meldet die DOP-Werte (Genauigkeitsminderung) und welche Satelliten in die Positionslösung eingehen.
| Feld | Daten |
|---|---|
| Modus | A = Automatisch, M = Manuell |
| Fix-Typ | 1 = Kein Fix, 2 = 2D-Fix, 3 = 3D-Fix |
| Satelliten-PRNs | Bis zu 12 Kennungen der für die Positionslösung verwendeten Satelliten |
| PDOP | Genauigkeitsminderung der Position |
| HDOP | Horizontale Genauigkeitsminderung |
| VDOP | Vertikale Genauigkeitsminderung |
Empfänger ab NMEA 4.10 enthalten ein Feld für die System-ID (Feld 19), um die Satellitensysteme zu unterscheiden.
Unterstützte Talker-IDs: GPGSA, GNGSA, GLGSA, QZGSA, BDGSA, GBGSA
GSV – GNSS Satellites in View
Liefert ausführliche Informationen zu jedem sichtbaren Satelliten – daraus werden das Himmelsdiagramm und das Signalbalkendiagramm in der GPS-Info-Ansicht befüllt.
| Feld | Daten |
|---|---|
| Sichtbare Satelliten | Gesamtzahl für dieses Satellitensystem |
| Satelliten-PRN | Kennung |
| Elevation | Grad über dem Horizont (0–90) |
| Azimut | Grad ab geografisch Nord (0–360) |
| SNR | Signal-Rausch-Verhältnis in dB-Hz (0–99) |
Jeder GSV-Satz enthält Daten für bis zu 4 Satelliten; mehrere Sätze bilden zusammen einen vollständigen Datensatz.
Unterstützte Talker-IDs: GPGSV, GLGSV, GAGSV, QZGSV, BDGSV, GBGSV
GST – GNSS Pseudorange Error Statistics
Liefert statistische Genauigkeitsschätzungen. Dies ist die wichtigste Quelle für die RMS-Genauigkeitswerte in der GPS-Info-Ansicht.
| Feld | Daten |
|---|---|
| RMS | Quadratisches Mittel (RMS) der Pseudostrecken-Residuen |
| Fehler große / kleine Halbachse | Halbachsen der Fehlerellipse in Metern |
| Orientierung | Drehwinkel der Fehlerellipse in Grad |
| 1-Sigma-Fehler Breite | Standardabweichung in Metern |
| 1-Sigma-Fehler Länge | Standardabweichung in Metern |
| 1-Sigma-Fehler Höhe | Standardabweichung in Metern |
Aus diesen Werten berechnet die App:
- HRMS = sqrt(lat_error^2 + lon_error^2)
- VRMS = height_error
- 3D RMS = sqrt(lat_error^2 + lon_error^2 + height_error^2)
VTG – Course Over Ground and Ground Speed
Wird intern verwendet, um den Zustandsautomaten des NMEA-Parsers weiterzuschalten; der Satz markiert das Ende einer Satzfolge.
Unterstützte Talker-IDs: GPVTG, GNVTG
GLL – Geographic Position
Liefert Breite und Länge mit UTC-Zeit. Wird nur verwendet, wenn der Empfänger weder GGA noch RMC ausgibt.
Unterstützte Talker-IDs: GPGLL, GNGLL
GNS – GNSS Fix Data
Ein Multi-GNSS-Gegenstück zu GGA mit einem Modusindikator je Satellitensystem. Aktualisiert den NMEA-Zustand entsprechend.
PNVGSDP – Proprietärer Genauigkeitssatz
Ein proprietärer Satz (NovAtel-kompatibel) mit den Standardabweichungen für Breite, Länge und Höhe sowie einem Zeichen für den Fix-Modus:
| Modus | Bedeutung |
|---|---|
A | Autonom |
D | Differenziell |
F | RTK Float |
R | RTK Fixed |
E | Koppelnavigation |
N | Kein Fix |
Priorität der Satztypen
Der Parser verwendet einen Zustandsautomaten, damit keine Daten aus unterschiedlichen Messepochen vermischt werden. Liefern mehrere Satztypen überlappende Daten, gilt folgende Priorität:
- GGA – bevorzugt für Position und Fix-Qualität
- RMC – wird verwendet, wenn kein GGA vorliegt (liefert Geschwindigkeit und Kurs, die in GGA fehlen)
- GLL – letzte Möglichkeit, nur für die Position
Prüfsummenkontrolle
Jeder NMEA-Satz endet mit einer zweistelligen hexadezimalen Prüfsumme, der ein * vorangestellt ist. Die Prüfsumme wird per XOR über alle Bytes zwischen $ und * berechnet:
$GPGGA,120000,...*47
↑ XOR these ↑
Der Parser prüft das Format der Prüfsumme, geht bei der Validierung aber pragmatisch vor: Sätze mit kleineren Formatfehlern werden trotzdem verarbeitet, um mit der großen Vielfalt der GNSS-Empfänger auf dem Markt möglichst kompatibel zu sein.