Skip to content

Commit 1efe4aa

Browse files
update
Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp>
1 parent 92112f3 commit 1efe4aa

File tree

2 files changed

+35
-24
lines changed

2 files changed

+35
-24
lines changed

planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,8 @@ class PlannerInterface
341341
struct ObstacleSpecificParams
342342
{
343343
double limit_min_acc;
344-
double limit_max_dist;
344+
double sudden_dist;
345+
double sudden_acc;
345346
bool abandon_to_stop;
346347
};
347348
const std::unordered_map<uint8_t, std::string> types_maps = {
@@ -358,16 +359,13 @@ class PlannerInterface
358359
node.declare_parameter<std::vector<std::string>>(param_prefix + "labels", obstacle_labels);
359360

360361
for (const auto & type_str : obstacle_labels) {
361-
if (type_str == "default") {
362-
const ObstacleSpecificParams default_param{
363-
longitudinal_info.limit_min_accel, std::numeric_limits<double>::max(), false};
364-
type_specified_param_list.emplace(type_str, default_param);
365-
} else {
362+
if (type_str != "default") {
366363
const ObstacleSpecificParams param{
367364
std::min(
368365
node.declare_parameter<double>(param_prefix + type_str + ".limit_min_acc"),
369366
longitudinal_info.min_accel),
370-
node.declare_parameter<double>(param_prefix + type_str + ".limit_max_dist"),
367+
node.declare_parameter<double>(param_prefix + type_str + ".sudden_dist"),
368+
node.declare_parameter<double>(param_prefix + type_str + ".sudden_acc"),
371369
node.declare_parameter<bool>(param_prefix + type_str + ".abandon_to_stop")};
372370
type_specified_param_list.emplace(type_str, param);
373371
}
@@ -383,7 +381,9 @@ class PlannerInterface
383381
tier4_autoware_utils::updateParam<double>(
384382
parameters, param_prefix + type_str + ".limit_min_acc", param.limit_min_acc);
385383
tier4_autoware_utils::updateParam<double>(
386-
parameters, param_prefix + type_str + ".limit_max_dist", param.limit_max_dist);
384+
parameters, param_prefix + type_str + ".sudden__dist", param.sudden_dist);
385+
tier4_autoware_utils::updateParam<double>(
386+
parameters, param_prefix + type_str + ".sudden__acc", param.sudden_acc);
387387
tier4_autoware_utils::updateParam<bool>(
388388
parameters, param_prefix + type_str + ".abandon_to_stop", param.abandon_to_stop);
389389
}

planning/obstacle_cruise_planner/src/planner_interface.cpp

+27-16
Original file line numberDiff line numberDiff line change
@@ -301,27 +301,38 @@ std::vector<TrajectoryPoint> PlannerInterface::generateStopTrajectory(
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);
303303
if (suppress_sudden_obstacle_stop_) {
304-
const double acceptable_stop_dist = std::min(
305-
calcMinimumDistanceToStop(
306-
planner_data.ego_vel, longitudinal_info_.limit_max_accel,
307-
stop_param_.getParam(stop_obstacle.classification).limit_min_acc),
308-
stop_param_.getParam(stop_obstacle.classification).limit_max_dist);
309-
310-
const double acceptable_stop_pos =
311-
motion_utils::calcSignedArcLength(
312-
planner_data.traj_points, 0, planner_data.ego_pose.position) +
313-
acceptable_stop_dist;
314-
315-
if (acceptable_stop_pos > candidate_zero_vel_dist) {
316-
if (
317-
stop_param_.getParam(stop_obstacle.classification).abandon_to_stop &&
318-
acceptable_stop_pos > dist_to_collide_on_ref_traj) {
304+
const auto acceptable_stop_acc = [&]() -> std::optional<double> {
305+
if (stop_param_.getParamType(stop_obstacle.classification) == "default") {
306+
return longitudinal_info_.limit_min_accel;
307+
}
308+
const double distance_to_judge_suddenness = std::min(
309+
calcMinimumDistanceToStop(
310+
planner_data.ego_vel, longitudinal_info_.limit_max_accel,
311+
stop_param_.getParam(stop_obstacle.classification).sudden_acc),
312+
stop_param_.getParam(stop_obstacle.classification).sudden_dist);
313+
if (candidate_zero_vel_dist > distance_to_judge_suddenness) {
314+
return longitudinal_info_.limit_min_accel;
315+
}
316+
if (stop_param_.getParam(stop_obstacle.classification).abandon_to_stop) {
319317
RCLCPP_WARN(
320318
rclcpp::get_logger("ObstacleCruisePlanner::StopPlanner"),
321319
"[Cruise] abandon to stop against %s object",
322320
stop_param_.types_maps.at(stop_obstacle.classification.label).c_str());
323-
continue;
321+
return std::nullopt;
322+
} else {
323+
return stop_param_.getParam(stop_obstacle.classification).limit_min_acc;
324324
}
325+
}();
326+
if (!acceptable_stop_acc) {
327+
continue;
328+
}
329+
330+
const double acceptable_stop_pos =
331+
motion_utils::calcSignedArcLength(
332+
planner_data.traj_points, 0, planner_data.ego_pose.position) +
333+
calcMinimumDistanceToStop(
334+
planner_data.ego_vel, longitudinal_info_.limit_max_accel, acceptable_stop_acc.value());
335+
if (acceptable_stop_pos > candidate_zero_vel_dist) {
325336
candidate_zero_vel_dist = acceptable_stop_pos;
326337
}
327338
}

0 commit comments

Comments
 (0)