BouwrouteExpertTwee of drie weekenden

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.

Technisch schema: Bouw een GPS-waypointrover die zelfstandig rijdtLOOKAHEADGOAL POINTCOMMANDED PATH

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

100%
Bouw

Volg eerst binnen een pad

Bouwen

Bouw

Begrens hem vóór de eerste veldtest

Bouwen

Doel

Rijd zelfstandig een missie af

Doel

Componenten

Tutorials in deze route

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.