Skip to content

Commit d707d2b

Browse files
feat(obstacle_cruise_planner): add goal safe distance (#2031)
1 parent b8a19b5 commit d707d2b

File tree

5 files changed

+27
-8
lines changed

5 files changed

+27
-8
lines changed

launch/tier4_planning_launch/config/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/obstacle_cruise_planner.param.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
min_ego_accel_for_rss: -1.0 # ego's acceleration to calculate RSS distance [m/ss]
1111
min_object_accel_for_rss: -1.0 # front obstacle's acceleration to calculate RSS distance [m/ss]
1212
safe_distance_margin : 6.0 # This is also used as a stop margin [m]
13+
terminal_safe_distance_margin : 3.0 # Stop margin at the goal [m]
1314

1415
nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index
1516
nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index

planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
min_ego_accel_for_rss: -1.0 # ego's acceleration to calculate RSS distance [m/ss]
1111
min_object_accel_for_rss: -1.0 # front obstacle's acceleration to calculate RSS distance [m/ss]
1212
safe_distance_margin : 6.0 # This is also used as a stop margin [m]
13+
terminal_safe_distance_margin : 3.0 # Stop margin at the goal [m]
1314

1415
nearest_dist_deviation_threshold: 3.0 # [m] for finding nearest index
1516
nearest_yaw_deviation_threshold: 1.57 # [rad] for finding nearest index

planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ struct LongitudinalInfo
109109
double min_ego_accel_for_rss;
110110
double min_object_accel_for_rss;
111111
double safe_distance_margin;
112+
double terminal_safe_distance_margin;
112113
};
113114

114115
struct DebugData

planning/obstacle_cruise_planner/src/node.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions &
245245
declare_parameter<double>("common.min_object_accel_for_rss");
246246
const double idling_time = declare_parameter<double>("common.idling_time");
247247
const double safe_distance_margin = declare_parameter<double>("common.safe_distance_margin");
248+
const double terminal_safe_distance_margin =
249+
declare_parameter<double>("common.terminal_safe_distance_margin");
248250

249251
return LongitudinalInfo{
250252
max_accel,
@@ -258,7 +260,8 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions &
258260
idling_time,
259261
min_ego_accel_for_rss,
260262
min_object_accel_for_rss,
261-
safe_distance_margin};
263+
safe_distance_margin,
264+
terminal_safe_distance_margin};
262265
}();
263266

264267
is_showing_debug_info_ = declare_parameter<bool>("common.is_showing_debug_info");

planning/obstacle_cruise_planner/src/planner_interface.cpp

+20-7
Original file line numberDiff line numberDiff line change
@@ -140,16 +140,29 @@ Trajectory PlannerInterface::generateStopTrajectory(
140140
const auto closest_behavior_stop_idx =
141141
motion_utils::searchZeroVelocityIndex(planner_data.traj.points, nearest_segment_idx + 1);
142142

143-
if (
144-
closest_behavior_stop_idx &&
145-
closest_behavior_stop_idx != planner_data.traj.points.size() - 1) {
146-
const double closest_behavior_stop_dist_from_ego = motion_utils::calcSignedArcLength(
147-
planner_data.traj.points, planner_data.current_pose.position, nearest_segment_idx,
148-
*closest_behavior_stop_idx);
143+
if (!closest_behavior_stop_idx) {
144+
return longitudinal_info_.safe_distance_margin;
145+
}
146+
147+
const double closest_behavior_stop_dist_from_ego = motion_utils::calcSignedArcLength(
148+
planner_data.traj.points, planner_data.current_pose.position, nearest_segment_idx,
149+
*closest_behavior_stop_idx);
150+
151+
if (*closest_behavior_stop_idx == planner_data.traj.points.size() - 1) {
152+
// Closest behavior stop point is the end point
153+
const double closest_obstacle_stop_dist_from_ego =
154+
closest_obstacle_dist - dist_to_ego - longitudinal_info_.terminal_safe_distance_margin -
155+
abs_ego_offset;
156+
const double stop_dist_diff =
157+
closest_behavior_stop_dist_from_ego - closest_obstacle_stop_dist_from_ego;
158+
if (stop_dist_diff < 0.5) {
159+
// Use terminal margin (terminal_safe_distance_margin) for obstacle stop
160+
return longitudinal_info_.terminal_safe_distance_margin;
161+
}
162+
} else {
149163
const double closest_obstacle_stop_dist_from_ego = closest_obstacle_dist - dist_to_ego -
150164
longitudinal_info_.safe_distance_margin -
151165
abs_ego_offset;
152-
153166
const double stop_dist_diff =
154167
closest_behavior_stop_dist_from_ego - closest_obstacle_stop_dist_from_ego;
155168
if (0.0 < stop_dist_diff && stop_dist_diff < longitudinal_info_.safe_distance_margin) {

0 commit comments

Comments
 (0)