Vehicle Dynamics Simulation
Basic Kinematic Model
For vehicle simulations, use discrete-time kinematic equations.
Speed Update:
new_speed = current_speed + acceleration * dt
new_speed = max(0, new_speed) # Speed cannot be negative
Position Update:
new_position = current_position + speed * dt
Distance Between Vehicles:
# When following another vehicle
relative_speed = ego_speed - lead_speed
new_distance = current_distance - relative_speed * dt
Safe Following Distance
The time headway model calculates safe following distance:
def safe_following_distance(speed, time_headway, min_distance):
"""
Calculate safe distance based on current speed.
Args:
speed: Current vehicle speed (m/s)
time_headway: Time gap to maintain (seconds)
min_distance: Minimum distance at standstill (meters)
"""
return speed * time_headway + min_distance
Time-to-Collision (TTC)
TTC estimates time until collision at current velocities:
def time_to_collision(distance, ego_speed, lead_speed):
"""
Calculate time to collision.
Returns None if not approaching (ego slower than lead).
"""
relative_speed = ego_speed - lead_speed
if relative_speed <= 0:
return None # Not approaching
return distance / relative_speed
Acceleration Limits
Real vehicles have physical constraints:
def clamp_acceleration(accel, max_accel, max_decel):
"""Constrain acceleration to physical limits."""
return max(max_decel, min(accel, max_accel))
State Machine Pattern
Vehicle control often uses mode-based logic:
def determine_mode(lead_present, ttc, ttc_threshold):
"""
Determine operating mode based on conditions.
Returns one of: 'cruise', 'follow', 'emergency'
"""
if not lead_present:
return 'cruise'
if ttc is not None and ttc < ttc_threshold:
return 'emergency'
return 'follow'