Skip to content

Commit ba9b626

Browse files
committed
fix(bpp-common): use polygon area to check overlap lanelet
Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent 81605c1 commit ba9b626

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

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

+13-9
Original file line numberDiff line numberDiff line change
@@ -603,14 +603,14 @@ std::optional<size_t> getOverlappedLaneletId(const std::vector<DrivableLanes> &
603603

604604
for (const auto & lanelet : lanelets) {
605605
for (const auto & target_lanelet : target_lanelets) {
606-
std::vector<Point2d> intersections{};
606+
std::vector<Polygon2d> intersections{};
607607
boost::geometry::intersection(
608-
lanelet.polygon2d().basicPolygon(), target_lanelet.polygon2d().basicPolygon(),
609-
intersections);
608+
toPolygon2d(lanelet), toPolygon2d(target_lanelet), intersections);
610609

611-
// if only one point intersects, it is assumed not to be overlapped
612-
if (intersections.size() > 1) {
613-
return true;
610+
for (const auto & polygon : intersections) {
611+
if (boost::geometry::area(polygon) > 1e-3) {
612+
return true;
613+
}
614614
}
615615
}
616616
}
@@ -1523,7 +1523,9 @@ std::vector<geometry_msgs::msg::Point> postProcess(
15231523
// Insert a start point
15241524
processed_bound.push_back(start_point);
15251525

1526-
return findNearestSegmentIndexFromLateralDistance(tmp_bound, start_point);
1526+
const auto p_tmp =
1527+
geometry_msgs::build<Pose>().position(start_point).orientation(front_pose.orientation);
1528+
return findNearestSegmentIndexFromLateralDistance(tmp_bound, p_tmp, M_PI_2);
15271529
}();
15281530

15291531
// Get Closest segment for the goal point
@@ -1533,8 +1535,10 @@ std::vector<geometry_msgs::msg::Point> postProcess(
15331535
findNearestSegmentIndexFromLateralDistance(tmp_bound, goal_pose, M_PI_2);
15341536
const auto goal_point =
15351537
calcLongitudinalOffsetGoalPoint(tmp_bound, goal_pose, goal_start_idx, vehicle_length);
1536-
const size_t goal_idx =
1537-
std::max(goal_start_idx, findNearestSegmentIndexFromLateralDistance(tmp_bound, goal_point));
1538+
const auto p_tmp =
1539+
geometry_msgs::build<Pose>().position(goal_point).orientation(goal_pose.orientation);
1540+
const size_t goal_idx = std::max(
1541+
goal_start_idx, findNearestSegmentIndexFromLateralDistance(tmp_bound, p_tmp, M_PI_2));
15381542

15391543
return std::make_pair(goal_idx, goal_point);
15401544
}();

0 commit comments

Comments
 (0)