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.

Twee gestapelde panelen. Het bovenste is een detailopname van één hoek van het parcours, met de gestreepte commandobaan, de route van pure pursuit die de hoek naar binnen snijdt en de route van Stanley die er buiten omheen zwaait. Het onderste paneel zet de absolute cross-trackfout uit tegen de afstand langs het pad voor beide regelaars over het hele parcours, waarbij Stanley bij de hoeken hogere pieken laat zien.
Zelfde parcours, zelfde snelheid, zelfde vertraging. Pure pursuit snijdt hoeken naar binnen; Stanley zwaait er buiten omheen — en betaalt daarvoor 18,5 rad aan stuurinspanning tegen 4,3. SVG downloaden

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

Bronnen