Skip to content

Commit 1ea45e6

Browse files
authored
refactor(lane_change): revert "remove std::optional from lanes polygon" (#9272)
Revert "refactor(lane_change): remove std::optional from lanes polygon (#9267)" This reverts commit 0c70ea8.
1 parent fecc9f0 commit 1ea45e6

File tree

4 files changed

+30
-29
lines changed

4 files changed

+30
-29
lines changed

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,9 @@ struct PathSafetyStatus
311311

312312
struct LanesPolygon
313313
{
314-
lanelet::BasicPolygon2d current;
315-
lanelet::BasicPolygon2d target;
316-
lanelet::BasicPolygon2d expanded_target;
314+
std::optional<lanelet::BasicPolygon2d> current;
315+
std::optional<lanelet::BasicPolygon2d> target;
316+
std::optional<lanelet::BasicPolygon2d> expanded_target;
317317
lanelet::BasicPolygon2d target_neighbor;
318318
std::vector<lanelet::BasicPolygon2d> preceding_target;
319319
};

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,16 @@ std::optional<size_t> getLeadingStaticObjectIdx(
140140
const std::vector<ExtendedPredictedObject> & objects,
141141
const double object_check_min_road_shoulder_width, const double object_shiftable_ratio_threshold);
142142

143-
lanelet::BasicPolygon2d create_polygon(
143+
std::optional<lanelet::BasicPolygon2d> createPolygon(
144144
const lanelet::ConstLanelets & lanes, const double start_dist, const double end_dist);
145145

146146
ExtendedPredictedObject transform(
147147
const PredictedObject & object, const BehaviorPathPlannerParameters & common_parameters,
148148
const LaneChangeParameters & lane_change_parameters, const bool check_at_prepare_phase);
149149

150-
bool is_collided_polygons_in_lanelet(
151-
const std::vector<Polygon2d> & collided_polygons, const lanelet::BasicPolygon2d & lanes_polygon);
150+
bool isCollidedPolygonsInLanelet(
151+
const std::vector<Polygon2d> & collided_polygons,
152+
const std::optional<lanelet::BasicPolygon2d> & lanes_polygon);
152153

153154
/**
154155
* @brief Generates expanded lanelets based on the given direction and offsets.

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path)
512512
dist_to_terminal - min_dist_buffer - calculation::calc_stopping_distance(lc_param_ptr);
513513

514514
const auto distance_to_last_fit_width = std::invoke([&]() -> double {
515-
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current;
515+
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current.value();
516516
if (utils::isEgoWithinOriginalLane(curr_lanes_poly, getEgoPose(), *bpp_param_ptr)) {
517517
return utils::lane_change::calculation::calc_dist_to_last_fit_width(
518518
lanes_ptr->current, path.points.front().point.pose, *bpp_param_ptr);
@@ -740,7 +740,7 @@ bool NormalLaneChange::hasFinishedLaneChange() const
740740
if (has_passed_end_pose) {
741741
const auto & lanes_polygon = common_data_ptr_->lanes_polygon_ptr->target;
742742
return !boost::geometry::disjoint(
743-
lanes_polygon,
743+
lanes_polygon.value(),
744744
lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(current_pose.position)));
745745
}
746746

@@ -767,7 +767,7 @@ bool NormalLaneChange::isAbleToReturnCurrentLane() const
767767
return false;
768768
}
769769

770-
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current;
770+
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current.value();
771771
if (!utils::isEgoWithinOriginalLane(
772772
curr_lanes_poly, getEgoPose(), planner_data_->parameters,
773773
lane_change_parameters_->cancel.overhang_tolerance)) {
@@ -843,7 +843,7 @@ bool NormalLaneChange::isAbleToStopSafely() const
843843
const auto stop_dist =
844844
-(current_velocity * current_velocity / (2.0 * planner_data_->parameters.min_acc));
845845

846-
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current;
846+
const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current.value();
847847
double dist = 0.0;
848848
for (size_t idx = nearest_idx; idx < status_.lane_change_path.path.points.size() - 1; ++idx) {
849849
dist += calcSignedArcLength(status_.lane_change_path.path.points, idx, idx + 1);
@@ -1076,7 +1076,7 @@ FilteredByLanesObjects NormalLaneChange::filterObjectsByLanelets(
10761076
const auto & route_handler = getRouteHandler();
10771077
const auto & common_parameters = planner_data_->parameters;
10781078
const auto check_optional_polygon = [](const auto & object, const auto & polygon) {
1079-
return !polygon.empty() && isPolygonOverlapLanelet(object, polygon);
1079+
return polygon && isPolygonOverlapLanelet(object, *polygon);
10801080
};
10811081

10821082
// get backward lanes
@@ -1963,7 +1963,7 @@ bool NormalLaneChange::is_collided(
19631963
const auto & current_polygon = lanes_polygon_ptr->current;
19641964
const auto & expanded_target_polygon = lanes_polygon_ptr->target;
19651965

1966-
if (current_polygon.empty() || expanded_target_polygon.empty()) {
1966+
if (!current_polygon.has_value() || !expanded_target_polygon.has_value()) {
19671967
return !is_collided;
19681968
}
19691969

@@ -1989,9 +1989,9 @@ bool NormalLaneChange::is_collided(
19891989
}
19901990

19911991
const auto collision_in_current_lanes =
1992-
utils::lane_change::is_collided_polygons_in_lanelet(collided_polygons, current_polygon);
1993-
const auto collision_in_target_lanes = utils::lane_change::is_collided_polygons_in_lanelet(
1994-
collided_polygons, expanded_target_polygon);
1992+
utils::lane_change::isCollidedPolygonsInLanelet(collided_polygons, current_polygon);
1993+
const auto collision_in_target_lanes =
1994+
utils::lane_change::isCollidedPolygonsInLanelet(collided_polygons, expanded_target_polygon);
19951995

19961996
if (!collision_in_current_lanes && !collision_in_target_lanes) {
19971997
utils::path_safety_checker::updateCollisionCheckDebugMap(
@@ -2077,7 +2077,7 @@ bool NormalLaneChange::is_valid_start_point(
20772077
const lanelet::BasicPoint2d lc_start_point(pose.position.x, pose.position.y);
20782078

20792079
const auto & target_neighbor_poly = common_data_ptr->lanes_polygon_ptr->target_neighbor;
2080-
const auto & target_lane_poly = common_data_ptr_->lanes_polygon_ptr->target;
2080+
const auto & target_lane_poly = common_data_ptr_->lanes_polygon_ptr->target.value();
20812081

20822082
return boost::geometry::covered_by(lc_start_point, target_neighbor_poly) ||
20832083
boost::geometry::covered_by(lc_start_point, target_lane_poly);

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -900,13 +900,12 @@ std::optional<size_t> getLeadingStaticObjectIdx(
900900
return leading_obj_idx;
901901
}
902902

903-
lanelet::BasicPolygon2d create_polygon(
903+
std::optional<lanelet::BasicPolygon2d> createPolygon(
904904
const lanelet::ConstLanelets & lanes, const double start_dist, const double end_dist)
905905
{
906906
if (lanes.empty()) {
907907
return {};
908908
}
909-
910909
const auto polygon_3d = lanelet::utils::getPolygonFromArcLength(lanes, start_dist, end_dist);
911910
return lanelet::utils::to2D(polygon_3d).basicPolygon();
912911
}
@@ -950,11 +949,12 @@ ExtendedPredictedObject transform(
950949
return extended_object;
951950
}
952951

953-
bool is_collided_polygons_in_lanelet(
954-
const std::vector<Polygon2d> & collided_polygons, const lanelet::BasicPolygon2d & lanes_polygon)
952+
bool isCollidedPolygonsInLanelet(
953+
const std::vector<Polygon2d> & collided_polygons,
954+
const std::optional<lanelet::BasicPolygon2d> & lanes_polygon)
955955
{
956956
const auto is_in_lanes = [&](const auto & collided_polygon) {
957-
return !lanes_polygon.empty() && !boost::geometry::disjoint(collided_polygon, lanes_polygon);
957+
return lanes_polygon && boost::geometry::intersects(lanes_polygon.value(), collided_polygon);
958958
};
959959

960960
return std::any_of(collided_polygons.begin(), collided_polygons.end(), is_in_lanes);
@@ -1033,28 +1033,28 @@ LanesPolygon create_lanes_polygon(const CommonDataPtr & common_data_ptr)
10331033
LanesPolygon lanes_polygon;
10341034

10351035
lanes_polygon.current =
1036-
utils::lane_change::create_polygon(lanes->current, 0.0, std::numeric_limits<double>::max());
1036+
utils::lane_change::createPolygon(lanes->current, 0.0, std::numeric_limits<double>::max());
10371037

10381038
lanes_polygon.target =
1039-
utils::lane_change::create_polygon(lanes->target, 0.0, std::numeric_limits<double>::max());
1039+
utils::lane_change::createPolygon(lanes->target, 0.0, std::numeric_limits<double>::max());
10401040

10411041
const auto & lc_param_ptr = common_data_ptr->lc_param_ptr;
10421042
const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets(
10431043
lanes->target, common_data_ptr->direction, lc_param_ptr->lane_expansion_left_offset,
10441044
lc_param_ptr->lane_expansion_right_offset);
1045-
lanes_polygon.expanded_target = utils::lane_change::create_polygon(
1045+
lanes_polygon.expanded_target = utils::lane_change::createPolygon(
10461046
expanded_target_lanes, 0.0, std::numeric_limits<double>::max());
10471047

1048-
lanes_polygon.target_neighbor = utils::lane_change::create_polygon(
1048+
lanes_polygon.target_neighbor = *utils::lane_change::createPolygon(
10491049
lanes->target_neighbor, 0.0, std::numeric_limits<double>::max());
10501050

10511051
lanes_polygon.preceding_target.reserve(lanes->preceding_target.size());
10521052
for (const auto & preceding_lane : lanes->preceding_target) {
10531053
auto lane_polygon =
1054-
utils::lane_change::create_polygon(preceding_lane, 0.0, std::numeric_limits<double>::max());
1054+
utils::lane_change::createPolygon(preceding_lane, 0.0, std::numeric_limits<double>::max());
10551055

1056-
if (!lane_polygon.empty()) {
1057-
lanes_polygon.preceding_target.push_back(lane_polygon);
1056+
if (lane_polygon) {
1057+
lanes_polygon.preceding_target.push_back(*lane_polygon);
10581058
}
10591059
}
10601060
return lanes_polygon;
@@ -1260,7 +1260,7 @@ bool has_blocking_target_object(
12601260

12611261
// filtered_objects includes objects out of target lanes, so filter them out
12621262
if (boost::geometry::disjoint(
1263-
object.initial_polygon, common_data_ptr->lanes_polygon_ptr->target)) {
1263+
object.initial_polygon, common_data_ptr->lanes_polygon_ptr->target.value())) {
12641264
return false;
12651265
}
12661266

0 commit comments

Comments
 (0)