Skip to content

Commit 7010cc6

Browse files
authored
docs(bpp): separate behavior path planner documents (autowarefoundation#5961)
* docs(bpp): separate avoidance document Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): separate ablc document Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): separate side shift document Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): separate goal planner document Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): separate start planner document Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): fix invalid link Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): move docs Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * docs(bpp): remove unused images Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> --------- Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent 8a9f43d commit 7010cc6

File tree

100 files changed

+111
-111
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+111
-111
lines changed

planning/.pages

+9-9
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@ nav:
55
- 'Concept':
66
- 'Planner Manager': planning/behavior_path_planner/docs/behavior_path_planner_manager_design
77
- 'Scene Module Interface': planning/behavior_path_planner/docs/behavior_path_planner_interface_design
8-
- 'Path Generation': planning/behavior_path_planner/docs/behavior_path_planner_path_generation_design
9-
- 'Collision Assessment/Safety Check': planning/behavior_path_planner/docs/behavior_path_planner_safety_check
10-
- 'Dynamic Drivable Area': planning/behavior_path_planner/docs/behavior_path_planner_drivable_area_design
11-
- 'Turn Signal': planning/behavior_path_planner/docs/behavior_path_planner_turn_signal_design
8+
- 'Path Generation': planning/behavior_path_planner_common/docs/behavior_path_planner_path_generation_design
9+
- 'Collision Assessment/Safety Check': planning/behavior_path_planner_common/docs/behavior_path_planner_safety_check
10+
- 'Dynamic Drivable Area': planning/behavior_path_planner_common/docs/behavior_path_planner_drivable_area_design
11+
- 'Turn Signal': planning/behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design
1212
- 'Scene Module':
13-
- 'Avoidance': planning/behavior_path_planner/docs/behavior_path_planner_avoidance_design
14-
- 'Avoidance by Lane Change': planning/behavior_path_planner/docs/behavior_path_planner_avoidance_by_lane_change_design
13+
- 'Avoidance': planning/behavior_path_avoidance_module
14+
- 'Avoidance by Lane Change': planning/behavior_path_avoidance_by_lane_change_module
1515
- 'Dynamic Avoidance': planning/behavior_path_planner/docs/behavior_path_planner_dynamic_avoidance_design
16-
- 'Goal Planner': planning/behavior_path_planner/docs/behavior_path_planner_goal_planner_design
16+
- 'Goal Planner': planning/behavior_path_goal_planner_module
1717
- 'Lane Change': planning/behavior_path_lane_change_module
18-
- 'Side Shift': planning/behavior_path_planner/docs/behavior_path_planner_side_shift_design
19-
- 'Start Planner': planning/behavior_path_planner/docs/behavior_path_planner_start_planner_design
18+
- 'Side Shift': planning/behavior_path_side_shift_module
19+
- 'Start Planner': planning/behavior_path_start_planner_module
2020
- 'Behavior Velocity Planner':
2121
- 'About Behavior Velocity': planning/behavior_velocity_planner
2222
- 'Template for Custom Module': planning/behavior_velocity_template_module

planning/behavior_path_planner/docs/behavior_path_planner_avoidance_by_lane_change_design.md planning/behavior_path_avoidance_by_lane_change_module/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,27 @@ This module is designed as one of the obstacle avoidance features and generates
99
- Exist lane changeable lanelet.
1010
- Exist avoidance target objects on ego driving lane.
1111

12-
![avoidance_by_lane_change](../image/avoidance_by_lane_change/avoidance_by_lane_change.svg)
12+
![avoidance_by_lane_change](./images/avoidance_by_lane_change.svg)
1313

1414
## Inner-workings / Algorithms
1515

16-
Basically, this module is implemented by reusing the avoidance target filtering logic of the existing [Normal Avoidance Module](./behavior_path_planner_avoidance_design.md) and the path generation logic of the [Normal Lane Change Module](./behavior_path_planner_lane_change_design.md). On the other hand, the conditions under which the module is activated differ from those of a normal avoidance module.
16+
Basically, this module is implemented by reusing the avoidance target filtering logic of the existing [Normal Avoidance Module](../behavior_path_avoidance_module/README.md) and the path generation logic of the [Normal Lane Change Module](../behavior_path_lane_change_module/README.md). On the other hand, the conditions under which the module is activated differ from those of a normal avoidance module.
1717

1818
Check that the following conditions are satisfied after the filtering process for the avoidance target.
1919

2020
### Number of the avoidance target objects
2121

2222
This module is launched when the number of avoidance target objects on **EGO DRIVING LANE** is greater than `execute_object_num`. If there are no avoidance targets in the ego driving lane or their number is less than the parameter, the obstacle is avoided by normal avoidance behavior (if the normal avoidance module is registered).
2323

24-
![trigger_1](../image/avoidance_by_lane_change/avoidance_by_lc_trigger_1.svg)
24+
![trigger_1](./images/avoidance_by_lc_trigger_1.svg)
2525

2626
### Lane change end point condition
2727

2828
Unlike the normal avoidance module, which specifies the shift line end point, this module does not specify its end point when generating a lane change path. On the other hand, setting `execute_only_when_lane_change_finish_before_object` to `true` will activate this module only if the lane change can be completed before the avoidance target object.
2929

3030
Although setting the parameter to `false` would increase the scene of avoidance by lane change, it is assumed that sufficient lateral margin may not be ensured in some cases because the vehicle passes by the side of obstacles during the lane change.
3131

32-
![trigger_2](../image/avoidance_by_lane_change/avoidance_by_lc_trigger_2.svg)
32+
![trigger_2](./images/avoidance_by_lc_trigger_2.svg)
3333

3434
## Parameters
3535

planning/behavior_path_planner/docs/behavior_path_planner_avoidance_design.md planning/behavior_path_avoidance_module/README.md

+26-26
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ This module executes avoidance over lanes, and the decision requires the lane st
2020

2121
The following figure shows a simple explanation of the logic for avoidance path generation. First, target objects are picked up, and shift requests are generated for each object. These shift requests are generated by taking into account the lateral jerk required for avoidance (red lines). Then these requests are merged and the shift points are created on the reference path (blue line). Filtering operations are performed on the shift points such as removing unnecessary shift points (yellow line), and finally a smooth avoidance path is generated by combining Clothoid-like curve primitives (green line).
2222

23-
![fig1](../image/avoidance/avoidance_design.fig1.drawio.svg)
23+
![fig1](./images/avoidance_design.fig1.drawio.svg)
2424

2525
### Flowchart
2626

@@ -185,7 +185,7 @@ The avoidance target should be limited to stationary objects (you should not avo
185185
- This means that the vehicle is parked on the edge of the lane. This prevents the vehicle from avoiding a vehicle waiting at a traffic light in the middle of the lane. However, this is not an appropriate implementation for the purpose. Even if a vehicle is in the center of the lane, it should be avoided if it has its hazard lights on, and this is a point that should be improved in the future as the recognition performance improves.
186186
- Object is not behind ego(default: > -`2.0 m`) or too far(default: < `150.0 m`) and object is not behind the path goal.
187187

188-
![fig1](../image/avoidance/target_vehicle_selection.svg)
188+
![fig1](./images/target_vehicle_selection.svg)
189189

190190
### Parked-car detection
191191

@@ -203,7 +203,7 @@ $$
203203

204204
The closer the object is to the shoulder, the larger the value of $ratio$ (theoretical max value is 1.0), and it compares the value and `object_check_shiftable_ratio` to determine whether the object is a parked-car. If the road has no road shoulders, it uses `object_check_min_road_shoulder_width` as a road shoulder width virtually.
205205

206-
![fig2](../image/avoidance/parked-car-detection.svg)
206+
![fig2](./images/parked-car-detection.svg)
207207

208208
### Compensation for detection lost
209209

@@ -365,9 +365,9 @@ Therefore, in order to reduce the influence of the noise, avoidance module gener
365365
object_envelope_buffer: 0.3 # [m]
366366
```
367367
368-
![fig1](../image/avoidance/envelope_polygon.svg)
368+
![fig1](./images/envelope_polygon.svg)
369369
370-
![fig1](../image/avoidance/shift_line_generation.svg)
370+
![fig1](./images/shift_line_generation.svg)
371371
372372
### Computing Shift Length and Shift Points
373373
@@ -388,7 +388,7 @@ else
388388

389389
The following figure illustrates these variables(This figure just shows the max value of lateral shift length).
390390

391-
![shift_point_and_its_constraints](../image/avoidance/avoidance_module-shift_point_and_its_constraints.drawio.png)
391+
![shift_point_and_its_constraints](./images/avoidance_module-shift_point_and_its_constraints.drawio.png)
392392

393393
### Rationale of having safety buffer and safety margin
394394

@@ -399,7 +399,7 @@ To compute the shift length, additional parameters that can be tune are `lateral
399399
- It is recommended to set the value to more than half of the ego vehicle's width.
400400
- The `road_shoulder_safety_margin` will prevent the module from generating a path that might cause the vehicle to go too near the road shoulder or adjacent lane dividing line.
401401

402-
![shift_length_parameters](../image/shift_length_parameters.drawio.svg)
402+
![shift_length_parameters](./images/shift_length_parameters.drawio.svg)
403403

404404
### Generating path only within lanelet boundaries
405405

@@ -410,7 +410,7 @@ The shift length is set as a constant value before the feature is implemented. S
410410

411411
These elements are used to compute the distance from the object to the road's shoulder (`to_road_shoulder_distance`). The parameters `use_adjacent_lane` and `use_opposite_lane` allows further configuration of the to `to_road_shoulder_distance`. The following image illustrates the configuration.
412412

413-
![obstacle_to_road_shoulder_distance](../image/avoidance/obstacle_to_road_shoulder_distance.drawio.svg)
413+
![obstacle_to_road_shoulder_distance](./images/obstacle_to_road_shoulder_distance.drawio.svg)
414414

415415
If one of the following conditions is `false`, then the shift point will not be generated.
416416

@@ -565,7 +565,7 @@ To solve that, this module provides a parameter for the minimum avoidance speed,
565565
- If the ego vehicle speed is lower than "nominal" minimum speed, use the minimum speed in the calculation of the jerk.
566566
- If the ego vehicle speed is lower than "sharp" minimum speed and a nominal lateral jerk is not enough for avoidance (the case where the ego vehicle is stopped close to the obstacle), use the "sharp" minimum speed in the calculation of the jerk (it should be lower than "nominal" speed).
567567

568-
![fig1](../image/avoidance/how_to_decide_path_shape_one_object.drawio.svg)
568+
![fig1](./images/how_to_decide_path_shape_one_object.drawio.svg)
569569

570570
#### Multiple obstacle case (one direction)
571571

@@ -575,13 +575,13 @@ Generate shift points for multiple obstacles. All of them are merged to generate
575575

576576
For the details of the shift point filtering, see [filtering for shift points](#filtering-for-shift-points).
577577

578-
![fig1](../image/avoidance/how_to_decide_path_shape_multi_object_one_direction.drawio.svg)
578+
![fig1](./images/how_to_decide_path_shape_multi_object_one_direction.drawio.svg)
579579

580580
#### Multiple obstacle case (both direction)
581581

582582
Generate shift points for multiple obstacles. All of them are merged to generate new shift points. If there are areas where the desired shifts conflict in different directions, the sum of the maximum shift amounts of these areas is used as the final shift amount. The rest of the process is the same as in the case of one direction.
583583

584-
![fig1](../image/avoidance/how_to_decide_path_shape_multi_object_both_direction.drawio.svg)
584+
![fig1](./images/how_to_decide_path_shape_multi_object_both_direction.drawio.svg)
585585

586586
#### Filtering for shift points
587587

@@ -608,23 +608,23 @@ use_hatched_road_markings: false
608608

609609
#### adjacent lane
610610

611-
![fig1](../image/avoidance/use_adjacent_lane.svg)
611+
![fig1](./images/use_adjacent_lane.svg)
612612

613613
#### opposite lane
614614

615-
![fig1](../image/avoidance/use_opposite_lane.svg)
615+
![fig1](./images/use_opposite_lane.svg)
616616

617617
#### intersection areas
618618

619619
The intersection area is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md)
620620

621-
![fig1](../image/avoidance/use_intersection_areas.svg)
621+
![fig1](./images/use_intersection_areas.svg)
622622

623623
#### hatched road markings
624624

625625
The hatched road marking is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md#hatched-road-markings-area)
626626

627-
![fig1](../image/avoidance/use_hatched_road_markings.svg)
627+
![fig1](./images/use_hatched_road_markings.svg)
628628

629629
### Safety check
630630

@@ -647,23 +647,23 @@ safety_check_backward_distance: 50.0 # [m]
647647
safety_check_accel_for_rss: 2.5 # [m/ss]
648648
```
649649

650-
![fig1](../image/avoidance/safety_check_flowchart.svg)
650+
![fig1](./images/safety_check_flowchart.svg)
651651

652652
`safety_check_backward_distance` is the parameter related to the safety check area. The module checks a collision risk for all vehicle that is within shift side lane and between object `object_check_forward_distance` ahead and `safety_check_backward_distance` behind.
653653

654-
![fig1](../image/avoidance/safety_check_step_1.svg)
654+
![fig1](./images/safety_check_step_1.svg)
655655

656656
**NOTE**: Even if a part of an object polygon overlaps the detection area, if the center of gravity of the object does not exist on the lane, the vehicle is excluded from the safety check target.
657657

658658
---
659659

660660
Judge the risk of collision based on ego future position and object prediction path. The module calculates Ego's future position in the time horizon (`safety_check_time_horizon`), and use object's prediction path as object future position.
661661

662-
![fig1](../image/avoidance/safety_check_step_2.svg)
662+
![fig1](./images/safety_check_step_2.svg)
663663

664664
After calculating the future position of Ego and object, the module calculates the lateral/longitudinal deviation of Ego and the object. The module also calculates the lateral/longitudinal margin necessary to determine that it is safe to execute avoidance maneuver, and if both the lateral and longitudinal distances are less than the margins, it determines that there is a risk of a collision at that time.
665665

666-
![fig1](../image/avoidance/safety_check_margin.svg)
666+
![fig1](./images/safety_check_margin.svg)
667667

668668
The value of the longitudinal margin is calculated based on Responsibility-Sensitive Safety theory ([RSS](https://newsroom.intel.com/articles/rss-explained-five-rules-autonomous-vehicle-safety/#gs.ljzofv)). The `safety_check_idling_time` represents $T_{idle}$, and `safety_check_accel_for_rss` represents $a_{max}$.
669669

@@ -673,7 +673,7 @@ $$
673673

674674
The lateral margin is changeable based on ego longitudinal velocity. If the vehicle is driving at a high speed, the lateral margin should be larger, and if the vehicle is driving at a low speed, the value of the lateral margin should be set to a smaller value. Thus, the lateral margin for each vehicle speed is set as a parameter, and the module determines the lateral margin from the current vehicle speed as shown in the following figure.
675675

676-
![fig1](../image/avoidance/dynamic_lateral_margin.svg)
676+
![fig1](./images/dynamic_lateral_margin.svg)
677677

678678
```yaml
679679
target_velocity_matrix:
@@ -695,7 +695,7 @@ If an avoidance path can be generated and it is determined that avoidance maneuv
695695
yield_velocity: 2.78 # [m/s]
696696
```
697697

698-
![fig1](../image/avoidance/yield_maneuver.svg)
698+
![fig1](./images/yield_maneuver.svg)
699699

700700
**NOTE**: In yield maneuver, the vehicle decelerates target velocity under constraints.
701701

@@ -736,9 +736,9 @@ $$
736736
SHIFT_{current} > L_{threshold}
737737
$$
738738

739-
![fig1](../image/avoidance/yield_limitation.svg)
739+
![fig1](./images/yield_limitation.svg)
740740

741-
![fig1](../image/avoidance/yield_maneuver_flowchart.svg)
741+
![fig1](./images/yield_maneuver_flowchart.svg)
742742

743743
---
744744

@@ -935,7 +935,7 @@ namespace: `avoidance.constraints.longitudinal.`
935935
- **Planning on the intersection**
936936
- If it is known that the ego vehicle is going to stop in the middle of avoidance execution (for example, at a red traffic light), sometimes the avoidance should not be executed until the vehicle is ready to move. This is because it is impossible to predict how the environment will change during the stop.  This is especially important at intersections.
937937

938-
![fig1](../image/avoidance/intersection_problem.drawio.svg)
938+
![fig1](./images/intersection_problem.drawio.svg)
939939

940940
- **Safety Check**
941941

@@ -963,15 +963,15 @@ namespace: `avoidance.constraints.longitudinal.`
963963

964964
Developers can see what is going on in each process by visualizing all the avoidance planning process outputs. The example includes target vehicles, shift points for each object, shift points after each filtering process, etc.
965965

966-
![fig1](../image/avoidance/avoidance-debug-marker.png)
966+
![fig1](./images/avoidance-debug-marker.png)
967967

968968
To enable the debug marker, execute `ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner avoidance.publish_debug_marker true` (no restart is needed) or simply set the `publish_debug_marker` to `true` in the `avoidance.param.yaml` for permanent effect (restart is needed). Then add the marker `/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance` in `rviz2`.
969969

970970
### Echoing debug message to find out why the objects were ignored
971971

972972
If for some reason, no shift point is generated for your object, you can check for the failure reason via `ros2 topic echo`.
973973

974-
![avoidance_debug_message_array](../image/avoidance/avoidance_debug_message_array.png)
974+
![avoidance_debug_message_array](./images/avoidance_debug_message_array.png)
975975

976976
To print the debug message, just run the following
977977

0 commit comments

Comments
 (0)