Skip to content

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#

  • Diffusion-based trajectory generation for flexible and robust planning

    Diffusion-Based trajectory generation

  • Integration with Lanelet2 maps for lane-level context

    Lanelet Map Integration

  • Dynamic and static obstacle handling using perception inputs

    Static Agent Reaction

    Diffusion Planner

  • Traffic signal and speed limit awareness

    Traffic Light Support

  • 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#


License#

This package is released under the Apache 2.0 License.