This is not a free-floating dot that turns instantly — it is a kinematic bicycle model, the same simplified vehicle geometry real autonomous-car planners use. The car has a fixed wheelbase L; its front wheels can only turn up to a maximum steering angle, and the steering actuator itself has a rate limit, so the wheel angle ramps toward its target instead of snapping there.
x' = v·cos(θ) y' = v·sin(θ)
θ' = (v / L)·tan(δ)
δ → δ_cmd at a limited °/s (actuator lag)
The car "sees" only through a forward-facing sensor cone — a limited range and field of view, like a real camera or LIDAR — not the whole map. Obstacles outside the cone (shown dim) are invisible to the planner. A potential field combines attraction to the goal with repulsion from every currently-sensed obstacle into a local target point ("carrot"); a pure-pursuit controller then converts that carrot into the one steering angle the bicycle-model geometry needs to curve toward it:
κ = 2·sin(α) / Ld
δ_cmd = atan(L·κ) clamped to ±δ_max
where α is the carrot's bearing relative to the car's heading and Ld is the lookahead distance. Speed is throttled down whenever the required steering angle is large or the nearest sensed obstacle is close — exactly the way a real self-driving stack slows for a tight turn instead of taking it at cruise speed.
- Sensor range / field of view — a narrower or shorter cone means obstacles pop into view later, giving the pure-pursuit controller less time to curve around them within the car's real turning-radius limit.
- Max steering angle — a smaller angle means a larger minimum turning radius (
R = L / tan(δ_max)); tight gaps between obstacles become physically impossible to thread, not just harder.
- Cruise speed — faster cruising covers ground quicker but shortens the reaction window inside the sensor's range.