Pfadfolge-Simulator: Pure Pursuit und Stanley
Fahre einen Kurs mit Pure Pursuit oder Stanley bei echter Lenkverzögerung. Ziehe die Vorausschau und der ganze Lauf plottet neu — samt 1-Hz-GPS-Kosten.
- Kategorie
- Autonome Roboter
- Zeitaufwand
- 20–40 Min.
- Plattform
- Browser · Arduino · Raspberry Pi
01 / Hier starten
Einführung
Ein Planer übergibt dir einen Pfad; nichts darin sagt den Rädern, was zu tun ist. Dieses Labor ist die fehlende Sprosse. Pure Pursuit und Stanley lenken denselben Wegpunktkurs mit Lenkantwort erster Ordnung und Erfassungsverzug, denn ein Modell ohne Totzeit lässt die falsche Abstimmung optimal aussehen.
Live lab / Path following
Path following simulator
Pure pursuit and Stanley steering the same course, with the lag a real robot has. Drag the lookahead and the whole run replots — too short oscillates, too long cuts corners, and the best value moves with speed.
The dashed line with dots is the course you asked for; the solid line is where the robot went. The faint line is the whole run at the current settings, computed the moment you change one. Below, cross-track error along the path — dotted verticals are corners. Drag a waypoint to rebuild the course.
- Commanded path
- Driven
- Full run preview
- GPS fix
- RMS error
- —
- Worst error
- —
- Corner cut
- —
- Steering effort
- —
- Progress
- 0%
- Lap time
- —
Keyboard: focus the course, then Space to run/pause, N to step, R to reset, C for a new course, F for full screen. Press 1–8 to pick a waypoint and the arrow keys to move it.
Steuerung
Regler schaltet zwischen Pure Pursuit und Stanley. Vorausschau ist Pure Pursuits einziger Knopf und für Stanley deaktiviert, das keine nutzt — das ist selbst der Punkt.
Tempo und Vorausschau interagieren — das Lohnende zum Spielen: Setze 1 m/s und finde die beste Vorausschau, dann 3 m/s und finde sie erneut.
Position aus tauscht perfekte Odometrie gegen einen 1-Hz-Fix mit metergroßem Rauschen, gehalten zwischen Updates. Fehler wird immer gegen die Wahrheit gewertet — die Strafe ist also echt statt versteckt.
Ziehe jeden Wegpunkt oder wähle mit 1–8 einen und bewege ihn mit den Pfeiltasten. Der ganze Lauf rechnet beim Ziehen neu.
Theorie
Beide Regler beantworten dieselbe Frage — wo bin ich, wo ist der Pfad, welcher Lenkwinkel? — und beantworten sie völlig verschieden.
Pure Pursuit ist Geometrie. Finde den Pfadpunkt eine Vorausschaudistanz L voraus und fahre den Kreisbogen hindurch:
κ = 2y / L_d² δ = atan(2 b sin α / L_d)
mit y Querversatz des Zielpunkts im Roboterbezug und b Radstand. Ein Parameter, und es ist eine Distanz statt Verstärkung — überträgt sich also zwischen Robotern.
Stanley ist Regelung. Referenziere die Vorderachse und addiere zwei Terme:
δ = θ_e + atan(k · e / v)
Kursfehler plus Arkustangens der Querabweichung. Durch Tempo zu teilen lässt eine Verstärkung über einen Tempobereich arbeiten. k ist eine echte Regelverstärkung und überträgt sich nicht.
Das Labor fügt hinzu, was Lehrbuchherleitungen weglassen: 0,4 s Gesamtverzug als 0,25 s Lenkantwort erster Ordnung plus 0,15 s Erfassungs- und Rechenverzug. Ohne ihn wird Pure Pursuit mit schrumpfender Vorausschau monoton besser, und die ganze Abstimmfrage verschwindet.
Algorithmus
Jeder Schritt, für beide Regler:
- Auf den Pfad projizieren, suchend in einem Fenster um die zuletzt erreichte Bogenlänge statt im ganzen Pfad. Eine globale Suche matcht das nächste Segment — ein Kurs, der sich zurückfaltet, teleportiert den Fortschritt zu einer Ecke von vor einer Minute.
- Gleichstand am Scheitel zum ausgehenden Segment auflösen. Hinter einer Ecke projizieren beide Nachbarsegmente auf denselben Punkt in derselben Distanz; das eingehende zu behalten übergibt Kursfehler und Querversatz nahe null, während es geradeaus vom Pfad fährt, lautlos.
- Lenkwinkel berechnen nach der eigenen Regel des Reglers und auf das mechanische Limit klemmen.
- Verzug anwenden, dann Fahrradmodell integrieren.
- Gegen die Wahrheit werten, nie die Schätzung.
Schritt 2 ist keine Optimierung. Er war der Unterschied zwischen Stanley-geht und Stanley-verlässt-selbstsicher bei exakt 78 % jedes Laufs den Kurs.
Quellcode
Pure Pursuit, komplett, in der Form auf einem echten Roboter:
float lastS = 0; // arc length last reached — state, and it only moves forward
float pursue(float x, float y, float heading, float speed) {
// The lookahead is scheduled on speed, with a hard floor: at a standstill a
// proportional schedule asks for zero, which is a division by zero in disguise.
float lookahead = constrain(0.7f * speed + 0.4f, 0.4f, 3.0f);
float s = projectOntoPath(x, y, lastS); // windowed around lastS
lastS = max(lastS, s);
Point goal = pointAtArcLength(lastS + lookahead);
float dx = goal.x - x, dy = goal.y - y;
float lateral = -sinf(heading) * dx + cosf(heading) * dy;
float ld = max(0.3f, hypotf(dx, dy)); // clamp, or curvature blows up
float curvature = 2.0f * lateral / (ld * ld);
return curvature; // omega = v * curvature
}
Die drei Zeilen, die zählen, sind der Kennlinienboden, die lastS-Monotonie und die ld-Klemmung. Alles andere ist die Formel.
Annahmen und Unterschiede zur Hardware
Das Labor gibt dem Roboter eine perfekte Pfadkarte, perfekt bekannten Radstand, keinen Schlupf und Verzug als sauberes Modell erster Ordnung. Ein echter Roboter hat nichts davon.
Schlupf macht die Positionsschätzung falsch, wie kein Regler erkennen kann. Getriebespiel fügt Totweg an jeder Lenkumkehr hinzu — verhält sich wie Extraverzug und schiebt die optimale Vorausschau hoch. Und ein Differenzialantrieb hat gar keinen Lenkwinkel — er hat eine kommandierte Drehrate, ω = v κ ersetzt also das atan, und der Radstand zählt nur dafür, wie eng er drehen kann.
Was alles überlebt, ist die Form: ein inneres Optimum, wandernd rechts mit Tempo, und Fehler in diesem Optimum wachsend mit Tempo ohnehin.
Schaltplan
Der Regler ist der billige Teil. Was er vom Rest des Roboters braucht, ist der teure.
Position. Quadratur-Encoder an beiden Rädern und Differenzialantrieb-Odometrie, die sie integriert, in Schleifenrate. Drinnen genügt das für wenige dutzend Meter.
Kurs. Ein Gyroskop für kurz, ein Magnetometer für absolut, oder beides. Kursfehler ist der Term, den beide Regler am stärksten gewichten — und den Odometrie zuerst verliert.
Absolute Korrektur, draußen. Ein GPS-Modul, in die Schätzung fusioniert statt direkt verfolgt — der Unterschied ist 0,09 m RMS-Fehler gegen 1,25.
Für die Theorie in Gänze siehe Pure Pursuit und Querabweichung; zum Bauen startet der GPS-Wegpunkt-Rover drinnen auf Encodern und geht erst raus, wenn der Folger läuft.
Hardware-Checkliste
Bauteile
- Basis, deren Lenkung oder Raddrehzahlen du direkt kommandieren kannst
- Positionsschätzung — mindestens Encoder, draußen mit GPS fusioniert
- Kursreferenz, die über eine Mission nicht driftet
- Schleife, schnell genug, dass ihr Verzug kleiner als deine Vorausschau ist
Den Graphen erkunden
Wo dieser Simulator verwendet wird
Die Projekte, Lernpfade und Tutorials, die auf diesem Labor aufbauen.
Weiterbauen
Ressourcen herunterladen
Nutze diese Referenzen auf der Seite, während du das Projekt durcharbeitest. Herunterladbare Projektpakete kommen erst hinzu, wenn ihr Quellcode und ihre Version veröffentlicht sind.
Häufige Fragen
Häufig gestellte Fragen
Warum folgt eine kürzere Vorausschau nicht immer besser?
In einem Modell ohne Verzug tut sie es — genau darum sind so viele Lehrbuchherleitungen irreführend. Echte Roboter brauchen Zeit bis zum kommandierten Lenkwinkel und handeln auf einer Pose, die schon dutzende Millisekunden alt ist. Dieses Labor modelliert 0,25 Sekunden Lenkzeitkonstante und 0,15 Sekunden Erfassungsverzug. Mit diesem Verzug wird die Fehlerkurve ein U: Eine kurze Vorausschau kommandiert eine Korrektur, die eintrifft, nachdem der Roboter den Fehler schon passiert hat — das nächste Kommando überkorrigiert. Ein Regler schneller als sein eigener Aktor schwingt.
Wie wähle ich die Vorausschau für meinen Roboter?
Miss deinen Gesamtregelverzug, multipliziere mit deinem Tempo und starte beim Ein- bis Zweifachen dieser Distanz. In diesem Labor beträgt der Verzug 0,4 Sekunden, die gemessenen Optima sind 0,9 Meter bei 1 m/s steigend auf 1,4 Meter bei 3 m/s — zwischen 1,2- und 2,3-mal der Verzugsdistanz. Beachte: Das Optimum wächst mit Tempo, aber unterproportional — eine feste Sekundenanzahl Fahrt ist nah dran, aber nicht richtig. Liefere es als kleine lineare Kennlinie über Tempo mit hartem Minimum, denn im Stillstand will die Kennlinie null.
Was ist besser, Pure Pursuit oder Stanley?
Sie scheitern verschieden — das ist die nützliche Antwort. Über diesen Kurs bei 2 m/s schneidet Pure Pursuit Kurven und endet 0,8 Prozent kurz vor der kommandierten Pfadlänge; Stanley weigert sich, die Linie zu verlassen, holt weit aus und fährt 2,2 Prozent lang. Stanley hält die engere Linie, wo es zählt, verbraucht aber 18,5 Radiant Lenkung gegen 4,3 bei Pure Pursuit — vierfache Aktorbewegung, Strom und Reifenrubbeln. Nutze Pure Pursuit, wenn der Pfad ein Vorschlag ist, und Stanley, wenn er Zwang ist.
Warum wird der Fehler gegen die wahre Position statt die Schätzung gemessen?
Weil ein Roboter, der sich auf dem Pfad wähnt, konstruktionsbedingt null Fehler meldet. Schalte die Positionsquelle auf GPS, und der Regler lenkt auf einen verrauschten, sekundenalten Fix, während das Labor weiter gegen die wirklich integrierte Pose wertet. Nur darum zeigt sich die GPS-Strafe als Zahl: 0,09 Meter RMS-Fehler werden 1,25, und der Lenkaufwand mehr als vervierfacht sich.
Was zeigt die blasse Linie?
Den kompletten Lauf bei aktuellen Einstellungen, berechnet im Moment deiner Änderung. Jeder Schieberzug fährt den ganzen Kurs kopflos in etwa zwanzig Millisekunden neu — Vorausschau zu ziehen zeigt dir also die Trajektorie, die sie erzeugt, statt ein Versprechen darüber. Die fette Linie ist der Roboter, der über denselben Lauf animiert, wenn du Start drückst.
Warum hört der Roboter an der sehr scharfen Ecke nie auf zu drehen?
Beide Regler haben einen Mindestwenderadius aus Radstand und maximalem Lenkwinkel, und eine schärfere Ecke als der lässt sich nicht folgen, egal wie du abstimmst. Die ehrlichen Lösungen liegen weiter vorn: Pfad mit Fase oder Bogen entschärfen oder für die Ecke langsamer werden — wofür ein Bewegungsprofil da ist. Kein Lenkregler fährt eine Geometrie, die das Fahrzeug nicht hat.
Weiterführende Literatur
Quellen
Maßgebliche Quellen, um tiefer einzusteigen als das begrenzte Lernmodell dieses Simulators.