Contents — find the section you need

Change parameters and verify

Open the panel, then press Run to load Python. You can stop execution and reset parameters. Results are computed on this device. No Python installation is required.

Local execution steps below are optional for reproducing the source results; they are not required for the browser experiment.

The experiment controls are in English.

Open experiment panel in a new tab

Download reproduction source

Fahren und dabei den vorhergesagten Pfad beobachten

Führen Sie „Straight · 1 m offset“ aus und spielen Sie den Lauf ab. Die grünen Striche zu jedem Zeitpunkt sind der zu diesem Zeitpunkt gelöste vorhergesagte Pfad. MPC bestimmt die gesamte Krümmungsfolge über den Horizont, wendet auf das Fahrzeug jedoch nur den ersten Wert an und löst im nächsten Zyklus (0,05 s später) alles erneut. Der vorhergesagte und der tatsächliche Pfad weichen sowohl deshalb voneinander ab, weil das Vorhersagemodell eine Näherung ist, als auch weil spätere Zyklen den Plan aktualisieren.

Speichern Sie das Ergebnis als A und führen Sie dann „Short horizon (3 steps)“ oder „Long horizon (30 × 0.2 s)“ aus. Bei gleichen Gewichten verändert sich der Lenkungsaufbau je nachdem, wie weit der Regler vorausblickt. Die Horizontlänge in Sekunden ist die Anzahl der Schritte N mal der Schrittweite Δt.

Vorhersagemodell und Optimierungsproblem

Die Zustände sind der Querfehler e_y relativ zum Pfad (links positiv) und der Kursfehler e_ψ. Die Vorhersage verwendet ein für MPC vereinfachtes lineares Modell.

e_{y,k+1} = e_{y,k} + v_k\,\Delta t\,e_{\psi,k},\qquad e_{\psi,k+1} = e_{\psi,k} + v_k\,\Delta t\,(u_k - \kappa_k)

u_k ist die befohlene Pfadkrümmung [1/m], κ_k die Pfadkrümmung an der vorhergesagten Position, und v_k die mit demselben Geschwindigkeitsservo wie das Fahrzeug vorhergesagte Geschwindigkeit. Die Lenkung ist δ=atan(L u), sodass die Lenkgrenze |δ|≤δ_max genau der Krümmungsgrenze |u|≤tan(δ_max)/L entspricht. Die Kostenfunktion

J = \sum_{k} q_y e_{y,k}^2 + q_\psi e_{\psi,k}^2 + r\,(u_k-\kappa_k)^2 + r_\Delta\,(u_k-u_{k-1})^2

ergibt ein quadratisches Programm mit ausschließlich Krümmungsgrenzen. u_{-1} ist die im vorherigen Zyklus tatsächlich angewendete Krümmung. r gewichtet die Abweichung von der Pfadkrümmung, r_Δ gewichtet schnelle Krümmungsänderungen. Die Vorhersage ist ein lineares Kleinwinkelmodell, während das Fahrzeug das nichtlineare gemeinsame Fahrradmodell ist. Dieser Unterschied ist Teil dessen, was das Experiment zeigt.

Solver, und was passiert, wenn er nicht konvergiert

Das quadratische Programm wird mit einem projizierten Newton-Verfahren (Bertsekas 1982) gelöst. Variablen, die an einer Grenze gehalten werden, werden fixiert, für die übrigen wird eine Newton-Richtung berechnet, und eine Liniensuche folgt der Projektion auf die Grenzen. Die Lösung gilt als konvergiert, wenn das projizierte Gradientenresiduum höchstens 1e-6 [1/m] beträgt. Ausgangspunkt ist die Lösung des vorherigen Zyklus, sodass die Konvergenz normalerweise innerhalb weniger Iterationen erreicht wird.

Wird das Iterationslimit ohne Konvergenz erreicht, können Sie zwischen drei Verhaltensweisen wählen. „Use feasible iterate“ wendet die Iterierte an, die die Grenzen einhält, und protokolliert den Zyklus als nicht konvergiert. „Hold previous command“ behält die vorherige Lenkung bei und protokolliert den Zyklus als gehalten. „Stop“ beendet den Lauf als Fehlschlag (controller_failed) und zeigt den Grund an. Vergleichen Sie sie anhand der drei Voreinstellungen mit einem Iterationslimit von eins. Da hier ausschließlich Grenzen als Beschränkungen vorliegen, ist dieses Problem niemals unlösbar (es existiert immer eine Lösung). Unlösbarkeit durch harte Zustandsbeschränkungen liegt außerhalb des Umfangs dieses Labs.

Beschränkungen, Gewichte und Geschwindigkeit

„8 m/s · default weights“ schließt vollständig ab, aber „8 m/s · small rate weight (diverges)“ verlässt den Pfad. Das Fahrzeug begrenzt die Lenkrate auf 0,8 rad/s, doch dieses Optimierungsproblem enthält diese Grenze nicht als Beschränkung. Bei einem kleinen Ratengewicht r_Δ geht der Plan von schnellen Lenkänderungen aus, denen das Fahrzeug nicht folgen kann, und die Schwingung wächst. Das ist ein Beispiel dafür, wie eine im Modell fehlende Beschränkung den geschlossenen Regelkreis stört. „High lateral weight“ zeigt ebenfalls abrupte Korrekturen, die an die Lenkraten-Grenze stoßen.

„Tight curve (cannot follow)“ ist ein Pfad mit 5 m Radius, dem das Fahrzeug nicht folgen kann. Unter denselben Bedingungen verlässt auch das Stanley-Labor den Pfad. Ein Wechsel des Regelgesetzes kann die durch das Fahrzeug und seine Beschränkungen gesetzten Grenzen nicht überschreiten.

Gemeinsames Fahrzeug und Vergleichsmetriken

Das Fahrzeug ist dasselbe hinterachsbasierte, nur vorwärts fahrende kinematische Fahrradmodell wie bei PP, APP, RPP und Stanley: 0,05-s-Schritte bis zu 30 s, Geschwindigkeitsgrenze 8 m/s, Beschleunigung ±2 m/s², Lenkrate 0,8 rad/s. Die Geschwindigkeit wird von der MPC nicht optimiert; sie stammt aus demselben Geschwindigkeitsservo a=2(Zielgeschwindigkeit−tatsächliche Geschwindigkeit) wie in den anderen Labs. Die MPC dieses Labs behandelt nur die Lenkung.

Querfehler, Kursfehler, RMS und der Endpunkttest verwenden dieselben Definitionen wie die anderen Labs, bezogen auf die Hinterachse. Das Passieren des Endpunkts bedeutet weder Anhalten noch Einparken. Stufen Sie Läufe mit unterschiedlichen verstrichenen Zeiten oder Abschlusszuständen nicht allein nach RMS ein.

Zur Rechenzeit

Die Solver-Zeit ist die Wanduhrzeit von Python (Pyodide) in diesem Browser. Sie ändert sich mit dem Gerät, dem Browser und anderen gleichzeitig laufenden Prozessen und sagt nichts über die Rechenzeit auf einem fahrzeuginternen Computer oder darüber aus, ob eine Regelfrist eingehalten würde. Eine Leistungsbewertung erfordert die Messung der Worst-Case-Lösezeit auf der Zielhardware und -implementierung (zum Beispiel einem dedizierten Solver wie OSQP).

Vorgeschlagene Abfolge

  1. Spielen Sie den nominalen Lauf ab und vergleichen Sie den vorhergesagten mit dem tatsächlichen Pfad.
  2. Ändern Sie die Anzahl der Horizontschritte und die Schrittweite und vergleichen Sie den Lenkungsaufbau und den Querfehler.
  3. Verwenden Sie die beiden 8-m/s-Voreinstellungen, um zu sehen, wie das Ratengewicht mit der Lenkraten-Grenze zusammenhängt.
  4. Verwenden Sie die drei Voreinstellungen mit einer Iteration, um zu vergleichen, wie nicht konvergierte Zyklen behandelt werden.

Alles läuft in Ihrem Browser, mit Wiedergabe, Einzelbildschritten, A/B-Vergleich, Zurücksetzen, Teilen und JSON-Download.

Referenzen und verwandte Labs

Related reading

Explore another aspect of this fieldPure-Pursuit-Labor – Vergleich der Pfadverfolgung mit fester Vorausschau