Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged behavior_path_lane_change_module at Robotics Stack Exchange
Package Summary
Tags | No category tags. |
Version | 0.1.0 |
License | Apache License 2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Description | |
Checkout URI | https://github.com/ieiauto/autodrrt.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2025-05-30 |
Dev Status | UNKNOWN |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Fumiya Watanabe
- Zulfaqar Azmi
- Kosuke Takeuchi
- Tomoya Kimura
- Shumpei Wakabayashi
- Tomohito Ando
Authors
Lane Change design
The Lane Change module is activated when lane change is needed and can be safely executed.
Lane Change Requirement
- During lane change request condition
- The ego-vehicle isn’t on a
preferred_lane
. - There is neither intersection nor crosswalk on the path of the lane change
- The ego-vehicle isn’t on a
- lane change ready condition
- Path of the lane change does not collide with other dynamic objects (see the figure below)
- Lane change candidate path is approved by an operator.
Generating Lane Change Candidate Path
The lane change candidate path is divided into two phases: preparation and lane-changing. The following figure illustrates each phase of the lane change candidate path.
Preparation phase
The preparation trajectory is the candidate path’s first and the straight portion generated along the ego vehicle’s current lane. The length of the preparation trajectory is computed as follows.
lane_change_prepare_distance = current_speed * lane_change_prepare_duration + 0.5 * deceleration * lane_change_prepare_duration^2
During the preparation phase, the turn signal will be activated when the remaining distance is equal to or less than lane_change_search_distance
.
Lane-changing phase
The lane-changing phase consist of the shifted path that moves ego from current lane to the target lane. Total distance of lane-changing phase is as follows. Note that during the lane changing phase, the ego vehicle travels at a constant speed.
lane_change_prepare_velocity = std::max(current_speed + deceleration * lane_change_prepare_duration, minimum_lane_changing_velocity)
lane_changing_distance = lane_change_prepare_velocity * lane_changing_duration
The backward_length_buffer_for_end_of_lane
is added to allow some window for any possible delay, such as control or mechanical delay during brake lag.
Multiple candidate path samples (longitudinal acceleration)
Lane change velocity is affected by the ego vehicle’s current velocity. High velocity requires longer preparation and lane changing distance. However we also need to plan lane changing trajectories in case ego vehicle slows down.
Computing candidate paths that assumes ego vehicle’s slows down is performed by substituting predetermined deceleration value into prepare_length
, prepare_velocity
and lane_changing_length
equation.
The predetermined longitudinal acceleration values are a set of value that starts from longitudinal_acceleration = maximum_longitudinal_acceleration
, and decrease by longitudinal_acceleration_resolution
until it reaches longitudinal_acceleration = -maximum_longitudinal_deceleration
. Both maximum_longitudinal_acceleration
and maximum_longitudinal_deceleration
are calculated as: defined in the common.param
file as normal.min_acc
.
maximum_longitudinal_acceleration = min(common_param.max_acc, lane_change_param.max_acc)
maximum_longitudinal_deceleration = max(common_param.min_acc, lane_change_param.min_acc)
where common_param
is vehicle common parameter, which defines vehicle common maximum longitudinal acceleration and deceleration. Whereas, lane_change_param
has maximum longitudinal acceleration and deceleration for the lane change module. For example, if a user set and common_param.max_acc=1.0
and lane_change_param.max_acc=0.0
, maximum_longitudinal_acceleration
becomes 0.0
, and the lane change does not accelerate in the lane change phase.
The longitudinal_acceleration_resolution
is determine by the following
longitudinal_acceleration_resolution = (maximum_longitudinal_acceleration - minimum_longitudinal_acceleration) / longitudinal_acceleration_sampling_num
Note that when the current_velocity
is lower than minimum_lane_changing_velocity
, the vehicle needs to accelerate its velocity to minimum_lane_changing_velocity
. Therefore, longitudinal acceleration becomes positive value (not decelerate).
The following figure illustrates when longitudinal_acceleration_sampling_num = 4
. Assuming that maximum_deceleration = 1.0
then a0 == 0.0 == no deceleration
, a1 == 0.25
, a2 == 0.5
, a3 == 0.75
and a4 == 1.0 == maximum_deceleration
. a0
is the expected lane change trajectories should ego vehicle do not decelerate, and a1
’s path is the expected lane change trajectories should ego vehicle decelerate at 0.25 m/s^2
.
Which path will be chosen will depend on validity and collision check.
Multiple candidate path samples (lateral acceleration)
In addition to sampling longitudinal acceleration, we also sample lane change paths by adjusting the value of lateral acceleration. Since lateral acceleration influences the duration of a lane change, a lower lateral acceleration value results in a longer lane change path, while a higher lateral acceleration value leads to a shorter lane change path. This allows the lane change module to generate a shorter lane change path by increasing the lateral acceleration when there is limited space for the lane change.
The maximum and minimum lateral accelerations are defined in the lane change parameter file as a map. The range of lateral acceleration is determined for each velocity by linearly interpolating the values in the map. Let’s assume we have the following map
Ego Velocity | Minimum lateral acceleration | Maximum lateral acceleration |
---|---|---|
0.0 | 0.2 | 0.3 |
2.0 | 0.2 | 0.4 |
4.0 | 0.3 | 0.4 |
6.0 | 0.3 | 0.5 |
In this case, when the current velocity of the ego vehicle is 3.0, the minimum and maximum lateral accelerations are 0.25 and 0.4 respectively. These values are obtained by linearly interpolating the second and third rows of the map, which provide the minimum and maximum lateral acceleration values.
Within this range, we sample the lateral acceleration for the ego vehicle. Similar to the method used for sampling longitudinal acceleration, the resolution of lateral acceleration (lateral_acceleration_resolution) is determined by the following:
lateral_acceleration_resolution = (maximum_lateral_acceleration - minimum_lateral_acceleration) / lateral_acceleration_sampling_num
Candidate Path’s validity check
A candidate path is valid if the total lane change distance is less than
- distance to the end of current lane
- distance to the next intersection
- distance from current pose to the goal.
- distance to the crosswalk.
The goal must also be in the list of the preferred lane.
File truncated at 100 lines see the full file