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_rangewith 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_rangewith a default value of 75m using Euclidean distance. - Traffic light detected: A traffic light is detected within the configurable detection range
relevant_objects_detection_rangewith a default value of 75m. - Stop sign detected: A stop sign is detected on the route within the configurable detection range
relevant_objects_detection_rangewith a default value of 75m. - Yield sign detected: A yield sign is detected on the route within the configurable detection range
relevant_objects_detection_rangewith 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_rangewith a default value of 75m.
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_reasoncorresponding 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, orintersection_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.
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_timeto trigger an interval, filtering out brief hesitations. - End Debounce: Acceleration must stay above the limit for
debounce_acceleration_end_timeto close an interval, filtering out transient spikes.