Skip to content

Commit 4aacd0e

Browse files
update
Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp>
1 parent e319d21 commit 4aacd0e

File tree

3 files changed

+12
-3
lines changed

3 files changed

+12
-3
lines changed

planning/behavior_path_dynamic_avoidance_module/README.md

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

45
## Purpose / Role
6+
57
This module provides avoidance functions for vehicles, pedestrians, and obstacles in the vicinity of the ego's path in combination with the [obstacle_avoidance_planner](https://autowarefoundation.github.io/autoware.universe/main/planning/obstacle_avoidance_planner/).
68
Each module performs the following roles.
79
Dynamic Avoidance module cuts off the drivable area according to the position and velocity of the target to be avoided.
@@ -19,10 +21,12 @@ The table below lists the avoidance modules that can handle each situation.
1921
| avoid moving objects | Dynamic Avoidance Module + Obstacle Avoidance Module | No Module (Under Development) |
2022

2123
## Policy of algorithms
24+
2225
Here, we describe the policy of inner algorithms.
2326
The inner algorithms can be separated into two parts: The first decides whether to avoid the obstacles and the second cuts off the drivable area against the corresponding obstacle.
2427

2528
### Select obstacles to avoid
29+
2630
To decide whether to avoid an object, both the predicted path and the state (pose and twist) of each object are used.
2731
The type of objects the user wants this module to avoid is also required.
2832
Using this information, the module decides to _avoid_ objects that _obstruct the ego's passage_ and _can be avoided_.
@@ -33,19 +37,22 @@ For this purpose, the module judges whether the obstacle can be avoided with sat
3337
For example, the module decides not to avoid an object that is too close or fast in the lateral direction.
3438

3539
### Cuts off the drivable area against the selected vehicles
40+
3641
For the selected obstacles to be avoided, the module cuts off the drivable area.
3742
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.
3843
This design arises from that the predicted path of objects is not accurate enough to use the path modifications (at least currently).
3944
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.
4045

4146
#### Determination of lateral dimension
47+
4248
The lateral dimensions of the polygon are calculated as follows.
4349
The polygon's width to extract from the drivable area is the obstacle width and `drivable_area_generation.lat_offset_from_obstacle`.
4450
We can limit the lateral shift length by `drivable_area_generation.max_lat_offset_to_avoid`.
4551

4652
![drivable_area_extraction_width](./image/drivable_area_extraction_width.drawio.svg)
4753

4854
#### Determination of longitudinal dimension
55+
4956
Then, extracting the same directional and opposite directional obstacles from the drivable area will work as follows considering TTC (time to collision).
5057

5158
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.).
@@ -57,9 +64,11 @@ Opposite directional obstacles (Parameter names may differ from implementation)
5764
![opposite_directional_object](./image/opposite_directional_object.svg)
5865

5966
### Cuts off the drivable area against the selected pedestrians
67+
6068
Then, we describe the logic to generate the drivable areas against pedestrians to be avoided.
6169
Objects of this type are considered to have priority right of way over the ego's vehicle while ensuring a minimum safety of the ego's vehicle.
6270
In other words, the module assigns a drivable area to an obstacle with a specific margin based on the predicted paths with specific confidences for a specific time interval, as shown in the following figure.
71+
6372
<figure>
6473
<img src="./image/2024-04-18_15-13-01.png" width="600">
6574
<figcaption> Restriction areas are generated from each pedestrian's predicted paths</figcaption>
@@ -68,12 +77,12 @@ In other words, the module assigns a drivable area to an obstacle with a specifi
6877
Apart from polygons for objects, the module also generates another polygon to ensure the ego's safety, i.e., to avoid abrupt steering or significant changes from the path.
6978
This is similar to avoidance against the vehicles and takes precedence over keeping a safe distance from the object to be avoided.
7079
As a result, as shown in the figure below, the polygons around the objects reduced by the secured polygon of the ego are subtracted from the ego's drivable area.
80+
7181
<figure>
7282
<img src="./image/2024-04-18_15-32-03.png" width="600">
7383
<figcaption> Ego's minimum requirements are prioritized against object margin</figcaption>
7484
</figure>
7585

76-
7786
## Example
7887

7988
<figure>

planning/behavior_path_dynamic_avoidance_module/include/behavior_path_dynamic_avoidance_module/scene.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ struct MinMaxValue
6969
ret.max_value = max_value + scalar;
7070
return ret;
7171
};
72-
void swap() { std::swap(min_value, max_value); };
72+
void swap() { std::swap(min_value, max_value); }
7373
};
7474

7575
enum class PolygonGenerationMethod {

planning/behavior_path_dynamic_avoidance_module/src/scene.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1661,7 +1661,7 @@ DynamicAvoidanceModule::calcEgoPathBasedDynamicObstaclePolygon(
16611661
return obj_poly;
16621662
}
16631663

1664-
// TODO (takagi): replace by the function calcPredictedPathBasedDynamicObstaclePolygon()?
1664+
// should be replace by the function calcPredictedPathBasedDynamicObstaclePolygon() (takagi)
16651665
std::optional<tier4_autoware_utils::Polygon2d>
16661666
DynamicAvoidanceModule::calcObjectPathBasedDynamicObstaclePolygon(
16671667
const DynamicAvoidanceObject & object) const

0 commit comments

Comments
 (0)