One change to the Stanley law — regulate the car's course onto the path instead of its heading — reverses the earlier result. Validated against the variable_grip branch physics (matched to 3.7×10⁻¹³) with the real controllers in a closed loop. Tracking error is cross-track RMS in metres; lower is better.
Same corner, same speed; only tyre grip changes. This isolates the mechanism, free of corner-cutting. Stanley wins at every grip level.
Real eufs tracks with the variable_grip branch's own grip zones, averaged over seeds and speeds where both laws stay on track. Bar = error (shorter is better).
| Track | RPP | Stanley | Error (m) | Δ | Winner |
|---|
A working controller has to actually complete clean laps at pace. RPP and the improved Stanley post matched times at matched speed — the win is tracking quality, not pace.
| Speed policy | RPP | Stanley + sideslip | Stanley (default) |
|---|---|---|---|
| cruise ~5.1 m/s | 19.6 s | 19.6 s clean | 17.8 s 26 hits · DSQ |
| push ~6.7 m/s | 14.4 s | 14.6 s clean | 12.7 s 26 hits · DSQ |
Default Stanley's quicker times are corner-cutting into cones (disqualified), not real pace. Absolute lap time is set by the longitudinal speed profile — a bench stand-in — so read the matched-pace, far-fewer-strikes result, not the seconds.
Driven paths and per-corner error on the real tracks (push pace, full grip). Steel = RPP, amber = Stanley + sideslip.
Re-run with every law following the actual shipping LTO (the CasADi/IPOPT min-time solver the car runs), driven offline at the LTO's own optimal speed profile — 9–12 m/s, e.g. small_track laps in ~9 s. This is how the car really races.
Absolute strikes are high for both — the LTO races at 9–12 m/s on cone-lined tracks barely wider than the car, so both clip; the win is relative. The LTO optimises for the same eufs vehicle the plant simulates; solver is CasADi/IPOPT min-time with a convex min-curvature QP warm-start (used directly when the NLP maxes iterations).
The plant is a port of the branch's DynamicBicycle, checked against the branch's own golden fixtures. The controllers are the real shipping code.
A dynamic car cornering at the limit slides: its velocity points off its heading by the body-slip angle β. Kinematic Stanley nulls heading error, so it settles with a standing offset that grows with grip loss. The fix regulates course (heading + β) onto the path:
heading_err − sideslip_gain · β (β = atan2(v_y, v_x))
β grows with understeer, so the term self-stiffens in low-grip zones. Removing the offset also let the cross-track gain firm up (0.3 → 0.6), which tightened tracking and improved jitter robustness. Default gain is 0 — bit-identical to today's law until switched on.