Skip to content

Commit 28294e0

Browse files
add lane departure check to geometric pullout
Signed-off-by: Daniel Sanchez <danielsanchezaran@gmail.com>
1 parent 465951e commit 28294e0

File tree

6 files changed

+48
-12
lines changed

6 files changed

+48
-12
lines changed

planning/behavior_path_planner_common/include/behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include "behavior_path_planner_common/data_manager.hpp"
1919
#include "behavior_path_planner_common/parameters.hpp"
2020

21+
#include <lane_departure_checker/lane_departure_checker.hpp>
22+
2123
#include <autoware_auto_perception_msgs/msg/predicted_objects.hpp>
2224
#include <autoware_auto_planning_msgs/msg/path_with_lane_id.hpp>
2325
#include <geometry_msgs/msg/point.hpp>
@@ -72,7 +74,8 @@ class GeometricParallelParking
7274
const bool left_side_parking);
7375
bool planPullOut(
7476
const Pose & start_pose, const Pose & goal_pose, const lanelet::ConstLanelets & road_lanes,
75-
const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start);
77+
const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start,
78+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker);
7679
void setParameters(const ParallelParkingParameters & parameters) { parameters_ = parameters; }
7780
void setPlannerData(const std::shared_ptr<const PlannerData> & planner_data)
7881
{
@@ -115,7 +118,8 @@ class GeometricParallelParking
115118
const Pose & start_pose, const Pose & goal_pose, const double R_E_far,
116119
const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes,
117120
const bool is_forward, const bool left_side_parking, const double end_pose_offset,
118-
const double lane_departure_margin, const double arc_path_interval);
121+
const double lane_departure_margin, const double arc_path_interval,
122+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker);
119123
PathWithLaneId generateArcPath(
120124
const Pose & center, const double radius, const double start_yaw, double end_yaw,
121125
const double arc_path_interval, const bool is_left_turn, const bool is_forward);

planning/behavior_path_planner_common/package.xml

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
<depend>freespace_planning_algorithms</depend>
5050
<depend>geometry_msgs</depend>
5151
<depend>interpolation</depend>
52+
<depend>lane_departure_checker</depend>
5253
<depend>lanelet2_extension</depend>
5354
<depend>magic_enum</depend>
5455
<depend>motion_utils</depend>

planning/behavior_path_planner_common/src/utils/parking_departure/geometric_parallel_parking.cpp

+24-4
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ std::vector<PathWithLaneId> GeometricParallelParking::generatePullOverPaths(
116116
: parameters_.backward_parking_path_interval;
117117
auto arc_paths = planOneTrial(
118118
start_pose, goal_pose, R_E_far, road_lanes, shoulder_lanes, is_forward, left_side_parking,
119-
end_pose_offset, lane_departure_margin, arc_path_interval);
119+
end_pose_offset, lane_departure_margin, arc_path_interval, {});
120120
if (arc_paths.empty()) {
121121
return std::vector<PathWithLaneId>{};
122122
}
@@ -222,7 +222,8 @@ bool GeometricParallelParking::planPullOver(
222222

223223
bool GeometricParallelParking::planPullOut(
224224
const Pose & start_pose, const Pose & goal_pose, const lanelet::ConstLanelets & road_lanes,
225-
const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start)
225+
const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start,
226+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker)
226227
{
227228
constexpr bool is_forward = false; // parking backward means pull_out forward
228229
constexpr double start_pose_offset = 0.0; // start_pose is current_pose
@@ -242,7 +243,7 @@ bool GeometricParallelParking::planPullOut(
242243
auto arc_paths = planOneTrial(
243244
*end_pose, start_pose, R_E_min_, road_lanes, shoulder_lanes, is_forward, left_side_start,
244245
start_pose_offset, parameters_.pull_out_lane_departure_margin,
245-
parameters_.pull_out_path_interval);
246+
parameters_.pull_out_path_interval, lane_departure_checker);
246247
if (arc_paths.empty()) {
247248
// not found path
248249
continue;
@@ -362,7 +363,8 @@ std::vector<PathWithLaneId> GeometricParallelParking::planOneTrial(
362363
const Pose & start_pose, const Pose & goal_pose, const double R_E_far,
363364
const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes,
364365
const bool is_forward, const bool left_side_parking, const double end_pose_offset,
365-
const double lane_departure_margin, const double arc_path_interval)
366+
const double lane_departure_margin, const double arc_path_interval,
367+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker)
366368
{
367369
clearPaths();
368370

@@ -496,6 +498,24 @@ std::vector<PathWithLaneId> GeometricParallelParking::planOneTrial(
496498
setLaneIdsToPath(path_turn_first);
497499
setLaneIdsToPath(path_turn_second);
498500

501+
if (lane_departure_checker) {
502+
const auto lanelet_map_ptr = planner_data_->route_handler->getLaneletMapPtr();
503+
504+
const bool is_path_turn_first_outside_lanes =
505+
lane_departure_checker->checkPathWillLeaveLane(lanelet_map_ptr, path_turn_first);
506+
507+
if (is_path_turn_first_outside_lanes) {
508+
return std::vector<PathWithLaneId>{};
509+
}
510+
511+
const bool is_path_turn_second_outside_lanes =
512+
lane_departure_checker->checkPathWillLeaveLane(lanelet_map_ptr, path_turn_second);
513+
514+
if (is_path_turn_second_outside_lanes) {
515+
return std::vector<PathWithLaneId>{};
516+
}
517+
}
518+
499519
// generate arc path vector
500520
paths_.push_back(path_turn_first);
501521
paths_.push_back(path_turn_second);

planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/geometric_pull_out.hpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,27 @@
1919
#include "behavior_path_start_planner_module/pull_out_path.hpp"
2020
#include "behavior_path_start_planner_module/pull_out_planner_base.hpp"
2121

22+
#include <lane_departure_checker/lane_departure_checker.hpp>
23+
2224
#include <autoware_auto_planning_msgs/msg/path_with_lane_id.hpp>
2325

26+
#include <memory>
27+
2428
namespace behavior_path_planner
2529
{
2630
class GeometricPullOut : public PullOutPlannerBase
2731
{
2832
public:
29-
explicit GeometricPullOut(rclcpp::Node & node, const StartPlannerParameters & parameters);
33+
explicit GeometricPullOut(
34+
rclcpp::Node & node, const StartPlannerParameters & parameters,
35+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker);
3036

3137
PlannerType getPlannerType() override { return PlannerType::GEOMETRIC; };
3238
std::optional<PullOutPath> plan(const Pose & start_pose, const Pose & goal_pose) override;
3339

3440
GeometricParallelParking planner_;
3541
ParallelParkingParameters parallel_parking_parameters_;
42+
std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker_;
3643
};
3744
} // namespace behavior_path_planner
3845

planning/behavior_path_start_planner_module/src/geometric_pull_out.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,12 @@ namespace behavior_path_planner
3030
{
3131
using start_planner_utils::getPullOutLanes;
3232

33-
GeometricPullOut::GeometricPullOut(rclcpp::Node & node, const StartPlannerParameters & parameters)
33+
GeometricPullOut::GeometricPullOut(
34+
rclcpp::Node & node, const StartPlannerParameters & parameters,
35+
const std::shared_ptr<lane_departure_checker::LaneDepartureChecker> lane_departure_checker)
3436
: PullOutPlannerBase{node, parameters},
35-
parallel_parking_parameters_{parameters.parallel_parking_parameters}
37+
parallel_parking_parameters_{parameters.parallel_parking_parameters},
38+
lane_departure_checker_(lane_departure_checker)
3639
{
3740
planner_.setParameters(parallel_parking_parameters_);
3841
}
@@ -55,8 +58,8 @@ std::optional<PullOutPath> GeometricPullOut::plan(const Pose & start_pose, const
5558
planner_.setTurningRadius(
5659
planner_data_->parameters, parallel_parking_parameters_.pull_out_max_steer_angle);
5760
planner_.setPlannerData(planner_data_);
58-
const bool found_valid_path =
59-
planner_.planPullOut(start_pose, goal_pose, road_lanes, pull_out_lanes, left_side_start);
61+
const bool found_valid_path = planner_.planPullOut(
62+
start_pose, goal_pose, road_lanes, pull_out_lanes, left_side_start, lane_departure_checker_);
6063
if (!found_valid_path) {
6164
return {};
6265
}

planning/behavior_path_start_planner_module/src/start_planner_module.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ StartPlannerModule::StartPlannerModule(
6969
std::make_shared<ShiftPullOut>(node, *parameters, lane_departure_checker_));
7070
}
7171
if (parameters_->enable_geometric_pull_out) {
72-
start_planners_.push_back(std::make_shared<GeometricPullOut>(node, *parameters));
72+
start_planners_.push_back(
73+
std::make_shared<GeometricPullOut>(node, *parameters, lane_departure_checker_));
7374
}
7475
if (start_planners_.empty()) {
7576
RCLCPP_ERROR(getLogger(), "Not found enabled planner");

0 commit comments

Comments
 (0)