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"))

• GPU: none (CPU reference implementation only)

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): For the commanded steering angle δ = L κ_cmd, the actual curvature is κ_cmd / (1 + K v²/L) Then, in a concentric stationary state, ρ = √(R² + (K v²/L) L_d²) (the closed form derived in this version). If K = 0, then ρ = R(lateral slip 0).

Linear two-wheel equivalent model (params is given. δ = atan(L κ_cmd)): At steady state, the direction of the vehicle body is less than the speed of the rear axle (tangent to the circle). Since the rear axis points inward by the sideslip angle α_r = m l_f a_y / (C_r L), the visible angle of the gaze point decreases by α_r. stationary relationship (δ = L/R_c + K u²/R_c, β, center of rotation) is made into a one-variable equation with radius of gyration R_c of the center of gravity and is solved using the bisection method (semi-closed form). The kinematics equation reduces this effect, so the lateral slip is estimated to be small (about half in PoC).

Raises ValueError: R, L_d, L ≤ 0, fixation point does not reach circle, 1 + K v²/L ≤ 0, v < 0.5 in 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.