Skip to content

Commit c87784d

Browse files
feat(obstacle_cruise_planner)!: relax unknown stop (#1612)
* chore: fix dependency of mult object tracker (#1567) fix dependency of mult object tracker * add relax logic Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * define params Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * add universe params Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * delete null line Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * fix spell Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * fix Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> * change universe params Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> --------- Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp> Co-authored-by: Shohei Sakai <saka1s.jp@gmail.com>
1 parent 3bfca02 commit c87784d

File tree

5 files changed

+33
-3
lines changed

5 files changed

+33
-3
lines changed

planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -222,3 +222,5 @@
222222
sudden_object_acc_threshold: -1.1 # If a stop can be achieved by a deceleration smaller than this value, it is not considered as “sudden stop".
223223
sudden_object_dist_threshold: 1000.0 # If a stop distance is longer than this value, it is not considered as “sudden stop".
224224
abandon_to_stop: false # If true, the planner gives up to stop when it cannot avoid to run over while maintaining the deceleration limit.
225+
limit_margin_for_unknown: 6.0
226+
preferred_acc_for_unknown: -6.0

planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ class ObstacleCruisePlannerNode : public rclcpp::Node
110110
double additional_safe_distance_margin_on_curve_;
111111
double min_safe_distance_margin_on_curve_;
112112
bool suppress_sudden_obstacle_stop_;
113+
double limit_margin_for_unknown_;
114+
double preferred_acc_for_unknown_;
113115

114116
std::vector<int> stop_obstacle_types_;
115117
std::vector<int> inside_cruise_obstacle_types_;

planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp

+6-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class PlannerInterface
6565
const bool enable_debug_info, const bool enable_calculation_time_info,
6666
const double min_behavior_stop_margin, const double enable_approaching_on_curve,
6767
const double additional_safe_distance_margin_on_curve,
68-
const double min_safe_distance_margin_on_curve, const bool suppress_sudden_obstacle_stop)
68+
const double min_safe_distance_margin_on_curve, const bool suppress_sudden_obstacle_stop,
69+
const double limit_margin_for_unknown, const double preferred_acc_for_unknown)
6970
{
7071
enable_debug_info_ = enable_debug_info;
7172
enable_calculation_time_info_ = enable_calculation_time_info;
@@ -74,6 +75,8 @@ class PlannerInterface
7475
additional_safe_distance_margin_on_curve_ = additional_safe_distance_margin_on_curve;
7576
min_safe_distance_margin_on_curve_ = min_safe_distance_margin_on_curve;
7677
suppress_sudden_obstacle_stop_ = suppress_sudden_obstacle_stop;
78+
limit_margin_for_unknown_ = limit_margin_for_unknown;
79+
preferred_acc_for_unknown_ = preferred_acc_for_unknown;
7780
}
7881

7982
std::vector<TrajectoryPoint> generateStopTrajectory(
@@ -123,6 +126,8 @@ class PlannerInterface
123126
double additional_safe_distance_margin_on_curve_;
124127
double min_safe_distance_margin_on_curve_;
125128
bool suppress_sudden_obstacle_stop_;
129+
double limit_margin_for_unknown_;
130+
double preferred_acc_for_unknown_;
126131

127132
// stop watch
128133
tier4_autoware_utils::StopWatch<

planning/obstacle_cruise_planner/src/node.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -445,10 +445,13 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions &
445445
declare_parameter<double>("common.stop_on_curve.min_safe_distance_margin");
446446
suppress_sudden_obstacle_stop_ =
447447
declare_parameter<bool>("common.suppress_sudden_obstacle_stop");
448+
limit_margin_for_unknown_ = declare_parameter<double>("stop.limit_margin_for_unknown");
449+
preferred_acc_for_unknown_ = declare_parameter<double>("stop.preferred_acc_for_unknown");
448450
planner_ptr_->setParam(
449451
enable_debug_info_, enable_calculation_time_info_, min_behavior_stop_margin_,
450452
enable_approaching_on_curve_, additional_safe_distance_margin_on_curve_,
451-
min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_);
453+
min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_, limit_margin_for_unknown_,
454+
preferred_acc_for_unknown_);
452455
}
453456

454457
{ // stop/cruise/slow down obstacle type
@@ -496,11 +499,16 @@ rcl_interfaces::msg::SetParametersResult ObstacleCruisePlannerNode::onParam(
496499
tier4_autoware_utils::updateParam<double>(
497500
parameters, "common.stop_on_curve.min_safe_distance_margin",
498501
min_safe_distance_margin_on_curve_);
502+
tier4_autoware_utils::updateParam<double>(
503+
parameters, "stop.limit_margin_for_unknown", limit_margin_for_unknown_);
504+
tier4_autoware_utils::updateParam<double>(
505+
parameters, "stop.preferred_acc_for_unknown", preferred_acc_for_unknown_);
499506

500507
planner_ptr_->setParam(
501508
enable_debug_info_, enable_calculation_time_info_, min_behavior_stop_margin_,
502509
enable_approaching_on_curve_, additional_safe_distance_margin_on_curve_,
503-
min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_);
510+
min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_, limit_margin_for_unknown_,
511+
preferred_acc_for_unknown_);
504512

505513
tier4_autoware_utils::updateParam<bool>(
506514
parameters, "common.enable_slow_down_planning", enable_slow_down_planning_);

planning/obstacle_cruise_planner/src/planner_interface.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,19 @@ std::vector<TrajectoryPoint> PlannerInterface::generateStopTrajectory(
300300

301301
// calc stop point against the obstacle
302302
double candidate_zero_vel_dist = std::max(0.0, dist_to_collide_on_ref_traj - desired_margin);
303+
if (stop_obstacle.classification.label == ObjectClassification::UNKNOWN) {
304+
const double pref_acc_stop_dist =
305+
motion_utils::calcSignedArcLength(
306+
planner_data.traj_points, 0, planner_data.ego_pose.position) +
307+
calcMinimumDistanceToStop(
308+
planner_data.ego_vel, longitudinal_info_.limit_max_accel, preferred_acc_for_unknown_);
309+
const double limit_margin_stop_dist =
310+
std::max(0.0, dist_to_collide_on_ref_traj - limit_margin_for_unknown_);
311+
if (pref_acc_stop_dist > candidate_zero_vel_dist) {
312+
candidate_zero_vel_dist = std::min(pref_acc_stop_dist, limit_margin_stop_dist);
313+
}
314+
}
315+
303316
if (suppress_sudden_obstacle_stop_) {
304317
const auto acceptable_stop_acc = [&]() -> std::optional<double> {
305318
if (stop_param_.getParamType(stop_obstacle.classification) == "default") {

0 commit comments

Comments
 (0)