Skip to content

Commit 86faea2

Browse files
committed
feat(map_based_prediction): apply the custom find-nearest function (autowarefoundation#12128)
* feat: apply the custom find-nearest function Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp> * chore: update comment Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp> --------- Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp>
1 parent a8d02d9 commit 86faea2

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

perception/autoware_map_based_prediction/include/map_based_prediction/utils.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ PredictedObjectKinematics convertToPredictedKinematics(
9696
PredictedObject convertToPredictedObject(const TrackedObject & tracked_object);
9797

9898
double calculateLocalLikelihood(
99-
const lanelet::Lanelet & current_lanelet, const TrackedObject & object,
99+
const lanelet::ConstLanelet & current_lanelet, const TrackedObject & object,
100100
const double sigma_lateral_offset, const double sigma_yaw_angle_deg);
101101

102102
bool isDuplicated(
@@ -107,7 +107,7 @@ bool isDuplicated(
107107
const PredictedPath & predicted_path, const std::vector<PredictedPath> & predicted_paths);
108108

109109
bool checkCloseLaneletCondition(
110-
const std::pair<double, lanelet::Lanelet> & lanelet, const TrackedObject & object,
110+
const std::pair<double, lanelet::ConstLanelet> & lanelet, const TrackedObject & object,
111111
const std::unordered_map<std::string, std::deque<RoadUser>> & road_users_history,
112112
const double dist_threshold_for_searching_lanelet,
113113
const double delta_yaw_threshold_for_searching_lanelet);

perception/autoware_map_based_prediction/src/utils.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#include <autoware/lanelet2_utils/conversion.hpp>
1818
#include <autoware/lanelet2_utils/geometry.hpp>
19+
#include <autoware/lanelet2_utils/nn_search.hpp>
1920
#include <autoware/motion_utils/trajectory/trajectory.hpp>
2021
#include <autoware_utils/geometry/geometry.hpp>
2122
#include <autoware_utils/ros/uuid_helper.hpp>
@@ -241,7 +242,7 @@ PredictedObject convertToPredictedObject(const TrackedObject & tracked_object)
241242
}
242243

243244
double calculateLocalLikelihood(
244-
const lanelet::Lanelet & current_lanelet, const TrackedObject & object,
245+
const lanelet::ConstLanelet & current_lanelet, const TrackedObject & object,
245246
const double sigma_lateral_offset, const double sigma_yaw_angle_deg)
246247
{
247248
const auto & obj_point = object.kinematics.pose_with_covariance.pose.position;
@@ -311,7 +312,7 @@ bool isDuplicated(
311312
}
312313

313314
bool checkCloseLaneletCondition(
314-
const std::pair<double, lanelet::Lanelet> & lanelet, const TrackedObject & object,
315+
const std::pair<double, lanelet::ConstLanelet> & lanelet, const TrackedObject & object,
315316
const std::unordered_map<std::string, std::deque<RoadUser>> & road_users_history,
316317
const double dist_threshold_for_searching_lanelet,
317318
const double delta_yaw_threshold_for_searching_lanelet)
@@ -413,8 +414,12 @@ LaneletsData getCurrentLanelets(
413414
object.kinematics.pose_with_covariance.pose.position.y);
414415

415416
// nearest lanelet
416-
std::vector<std::pair<double, lanelet::Lanelet>> surrounding_lanelets =
417-
lanelet::geometry::findNearest(lanelet_map_ptr->laneletLayer, search_point, 10);
417+
// NOTE: Search for nearest lanelets considering 3D distances.
418+
// Because lanelet::geometry::findNearest considers only 2D space, it increases computation
419+
// costs when lanelets are overlapped in 3D space.
420+
const std::vector<std::pair<double, lanelet::ConstLanelet>> surrounding_lanelets =
421+
experimental::lanelet2_utils::find_nearest(
422+
lanelet_map_ptr->laneletLayer, object.kinematics.pose_with_covariance.pose, 10);
418423

419424
{ // Step 1. Search same directional lanelets
420425
// No Closest Lanelets
@@ -423,7 +428,7 @@ LaneletsData getCurrentLanelets(
423428
}
424429

425430
LaneletsData object_lanelets;
426-
std::optional<std::pair<double, lanelet::Lanelet>> closest_lanelet{std::nullopt};
431+
std::optional<std::pair<double, lanelet::ConstLanelet>> closest_lanelet{std::nullopt};
427432
for (const auto & lanelet : surrounding_lanelets) {
428433
// Check if the close lanelets meet the necessary condition for start lanelets and
429434
// Check if similar lanelet is inside the object lanelet
@@ -445,8 +450,9 @@ LaneletsData getCurrentLanelets(
445450
constexpr double epsilon = 1e-3;
446451
if (lanelet.first < epsilon) {
447452
const auto object_lanelet = LaneletData{
448-
lanelet.second, utils::calculateLocalLikelihood(
449-
lanelet.second, object, sigma_lateral_offset, sigma_yaw_angle_deg)};
453+
experimental::lanelet2_utils::remove_const(lanelet.second),
454+
utils::calculateLocalLikelihood(
455+
lanelet.second, object, sigma_lateral_offset, sigma_yaw_angle_deg)};
450456
object_lanelets.push_back(object_lanelet);
451457
}
452458
}
@@ -456,7 +462,7 @@ LaneletsData getCurrentLanelets(
456462
}
457463
if (closest_lanelet) {
458464
return LaneletsData{LaneletData{
459-
closest_lanelet->second,
465+
experimental::lanelet2_utils::remove_const(closest_lanelet->second),
460466
utils::calculateLocalLikelihood(
461467
closest_lanelet->second, object, sigma_lateral_offset, sigma_yaw_angle_deg)}};
462468
}

0 commit comments

Comments
 (0)