Skip to content

Commit a6312e3

Browse files
satoshi-otaTomohitoAndo
authored andcommitted
feat(avoidance): change lateral margin based on if it's parked vehicle (autowarefoundation#6520)
* feat(avoidance): check if it's parked vehicle Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> * feat(avoidance): change lateral margin based on if it's parked vehicle Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com> --------- Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent afff077 commit a6312e3

File tree

11 files changed

+155
-102
lines changed

11 files changed

+155
-102
lines changed

planning/behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lc.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

+6-4
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

planning/behavior_path_avoidance_by_lane_change_module/src/scene.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ bool AvoidanceByLaneChange::specialRequiredCheck() const
8686
const auto nearest_object_type = utils::getHighestProbLabel(nearest_object.object.classification);
8787
const auto nearest_object_parameter =
8888
avoidance_parameters_->object_parameters.at(nearest_object_type);
89-
const auto avoid_margin =
90-
nearest_object_parameter.safety_buffer_lateral * nearest_object.distance_factor +
91-
nearest_object_parameter.avoid_margin_lateral + 0.5 * ego_width;
89+
const auto lateral_hard_margin = std::max(
90+
nearest_object_parameter.lateral_hard_margin,
91+
nearest_object_parameter.lateral_hard_margin_for_parked_vehicle);
92+
const auto avoid_margin = lateral_hard_margin * nearest_object.distance_factor +
93+
nearest_object_parameter.lateral_soft_margin + 0.5 * ego_width;
9294

9395
avoidance_helper_->setData(planner_data_);
9496
const auto shift_length = avoidance_helper_->getShiftLength(

planning/behavior_path_avoidance_module/config/avoidance.param.yaml

+44-28
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]

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/data_structs.hpp

+7-2
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

@@ -415,6 +417,9 @@ struct ObjectData // avoidance target
415417
// is within intersection area
416418
bool is_within_intersection{false};
417419

420+
// is parked vehicle on road shoulder
421+
bool is_parked{false};
422+
418423
// object direction.
419424
Direction direction{Direction::NONE};
420425

planning/behavior_path_avoidance_module/include/behavior_path_avoidance_module/parameter_helper.hpp

+6-4
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 =

planning/behavior_path_avoidance_module/src/debug.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ MarkerArray createObjectInfoMarkerArray(const ObjectDataArray & objects, std::st
176176
marker.id = uuidToInt32(object.object.object_id);
177177
marker.pose.position.z += 2.0;
178178
std::ostringstream string_stream;
179-
string_stream << object.reason;
179+
string_stream << object.reason << (object.is_parked ? "(PARKED)" : "");
180180
marker.text = string_stream.str();
181181
marker.color = createMarkerColor(1.0, 1.0, 1.0, 0.999);
182182
marker.scale = createMarkerScale(0.6, 0.6, 0.6);

planning/behavior_path_avoidance_module/src/manager.cpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,11 @@ void AvoidanceModuleManager::updateModuleParams(const std::vector<rclcpp::Parame
6060
updateParam<double>(parameters, ns + "moving_time_threshold", config.moving_time_threshold);
6161
updateParam<double>(parameters, ns + "max_expand_ratio", config.max_expand_ratio);
6262
updateParam<double>(parameters, ns + "envelope_buffer_margin", config.envelope_buffer_margin);
63-
updateParam<double>(parameters, ns + "avoid_margin_lateral", config.avoid_margin_lateral);
64-
updateParam<double>(parameters, ns + "safety_buffer_lateral", config.safety_buffer_lateral);
63+
updateParam<double>(parameters, ns + "lateral_margin.soft_margin", config.lateral_soft_margin);
64+
updateParam<double>(parameters, ns + "lateral_margin.hard_margin", config.lateral_hard_margin);
65+
updateParam<double>(
66+
parameters, ns + "lateral_margin.hard_margin_for_parked_vehicle",
67+
config.lateral_hard_margin_for_parked_vehicle);
6568
updateParam<double>(
6669
parameters, ns + "safety_buffer_longitudinal", config.safety_buffer_longitudinal);
6770
updateParam<bool>(

planning/behavior_path_avoidance_module/src/scene.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -635,8 +635,8 @@ void AvoidanceModule::fillDebugData(
635635
: 0.0;
636636
const auto & vehicle_width = planner_data_->parameters.vehicle_width;
637637

638-
const auto max_avoid_margin = object_parameter.safety_buffer_lateral * o_front.distance_factor +
639-
object_parameter.avoid_margin_lateral + 0.5 * vehicle_width;
638+
const auto max_avoid_margin = object_parameter.lateral_hard_margin * o_front.distance_factor +
639+
object_parameter.lateral_soft_margin + 0.5 * vehicle_width;
640640

641641
const auto variable = helper_->getSharpAvoidanceDistance(
642642
helper_->getShiftLength(o_front, utils::avoidance::isOnRight(o_front), max_avoid_margin));
@@ -1408,8 +1408,8 @@ double AvoidanceModule::calcDistanceToStopLine(const ObjectData & object) const
14081408
const auto object_type = utils::getHighestProbLabel(object.object.classification);
14091409
const auto object_parameter = parameters_->object_parameters.at(object_type);
14101410

1411-
const auto avoid_margin = object_parameter.safety_buffer_lateral * object.distance_factor +
1412-
object_parameter.avoid_margin_lateral + 0.5 * vehicle_width;
1411+
const auto avoid_margin = object_parameter.lateral_hard_margin * object.distance_factor +
1412+
object_parameter.lateral_soft_margin + 0.5 * vehicle_width;
14131413
const auto variable = helper_->getMinAvoidanceDistance(
14141414
helper_->getShiftLength(object, utils::avoidance::isOnRight(object), avoid_margin));
14151415
const auto & additional_buffer_longitudinal =
@@ -1638,8 +1638,8 @@ void AvoidanceModule::insertPrepareVelocity(ShiftedPath & shifted_path) const
16381638
const auto & vehicle_width = planner_data_->parameters.vehicle_width;
16391639
const auto object_type = utils::getHighestProbLabel(object.object.classification);
16401640
const auto object_parameter = parameters_->object_parameters.at(object_type);
1641-
const auto avoid_margin = object_parameter.safety_buffer_lateral * object.distance_factor +
1642-
object_parameter.avoid_margin_lateral + 0.5 * vehicle_width;
1641+
const auto avoid_margin = object_parameter.lateral_hard_margin * object.distance_factor +
1642+
object_parameter.lateral_soft_margin + 0.5 * vehicle_width;
16431643
const auto shift_length =
16441644
helper_->getShiftLength(object, utils::avoidance::isOnRight(object), avoid_margin);
16451645

planning/behavior_path_avoidance_module/src/shift_line_generator.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -234,9 +234,12 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
234234

235235
const double LAT_DIST_BUFFER = desire_shift_length > 0.0 ? 1e-3 : -1e-3;
236236

237+
const auto lateral_hard_margin = object.is_parked
238+
? object_parameter.lateral_hard_margin_for_parked_vehicle
239+
: object_parameter.lateral_hard_margin;
237240
const auto infeasible =
238241
std::abs(feasible_shift_length - object.overhang_points.front().first) - LAT_DIST_BUFFER <
239-
0.5 * data_->parameters.vehicle_width + object_parameter.safety_buffer_lateral;
242+
0.5 * data_->parameters.vehicle_width + lateral_hard_margin;
240243
if (infeasible) {
241244
RCLCPP_DEBUG(rclcpp::get_logger(""), "feasible shift length is not enough to avoid. ");
242245
object.reason = AvoidanceDebugFactor::TOO_LARGE_JERK;

0 commit comments

Comments
 (0)