Skip to content

Commit 505692e

Browse files
update doc
Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp>
1 parent 4951cd1 commit 505692e

File tree

1 file changed

+45
-45
lines changed
  • planning/behavior_path_dynamic_avoidance_module

1 file changed

+45
-45
lines changed

planning/behavior_path_dynamic_avoidance_module/README.md

+45-45
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
# Dynamic avoidance design
2-
32
This module is under development.
43

54
## Purpose / Role
6-
75
This module provides avoidance functions for vehicles, pedestrians, and obstacles in the vicinity of the ego's path in combination with the obstacle_avoidance module.
86
Each module performs the following roles.
97
Dynamic Avoidance module: This module cuts off the drivable area according to the position and velocity of the target to be avoided.
@@ -19,76 +17,78 @@ The table below lists the avoidance modules that can be used for each situation.
1917
| avoid not-moving objects | Avoidance Module <br> Dynamic Avoidance Module + Obstacle Avoidance Module | Avoidance Module |
2018
| avoid moving objects | Dynamic Avoidance Module + Obstacle Avoidance Module | No Module (Under Development) |
2119

22-
## Policy of Algorithms
20+
## Policy of algorithms
2321
Here, we describe the policy of inner algorithms.
2422
The inner algorithms can be separated into two parts: The first decide whether to avoid the obstacles and the second cuts off the drivable area against the corresponding obstacle.
2523
If you are interested in more details, please see the code itself.
2624

2725
### Select obstacles to avoid
28-
2926
To decide whether to avoid an object, both the predicted path and the state (poes and twist) of each object are used.
3027
The type of objects the user wants this module to avoid is also required.
31-
Using this information, the module makes a decision to "avoid" objects that "obstruct own passage" and "can be avoided".
32-
33-
As logics for determining whether an object is an obstacle or not, the followings are implemented.
34-
- longtitudinal speed
35-
- 経路に近い 干渉する
36-
- 干渉する時刻が遠すぎると決断を先延ばしにする
37-
- カットアウト
38-
39-
40-
避けられるか否か
41-
交差 lateral speed
42-
干渉する時刻が近すぎると回避は諦める
43-
横G横ジャークの制約をみたして避けられるか
44-
カットイン
45-
46-
どうよけるか 右 左?
47-
48-
49-
The dynamics obstacles meeting the following condition will be avoided.
50-
51-
- The type is designated as `target_object.*`.
52-
- The norm of the obstacle's velocity projected to the ego's path is smaller than `target_object.min_obstacle_vel`.
53-
- The obstacle is in the next lane to the ego's lane, which will not cut-into the ego's lane according to the highest-prioritized predicted path.
28+
Using this information, the module decides to *avoid* objects that *obstruct the ego's passage* and *can be avoided*.
5429

55-
### Drivable area modification
30+
The definition of *obstruct own passage* is implemented as the object that collides within seconds.
31+
This process wastes computational cost by doing it for all objects; thus, filtering by the relative position and speed of the object with respect to the ego's path is also done as an auxiliary process.
32+
The other, *can be avoided* denotes whether it can be avoided without risk to passengers or other vehicles.
33+
For this purpose, it is judged whether the obstacle can be avoided by satisfying the constraints of lateral acceleration and lateral jerk.
34+
For example, the modeule decides not to avoid an object that is too close or fast in the lateral direction because it cannot be avoided.
5635

57-
交差物体を右か左どちらによけるか
36+
### Cuts off the drivable area against the selected obstacles
37+
For the selected obstacles to be avoided, the module cuts off the drivable area.
38+
As inputs to decide the shapes of cut-off polygons, poses of the obstacles are mainly used, assuming they move in parallel to the ego's path, instead of its predicted path.
39+
This design arises from that the predicted path of objects is not accurate enough to use the path modifications (at least currently).
40+
Furthermore, the output drivable area shape is designed as a rectangular cutout along the ego's path to make the computation scalar rather than planar.
5841

59-
60-
To realize dynamic obstacles for avoidance, the time dimension should be take into an account considering the dynamics.
61-
However, it will make the planning problem much harder to solve.
62-
Therefore, we project the time dimension to the 2D pose dimension.
63-
64-
Currently, the predicted paths of predicted objects are not so stable.
65-
Therefore, instead of using the predicted paths, we assume that the obstacle will run parallel to the ego's path.
66-
67-
First, a maximum lateral offset to avoid is calculated as follows.
68-
The polygon's width to extract from the drivable area is the obstacle width and double `drivable_area_generation.lat_offset_from_obstacle`.
69-
We can limit the lateral shift offset by `drivable_area_generation.max_lat_offset_to_avoid`.
42+
#### Determination of lateral dimension
43+
Lateral dimensions of the polygon is calculated as follows.
44+
The polygon's width to extract from the drivable area is the obstacle width and `drivable_area_generation.lat_offset_from_obstacle`.
45+
We can limit the lateral shift length by `drivable_area_generation.max_lat_offset_to_avoid`.
7046

7147
![drivable_area_extraction_width](./image/drivable_area_extraction_width.drawio.svg)
7248

49+
50+
#### Determination of longtitudinal dimension
7351
Then, extracting the same directional and opposite directional obstacles from the drivable area will work as follows considering TTC (time to collision).
52+
7453
Regarding the same directional obstacles, obstacles whose TTC is negative will be ignored (e.g. The obstacle is in front of the ego, and the obstacle's velocity is larger than the ego's velocity.).
7554

76-
Same directional obstacles
55+
Same directional obstacles (Parameter names may differ from implementation)
7756
![same_directional_object](./image/same_directional_object.svg)
7857

79-
Opposite directional obstacles
58+
Opposite directional obstacles (Parameter names may differ from implementation)
8059
![opposite_directional_object](./image/opposite_directional_object.svg)
8160

8261
## Example
62+
<figure>
63+
<img src="./image/image-20230807-151945.png" width="800">
64+
<figcaption>Avoidance for the depaturing bus</figcaption>
65+
</figure>
8366

8467

85-
## Future works
68+
<figure>
69+
<img src="./image/image-20230807-152835.png" width="800">
70+
<figcaption>Avoidance on curve </figcaption>
71+
</figure>
8672

87-
歩行者の回避
88-
より大きな回避幅での回避
73+
<figure>
74+
<img src="./image/image-20230808-095936.png" width="800">
75+
<figcaption>Avoidance against the opposite direction vehicle</figcaption>
76+
</figure>
8977

78+
<figure>
79+
<img src="./image/image-20230808-152853.png" width="800">
80+
<figcaption>Avoidance for multiple vehicle</figcaption>
81+
</figure>
82+
83+
## Future works
84+
Currently, the path shifting length is limited to 0.5 meters or less by `drivable_area_generation.max_lat_offset_to_avoid`.
85+
This is caused by the lack of functionality to work with other modules and the structure of the planning component.
86+
Due to this issue, this module can only handle situations where a small avoidance width is sufficient.
87+
This issue is the most significant for this module.
88+
In addition, the ability of this module to extend the drivable area as needed is also required.
9089

9190
## Parameters
91+
Under development
9292

9393
| Name | Unit | Type | Description | Default value |
9494
| :-------------------------------------------------------------------- | :---- | :----- | :--------------------------------------------------------- | :------------ |

0 commit comments

Comments
 (0)