Package Summary
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
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
| Version | 0.53.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 | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Alqudah Mohammad
- Maxime Clement
- Kyoichi Sugahara
Authors
- Alqudah Mohammad
- Satoshi Ota
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_directionlane - 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 a right-turn intersection:
- Use ego’s turn-direction lane to define the search space (bounding box enclosing the turn-direction lane).
- Get all lanelets within the bounding box as candidate lanelets.
- Filter out the following lanelets:
- Lanelets that are
route_lanelets - Lanelets with a “time to reach” exceeding the time horizon
- Lanelets that have the
turn_directionattribute and are notSTRAIGHT(if parameterright_turn.check_turn_lanesis FALSE) - Lanelets that are determined to be crossing lanes (if parameter
right_turn.check_crossing_lanesis FALSE) - Lanelets that are excluded based on traffic signal context (if parameter
right_turn.check_traffic_signalis TRUE and the right-turn arrow signal is active)
- Lanelets that are
- Remaining lanelets are then processed to:
- Compute the overlap point between the ego trajectory and the target lanelet
- Compute ego’s time to arrive and leave the overlap point
The image below shows the target lanelets at a right-turn intersection. (right_turn.check_turn_lanes set to FALSE)

Left Turn
To get the target lanelets for a left-turn intersection:
- Use ego’s turn-direction lanelet(s) to get the next lanelet, the “destination_lanelet,” following the turn.
- Get all lanelets preceding the “destination_lanelet” and filter out:
- Lanelets that are
route_lanelets
- Lanelets that are
File truncated at 100 lines see the full file
Changelog for package autoware_planning_validator_intersection_collision_checker
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(planning_validator): apply [agnocast_wrapper::Node]{.title-ref} to [planning_validator]{.title-ref} (#12964)
- apply agnocast_wrapper::node
- style(pre-commit): autofix
* fix(autoware_planning_validator): feed stop checker per odometry message Restore the original VehicleStopChecker behavior: subscribe to /localization/kinematic_state and call addTwist() on every odometry message, instead of feeding the latest polled odometry once per trajectory cycle.
- refactor(autoware_planning_validator): drop odometry subscriber comment
- refactor(planning_validator): migrate to polling:: API
- fix(planning_validator): adopt PlanningFactorInterfaceT<Node>
- fix(autoware_planning_validator): launch as a standalone node and fix the agnocast build wiring
- fix(autoware_planning_validator): pass the underlying rclcpp node to the planning test manager
- style(pre-commit): autofix
* refactor(autoware_planning_validator): declare the utils packages it includes and drop the stale comment ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: kobayu858 <<yutaro.kobayashi.2@tier4.jp>>
-
chore(planning): update package maintainers (#13186)
-
chore(pre-commit): update clang-format to v22.1.5 (#13126)
- chore(pre-commit): update clang-format to v22.1.5
* style(pre-commit): autofix ---------
-
fix(pre-commit): update pre-commit-hooks-ros to v0.10.3 and adapt include guards (#13083)
- chore: sync files
* fix(pre-commit): adapt include guards to pre-commit-hooks-ros v0.10.3 ros-include-guard v0.10.3 only recognises an include guard when #endif is the last non-empty line of the file, so that feature test macros are no longer mistaken for guards. 29 headers failed that check. 25 headers wrap the guard in "// clang-format off" / "// clang-format on" because the #endif comment plus its // NOLINT exceeds the 100 column limit. Drop only the trailing "on" marker; the "off" marker then runs to end of file and still protects the line from being wrapped. 3 CUDA headers ended with "/* INDENT-ON /". Move it above the #endif so it stays paired with the "/ INDENT-OFF */" near the top of the file. autoware_behavior_path_planner/test/input.hpp closed its guard immediately after opening it, leaving the entire body unguarded. Move the #endif to the end. Also hold clang-format at v21.1.8. clang-format 22 migrates "AlignAfterOpenBracket: AlwaysBreak" to "BreakAfterOpenBracketIf: true", which forces a break after every "if (" whose condition does not fit on one line and reformats 88 files. ---------Co-authored-by: github-actions <<github-actions@github.com>> Co-authored-by: Mete Fatih Cırıt <<mfc@autoware.org>>
-
Contributors: Koichi Imai, Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA, awf-autoware-bot[bot]
0.52.0 (2026-06-30)
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_traffic_light_utils): rewrite hasTrafficLightCircleColor and hasTrafficLightShape into three functions to handle overseas color arrow traffic light (#12481)
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- feat(autoware_traffic_light_utils): merge hasTrafficLightCirleColor and hasTrafficLightShape into a general function hasTrafficLightShapeColor to handle oversea color arrow traffic light
- fix: modify default parameter for hasTrafficLightShapeColor
- fix: separate hasTrafficLightShapeColor into three functions
* chore(miscs): remove unused lanelet2 extension header
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |