Skip to content

Commit 1c3540a

Browse files
author
beyza
committed
consider all overlap lanelets as a goal lanelet
Signed-off-by: beyza <bnk@leodrive.ai>
1 parent 1aa5bb9 commit 1c3540a

File tree

2 files changed

+75
-54
lines changed

2 files changed

+75
-54
lines changed

planning/mission_planner/src/lanelet2_plugins/default_planner.cpp

+27-23
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ bool DefaultPlanner::is_goal_valid(
314314
const auto logger = node_->get_logger();
315315

316316
const auto goal_lanelet_pt = lanelet::utils::conversion::toLaneletPoint(goal.position);
317-
317+
bool is_goal_valid = false;
318318
// check if goal is in shoulder lanelet
319319
lanelet::Lanelet closest_shoulder_lanelet;
320320
if (lanelet::utils::query::getClosestLanelet(
@@ -331,9 +331,14 @@ bool DefaultPlanner::is_goal_valid(
331331
}
332332
}
333333

334-
lanelet::Lanelet closest_lanelet;
335-
if (!lanelet::utils::query::getClosestLanelet(road_lanelets_, goal, &closest_lanelet)) {
336-
return false;
334+
lanelet::ConstLanelet goal_lanelet;
335+
lanelet::ConstLanelets goal_lanelets;
336+
if (!lanelet::utils::query::getCurrentLanelets(
337+
road_lanelets_, goal, &goal_lanelets)) {
338+
if (!lanelet::utils::query::getClosestLanelet(
339+
road_lanelets_, goal, &goal_lanelet)) {
340+
}
341+
goal_lanelets = {goal_lanelet};
337342
}
338343

339344
const auto local_vehicle_footprint = vehicle_info_.createFootprint();
@@ -348,25 +353,24 @@ bool DefaultPlanner::is_goal_valid(
348353
combine_lanelets_with_shoulder(path_lanelets, shoulder_lanelets_);
349354

350355
// check if goal footprint exceeds lane when the goal isn't in parking_lot
351-
if (
352-
param_.check_footprint_inside_lanes &&
353-
!check_goal_footprint_inside_lanes(
354-
closest_lanelet, combined_prev_lanelet, polygon_footprint, next_lane_length) &&
355-
!is_in_parking_lot(
356-
lanelet::utils::query::getAllParkingLots(lanelet_map_ptr_),
357-
lanelet::utils::conversion::toLaneletPoint(goal.position))) {
358-
RCLCPP_WARN(logger, "Goal's footprint exceeds lane!");
359-
return false;
360-
}
361-
362-
if (is_in_lane(closest_lanelet, goal_lanelet_pt)) {
363-
const auto lane_yaw = lanelet::utils::getLaneletAngle(closest_lanelet, goal.position);
364-
const auto goal_yaw = tf2::getYaw(goal.orientation);
365-
const auto angle_diff = tier4_autoware_utils::normalizeRadian(lane_yaw - goal_yaw);
356+
for (const auto & gl_llt : goal_lanelets) {
357+
if (
358+
param_.check_footprint_inside_lanes &&
359+
!check_goal_footprint_inside_lanes(gl_llt, combined_prev_lanelet, polygon_footprint, next_lane_length) &&
360+
!is_in_parking_lot(
361+
lanelet::utils::query::getAllParkingLots(lanelet_map_ptr_),
362+
lanelet::utils::conversion::toLaneletPoint(goal.position))) {
363+
RCLCPP_WARN(logger, "Goal's footprint exceeds lane!");
364+
is_goal_valid = false;
365+
} else if (is_in_lane(gl_llt, goal_lanelet_pt)) {
366+
const auto lane_yaw = lanelet::utils::getLaneletAngle(gl_llt, goal.position);
367+
const auto goal_yaw = tf2::getYaw(goal.orientation);
368+
const auto angle_diff = tier4_autoware_utils::normalizeRadian(lane_yaw - goal_yaw);
366369

367-
const double th_angle = tier4_autoware_utils::deg2rad(param_.goal_angle_threshold_deg);
368-
if (std::abs(angle_diff) < th_angle) {
369-
return true;
370+
const double th_angle = tier4_autoware_utils::deg2rad(param_.goal_angle_threshold_deg);
371+
if (std::abs(angle_diff) < th_angle) {
372+
return true;
373+
}
370374
}
371375
}
372376

@@ -382,7 +386,7 @@ bool DefaultPlanner::is_goal_valid(
382386
return true;
383387
}
384388

385-
return false;
389+
return is_goal_valid;
386390
}
387391

388392
PlannerPlugin::LaneletRoute DefaultPlanner::plan(const RoutePoints & points)

planning/route_handler/src/route_handler.cpp

+48-31
Original file line numberDiff line numberDiff line change
@@ -2141,48 +2141,65 @@ bool RouteHandler::planPathLaneletsBetweenCheckpoints(
21412141

21422142
// Find lanelets for goal point.
21432143
lanelet::ConstLanelet goal_lanelet;
2144-
if (!lanelet::utils::query::getClosestLanelet(road_lanelets_, goal_checkpoint, &goal_lanelet)) {
2145-
RCLCPP_WARN_STREAM(
2146-
logger_, "Failed to find closest lanelet."
2147-
<< std::endl
2148-
<< " - start checkpoint: " << toString(start_checkpoint) << std::endl
2149-
<< " - goal checkpoint: " << toString(goal_checkpoint) << std::endl);
2150-
return false;
2144+
lanelet::ConstLanelets goal_lanelets;
2145+
if (!lanelet::utils::query::getCurrentLanelets(
2146+
road_lanelets_, goal_checkpoint, &goal_lanelets)) {
2147+
if (!lanelet::utils::query::getClosestLanelet(
2148+
road_lanelets_, goal_checkpoint, &goal_lanelet)) {
2149+
RCLCPP_WARN_STREAM(
2150+
logger_, "Failed to find current lanelet."
2151+
<< std::endl
2152+
<< " - start checkpoint: " << toString(start_checkpoint) << std::endl
2153+
<< " - goal checkpoint: " << toString(goal_checkpoint) << std::endl);
2154+
return false;
2155+
}
2156+
goal_lanelets = {goal_lanelet};
21512157
}
21522158

21532159
lanelet::Optional<lanelet::routing::Route> optional_route;
21542160
std::vector<lanelet::ConstLanelets> candidate_paths;
21552161
lanelet::routing::LaneletPath shortest_path;
21562162
bool is_route_found = false;
21572163

2164+
lanelet::routing::LaneletPath drivable_lane_path;
2165+
double shortest_path_length2d = std::numeric_limits<double>::max();
21582166
double smallest_angle_diff = std::numeric_limits<double>::max();
21592167
constexpr double yaw_threshold = M_PI / 2.0;
21602168

21612169
for (const auto & st_llt : start_lanelets) {
2162-
// check if the angle difference between start_checkpoint and start lanelet center line
2163-
// orientation is in yaw_threshold range
2164-
double lanelet_angle = lanelet::utils::getLaneletAngle(st_llt, start_checkpoint.position);
2165-
double pose_yaw = tf2::getYaw(start_checkpoint.orientation);
2166-
double angle_diff = std::abs(autoware_utils::normalize_radian(lanelet_angle - pose_yaw));
2167-
2168-
bool is_proper_angle = angle_diff <= std::abs(yaw_threshold);
2169-
2170-
optional_route = routing_graph_ptr_->getRoute(st_llt, goal_lanelet, 0);
2171-
if (!optional_route || !is_proper_angle) {
2172-
RCLCPP_ERROR_STREAM(
2173-
logger_, "Failed to find a proper route!"
2174-
<< std::endl
2175-
<< " - start checkpoint: " << toString(start_checkpoint) << std::endl
2176-
<< " - goal checkpoint: " << toString(goal_checkpoint) << std::endl
2177-
<< " - start lane id: " << st_llt.id() << std::endl
2178-
<< " - goal lane id: " << goal_lanelet.id() << std::endl);
2179-
continue;
2180-
}
2181-
is_route_found = true;
2182-
if (angle_diff < smallest_angle_diff) {
2183-
smallest_angle_diff = angle_diff;
2184-
shortest_path = optional_route->shortestPath();
2185-
start_lanelet = st_llt;
2170+
for (const auto & gl_llt : goal_lanelets) {
2171+
// check if the angle difference between start_checkpoint and start lanelet center line
2172+
// orientation is in yaw_threshold range
2173+
2174+
double lanelet_angle = lanelet::utils::getLaneletAngle(st_llt, start_checkpoint.position);
2175+
double pose_yaw = tf2::getYaw(start_checkpoint.orientation);
2176+
double angle_diff = std::abs(autoware_utils::normalize_radian(lanelet_angle - pose_yaw));
2177+
2178+
bool is_proper_angle = angle_diff <= std::abs(yaw_threshold);
2179+
2180+
if (angle_diff < smallest_angle_diff) {
2181+
smallest_angle_diff = angle_diff;
2182+
is_proper_angle = true;
2183+
}
2184+
2185+
optional_route = routing_graph_ptr_->getRoute(st_llt, gl_llt, 0);
2186+
if (!optional_route || !is_proper_angle) {
2187+
RCLCPP_ERROR_STREAM(
2188+
logger_, "Failed to find a proper route!"
2189+
<< std::endl
2190+
<< " - start checkpoint: " << toString(start_checkpoint) << std::endl
2191+
<< " - goal checkpoint: " << toString(goal_checkpoint) << std::endl
2192+
<< " - start lane id: " << st_llt.id() << std::endl
2193+
<< " - goal lane id: " << gl_llt.id() << std::endl);
2194+
} else {
2195+
is_route_found = true;
2196+
if (optional_route->length2d() < shortest_path_length2d) {
2197+
shortest_path_length2d = optional_route->length2d();
2198+
shortest_path = optional_route->shortestPath();
2199+
start_lanelet = st_llt;
2200+
goal_lanelet = gl_llt;
2201+
}
2202+
}
21862203
}
21872204
}
21882205

0 commit comments

Comments
 (0)