Skip to content

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:

  1. The vehicle's speed falls below the configured max_speed_threshold which indicates it is standing still or near-standstill.
  2. The vehicle's speed has been below the max_speed_threshold for a minimum duration debounce_start_time to avoid flagging cases where the vehicle has slowed down or stopped normally.
  3. The vehicle's longitudinal acceleration is below the configured max_acceleration_threshold to avoid flagging cases where the vehicle slowed or stopped but is already starting to accelerate again.
  4. None of the justification conditions are met.

201.0.2 End condition

The interval ends when any of the following conditions occur:

  1. The vehicle's speed exceeds the max_speed_threshold plus a configurable tolerance speed_threshold_tolerance.
  2. The vehicle's longitudinal acceleration exceeds the max_acceleration_threshold, indicating it is starting to move.
  3. 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
Apply the customized config globally:
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
Or set fields directly on 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
Or at runtime:
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_range is stopped or moving slower than blocking_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.
Figure 1: The vehicle standing justification conditions

When the vehicle stands still without any valid justification, an interval is triggered and an issue is reported.

Figure 2: Vehicle standing still without justification conditions

Implementation notes:

  • Object and pedestrian detection uses vehicle.global_distance(object, closest_compound, closest_compound) to calculate distances, followed by vehicle.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.