Skip to content

379. Slow Driving Checker

The slow_driving_checker detects situations where the Ego is driving significantly below the posted speed limit without a valid reason. It raises a flag when the Ego's speed drops below a configurable percentage of the speed limit or when the Ego maintains an unusually low speed without an apparent external cause.

This is particularly important for identifying cases where an autonomous driving system becomes overly cautious or fails to maintain appropriate speeds despite having a clearly defined speed limit.

379.0.1 Start condition

An interval starts when all the following conditions are met continuously for a configurable debounce duration:

  • A speed limit is defined for the current road segment, and it must be lower than the maximum representable speed.
  • The Ego's speed drops below the configured percentage threshold of the allowed speed limit, such as 75%.
  • The vehicle is driving at least a minimum absolute speed threshold, to avoid false positives when the vehicle is intentionally stopped or starting. For example, 5 km/h is the least minimum speed.
  • The Ego's longitudinal acceleration remains below a configurable maximum threshold, preventing false flags in situations where the vehicle is slow but already accelerating back to normal speed.
  • None of the justification conditions are met.

379.0.2 End condition

The interval ends when any one or more of the following conditions are met:

  • The Ego's speed returns above the threshold, calculated as (speed ≥ percentage_threshold × speed_limit + tolerance).
  • The Ego's speed drops below the minimum absolute speed threshold, indicating that the vehicle has stopped or is moving extremely slowly. For example, speed below 5km/h.
  • The Ego's longitudinal acceleration exceeds the maximum acceleration threshold plus tolerance for a configurable debounce duration, indicating that the vehicle is accelerating significantly. This prevents transient acceleration spikes from ending the interval prematurely.
  • The speed limit is no longer defined for the current road segment.
  • Any of the justification conditions are met during an active interval.

379.1 Attributes

The following attributes define the behavior and characteristics of the evaluator.

Checker attribute Description
Parent object vehicle.slow_driving
Issue category sut or other
Issue kind slow_driving
Default severity warning
Trigger condition Based on slow_driving watcher
Operation modes slow_driving_checker

379.2 Configuration parameters

The following parameters can be configured to customize the evaluator's behavior.

Parameter Type Description Default Value
speed_limit_factor_threshold float Speed limit factor threshold - defines what percentage of the speed limit is considered slow (default 75%) 0.75
speed_limit_threshold_tolerance speed Absolute speed tolerance for end condition - adds hysteresis to prevent rapid on/off cycling 5kph
min_absolute_speed_threshold speed Minimum absolute speed threshold - filters out stopped vehicles to avoid false positives 5kph
debounce_start_time time Minimum sustained slow driving duration before starting interval - prevents transient speed drops from triggering 0s
max_acceleration_threshold acceleration Maximum longitudinal acceleration threshold - used for start condition justification 0.5mpsps
max_acceleration_threshold_tolerance acceleration Acceleration threshold tolerance for ending interval - end condition is max_acceleration_threshold + max_acceleration_threshold_tolerance 0.5mpsps
debounce_acceleration_end_time time Debounce time for acceleration exceeded end condition - prevents transient acceleration spikes from ending interval 0s
lat_acceleration_magnitude_threshold acceleration Lateral acceleration magnitude threshold - used to justify slow driving in curves 2.0mpsps
relevant_objects_detection_range length Detection range for relevant objects - distance threshold for detecting vehicles, VRUs, and traffic lights 75m
log_level enum (info_level, debug_level, trace_level) Log level for debugging output No default

379.3 Metrics

The following metrics are recorded and tracked by the evaluator.

Metric item Unit / Type Description
speed_limit kph Speed limit at the start of the slow driving interval
speed_threshold kph Slow driving speed threshold at the start of the interval
end_reason enum (unknown, speed_below_minimum, speed_limit_undefined, speed_above_threshold, acceleration_exceeded, lateral_acceleration_exceeded, traffic_light_detected, stop_sign_detected, yield_sign_detected, turn_indicator_enabled, slow_vehicle_ahead, vru_or_object_detected, intersection_or_roundabout_detected, scenario_ended) Reason why the slow driving interval ended
min_speed kph Vehicle minimum speed during the slow driving interval
avg_speed kph Vehicle average speed during the slow driving interval
min_speed_limit_factor Minimum speed as a factor of the speed limit during the interval
avg_speed_limit_factor Average speed as a factor of the speed limit during the interval
speed_limit_factor_threshold Speed limit factor threshold used for this interval
min_lon_acceleration mpsps Vehicle minimum longitudinal acceleration during the slow driving interval
max_lon_acceleration mpsps Vehicle maximum longitudinal acceleration during the slow driving interval
interval_duration s Duration of the interval

379.4 Log and Error Messages

Output Condition Description Default Severity
After the interval ends (if interval started without justification) Slow driving: min speed << slow_driving_checker.data.min_speed >> (below << slow_driving_checker.data.speed_limit_factor_threshold * 100 >>% of limit << slow_driving_checker.data.speed_limit >> which is << slow_driving_checker.data.speed_limit * slow_driving_checker.data.speed_limit_factor_threshold >>) | End reason: << slow_driving_checker.data.end_reason >> Warning

379.5 Additional information

Justification conditions for slow_driving_checker: The checker is not triggered, or an active interval ends, when any of the following conditions are met:

  • High lateral acceleration: The magnitude of lateral acceleration is above a configurable threshold, indicating that the vehicle is driving through a curve where higher speeds may not be safe.
  • Slow vehicle ahead: Any vehicle ahead of the Ego, traveling in the same direction in any lane, within the configurable detection range relevant_objects_detection_range with a default value of 75m, is driving below the speed threshold (speed_limit × speed_limit_factor_threshold).
  • Pedestrian/VRU/Object detected: Pedestrians or vulnerable road users (VRUs) are detected nearby within the configurable detection range relevant_objects_detection_range with a default value of 75m using Euclidean distance.
  • Traffic light detected: A traffic light is detected within the configurable detection range relevant_objects_detection_range with a default value of 75m.
  • Stop sign detected: A stop sign is detected on the route within the configurable detection range relevant_objects_detection_range with a default value of 75m.
  • Yield sign detected: A yield sign is detected on the route within the configurable detection range relevant_objects_detection_range with a default value of 75m.
  • Turn indicator enabled: The Ego's turn indicator, either left or right, is enabled, indicating preparation for or execution of a lane change or turn.
  • Intersection or roundabout detected: An intersection or roundabout element (internal road, roundabout entry/exit) is detected ahead on the planned route within the configurable detection range relevant_objects_detection_range with a default value of 75m.
Figure 1: Slow driving justification conditions

Justification detection: Justification checks run continuously:

  • Before interval starts: If justification is present, no interval is started
  • During active interval: If justification is found (even during hysteresis gap), the interval ends immediately with the specific end_reason corresponding to the justification type: lateral_acceleration_exceeded, slow_vehicle_ahead, traffic_light_detected, stop_sign_detected, yield_sign_detected, turn_indicator_enabled, vru_or_object_detected, or intersection_or_roundabout_detected

This ensures the checker is responsive to changing conditions throughout the entire monitoring period. The end_reason field in the metrics records the specific reason why the interval ended, allowing for detailed analysis of slow driving scenarios. When the vehicle drives significantly below the speed limit without any valid justification, an interval is triggered and a warning is issued.

Figure 2: Slow driving warning without justification conditions

Implementation details: - Hysteresis (Flicker Prevention):

  • Speed: Starts when speed falls below threshold; ends only when speed exceeds threshold plus a tolerance buffer.
  • Acceleration: Starts below threshold; ends when acceleration exceeds threshold plus tolerance for a specific duration.
  • Goal: Creates a dead zone to prevent interval flickering during minor fluctuations.

  • Debounce (Stability Logic):

  • Start Debounce: Slow driving must persist for debounce_start_time to trigger an interval, filtering out brief hesitations.

  • End Debounce: Acceleration must stay above the limit for debounce_acceleration_end_time to close an interval, filtering out transient spikes.