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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
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_side_shift_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-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Kyoichi Sugahara
- Taiki Yamada
Authors
- Fumiya Watanabe
- Satoshi Ota
Side Shift design
(For remote control) Shift the path to left or right according to an external instruction.
Overview of the Side Shift Module Process
- Receive the required lateral offset input.
- Update the
requested_lateral_offset_under the following conditions: a. Verify if the last update time has elapsed. b. Ensure the required lateral offset value is different from the previous one. - Insert the shift points into the path if the side shift module’s status is not in the SHIFTING status.
Please be aware that requested_lateral_offset_ is continuously updated with the latest values and is not queued.
Statuses of the Side Shift
The side shift has three distinct statuses. Note that during the SHIFTING status, the path cannot be updated:
- BEFORE_SHIFT: Preparing for shift.
- SHIFTING: Currently in the process of shifting.
- AFTER_SHIFT: Shift completed.
Flowchart
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title callback function of lateral offset input
start
partition onLateralOffset {
:**INPUT** double new_lateral_offset;
if (abs(inserted_lateral_offset_ - new_lateral_offset) < 1e-4) then ( true)
stop
else ( false)
if (interval from last request is too short) then ( no)
else ( yes)
:requested_lateral_offset_ = new_lateral_offset \n lateral_offset_change_request_ = true;
endif
stop
@enduml
@startuml
skinparam monochrome true
skinparam defaultTextAlignment center
skinparam noteTextAlignment left
title path generation
start
partition plan {
if (lateral_offset_change_request_ == true \n && \n (shifting_status_ == BEFORE_SHIFT \n || \n shifting_status_ == AFTER_SHIFT)) then ( true)
partition replace-shift-line {
if ( shift line is inserted in the path ) then ( yes)
:erase left shift line;
else ( no)
endif
:calcShiftLines;
:add new shift lines;
:inserted_lateral_offset_ = requested_lateral_offset_ \n inserted_shift_lines_ = new_shift_line;
}
else( false)
endif
stop
@enduml
```plantuml @startuml skinparam monochrome true skinparam defaultTextAlignment center skinparam noteTextAlignment left
title update state
start partition updateState { :last_sp = path_shifter_.getLastShiftLine(); note left get furthest shift lines end note :calculate max_planned_shift_length; note left calculate furthest shift length of previous shifted path end note if (abs(inserted_lateral_offset_ - inserted_shift_line_.end_shift_length) < 1e-4 \n && \n abs(max_planned_shift_length) < 1e-4 \n && \n abs(requested_lateral_offset_) < 1e-4) then ( true) :current_state_ = BT::NodeStatus::SUCCESS; else (false) if (ego’s position is behind of shift line’s start point) then( yes)
File truncated at 100 lines see the full file
Changelog for package autoware_behavior_path_side_shift_module
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
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 ---------
-
Contributors: Mete Fatih Cırıt, Ryohsuke Mitsudome, Satoshi OTA
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(behavior_path_side_shift): add drivable area check to prevent lane departure (#12504)
- feat(behavior_path_side_shift): add drivable area check for lane departure in side shift module
- Add DrivableAreaCheckMode enum with DISABLED, CURRENT_LANE, ADJACENT_LANES options
- Implement calcOffsetLimitsFromLanelets() to compute safe lateral offset limits
- Clamp requested lateral offset to prevent exceeding lane boundaries
- Add configurable parameters for check mode and minimum margin
- fix(behavior_path_side_shift): fix mode2 lateral offset limit check
* fix(behavior_path_side_shift): prevent out-of-bounds at lane reduction intersections When [drivable_area_check_mode]{.title-ref} is set to [ADJACENT_LANES]{.title-ref} (mode 2), the vehicle could previously go out of lane boundaries at intersections where the number of lanes decreases. This commit fixes the issue by introducing the following changes:
- In [SideShiftModule::updateData()]{.title-ref}, continuously check and clamp [requested_lateral_offset_]{.title-ref} and [inserted_lateral_offset_]{.title-ref} using [calcMaxLateralOffset()]{.title-ref}. If the drivable boundary narrows, it triggers a [lateral_offset_change_request_]{.title-ref} to force path recalculation.
2. In [SideShiftModule::plan()]{.title-ref}, remove the state lock that prevented [replaceShiftLine()]{.title-ref} from executing during the [SHIFTING]{.title-ref} state. This allows the newly clamped safe offset to immediately update the path, even if the vehicle is currently executing a lateral shift.
* refactor(behavior_path_side_shift): simplify lateral offset clamping using std::clamp Update calcMaxLateralOffset to use C++17 std::clamp instead of a ternary operator with std::min and std::max.
- feat(behavior_path_side_shift): add comment for drivable_area_check_mode
- fix(behavior_path_side_shift): restore shift status check to prevent chattering
- refactor(behavior_path_side_shift): inline parameter reference for vehicle width
* fix(behavior_path_planner): add missing <utility> include for std::pair Fixes a cpplint 'build/include_what_you_use' error in scene.cpp.
* fix(behavior_path_side_shift): preserve requested offset when road widens Keep the original lateral offset request even when it is clamped by the current drivable area. Recompute the constrained offset every cycle and request a shift-line update when the available lane width changes, so the path can move farther toward the requested offset after the road widens.
* style(behavior_path_side_shift): apply clang-format ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
Contributors: Uta Kawakami, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_behavior_path_side_shift): stabilize side shift path (#12473)
- stabilize side shift path
* change comment ---------
File truncated at 100 lines see the full file