Autoware Diffusion Planner#
Overview#
The Autoware Diffusion Planner is a trajectory generation module for autonomous vehicles, designed to work within the Autoware ecosystem. It leverages the Diffusion Planner model, as described in the paper "Diffusion-Based Planning for Autonomous Driving with Flexible Guidance" by Zheng et al.
This planner generates smooth, feasible, and safe trajectories by considering:
- Dynamic and static obstacles
- Vehicle kinematics
- User-defined constraints
- Lanelet2 map context
- Traffic signals and speed limits
It is implemented as a ROS 2 component node, making it easy to integrate into Autoware-based stacks. The node is aimed at working within the proposed Autoware new planning framework.
Features#
- ONNX Runtime inference for fast neural network execution
- ROS 2 publishers for planned trajectories, predicted objects, and debug markers
Parameters#
Name | Type | Description | Default | Range |
---|---|---|---|---|
plugins_path | string | Path to libautoware_tensorrt_plugins.so file for the diffusion planner | $(find-pkg-share autoware_tensorrt_plugins)/plugins/libautoware_tensorrt_plugins.so | N/A |
artifact_dir | string | Path to the Artifact(onnx model, etc.) directory | $(env HOME)/autoware_data/diffusion_planner | N/A |
onnx_model_path | string | Path to the ONNX model file for the diffusion planner | $(var artifact_dir)/diffusion_planner.onnx | N/A |
args_path | string | Path to model argument/configuration file | $(var artifact_dir)/diffusion_planner.param.json | N/A |
planning_frequency_hz | float | Planning frequency in Hz | 10.0 | >0 |
ignore_neighbors | boolean | Ignore neighbor agents | False | N/A |
ignore_unknown_neighbors | boolean | Ignore neighbor agents with unknown class | True | N/A |
predict_neighbor_trajectory | boolean | Predict trajectories for neighbor agents | True | N/A |
update_traffic_light_group_info | boolean | Enable updating of traffic light group info | True | N/A |
traffic_light_group_msg_timeout_seconds | float | Timeout for traffic light group messages (seconds) | 0.2 | >0 |
use_route_handler | boolean | Use route handler for selecting route segment indices | True | N/A |
build_only | boolean | On build only, do not run the planner | False | N/A |
batch_size | integer | Batch size for multi-batch inference | 1 | ≥1 |
temperature | array | List of temperature for sampling trajectories. Its length must be the same as batch_size . Each value means the coefficient of the standard normal distribution which is used for each initial noise of corresponding batch index. val = N(0,1) * temperature |
[0.5] | N/A |
velocity_smoothing_window | integer | Window size for velocity smoothing. Set to 1 to disable smoothing. | 1 | ≥1 |
debug_params.publish_debug_map | boolean | Publish debug map markers | False | N/A |
debug_params.publish_debug_route | boolean | Publish debug route markers | False | N/A |
Parameters can be set via YAML (see config/diffusion_planner.param.yaml
).
Inputs#
Topic | Message Type | Description |
---|---|---|
~/input/odometry |
nav_msgs/msg/Odometry | Ego vehicle odometry |
~/input/acceleration |
geometry_msgs/msg/AccelWithCovarianceStamped | Ego acceleration |
~/input/tracked_objects |
autoware_perception_msgs/msg/TrackedObjects | Detected dynamic objects |
~/input/traffic_signals |
autoware_perception_msgs/msg/TrafficLightGroupArray | Traffic light states |
~/input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | Lanelet2 map |
~/input/route |
autoware_planning_msgs/msg/LaneletRoute | Route information |
Outputs#
Topic | Message Type | Description |
---|---|---|
~/output/trajectory |
autoware_planning_msgs/msg/Trajectory | Planned trajectory for the ego vehicle |
~/output/trajectories |
autoware_internal_planning_msgs/msg/CandidateTrajectories | Multiple candidate trajectories |
~/output/predicted_objects |
autoware_perception_msgs/msg/PredictedObjects | Predicted future states of dynamic objects |
~/debug/lane_marker |
visualization_msgs/msg/MarkerArray | Lane debug markers |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | Route debug markers |
Testing#
Unit tests are provided and can be run with:
colcon test --packages-select autoware_diffusion_planner
colcon test-result --all
ONNX Model and Versioning#
The Diffusion Planner relies on an ONNX model for inference.
To ensure compatibility between models and the ROS 2 node implementation, the model versioning scheme follows major and minor numbers:
The model version is defined either by the directory name provided to the node or within the diffusion_planner.param.json
configuration file.
-
Major version
Incremented when there are changes in the model inputs/outputs or architecture.Models with different major versions are not compatible with the current ROS node.
- Minor version
Incremented when only the weight files are updated.
As long as the major version matches, the node remains compatible, and the new model can be used directly.
To download the latest model, simply run the provided setup script:
How to set up a development environment
Model Version History#
Version | Release Date | Notes | ROS Node Compatibility |
---|---|---|---|
0.1 | 2025/07/05 | - First public release - Route planning based on TIER IV real data |
NG |
1.0 | 2025/09/12 | - Route Termination learning - Output turn-signal (indicator) - Lane type integration in HD map for improved accuracy - Added datasets: - Synthetic Data: 4.0M points - Real Data: 1.5M points |
OK |
Development & Contribution#
- Follow the Autoware coding guidelines.
- Contributions, bug reports, and feature requests are welcome via GitHub issues and pull requests.
References#
- Diffusion Planner (original repo)
- Diffusion planner (our fork of the previous repo, used to train the model)
- "Diffusion-Based Planning for Autonomous Driving with Flexible Guidance"
License#
This package is released under the Apache 2.0 License.