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
PathWithLaneIdtopic
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_ |
float | Planning loop frequency [Hz] | 10.0 | ≥0.0 |
| plugin_ |
array | List of plugins to load | ["autoware::minimum_ |
N/A |
| path_ |
float | Path length behind ego [m] | 5.0 | ≥0.0 |
| path_ |
float | Path length ahead of ego [m] | 300.0 | ≥0.0 |
| path_ |
float | Search radius for goal connection [m] | 7.5 | ≥0.0 |
| path_ |
float | Offset before goal for smooth connection [m] | 1.0 | ≥0.0 |
| path_ |
float | Distance threshold for ego nearest lanelet [m] | 3.0 | ≥0.0 |
| path_ |
float | Yaw threshold for ego nearest lanelet [rad] | 0.174533 | ≥0.0 |
| path_ |
boolean | Enable path shifting to ego pose | true | N/A |
| path_ |
float | Lateral offset threshold to trigger shift [m] | 0.5 | ≥0.0 |
| path_ |
float | Yaw deviation threshold to trigger shift [rad] | 0.349 | ≥0.0 |
| path_ |
float | Floor for shift distance [m] | 5.0 | ≥0.0 |
| path_ |
float | Lower bound on speed for curvature computation [m/s] | 2.77 | ≥0.0 |
| path_ |
float | Lateral acceleration limit for shift [m/s^2] | 1.0 | ≥0.0 |
| path_ |
float | Max distance between waypoints in same group [m] | 1.0 | ≥0.0 |
| path_ |
float | IRatio to expand group interval by lateral distance | 10.0 | ≥0.0 |
| path_ |
float | Resampling interval for path-to-trajectory conversion [m] | 0.5 | ≥0.0 |
| obstacle_ |
boolean | Enable obstacle stop [m] | true | N/A |
| obstacle_ |
boolean | Enable object detection [m] | true | N/A |
| obstacle_ |
boolean | Enable pointcloud detection [m] | true | N/A |
| obstacle_ |
boolean | Enable stop for objects | true | N/A |
| obstacle_ |
boolean | Enable stop for pointcloud | false | N/A |
| obstacle_ |
float | Stop margin [m] | 6.0 | ≥0.0 |
| obstacle_ |
float | Nominal stopping deceleration [m/s^2] | 1.0 | ≥0.0 |
| obstacle_ |
float | Maximum stopping deceleration [m/s^2] | 4.0 | ≥0.0 |
| obstacle_ |
float | Stopping jerk [m/s^3] | 3.0 | ≥0.0 |
| obstacle_ |
float | On time buffer [s] | 0.5 | ≥0.0 |
| obstacle_ |
float | Off time buffer [s] | 1.0 | ≥0.0 |
| obstacle_ |
float | Lateral margin [m] | 0.5 | ≥0.0 |
| obstacle_ |
float | Threshold to check if the ego vehicle has arrived at the stop point [m] | 0.5 | ≥0.0 |
| obstacle_ |
array | Types of bounding box shaped objects to consider for obstacle stop | ["car", "truck", "bus", "trailer", "motorcycle", "bicycle", "pedestrian", "hazard", "unknown"] | N/A |
| obstacle_ |
array | Types of polygon shaped objects to consider for obstacle stop | ["car", "truck", "bus", "trailer", "pedestrian", "hazard", "unknown"] | N/A |
| obstacle_ |
float | Velocity threshold for target object to be considered as stopped [m/s] | 0.25 | ≥0.0 |
| obstacle_ |
float | Maximum lateral velocity threshold for target object [m/s] | 1.0 | ≥0.0 ≤10.0 |
| obstacle_ |
float | Safety buffer to expand object shape [m] | 0.0 | ≥0.0 ≤10.0 |
| obstacle_ |
float | Height buffer [m] | 0.5 | ≥0.0 |
| obstacle_ |
float | Min height [m] | 0.2 | ≥0.0 |
| obstacle_ |
float | Detection range [m] | 100.0 | ≥0.0 |
| obstacle_ |
float | X [m] | 0.2 | ≥0.0 |
| obstacle_ |
float | Y [m] | 0.2 | ≥0.0 |
| obstacle_ |
float | Z [m] | 0.2 | ≥0.0 |
| obstacle_ |
float | Min size | 3 | ≥0.0 |
| obstacle_ |
float | Tolerance [m] | 0.5 | ≥0.0 |
| obstacle_ |
float | Min height [m] | 0.5 | ≥0.0 |
| obstacle_ |
float | Min size | 10 | ≥0.0 |
| obstacle_ |
float | Max size | 10000 | ≥0.0 |
| obstacle_ |
boolean | Enable RSS-based stop logic | true | N/A |
| obstacle_ |
float | Deceleration for car type objects [m/s^2] | 1.5 | ≥0.0 |
| obstacle_ |
float | Deceleration for truck type objects [m/s^2] | 1.5 | ≥0.0 |
| obstacle_ |
float | Deceleration for bus type objects [m/s^2] | 1.5 | ≥0.0 |
| obstacle_ |
float | Deceleration for trailer type objects [m/s^2] | 1.5 | ≥0.0 |
| obstacle_ |
float | Deceleration for motorcycle type objects [m/s^2] | 3.0 | ≥0.0 |
| obstacle_ |
float | Deceleration for bicycle type objects [m/s^2] | 5.0 | ≥0.0 |
| obstacle_ |
float | Deceleration for pedestrian type objects [m/s^2] | 5.0 | ≥0.0 |
| obstacle_ |
float | Deceleration for ego vehicle used in RSS calculation [m/s^2] | 4.0 | ≥0.0 |
| obstacle_ |
float | Reaction time used in RSS calculation [s] | 0.2 | ≥0.0 |
| obstacle_ |
float | Safety margin used in RSS calculation [m] | 2.0 | ≥0.0 |
| obstacle_ |
float | Lookahead horizon used in RSS calculation [s] | 1.5 | ≥0.0 |
| surround_ |
boolean | Enable surround obstacle stop | true | N/A |
| surround_ |
boolean | Enable the use of objects for surround obstacle stop | true | N/A |
| surround_ |
boolean | Enable the use of pointcloud for surround obstacle stop | false | N/A |
| surround_ |
array | Types of bounding box shaped objects to consider for surround obstacle stop | ["car", "truck", "bus", "trailer", "motorcycle", "bicycle", "pedestrian", "hazard", "animal", "unknown"] | N/A |
| surround_ |
array | Types of polygon shaped objects to consider for surround obstacle stop | ["car", "truck", "bus", "trailer", "pedestrian", "hazard", "animal", "unknown"] | N/A |
| surround_ |
float | Front surround check distance for car [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for truck [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for bus [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for trailer [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for motorcycle [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for bicycle [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for pedestrian [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for hazard [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for animal [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for unknown [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Front surround check distance for pointcloud [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for car [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for truck [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for bus [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for trailer [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for motorcycle [m] | 1.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for bicycle [m] | 1.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for pedestrian [m] | 1.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for hazard [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for animal [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for unknown [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Side surround check distance for pointcloud [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for car [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for truck [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for bus [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for trailer [m] | 0.0 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for motorcycle [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for bicycle [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for pedestrian [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for hazard [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for animal [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for unknown [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Back surround check distance for pointcloud [m] | 0.5 | ≥0.0 ≤10.0 |
| surround_ |
float | Distance hysteresis threshold for clearing surround stop [m] | 0.1 | ≥0.0 ≤10.0 |
| surround_ |
float | Time hysteresis threshold for clearing surround stop [s] | 0.2 | ≥0.0 ≤10.0 |
| surround_ |
float | Velocity threshold below which ego vehicle is considered stopped [m/s] | 0.1 | ≥0.0 ≤10.0 |
| velocity_ |
float | Nearest distance threshold [m] | 1.5 | ≥0.0 |
| velocity_ |
float | Nearest yaw threshold [deg] | 60.0 | ≥0.0 |
| velocity_ |
float | Target pull out speed [m/s] | 0.25 | ≥0.0 |
| velocity_ |
float | Target pull out acceleration [m/s^2] | 0.5 | ≥0.0 |
| velocity_ |
float | Max speed [m/s] | 13.88 | ≥0.0 |
| velocity_ |
float | Max lateral acceleration [m/s^2] | 1.5 | ≥0.0 |
| velocity_ |
boolean | Set engage speed at start | true | N/A |
| velocity_ |
boolean | Apply max speed limit | true | N/A |
| velocity_ |
boolean | Apply max lateral acceleration limit | false | N/A |
| velocity_ |
boolean | Apply jerk-filtered velocity smoothing | true | N/A |
| velocity_ |
float | Stop distance to prohibit engage [m] | 0.5 | ≥0.0 |
| post_ |
float | Max trajectory length for post-optimization resampling [m] | 300.0 | ≥0.0 |
| post_ |
float | Minimum trajectory length for post-optimization resampling [m] | 30.0 | ≥0.0 |
| post_ |
float | Resample total time [s] | 10.0 | ≥0.0 |
| post_ |
float | Dense sampling time interval [s] | 0.1 | ≥0.0 |
| post_ |
float | Dense sampling min interval [m] | 0.1 | ≥0.0 |
| post_ |
float | Sparse sampling time interval [s] | 0.1 | ≥0.0 |
| post_ |
float | Sparse sampling min interval [m] | 1.0 | ≥0.0 |
| debug. |
boolean | Enable path debugging | true | N/A |
| debug. |
boolean | Enable shifted trajectory debugging | true | N/A |
| debug. |
boolean | Enable optimizer trajectory debugging | true | N/A |
| debug. |
boolean | Enable modifier trajectory debugging | true | N/A |
| debug. |
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.