Tutorial · Gevorderd · 25 min lezen
Cross-trackfout: meten hoe goed je volgt
Het getal dat zegt of een padvolger werkt, hoe je het eerlijk meet, en waarom Stanley buiten de hoeken zwaait waar pure pursuit er dwars door snijdt.
Eén getal, met teken
Cross-trackfout is de loodrechte afstand van de robot tot het pad, met een teken. Positief links van de rijrichting, negatief rechts. Dat is de hele definitie, en het is het enige eerlijke scorebord dat een padvolger heeft.
Het teken is belangrijker dan het lijkt. Een afstand zonder teken vertelt je dat de robot 20 cm ernaast zit; een afstand met teken vertelt je welke kant, en dat is wat elke regelaar nodig heeft en wat een grafiek van de fout leesbaar maakt — een bias toont zich als een verschuiving, een oscillatie als een sinus, een hoek als een piek in een bekende richting.
Meten zonder jezelf voor de gek te houden
Drie valkuilen, in de volgorde waarin mensen erin vallen.
Meet niet tegen de schatting. Als de robot denkt op het pad te staan, is zijn eigen gemelde fout per definitie nul. Cross-trackfout moet worden gescoord tegen de werkelijkheid — een rolmaat, een total station, een motion-capture-opstelling, of in simulatie de ware pose die het model integreert. In de path following simulator ziet de regelaar een mogelijk ruisende fix en wordt de fout altijd uit de waarheid berekend, en dat is de enige reden dat de GPS-straf als getal zichtbaar wordt.
Neem het teken uit het padframe, niet uit een kruisproducttest. De vanzelfsprekende implementatie is testen aan welke kant van het huidige segment de robot staat. Dat teken slaat discontinu om zodra de projectie een waypoint passeert, en met enige actuativerlag ratelt het commando op volle schaal terwijl de wielen nauwelijks bewegen — en dat ziet er precies uit als een kapotte regelaar. Projecteer in plaats daarvan op het pad en neem de laterale component in het eigen frame van het pad:
float h = pathHeadingAt(s); // tangent direction there
float e = -(x - px) * sinf(h) + (y - py) * cosf(h); // + is left of travel
Zoek in de buurt waar je was, niet overal. Een globale zoekactie naar het dichtstbijzijnde punt op een pad dat omkeren vindt zomaar een segment dat je een minuut geleden hebt gereden. Bewaar de laatste booglengte en zoek in een venster daaromheen — een paar meter terug, genoeg vooruit om de vooruitkijk te dekken.
Er is een vierde valkuil die subtieler is en me een werkende regelaar kostte: bij een hoek projecteren beide aangrenzende segmenten naar hetzelfde hoekpunt op dezelfde afstand. Behoud je het inkomende segment, dan zijn de richtingsfout en de laterale offset allebei ongeveer nul, dus een regelaar die op die twee grootheden stuurt vaart vol vertrouwen recht het pad af. Los de gelijkstand op naar het uitgaande segment.
RMS, slechtste geval, en waar de fout woont
Rapporteer drie getallen, want elk verbergt iets dat de andere laten zien.
- RMS-fout is het eerlijke gemiddelde. Daar stel je op af.
- Slechtste geval bepaalt of de robot door de gang past. Een RMS van 0,12 m met een piek van 0,50 m is een andere machine dan 0,12 m RMS met een piek van 0,15 m.
- Fout tegen de afstand langs het pad laat waar zien. Dit is de grafiek die vertelt of je een afstelprobleem of een geometrieprobleem hebt.
Die derde is de reden dat de simulator hem tekent. Een korte vooruitkijk geeft rilling langs het hele pad; een lange is schoon op de rechte stukken en piekt alleen bij hoeken. De RMS kan identiek zijn.
Twee regelaars, twee faalvormen
Pure pursuit mikt op een punt vooruit en rijdt de boog. Stanley — de regelaar die de DARPA Grand Challenge van 2005 won — neemt de vooras als referentie en stuurt op twee termen die bij elkaar worden opgeteld:
δ = θ_e + atan(k · e / v)
De eerste term legt de robot uit op de richting van het pad. De tweede maakt van de cross-trackfout een stuurhoek, en delen door de snelheid is wat dezelfde versterking laat werken bij 1 m/s en bij 10.
Gemeten over hetzelfde parcours bij 2 m/s:
| RMS | Slechtste geval | Afgelegde padlengte | Stuurinspanning | |
|---|---|---|---|---|
| Pure pursuit | 0,12 m | 0,50 m | 0,8% kort | 4,3 rad |
| Stanley | 0,17 m | 0,87 m | 2,2% lang | 18,5 rad |
Het teken van die derde kolom is het hele verhaal. Pure pursuit neemt de binnenlijn en komt vroeger aan; Stanley weigert het pad te verlaten, schiet over de hoek en komt terug — en rijdt daarmee verder dan het pad dat het kreeg.
Stuurinspanning is het getal dat mensen vergeten. Vier keer de actuatorbeweging is vier keer zoveel slijtage aan een servo, vier keer zoveel stroom, en bij een differentiële aandrijving vier keer zoveel wielschuif. Stanley is niet gratis.
Kiezen
Pure pursuit wanneer het pad een suggestie is. Dekkingsvegingen, waypointmissies, alles buiten waar een snijhoek van een halve meter niemand uitmaakt. Het heeft één geometrische knop, het degradeert netjes, en het is ongeveer twaalf regels.
Stanley wanneer het pad een randvoorwaarde is. Een rijbaan, een rij gewassen, een gang met muren. Het houdt de lijn vast en snijdt nooit af, ten koste van stuurinspanning en een versterking die echt afgesteld moet worden — de vooruitkijk is geometrie en gaat over tussen robots; k is een regelversterking en dat niet.
Geen van beide alleen, bij lage snelheid. Beide delen door of schalen met de snelheid. Onder ongeveer 0,3 m/s is een robot met differentiële aandrijving beter af met draaien op de peiling en daarna rijden, en dat drukt geen van beide regelaars uit.
Wanneer het misgaat
| Symptoom | Meestal |
|---|---|
| Gemelde fout is altijd bijna nul | Meten tegen de schatting in plaats van tegen de werkelijkheid |
| Het commando ratelt bij elk waypoint | Teken uit een kruisproducttest dat bij het hoekpunt omslaat |
| Vaart na een hoek vol vertrouwen het pad af | De gelijkstand bij het hoekpunt opgelost naar het inkomende segment — de stille variant |
| Fout springt naar een enorme waarde en herstelt | De globale zoekactie vond een ver weg segment |
| RMS ziet er prima uit, de robot schaart een muur | Rapporteer ook het slechtste geval; RMS verbergt losse pieken |
| Stanley oscilleert op rechte stukken | k te hoog voor de snelheid en de vertraging; het is een versterking, geen geometrie |
| Beide regelaars dwalen samen | Het probleem ligt stroomopwaarts — in de positieschatting, niet in het sturen |
Draai beide over hetzelfde parcours in de path following simulator en volg daarna het path following roadmap van odometrie tot aan een robot die zelf een missie afwerkt.
Verken de graaf
Onderdeel van deze bouwprojecten
Projecten en leerroutes waarin deze tutorial voorkomt.
Verder lezen