Skip to content

Commit

Permalink
perf PR 8471
Browse files Browse the repository at this point in the history
  • Loading branch information
technolojin committed Oct 21, 2024
1 parent 1fe3ce5 commit 41c35b0
Showing 1 changed file with 16 additions and 29 deletions.
45 changes: 16 additions & 29 deletions perception/map_based_prediction/src/map_based_prediction_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -359,28 +359,6 @@ CrosswalkEdgePoints getCrosswalkEdgePoints(const lanelet::ConstLanelet & crosswa
back_center_point, r_p_back, l_p_back};
}

bool withinLanelet(
const TrackedObject & object, const lanelet::ConstLanelet & lanelet,
const bool use_yaw_information = false, const float yaw_threshold = 0.6)
{
using Point = boost::geometry::model::d2::point_xy<double>;

const auto & obj_pos = object.kinematics.pose_with_covariance.pose.position;
const Point p_object{obj_pos.x, obj_pos.y};

auto polygon = lanelet.polygon2d().basicPolygon();
boost::geometry::correct(polygon);
bool with_in_polygon = boost::geometry::within(p_object, polygon);

if (!use_yaw_information) return with_in_polygon;

// use yaw angle to compare
const double abs_yaw_diff = calcAbsYawDiffBetweenLaneletAndObject(object, lanelet);
if (abs_yaw_diff < yaw_threshold) return with_in_polygon;

return false;
}

bool withinRoadLanelet(
const TrackedObject & object, const lanelet::LaneletMapPtr & lanelet_map_ptr,
const bool use_yaw_information = false)
Expand All @@ -396,17 +374,26 @@ bool withinRoadLanelet(
const auto surrounding_lanelets =
lanelet::geometry::findNearest(lanelet_map_ptr->laneletLayer, search_point, search_radius);

for (const auto & lanelet : surrounding_lanelets) {
if (lanelet.second.hasAttribute(lanelet::AttributeName::Subtype)) {
lanelet::Attribute attr = lanelet.second.attribute(lanelet::AttributeName::Subtype);
for (const auto & lanelet_with_dist : surrounding_lanelets) {
const auto & dist = lanelet_with_dist.first;
const auto & lanelet = lanelet_with_dist.second;

if (lanelet.hasAttribute(lanelet::AttributeName::Subtype)) {
lanelet::Attribute attr = lanelet.attribute(lanelet::AttributeName::Subtype);
if (
attr.value() == lanelet::AttributeValueString::Crosswalk ||
attr.value() == lanelet::AttributeValueString::Walkway) {
continue;
}
}

if (withinLanelet(object, lanelet.second, use_yaw_information)) {
constexpr float yaw_threshold = 0.6;
bool within_lanelet = std::abs(dist) < 1e-5;
if (use_yaw_information) {
within_lanelet =
within_lanelet && calcAbsYawDiffBetweenLaneletAndObject(object, lanelet) < yaw_threshold;
}
if (within_lanelet) {
return true;
}
}
Expand Down Expand Up @@ -1098,7 +1085,7 @@ PredictedObject MapBasedPredictionNode::getPredictedObjectAsCrosswalkUser(
attr.value() == lanelet::AttributeValueString::Walkway) {
const auto & crosswalk = lanelet;
surrounding_crosswalks.push_back(crosswalk);
if (withinLanelet(object, crosswalk)) {
if (std::abs(dist) < 1e-5) {
crossing_crosswalk = crosswalk;
}
}
Expand Down Expand Up @@ -1184,8 +1171,8 @@ PredictedObject MapBasedPredictionNode::getPredictedObjectAsCrosswalkUser(
}

const auto reachable_crosswalk = isReachableCrosswalkEdgePoints(
object, surrounding_lanelets, surrounding_crosswalks, edge_points,
prediction_time_horizon_, min_crosswalk_user_velocity_);
object, surrounding_lanelets, surrounding_crosswalks, edge_points, prediction_time_horizon_,
min_crosswalk_user_velocity_);

if (!reachable_crosswalk) {
continue;
Expand Down

0 comments on commit 41c35b0

Please sign in to comment.