Skip to content

Commit 78eea31

Browse files
authored
fix(bpp-common): use polygon area to check overlap lanelet (autowarefoundation#6291)
* fix(bpp-common): use polygon area to check overlap lanelet Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * fix(static_drivable_area_expansion): fix skip post process condition Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> --------- Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent c686800 commit 78eea31

File tree

1 file changed

+17
-14
lines changed

1 file changed

+17
-14
lines changed

planning/behavior_path_planner_common/src/utils/drivable_area_expansion/static_drivable_area.cpp

+17-14
Original file line numberDiff line numberDiff line change
@@ -650,14 +650,14 @@ std::optional<size_t> getOverlappedLaneletId(const std::vector<DrivableLanes> &
650650

651651
for (const auto & lanelet : lanelets) {
652652
for (const auto & target_lanelet : target_lanelets) {
653-
std::vector<Point2d> intersections{};
653+
std::vector<Polygon2d> intersections{};
654654
boost::geometry::intersection(
655-
lanelet.polygon2d().basicPolygon(), target_lanelet.polygon2d().basicPolygon(),
656-
intersections);
655+
toPolygon2d(lanelet), toPolygon2d(target_lanelet), intersections);
657656

658-
// if only one point intersects, it is assumed not to be overlapped
659-
if (intersections.size() > 1) {
660-
return true;
657+
for (const auto & polygon : intersections) {
658+
if (boost::geometry::area(polygon) > 1e-3) {
659+
return true;
660+
}
661661
}
662662
}
663663
}
@@ -1463,11 +1463,10 @@ std::pair<std::vector<lanelet::ConstPoint3d>, bool> getBoundWithFreeSpaceAreas(
14631463
throw std::domain_error("invalid case.");
14641464
}
14651465

1466-
const auto goal_is_in_freespace = boost::geometry::within(
1467-
to2D(toLaneletPoint(route_handler->getGoalPose().position).basicPoint()),
1468-
to2D(polygon).basicPolygon());
1469-
1470-
return std::make_pair(expanded_bound, is_driving_freespace || goal_is_in_freespace);
1466+
const auto skip_post_process = route_case == RouteCase::INIT_POS_IS_IN_FREESPACE ||
1467+
route_case == RouteCase::GOAL_POS_IS_IN_FREESPACE ||
1468+
is_driving_freespace;
1469+
return std::make_pair(expanded_bound, skip_post_process);
14711470
}
14721471

14731472
std::vector<geometry_msgs::msg::Point> postProcess(
@@ -1569,7 +1568,9 @@ std::vector<geometry_msgs::msg::Point> postProcess(
15691568
// Insert a start point
15701569
processed_bound.push_back(start_point);
15711570

1572-
return findNearestSegmentIndexFromLateralDistance(tmp_bound, start_point);
1571+
const auto p_tmp =
1572+
geometry_msgs::build<Pose>().position(start_point).orientation(front_pose.orientation);
1573+
return findNearestSegmentIndexFromLateralDistance(tmp_bound, p_tmp, M_PI_2);
15731574
}();
15741575

15751576
// Get Closest segment for the goal point
@@ -1579,8 +1580,10 @@ std::vector<geometry_msgs::msg::Point> postProcess(
15791580
findNearestSegmentIndexFromLateralDistance(tmp_bound, goal_pose, M_PI_2);
15801581
const auto goal_point =
15811582
calcLongitudinalOffsetGoalPoint(tmp_bound, goal_pose, goal_start_idx, vehicle_length);
1582-
const size_t goal_idx =
1583-
std::max(goal_start_idx, findNearestSegmentIndexFromLateralDistance(tmp_bound, goal_point));
1583+
const auto p_tmp =
1584+
geometry_msgs::build<Pose>().position(goal_point).orientation(goal_pose.orientation);
1585+
const size_t goal_idx = std::max(
1586+
goal_start_idx, findNearestSegmentIndexFromLateralDistance(tmp_bound, p_tmp, M_PI_2));
15841587

15851588
return std::make_pair(goal_idx, goal_point);
15861589
}();

0 commit comments

Comments
 (0)