Skip to content

autoware_minimum_rule_based_planner#

Overview#

A minimum rule-based trajectory planner that generates safe and feasible trajectories for autonomous driving. It follows the planned route by constructing trajectories from lanelet centerline and applies multi-stage optimization for geometric smoothness, velocity profiles, and obstacle avoidance.

Features#

  • Centerline-based path planning: Generates paths along lanelet centerline from the HD map, extending backward and forward from the ego vehicle's position
  • Smooth goal connection: Refines the path near the goal pose for smooth stopping
  • Path shifting: Shifts the centerline path to start from the ego vehicle's current pose, using curvature-aware shift distance calculation based on ego velocity and lateral acceleration limits
  • Trajectory smoothing: Applies an Elastic Band smoother for geometric smoothing via a plugin interface
  • Trajectory modification: Applies modifier plugins (e.g., obstacle stop) for safety modifications
  • Velocity optimization: Computes a jerk-filtered velocity profile respecting constraints on acceleration, jerk, and lateral acceleration
  • Test mode: Supports bypassing path planning by directly receiving a PathWithLaneId topic

Inputs / Outputs#

Inputs#

Topic Type Description
~/input/route LaneletRoute Planned route
~/input/vector_map LaneletMapBin HD map
~/input/odometry Odometry Ego pose and velocity
~/input/acceleration AccelWithCovarianceStamped Ego acceleration
~/input/objects PredictedObjects Surrounding obstacles
~/input/test/path_with_lane_id PathWithLaneId Test mode: bypasses path planning

Outputs#

Topic Type Description
~/output/candidate_trajectories CandidateTrajectories Planned trajectory
~/debug/path_with_lane_id PathWithLaneId Debug: planned path
~/debug/trajectory Trajectory Debug: final output trajectory
~/debug/shifted_trajectory Trajectory Debug: trajectory after path shifting
~/debug/optimizer/{name}/trajectory Trajectory Debug: trajectory after each optimizer plugin
~/debug/modifier/{name}/trajectory Trajectory Debug: trajectory after each modifier plugin
~/debug/processing_time_detail_ms ProcessingTimeDetail Debug: processing time breakdown

Parameters#

Name Type Description Default Range
planning_frequency_hz float Planning loop frequency [Hz] 10.0 ≥0.0
plugin_names array List of plugins to load ['autoware::minimum_rule_based_planner::plugin::ObstacleStop', 'autoware::minimum_rule_based_planner::plugin::SurroundObstacleStop'] N/A
path_length.backward float Path length behind ego [m] 5.0 ≥0.0
path_length.forward float Path length ahead of ego [m] 300.0 ≥0.0
smooth_goal_connection.search_radius_range float Search radius for goal connection [m] 7.5 ≥0.0
smooth_goal_connection.pre_goal_offset float Offset before goal for smooth connection [m] 1.0 ≥0.0
ego_nearest_lanelet.dist_threshold float Distance threshold for ego nearest lanelet [m] 3.0 ≥0.0
ego_nearest_lanelet.yaw_threshold float Yaw threshold for ego nearest lanelet [rad] 0.174533 ≥0.0
path_shift.enable boolean Enable path shifting to ego pose True N/A
path_shift.minimum_shift_length float Lateral offset threshold to trigger shift [m] 0.5 ≥0.0
path_shift.minimum_shift_yaw float Yaw deviation threshold to trigger shift [rad] 0.349 ≥0.0
path_shift.minimum_shift_distance float Floor for shift distance [m] 5.0 ≥0.0
path_shift.min_speed_for_curvature float Lower bound on speed for curvature computation [m/s] 2.77 ≥0.0
path_shift.lateral_accel_limit float Lateral acceleration limit for shift [m/s^2] 1.0 ≥0.0
waypoint_group.separation_threshold float Max distance between waypoints in same group [m] 1.0 ≥0.0
waypoint_group.interval_margin_ratio float IRatio to expand group interval by lateral distance 10.0 ≥0.0
output.delta_arc_length float Resampling interval for path-to-trajectory conversion [m] 0.5 ≥0.0
obstacle_stop.enable boolean Enable obstacle stop [m] True N/A
obstacle_stop.use_objects boolean Enable object detection [m] True N/A
obstacle_stop.use_pointcloud boolean Enable pointcloud detection [m] True N/A
obstacle_stop.enable_stop_for_objects boolean Enable stop for objects True N/A
obstacle_stop.enable_stop_for_pointcloud boolean Enable stop for pointcloud False N/A
obstacle_stop.stop_margin float Stop margin [m] 6.0 ≥0.0
obstacle_stop.nominal_stopping_decel float Nominal stopping deceleration [m/s^2] 1.0 ≥0.0
obstacle_stop.maximum_stopping_decel float Maximum stopping deceleration [m/s^2] 4.0 ≥0.0
obstacle_stop.stopping_jerk float Stopping jerk [m/s^3] 3.0 ≥0.0
obstacle_stop.on_time_buffer float On time buffer [s] 0.5 ≥0.0
obstacle_stop.off_time_buffer float Off time buffer [s] 1.0 ≥0.0
obstacle_stop.lateral_margin float Lateral margin [m] 0.5 ≥0.0
obstacle_stop.arrived_distance_threshold float Threshold to check if the ego vehicle has arrived at the stop point [m] 0.5 ≥0.0
objects.object_types array Object types ['car', 'truck', 'bus', 'trailer', 'motorcycle', 'bicycle', 'pedestrian', 'hazard'] N/A
objects.max_velocity_th float Max velocity threshold [m/s] 1.0 ≥0.0
objects.stopped_velocity_th float Velocity threshold for target object to be considered as stopped [m/s] 0.25 ≥0.0
objects.max_lateral_velocity_th float Maximum lateral velocity threshold for target object [m/s] 1.0 ≥0.0
≤10.0
objects.safety_buffer float Safety buffer to expand object shape [m] 0.0 ≥0.0
≤10.0
pointcloud.height_buffer float Height buffer [m] 0.5 ≥0.0
pointcloud.min_height float Min height [m] 0.2 ≥0.0
pointcloud.detection_range float Detection range [m] 100.0 ≥0.0
voxel_grid_filter.x float X [m] 0.2 ≥0.0
voxel_grid_filter.y float Y [m] 0.2 ≥0.0
voxel_grid_filter.z float Z [m] 0.2 ≥0.0
voxel_grid_filter.min_size float Min size 3 ≥0.0
clustering.tolerance float Tolerance [m] 0.5 ≥0.0
clustering.min_height float Min height [m] 0.5 ≥0.0
clustering.min_size float Min size 10 ≥0.0
clustering.max_size float Max size 10000 ≥0.0
rss_params.enable boolean Enable RSS-based stop logic True N/A
object_decel.car float Deceleration for car type objects [m/s^2] 1.5 ≥0.0
object_decel.truck float Deceleration for truck type objects [m/s^2] 1.5 ≥0.0
object_decel.bus float Deceleration for bus type objects [m/s^2] 1.5 ≥0.0
object_decel.trailer float Deceleration for trailer type objects [m/s^2] 1.5 ≥0.0
object_decel.motorcycle float Deceleration for motorcycle type objects [m/s^2] 3.0 ≥0.0
object_decel.bicycle float Deceleration for bicycle type objects [m/s^2] 5.0 ≥0.0
object_decel.pedestrian float Deceleration for pedestrian type objects [m/s^2] 5.0 ≥0.0
rss_params.ego_decel float Deceleration for ego vehicle used in RSS calculation [m/s^2] 4.0 ≥0.0
rss_params.reaction_time float Reaction time used in RSS calculation [s] 0.2 ≥0.0
rss_params.safety_margin float Safety margin used in RSS calculation [m] 2.0 ≥0.0
rss_params.lookahead_horizon float Lookahead horizon used in RSS calculation [s] 1.5 ≥0.0
surround_obstacle_stop.enable boolean Enable surround obstacle stop True N/A
surround_obstacle_stop.use_objects boolean Enable the use of objects for surround obstacle stop True N/A
surround_obstacle_stop.use_pointcloud boolean Enable the use of pointcloud for surround obstacle stop False N/A
surround_obstacle_stop.object_types array Types of objects to consider for surround obstacle stop ['car', 'truck', 'bus', 'trailer', 'motorcycle', 'bicycle', 'pedestrian', 'hazard', 'animal', 'unknown'] N/A
front_distance_th.car float Front surround check distance for car [m] 0.5 ≥0.0
≤10.0
front_distance_th.truck float Front surround check distance for truck [m] 0.5 ≥0.0
≤10.0
front_distance_th.bus float Front surround check distance for bus [m] 0.5 ≥0.0
≤10.0
front_distance_th.trailer float Front surround check distance for trailer [m] 0.5 ≥0.0
≤10.0
front_distance_th.motorcycle float Front surround check distance for motorcycle [m] 0.5 ≥0.0
≤10.0
front_distance_th.bicycle float Front surround check distance for bicycle [m] 0.5 ≥0.0
≤10.0
front_distance_th.pedestrian float Front surround check distance for pedestrian [m] 0.5 ≥0.0
≤10.0
front_distance_th.hazard float Front surround check distance for hazard [m] 0.5 ≥0.0
≤10.0
front_distance_th.animal float Front surround check distance for animal [m] 0.5 ≥0.0
≤10.0
front_distance_th.unknown float Front surround check distance for unknown [m] 0.5 ≥0.0
≤10.0
front_distance_th.pointcloud float Front surround check distance for pointcloud [m] 0.5 ≥0.0
≤10.0
side_distance_th.car float Side surround check distance for car [m] 0.0 ≥0.0
≤10.0
side_distance_th.truck float Side surround check distance for truck [m] 0.0 ≥0.0
≤10.0
side_distance_th.bus float Side surround check distance for bus [m] 0.0 ≥0.0
≤10.0
side_distance_th.trailer float Side surround check distance for trailer [m] 0.0 ≥0.0
≤10.0
side_distance_th.motorcycle float Side surround check distance for motorcycle [m] 1.0 ≥0.0
≤10.0
side_distance_th.bicycle float Side surround check distance for bicycle [m] 1.0 ≥0.0
≤10.0
side_distance_th.pedestrian float Side surround check distance for pedestrian [m] 1.0 ≥0.0
≤10.0
side_distance_th.hazard float Side surround check distance for hazard [m] 0.5 ≥0.0
≤10.0
side_distance_th.animal float Side surround check distance for animal [m] 0.5 ≥0.0
≤10.0
side_distance_th.unknown float Side surround check distance for unknown [m] 0.5 ≥0.0
≤10.0
side_distance_th.pointcloud float Side surround check distance for pointcloud [m] 0.5 ≥0.0
≤10.0
back_distance_th.car float Back surround check distance for car [m] 0.0 ≥0.0
≤10.0
back_distance_th.truck float Back surround check distance for truck [m] 0.0 ≥0.0
≤10.0
back_distance_th.bus float Back surround check distance for bus [m] 0.0 ≥0.0
≤10.0
back_distance_th.trailer float Back surround check distance for trailer [m] 0.0 ≥0.0
≤10.0
back_distance_th.motorcycle float Back surround check distance for motorcycle [m] 0.5 ≥0.0
≤10.0
back_distance_th.bicycle float Back surround check distance for bicycle [m] 0.5 ≥0.0
≤10.0
back_distance_th.pedestrian float Back surround check distance for pedestrian [m] 0.5 ≥0.0
≤10.0
back_distance_th.hazard float Back surround check distance for hazard [m] 0.5 ≥0.0
≤10.0
back_distance_th.animal float Back surround check distance for animal [m] 0.5 ≥0.0
≤10.0
back_distance_th.unknown float Back surround check distance for unknown [m] 0.5 ≥0.0
≤10.0
back_distance_th.pointcloud float Back surround check distance for pointcloud [m] 0.5 ≥0.0
≤10.0
surround_obstacle_stop.hysteresis_distance float Distance hysteresis threshold for clearing surround stop [m] 0.1 ≥0.0
≤10.0
surround_obstacle_stop.hysteresis_time float Time hysteresis threshold for clearing surround stop [s] 0.2 ≥0.0
≤10.0
surround_obstacle_stop.ego_stopped_vel_th float Velocity threshold below which ego vehicle is considered stopped [m/s] 0.1 ≥0.0
≤10.0
velocity_smoother.nearest_dist_threshold_m float Nearest distance threshold [m] 1.5 ≥0.0
velocity_smoother.nearest_yaw_threshold_deg float Nearest yaw threshold [deg] 60.0 ≥0.0
velocity_smoother.target_pull_out_speed_mps float Target pull out speed [m/s] 0.25 ≥0.0
velocity_smoother.target_pull_out_acc_mps2 float Target pull out acceleration [m/s^2] 0.5 ≥0.0
velocity_smoother.max_speed_mps float Max speed [m/s] 13.88 ≥0.0
velocity_smoother.max_lateral_accel_mps2 float Max lateral acceleration [m/s^2] 1.5 ≥0.0
velocity_smoother.set_engage_speed boolean Set engage speed at start True N/A
velocity_smoother.limit_speed boolean Apply max speed limit True N/A
velocity_smoother.limit_lateral_acceleration boolean Apply max lateral acceleration limit False N/A
velocity_smoother.smooth_velocities boolean Apply jerk-filtered velocity smoothing True N/A
velocity_smoother.stop_dist_to_prohibit_engage float Stop distance to prohibit engage [m] 0.5 ≥0.0
post_resample.max_trajectory_length float Max trajectory length for post-optimization resampling [m] 300.0 ≥0.0
post_resample.min_trajectory_length float Minimum trajectory length for post-optimization resampling [m] 30.0 ≥0.0
post_resample.resample_time float Resample total time [s] 10.0 ≥0.0
post_resample.dense_resample_dt float Dense sampling time interval [s] 0.1 ≥0.0
post_resample.dense_min_interval_distance float Dense sampling min interval [m] 0.1 ≥0.0
post_resample.sparse_resample_dt float Sparse sampling time interval [s] 0.1 ≥0.0
post_resample.sparse_min_interval_distance float Sparse sampling min interval [m] 1.0 ≥0.0
debug.enable_path boolean Enable path debugging True N/A
debug.enable_shifted_trajectory boolean Enable shifted trajectory debugging True N/A
debug.enable_optimizer_trajectory boolean Enable optimizer trajectory debugging True N/A
debug.enable_modifier_trajectory boolean Enable modifier trajectory debugging True N/A
debug.enable_output_trajectory boolean Enable output trajectory debugging True N/A

Parameters can be set via YAML configuration files in the config/ directory.

Jerk-filtered smoother parameters are defined in config/velocity_smoother/jerk_filtered_smoother.param.yaml. EB smoother parameters are defined in config/trajectory_optimizer_plugins/elastic_band_smoother.param.yaml.