From f37f9006b0c4d865998de6cec1f70a6f8615bee7 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 6 Dec 2023 14:56:45 +0900 Subject: [PATCH 1/4] docs(planning-design-document): update overall description Signed-off-by: Takamasa Horibe --- .../high-level-planning-diagram.drawio.svg | 646 ++++-- .../image/how-to-add-new-modules.drawio.svg | 1755 +++++++++++++++++ .../image/planning-diagram-tmp.drawio.svg | 1600 +++++++++++++++ ...-implementation-add-new-modules.drawio.svg | 1116 +++++++++++ .../autoware-architecture/planning/index.md | 260 ++- 5 files changed, 5094 insertions(+), 283 deletions(-) create mode 100644 docs/design/autoware-architecture/planning/image/how-to-add-new-modules.drawio.svg create mode 100644 docs/design/autoware-architecture/planning/image/planning-diagram-tmp.drawio.svg create mode 100644 docs/design/autoware-architecture/planning/image/reference-implementation-add-new-modules.drawio.svg diff --git a/docs/design/autoware-architecture/planning/image/high-level-planning-diagram.drawio.svg b/docs/design/autoware-architecture/planning/image/high-level-planning-diagram.drawio.svg index bbf860704b2..c0b8b6a61b0 100644 --- a/docs/design/autoware-architecture/planning/image/high-level-planning-diagram.drawio.svg +++ b/docs/design/autoware-architecture/planning/image/high-level-planning-diagram.drawio.svg @@ -1,263 +1,294 @@ - + - - - + -
+
-
- Localization -
-
- Component -
+
+ Legend
- - Localization... + + Legend - + + -
+
- Perception -
- Component + API Layer
- - Perception... + + API Layer - - - + + + + -
+
- Human -
- Machine -
- Interface + Control Component
- - Human... + + Control Component - + + + -
+
- API Layer + Planning (Sub) Components
- - API Layer + + Planning (Sub) Components - - - - - - + -
+
- - Mission Planning - + Planning Modules
- - Mission Planning + + Planning Modules - + -
-
+
+
- -
- Scenario Planning -
+ Other Components
- - Scenario Planning + + Other Components - + + + + -
+
-
- -
- Lane Driving Scenario -
+
+
+ Localization +
+
+ Component +
- - Lane Driving Scenario + + Localization... - - - + + -
+
-
+
+ Perception +
+ Component +
+
+
+ + + Perception... + + + + + + + + + + +
+
+
+ Human +
+ Machine +
+ Interface +
+
+
+
+ + Human... + +
+
+ + + + + + + +
+
+
-
- Parking Scenario + Mission Planning
- - Parking Scenario + + Mission Planning
- - - + + -
+
-
+
- Behavior Planning +
+
- - Behavior Planning + + ... - - - + + + -
+
-
+
- Motion Planning + Behavior
- - Motion Planning + + Behavior - - - + -
+
-
+
- Validation + Motion
- - Validation + + Motion - + + -
+
-
- Control Component +
+ + Validation +
- - Control Component + + Validation - - + -
+
-
+
Planning Component @@ -265,20 +296,19 @@
- + Planning Component - - - + + -
+
-
+
System
@@ -289,20 +319,19 @@
- + System... - - - + + -
+
-
+
Map
Component @@ -310,18 +339,19 @@
- + Map... - + + -
+
-
+
Lane Change
@@ -329,18 +359,19 @@
- + Lane Change - + + -
+
-
+
Intersection
@@ -348,18 +379,19 @@
- + Intersection - + + -
+
-
+
Crosswalk
@@ -367,18 +399,19 @@
- + Crosswalk - + + -
+
-
+
etc...
@@ -386,132 +419,267 @@
- + etc... - + + -
+
-
+
- Path Smooth + Path Planning
- - Path Smooth + + Path Planning - + + -
+
-
+
- Velocity Smooth + Velocity Planning
- - Velocity Smooth + + Velocity Planning - + + -
+
-
+
- Collision Check + Obstacle Stop
- - Collision Check + + Obstacle Stop - + + -
+
-
+
- etc... + ML Planner
- - etc... + + ML Planner - + + + + + + + + + + -
+
-
+
- Free Space + Route Planning
- - Free Space + + Route Planning - + + -
+
-
+
- Cost map + Avoidance
- - Cost map + + Avoidance - + + -
+
-
+
+
+ Pull Over +
+
+
+
+ + + Pull Over + + + + + + + + +
+
+
+
+ Drivable Area +
+
+
+
+
+ + Drivable Area + +
+
+ + + + + +
+
+
+
+ Slow Down +
+
+
+
+
+ + Slow Down + +
+
+ + + + + +
+
+
+
+ Stop Line +
+
+
+
+
+ + Stop Line + +
+
+ + + + + +
+
+
+
+ Parking +
+
+
+
+
+ + Parking + +
+
+ + + + + +
+
+
+
+ Freespace +
+
+
+
+
+ + Freespace + +
+
+ + + + + +
+
+
etc...
@@ -519,57 +687,139 @@
- + etc... - - - - - - - - - + + + + -
+
-
+
- Trajectory Validation + Goal Planning
- - Trajectory Validation + + Goal Planning - + + -
+
-
+
- Route Planning + etc...
- - Route Planning + + etc... + + + + + + + + +
+
+
+
+ Collision Check +
+
+
+
+
+ + Collision Check + +
+
+ + + + + +
+
+
+
+ TTC Check +
+
+
+
+
+ + TTC Check + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + +
+
+
+
+ Confortability +
+
+
+
+
+ + Confortability
+ + + + + + diff --git a/docs/design/autoware-architecture/planning/image/how-to-add-new-modules.drawio.svg b/docs/design/autoware-architecture/planning/image/how-to-add-new-modules.drawio.svg new file mode 100644 index 00000000000..255e7a3cef1 --- /dev/null +++ b/docs/design/autoware-architecture/planning/image/how-to-add-new-modules.drawio.svg @@ -0,0 +1,1755 @@ + + + + + + + +
+
+
+ Replace the entier planning component +
+
+
+
+ + Replace the entier planning component + +
+
+ + + + +
+
+
+ Replace the planning sub-component, +
+ or add a new scenario component +
+
+
+
+ + Replace the planning sub-component,... + +
+
+ + + + +
+
+
+ Add or replace with new planning modules +
+
+
+
+ + Add or replace with new planning modules + +
+
+ + + + + +
+
+
+ API Layer +
+
+
+
+ + API Layer + +
+
+ + + + + + + +
+
+
+ Control Component +
+
+
+
+ + Control Component + +
+
+ + + + + + + + + + +
+
+
+
+ Localization +
+
+ Component +
+
+
+
+
+ + Localization... + +
+
+ + + + + +
+
+
+ Perception +
+ Component +
+
+
+
+ + Perception... + +
+
+ + + + + + + +
+
+
+ Human +
+ Machine +
+ Interface +
+
+
+
+ + Human... + +
+
+ + + + + + +
+
+
+ + Planning Component + +
+
+
+
+ + Planning Component + +
+
+ + + + + +
+
+
+
+ System +
+
+ Component +
+
+
+
+
+ + System... + +
+
+ + + + + +
+
+
+ Map +
+ Component +
+
+
+
+ + Map... + +
+
+ + + + + + + + + + + + +
+
+
+ + + Third-party Planning Component + + +
+
+
+
+ + Third-party Planning Component + +
+
+ + + + + + + + + +
+
+
+ API Layer +
+
+
+
+ + API Layer + +
+
+ + + + + + + +
+
+
+ Control Component +
+
+
+
+ + Control Component + +
+
+ + + + + + + + + +
+
+
+
+ Localization +
+
+ Component +
+
+
+
+
+ + Localization... + +
+
+ + + + + +
+
+
+ Perception +
+ Component +
+
+
+
+ + Perception... + +
+
+ + + + + + + +
+
+
+ Human +
+ Machine +
+ Interface +
+
+
+
+ + Human... + +
+
+ + + + + + + +
+
+
+ +
+
+
+
+
+
+
+ + ... + +
+
+ + + + + + +
+
+
+ + Behavior + +
+
+
+
+ + Behavior + +
+
+ + + + +
+
+
+ + Motion + +
+
+
+
+ + Motion + +
+
+ + + + + +
+
+
+ + Validation + +
+
+
+
+ + Validation + +
+
+ + + + +
+
+
+ + Planning Component + +
+
+
+
+ + Planning Component + +
+
+ + + + + +
+
+
+
+ System +
+
+ Component +
+
+
+
+
+ + System... + +
+
+ + + + + +
+
+
+ Map +
+ Component +
+
+
+
+ + Map... + +
+
+ + + + + +
+
+
+
+ Lane Change +
+
+
+
+
+ + Lane Change + +
+
+ + + + + +
+
+
+
+ Intersection +
+
+
+
+
+ + Intersection + +
+
+ + + + + +
+
+
+
+ Crosswalk +
+
+
+
+
+ + Crosswalk + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + +
+
+
+
+ Path Planning +
+
+
+
+
+ + Path Planning + +
+
+ + + + + +
+
+
+
+ Velocity Planning +
+
+
+
+
+ + Velocity Planning + +
+
+ + + + + +
+
+
+
+ Obstacle Stop +
+
+
+
+
+ + Obstacle Stop + +
+
+ + + + + +
+
+
+
+ ML Planner +
+
+
+
+
+ + ML Planner + +
+
+ + + + + + + + + + + + + +
+
+
+
+ Avoidance +
+
+
+
+
+ + Avoidance + +
+
+ + + + + +
+
+
+
+ Pull Over +
+
+
+
+
+ + Pull Over + +
+
+ + + + + +
+
+
+
+ Drivable Area +
+
+
+
+
+ + Drivable Area + +
+
+ + + + + +
+
+
+
+ Slow Down +
+
+
+
+
+ + Slow Down + +
+
+ + + + + +
+
+
+
+ Stop Line +
+
+
+
+
+ + Stop Line + +
+
+ + + + + +
+
+
+
+ Parking +
+
+
+
+
+ + Parking + +
+
+ + + + + +
+
+
+
+ Freespace +
+
+
+
+
+ + Freespace + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + + + +
+
+
+
+ Collision Check +
+
+
+
+
+ + Collision Check + +
+
+ + + + + +
+
+
+
+ TTC Check +
+
+
+
+
+ + TTC Check + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + +
+
+
+
+ Confortability +
+
+
+
+
+ + Confortability + +
+
+ + + + + +
+
+
+ + + Third-party Planning Component + + +
+
+
+
+ + Third-party Planning Component + +
+
+ + + + + + + + + + +
+
+
+ API Layer +
+
+
+
+ + API Layer + +
+
+ + + + + + + +
+
+
+ Control Component +
+
+
+
+ + Control Component + +
+
+ + + + + + + + + +
+
+
+
+ Localization +
+
+ Component +
+
+
+
+
+ + Localization... + +
+
+ + + + + +
+
+
+ Perception +
+ Component +
+
+
+
+ + Perception... + +
+
+ + + + + + + +
+
+
+ Human +
+ Machine +
+ Interface +
+
+
+
+ + Human... + +
+
+ + + + + + + +
+
+
+ + Mission Planning + +
+
+
+
+ + Mission Planning + +
+
+ + + + + +
+
+
+ +
+
+
+
+
+
+
+ + ... + +
+
+ + + + + + +
+
+
+ + Behavior + +
+
+
+
+ + Behavior + +
+
+ + + + +
+
+
+ + Motion + +
+
+
+
+ + Motion + +
+
+ + + + + +
+
+
+ + Validation + +
+
+
+
+ + Validation + +
+
+ + + + +
+
+
+ + Planning Component + +
+
+
+
+ + Planning Component + +
+
+ + + + + +
+
+
+
+ System +
+
+ Component +
+
+
+
+
+ + System... + +
+
+ + + + + +
+
+
+ Map +
+ Component +
+
+
+
+ + Map... + +
+
+ + + + + +
+
+
+
+ Lane Change +
+
+
+
+
+ + Lane Change + +
+
+ + + + + +
+
+
+
+ Intersection +
+
+
+
+
+ + Intersection + +
+
+ + + + + +
+
+
+
+ Crosswalk +
+
+
+
+
+ + Crosswalk + +
+
+ + + + + +
+
+
+
+ Path Planning +
+
+
+
+
+ + Path Planning + +
+
+ + + + + +
+
+
+
+ Velocity Planning +
+
+
+
+
+ + Velocity Planning + +
+
+ + + + + +
+
+
+
+ Obstacle Stop +
+
+
+
+
+ + Obstacle Stop + +
+
+ + + + + +
+
+
+
+ + Third-party Module + +
+
+
+
+
+
+ + Third-party Modu... + +
+
+ + + + + + + + + + + + + +
+
+
+
+ Route Planning +
+
+
+
+
+ + Route Planning + +
+
+ + + + + +
+
+
+
+ Avoidance +
+
+
+
+
+ + Avoidance + +
+
+ + + + + +
+
+
+
+ Pull Over +
+
+
+
+
+ + Pull Over + +
+
+ + + + + +
+
+
+
+ Drivable Area +
+
+
+
+
+ + Drivable Area + +
+
+ + + + + +
+
+
+
+ Slow Down +
+
+
+
+
+ + Slow Down + +
+
+ + + + + +
+
+
+
+ Stop Line +
+
+
+
+
+ + Stop Line + +
+
+ + + + + +
+
+
+ Third-party Module +
+
+
+
+ + Third-party Module + +
+
+ + + + + +
+
+
+
+ Freespace +
+
+
+
+
+ + Freespace + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + + + +
+
+
+
+ Goal Planning +
+
+
+
+
+ + Goal Planning + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + +
+
+
+
+ Collision Check +
+
+
+
+
+ + Collision Check + +
+
+ + + + + +
+
+
+
+ TTC Check +
+
+
+
+
+ + TTC Check + +
+
+ + + + + +
+
+
+
+ etc... +
+
+
+
+
+ + etc... + +
+
+ + + + + +
+
+
+
+ Third-party Module +
+
+
+
+
+
+ + Third-party Module + +
+
+ + + + + + + + + + +
+
+
+
+ My Module 1 +
+
+
+
+
+ + My Module 1 + +
+
+ + + + + +
+
+
+
+ My Module 2 +
+
+
+
+
+ + My Module 2 + +
+
+ + + + + +
+
+
+
+ My Module 3 +
+
+
+
+
+ + My Module 3 + +
+
+
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/docs/design/autoware-architecture/planning/image/planning-diagram-tmp.drawio.svg b/docs/design/autoware-architecture/planning/image/planning-diagram-tmp.drawio.svg new file mode 100644 index 00000000000..a0bf68c99c2 --- /dev/null +++ b/docs/design/autoware-architecture/planning/image/planning-diagram-tmp.drawio.svg @@ -0,0 +1,1600 @@ + + + + + + + + + + + + + + +
+
+
+ Parking Scenario +
+
+
+
+ + Parking Scenario + +
+
+ + + + + + + +
+
+
+ route +
+
+
+
+ + route + +
+
+ + + + + +
+
+
+ mission_planner +
+
+
+
+ + mission_planner + +
+
+
+ + + + + +
+
+
+ path_with_lane_id +
+
+
+
+ + path_with_lane_id + +
+
+ + + + + + + + +
+
+
+ path +
+
+
+
+ + path + +
+
+ + + + + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ obstacle_ +
+ avoidance_planner +
+
+
+
+ + obstacle_... + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ obstacle_velocity_limiter +
+
+
+
+ + obstacle_velocity_limiter + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ scenario_selector +
+
+
+
+ + scenario_selector + +
+
+
+ + + + + +
+
+
+ + Trajectory + +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ motion_velocity_ +
+ smoother +
+
+
+
+ + motion_velocity_... + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ freespace_planner +
+
+
+
+ + freespace_planner + +
+
+
+ + + + + +
+
+
+ occupancy_grid +
+
+
+
+ + occupancy_grid + +
+
+ + + + + +
+
+
+ costmap_generator +
+
+
+
+ + costmap_generator + +
+
+
+ + + + +
+
+
+ behavior +
+ velocity +
+ planner +
+
+
+
+ + behavior... + +
+
+ + + + +
+
+
+ behavior +
+ path +
+ planner +
+
+
+
+ + behavior... + +
+
+ + + + + +
+
+
+ goal +
+
+
+
+ + goal + +
+
+ + + + + + +
+
+
+ obstacle +
+ stop +
+ planner +
+
+
+
+ + obstacle... + +
+
+ + + + +
+
+
+ slow_down +
+
+
+
+ + slow_down + +
+
+ + + + +
+
+
+ adaptive_cruise +
+
+
+
+ + adaptive_cruise + +
+
+ + + + +
+
+
+ stop +
+
+
+
+ + stop + +
+
+ + + + +
+
+
+ LaneDriving Scenario +
+
+
+
+ + LaneDriving Sce... + +
+
+ + + + +
+
+
+ + + Behavior Planning + + +
+
+
+
+ + Behavior Planning + +
+
+ + + + +
+
+
+ + + Motion Planning + + +
+
+
+
+ + Motion Planning + +
+
+ + + + + + + + +
+
+
+ To Control +
+
+
+
+ + To Control + +
+
+ + + + + +
+
+
+ vector_map +
+
+
+
+ + vector_map + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ Obstacle Points +
+
+
+
+ + Obstacle Points + +
+
+ + + + + +
+
+
+ Obstacle Points +
+
+
+
+ + Obstacle Points + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ Obstacle Points +
+
+
+
+ + Obstacle Points + +
+
+ + + + + +
+
+
+ route (from mission_planner) +
+
+
+
+ + route (from mission_planner) + +
+
+ + + + + + + +
+
+
+ vehicle_state +
+
+
+
+ + vehicle_state + +
+
+ + + + +
+
+
+
+ Localization +
+
+
+
+
+ + Localization + +
+
+ + + + + +
+
+
+ approval, +
+ force_approval +
+
+
+
+ + approval,... + +
+
+ + + + + +
+
+
+ external_crosswalk_states, +
+ external_intersection_states, +
+ external_traffic_light_states +
+
+
+
+ + external_crosswalk_states,... + +
+
+ + + + +
+
+
+ Planning +
+
+
+
+ + Planning + +
+
+ + + + + +
+
+
+ Traffic Light States +
+
+
+
+ + Traffic Light States + +
+
+ + + + + +
+
+
+ expand_stop_range +
+
+
+
+ + expand_stop_range + +
+
+ + + + +
+
+
+ Perception +
+
+
+
+ + Perception + +
+
+ + + + + +
+
+
+ velocity_limit +
+
+
+
+ + velocity_limit + +
+
+ + + + +
+
+
+ Human +
+ Machine +
+ Interface +
+
+
+
+ + Human... + +
+
+ + + + + + + + +
+
+
+ external_velocity +
+ _limit_selector +
+
+
+
+ + external_velocity... + +
+
+ + + + + +
+
+
+ velocity_limit +
+
+
+
+
+ + velocity_l... + +
+
+ + + + +
+
+
+ avoidance +
+
+
+
+ + avoidance + +
+
+ + + + +
+
+
+ side_shift +
+
+
+
+ + side_shift + +
+
+ + + + +
+
+
+ lane_change +
+
+
+
+ + lane_change + +
+
+ + + + +
+
+
+ lane_following +
+
+
+
+ + lane_following + +
+
+ + + + +
+
+
+ pull_over +
+
+
+
+ + pull_over + +
+
+ + + + +
+
+
+ pull_out +
+
+
+
+ + pull_out + +
+
+ + + + +
+
+
+ blind_spot +
+
+
+
+ + blind_spot + +
+
+ + + + +
+
+
+ cross_walk +
+
+
+
+ + cross_walk + +
+
+ + + + +
+
+
+ stop_line +
+
+
+
+ + stop_line + +
+
+ + + + +
+
+
+ traffic_light +
+
+
+
+ + traffic_light + +
+
+ + + + +
+
+
+ intersection +
+
+
+
+ + intersection + +
+
+ + + + +
+
+
+ detection_area +
+
+
+
+ + detection_area + +
+
+ + + + +
+
+
+ no_stopping_area +
+
+
+
+ + no_stopping_area + +
+
+ + + + +
+
+
+ virtual_traffic_light +
+
+
+
+ + virtual_traffic_light + +
+
+ + + + +
+
+
+ occlusion_spot +
+
+
+
+ + occlusion_spot + +
+
+ + + + +
+
+
+ run_out +
+
+
+
+ + run_out + +
+
+ + + + + +
+
+
+ check_point +
+
+
+
+ + check_point + +
+
+ + + + + +
+
+
+ vector_map +
+
+
+
+ + vector_map + +
+
+ + + + + +
+
+
+ surround_obstacle_checker +
+
+
+
+ + surround_obstacle_checker + +
+
+
+ + + + +
+
+
+ (from other planning modules) +
+
+
+
+ + (from othe... + +
+
+ + + + + +
+
+
+ Obstacle Points +
+
+
+
+ + Obstacle Points + +
+
+ + + + + +
+
+
+ Dynamic Objects +
+
+
+
+ + Dynamic Objects + +
+
+ + + + + +
+
+
+ + Trajectory + +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ planning_validator +
+
+
+
+ + planning_validator + +
+
+
+ + + + +
+
+
+ API Layer +
+
+
+
+ + API Layer + +
+
+ + + + +
+
+
+ Map +
+
+
+
+ + Map + +
+
+ + + + +
+
+
+ Map +
+
+
+
+ + Map + +
+
+ + + + +
+
+
+ Perception +
+
+
+
+ + Perception + +
+
+ + + + +
+
+
+ Mission Planning +
+
+
+
+ + Mission Planning + +
+
+ + + + +
+
+
+ Validation +
+
+
+
+ + Validation + +
+
+ + + + +
+
+
+ no_drivable_lane +
+
+
+
+ + no_drivable_lane + +
+
+ + + + + +
+
+
+ Legend +
+
+
+
+ + Legend + +
+
+ + + + +
+
+
+ Component +
+
+
+
+ + Component + +
+
+ + + + +
+
+
+ ROS Node +
+
+
+
+ + ROS Node + +
+
+ + + + +
+
+
+ Modlue Plugin +
+
+
+
+ + Modlue Plugin + +
+
+
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/docs/design/autoware-architecture/planning/image/reference-implementation-add-new-modules.drawio.svg b/docs/design/autoware-architecture/planning/image/reference-implementation-add-new-modules.drawio.svg new file mode 100644 index 00000000000..95b32fd914e --- /dev/null +++ b/docs/design/autoware-architecture/planning/image/reference-implementation-add-new-modules.drawio.svg @@ -0,0 +1,1116 @@ + + + + + + + + + + + + + + +
+
+
+ Parking Scenario +
+
+
+
+ + Parking Scenario + +
+
+ + + + + +
+
+
+ mission_planner +
+
+
+
+ + mission_planner + +
+
+
+ + + + + +
+
+
+ path_with_lane_id +
+
+
+
+ + path_with_lane_id + +
+
+ + + + + + + + +
+
+
+ path +
+
+
+
+ + path + +
+
+ + + + + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ obstacle_ +
+ avoidance_planner +
+
+
+
+ + obstacle_... + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ obstacle_velocity_limiter +
+
+
+
+ + obstacle_velocity_limiter + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ scenario_selector +
+
+
+
+ + scenario_selector + +
+
+
+ + + + + +
+
+
+ + Trajectory + +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ motion_velocity_smoother +
+
+
+
+ + motion_velocity_smoother + +
+
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ freespace_planner +
+
+
+
+ + freespace_planner + +
+
+
+ + + + + +
+
+
+ occupancy_grid +
+
+
+
+ + occupancy_grid + +
+
+ + + + + +
+
+
+ costmap_generator +
+
+
+
+ + costmap_generator + +
+
+
+ + + + +
+
+
+ behavior +
+ velocity +
+ planner +
+
+
+
+ + behavior... + +
+
+ + + + +
+
+
+ behavior +
+ path +
+ planner +
+
+
+
+ + behavior... + +
+
+ + + + + +
+
+
+ goal +
+
+
+
+ + goal + +
+
+ + + + +
+
+
+ obstacle +
+ stop +
+ planner +
+
+
+
+ + obstacle... + +
+
+ + + + +
+
+
+ slow_down +
+
+
+
+ + slow_down + +
+
+ + + + +
+
+
+ adaptive_cruise +
+
+
+
+ + adaptive_cruise + +
+
+ + + + +
+
+
+ stop +
+
+
+
+ + stop + +
+
+ + + + +
+
+
+ LaneDriving Scenario +
+
+
+
+ + LaneDriving Sce... + +
+
+ + + + +
+
+
+ + + Behavior Planning + + +
+
+
+
+ + Behavior Planning + +
+
+ + + + +
+
+
+ + + Motion Planning + + +
+
+
+
+ + Motion Planning + +
+
+ + + + +
+
+
+ To Control +
+
+
+
+ + To Control + +
+
+ + + + + +
+
+
+ route (from mission_planner) +
+
+
+
+ + route (from mission_planner) + +
+
+ + + + + + +
+
+
+ external_velocity +
+ _limit_selector +
+
+
+
+ + external_velocity... + +
+
+ + + + + +
+
+
+ velocity_limit +
+
+
+
+
+ + velocity_l... + +
+
+ + + + +
+
+
+ New Module 1 +
+
+
+
+ + New Module 1 + +
+
+ + + + +
+
+
+ New Module 2 +
+
+
+
+ + New Module 2 + +
+
+ + + + +
+
+
+ lane_change +
+
+
+
+ + lane_change + +
+
+ + + + +
+
+
+ lane_following +
+
+
+
+ + lane_following + +
+
+ + + + +
+
+
+ blind_spot +
+
+
+
+ + blind_spot + +
+
+ + + + +
+
+
+ cross_walk +
+
+
+
+ + cross_walk + +
+
+ + + + +
+
+
+ stop_line +
+
+
+
+ + stop_line + +
+
+ + + + +
+
+
+ traffic_light +
+
+
+
+ + traffic_light + +
+
+ + + + +
+
+
+ detection_area +
+
+
+
+ + detection_area + +
+
+ + + + +
+
+
+ New Module 3 +
+
+
+
+ + New Module 3 + +
+
+ + + + + +
+
+
+ check_point +
+
+
+
+ + check_point + +
+
+ + + + + +
+
+
+ surround_obstacle_checker +
+
+
+
+ + surround_obstacle_checker + +
+
+
+ + + + +
+
+
+ (from other planning modules) +
+
+
+
+ + (from othe... + +
+
+ + + + + +
+
+
+ + Trajectory + +
+
+
+
+ + Trajectory + +
+
+ + + + + +
+
+
+ planning_validator +
+
+
+
+ + planning_validator + +
+
+
+ + + + +
+
+
+ API Layer +
+
+
+
+ + API Layer + +
+
+ + + + +
+
+
+ Mission Planning +
+
+
+
+ + Mission Planning + +
+
+ + + + +
+
+
+ Validation +
+
+
+
+ + Validation + +
+
+ + + + +
+
+
+ New Module 4 +
+
+
+
+ + New Module 4 + +
+
+ + + + + +
+
+
+ Legend +
+
+
+
+ + Legend + +
+
+ + + + +
+
+
+ Component +
+
+
+
+ + Component + +
+
+ + + + +
+
+
+ ROS Node +
+
+
+
+ + ROS Node + +
+
+ + + + +
+
+
+ Modlue Plugin +
+
+
+
+ + Modlue Plugin + +
+
+ + + + +
+
+
+ New ROS Node +
+
+
+
+ + New ROS Node + +
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + +
+
+
+ New ROS Node +
+
+
+
+ + New ROS Node + +
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+ + + + +
+
+
+ New Scenario +
+
+
+
+ + New Scenario + +
+
+ + + + + +
+
+
+ Trajectory +
+
+
+
+ + Trajectory + +
+
+
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/docs/design/autoware-architecture/planning/index.md b/docs/design/autoware-architecture/planning/index.md index 1cfbd97c1a2..c7ca9f394d1 100644 --- a/docs/design/autoware-architecture/planning/index.md +++ b/docs/design/autoware-architecture/planning/index.md @@ -1,46 +1,104 @@ # Planning component design -## Overview +## Purpose -The Planning component generates the trajectory message that will be subscribed to by the Control component based on the environmental state obtained from the Localization and the Perception components. +The Planning Component in autonomous driving systems plays a crucial role in generating a target trajectory (path and speed) for autonomous vehicles. It ensures safety and adherence to traffic rules, fulfilling specific missions. -## Requirements +This document outlines the planning requirements and design within Autoware, aiding developers in comprehending the design and extendibility of the Planning Component. -The goal of the Planning component is to generate a trajectory (path and velocity) of the ego vehicle that is safe and well-regulated while satisfying the given mission. +The document is divided into two parts: the first part discusses high-level requirements and design, and the latter part focuses on actual implementations and functionalities provided. + +## Goals and non-goals + +Our objective extends beyond merely developing an autonomous driving system. We aim to offer an "autonomous driving platform" where users can enhance autonomous driving functionalities based on their individual needs. + +In Autoware, we utilize the [microautonomy architecture](https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-concepts) concept, which emphasizes high extensibility, functional modularity, and clearly defined interfaces. + +With this in mind, the design policy for the Planning Component is focused not on addressing every complex autonomous driving scenario (as that is a very challenging problem), but on **providing a customizable and easily extendable Planning development platform**. We believe this approach will allow the platform to meet a wide range of needs, ultimately solving many complex use cases. + +To clarify this policy, the Goals and Non-Goals are defined as follows: **Goals:** -- The basic functions are provided so that a simple ODD can be defined. -- The functionality is modularized to accommodate the third-party components. That is, a complicated or realistic ODD needs not be defined by the basic functions provided by default. -- The capability is extensible with the third-party components or the decision of human operators. -- The mechanism and policy are separated to allow the system or operators to change the behavior of the ego vehicle. Ultimately speaking, the policy can be set to crash an obstacle and the mechanism always follows. Otherwise, the system is not safe from the design point of view. +- **Ensuring essential functions for autonomous driving** + - Before extending its functionalities, the Planning Component must provide the essential features necessary for autonomous driving. This encompasses basic operations like moving, stopping, and turning, as well as handling lane changes and obstacle avoidance in relatively safe and simple contexts. +- **Modularized functionalities for user-driven extension** + - The system is designed to adapt to various Operational Design Domains (ODDs) with extended functionalities. Modularization, akin to plug-ins, allows for creating systems tailored to diverse needs, such as different levels of autonomous driving and varied vehicular or environmental applications (e.g., Lv4/Lv2 autonomous driving, public/private road driving, large vehicles, small robots). + - Reducing functionalities for specific ODDs, like obstacle-free private roads, is also a key aspect. This modular approach allows for reductions in power consumption or sensor requirements, aligning with specific user needs. +- **Enhancement through operator collaboration** + - Incorporating operator assistance is a critical aspect of functional expansion. It means that the system can adapt to complex and challenging scenarios with human support. The specific type of operator is not defined here. It might be a person accompanying in the vehicle during the prototype development phase or a remote operator connected in emergencies during autonomous driving services. **Non-goals:** -- The Planning component is not self-contained but can be extended with third parties. -- The Planning component is not aimed at the complete functionality and capability. -- The Planning component is not designed to always outperform human drivers. -- The Planning component is not capable of “never crashes”. +The Planning Component is designed to be extended with third-party modules. Consequently, the following are not the goals of Autoware's Planning Component: + +- To provide all user-required functionalities by default. +- Complete functionality and performance characteristic of an autonomous driving system. +- Performance that consistently surpasses human capabilities or ensures absolute safety. -## High-level architecture +These aspects are specific to our vision of an autonomous driving "platform" and may not apply to a typical autonomous driving Planning Component. -This diagram describes the high-level architecture of the Planning Component. +## High level design + +This diagram illustrates the high-level architecture of the Planning Component. This represents an idealized design, and current implementations might vary. Further details on implementations are provided in the latter sections of this document. ![overall-planning-architecture](image/high-level-planning-diagram.drawio.svg) -The Planning component consists of the following sub-components: +Following the principles of microautonomy architecture, we have adopted a modular system framework. The functions within the Planning domain are implemented as modules, dynamically or statically adaptable according to specific use cases. This includes modules for lane changes, intersection handling, and pedestrian crossings, among others. + +The Planning Component comprises several sub-components: + +- **Mission Planning**: This module calculates routes from the current location to the destination, utilizing map data. Its functionality is similar to that of Fleet Management Systems (FMS) or car navigation route planning. +- **Planning Modules**: These modules plans the vehicle's behavior for the assigned mission, including target trajectory, blinker signaling, etc. They are divided into Behavior and Motion categories: + - **Behavior**: Focuses on calculating safe and rule-compliant routes, managing decisions for lane changes, intersection entries, and stoppings at a stop line. + - **Motion**: Works in cooperate with Behavior modules to determine the vehicle's trajectory, considering its motion and ride comfort. It includes lateral and longitudinal planning for route shaping and speed calculation. +- **Validation**: Ensures the safety and appropriateness of the planned trajectories, with capabilities for emergency response. In cases where a planned trajectory is unsuitable, it triggers emergency protocols or generates alternative paths. + +### Highlights + +Key aspects of this high-level design include: + +#### Modulation of each function + +Essential Planning functions, such as route generation, lane changes, and intersection management, are modularized. These modules come with standardized interfaces, enabling easy addition or modification. More details on these interfaces will be discussed in subsequent sections. + +#### Separation of Mission Planning sub-component + +Mission Planning serves as a substitute for functions typically found in existing services like FMS (Fleet Management System). Adherence to defined interfaces in the high-level design facilitates easy integration with third-party services. + +#### Separation of Validation sub-component + +Given the extendable nature of the Planning Component, ensuring consistent safety levels across all functions is challenging. Therefore, the Validation function is managed independently from the core planning modules, maintaining a baseline of safety even for arbitrary changes of the planning modules. + +#### Interface for HMI (Human Machine Interface) + +The HMI is designed in high-level for smooth cooperation with human operators. These interfaces enable coordination between the Planning Component and operators, whether in-vehicle or remote. + +#### Trade-offs for the separation of planning and other components + +In Autoware's overarching design, the separation of components like Planning, Perception, Localization, and Control facilitates cooperation with third-party modules. However, this separation entails trade-offs between performance and extensibility. For instance, the Perception component might process unnecessary objects due to its separation from Planning. Similarly, separating planning and control can pose challenges in accounting for vehicle dynamics during planning. To mitigate these issues, we might need to enhance interface information or increase computational efforts. + +## Customize features + +A significant feature of the Planning Component design is its ability to integrate with external modules. The diagram below shows various methods for incorporating external functionalities. -- **Mission Planning**: Calculates the route based on the given goal and map information. -- **Scenario Planning**: Determines the trajectory based on the current scenario, such as Lane Driving or Parking. - - **Lane Driving**: Calculates the trajectory for driving within constructed lanes. - - **Behavior Planner**: Calculates suitable path based on safety considerations and traffic rules. - - **Motion Planner**: Calculates suitable trajectory for the vehicle by taking into account safety factors, vehicle motion considerations, and instructions from the behavior planner. - - **Parking**: Calculates the trajectory for parking in unstructured areas. -- **Validation**: Verifies the safety of the trajectory. +![how-to-add-new-modules](image/how-to-add-new-modules.drawio.svg) -Each component contains some modules that can be dynamically loaded and unloaded based on the situation. For instance, the Behavior Planning component includes modules such as lane change, intersection, and crosswalk modules. +### 1. Adding New Modules to the Planning Component -Our planning components are built based on the microautonomy architecture with Autoware. We adopt a modular system framework where the tasks are implemented as modules that can be dynamically loaded and unloaded to achieve different features depending on the given use cases. +Users can augment or replace existing Planning functionalities with new modules. This approach is commonly used for extending features, allowing for the addition of capabilities absent in the desired ODD or simplification of existing features. + +However, adding these functionalities requires well-organized module interfaces. As of November 2023, an ideal modular system is not fully established, presenting some limitations. For more information, please refer to the Reference Implementation section [Customize features in the current implementation](#customize-features-in-the-current-implementation). + +### 2. Replacing Sub-components of Planning + +Collaboration and extension at the sub-component level may interest some users. This could involve replacing Mission Planning with an existing FMS service or incorporating a third-party trajectory generation module while utilizing the existing Validation functionality. + +Adhering to the [Internal interface in the planning component](#internal-interface-in-the-planning-component), collaboration and extension at this level are feasible. While complex coordination with existing Planning features may be limited, it allows for integration between certain Planning Component functionalities and external modules. + +### 3. Replacing the Entire Planning Component + +Organizations or research entities developing autonomous driving Planning systems might be interested in integrating their proprietary Planning solutions with Autoware's Perception or Control modules. This can be achieved by replacing the entire Planning system, following the robust and stable interfaces defined between components. It is important to note, however, that direct coordination with existing Planning modules might not be possible. ## Component interface @@ -62,7 +120,7 @@ This section describes the inputs and outputs of the Planning Component and of i - **From Human Machine Interface (HMI)** - Feature execution: Allows for executing/authorizing autonomous driving operations, such as lane changes or entering intersections, by human operators. - **From API Layer** - - Goal: Represents the final position that the Planning Component aims to reach. + - Destination (Goal): Represents the final position that the Planning Component aims to reach. - Checkpoint: Represents a midpoint along the route to the destination. This is used during route calculation. - Velocity limit: Sets the maximum speed limit for the vehicle. @@ -91,61 +149,59 @@ This section describes the inputs and outputs of the Planning Component and of i - **Validation to Control Component** - Trajectory: Same as above but with some additional safety considerations. -## How to add new modules (WIP) - -As mentioned in the goal session, this planning module is designed to be extensible by third-party components. For specific instructions on how to add new modules and expand its functionality, please refer to the provided documentation or guidelines (WIP). - -## Supported Functions - -| Feature | Description | Requirements | Figure | -| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -| Route Planning | Plan route from the ego vehicle position to the destination.

Reference implementation is in [Mission Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/mission_planner/), enabled by launching the `mission_planner` node. | - Lanelet map (driving lanelets) | ![route-planning](image/features-route-planning.drawio.svg) | -| Path Planning from Route | Plan path to be followed from the given route.

Reference implementation is in [Behavior Path Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/). | - Lanelet map (driving lanelets) | ![lane-follow](image/features-lane-follow.drawio.svg) | -| Obstacle Avoidance | Plan path to avoid obstacles by steering operation.

Reference implementation is in [Avoidance](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_avoidance_design/), [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/). Enable flag in parameter: `launch obstacle_avoidance_planner true`

[Demonstration Video](https://youtu.be/A_V9yvfKZ4E)
[![Demonstration Video](https://img.youtube.com/vi/A_V9yvfKZ4E/0.jpg)](https://www.youtube.com/watch?v=A_V9yvfKZ4E) | - objects information | ![obstacle-avoidance](image/features-avoidance.drawio.svg) | -| Path Smoothing | Plan path to achieve smooth steering.

Reference implementation is in [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/).

[Demonstration Video](https://youtu.be/RhyAF26Ppzs)
[![Demonstration Video](https://img.youtube.com/vi/RhyAF26Ppzs/0.jpg)](https://www.youtube.com/watch?v=RhyAF26Ppzs) | - Lanelet map (driving lanelet) | ![path-smoothing](image/features-path-smoothing.drawio.svg) | -| Narrow Space Driving | Plan path to drive within the drivable area. Furthermore, when it is not possible to drive within the drivable area, stop the vehicle to avoid exiting the drivable area.

Reference implementation is in [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/).

[Demonstration Video](https://youtu.be/URzcLO2E1vY)
[![Demonstration Video](https://img.youtube.com/vi/URzcLO2E1vY/0.jpg)](https://www.youtube.com/watch?v=URzcLO2E1vY) | - Lanelet map (high-precision lane boundaries) | ![narrow-space-driving](image/features-narrow-space-driving.drawio.svg) | -| Lane Change | Plan path for lane change to reach the destination.

Reference implementation is in [Lane Change](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_lane_change_design/).

[Demonstration Video](https://youtu.be/0jRDGQ84cD4)
[![Demonstration Video](https://img.youtube.com/vi/0jRDGQ84cD4/0.jpg)](https://www.youtube.com/watch?v=0jRDGQ84cD4) | - Lanelet map (driving lanelets) | ![lane-change](image/features-lane-change.drawio.svg) | -| Pull Over | Plan path for pull over to park at the road shoulder.

Reference implementation is in [Goal Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_goal_planner_design/).

Demonstration Videos:
[Simple Pull Over](https://youtu.be/r3-kAmTb4hc)
[![Demonstration Video](https://img.youtube.com/vi/r3-kAmTb4hc/0.jpg)](https://www.youtube.com/watch?v=r3-kAmTb4hc)
[Arc Forward Pull Over](https://youtu.be/ornbzkWxRWU)
[![Demonstration Video](https://img.youtube.com/vi/ornbzkWxRWU/0.jpg)](https://www.youtube.com/watch?v=ornbzkWxRWU)
[Arc Backward Pull Over](https://youtu.be/if-0tG3AkLo)
[![Demonstration Video](https://img.youtube.com/vi/if-0tG3AkLo/0.jpg)](https://www.youtube.com/watch?v=if-0tG3AkLo) | - Lanelet map (shoulder lane) | ![pull-over](image/features-pull-over.drawio.svg) | -| Pull Out | Plan path for pull over to start from the road shoulder.

Reference implementation is in [Pull Out Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_start_planner_design/#:~:text=WIP-,Path%20Generation,-%23).

Demonstration Video:
[Simple Pull Out](https://youtu.be/xOjnPqoHup4)
[![Demonstration Video](https://img.youtube.com/vi/xOjnPqoHup4/0.jpg)](https://www.youtube.com/watch?v=xOjnPqoHup4)
[Backward Pull Out](https://youtu.be/iGieijPcPcQ)
[![Demonstration Video](https://img.youtube.com/vi/iGieijPcPcQ/0.jpg)](https://www.youtube.com/watch?v=iGieijPcPcQ) | - Lanelet map (shoulder lane) | ![pull-out](image/features-pull-out.drawio.svg) | -| Path Shift | Plan path in lateral direction in response to external instructions.

Reference implementation is in [Side Shift Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_side_shift_design/). | - None | ![side-shift](image/features-side-shift.drawio.svg) | -| Obstacle Stop | Plan velocity to stop for an obstacle on the path.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). `launch obstacle_stop_planner` and enable flag: `TODO`, `launch obstacle_cruise_planner` and enable flag: `TODO`

[Demonstration Video](https://youtu.be/d8IRW_xArcE)
[![Demonstration Video](https://img.youtube.com/vi/d8IRW_xArcE/0.jpg)](https://www.youtube.com/watch?v=d8IRW_xArcE) | - objects information | ![obstacle-stop](image/features-obstacle-stop.drawio.svg) | -| Obstacle Deceleration | Plan velocity to decelerate for an obstacle located around the path.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/).

[Demonstration Video](https://youtu.be/gvN1otgeaaw)
[![Demonstration Video](https://img.youtube.com/vi/gvN1otgeaaw/0.jpg)](https://www.youtube.com/watch?v=gvN1otgeaaw) | - objects information | ![obstacle-decel](image/features-obstacle-decel.drawio.svg) | -| Adaptive Cruise Control | Plan velocity to follow the vehicle driving in front of the ego vehicle.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). | - objects information | ![adaptive-cruise](image/features-adaptive-cruise.drawio.svg) | -| Decelerate for cut-in vehicles | Plan velocity to avoid a risk for cutting-in vehicle to ego lane.

Reference implementation is in [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). | - objects information | ![cut-in](image/features-cut-in.drawio.svg) | -| Surround Check at starting | Plan velocity to prevent moving when an obstacle exists around the vehicle.

Reference implementation is in [Surround Obstacle Checker](https://autowarefoundation.github.io/autoware.universe/main/planning/surround_obstacle_checker/). Enable flag in parameter: `use_surround_obstacle_check true` in [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/2850d7f4e20b173fde2183d5323debbe0067a990/autoware_launch/launch/components/tier4_planning_component.launch.xml#L8)

[Demonstration Video](https://youtu.be/bbGgtXN3lC4)
[![Demonstration Video](https://img.youtube.com/vi/bbGgtXN3lC4/0.jpg)](https://www.youtube.com/watch?v=bbGgtXN3lC4) | - objects information | ![surround-check](image/features-surround-check.drawio.svg) | -| Curve Deceleration | Plan velocity to decelerate the speed on a curve.

Reference implementation is in [Motion Velocity Smoother](https://autowarefoundation.github.io/autoware.universe/main/planning/motion_velocity_smoother/). | - None | ![decel-on-curve](image/features-decel-on-curve.drawio.svg) | -| Curve Deceleration for Obstacle | Plan velocity to decelerate the speed on a curve for a risk of obstacle collision around the path.

Reference implementation is in [Obstacle Velocity Limiter](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_velocity_limiter/).

[Demonstration Video](https://youtu.be/I-oFgG6kIAs)
[![Demonstration Video](https://img.youtube.com/vi/I-oFgG6kIAs/0.jpg)](https://www.youtube.com/watch?v=I-oFgG6kIAs) | - objects information
- Lanelet map (static obstacle) | ![decel-on-curve-obstacles](image/features-decel-on-curve-obstacles.drawio.svg) | -| Crosswalk | Plan velocity to stop or decelerate for pedestrians approaching or walking on a crosswalk.

Reference implementation is in [Crosswalk Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_crosswalk_module/).

[Demonstration Video](https://youtu.be/tUvthyIL2W8)
[![Demonstration Video](https://img.youtube.com/vi/tUvthyIL2W8/0.jpg)](https://www.youtube.com/watch?v=tUvthyIL2W8) | - objects information
- Lanelet map (pedestrian crossing) | ![crosswalk](image/features-crosswalk.drawio.svg) | -| Intersection Oncoming Vehicle Check | Plan velocity for turning right/left at intersection to avoid a risk with oncoming other vehicles.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/).

[Demonstration Video](https://youtu.be/SGD07Hqg4Hk)
[![Demonstration Video](https://img.youtube.com/vi/SGD07Hqg4Hk/0.jpg)](https://www.youtube.com/watch?v=SGD07Hqg4Hk) | - objects information
- Lanelet map (intersection lane and yield lane) | ![intersection](image/features-intersection.drawio.svg) | -| Intersection Blind Spot Check | Plan velocity for turning right/left at intersection to avoid a risk with other vehicles or motorcycles coming from behind blind spot.

Reference implementation is in [Blind Spot Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_blind_spot_module/).

[Demonstration Video](https://youtu.be/oaTCJRafDGA)
[![Demonstration Video](https://img.youtube.com/vi/oaTCJRafDGA/0.jpg)](https://www.youtube.com/watch?v=oaTCJRafDGA) | - objects information
- Lanelet map (intersection lane) | ![blind-spot](image/features-blind-spot.drawio.svg) | -| Intersection Occlusion Check | Plan velocity for turning right/left at intersection to avoid a risk with the possibility of coming vehicles from occlusion area.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/).

[Demonstration Video](https://youtu.be/bAHXMB7kbFc)
[![Demonstration Video](https://img.youtube.com/vi/bAHXMB7kbFc/0.jpg)](https://www.youtube.com/watch?v=bAHXMB7kbFc) | - objects information
- Lanelet map (intersection lane) | ![intersection-occlusion](image/features-intersection-occlusion.drawio.svg) | -| Intersection Traffic Jam Detection | Plan velocity for intersection not to enter the intersection when a vehicle is stopped ahead for a traffic jam.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/).

[Demonstration Video](https://youtu.be/negK4VbrC5o)
[![Demonstration Video](https://img.youtube.com/vi/negK4VbrC5o/0.jpg)](https://www.youtube.com/watch?v=negK4VbrC5o) | - objects information
- Lanelet map (intersection lane) | ![intersection-traffic-jam](image/features-intersection-traffic-jam.drawio.svg) | -| Traffic Light | Plan velocity for intersection according to a traffic light signal.

Reference implementation is in [Traffic Light Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_traffic_light_module/).

[Demonstration Video](https://youtu.be/lGA53KljQrM)
[![Demonstration Video](https://img.youtube.com/vi/lGA53KljQrM/0.jpg)](https://www.youtube.com/watch?v=lGA53KljQrM) | - Traffic light color information | ![traffic-light](image/features-traffic-light.drawio.svg) | -| Run-out Check | Plan velocity to decelerate for the possibility of nearby objects running out into the path.

Reference implementation is in [Run Out Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_run_out_module/).

[Demonstration Video](https://youtu.be/9IDggldT2t0)
[![Demonstration Video](https://img.youtube.com/vi/9IDggldT2t0/0.jpg)](https://www.youtube.com/watch?v=9IDggldT2t0) | - objects information | ![run-out](image/features-run-out.drawio.svg) | -| Stop Line | Plan velocity to stop at a stop line.

Reference implementation is in [Stop Line Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_stop_line_module/).

[Demonstration Video](https://youtu.be/eej9jYt-GSE)
[![Demonstration Video](https://img.youtube.com/vi/eej9jYt-GSE/0.jpg)](https://www.youtube.com/watch?v=eej9jYt-GSE) | - Lanelet map (stop line) | ![stop-line](image/features-stop-line.drawio.svg) | -| Occlusion Spot Check | Plan velocity to decelerate for objects running out from occlusion area, for example, from behind a large vehicle.

Reference implementation is in [Occlusion Spot Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_occlusion_spot_module/).

[Demonstration Video](https://youtu.be/3qs8Ivjh1fs)
[![Demonstration Video](https://img.youtube.com/vi/3qs8Ivjh1fs/0.jpg)](https://www.youtube.com/watch?v=3qs8Ivjh1fs) | - objects information
- Lanelet map (private/public lane) | ![occlusion-spot](image/features-occlusion-spot.drawio.svg) | -| No Stop Area | Plan velocity not to stop in areas where stopping is prohibited, such as in front of the fire station entrance.

Reference implementation is in [No Stopping Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_stopping_area_module/). | - Lanelet map (no stopping area) | ![no-stopping-area](image/features-no-stopping-area.drawio.svg) | -| Merge from Private Area to Public Road | Plan velocity for entering the public road from a private driveway to avoid a risk of collision with pedestrians or other vehicles.

Reference implementation is in [Merge from Private Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/). | - objects information
- Lanelet map (private/public lane) | WIP | -| Speed Bump | Plan velocity to decelerate for speed bumps.

Reference implementation is in [Speed Bump Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_speed_bump_module/).

[Demonstration Video](https://youtu.be/FpX3q3YaaCw)
[![Demonstration Video](https://img.youtube.com/vi/FpX3q3YaaCw/0.jpg)](https://www.youtube.com/watch?v=FpX3q3YaaCw) | - Lanelet map (speed bump) | ![speed-bump](image/features-speed-bump.drawio.svg) | -| Detection Area | Plan velocity to stop at the corresponding stop when an object exist in the designated detection area.

Reference implementation is in [Detection Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_detection_area_module/).

[Demonstration Video](https://youtu.be/YzXF4U69lJs)
[![Demonstration Video](https://img.youtube.com/vi/YzXF4U69lJs/0.jpg)](https://www.youtube.com/watch?v=YzXF4U69lJs) | - Lanelet map (detection area) | ![detection-area](image/features-detection-area.drawio.svg) | -| No Drivable Lane | Plan velocity to stop before exiting the area designated by ODD (Operational Design Domain) or stop the vehicle if autonomous mode started in out of ODD lane.

Reference implementation is in [No Drivable Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_drivable_lane_module/). | - Lanelet map (no drivable lane) | ![no-drivable-lane](image/features-no-drivable-lane.drawio.svg) | -| Collision Detection when deviating from lane | Plan velocity to avoid conflict with other vehicles driving in the another lane when the ego vehicle is deviating from own lane.

Reference implementation is in [Out of Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_out_of_lane_module/). | - objects information
- Lanelet map (driving lane) | WIP | -| Parking | Plan path and velocity for given goal in parking area.

Reference implementation is in [Free Space Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/freespace_planner/).

[Demonstration Video](https://youtu.be/rAIYmwpNWfA)
[![Demonstration Video](https://img.youtube.com/vi/rAIYmwpNWfA/0.jpg)](https://www.youtube.com/watch?v=rAIYmwpNWfA) | - objects information
- Lanelet map (parking area) | ![parking](image/features-parking.drawio.svg) | -| Autonomous Emergency Braking (AEB) | Perform an emergency stop if a collision with an object ahead is anticipated. It is noted that this function is expected as a final safety layer, and this should work even in the event of failures in the Localization or Perception system.

Reference implementation is in [Out of Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_out_of_lane_module/). | - Primitive objects | ![aeb](image/features-aeb.drawio.svg) | -| Minimum Risk Maneuver (MRM) | Provide appropriate MRM (Minimum Risk Maneuver) instructions when a hazardous event occurs. For example, when a sensor trouble found, send an instruction for emergency braking, moderate stop, or pulling over to the shoulder, depending on the severity of the situation.

Reference implementation is in TODO | - TODO | WIP | -| Trajectory Validation | Check the planned trajectory is safe. If it is unsafe, take appropriate action, such as modify the trajectory, stop sending the trajectory or report to the autonomous driving system.

Reference implementation is in [Planning Validator](https://autowarefoundation.github.io/autoware.universe/main/planning/planning_validator/). | - None | ![trajectory-validation](image/features-trajectory-validation.drawio.svg) | -| Running Lane Map Generation | Generate lane map from localization data recorded in manual driving.

Reference implementation is in WIP | - None | WIP | -| Running Lane Optimization | Optimize the centerline (reference path) of the map to make it smooth considering the vehicle kinematics.

Reference implementation is in [Static Centerline Optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/static_centerline_optimizer/). | - Lanelet map (driving lanes) | WIP | +## Detailed design + +### Supported features + +| Feature | Description | Requirements | Figure | Demonstration | +| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Route Planning | Plan route from the ego vehicle position to the destination.

Reference implementation is in [Mission Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/mission_planner/), enabled by launching the `mission_planner` node. | - Lanelet map (driving lanelets) | ![route-planning](image/features-route-planning.drawio.svg) | +| Path Planning from Route | Plan path to be followed from the given route.

Reference implementation is in [Behavior Path Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/). | - Lanelet map (driving lanelets) | ![lane-follow](image/features-lane-follow.drawio.svg) | +| Obstacle Avoidance | Plan path to avoid obstacles by steering operation.

Reference implementation is in [Avoidance](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_avoidance_design/), [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/). Enable flag in parameter: `launch obstacle_avoidance_planner true` | - objects information | ![obstacle-avoidance](image/features-avoidance.drawio.svg) | [Demonstration Video](https://youtu.be/A_V9yvfKZ4E)
[![Demonstration Video](https://img.youtube.com/vi/A_V9yvfKZ4E/0.jpg)](https://www.youtube.com/watch?v=A_V9yvfKZ4E) | +| Path Smoothing | Plan path to achieve smooth steering.

Reference implementation is in [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/). | - Lanelet map (driving lanelet) | ![path-smoothing](image/features-path-smoothing.drawio.svg) | [Demonstration Video](https://youtu.be/RhyAF26Ppzs)
[![Demonstration Video](https://img.youtube.com/vi/RhyAF26Ppzs/0.jpg)](https://www.youtube.com/watch?v=RhyAF26Ppzs) | +| Narrow Space Driving | Plan path to drive within the drivable area. Furthermore, when it is not possible to drive within the drivable area, stop the vehicle to avoid exiting the drivable area.

Reference implementation is in [Obstacle Avoidance Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/). | - Lanelet map (high-precision lane boundaries) | ![narrow-space-driving](image/features-narrow-space-driving.drawio.svg) | [Demonstration Video](https://youtu.be/URzcLO2E1vY)
[![Demonstration Video](https://img.youtube.com/vi/URzcLO2E1vY/0.jpg)](https://www.youtube.com/watch?v=URzcLO2E1vY) | +| Lane Change | Plan path for lane change to reach the destination.

Reference implementation is in [Lane Change](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_lane_change_design/). | - Lanelet map (driving lanelets) | ![lane-change](image/features-lane-change.drawio.svg) | [Demonstration Video](https://youtu.be/0jRDGQ84cD4)
[![Demonstration Video](https://img.youtube.com/vi/0jRDGQ84cD4/0.jpg)](https://www.youtube.com/watch?v=0jRDGQ84cD4) | +| Pull Over | Plan path for pull over to park at the road shoulder.

Reference implementation is in [Goal Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_goal_planner_design/). | - Lanelet map (shoulder lane) | ![pull-over](image/features-pull-over.drawio.svg) | Demonstration Videos:
[Simple Pull Over](https://youtu.be/r3-kAmTb4hc)
[![Demonstration Video](https://img.youtube.com/vi/r3-kAmTb4hc/0.jpg)](https://www.youtube.com/watch?v=r3-kAmTb4hc)
[Arc Forward Pull Over](https://youtu.be/ornbzkWxRWU)
[![Demonstration Video](https://img.youtube.com/vi/ornbzkWxRWU/0.jpg)](https://www.youtube.com/watch?v=ornbzkWxRWU)
[Arc Backward Pull Over](https://youtu.be/if-0tG3AkLo)
[![Demonstration Video](https://img.youtube.com/vi/if-0tG3AkLo/0.jpg)](https://www.youtube.com/watch?v=if-0tG3AkLo) | +| Pull Out | Plan path for pull over to start from the road shoulder.

Reference implementation is in [Pull Out Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_start_planner_design/#:~:text=WIP-,Path%20Generation,-%23). | - Lanelet map (shoulder lane) | ![pull-out](image/features-pull-out.drawio.svg) | Demonstration Video:
[Simple Pull Out](https://youtu.be/xOjnPqoHup4)
[![Demonstration Video](https://img.youtube.com/vi/xOjnPqoHup4/0.jpg)](https://www.youtube.com/watch?v=xOjnPqoHup4)
[Backward Pull Out](https://youtu.be/iGieijPcPcQ)
[![Demonstration Video](https://img.youtube.com/vi/iGieijPcPcQ/0.jpg)](https://www.youtube.com/watch?v=iGieijPcPcQ) | +| Path Shift | Plan path in lateral direction in response to external instructions.

Reference implementation is in [Side Shift Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/docs/behavior_path_planner_side_shift_design/). | - None | ![side-shift](image/features-side-shift.drawio.svg) | +| Obstacle Stop | Plan velocity to stop for an obstacle on the path.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). `launch obstacle_stop_planner` and enable flag: `TODO`, `launch obstacle_cruise_planner` and enable flag: `TODO` | - objects information | ![obstacle-stop](image/features-obstacle-stop.drawio.svg) | [Demonstration Video](https://youtu.be/d8IRW_xArcE)
[![Demonstration Video](https://img.youtube.com/vi/d8IRW_xArcE/0.jpg)](https://www.youtube.com/watch?v=d8IRW_xArcE) | +| Obstacle Deceleration | Plan velocity to decelerate for an obstacle located around the path.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). | - objects information | ![obstacle-decel](image/features-obstacle-decel.drawio.svg) | [Demonstration Video](https://youtu.be/gvN1otgeaaw)
[![Demonstration Video](https://img.youtube.com/vi/gvN1otgeaaw/0.jpg)](https://www.youtube.com/watch?v=gvN1otgeaaw) | +| Adaptive Cruise Control | Plan velocity to follow the vehicle driving in front of the ego vehicle.

Reference implementation is in [Obstacle Stop Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/), [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). | - objects information | ![adaptive-cruise](image/features-adaptive-cruise.drawio.svg) | +| Decelerate for cut-in vehicles | Plan velocity to avoid a risk for cutting-in vehicle to ego lane.

Reference implementation is in [Obstacle Cruise Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_cruise_planner/). | - objects information | ![cut-in](image/features-cut-in.drawio.svg) | +| Surround Check at starting | Plan velocity to prevent moving when an obstacle exists around the vehicle.

Reference implementation is in [Surround Obstacle Checker](https://autowarefoundation.github.io/autoware.universe/main/planning/surround_obstacle_checker/). Enable flag in parameter: `use_surround_obstacle_check true` in [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/2850d7f4e20b173fde2183d5323debbe0067a990/autoware_launch/launch/components/tier4_planning_component.launch.xml#L8) < | - objects information | ![surround-check](image/features-surround-check.drawio.svg) | [Demonstration Video](https://youtu.be/bbGgtXN3lC4)
[![Demonstration Video](https://img.youtube.com/vi/bbGgtXN3lC4/0.jpg)](https://www.youtube.com/watch?v=bbGgtXN3lC4) | +| Curve Deceleration | Plan velocity to decelerate the speed on a curve.

Reference implementation is in [Motion Velocity Smoother](https://autowarefoundation.github.io/autoware.universe/main/planning/motion_velocity_smoother/). | - None | ![decel-on-curve](image/features-decel-on-curve.drawio.svg) | +| Curve Deceleration for Obstacle | Plan velocity to decelerate the speed on a curve for a risk of obstacle collision around the path.

Reference implementation is in [Obstacle Velocity Limiter](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_velocity_limiter/). | - objects information
- Lanelet map (static obstacle) | ![decel-on-curve-obstacles](image/features-decel-on-curve-obstacles.drawio.svg) | [Demonstration Video](https://youtu.be/I-oFgG6kIAs)
[![Demonstration Video](https://img.youtube.com/vi/I-oFgG6kIAs/0.jpg)](https://www.youtube.com/watch?v=I-oFgG6kIAs) | +| Crosswalk | Plan velocity to stop or decelerate for pedestrians approaching or walking on a crosswalk.

Reference implementation is in [Crosswalk Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_crosswalk_module/). | - objects information
- Lanelet map (pedestrian crossing) | ![crosswalk](image/features-crosswalk.drawio.svg) | [Demonstration Video](https://youtu.be/tUvthyIL2W8)
[![Demonstration Video](https://img.youtube.com/vi/tUvthyIL2W8/0.jpg)](https://www.youtube.com/watch?v=tUvthyIL2W8) | +| Intersection Oncoming Vehicle Check | Plan velocity for turning right/left at intersection to avoid a risk with oncoming other vehicles.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/). | - objects information
- Lanelet map (intersection lane and yield lane) | ![intersection](image/features-intersection.drawio.svg) | [Demonstration Video](https://youtu.be/SGD07Hqg4Hk)
[![Demonstration Video](https://img.youtube.com/vi/SGD07Hqg4Hk/0.jpg)](https://www.youtube.com/watch?v=SGD07Hqg4Hk) | +| Intersection Blind Spot Check | Plan velocity for turning right/left at intersection to avoid a risk with other vehicles or motorcycles coming from behind blind spot.

Reference implementation is in [Blind Spot Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_blind_spot_module/). | - objects information
- Lanelet map (intersection lane) | ![blind-spot](image/features-blind-spot.drawio.svg) | [Demonstration Video](https://youtu.be/oaTCJRafDGA)
[![Demonstration Video](https://img.youtube.com/vi/oaTCJRafDGA/0.jpg)](https://www.youtube.com/watch?v=oaTCJRafDGA) | +| Intersection Occlusion Check | Plan velocity for turning right/left at intersection to avoid a risk with the possibility of coming vehicles from occlusion area.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/). | - objects information
- Lanelet map (intersection lane) | ![intersection-occlusion](image/features-intersection-occlusion.drawio.svg) | [Demonstration Video](https://youtu.be/bAHXMB7kbFc)
[![Demonstration Video](https://img.youtube.com/vi/bAHXMB7kbFc/0.jpg)](https://www.youtube.com/watch?v=bAHXMB7kbFc) | +| Intersection Traffic Jam Detection | Plan velocity for intersection not to enter the intersection when a vehicle is stopped ahead for a traffic jam.

Reference implementation is in [Intersection Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/). | - objects information
- Lanelet map (intersection lane) | ![intersection-traffic-jam](image/features-intersection-traffic-jam.drawio.svg) | [Demonstration Video](https://youtu.be/negK4VbrC5o)
[![Demonstration Video](https://img.youtube.com/vi/negK4VbrC5o/0.jpg)](https://www.youtube.com/watch?v=negK4VbrC5o) | +| Traffic Light | Plan velocity for intersection according to a traffic light signal.

Reference implementation is in [Traffic Light Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_traffic_light_module/). | - Traffic light color information | ![traffic-light](image/features-traffic-light.drawio.svg) | [Demonstration Video](https://youtu.be/lGA53KljQrM)
[![Demonstration Video](https://img.youtube.com/vi/lGA53KljQrM/0.jpg)](https://www.youtube.com/watch?v=lGA53KljQrM) | +| Run-out Check | Plan velocity to decelerate for the possibility of nearby objects running out into the path.

Reference implementation is in [Run Out Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_run_out_module/). | - objects information | ![run-out](image/features-run-out.drawio.svg) | [Demonstration Video](https://youtu.be/9IDggldT2t0)
[![Demonstration Video](https://img.youtube.com/vi/9IDggldT2t0/0.jpg)](https://www.youtube.com/watch?v=9IDggldT2t0) | +| Stop Line | Plan velocity to stop at a stop line.

Reference implementation is in [Stop Line Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_stop_line_module/). | - Lanelet map (stop line) | ![stop-line](image/features-stop-line.drawio.svg) | [Demonstration Video](https://youtu.be/eej9jYt-GSE)
[![Demonstration Video](https://img.youtube.com/vi/eej9jYt-GSE/0.jpg)](https://www.youtube.com/watch?v=eej9jYt-GSE) | +| Occlusion Spot Check | Plan velocity to decelerate for objects running out from occlusion area, for example, from behind a large vehicle.

Reference implementation is in [Occlusion Spot Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_occlusion_spot_module/). | - objects information
- Lanelet map (private/public lane) | ![occlusion-spot](image/features-occlusion-spot.drawio.svg) | [Demonstration Video](https://youtu.be/3qs8Ivjh1fs)
[![Demonstration Video](https://img.youtube.com/vi/3qs8Ivjh1fs/0.jpg)](https://www.youtube.com/watch?v=3qs8Ivjh1fs) | +| No Stop Area | Plan velocity not to stop in areas where stopping is prohibited, such as in front of the fire station entrance.

Reference implementation is in [No Stopping Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_stopping_area_module/). | - Lanelet map (no stopping area) | ![no-stopping-area](image/features-no-stopping-area.drawio.svg) | +| Merge from Private Area to Public Road | Plan velocity for entering the public road from a private driveway to avoid a risk of collision with pedestrians or other vehicles.

Reference implementation is in [Merge from Private Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/). | - objects information
- Lanelet map (private/public lane) | WIP | +| Speed Bump | Plan velocity to decelerate for speed bumps.

Reference implementation is in [Speed Bump Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_speed_bump_module/). | - Lanelet map (speed bump) | ![speed-bump](image/features-speed-bump.drawio.svg) | [Demonstration Video](https://youtu.be/FpX3q3YaaCw)
[![Demonstration Video](https://img.youtube.com/vi/FpX3q3YaaCw/0.jpg)](https://www.youtube.com/watch?v=FpX3q3YaaCw) | +| Detection Area | Plan velocity to stop at the corresponding stop when an object exist in the designated detection area.

Reference implementation is in [Detection Area Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_detection_area_module/). | - Lanelet map (detection area) | ![detection-area](image/features-detection-area.drawio.svg) | [Demonstration Video](https://youtu.be/YzXF4U69lJs)
[![Demonstration Video](https://img.youtube.com/vi/YzXF4U69lJs/0.jpg)](https://www.youtube.com/watch?v=YzXF4U69lJs) | +| No Drivable Lane | Plan velocity to stop before exiting the area designated by ODD (Operational Design Domain) or stop the vehicle if autonomous mode started in out of ODD lane.

Reference implementation is in [No Drivable Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_drivable_lane_module/). | - Lanelet map (no drivable lane) | ![no-drivable-lane](image/features-no-drivable-lane.drawio.svg) | +| Collision Detection when deviating from lane | Plan velocity to avoid conflict with other vehicles driving in the another lane when the ego vehicle is deviating from own lane.

Reference implementation is in [Out of Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_out_of_lane_module/). | - objects information
- Lanelet map (driving lane) | WIP | +| Parking | Plan path and velocity for given goal in parking area.

Reference implementation is in [Free Space Planner](https://autowarefoundation.github.io/autoware.universe/main/planning/freespace_planner/). | - objects information
- Lanelet map (parking area) | ![parking](image/features-parking.drawio.svg) | [Demonstration Video](https://youtu.be/rAIYmwpNWfA)
[![Demonstration Video](https://img.youtube.com/vi/rAIYmwpNWfA/0.jpg)](https://www.youtube.com/watch?v=rAIYmwpNWfA) | +| Autonomous Emergency Braking (AEB) | Perform an emergency stop if a collision with an object ahead is anticipated. It is noted that this function is expected as a final safety layer, and this should work even in the event of failures in the Localization or Perception system.

Reference implementation is in [Out of Lane Module](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_out_of_lane_module/). | - Primitive objects | ![aeb](image/features-aeb.drawio.svg) | +| Minimum Risk Maneuver (MRM) | Provide appropriate MRM (Minimum Risk Maneuver) instructions when a hazardous event occurs. For example, when a sensor trouble found, send an instruction for emergency braking, moderate stop, or pulling over to the shoulder, depending on the severity of the situation.

Reference implementation is in TODO | - TODO | WIP | +| Trajectory Validation | Check the planned trajectory is safe. If it is unsafe, take appropriate action, such as modify the trajectory, stop sending the trajectory or report to the autonomous driving system.

Reference implementation is in [Planning Validator](https://autowarefoundation.github.io/autoware.universe/main/planning/planning_validator/). | - None | ![trajectory-validation](image/features-trajectory-validation.drawio.svg) | +| Running Lane Map Generation | Generate lane map from localization data recorded in manual driving.

Reference implementation is in WIP | - None | WIP | +| Running Lane Optimization | Optimize the centerline (reference path) of the map to make it smooth considering the vehicle kinematics.

Reference implementation is in [Static Centerline Optimizer](https://autowarefoundation.github.io/autoware.universe/main/planning/static_centerline_optimizer/). | - Lanelet map (driving lanes) | WIP | -## Reference Implementation +### Reference Implementation The following diagram describes the reference implementation of the Planning component. By adding new modules or extending the functionalities, various ODDs can be supported. -_Note that some implementation does not adhere to the high-level architecture design and require updating._ +_Note that some implementation does not adhere to the high-level architecture design due to the difficulties of the implementation and require updating._ -![reference-implementation](image/planning-diagram.drawio.svg) +![reference-implementation](image/planning-diagram-tmp.drawio.svg) For more details, please refer to the design documents in each package. @@ -158,17 +214,16 @@ For more details, please refer to the design documents in each package. - [_pull_out_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/#pull-out) - _side_shift_ - [_behavior_velocity_planner_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_planner/): calculates max speed based on the traffic rules. - - [_detection_area_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_detection_area_module/) - - [_blind_spot_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_blind_spot_module/) - - [_cross_walk_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_crosswalk_module/) - - [_stop_line_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_stop_line_module/) - - [_traffic_light_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_traffic_light_module/) - - [_intersection_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/) - - [_no_stopping_area_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_stopping_area_module/) - - [_virtual_traffic_light_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_virtual_traffic_light_module/) - - [_occlusion_spot_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_occlusion_spot_module/) - - [_run_out_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_run_out_module/) - - [_no_drivable_lane_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_drivable_lane_module) + - [_detection_area_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_detection_area_module/docs/detection-area-design/) + - [_blind_spot_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_blind_spot_module/docs/blind-spot-design/) + - [_cross_walk_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_crosswalk_module/docs/crosswalk-design/) + - [_stop_line_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_stop_line_module/docs/stop-line-design/) + - [_traffic_light_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_traffic_light_module/docs/traffic-light-design/) + - [_intersection_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_intersection_module/docs/intersection-design/) + - [_no_stopping_area_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_no_stopping_area_module/docs/no-stopping-area-design/) + - [_virtual_traffic_light_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_virtual_traffic_light_module/docs/virtual-traffic-light-design/) + - [_occlusion_spot_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_occlusion_spot_module/docs/occlusion-spot-design/) + - [_run_out_](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_run_out_module/docs/run-out-design/) - [_obstacle_avoidance_planner_](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/): calculate path shape under obstacle and drivable area constraints - [_surround_obstacle_checker_](https://autowarefoundation.github.io/autoware.universe/main/planning/surround_obstacle_checker/): keeps the vehicle being stopped when there are obstacles around the ego-vehicle. It works only when the vehicle is stopped. - [_obstacle_stop_planner_](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_stop_planner/): When there are obstacles on or near the trajectory, it calculates the maximum velocity of the trajectory points depending on the situation: stopping, slowing down, or adaptive cruise (following the car). @@ -181,6 +236,41 @@ For more details, please refer to the design documents in each package. - [_external_velocity_limit_selector_](https://autowarefoundation.github.io/autoware.universe/main/planning/external_velocity_limit_selector/): takes an appropriate velocity limit from multiple candidates. - [_motion_velocity_smoother_](https://autowarefoundation.github.io/autoware.universe/main/planning/motion_velocity_smoother/): calculates final velocity considering velocity, acceleration, and jerk constraints. +### Important information in the current implementation + +An important difference compared to the high-level design is the "introduction of the scenario layer" and the "clear separation of behavior and motion." These are introduced due to current performance and implementation challenges. Whether to define these as part of the high-level design or to improve them as part of the implementation is a matter of discussion. + +#### Introducing the Scenario Planning layer + +There are different requirements for interfaces between driving in well-structured lanes and driving in a free-space area like a parking lot. For example, while Lane Driving can handle routes with map IDs, this is not appropriate for planning in free space. The mechanism that switches planning sub-components at the scenario level (Lane Driving, Parking, etc) enables a flexible design of the interface, however, it has a drawbacks of the reuse of modules across different scenarios. + +#### Separation of Behavior and Motion + +One of the classic approach to Planning involves dividing it into "Behavior", which decides the action, and "Motion", which determines the final movement. However, this separation implies a trade-off with performance, as performance tends to degrade with increasing separation of functions. For example, Behavior needs to make decisions without prior knowledge of the computations that Motion will eventually perform, which generally results in conservative decision-making. On the other hand, if behavior and motion are integrated, motion performance and decision-making become interdependent, creating challenges in terms of expandability, such as when you wish to extend only the decision-making function to follow a regional traffic rules. + +To understand this background, this [previously discussed document](https://github.com/tier4/AutowareArchitectureProposal.proj/blob/main/docs/design/software_architecture/Planning/DesignRationale.md) may be useful. + +### Customize features in the current implementation + +While it is possible to add module-level functionalities in the current implementation, a unified interface for all functionalities is not provided. Here's a brief explanation of the methods of extending at the module level in the current implementation. + +![reference-implementation-add-new-modules](image/reference-implementation-add-new-modules.drawio.svg) + +#### Add new modules in behavior_velocity_planner or behavior_path_plnner + +ROS nodes such as [behavior_path_planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_path_planner/) and [behavior_velocity_planner](https://autowarefoundation.github.io/autoware.universe/main/planning/behavior_velocity_planner/) have a module interface available through plugins. By adding modules in accordance with the module interfaces defined in these ROS nodes, dynamic loading/unloading of modules becomes possible. For specific methods of adding modules, please refer to the documentation of each package. + +#### Add a new ros node in the planning component + +When adding modules in Motion Planning, it is necessary to create the module as a ROS Node and integrate it into the planning component. The current configuration involves adding information to the target trajectory calculated upstream, and the introduction of a ROS Node in this process allows for the expansion of functionality. + +#### Add or replace with scenarios + +The current implementation has introduced a scenario-level switching logic as a method for collectively switching multiple modules. This allows for the addition of new scenarios (e.g., highway driving). + +By creating a scenario as a ros node and aligning the scenario_selector ros node with it, the integration is complete. The benefit of this is that you can introduce significant new functionalities without affecting the implementation of other scenarios (like Lane Driving). However, it only allows for scenario-level coordination through scenario switching and does not enable coordination at the existing planning module level. + + From 8a4e94f0ed095e190bfca70facd7729a49127825 Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 6 Dec 2023 15:45:54 +0900 Subject: [PATCH 2/4] update link for universe documentation Signed-off-by: Takamasa Horibe --- docs/design/autoware-architecture/planning/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/design/autoware-architecture/planning/index.md b/docs/design/autoware-architecture/planning/index.md index c7ca9f394d1..edeabe2796d 100644 --- a/docs/design/autoware-architecture/planning/index.md +++ b/docs/design/autoware-architecture/planning/index.md @@ -60,7 +60,7 @@ Key aspects of this high-level design include: #### Modulation of each function -Essential Planning functions, such as route generation, lane changes, and intersection management, are modularized. These modules come with standardized interfaces, enabling easy addition or modification. More details on these interfaces will be discussed in subsequent sections. +Essential Planning functions, such as route generation, lane changes, and intersection management, are modularized. These modules come with standardized interfaces, enabling easy addition or modification. More details on these interfaces will be discussed in subsequent sections. You can see the details about how to enable/disable each module in [the implementation documentation of Planning](https://autowarefoundation.github.io/autoware.universe/main/planning/#how-to-enable-or-disable-planning-module). #### Separation of Mission Planning sub-component @@ -88,7 +88,7 @@ A significant feature of the Planning Component design is its ability to integra Users can augment or replace existing Planning functionalities with new modules. This approach is commonly used for extending features, allowing for the addition of capabilities absent in the desired ODD or simplification of existing features. -However, adding these functionalities requires well-organized module interfaces. As of November 2023, an ideal modular system is not fully established, presenting some limitations. For more information, please refer to the Reference Implementation section [Customize features in the current implementation](#customize-features-in-the-current-implementation). +However, adding these functionalities requires well-organized module interfaces. As of November 2023, an ideal modular system is not fully established, presenting some limitations. For more information, please refer to the Reference Implementation section [Customize features in the current implementation](#customize-features-in-the-current-implementation) and [the implementation documentation of Planning](https://autowarefoundation.github.io/autoware.universe/main/planning/#how-to-enable-or-disable-planning-module). ### 2. Replacing Sub-components of Planning From 1cc271dbb4b1e84fb17aa6cd703cc2a078e0587b Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 6 Dec 2023 15:50:29 +0900 Subject: [PATCH 3/4] Update docs/design/autoware-architecture/planning/index.md Co-authored-by: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> --- docs/design/autoware-architecture/planning/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/design/autoware-architecture/planning/index.md b/docs/design/autoware-architecture/planning/index.md index edeabe2796d..903db5810c9 100644 --- a/docs/design/autoware-architecture/planning/index.md +++ b/docs/design/autoware-architecture/planning/index.md @@ -72,7 +72,7 @@ Given the extendable nature of the Planning Component, ensuring consistent safet #### Interface for HMI (Human Machine Interface) -The HMI is designed in high-level for smooth cooperation with human operators. These interfaces enable coordination between the Planning Component and operators, whether in-vehicle or remote. +The HMI is designed for smooth cooperation with human operators. These interfaces enable coordination between the Planning Component and operators, whether in-vehicle or remote. #### Trade-offs for the separation of planning and other components From fa4026e9cfddb8939f5ae869a60c3a6aca88e4ef Mon Sep 17 00:00:00 2001 From: Takamasa Horibe Date: Wed, 6 Dec 2023 15:55:40 +0900 Subject: [PATCH 4/4] update Signed-off-by: Takamasa Horibe --- docs/design/autoware-architecture/planning/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/design/autoware-architecture/planning/index.md b/docs/design/autoware-architecture/planning/index.md index 903db5810c9..c26d3a0d35a 100644 --- a/docs/design/autoware-architecture/planning/index.md +++ b/docs/design/autoware-architecture/planning/index.md @@ -20,12 +20,12 @@ To clarify this policy, the Goals and Non-Goals are defined as follows: **Goals:** -- **Ensuring essential functions for autonomous driving** +- **The basic functions are provided so that a simple ODD can be defined** - Before extending its functionalities, the Planning Component must provide the essential features necessary for autonomous driving. This encompasses basic operations like moving, stopping, and turning, as well as handling lane changes and obstacle avoidance in relatively safe and simple contexts. -- **Modularized functionalities for user-driven extension** +- **The functionality is modularized for user-driven extension** - The system is designed to adapt to various Operational Design Domains (ODDs) with extended functionalities. Modularization, akin to plug-ins, allows for creating systems tailored to diverse needs, such as different levels of autonomous driving and varied vehicular or environmental applications (e.g., Lv4/Lv2 autonomous driving, public/private road driving, large vehicles, small robots). - Reducing functionalities for specific ODDs, like obstacle-free private roads, is also a key aspect. This modular approach allows for reductions in power consumption or sensor requirements, aligning with specific user needs. -- **Enhancement through operator collaboration** +- **The capability is extensible with the decision of human operators** - Incorporating operator assistance is a critical aspect of functional expansion. It means that the system can adapt to complex and challenging scenarios with human support. The specific type of operator is not defined here. It might be a person accompanying in the vehicle during the prototype development phase or a remote operator connected in emergencies during autonomous driving services. **Non-goals:** @@ -33,8 +33,8 @@ To clarify this policy, the Goals and Non-Goals are defined as follows: The Planning Component is designed to be extended with third-party modules. Consequently, the following are not the goals of Autoware's Planning Component: - To provide all user-required functionalities by default. -- Complete functionality and performance characteristic of an autonomous driving system. -- Performance that consistently surpasses human capabilities or ensures absolute safety. +- To provide complete functionality and performance characteristic of an autonomous driving system. +- To provide performance that consistently surpasses human capabilities or ensures absolute safety. These aspects are specific to our vision of an autonomous driving "platform" and may not apply to a typical autonomous driving Planning Component.