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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged autoware_behavior_path_lane_change_module 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
- Zulfaqar Azmi
- Alqudah Mohammad
- Maxime Clement
Authors
- Fumiya Watanabe
- Satoshi Ota
Lane Change design
The Lane Change module is activated when lane change is needed (Ego is not on preferred lane), and activation requirements are satisfied.
Lane Change Requirements
Prerequisites
The type of lane boundary in the HD map has to be one of the following:
- Dashed lane marking: Lane changes are permitted in both directions.
- Dashed marking on the left and solid on the right: Lane changes are allowed from left to right.
- Dashed marking on the right and solid on the left: Lane changes are allowed from right to left.
-
allow_lane_changetags is set astrue
Activation Conditions
The lane change module will activate under the following conditions :
- The ego-vehicle is NOT on a
preferred_lane. - Distance to start of
target_laneis less thanmaximum_prepare_length - The ego-vehicle is NOT close to a regulatory element:
- Distance to next regulatory element is greater than
maximum_prepare_length. - Considers distance to traffic light. (If param
regulation.traffic_lightis enabled) - Considers distance to crosswalk. (If param
regulation.crosswalkis enabled) - Considers distance to intersection. (If param
regulation.intersectionis enabled)
- Distance to next regulatory element is greater than
!!! warning
If ego vehicle is stuck, lane change will be enabled near crosswalk/intersection. Ego is considered stuck if it stops more than `stuck_detection.stop_time`. Ego is considered to be stopping if its velocity is smaller than `stuck_detection.velocity`.
The following figure illustrates the logic for checking if lane change is required:
@startuml
skinparam defaultTextAlignment center
skinparam backgroundColor #WHITE
start
if (Is data available AND lanes available) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to target lane start;
if (Is dist to target lane start < max prepare dist) then (no)
#LightPink:False;
stop
else (yes)
endif
:Get distance to next regulatory element;
if (Is dist to next regulatory element < max prepare dist) then (yes)
#LightPink:False;
stop
else (no)
end if
#LightGreen:True;
stop
@enduml
Ready Conditions
- Valid lane change path is found.
- Lane change path is safe; does not collide with other dynamic objects.
- Lane change candidate path is approved by an operator.
Implementation
Lane change module uses a sampling based approach for generating a valid and safe lane changing trajectory. The process for generating the trajectory includes object filtering, metrics sampling, candidate paths generation, and lastly candidate paths evaluation. Additionally the lane change module is responsible for turn signal activation when appropriate, and inserting a stop point when necessary.
Global Flowchart
The following diagram, illustrates the overall flow of the lane change module implementation.
```plantuml @startuml
start
#LightBlue:Update lane change data; #LightBlue:Filter detected objects; if (Is lane change required?) then (yes) #LightBlue:Activate turn signal; #LightBlue:Generate metrics samples; if (Is valid metrics available) then (yes) While (Can generate new candidate path?) is (TRUE) if (Candidate path is valid & safe?) then (yes) #LightBlue:Generate drivable area; #LightBlue:Execute lane change path; while (Can module transit to success state?) is (False) if (Can module trasit to failure state?) then (yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_lane_change_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
chore: update planning param.yaml comments (#13061) update planning param.yaml comments
-
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 ---------
-
feat(lane_change): add overhang_tolerance param for stop point planning (#13079)
-
Contributors: Mehmet Emin BAŞOĞLU, Mete Fatih Cırıt, Ryohsuke Mitsudome, Taeseung Sohn
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(lane_change): recreate lane change path if deviation is high (#12280)
- feat(lane_change): recreate lane change path if deviation is high
- fix: clang-tidy
- fix: update all params
- feat: empty check
* feat: use directly lateral thresholds instead of scaling them ---------
-
fix(planning): a typo in behavior_path_planner config yaml file (#12251) Fix a typo in config yaml file that causes unit test failure on ARM64 environment.
-
feat(lanelet2_extension): replace ported lanelet2_extension utilities functions (final) (#12173) Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in lane_change/goal_planner (#12080) refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in lane_change/goal_planner
-
feat(autoware_lanelet2_extension): replace remaining lanelet2_extension utilities functions - bpp packages (#12085)
- replace getArcCoordinates in bpp packages
- replace getArcCoordinates usage in bpp packages (2)
* replace getArcCoordinates in bpp package (3) (autoware_behavior_path_goal_planner_module)
* replace getArcCoordinates in bpp package(4) (autoware_behavior_path_start_planner_module)
- replace getLateralDistanceToClosestLanelet in bpp package
- replace getExpandedLanelet(s) in bpp package
- replace combineLaneletsShape in bpp packages
- fix wrong condition in bpp
- style(pre-commit): autofix
- remove directly dereference opt for combine_lanelet
- remove log if lanelet is empty
- bind reference to optional value for combine_lanelets_shape
- remove log and simply return outside else in get_dirty_expanded_lanelets opt
* remove .has_value in lane_change_module for consistency ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Co-authored-by: Mamoru Sobue <<hilo.soblin@gmail.com>>
-
refactor(planning): replace toGeomMsg/toLaneletPoint to autoware_lanelet2_utils in bpp_common (#12091)
- refactor(behavior_path_planner): deprecate toLaneletPoint/toGeomPt in bpp_common package
* fix
-
chore: organize maintainer (#12123)
File truncated at 100 lines see the full file