pure_pursuit_circle_offset — DRIVE lateral op

• Data kinds: none → table (an op determined by its arguments alone — it takes no image or data input)

• Call: import fullseye as fs; fs.ledger.pure_pursuit_circle_offset(radius: 'float', lookahead: 'float', wheelbase: 'float', *, understeer: 'float' = 0.0, speed: 'float' = 0.0, params: 'Optional[dict]' = None) -> 'Dict[str, float]' (to call the implementation directly, import drivelateral; drivelateral.pure_pursuit_circle_offset(radius: 'float', lookahead: 'float', wheelbase: 'float', *, understeer: 'float' = 0.0, speed: 'float' = 0.0, params: 'Optional[dict]' = None) -> 'Dict[str, float]'; from the registry, opsdrive.get("pure_pursuit_circle_offset"))

Usage

Steady-state circle radius ρ and lateral offset ρ − R (positive outward) when tracking a steady circle (radius R) with pure pursuit (referenced to the rear-axle center).

Kinematics + understeer (params = None): if, for a commanded steering angle δ = L κ_cmd, the actual curvature becomes κ_cmd / (1 + K v²/L), then in the concentric-circle steady state ρ = √(R² + (K v²/L) L_d²) (a closed form derived in this version). If K = 0 then ρ = R (lateral offset 0).

Linear bicycle-equivalent model (params given; δ = atan(L κ_cmd)): in steady state the vehicle heading points inward relative to the rear-axle velocity (the circle's tangent) by the rear slip angle α_r = m l_f a_y / (C_r L), so the apparent angle of the look-ahead point decreases by α_r. The steady-state relations (δ = L/R_c + K u²/R_c, β, centre of rotation) are turned into a one-variable equation in the turning radius R_c of the centre of gravity and solved by bisection (semi-closed form). The kinematic formula drops this effect and so underestimates the lateral offset (about half in the PoC).

Raises ValueError: R, L_d, L ≤ 0, look-ahead point does not reach the circle, 1 + K v²/L ≤ 0, v ≤ 0.5 with params.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_driving_lateral — py -3.11 examples/poc_driving_lateral.py

Ops the type connects to (they accept table as input)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Same category (lateral)

friction_circle_usage · curve_speed_limit · design_min_radius · understeer_gradient · steady_cornering · bicycle_model_step · ackermann_steer_angles · offtracking_circle


*Provenance: drivelateral.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.