Skip to content

Enable generator-selector planning framework #6292

@xmfcx

Description

@xmfcx

Description

Current system

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    Planning["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectory(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    classDef class_msg fill:#9BE7DF,stroke:#008274;

    class MsgRoute,MsgTrajectory class_msg;
Loading

Proposed system

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"]
    MsgRoute --> PlannerAi["🤖 **AI-Based** Planner"]

    subgraph Generator["🛠️ **Generator**"]
        PlannerRobo -->
        MsgCandidateTrajectoryRobo(["✉️ /planning/generator/robotics_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
        TrajectoryConcat

        PlannerAi -->
        MsgCandidateTrajectoryAi(["✉️ /planning/generator/ai_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
        TrajectoryConcat
    end

    TrajectoryConcat[📎 Trajectory Concatenator] -->
    MsgCandidateTrajectories(["✉️ /planning/generator/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
    SafetyGate

    subgraph Selector["🔍 **Selector**"]
        SafetyGate["🛡️ Safety Gate"] -->
        TrafficRuleValidation["🚦 Traffic Rule Validation"] -->
        Ranking["📊 Ranking"] -->
        MsgScoredTrajectores(["✉️ /planning/selector/scored_candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/ScoredCandidateTrajectories**"]) -->
        TrajectoryAdapter[🔌 Trajectory Adapter]
    end

    TrajectoryAdapter -->
    MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_subgraph fill:#fce4ec,stroke:#8a002e;

    class MsgRoute,MsgCandidateTrajectoryRobo,MsgCandidateTrajectoryAi,MsgCandidateTrajectories,MsgScoredTrajectores,MsgTrajectory class_msg;
    class Generator,Selector class_subgraph;
Loading

Related discussions:

Timeline & Linked PRs

🟢 No breaking change 🔴 Breaking change

Phases

🟢 Phase 0 | New messages

  • Merge in the new message types to support the new architecture.

🟢 Phase 1 | 📅 2025-07-11 | Dual Publishing

  • Relay /planning/scenario_planning/trajectory to /planning/trajectory.
  • Both topics remain available for subscribers.

New diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectoryScenario(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    PlannerRobo --> MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"])

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_highlight fill:#78ff78,stroke:#008c00;

    class MsgRoute,MsgTrajectoryScenario class_msg;
    class MsgTrajectory class_highlight;
Loading

🔴 Phase 2 | 📅 2025-08-11 | Update Controller Input Topic

  • Update control-related nodes/tools to subscribe only to /planning/trajectory.
  • Monitor for any lingering dependencies on the old topic.

New Diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectoryScenario(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"])

    PlannerRobo --> MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_highlight fill:#78ff78,stroke:#008c00;

    class MsgRoute,MsgTrajectoryScenario class_msg;
    class MsgTrajectory class_highlight;

    class MsgRoute,MsgCandidateTrajectoryRobo,MsgCandidateTrajectoryAi,MsgCandidateTrajectories,MsgScoredTrajectores,MsgTrajectory class_msg;
Loading

🟢 Phase 3 | 📅 2025-08-30 | Add the Generator (Not used)

  • Add Diffusion Planner as an AI based alternative planner
  • Incorporate the Generator into Autoware without breaking changes
  • autoware_launch does NOT use the generator.
  • Generator publishes both /planning/trajectory and /planning/candidate_trajectories/ai_based for testing purposes.

New Diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectoryScenario(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"])

    PlannerRobo --> MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    MsgRoute --> PlannerAi

    subgraph Generator["🛠️ Generator (❌ Not used)"]
        PlannerAi["🌀 Diffusion Planner"]-->
        MsgCandidateTrajectoryAi(["✉️ /planning/generator/ai_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**<br>❌ Not used"])
    end
    PlannerAi --> MsgTrajectoryAi(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**<br>❌ Not used"])

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_highlight fill:#78ff78,stroke:#008c00;
    classDef class_subgraph fill:#fce4ec,stroke:#8a002e;

    class MsgRoute,MsgTrajectoryScenario,MsgTrajectory class_msg;
    class PlannerAi,MsgTrajectoryAi,MsgCandidateTrajectoryAi class_highlight;
    class Generator class_subgraph;
Loading

🟢 Phase 4 | 📅 2025-09-30 | Introduce Selector (Not used)

  • Incorporate the Selector into Autoware without breaking changes
  • autoware_launch does NOT use the Selector.
  • Generator does not publish /planning/trajectory anymore. It is published by the Trajectory Adapter from the Selector now.

New Diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectoryScenario(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"])

    PlannerRobo --> MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    MsgRoute --> PlannerAi

    subgraph Generator["🛠️ Generator (❌ Not used)"]
        PlannerAi["🌀 Diffusion Planner"] -->
        MsgCandidateTrajectoryAi(["✉️ /planning/generator/ai_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**<br>❌ Not used"]) -->
        TrajectoryConcat
    end

    TrajectoryConcat[📎 Trajectory Concatenator] -->
    MsgCandidateTrajectories(["✉️ /planning/generator/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
    SafetyGate

    subgraph Selector["🔍 **Selector** (❌ Not used)"]
        SafetyGate["🛡️ Safety Gate"] -->
        TrafficRuleValidation["🚦 Traffic Rule Validation"] -->
        Ranking["📊 Ranking"] -->
        MsgScoredTrajectores(["✉️ /planning/selector/scored_candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/ScoredCandidateTrajectories**"]) -->
        TrajectoryAdapter[🔌 Trajectory Adapter]
    end

    TrajectoryAdapter -->
    MsgTrajectory2(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**<br>❌ Not used"])

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_highlight fill:#78ff78,stroke:#008c00;
    classDef class_subgraph fill:#fce4ec,stroke:#8a002e;

    class MsgRoute,MsgTrajectoryScenario,MsgTrajectory,MsgCandidateTrajectoryAi class_msg;
    class TrajectoryConcat,MsgCandidateTrajectories,SafetyGate,TrafficRuleValidation,Ranking,MsgScoredTrajectores,TrajectoryAdapter,MsgTrajectoriesAi,MsgTrajectory2 class_highlight;
    class Generator,Selector class_subgraph;
Loading

🔴 Phase 5 | 📅 2025-10-15 | Enable Generator/Selector as an Option

  • autoware_launch is modified to use the Genarator and Selector as an alternative to the robotics-based planner.

New Diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"] -->
    MsgTrajectoryScenario(["✉️ /planning/scenario_planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"])

    PlannerRobo --> MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    MsgRoute --> PlannerAi

    subgraph Generator["🛠️ Generator (🔀 Optional)"]
        PlannerAi["🌀 Diffusion Planner"] -->
        MsgCandidateTrajectoryAi(["✉️ /planning/generator/andidate_trajectories/ai_based<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**<br>🔀 Optional"]) -->
        TrajectoryConcat
    end

    TrajectoryConcat[📎 Trajectory Concatenator] -->
    MsgCandidateTrajectories(["✉️ /planning/generator/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
    SafetyGate

    subgraph Selector["🔍 **Selector** (🔀 Optional)"]
        SafetyGate["🛡️ Safety Gate"] -->
        TrafficRuleValidation["🚦 Traffic Rule Validation"] -->
        Ranking["📊 Ranking"] -->
        MsgScoredTrajectores(["✉️ /planning/selector/scored_candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/ScoredCandidateTrajectories**"]) -->
        TrajectoryAdapter[🔌 Trajectory Adapter]
    end

    TrajectoryAdapter -->
    MsgTrajectory2(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**<br>🔀 Optional"])

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_highlight fill:#78ff78,stroke:#008c00;
    classDef class_subgraph fill:#fce4ec,stroke:#8a002e;

    class MsgRoute,MsgTrajectoryScenario,MsgTrajectory,MsgCandidateTrajectoryAi,MsgCandidateTrajectories,MsgScoredTrajectores,MsgTrajectoriesAi,MsgTrajectory2 class_msg;
    class Generator,Selector class_subgraph;
Loading

🔴 Phase 6 | 📅 2025-10-30 | Expand the Generator

  • The robotics-based planner is incorporated into the Generator.
  • The Selector uses the robotics-based planner by default.
  • The Diffusion Planner can be enabled as an option within autoware_launch.
  • /planning/scenario_planning/trajectory topic is deprecated.

New Diagram

---
config:
  theme: 'base'
  themeVariables:
    lineColor: '#7e7e7eff'
    primaryColor: '#fffde7ff'
    primaryTextColor: '#000000'
    primaryBorderColor: '#b3a400ff'
  flowchart:
    markdownAutoWrap: false
    wrappingWidth: 600
---

graph TD
    MissionPlanner[🗺️ Mission Planner] -->
    MsgRoute(["✉️ /planning/mission_planning/route<br>🗂️ **autoware_planning_msgs/msg/LaneletRoute**"]) -->
    PlannerRobo["⚙️ **Robotics-Based** Planner"]

    MsgRoute --> PlannerAi["🤖 **AI-Based** Planner<br>🔀 Optional"]

    subgraph Generator["🛠️ **Generator**"]
        PlannerRobo -->
        MsgCandidateTrajectoryRobo(["✉️ /planning/generator/robotics_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
        TrajectoryConcat[📎 Trajectory Concatenator]

        PlannerAi -->
        MsgCandidateTrajectoryAi(["✉️ /planning/generator/ai_based/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**<br>🔀 Optional"]) -->
        TrajectoryConcat
    end

    TrajectoryConcat -->
    MsgCandidateTrajectories(["✉️ /planning/generator/candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/CandidateTrajectories**"]) -->
    SafetyGate

    subgraph Selector["🔍 **Selector**"]
        SafetyGate["🛡️ Safety Gate"] -->
        TrafficRuleValidation["🚦 Traffic Rule Validation"] -->
        Ranking["📊 Ranking"] -->
        MsgScoredTrajectores(["✉️ /planning/selector/scored_candidate_trajectories<br>🗂️ **autoware_internal_planning_msgs/ScoredCandidateTrajectories**"]) -->
        TrajectoryAdapter[🔌 Trajectory Adapter]
    end

    TrajectoryAdapter -->
    MsgTrajectory(["✉️ /planning/trajectory<br>🗂️ **autoware_planning_msgs/msg/Trajectory**"]) -->
    Control["🎮 Control Component"]

    classDef class_msg fill:#9BE7DF,stroke:#008274;
    classDef class_subgraph fill:#fce4ec,stroke:#8a002e;

    class MsgRoute,MsgCandidateTrajectoryRobo,MsgCandidateTrajectoryAi,MsgCandidateTrajectories,MsgScoredTrajectores,MsgTrajectory class_msg;
    class Generator,Selector class_subgraph;
Loading

Metadata

Metadata

Labels

component:controlVehicle control algorithms and mechanisms.component:interfacesCommunication protocols, interfaces and messages.component:planningRoute planning, decision-making, and navigation.type:new-featureNew functionalities or additions, feature requests.

Type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions