Skip to content

Commit fd62280

Browse files
committed
fix(bpp): overwrite turn signal by latter module
Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent 59f7031 commit fd62280

File tree

6 files changed

+37
-6
lines changed

6 files changed

+37
-6
lines changed

planning/behavior_path_avoidance_module/src/scene.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -942,7 +942,7 @@ BehaviorModuleOutput AvoidanceModule::plan()
942942
linear_shift_path, path_shifter_.getShiftLines().front(), helper_->getEgoShift(), avoid_data_,
943943
planner_data_);
944944
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(spline_shift_path.path.points);
945-
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
945+
output.turn_signal_info = planner_data_->turn_signal_decider.overwrite_turn_signal(
946946
spline_shift_path.path, getEgoPose(), current_seg_idx, original_signal, new_signal,
947947
planner_data_->parameters.ego_nearest_dist_threshold,
948948
planner_data_->parameters.ego_nearest_yaw_threshold);

planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,7 @@ void GoalPlannerModule::setTurnSignalInfo(BehaviorModuleOutput & output) const
971971
const auto original_signal = getPreviousModuleOutput().turn_signal_info;
972972
const auto new_signal = calcTurnSignalInfo();
973973
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(output.path.points);
974-
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
974+
output.turn_signal_info = planner_data_->turn_signal_decider.overwrite_turn_signal(
975975
output.path, getEgoPose(), current_seg_idx, original_signal, new_signal,
976976
planner_data_->parameters.ego_nearest_dist_threshold,
977977
planner_data_->parameters.ego_nearest_yaw_threshold);

planning/behavior_path_lane_change_module/src/interface.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ TurnSignalInfo LaneChangeInterface::getCurrentTurnSignalInfo(
446446
}
447447

448448
// check the priority of turn signals
449-
return module_type_->getTurnSignalDecider().use_prior_turn_signal(
449+
return module_type_->getTurnSignalDecider().overwrite_turn_signal(
450450
path, current_pose, current_nearest_seg_idx, original_turn_signal_info,
451451
current_turn_signal_info, nearest_dist_threshold, nearest_yaw_threshold);
452452
}

planning/behavior_path_lane_change_module/src/scene.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ BehaviorModuleOutput NormalLaneChange::getTerminalLaneChangePath() const
148148
output.turn_signal_info = prev_turn_signal_info_;
149149
extendOutputDrivableArea(output);
150150
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(output.path.points);
151-
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
151+
output.turn_signal_info = planner_data_->turn_signal_decider.overwrite_turn_signal(
152152
output.path, getEgoPose(), current_seg_idx, prev_turn_signal_info_, output.turn_signal_info,
153153
planner_data_->parameters.ego_nearest_dist_threshold,
154154
planner_data_->parameters.ego_nearest_yaw_threshold);
@@ -183,7 +183,7 @@ BehaviorModuleOutput NormalLaneChange::getTerminalLaneChangePath() const
183183
extendOutputDrivableArea(output);
184184

185185
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(output.path.points);
186-
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
186+
output.turn_signal_info = planner_data_->turn_signal_decider.overwrite_turn_signal(
187187
output.path, getEgoPose(), current_seg_idx, prev_turn_signal_info_, output.turn_signal_info,
188188
planner_data_->parameters.ego_nearest_dist_threshold,
189189
planner_data_->parameters.ego_nearest_yaw_threshold);
@@ -226,7 +226,7 @@ BehaviorModuleOutput NormalLaneChange::generateOutput()
226226
extendOutputDrivableArea(output);
227227

228228
const auto current_seg_idx = planner_data_->findEgoSegmentIndex(output.path.points);
229-
output.turn_signal_info = planner_data_->turn_signal_decider.use_prior_turn_signal(
229+
output.turn_signal_info = planner_data_->turn_signal_decider.overwrite_turn_signal(
230230
output.path, getEgoPose(), current_seg_idx, prev_turn_signal_info_, output.turn_signal_info,
231231
planner_data_->parameters.ego_nearest_dist_threshold,
232232
planner_data_->parameters.ego_nearest_yaw_threshold);

planning/behavior_path_planner_common/include/behavior_path_planner_common/turn_signal_decider.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ class TurnSignalDecider
8282
const TurnSignalInfo & intersection_signal_info, const TurnSignalInfo & behavior_signal_info,
8383
const double nearest_dist_threshold, const double nearest_yaw_threshold);
8484

85+
TurnSignalInfo overwrite_turn_signal(
86+
const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
87+
const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,
88+
const double nearest_dist_threshold, const double nearest_yaw_threshold);
89+
8590
TurnSignalInfo use_prior_turn_signal(
8691
const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
8792
const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,

planning/behavior_path_planner_common/src/turn_signal_decider.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,32 @@ TurnIndicatorsCommand TurnSignalDecider::resolve_turn_signal(
392392
return intersection_signal_info.turn_signal;
393393
}
394394

395+
TurnSignalInfo TurnSignalDecider::overwrite_turn_signal(
396+
const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
397+
const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,
398+
const double nearest_dist_threshold, const double nearest_yaw_threshold)
399+
{
400+
const auto get_distance = [&](const Pose & input_point) {
401+
const size_t nearest_seg_idx = motion_utils::findFirstNearestSegmentIndexWithSoftConstraints(
402+
path.points, input_point, nearest_dist_threshold, nearest_yaw_threshold);
403+
return motion_utils::calcSignedArcLength(
404+
path.points, current_pose.position, current_seg_idx, input_point.position, nearest_seg_idx);
405+
};
406+
407+
const auto & new_desired_start_point = new_signal.desired_start_point;
408+
const auto & new_required_start_point = new_signal.required_start_point;
409+
410+
const double dist_to_new_desired_start = get_distance(new_desired_start_point) - base_link2front_;
411+
const double dist_to_new_required_start =
412+
get_distance(new_required_start_point) - base_link2front_;
413+
414+
if (dist_to_new_desired_start > 0.0 && dist_to_new_required_start > 0.0) {
415+
return original_signal;
416+
}
417+
418+
return new_signal;
419+
}
420+
395421
TurnSignalInfo TurnSignalDecider::use_prior_turn_signal(
396422
const PathWithLaneId & path, const Pose & current_pose, const size_t current_seg_idx,
397423
const TurnSignalInfo & original_signal, const TurnSignalInfo & new_signal,

0 commit comments

Comments
 (0)