Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_mission_planner at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Ryohsuke Mitsudome
- Taiki Yamada
- Mamoru Sobue
- Kosuke Takeuchi
Authors
- Takamasa Horibe
- Takayuki Murooka
- Ryohsuke Mitsudome
- Takagi, Isamu
Mission Planner
Purpose
Mission Planner calculates a route that navigates from the current ego pose to the goal pose following the given check points.
The route is made of a sequence of lanes on a static map.
Dynamic objects (e.g. pedestrians and other vehicles) and dynamic map information (e.g. road construction which blocks some lanes) are not considered during route planning.
Therefore, the output topic is only published when the goal pose or check points are given and will be latched until the new goal pose or check points are given.
The core implementation does not depend on a map format. Any planning algorithms can be added as plugin modules. In current Autoware Universe, only the plugin for Lanelet2 map format is supported.
Interfaces
Parameters
| Name | Type | Description |
|---|---|---|
map_frame |
string | The frame name for map |
arrival_check_angle_deg |
double | Angle threshold for goal check |
arrival_check_distance |
double | Distance threshold for goal check |
arrival_check_duration |
double | Duration threshold for goal check |
goal_angle_threshold |
double | Max goal pose angle for goal approve |
enable_correct_goal_pose |
bool | Enabling correction of goal pose according to the closest lanelet orientation |
reroute_time_threshold |
double | If the time to the rerouting point at the current velocity is greater than this threshold, rerouting is possible |
minimum_reroute_length |
double | Minimum Length for publishing a new route |
consider_no_drivable_lanes |
bool | This flag is for considering no_drivable_lanes in planning or not. |
allow_reroute_in_autonomous_mode |
bool | This is a flag to allow reroute in autonomous driving mode. If false, reroute fails. If true, only safe reroute is allowed |
Services
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/mission_planner/clear_route |
autoware_internal_planning_msgs/srv/ClearRoute | route clear request |
/planning/mission_planning/mission_planner/set_waypoint_route |
autoware_internal_planning_msgs/srv/SetWaypointRoute | route request with lanelet waypoints. |
/planning/mission_planning/mission_planner/set_lanelet_route |
autoware_internal_planning_msgs/srv/SetLaneletRoute | route request with pose waypoints. |
Subscriptions
| Name | Type | Description |
|---|---|---|
input/vector_map |
autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 |
input/operation_mode_state |
autoware_adapi_v1_msgs/OperationModeState | operation mode state |
input/odometry |
nav_msgs/msg/Odometry | vehicle odometry |
Publications
| Name | Type | Description |
|---|---|---|
/planning/mission_planning/state |
autoware_internal_planning_msgs/msg/RouteState | route state |
/planning/mission_planning/route |
autoware_planning_msgs/LaneletRoute | route |
~/debug/route_marker |
visualization_msgs/msg/MarkerArray | route marker for debug |
~/debug/goal_footprint |
visualization_msgs/msg/MarkerArray | goal footprint for debug |
Route section
Route section, whose type is autoware_planning_msgs/LaneletSegment, is a “slice” of a road that bundles lane changeable lanes.
Note that the most atomic unit of route is autoware_planning_msgs/LaneletPrimitive, which has the unique id of a lane in a vector map and its type.
Therefore, route message does not contain geometric information about the lane since we did not want to have planning module’s message to have dependency on map data structure.
The ROS message of route section contains following three elements for each route section.
-
preferred_primitive: Preferred lane to follow towards the goal. -
primitives: All neighbor lanes in the same direction including the preferred lane.
Goal Validation
The mission planner has control mechanism to validate the given goal pose and create a route. If goal pose angle between goal pose lanelet and goal pose’ yaw is greater than goal_angle_threshold parameter, the goal is rejected.
Another control mechanism is the creation of a footprint of the goal pose according to the dimensions of the vehicle and checking whether this footprint is within the lanelets. If goal footprint exceeds lanelets, then the goal is rejected.
At the image below, there are sample goal pose validation cases.
Implementation
Mission Planner
Two callbacks (goal and check points) are a trigger for route planning. Routing graph, which plans route in Lanelet2, must be created before those callbacks, and this routing graph is created in vector map callback.
plan route is explained in detail in the following section.
```plantuml @startuml title goal callback start
:clear previously memorized check points;
:memorize ego and goal pose as check points;
if (routing graph is ready?) then (yes) else (no) stop endif
:plan route;
File truncated at 100 lines see the full file
Changelog for package autoware_mission_planner
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
refactor(autoware_mission_planner): decouple core planning logic from ROS 2 node (#1400)
- refactor(autoware_mission_planner): decouple core logic
- refactor(autoware_mission_planner): move MissionPlannerNode into mission_planner_node.cpp
- refactor(autoware_mission_planner): rename planner_warning_message to warning_message
* fix(autoware_mission_planner): guard optional access in MissionPlannerNode Fix bugprone-unchecked-optional-access errors reported by clang-tidy CI. Dereferences of InitializationCheckResult::waiting_message, SetLaneletRouteResult::route/route_marker, and SetWaypointRouteResult::route/route_marker were guarded by checks on unrelated fields (became_ready, status.success), which clang-tidy's dataflow analysis cannot connect to the optionals being dereferenced. Guard on the optionals themselves instead.
* refactor(autoware_mission_planner): simplify check_initialization to return bool Return a plain bool from MissionPlanner::check_initialization() instead of InitializationCheckResult, and move the waiting-state info log to the node side with a unified message.
- fix(autoware_mission_planner): update composable node plugin name to MissionPlannerNode
- refactor(autoware_mission_planner): decouple error logging from route validity check
* refactor(autoware_mission_planner): pass tf2::BufferCore into MissionPlanner Move the map-frame transform lookup for set_lanelet_route and set_waypoint_route from MissionPlannerNode into MissionPlanner itself, following the tf2::BufferCore injection pattern used in autowarefoundation/autoware_universe#13270. tf2::BufferCore has no ROS runtime dependency, so this keeps mission_planner.cpp free of rclcpp::Node/Logger while removing the duplicated try/catch lookup that previously lived in both service handlers. ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
fix(planning): declare the dependencies these packages use (#1372) Each of these packages uses a package it never declares. Either it includes a header of that package, or it names a symbol of it while the header arrives through another dependency. Both build today only because some declared dependency re-exports the owner, so a change in an unrelated repository can break them without anything here changing. The tag follows where the dependency is used: a use in an installed header or in code compiled into the library takes <depend>, one reached only from test/ takes <test_depend>. System libraries are named by the rosdep key this workspace already prefers. A clean-context review of the pull request found five more direct uses with no manifest entry. Add one entry for each:
- autoware_path_generator: tf2 (tf2::getYaw in src/utils.cpp)
- autoware_motion_velocity_planner_common: tf2 (tf2::getYaw in src/planner_data.cpp and src/polygon_utils.cpp)
- autoware_motion_velocity_obstacle_stop_module: autoware_planning_factor_interface (constructed in src/obstacle_stop_module.cpp)
- autoware_behavior_velocity_stop_line_module: autoware_planning_factor_interface (used in src/experimental/scene.cpp)
- autoware_velocity_smoother: rclcpp_components (register_node_macro.hpp in src/node.cpp)
-
refactor(autoware_mission_planner): create endpoints through NodeAdaptor (#1327)
-
refactor(autoware_mission_planner): remove pluginlib and decouple DefaultPlanner from rclcpp::Node (#1334)
* refactor(autoware_mission_planner): remove pluginlib and construct DefaultPlanner directly DefaultPlanner was the only implementation of PlannerPlugin and its class name was hardcoded, so pluginlib's dynamic class loading added runtime overhead without providing runtime plugin selection.
* refactor(autoware_mission_planner): remove PlannerPlugin abstract base class DefaultPlanner is now constructed directly instead of via pluginlib, so the PlannerPlugin interface no longer serves runtime polymorphism and had no other implementation.
* refactor(autoware_mission_planner): remove unused initialize overload The initialize(node, msg) overload had no callers; fold initialize_common back into the single initialize(node).
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
| Name |
|---|
| libboost-dev |
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_planning |
Launch files
- launch/goal_pose_visualizer.launch.xml
-
- route_topic_name [default: /planning/mission_planning/route]
- echo_back_goal_pose_topic_name [default: /planning/mission_planning/echo_back_goal_pose]
- launch/mission_planner.launch.xml
-
- map_topic_name [default: /map/vector_map]
- visualization_topic_name [default: /planning/mission_planning/route_marker]
- mission_planner_param_path [default: $(find-pkg-share autoware_mission_planner)/config/mission_planner.param.yaml]