Skip to content

Commit 99286ea

Browse files
authored
Merge pull request #1195 from tier4/hotfix/v0.44.5/avoidance
fix(avoidance): cherry pick PRs for avoidance module
2 parents 9d93eca + 2bccaa1 commit 99286ea

File tree

13 files changed

+262
-160
lines changed

13 files changed

+262
-160
lines changed

planning/behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lane_change.param.yaml

+32-16
Original file line numberDiff line numberDiff line change
@@ -12,64 +12,80 @@
1212
moving_time_threshold: 1.0 # [s]
1313
max_expand_ratio: 0.0 # [-]
1414
envelope_buffer_margin: 0.3 # [m]
15-
avoid_margin_lateral: 1.0 # [m]
16-
safety_buffer_lateral: 0.7 # [m]
15+
lateral_margin:
16+
soft_margin: 0.0 # [m]
17+
hard_margin: 0.0 # [m]
18+
hard_margin_for_parked_vehicle: 0.0 # [m]
1719
truck:
1820
execute_num: 2
1921
moving_speed_threshold: 1.0 # 3.6km/h
2022
moving_time_threshold: 1.0
2123
max_expand_ratio: 0.0
2224
envelope_buffer_margin: 0.3
23-
avoid_margin_lateral: 1.0
24-
safety_buffer_lateral: 0.7
25+
lateral_margin:
26+
soft_margin: 0.0 # [m]
27+
hard_margin: 0.0 # [m]
28+
hard_margin_for_parked_vehicle: 0.0 # [m]
2529
bus:
2630
execute_num: 2
2731
moving_speed_threshold: 1.0 # 3.6km/h
2832
moving_time_threshold: 1.0
2933
max_expand_ratio: 0.0
3034
envelope_buffer_margin: 0.3
31-
avoid_margin_lateral: 1.0
32-
safety_buffer_lateral: 0.7
35+
lateral_margin:
36+
soft_margin: 0.0 # [m]
37+
hard_margin: 0.0 # [m]
38+
hard_margin_for_parked_vehicle: 0.0 # [m]
3339
trailer:
3440
execute_num: 2
3541
moving_speed_threshold: 1.0 # 3.6km/h
3642
moving_time_threshold: 1.0
3743
max_expand_ratio: 0.0
3844
envelope_buffer_margin: 0.3
39-
avoid_margin_lateral: 1.0
40-
safety_buffer_lateral: 0.7
45+
lateral_margin:
46+
soft_margin: 0.0 # [m]
47+
hard_margin: 0.0 # [m]
48+
hard_margin_for_parked_vehicle: 0.0 # [m]
4149
unknown:
4250
execute_num: 1
4351
moving_speed_threshold: 0.28 # 1.0km/h
4452
moving_time_threshold: 1.0
4553
max_expand_ratio: 0.0
4654
envelope_buffer_margin: 0.3
47-
avoid_margin_lateral: 1.0
48-
safety_buffer_lateral: 0.0
55+
lateral_margin:
56+
soft_margin: 0.0 # [m]
57+
hard_margin: 0.0 # [m]
58+
hard_margin_for_parked_vehicle: 0.0 # [m]
4959
bicycle:
5060
execute_num: 2
5161
moving_speed_threshold: 0.28 # 1.0km/h
5262
moving_time_threshold: 1.0
5363
max_expand_ratio: 0.0
5464
envelope_buffer_margin: 0.8
55-
avoid_margin_lateral: 1.0
56-
safety_buffer_lateral: 1.0
65+
lateral_margin:
66+
soft_margin: 0.0 # [m]
67+
hard_margin: 0.0 # [m]
68+
hard_margin_for_parked_vehicle: 0.0 # [m]
5769
motorcycle:
5870
execute_num: 2
5971
moving_speed_threshold: 1.0 # 3.6km/h
6072
moving_time_threshold: 1.0
6173
max_expand_ratio: 0.0
6274
envelope_buffer_margin: 0.8
63-
avoid_margin_lateral: 1.0
64-
safety_buffer_lateral: 1.0
75+
lateral_margin:
76+
soft_margin: 0.0 # [m]
77+
hard_margin: 0.0 # [m]
78+
hard_margin_for_parked_vehicle: 0.0 # [m]
6579
pedestrian:
6680
execute_num: 2
6781
moving_speed_threshold: 0.28 # 1.0km/h
6882
moving_time_threshold: 1.0
6983
max_expand_ratio: 0.0
7084
envelope_buffer_margin: 0.8
71-
avoid_margin_lateral: 1.0
72-
safety_buffer_lateral: 1.0
85+
lateral_margin:
86+
soft_margin: 0.0 # [m]
87+
hard_margin: 0.0 # [m]
88+
hard_margin_for_parked_vehicle: 0.0 # [m]
7389
lower_distance_for_polygon_expansion: 0.0 # [m]
7490
upper_distance_for_polygon_expansion: 1.0 # [m]
7591

planning/behavior_path_avoidance_by_lane_change_module/src/manager.cpp

+7-5
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ void AvoidanceByLaneChangeModuleManager::init(rclcpp::Node * node)
7272
param.max_expand_ratio = getOrDeclareParameter<double>(*node, ns + "max_expand_ratio");
7373
param.envelope_buffer_margin =
7474
getOrDeclareParameter<double>(*node, ns + "envelope_buffer_margin");
75-
param.avoid_margin_lateral =
76-
getOrDeclareParameter<double>(*node, ns + "avoid_margin_lateral");
77-
param.safety_buffer_lateral =
78-
getOrDeclareParameter<double>(*node, ns + "safety_buffer_lateral");
75+
param.lateral_soft_margin =
76+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.soft_margin");
77+
param.lateral_hard_margin =
78+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.hard_margin");
79+
param.lateral_hard_margin_for_parked_vehicle =
80+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.hard_margin_for_parked_vehicle");
7981
return param;
8082
};
8183

@@ -130,7 +132,7 @@ void AvoidanceByLaneChangeModuleManager::init(rclcpp::Node * node)
130132
}
131133

132134
{
133-
const std::string ns = "avoidance.target_filtering.force_avoidance.";
135+
const std::string ns = "avoidance.target_filtering.avoidance_for_ambiguous_vehicle.";
134136
p.enable_force_avoidance_for_stopped_vehicle =
135137
getOrDeclareParameter<bool>(*node, ns + "enable");
136138
p.threshold_time_force_avoidance_for_stopped_vehicle =

planning/behavior_path_avoidance_by_lane_change_module/src/scene.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,11 @@ bool AvoidanceByLaneChange::specialRequiredCheck() const
8989
const auto nearest_object_type = utils::getHighestProbLabel(nearest_object.object.classification);
9090
const auto nearest_object_parameter =
9191
avoidance_parameters_->object_parameters.at(nearest_object_type);
92-
const auto avoid_margin =
93-
nearest_object_parameter.safety_buffer_lateral * nearest_object.distance_factor +
94-
nearest_object_parameter.avoid_margin_lateral + 0.5 * ego_width;
92+
const auto lateral_hard_margin = std::max(
93+
nearest_object_parameter.lateral_hard_margin,
94+
nearest_object_parameter.lateral_hard_margin_for_parked_vehicle);
95+
const auto avoid_margin = lateral_hard_margin * nearest_object.distance_factor +
96+
nearest_object_parameter.lateral_soft_margin + 0.5 * ego_width;
9597

9698
avoidance_helper_->setData(planner_data_);
9799
const auto shift_length = avoidance_helper_->getShiftLength(

planning/behavior_path_avoidance_module/config/avoidance.param.yaml

+45-29
Original file line numberDiff line numberDiff line change
@@ -30,81 +30,97 @@
3030
car:
3131
execute_num: 1 # [-]
3232
moving_speed_threshold: 1.0 # [m/s]
33-
moving_time_threshold: 1.0 # [s]
33+
moving_time_threshold: 2.0 # [s]
34+
lateral_margin:
35+
soft_margin: 0.7 # [m]
36+
hard_margin: 0.3 # [m]
37+
hard_margin_for_parked_vehicle: 0.3 # [m]
3438
max_expand_ratio: 0.0 # [-]
35-
envelope_buffer_margin: 0.3 # [m]
36-
avoid_margin_lateral: 1.0 # [m]
37-
safety_buffer_lateral: 0.7 # [m]
39+
envelope_buffer_margin: 0.5 # [m]
3840
safety_buffer_longitudinal: 0.0 # [m]
3941
use_conservative_buffer_longitudinal: true # [-] When set to true, the base_link2front is added to the longitudinal buffer before avoidance.
4042
truck:
4143
execute_num: 1
4244
moving_speed_threshold: 1.0 # 3.6km/h
43-
moving_time_threshold: 1.0
45+
moving_time_threshold: 2.0
46+
lateral_margin:
47+
soft_margin: 0.9 # [m]
48+
hard_margin: 0.1 # [m]
49+
hard_margin_for_parked_vehicle: 0.1 # [m]
4450
max_expand_ratio: 0.0
45-
envelope_buffer_margin: 0.3
46-
avoid_margin_lateral: 1.0
47-
safety_buffer_lateral: 0.7
51+
envelope_buffer_margin: 0.5
4852
safety_buffer_longitudinal: 0.0
4953
use_conservative_buffer_longitudinal: true
5054
bus:
5155
execute_num: 1
5256
moving_speed_threshold: 1.0 # 3.6km/h
53-
moving_time_threshold: 1.0
57+
moving_time_threshold: 2.0
58+
lateral_margin:
59+
soft_margin: 0.9 # [m]
60+
hard_margin: 0.1 # [m]
61+
hard_margin_for_parked_vehicle: 0.1 # [m]
5462
max_expand_ratio: 0.0
55-
envelope_buffer_margin: 0.3
56-
avoid_margin_lateral: 1.0
57-
safety_buffer_lateral: 0.7
63+
envelope_buffer_margin: 0.5
5864
safety_buffer_longitudinal: 0.0
5965
use_conservative_buffer_longitudinal: true
6066
trailer:
6167
execute_num: 1
6268
moving_speed_threshold: 1.0 # 3.6km/h
63-
moving_time_threshold: 1.0
69+
moving_time_threshold: 2.0
70+
lateral_margin:
71+
soft_margin: 0.9 # [m]
72+
hard_margin: 0.1 # [m]
73+
hard_margin_for_parked_vehicle: 0.1 # [m]
6474
max_expand_ratio: 0.0
65-
envelope_buffer_margin: 0.3
66-
avoid_margin_lateral: 1.0
67-
safety_buffer_lateral: 0.7
75+
envelope_buffer_margin: 0.5
6876
safety_buffer_longitudinal: 0.0
6977
use_conservative_buffer_longitudinal: true
7078
unknown:
7179
execute_num: 1
7280
moving_speed_threshold: 0.28 # 1.0km/h
7381
moving_time_threshold: 1.0
82+
lateral_margin:
83+
soft_margin: 0.7 # [m]
84+
hard_margin: -0.2 # [m]
85+
hard_margin_for_parked_vehicle: -0.2 # [m]
7486
max_expand_ratio: 0.0
75-
envelope_buffer_margin: 0.3
76-
avoid_margin_lateral: 1.0
77-
safety_buffer_lateral: 0.7
87+
envelope_buffer_margin: 0.1
7888
safety_buffer_longitudinal: 0.0
7989
use_conservative_buffer_longitudinal: true
8090
bicycle:
8191
execute_num: 1
8292
moving_speed_threshold: 0.28 # 1.0km/h
8393
moving_time_threshold: 1.0
94+
lateral_margin:
95+
soft_margin: 0.7 # [m]
96+
hard_margin: 0.5 # [m]
97+
hard_margin_for_parked_vehicle: 0.5 # [m]
8498
max_expand_ratio: 0.0
85-
envelope_buffer_margin: 0.8
86-
avoid_margin_lateral: 1.0
87-
safety_buffer_lateral: 1.0
99+
envelope_buffer_margin: 0.5
88100
safety_buffer_longitudinal: 1.0
89101
use_conservative_buffer_longitudinal: true
90102
motorcycle:
91103
execute_num: 1
92104
moving_speed_threshold: 1.0 # 3.6km/h
93105
moving_time_threshold: 1.0
106+
lateral_margin:
107+
soft_margin: 0.7 # [m]
108+
hard_margin: 0.3 # [m]
109+
hard_margin_for_parked_vehicle: 0.3 # [m]
94110
max_expand_ratio: 0.0
95-
envelope_buffer_margin: 0.8
96-
avoid_margin_lateral: 1.0
97-
safety_buffer_lateral: 1.0
111+
envelope_buffer_margin: 0.5
98112
safety_buffer_longitudinal: 1.0
99113
use_conservative_buffer_longitudinal: true
100114
pedestrian:
101115
execute_num: 1
102116
moving_speed_threshold: 0.28 # 1.0km/h
103117
moving_time_threshold: 1.0
118+
lateral_margin:
119+
soft_margin: 0.7 # [m]
120+
hard_margin: 0.5 # [m]
121+
hard_margin_for_parked_vehicle: 0.5 # [m]
104122
max_expand_ratio: 0.0
105-
envelope_buffer_margin: 0.8
106-
avoid_margin_lateral: 1.0
107-
safety_buffer_lateral: 1.0
123+
envelope_buffer_margin: 0.5
108124
safety_buffer_longitudinal: 1.0
109125
use_conservative_buffer_longitudinal: true
110126
lower_distance_for_polygon_expansion: 30.0 # [m]
@@ -140,7 +156,7 @@
140156
backward_distance: 10.0 # [m]
141157

142158
# params for avoidance of vehicle type objects that are ambiguous as to whether they are parked.
143-
force_avoidance:
159+
avoidance_for_ambiguous_vehicle:
144160
enable: false # [-]
145161
time_threshold: 1.0 # [s]
146162
distance_threshold: 1.0 # [m]

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/data_structs.hpp

+15-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,11 @@ struct ObjectParameter
6969

7070
double envelope_buffer_margin{0.0};
7171

72-
double avoid_margin_lateral{1.0};
72+
double lateral_soft_margin{1.0};
7373

74-
double safety_buffer_lateral{1.0};
74+
double lateral_hard_margin{1.0};
75+
76+
double lateral_hard_margin_for_parked_vehicle{1.0};
7577

7678
double safety_buffer_longitudinal{0.0};
7779

@@ -382,7 +384,8 @@ struct ObjectData // avoidance target
382384
rclcpp::Time last_move;
383385
double stop_time{0.0};
384386

385-
// store the information of the lanelet which the object's overhang is currently occupying
387+
// It is one of the ego driving lanelets (closest lanelet to the object) and used in the logic to
388+
// check whether the object is on the ego lane.
386389
lanelet::ConstLanelet overhang_lanelet;
387390

388391
// the position at the detected moment
@@ -415,6 +418,15 @@ struct ObjectData // avoidance target
415418
// is within intersection area
416419
bool is_within_intersection{false};
417420

421+
// is parked vehicle on road shoulder
422+
bool is_parked{false};
423+
424+
// is driving on ego current lane
425+
bool is_on_ego_lane{false};
426+
427+
// is ambiguous stopped vehicle.
428+
bool is_ambiguous{false};
429+
418430
// object direction.
419431
Direction direction{Direction::NONE};
420432

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/helper.hpp

+19
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include "behavior_path_avoidance_module/data_structs.hpp"
1919
#include "behavior_path_avoidance_module/utils.hpp"
20+
#include "behavior_path_planner_common/utils/utils.hpp"
2021

2122
#include <motion_utils/distance/distance.hpp>
2223

@@ -134,6 +135,24 @@ class AvoidanceHelper
134135
shift_length, getLateralMaxJerkLimit(), getAvoidanceEgoSpeed());
135136
}
136137

138+
double getFrontConstantDistance(const ObjectData & object) const
139+
{
140+
const auto object_type = utils::getHighestProbLabel(object.object.classification);
141+
const auto object_parameter = parameters_->object_parameters.at(object_type);
142+
const auto & additional_buffer_longitudinal =
143+
object_parameter.use_conservative_buffer_longitudinal ? data_->parameters.base_link2front
144+
: 0.0;
145+
return object_parameter.safety_buffer_longitudinal + additional_buffer_longitudinal;
146+
}
147+
148+
double getRearConstantDistance(const ObjectData & object) const
149+
{
150+
const auto object_type = utils::getHighestProbLabel(object.object.classification);
151+
const auto object_parameter = parameters_->object_parameters.at(object_type);
152+
return object_parameter.safety_buffer_longitudinal + data_->parameters.base_link2rear +
153+
object.length;
154+
}
155+
137156
double getEgoShift() const
138157
{
139158
validate();

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/parameter_helper.hpp

+7-5
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ AvoidanceParameters getParameter(rclcpp::Node * node)
7272
param.max_expand_ratio = getOrDeclareParameter<double>(*node, ns + "max_expand_ratio");
7373
param.envelope_buffer_margin =
7474
getOrDeclareParameter<double>(*node, ns + "envelope_buffer_margin");
75-
param.avoid_margin_lateral =
76-
getOrDeclareParameter<double>(*node, ns + "avoid_margin_lateral");
77-
param.safety_buffer_lateral =
78-
getOrDeclareParameter<double>(*node, ns + "safety_buffer_lateral");
75+
param.lateral_soft_margin =
76+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.soft_margin");
77+
param.lateral_hard_margin =
78+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.hard_margin");
79+
param.lateral_hard_margin_for_parked_vehicle =
80+
getOrDeclareParameter<double>(*node, ns + "lateral_margin.hard_margin_for_parked_vehicle");
7981
param.safety_buffer_longitudinal =
8082
getOrDeclareParameter<double>(*node, ns + "safety_buffer_longitudinal");
8183
param.use_conservative_buffer_longitudinal =
@@ -138,7 +140,7 @@ AvoidanceParameters getParameter(rclcpp::Node * node)
138140
}
139141

140142
{
141-
const std::string ns = "avoidance.target_filtering.force_avoidance.";
143+
const std::string ns = "avoidance.target_filtering.avoidance_for_ambiguous_vehicle.";
142144
p.enable_force_avoidance_for_stopped_vehicle =
143145
getOrDeclareParameter<bool>(*node, ns + "enable");
144146
p.threshold_time_force_avoidance_for_stopped_vehicle =

0 commit comments

Comments
 (0)