Package Summary
Tags | No category tags. |
Version | 0.46.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-06-30 |
Dev Status | UNKNOWN |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
Authors
- Alqudah Mohammad
Intersection Collision Checker
The intersection_collision_checker
is a plugin module of autoware_planning_validator
node. It is responsible for validating the planning trajectory at intersections by verifying that it does NOT lead to a collision with other road vehicles.
The check is executed only when:
- Ego is approaching a
turn_direction
lane - Ego trajectory intersects with lanes other than
route_lanelets
Inner workings
The following steps describe the general approach taken to check for collisions at intersections:
- Compute ego trajectory lanelets and turning direction
- Compute target lanelets to check
- For each target lanelet set the
point_of_overlap
(i.e where ego trajectory intersects the lanelet), and compute ego’s time to reach it. - Filter obstacle pointclouds to remove unwanted points
- For each target lanelet:
- process pointcloud points within lanelet and measure distance to
point_of_overlap
- estimate object velocity based on changes in distance measurements
- estimate object’s time to reach
point_of_overlap
- compare object’s and ego’s time to reach to determine if there is a risk of collision.
- process pointcloud points within lanelet and measure distance to
If it’s determined that there is a risk of collision, a diagnostic is published to trigger an emergency stop by the MRM Handler.
Target Lanelet Selection
Right turn
To get the target lanelets, we first find all lanelets intersecting with ego trajectory. Then we filter out:
- Lanelets that are
route_lanelets
- Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have
turn_direction
attribute and are notSTRAIGHT
. (If parameterright_turn.check_turning_lanes
is FALSE) - Lanelets that are determined to be crossing lanes. (If parameter
right_turn.check_crossing_lanes
is FALSE)
Target lanelets are then expanded, if necessary, up to detection_range
The image below shows the target lanelets at a right turn intersection. (right_turn.check_turning_lanes
set to FALSE)
Left turn
To get the target lanelets in case of a left turn:
- First we find the
turn_direction
lanelet from the Ego trajectory lanelets - Then we find the next lanelet “destination_lanelet” following the
turn_direction
lanelet - We then get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have
turn_direction
attribute and are notSTRAIGHT
. (If parameterleft_turn.check_turning_lanes
is FALSE)
- Lanelets that are
Target lanelets are then expanded, if necessary, up to detection_range
The image below shows the target lanelets at a left turn intersection. (left.check_turning_lanes
set to TRUE)
Parameters
Name | Unit | Type | Description | Default value |
---|---|---|---|---|
enable |
[-] | bool | Flag to enable/disable the check globally | true |
detection_range |
[m] | double | Range of detection from ego position, pointcloud points beyond this range are filtered out | 50.0 |
ttc_threshold |
[s] | double | Threshold value for the difference between ego and object reach times to trigger and a stop | 1.0 |
ego_deceleration |
[m/ss] | double | Ego deceleration relate used to estimate ego stopping time | 1.0 |
min_time_horizon |
[s] | double | Minimum time horizon to check ahead along ego trajectory | 10.0 |
timeout |
[s] | double | Duration to keep stop decision after collision is no longer detected | 1.0 |
Lanelet Selection Flags
Name | Unit | Type | Description | Default value |
---|---|---|---|---|
right_turn.enable |
[-] | bool | Flag to enable/disable the check at right turns | true |
right_turn.check_crossing_lanes |
[-] | bool | Flag to enable/disable checking crossing lanes | true |
right_turn.check_turn_lanes |
[-] | bool | Flag to enable/disable checking turning lanes | true |
right_turn.crossing_lane_angle_th |
[rad] | double | Angle threshold for determining crossing lanes | 0.785398 |
left_turn.enable |
[-] | bool | Flag to enable/disable the check at left turns | true |
left_turn.check_turn_lanes |
[-] | bool | Flag to enable/disable checking turning lanes | true |
Pointcloud Parameters
Name | Unit | Type | Description | Default value |
---|---|---|---|---|
pointcloud.height_buffer |
[m] | double | Height offset to add above ego vehicle height when filtering pointcloud points | true |
pointcloud.min_height |
[m] | double | Minimum height threshold for filtering pointcloud points | 50.0 |
pointcloud.voxel_grid_filter.x |
[m] | double | x value for voxel leaf size | 1.0 |
pointcloud.voxel_grid_filter.y |
[m] | double | y value for voxel leaf size | 1.0 |
pointcloud.voxel_grid_filter.z |
[m] | double | z value for voxel leaf size | 10.0 |
pointcloud.clustering.tolerance |
[m] | double | Distance tolerance between two points in a cluster | 1.0 |
pointcloud.clustering.min_height |
[m] | double | Minimum height of a cluster to be considered as a target | 1.0 |
pointcloud.clustering.min_size |
[-] | double | Minimum number of points in a cluster to be considered as a target | 1.0 |
pointcloud.clustering.max_size |
[-] | double | Maximum number of points in a cluster to be considered as a target | 1.0 |
pointcloud.observation_time |
[s] | double | Minimum detection time for a pointcloud object to be considered reliable | 1.0 |
pointcloud.latency |
[s] | double | Time delay used to compensate for latency in pointcloud data | 1.0 |
Changelog for package autoware_planning_validator_intersection_collision_checker
0.46.0 (2025-06-20)
- Merge remote-tracking branch 'upstream/main' into tmp/TaikiYamada/bump_version_base
- feat(planning_validator): implement redundant collision prevention
feature when ego makes a turn at intersection
(#10750)
- create planning latency validator plugin module
* Revert "chore(sync-files.yaml): not synchronize [github-release.yaml]{.title-ref} (#1776)" This reverts commit 871a8540ade845c7c9a193029d407b411a4d685b.
- create planning trajectory validator plugin module
* Update planning/planning_validator/autoware_planning_validator/src/manager.cpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> * Update planning/planning_validator/autoware_planning_validator/include/autoware/planning_validator/node.hpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>>
- minor fix
- refactor implementation
- uncomment lines for adding pose markers
- fix CMakeLists
- add comment
- update planning launch xml
* Update planning/planning_validator/autoware_planning_latency_validator/include/autoware/planning_latency_validator/latency_validator.hpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> * Update planning/planning_validator/autoware_planning_validator/include/autoware/planning_validator/plugin_interface.hpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> * Update planning/planning_validator/autoware_planning_validator/include/autoware/planning_validator/types.hpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> * Update planning/planning_validator/autoware_planning_validator/src/node.cpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>> * Update planning/planning_validator/autoware_planning_latency_validator/src/latency_validator.cpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>>
- apply pre-commit checks
- rename plugins for consistency
- rename directories and files to match package names
- refactor planning validator tests
- add packages maintainer
- separate trajectory check parameters
- add missing package dependencies
- move trajectory diagnostics test to trajectory checker module
- remove blank line
- add new planning validator plugin collision_checker
- add launch args for validator modules
- logic for setting route handler
- add poincloud filtering function
- check for turn direction lane
- compute target lanelets for collision check
- fix format
- refactor lanelets filtering
- update launch files
- move lanelet selection functions to utils file
- check for collisions
- check observation time of tracked object
- add more config params, fix pcd object function
- extend target lanes
- add off timeout after collision is detected
- define const value
- improve overlap time estimation
* Update planning/planning_validator/autoware_planning_validator_collision_checker/src/collision_checker.cpp Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>>
- rename planning_validator collision_checker module
- move pointcloud filtering to just before collision check
- use proper name for module param
- fix logic for extending target lanelets
* change logging level ---------Co-authored-by: GitHub Action <<action@github.com>> Co-authored-by: Satoshi OTA <<44889564+satoshi-ota@users.noreply.github.com>>
- Contributors: TaikiYamada4, mkquda
Wiki Tutorials
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |