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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
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.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-07-31 |
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.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
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Name |
---|
libboost-dev |