Bauteil · Sensor
NEO-6M GPS Module
Ein NEO-6M liefert einem Outdoor-Roboter absolute Position über den seriellen Port. NMEA lesen, warum HDOP mehr zählt als die Genauigkeit und was es nicht kann.
Was es ist
Ein GNSS-Empfänger: Ein Chip, der auf die Zeitsignale lauscht, die eine Satellitenkonstellation sendet, und aus den Unterschieden ihrer Ankunftszeiten seine eigene Position löst. Das NEO-6M ist das Modul, dem die meisten Hobby-Roboter zuerst begegnen – ein u-blox-Empfänger, eine Keramik-Patch-Antenne und ein serieller Port.
Es ist der einzige Sensor an einem Roboter, der eine absolute Position meldet. Alles andere hier – Encoder, eine IMU, ein Reflexionsarray – misst eine Änderung oder ein lokales Merkmal. GPS stoppt Odometriedrift davor, unbegrenzt zu sein, und es ist der Grund, warum ein Outdoor-Rover ein einen Kilometer entferntes Ziel bekommen kann.
Wie es funktioniert
Du sprichst nicht mit ihm. Es spricht mit dir, mit 9600 Baud, in NMEA-0183-Sätzen – eine kommagetrennte Zeile pro Nachricht, mehrmals pro Sekunde.
Zwei davon tragen alles, was ein Roboter braucht:
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,... fix quality, sats, HDOP
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,... validity, position, speed, course
Lies den Fix, dann prüfe ihn. Das Statusfeld in RMC ist A für aktiv oder V für ungültig, und die Fix-Qualität in GGA ist 0 ohne Lösung – in beiden Fällen trägt der Satz trotzdem plausibel aussehende Koordinaten. Das HDOP-Feld erwischt den subtileren Fehler: Es beschreibt Satellitengeometrie, und schlechte Geometrie liefert eine selbstbewusste Antwort Dutzende Meter daneben.
Breite kommt als Grad-und-Dezimalminuten (4807.038 sind 48° 07,038′), was nicht Grad ist. Rechne einmal um, dann erneut in Meter relativ zu einem festen Ursprung – die Arithmetik steht hier –, und alles dahinter arbeitet in Einheiten, die ein Regler versteht.
Wann man es verwendet
Nutze eines, wann immer der Roboter draußen über Strecken arbeitet, die Odometrie nicht überlebt: ein Wegpunkt-Rover, ein Rasenmäher, eine Vermessungsplattform, ein Agrarroboter. Grob jenseits von dreißig Metern Fahrt hat Koppeln allein mehr Fehler gesammelt, als ein GPS-Fix trägt.
Greife drinnen gar nicht, überhaupt, niemals danach. Und greife nicht danach für Präzision: 2,5 m sind weit für einen Roboter, der 30 cm breit ist. GPS sagt dir, in welchem Feldteil du bist; ein Radencoder sagt dir, wo du innerhalb eines Meters davon bist. Nutze beides, fusioniert.
Der Upgrade-Pfad, nach Wert geordnet: zuerst eine höhere Aktualisierungsrate (5 oder 10 Hz entfernen den größten Teil der Veraltung), dann ein Multikonstellations-Modul (GPS plus GLONASS oder Galileo verbessert Geometrie und damit HDOP), und erst dann RTK – das Zentimeter erreicht und eine Basisstation, eine Datenverbindung und ein anderes Budget braucht.
Typische Fallstricke
- Kaltstart sind Minuten, nicht Sekunden. Ohne Almanach muss der Empfänger einen von den Satelliten mit 50 Bit pro Sekunde herunterladen. Ein Roboter, der beim ersten Einschalten draußen tot wirkt, wartet meist nur.
- Es hat keine Peilung. Nur Position. Paare es mit Magnetometer oder Gyro; Kurs über Grund ist unter etwa 1 m/s bedeutungslos.
- 5 V an RX töten 3,3-V-Module. Prüfe, ob dein Breakout Pegel wandelt. Modul-TX in ein 5-V-Board ist in Ordnung.
- Die Antenne braucht Himmel, keine Aussicht. Metall darüber – inklusive deiner eigenen Chassisplatte – kostet dich Satelliten. Montiere sie oben, flach, nach oben schauend.
- Folge niemals Roh-Fixes. Kopple dazwischen und korrigiere bei jedem; den Fixes direkt zu folgen kostet eine Größenordnung Spurfehler und vierfaches Lenken.
- Sechs Nachkommastellen sind 11 cm – und mehr, als ein
floathält. Rechne in Meter relativ zu einem Missionsursprung statt Arithmetik auf Rohgraden zu tun.
Pinbelegung und Verdrahtung
| Pin | Name | Was er tut |
|---|---|---|
| 1 | VCC | 3,3–5 V. Prüfe, ob dein Breakout regelt – viele NEO-6M-Boards tun es |
| 2 | RX | Modul empfängt Konfiguration. 3,3-V-Logik an nacktem Modul |
| 3 | TX | Modul sendet NMEA. Sicher in einen 5-V-Eingang |
| 4 | GND | Masse |
| 5 | PPS | Ein Puls pro Sekunde, auf GPS-Zeit ausgerichtet. Von meisten Projekten ignoriert |
| GPS | Arduino Uno | Hinweis |
|---|---|---|
| VCC | 5 V | Wenn dein Board einen Regler hat; 3,3 V, wenn nicht |
| GND | GND | |
| TX | Pin 4 (SoftwareSerial RX) | Modul spricht, Board hört zu |
| RX | Pin 3 über Teiler | Nur nötig, wenn du das Modul konfigurierst |
Du kannst RX ganz offen lassen. Ein GPS-Modul im Standardzustand streamt NMEA mit 9600 Baud, ohne gefragt zu werden, und für einen Roboter, der nur Position liest, ist das alles, was du brauchst. Verbinde RX nur, wenn du die Aktualisierungsrate erhöhen oder ungenutzte Sätze stumm schalten willst.
Auslesen ohne Bibliothek
#include <SoftwareSerial.h>
SoftwareSerial gps(4, 3); // RX from module TX, TX to module RX
char line[100];
uint8_t len = 0;
void setup() {
Serial.begin(115200);
gps.begin(9600);
}
void loop() {
while (gps.available()) {
char c = gps.read();
if (c == '\n') {
line[len] = '\0';
if (strncmp(line, "$GPRMC", 6) == 0) handleRmc(line);
len = 0;
} else if (len < sizeof(line) - 1) {
line[len++] = c;
}
}
}
void handleRmc(char *s) {
// $GPRMC,time,status,lat,N/S,lon,E/W,speed,course,date,...
char *field[13] = {nullptr};
uint8_t n = 0;
for (char *tok = strtok(s, ","); tok && n < 13; tok = strtok(nullptr, ",")) field[n++] = tok;
if (n < 7 || field[2][0] != 'A') return; // 'V' = void. Coordinates are still present
// and still meaningless. Gate on this.
Serial.print(toDegrees(field[3], field[4][0]), 6);
Serial.print(' ');
Serial.println(toDegrees(field[5], field[6][0]), 6);
}
// NMEA gives ddmm.mmmm — degrees and DECIMAL MINUTES, not decimal degrees.
double toDegrees(const char *ddmm, char hemisphere) {
double raw = atof(ddmm);
int deg = (int)(raw / 100);
double minutes = raw - deg * 100;
double result = deg + minutes / 60.0;
return (hemisphere == 'S' || hemisphere == 'W') ? -result : result;
}
Die zwei Zeilen, die am meisten zählen, sind die, die Leute überspringen.
field[2][0] != 'A' ist das Gültigkeitstor. Ein Empfänger ohne Fix sendet trotzdem perfekt wohlgeformte RMC-Sätze mit Koordinaten – meist die letzte bekannte Position oder Nullen. Code ohne Prüfung des Statusflags navigiert selbstbewusst in die Mitte des Atlantiks, wo 0°N 0°E liegt.
toDegrees existiert, weil 4807.038 nicht 4807,038 Grad sind, und auch nicht 48,07038 Grad. Es sind 48° 07,038′, was 48,1173° sind. NMEA-Koordinaten als Dezimalgrad zu behandeln ist der häufigste GPS-Fehler überhaupt, und der Fehler ist groß genug, um offensichtlich zu sein – was das einzig Gute daran ist.
Für echte Projekte nutze TinyGPS++. Es handhabt jeden Satztyp, Prüfsummen und die Randfälle. Die manuelle Version oben lohnt sich einmal, damit du weißt, was sie tut.
Genauigkeit: was die Zahlen wirklich heißen
| Zahl | Typisches NEO-6M | Was sie heißt |
|---|---|---|
| Horizontale Genauigkeit | ~2,5 m CEP | Die Hälfte aller Fixes liegt innerhalb 2,5 m. Die Hälfte nicht |
| Aktualisierungsrate | 1 Hz Standard, 5 Hz einstellbar | Bei 1 m/s ist ein 1-Hz-Fix bis zu einem Meter alt, bevor du ihn liest |
| Kaltstart | ~27 s, Minuten ohne Almanach | Nichts ist kaputt; es lädt mit 50 Bit pro Sekunde |
| Warmstart | ~1 s | Mit Stützstrom, der den Almanach am Leben hält |
| Tempogenauigkeit | ~0,1 m/s | Wirklich gut – besser als die Position |
CEP ist ein Median, keine Schranke. Die Hälfte deiner Fixes ist schlechter als 2,5 m, und nahe Gebäuden ist der Schwanz lang. Für einen 30 cm breiten Roboter ist „irgendwo innerhalb weniger Meter“ keine Position – es ist eine Nachbarschaft.
HDOP ist das Feld zum Beobachten. Es beschreibt Satellitengeometrie statt Signalqualität, und es ist das Ding, das eine selbstbewusste Antwort erzeugt, die Dutzende Meter falsch ist:
| HDOP | Qualität | Nutzen? |
|---|---|---|
| < 1 | Ideal | Ja |
| 1–2 | Exzellent | Ja |
| 2–5 | Gut | Ja, mit Vorsicht |
| 5–10 | Mäßig | Nur als langsame Korrektur |
| > 10 | Schlecht | Fix verwerfen |
Prüfe auf HDOP ebenso wie auf das Gültigkeitsflag. Ein Fix mit HDOP 12 ist kein Fix; er ist eine Schätzung mit Dezimalpunkt.
Statische Drift, und warum sie zählt
Lasse ein GPS-Modul zehn Minuten perfekt still liegen und logge jeden Fix. Du bekommst eine Wolke mehrere Meter groß. Nichts hat sich bewegt.
Das ist das eine Wichtigste, selbst zu sehen, bevor man Navigationscode schreibt, weil es erklärt, warum Roh-Fixes zu folgen hoffnungslos ist. Ein Regler mit dieser Wolke gefüttert jagt ihr hinterher, und der Roboter schlingert dauernd bei wenig Fortschritt. Kopple mit Encodern zwischen Fixes und nutze jeden Fix nur zur Korrektur der langsamen Drift, und derselbe Regler spurt sauber – das Wegpunkt-Navigations-Tutorial hat die Zahlen.
Das Modul konfigurieren
Die Aktualisierungsrate zu erhöhen ist die eine wertvollste Änderung, und sie lohnt sich vor allem anderen. u-blox-Module nehmen binäre UBX-Befehle:
// UBX-CFG-RATE: 200 ms measurement period -> 5 Hz
const uint8_t setRate5Hz[] = {
0xB5, 0x62, 0x06, 0x08, 0x06, 0x00,
0xC8, 0x00, // 200 ms
0x01, 0x00, // one measurement per solution
0x01, 0x00, // align to GPS time
0xDE, 0x6A // checksum
};
void setup() {
gps.begin(9600);
delay(100);
gps.write(setRate5Hz, sizeof(setRate5Hz));
}
Bei 5 Hz wird 9600 Baud zum Engpass – der volle NMEA-Satz passt nicht in 200 ms. Entweder Baudrate auf 38400 erhöhen oder Sätze abschalten, die du nicht nutzt (besonders GSV ist wortreich und meldet Satellitendetails, die kein Roboter braucht).
Beachte, dass an einem NEO-6M die Konfiguration ohne Batteriestützung nicht bleibt. Sende sie bei jedem Start.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
| Gar keine Daten | TX/RX nicht gekreuzt oder falsche Baud | Modul-TX → Board-RX; zuerst 9600 versuchen |
| Daten kommen, nie ein Fix | Drinnen | GPS braucht Himmel. Ein Fenster reicht meist nicht |
| Erster Fix dauert Minuten | Kaltstart ohne Almanach | Normal. Draußen mit freier Sicht warten |
| Position ist 0, 0 | Ungültigen Fix genutzt | Auf RMC-Statusflag A prüfen |
| Position wild falsch | ddmm.mmmm als Grad behandelt | Umrechnen: Grad + Minuten/60 |
| Position springt mehrere Meter | Normales Empfängerrauschen | Erwartet. Mit Odometrie fusionieren; nie Roh-Fixes folgen |
| Fix selbstbewusst, aber weit daneben | Schlechte Satellitengeometrie | Fixes mit HDOP über ~5 verwerfen |
| Weniger Satelliten als erwartet | Antenne verbaut | Oben montieren, nach oben, frei von Chassisplatte |
| Modul wurde heiß und starb | 5 V in einen 3,3-V-RX-Pin | Prüfen, ob dein Board Pegel wandelt, vor dem Verdrahten |
| Läuft, stoppt dann bei 5 Hz | 9600 Baud trägt die Sätze nicht | Baudrate erhöhen oder GSV abschalten |
Ein Modul wählen
| Modul | Konstellationen | Rate | Hinweise |
|---|---|---|---|
| NEO-6M | GPS | 1–5 Hz | Der billige Standard. Altern, aber überall |
| NEO-M8N | GPS + GLONASS + Galileo | bis 10 Hz | Bessere Geometrie, besseres HDOP – das sinnvolle Upgrade |
| NEO-M9N | Multiband-fähig | bis 25 Hz | Spürbar besser im urbanen Umfeld |
| ZED-F9P (RTK) | Multiband | 20 Hz | Zentimeter-Genauigkeit, mit Basisstation und Datenlink |
Der Upgrade-Pfad lohnt sich in Reihenfolge. Eine höhere Aktualisierungsrate entfernt den größten Teil des Veraltungsproblems und kostet nichts. Ein Multikonstellations-Empfänger sieht mehr Satelliten, was Geometrie und damit HDOP verbessert – das ist in der echten Welt eine größere Verbesserung, als die Genauigkeitsangabe vermuten lässt, besonders nahe Gebäuden. RTK erreicht Zentimeter und ist transformativ für einen Roboter, der im Feld einer Linie folgen muss, braucht aber eine Basisstation, einen Korrekturdatenlink und grob das zehnfache Budget.
Eines gibt dir kein GPS-Modul zu keinem Preis: Peilung im Stillstand. Kurs über Grund leitet sich aus aufeinanderfolgenden Positionen ab, ist also unter etwa 1 m/s Rauschen und bei Tempo null bedeutungslos. Ein Roboter, der wissen muss, wohin er zeigt, braucht Magnetometer oder Gyro, egal wie gut sein GPS ist.
Den Graphen erkunden
Verwendet in diesen Bauprojekten
Projekte, Lernpfade und Simulatoren, die NEO-6M GPS Module verwenden.
Fragen
FAQ zu NEO-6M GPS Module
Wie genau ist ein NEO-6M wirklich?
Etwa 2,5 Meter die Hälfte der Zeit, mit freier Himmelssicht und guter Satellitengeometrie – was die Zahl im Datenblatt und eine optimistische für einen Roboter ist, der neben einem Gebäude oder unter Bäumen fährt. Wichtig ist, dass es in selbstbewusst falsche Antworten statt offensichtliche Ausfälle abgleitet, also prüfe jeden Fix auf gemeldete Fix-Qualität und HDOP, statt der Position zu trauen, weil sie geparst wurde.
Was ist HDOP und warum zählt es mehr als die Genauigkeitszahl?
Horizontale Genauigkeitsverwässerung beschreibt die Geometrie der gerade sichtbaren Satelliten. Über den Himmel verteilte Satelliten geben eine gut konditionierte Lösung; gebündelte geben eine schlecht konditionierte, und der Empfänger meldet trotzdem eine Position mit vollem Selbstbewusstsein. Ein HDOP unter 2 ist gut und über etwa 2,5 ablehnenswert. Es ist das nützlichste Feld im GGA-Satz und fast niemand liest es.
Kann ein GPS-Modul meinem Roboter sagen, wohin er zeigt?
Nein. Ein Fix ist eine Position, und ein stehender Roboter nach Norden gibt exakt denselben Fix wie einer nach Süden. Kurs über Grund wird aus aufeinanderfolgenden Positionen gerechnet, bedeutet also nur etwas, während der Roboter wirklich fährt – unter grob 1 Meter pro Sekunde ist es meist Rauschen. Outdoor-Rover paaren GPS mit Magnetometer für absolute Peilung, Gyro für kurzfristige Peilung oder beidem.
Warum schlingert mein Roboter beim Folgen von GPS-Wegpunkten?
Weil ein 1-Hz-Fix zugleich alt und verrauscht ist, und ein Bahnfolger mit Roh-Fixes bei jedem neuen lungert. Gemessen auf derselben Strecke mit demselben Regler macht ein 1-Hz-Fix bei meterskaligem Rauschen aus 0,09 m RMS-Querfehler 1,25 m und vervielfacht den Lenkaufwand um viereinhalb. Die Lösung ist, zwischen Fixes zu koppeln und jeden neuen Fix zur Korrektur dieser Schätzung statt zum Ersetzen zu nutzen.
Funktioniert es drinnen?
Praktisch nie, und das ist kein Defekt. Das Signal eines GPS-Satelliten kommt schwächer als der thermische Rauschboden an und braucht unverbauten Himmel; ein Dach stoppt es. Module auf der Fensterbank erfassen manchmal und melden große Fehler aus Mehrwegeausbreitung. Teste draußen im Offenen und plane eine Minute für Kaltstart ein, bevor du etwas als kaputt annimmst.
5 V oder 3,3 V?
Die meisten Breakout-Boards tragen einen Regler und akzeptieren 5 V an VCC, aber die eigene Logik des Moduls ist 3,3 V. 5 V in RX auf einem Board ohne Pegelwandlung zu speisen ist die übliche Art, wie diese sterben. Prüfe dein konkretes Board, und treibe RX im Zweifel über einen Teiler – TX des Moduls in einen 5-V-Mikrocontroller ist in Ordnung, da 3,3 V die Logik-High-Schwelle an einem AVR überschreiten.
Weiterführende Literatur