201. Unplanned Standing
The unplanned_standing_checker detects situations where the vehicle is standing still or driving at very low speeds without a valid reason.
It flags situations where the vehicle hesitates, becomes stuck, or slows down unnecessarily, even though it is safe and appropriate to continue driving. This helps detect issues in autonomous driving systems, such as excessive caution or failure to proceed, which can disrupt traffic flow.
201.0.1 Start condition
An interval starts when all of the following conditions are met:
- The vehicle's speed falls below the configured
max_speed_thresholdwhich indicates it is standing still or near-standstill. - The vehicle's speed has been below the
max_speed_thresholdfor a minimum durationdebounce_start_timeto avoid flagging cases where the vehicle has slowed down or stopped normally. - The vehicle's longitudinal acceleration is below the configured
max_acceleration_thresholdto avoid flagging cases where the vehicle slowed or stopped but is already starting to accelerate again. - None of the justification conditions are met.
201.0.2 End condition
The interval ends when any of the following conditions occur:
- The vehicle's speed exceeds the
max_speed_thresholdplus a configurable tolerancespeed_threshold_tolerance. - The vehicle's longitudinal acceleration exceeds the
max_acceleration_threshold, indicating it is starting to move. - Any of the justification conditions are met.
201.1 Attributes
The following attributes define the behavior and characteristics of the evaluator.
| Checker attribute | Description |
|---|---|
| Parent object | vehicle.unplanned_standing |
| Issue category | sut or other |
| Issue kind | unplanned_standing |
| Default severity | warning |
| Trigger condition | Based on unplanned_standing watcher |
| Operation modes | unplanned_standing_checker |
201.2 Configuration parameters
The following parameters can be configured to customize the evaluator's behavior.
| Parameter | Type | Unit | Description | Default Value | Range |
|---|---|---|---|---|---|
max_speed_threshold |
speed | kph | Very low velocity threshold below which the vehicle is considered standing | 1.0kph | [0, 20]kph |
speed_threshold_tolerance |
speed | kph | Tolerance for speed threshold - interval ends when speed exceeds max_speed_threshold + speed_threshold_tolerance | 0.5kph | [0, 60]kph |
debounce_start_time |
time | s | Minimum duration the vehicle must be below the max_speed_threshold before starting an interval | 0s | [0, 30]s |
max_acceleration_threshold |
acceleration | mpsps | Maximum longitudinal acceleration threshold below which the vehicle is considered to be standing still | 0.3mpsps | [0, 30]mpsps |
object_detection_range |
length | m | Detection range for objects ahead | 10.0m | [0, 100]m |
blocking_object_speed_threshold |
speed | kph | Maximum speed threshold for objects; objects or vehicles below this threshold are considered blocking | 1.0kph | [0, 20]kph |
pedestrian_detection_range |
length | m | Detection range for pedestrians crossing or about to cross the vehicle's path | 10.0m | [0, 100]m |
intersection_detection_range |
length | m | Detection range for an intersection or roundabout | 10.0m | [0, 100]m |
traffic_control_detection_range |
length | m | Detection range for traffic control devices (traffic lights, signs) | 10.0m | [0, 100]m |
issue_severity |
enum (ignore, info, warning, error_continue, error, error_stop_now) |
Issue severity for unplanned standing checker | warning |
201.3 Metrics
The following metrics are recorded and tracked by the evaluator.
| Metric | Type | Description | Range | Unit |
|---|---|---|---|---|
acceleration_at_start |
acceleration | Longitudinal acceleration at the unplanned standing interval start | mpsps | |
interval_duration |
time | Duration of the unplanned standing interval | s | |
end_reason |
enum (no_justification, traffic_blocking, pedestrian_present, traffic_control_device, intersection_navigation, turn_indicator_enabled) |
Reason why standing was justified (if applicable) | ||
min_speed |
speed | Minimum speed during standing | kph | |
max_speed |
speed | Maximum speed during standing | kph | |
avg_speed |
speed | Average speed during standing | kph | |
min_lon_acceleration |
acceleration | Minimum longitudinal acceleration during standing | mpsps | |
max_lon_acceleration |
acceleration | Maximum longitudinal acceleration during standing | mpsps |
201.4 Log and Error Messages
| Output Condition | Description | Default Severity | Action |
|---|---|---|---|
| After the interval ends, a warning is issued | Vehicle was slower than ftlx_global_eval_config.ego_unplanned_standing_checker_config.max_speed_threshold for longer than ftlx_global_eval_config.ego_unplanned_standing_checker_config.debounce_start_time |
Warning | Investigate the SUT's behaviour. |
201.5 Usage
201.5.1 How to instantiate
The unplanned_standing_checker is built into the Ego via global modifier sut_vehicle.unplanned_standing_checker.
It can be instantiated for any vehicle actor.
checker unplanned_standing_checker is unplanned_standing(vehicle: actor)
keep(unplanned_standing_checker.unplanned_standing_checker_config == \
ftlx_global_eval_config.ego_unplanned_standing_checker_config)
201.5.2 Set parameters at instantiation time
Bind unplanned_standing_checker_config with keep(...) when you declare the checker (see the example above).
201.5.3 Define and use a custom parameter set
Customize via unplanned_standing_checker_config (defaults in ftlx_global_eval_config):
const custom_unplanned_standing_config: unplanned_standing_checker_config = new
set custom_unplanned_standing_config.max_speed_threshold = 2kph
set custom_unplanned_standing_config.debounce_start_time = 1.0s
set custom_unplanned_standing_config.max_acceleration_threshold = 0.5mpsps
set custom_unplanned_standing_config.object_detection_range = 15m
set custom_unplanned_standing_config.issue_severity = error
set custom_unplanned_standing_config.enabled = true
extend ftlx_global_eval_config:
set ego_unplanned_standing_checker_config.max_speed_threshold = \
custom_unplanned_standing_config.max_speed_threshold
set ego_unplanned_standing_checker_config.debounce_start_time = \
custom_unplanned_standing_config.debounce_start_time
set ego_unplanned_standing_checker_config.issue_severity = \
custom_unplanned_standing_config.issue_severity
ftlx_global_eval_config.ego_unplanned_standing_checker_config.
The Ego's unplanned_standing_checker already binds config with keep(unplanned_standing_checker.unplanned_standing_checker_config == ...).
For a custom checker instance, use the same keep pattern with your config const.
201.5.4 Disabling the checker
To disable the checker, set the enabled flag to false in the ego_unplanned_standing_checker_config struct.
extend ftlx_global_eval_config:
set ego_unplanned_standing_checker_config.enabled = false
extend sut_vehicle.unplanned_standing_checker:
on @start:
override(unplanned_standing_checker, run_mode: freeze)
201.6 Additional information
Justification conditions
- Traffic Blocking: An object ahead within
object_detection_rangeis stopped or moving slower thanblocking_object_speed_threshold. - Pedestrians: A person is detected ahead near the path within
pedestrian_detection_range. - Control Devices: Presence of a stop sign, yield sign, or red light within
traffic_control_detection_range. - Intersections/Roundabouts: Vehicle is navigating or yielding at junctions or roundabouts within intersection_detection_range.
- Turn Indicators: Any turn signal state other than off is active.
When the vehicle stands still without any valid justification, an interval is triggered and an issue is reported.
Implementation notes:
- Object and pedestrian detection uses
vehicle.global_distance(object, closest_compound, closest_compound)to calculate distances, followed byvehicle.local_distance(object, closest_compound, closest_compound, lon)to determine if objects are ahead of the vehicle (positive local distance indicates ahead). - Intersection detection uses
map.get_route_elements_ahead_of_type(from_pos, intersection_detection_range, path, element_type)to query for internal roads and roundabout elements within the detection range. - Traffic control device detection uses
map.get_signals_on_route(vehicle.state.msp_pos.road_position, vehicle.planned_path, traffic_control_detection_range)to identify stop signs, yield signs, and traffic lights along the planned route.