Skip to content

Commit 0dffebe

Browse files
avoid from having delay lane change work for extended lane
Signed-off-by: Muhammad Zulfaqar Azmi <zulfaqar.azmi@tier4.jp>
1 parent 060c656 commit 0dffebe

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/data_structs.hpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,17 @@ struct LanesObjects
222222
Object current_lane{};
223223
Object target_lane_leading{};
224224
Object target_lane_trailing{};
225+
Object extended_target_lane{};
225226
Object other_lane{};
226227

227228
LanesObjects() = default;
228229
LanesObjects(
229-
Object current_lane, Object target_lane_leading, Object target_lane_trailing, Object other_lane)
230+
Object current_lane, Object target_lane_leading, Object target_lane_trailing,
231+
Object extended_target_lane, Object other_lane)
230232
: current_lane(std::move(current_lane)),
231233
target_lane_leading(std::move(target_lane_leading)),
232234
target_lane_trailing(std::move(target_lane_trailing)),
235+
extended_target_lane(std::move(extended_target_lane)),
233236
other_lane(std::move(other_lane))
234237
{
235238
}

planning/behavior_path_lane_change_module/src/scene.cpp

+18-5
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,9 @@ lane_change::TargetObjects NormalLaneChange::getTargetObjects(
986986
const lanelet::ConstLanelets & current_lanes) const
987987
{
988988
ExtendedPredictedObjects leading_objects = filtered_objects.target_lane_leading;
989+
leading_objects.insert(
990+
leading_objects.end(), filtered_objects.extended_target_lane.begin(),
991+
filtered_objects.extended_target_lane.end());
989992
const auto is_stuck = isVehicleStuck(current_lanes);
990993
const auto chk_obj_in_curr_lanes = lane_change_parameters_->check_objects_on_current_lanes;
991994
if (chk_obj_in_curr_lanes || is_stuck) {
@@ -1083,6 +1086,15 @@ FilteredByLanesExtendedObjects NormalLaneChange::filterObjects() const
10831086
extended_target_lane_trailing_objects.push_back(extended_predicted_object);
10841087
});
10851088

1089+
ExtendedPredictedObjects extended_target_lane_objects;
1090+
std::for_each(
1091+
filtered_by_lanes_objects.extended_target_lane.begin(),
1092+
filtered_by_lanes_objects.extended_target_lane.end(), [&](const auto & object) {
1093+
auto extended_predicted_object = utils::lane_change::transform(
1094+
object, common_parameters, *lane_change_parameters_, is_check_prepare_phase);
1095+
extended_target_lane_objects.push_back(extended_predicted_object);
1096+
});
1097+
10861098
ExtendedPredictedObjects extended_current_lane_objects;
10871099
std::for_each(
10881100
filtered_by_lanes_objects.current_lane.begin(), filtered_by_lanes_objects.current_lane.end(),
@@ -1103,7 +1115,8 @@ FilteredByLanesExtendedObjects NormalLaneChange::filterObjects() const
11031115

11041116
FilteredByLanesExtendedObjects lane_change_target_objects(
11051117
extended_current_lane_objects, extended_target_lane_leading_objects,
1106-
extended_target_lane_trailing_objects, extended_other_lane_objects);
1118+
extended_target_lane_trailing_objects, extended_target_lane_objects,
1119+
extended_other_lane_objects);
11071120
lane_change_debug_.filtered_objects = lane_change_target_objects;
11081121
return lane_change_target_objects;
11091122
}
@@ -1140,6 +1153,7 @@ FilteredByLanesObjects NormalLaneChange::filterObjectsByLanelets(
11401153
{
11411154
std::vector<PredictedObject> target_lane_leading_objects;
11421155
std::vector<PredictedObject> target_lane_trailing_objects;
1156+
std::vector<PredictedObject> extended_target_lane_objects;
11431157
std::vector<PredictedObject> current_lane_objects;
11441158
std::vector<PredictedObject> other_lane_objects;
11451159

@@ -1178,6 +1192,7 @@ FilteredByLanesObjects NormalLaneChange::filterObjectsByLanelets(
11781192
current_lane_objects.reserve(reserve_size);
11791193
target_lane_leading_objects.reserve(reserve_size);
11801194
target_lane_trailing_objects.reserve(reserve_size);
1195+
extended_target_lane_objects.reserve(reserve_size);
11811196
other_lane_objects.reserve(reserve_size);
11821197

11831198
for (const auto & object : objects.objects) {
@@ -1212,9 +1227,7 @@ FilteredByLanesObjects NormalLaneChange::filterObjectsByLanelets(
12121227
utils::lane_change::is_ahead_of_ego(common_data_ptr_, current_lanes_ref_path, object);
12131228
if (object.kinematics.initial_twist_with_covariance.twist.linear.x < 1.0) {
12141229
if (ahead_of_ego) {
1215-
target_lane_leading_objects.push_back(object);
1216-
} else {
1217-
target_lane_trailing_objects.push_back(object);
1230+
extended_target_lane_objects.push_back(object);
12181231
}
12191232
continue;
12201233
}
@@ -1246,7 +1259,7 @@ FilteredByLanesObjects NormalLaneChange::filterObjectsByLanelets(
12461259

12471260
return {
12481261
current_lane_objects, target_lane_leading_objects, target_lane_trailing_objects,
1249-
other_lane_objects};
1262+
extended_target_lane_objects, other_lane_objects};
12501263
}
12511264

12521265
PathWithLaneId NormalLaneChange::getTargetSegment(

planning/behavior_path_lane_change_module/src/utils/markers.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ MarkerArray showFilteredObjects(
110110
auto target_leading_marker = marker_utils::showFilteredObjects(
111111
filtered_objects.target_lane_leading, ns, colors::aqua(), update_id);
112112
update_id += static_cast<int32_t>(target_leading_marker.markers.size());
113+
auto extended_target_marker = marker_utils::showFilteredObjects(
114+
filtered_objects.extended_target_lane, ns, colors::aqua(), update_id);
115+
update_id += static_cast<int32_t>(extended_target_marker.markers.size());
113116
auto target_trailing_marker = marker_utils::showFilteredObjects(
114117
filtered_objects.target_lane_trailing, ns, colors::blue(), update_id);
115118
update_id += static_cast<int32_t>(target_trailing_marker.markers.size());
@@ -128,6 +131,9 @@ MarkerArray showFilteredObjects(
128131
target_trailing_marker.markers.begin(), target_trailing_marker.markers.end(),
129132
std::back_inserter(marker_array.markers));
130133

134+
std::move(
135+
extended_target_marker.markers.begin(), extended_target_marker.markers.end(),
136+
std::back_inserter(marker_array.markers));
131137
std::move(
132138
other_marker.markers.begin(), other_marker.markers.end(),
133139
std::back_inserter(marker_array.markers));

0 commit comments

Comments
 (0)