Bouw een GPS-waypointrover die zelfstandig rijdt
Een rover die zelfstandig een opgeslagen lijst met GPS-waypoints over een terrein volgt, binnen een meter van de lijn blijft en stopt als hij het geofence verlaat.
Wat je bouwt
Een robot aan wie je een lijst met coördinaten geeft, die je op het gras zet en waarna je wegloopt.
Elke andere mobiele robot op deze site reageert op wat hij recht voor zich ziet — een lijn, een muur, een obstakel, een grens. Deze voert een plan uit in een wereld zonder herkenningspunten, met een sensor die hem enkele keren per minuut misleidt. Die combinatie maakt hem tot de moeilijkste mobiele bouw hier en degene die het meest leert.
De drie dingen die het bepalen
De volger is het eenvoudigste deel. Pure pursuit is twaalf regels en één instelling. Met een perfecte positieschatting houdt hij 0,09 m RMS-fout op de laboratoriumbaan.
De positieschatting is het hele project. Dezelfde regelaar, met een 1 Hz GPS-fix met ruis op meterschaal, houdt 1,25 m vast — veertien keer slechter — en gebruikt daarvoor vier en halve keer zoveel besturing. De regelaar draagt minder dan een tiende van de eindfout bij.
De bouwvolgorde is dus: volger binnen, schatting buiten. Bewijs de besturing waar de positie vrijwel exact is en ga daarna met de sensor vechten. Als je alles tegelijk doet, krijg je een robot die om redenen dwaalt die je niet kunt scheiden.
Stuklijst
| Onderdeel | Aantal | Geschatte kosten | Opmerkingen |
|---|---|---|---|
| Arduino Uno of Mega | 1 | $5–12 | Een Mega is de moeite waard: vier interrupt-pinnen voor volledige ×4-encoderdecodering en extra UART-poorten |
| GPS-module (NEO-6M) | 1 | $8–12 | Een NEO-M8N is de beste verbetering hier — meerdere constellaties, betere geometrie |
| MPU-6050 | 1 | $2 | Koers tussen fixes. Zonder deze kan de rover niet weten welke kant hij op kijkt |
| N20-encoder-motoren | 2 | $16 | Encoders zijn niet optioneel in deze bouw |
| TB6612FNG | 1 | $3 | |
| 2WD-chassis | 1 | $10–20 | Grotere wielen helpen buiten; gras is geniepig voor een wiel van 65 mm |
| Accupakket | 1 | $10 | 2×18650 beveiligd, of 3S met een regelaar |
| Hoge antennehouder | 1 | $2 | De patchantenne heeft hemel nodig, geen zicht — metaal erboven kost satellieten |
Totaal: ongeveer $55–80.
De keuze die het meeste verschil maakt voor het project is de ontvanger. Een NEO-6M werkt en is wat de meeste tutorials aannemen; een NEO-M8N ziet GPS plus GLONASS en Galileo, wat de satellietgeometrie en dus HDOP verbetert. Dicht bij gebouwen en bomen — waar een rover daadwerkelijk rijdt — is dat in de praktijk een grotere verbetering dan de nauwkeurigheidsspecificatie doet vermoeden.
Sla de encoders niet over om $12 te besparen. Dit hele project is een schatting op basis van de eigen waarnemingen, gecorrigeerd door incidentele fixes; zonder encoders heeft de rover geen basis om te schatten en volgt hij simpelweg de ruis van GPS.
Bouwvolgorde
1 — Stel de volger af in de simulator. Een uur in het padvolglab op de snelheid waarmee je wilt rijden. Vind de vooruitkijkafstand waarop de foutcurve het laagst is; merk op dat die verschuift als je de snelheid verandert.
2 — Bouw de aandrijving en laat odometrie werken. Encoders in odometrie voor differentiële aandrijving, rijd dan een vierkant van 2 m en zie hoe ver je er vandaan eindigt. Dat getal is je budget voor binnen.
3 — Fuseer een koers. Een gyro op de regelfrequentie, gecorrigeerd door iets absoluuts. Koersfout is de grootheid die beide regelaars het zwaarst wegen, en het is de eerste die odometrie verliest — het complementaire filter dat een balanserobot stabiliseert, doet hier hetzelfde werk.
4 — Volg binnen een met tape gemaakte baan. Geen GPS. Plak een pad op de vloer, voer pure pursuit uit op de schatting uit de encoders en meet de cross-trackfout op tien punten met een liniaal. Is die binnen niet minder dan 10 cm, dan wordt hij buiten ook niet minder dan een meter.
5 — Voeg de ontvanger toe en verbind hem nog niet met de regelaar. Log de fixes tien minuten terwijl de rover stilstaat en teken ze uit. Je ziet de ruis, de incidentele uitwijking en hoe HDOP beide volgt. Die grafiek is meer waard dan een cijfer uit een datasheet.
6 — Fuseer, volg niet. Schat de positie met de eigen waarnemingen op de regelfrequentie; trek de schatting voorzichtig naar elke goede fix. De rekenkunde en de selectie op HDOP staan hier. Verwerp alles met een void-status of HDOP boven ongeveer 2,5.
7 — Zet daarna het geofence en ga naar buiten. Maximale afstand tot het startpunt, timeout voor de missie en fysieke noodstop. Daarna een korte missie op gras terwijl je ernaast loopt.
Hardware-opmerkingen die ertoe doen
Monteer de antenne bovenop, naar de hemel gericht en zo ver mogelijk van alles. Een keramische patch onder een chassisplaat verliest satellieten, en verloren satellieten betekenen slechte geometrie in plaats van geen fix — een zelfverzekerd fout antwoord in plaats van een duidelijke storing.
Grotere wielen dan je binneninstinct. Gras, grind en de rand van een gazon zijn allemaal kwesties van wieldiameter. Ze veranderen ook je odometrieschalfactor, dus kalibreer opnieuw op de ondergrond waar je werkelijk rijdt.
Houd de magnetometer uit de buurt van de motoren, of laat hem weg. Motorstroom produceert een veld dat het aardmagnetisch veld overtreft. Kun je 15 cm scheiding niet krijgen, gebruik dan gyro plus course-over-ground en vermijd het probleem.
Log de missie. Een buitenstoring die je niet hebt opgenomen is een storing die je niet kunt foutzoeken — de robot was 40 m van je vandaan en je keek niet naar de seriële poort. Een SD-kaart of een Wi-Fi-log van pose, fix, HDOP en cross-trackfout maakt van elke rit bewijs.
Verwacht dat de eerste buitenrit vroegtijdig eindigt. Daar is het geofence voor, en dat is een succes.
Hoe een goed resultaat eruitziet
| Meting | Rechtstreeks GPS volgen | Gefuseerd met odometrie |
|---|---|---|
| Cross-trackfout, RMS | 3–5 m | 0,3–0,6 m |
| Cross-trackfout, slechtste geval | 8–12 m | 1,0–1,5 m |
| Besturingsactiviteit | Constant, grote correcties | Vloeiend, incidenteel |
| Tolerantie bij aankomst op waypoint | 5 m, en dat is zelfs optimistisch | 0,5–1 m |
| Statische positiedrift, stilstaand | 2–4 m spreiding | N.v.t. — odometrie houdt hem stil |
Die eerste kolom betekent niet dat de rover slecht is gebouwd; het is wat een 2,5 m CEP-fix op 1 Hz doet met een regelaar die hem vertrouwt. De verbetering van een orde van grootte in de tweede kolom komt uit de schatter, niet uit de regelaar — dezelfde pure-pursuitcode, gevoed met een gefuseerde pose.
Voordat je enige navigatiecode schrijft, doe je dit één keer: zet de ontvanger tien minuten buiten stil en log elke fix. De spreiding die je krijgt, is enkele meters breed en er is niets bewogen. Die grafiek is het nuttigste dat je in dit project kunt bekijken, omdat ze verklaart waarom het volgen van ruwe fixes niet kan werken en waarom de fix vóór de regelaar zit.
Als het misgaat
| Symptoom | Meestal |
|---|---|
| Rijdt buiten rechtdoor met slingeren, binnen prima | Volgt ruwe fixes in plaats van ze te fuseren |
| Slingert ook binnen | Vooruitkijkafstand te kort voor de vertraging; stel opnieuw af in het lab |
| Snijdt elke hoek af | Vooruitkijkafstand te lang — de afweging, geen fout |
| Zelfverzekerde positie die tientallen meters afwijkt | Slechte satellietgeometrie; je hebt niet op HDOP gefilterd |
| Rijdt vanaf stilstand de verkeerde kant op | Geen bruikbare koers; course-over-ground is ruis onder ~1 m/s |
| Drijft gestaag naar één kant | Odometieschaal of spoorbreedte klopt niet voor deze ondergrond |
| Er gebeurt de eerste twee minuten niets | GPS-koudstart. Laat hem zien, veronderstel niet dat de oorsprong klopt |
| Verliet het terrein | Het geofence was vóór de test niet geschreven |
Zes van die acht zijn een waarnemingsprobleem in plaats van een regelprobleem — dezelfde verdeling als bij de micromouse en de kamerdekkingsrobot, en om dezelfde reden: het algoritme is het kleine deel.
Volg voor de hele reeks de roadmap voor padvolging; voor de binnenversie van hetzelfde probleem heeft de kamerdekkingsrobot een plan nodig en helemaal geen absolute positie.
Projectroadmap
De bouwroute
Volg de techboom van onderdelen tot een werkende robot. Elk knooppunt wordt ontgrendeld zodra de voorwaarden klaar zijn, en je voortgang wordt op dit apparaat opgeslagen.
0 / 20 klaar
Componenten
- ControllerArduino UnoHet vergevingsgezinde 8-bits bord waarmee de meeste mensen robotica leren.
- SensorNEO-6M GPS-moduleAbsolute positie overal buiten, zodra de ontvanger een minuut ongehinderd zicht op de hemel heeft.
- SensorMPU-6050 IMUEen zesassige bewegingssensor—zo voelt een robot zijn eigen kanteling, draaiing en versnelling.
- ActuatorN20-encoder-tandwielmotorMicromotor met metalen tandwielkast en encoder achterop: zo weet de robot hoe ver hij echt is gereden.
- DriverTB6612FNG-motordriverEen MOSFET-H-brug die meer spanning aan de motor doorgeeft.
- Chassis2WD-robotchassisDe basis waarop twee motoren, een vrij zwenkwiel en je elektronica worden gemonteerd.
- VoedingAccu- en voedingspakket voor robotsHet verschil tussen een robot die blijft draaien en een robot die steeds opnieuw opstart.
Tutorials in deze route
- Gevorderd · 30 minPure pursuit: een pad volgen met één knopMik op een punt op het pad op korte afstand voor je en rijd de boog die erheen komt. Dat is het hele algoritme.
- Gevorderd · 30 minGPS-waypointnavigatie voor een buitenrobotEen GPS-fix is laat, ruisachtig en heeft geen koers. Dit is wat je aan elk van die drie kunt doen.
- Gevorderd · 25 min lezenCross-trackfout: meten hoe goed je volgtEén afstand met teken vertelt je alles over een padvolger — inclusief welke je moet kiezen.
- Beginner · 17 min lezenKwadratuurencoders lezen voor afstand en snelheidMaak van kwadratuurencoderpulsen betrouwbare metingen van wielrichting, afstand en snelheid.
- Gevorderd · 20 min lezenOdometrie met differentiële aandrijving uit wielencodersIntegreer de beweging van linker- en rechterwiel in de pose van een mobiele robot en identificeer en kalibreer dan de drift.
Oefen voordat je bedraadt
Stem het af in de live simulator
De bouwroute loopt via een lab in de browser. Krijg het gedrag hier goed en zet je instellingen daarna over naar de echte robot.
Veelgestelde vragen
Waarom bouw je de volger eerst binnen voordat je GPS toevoegt?
Omdat je niet kunt bepalen welke helft fout is als je alles tegelijk bouwt en de rover gaat dwalen. Binnen op encoders is de positieschatting op een met tape gemaakte baan tot op enkele centimeters nauwkeurig, dus elke fout die je ziet, zit in de regelaar. Stel de vooruitkijkafstand daar goed in, meet de cross-trackfout met een liniaal en voeg pas daarna een sensor toe die ruisend en traag is en af en toe zelfverzekerd fout is. Elk uur dat je in deze volgorde besteedt, verdient zichzelf dubbel terug.
Hoe nauwkeurig kan een hobby-GPS-rover werkelijk zijn?
Ongeveer een meter cross-trackfout op een goede dag, en die wordt bepaald door de ontvanger, niet door je regelaar. Gemeten met dezelfde pure pursuit op dezelfde baan geeft een perfecte positieschatting 0,09 meter RMS-fout en een 1 Hz-fix met ruis op meterschaal 1,25 — de regelaar draagt dus minder dan een tiende van het totaal bij. Heb je meer nodig, dan is de volgende stap een snellere ontvanger met meerdere constellaties en daarna RTK, niet meer afstellen.
Heb ik naast de gyro ook een magnetometer nodig?
Je hebt een absolute koersreferentie nodig en hebt drie opties. Een magnetometer levert die in stilstaande toestand, maar vereist kalibratie voor hard- en soft-iron en werkt slecht in de buurt van de motoren. Een gyro is uitstekend voor tientallen seconden en begint daarna te drijven. GPS-course-over-ground is absoluut en gratis, maar alleen betekenisvol boven ongeveer een meter per seconde. De gebruikelijke keuze voor een rover is een gyro voor de regelfrequentie, gecorrigeerd door course-over-ground zodra de robot snel genoeg beweegt om het te vertrouwen — precies wat deze bouw doet, waardoor de kalibratie helemaal niet nodig is.
Welke snelheid moet hij rijden?
Langzamer dan de motoren toelaten, en de simulator laat je zien waarom. De best haalbare cross-trackfout neemt met de snelheid toe, ongeacht je afstelling: 0,05 meter bij 1 m/s wordt 0,23 meter bij 3 m/s in het lab met een perfecte positieschatting. Buiten bepaalt de ontvanger toch de doorslaggevende factor, dus je wint weinig met snelheid en verliest veel bij de eerste veldtest. Begin met 0,5 m/s.
Wat voorkomt dat hij de weg of een vijver in rijdt?
Een geofence dat je vóór de eerste buitenrit schrijft: een maximale afstand tot het startpunt, gecontroleerd helemaal bovenaan de lus, die de motoren onvoorwaardelijk stopt. Voeg een timeout voor de missie toe en een fysieke noodstop die je kunt bereiken — een bumperschakelaar op het bovenste platform werkt en heeft geen radiolink nodig. Dit is tien regels code en het verschil tussen een bug en een robot in het water.
Kan ik een ESP32 gebruiken in plaats van een Uno?
Ja, en voor dit project is dat de betere keuze. Je krijgt een tweede hardwarematige seriële poort voor GPS zonder softwarematige seriële poort, veel meer geheugen voor een waypointlijst, rekenwerk met drijvende komma dat niet pijnlijk is en Wi-Fi om de missie naar een laptop te loggen — de nuttigste foutzoektool die een buitenrobot kan hebben. De Uno werkt; de ESP32 neemt drie ergernissen weg.