Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_planning_validator_intersection_collision_checker at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.47.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-08-16 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Satoshi Ota
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
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 intersection_collision_checker checks for collisions using pointcloud data and route information. It identifies target lanes at intersections and extracts pcd objects withing target lanes, and performs simplistic tracking and velocity estimation of pcd objects for each target lane. Times to arrival are computed for Ego and pcd objects, and the difference in the arrival time is used to judge if a collision is imminent.
Flowchart
The following diagram illustrates the overall flow of module implementation:
@startuml
start
#LightBlue:Update ego trajectory info;
#LightBlue:Update lanelet info;
if (Is turning right/left?) then (yes)
if (Is target lanelets available?) then (yes)
#LightBlue:Filter & transform objects pcd;
:Start checking target lanelets;
repeat
#LightBlue:Get nearest pcd object within target lane;
#LightBlue:Update tracking info of target lane object;
#LightBlue:Check collision status with target lane object;
#LightBlue:Update safety status if collision is detected;
repeat while (Finished checking all target lanes) is (FALSE)
if (Is collision detected?) then (yes)
if (Duration since last safe > on_time_buffer ?) then (yes)
#LightPink:Publish error diagnostic;
else (no)
#Yellow:Display warning;
endif
else (no)
if (Duration since last unsafe > off_time_buffer ?) then (yes)
#LightGreen:Safe;
else (no)
#LightPink:Publish error diagnostic;
endif
endif
else (no)
#Orange:Reset module data;
endif
else (no)
#Orange:Reset module data;
endif
stop
@enduml
Ego Trajectory
The intersection_collision_checker module utilizes the ego trajectory subscribed to by planning_validator node, it uses the resampled trajectory to avoid clustered trajectory points in low velocity areas. The for each trajectory point the time_from_start is computed with respect to the ego’s front pose and the ego’s back pose. This information is later used to estimate the ego’s entry and exit times for each target lanelet.
Target Lanelets
The module applies slightly different logic for acquiring target lanes for right and left turn intersections. In case of right turn intersection, the aim is to check all lanes crossing/overlapping with the egos intended trajectory. In case of left turn, the aim is check no vehicles are coming along the destination lane (lane ago turning into).
!!! warning
Target lane selection logic applies only for Left-hand traffic (LHT). The module should be improved to be driving side agnostic.
Right Turn
To get the target lanelets for right turn intersection:
- Use ego turn-direction lane to define search space (bounding box enclosing turn-direction lane).
- Get all lanelets withing bounding box as candidate lanelets
- Filter out following lanelets:
- 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)
- Lanelets that are
- remaining lanelets are then processed to:
- Compute overlap point between ego trajectory and target lanelet
- Compute ego’s time to arrive and leave overlap point
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 for left turn intersection:
- Use ego’s turn-direction lanelet(s) to get next lanelet “destination_lanelet” following the turn.
- 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
- remaining lanelets are then processed to:
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.47.0 (2025-08-11)
-
refactor(planning_validator): refactor planning validator configuration and error handling (#11081)
- refactor trajectory check error handling
- define set_diag_status function for each module locally
* update documentation ---------
-
style(pre-commit): update to clang-format-20 (#11088) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-
docs(intersection_collision_checker): update documentation (#11070)
- update implementation description in readme
- update parameters description in readme
* fix spelling mistakes ---------
-
fix(intersection_collision_checker): improve logic for objects near overlap (#11058)
- parameterize max history time
* improve logic for object near overlap point ---------
-
fix(intersection_collision_checker): use parameter instead of static constexpr (#11034) use parameter instead of static constexpr
-
feat(intersection_collision_checker): improve logic to address false negatives (#11030)
- revise and improve velocity estimation and tracking logic
- ensure consistent collision lane ids
* small refactoring ---------
-
feat(intersection_collision_checker): improve icc debug markers (#10967)
- add DebugData struct
- refactor and publish debug info and markers
- always publish lanelet debug markers
- refactor debug markers code
- remove unused functions
- pass string by reference
- set is_safe flag for rear_collision_checker debug data
- fix for cpp check
* add maintainer ---------
-
feat(intersection_collision_checker): improve target lane selection and velocity estimation to reduce false positives (#10928)
- reset velocity and track time for too high acceleration. apply max velocity threshold
- refine target lanes selection
- add package maintainers
* fix behavior for objects close to overlap ---------
-
feat(intersection_collision_checker): improve feature to reduce false positive occurrence (#10899)
- keep a map of already detected target lanelets
- fix on/off time buffers logic
- add debug marker to visualize colliding object
- use resampled trajectory instead of raw trajectory
- fix overlap index computation
- fix on/off time buffers logic for rear collision checker
- fix planning .pages file, fix format
- update readme
- ignore not moving pcd object
* handle case when object is very close to overlap point ---------
-
feat(planning_validator): improve intersection collision checker implementation (#10839)
- use parameter generator library
- add pointcloud latency compensation
- change msg field name
- add readme file
- add parameters dection to readme
- publish planning factor for intersection_collision_checker
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |