@@ -1514,6 +1514,43 @@ lanelet::ConstLanelets getExtendedCurrentLanesFromPath(
1514
1514
return lanes;
1515
1515
}
1516
1516
1517
+ // TODO(Azu): In the future, get back lanelet within `to_back_dist` [m] from queried lane
1518
+ lanelet::ConstLanelets getBackwardLanelets (
1519
+ const RouteHandler & route_handler, const lanelet::ConstLanelets & target_lanes,
1520
+ const Pose & current_pose, const double backward_length)
1521
+ {
1522
+ if (target_lanes.empty ()) {
1523
+ return {};
1524
+ }
1525
+
1526
+ const auto arc_length = lanelet::utils::getArcCoordinates (target_lanes, current_pose);
1527
+
1528
+ if (arc_length.length >= backward_length) {
1529
+ return {};
1530
+ }
1531
+
1532
+ const auto & front_lane = target_lanes.front ();
1533
+ const auto preceding_lanes = route_handler.getPrecedingLaneletSequence (
1534
+ front_lane, std::abs (backward_length - arc_length.length ), {front_lane});
1535
+
1536
+ lanelet::ConstLanelets backward_lanes{};
1537
+ const auto num_of_lanes = std::invoke ([&preceding_lanes]() {
1538
+ size_t sum{0 };
1539
+ for (const auto & lanes : preceding_lanes) {
1540
+ sum += lanes.size ();
1541
+ }
1542
+ return sum;
1543
+ });
1544
+
1545
+ backward_lanes.reserve (num_of_lanes);
1546
+
1547
+ for (const auto & lanes : preceding_lanes) {
1548
+ backward_lanes.insert (backward_lanes.end (), lanes.begin (), lanes.end ());
1549
+ }
1550
+
1551
+ return backward_lanes;
1552
+ }
1553
+
1517
1554
lanelet::ConstLanelets calcLaneAroundPose (
1518
1555
const std::shared_ptr<RouteHandler> route_handler, const Pose & pose, const double forward_length,
1519
1556
const double backward_length, const double dist_threshold, const double yaw_threshold)
0 commit comments