Skip to content

Commit ef733b1

Browse files
committed
modify drivable area expansion to avoid static objects
Signed-off-by: mohammad alqudah <alqudah.mohammad@tier4.jp>
1 parent f8a10ad commit ef733b1

File tree

6 files changed

+91
-55
lines changed

6 files changed

+91
-55
lines changed

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner/config/drivable_area_expansion.param.yaml

+8-6
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
extra_wheelbase: 0.0 # [m] extra length to add to the wheelbase
2020
extra_front_overhang: 0.5 # [m] extra length to add to the front overhang
2121
extra_width: 1.0 # [m] extra length to add to the width
22-
dynamic_objects:
23-
avoid: false # if true, the drivable area is not expanded in the predicted path of dynamic objects
22+
object_exclusion:
23+
exclude_static: false # if true, the drivable area is not expanded over static objects
24+
exclude_dynamic: false # if true, the drivable area is not expanded in the predicted path of dynamic objects
25+
stopped_object_velocity_threshold: 1.0 # [m/s] velocity threshold for static objects
2426
extra_footprint_offset:
25-
front: 0.5 # [m] extra length to add to the front of the dynamic object footprint
26-
rear: 0.5 # [m] extra length to add to the rear of the dynamic object footprint
27-
left: 0.5 # [m] extra length to add to the left of the dynamic object footprint
28-
right: 0.5 # [m] extra length to add to the rear of the dynamic object footprint
27+
front: 0.5 # [m] extra length to add to the front of object footprint
28+
rear: 0.5 # [m] extra length to add to the rear of object footprint
29+
left: 0.5 # [m] extra length to add to the left of object footprint
30+
right: 0.5 # [m] extra length to add to the rear of object footprint
2931
path_preprocessing:
3032
max_arc_length: 100.0 # [m] maximum arc length along the path where the ego footprint is projected (0.0 means no limit)
3133
resample_interval: 2.0 # [m] fixed interval between resampled path points (0.0 means path points are directly used)

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp

+15-9
Original file line numberDiff line numberDiff line change
@@ -804,9 +804,12 @@ SetParametersResult BehaviorPathPlannerNode::onSetParam(
804804
update_param(
805805
parameters, DrivableAreaExpansionParameters::ENABLED_PARAM,
806806
planner_data_->drivable_area_expansion_parameters.enabled);
807+
update_param(
808+
parameters, DrivableAreaExpansionParameters::AVOID_STA_OBJECTS_PARAM,
809+
planner_data_->drivable_area_expansion_parameters.object_exclusion.exclude_static);
807810
update_param(
808811
parameters, DrivableAreaExpansionParameters::AVOID_DYN_OBJECTS_PARAM,
809-
planner_data_->drivable_area_expansion_parameters.avoid_dynamic_objects);
812+
planner_data_->drivable_area_expansion_parameters.object_exclusion.exclude_dynamic);
810813
update_param(
811814
parameters, DrivableAreaExpansionParameters::AVOID_LINESTRING_TYPES_PARAM,
812815
planner_data_->drivable_area_expansion_parameters.avoid_linestring_types);
@@ -823,17 +826,20 @@ SetParametersResult BehaviorPathPlannerNode::onSetParam(
823826
parameters, DrivableAreaExpansionParameters::EGO_EXTRA_WIDTH,
824827
planner_data_->drivable_area_expansion_parameters.extra_width);
825828
update_param(
826-
parameters, DrivableAreaExpansionParameters::DYN_OBJECTS_EXTRA_OFFSET_FRONT,
827-
planner_data_->drivable_area_expansion_parameters.dynamic_objects_extra_front_offset);
829+
parameters, DrivableAreaExpansionParameters::OBJECTS_EXTRA_OFFSET_FRONT,
830+
planner_data_->drivable_area_expansion_parameters.object_exclusion.front_offset);
831+
update_param(
832+
parameters, DrivableAreaExpansionParameters::OBJECTS_EXTRA_OFFSET_REAR,
833+
planner_data_->drivable_area_expansion_parameters.object_exclusion.rear_offset);
828834
update_param(
829-
parameters, DrivableAreaExpansionParameters::DYN_OBJECTS_EXTRA_OFFSET_REAR,
830-
planner_data_->drivable_area_expansion_parameters.dynamic_objects_extra_rear_offset);
835+
parameters, DrivableAreaExpansionParameters::OBJECTS_EXTRA_OFFSET_LEFT,
836+
planner_data_->drivable_area_expansion_parameters.object_exclusion.left_offset);
831837
update_param(
832-
parameters, DrivableAreaExpansionParameters::DYN_OBJECTS_EXTRA_OFFSET_LEFT,
833-
planner_data_->drivable_area_expansion_parameters.dynamic_objects_extra_left_offset);
838+
parameters, DrivableAreaExpansionParameters::OBJECTS_EXTRA_OFFSET_RIGHT,
839+
planner_data_->drivable_area_expansion_parameters.object_exclusion.right_offset);
834840
update_param(
835-
parameters, DrivableAreaExpansionParameters::DYN_OBJECTS_EXTRA_OFFSET_RIGHT,
836-
planner_data_->drivable_area_expansion_parameters.dynamic_objects_extra_right_offset);
841+
parameters, DrivableAreaExpansionParameters::STOPPED_OBJ_VEL_THRESH,
842+
planner_data_->drivable_area_expansion_parameters.object_exclusion.stopped_obj_vel_th);
837843
update_param(
838844
parameters, DrivableAreaExpansionParameters::MAX_EXP_DIST_PARAM,
839845
planner_data_->drivable_area_expansion_parameters.max_expansion_distance);

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp

+30-23
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,25 @@ struct DrivableAreaExpansionParameters
3333
static constexpr auto EGO_EXTRA_FRONT_OVERHANG = "dynamic_expansion.ego.extra_front_overhang";
3434
static constexpr auto EGO_EXTRA_WHEELBASE = "dynamic_expansion.ego.extra_wheelbase";
3535
static constexpr auto EGO_EXTRA_WIDTH = "dynamic_expansion.ego.extra_width";
36-
static constexpr auto DYN_OBJECTS_EXTRA_OFFSET_FRONT =
37-
"dynamic_expansion.dynamic_objects.extra_footprint_offset.front";
38-
static constexpr auto DYN_OBJECTS_EXTRA_OFFSET_REAR =
39-
"dynamic_expansion.dynamic_objects.extra_footprint_offset.rear";
40-
static constexpr auto DYN_OBJECTS_EXTRA_OFFSET_LEFT =
41-
"dynamic_expansion.dynamic_objects.extra_footprint_offset.left";
42-
static constexpr auto DYN_OBJECTS_EXTRA_OFFSET_RIGHT =
43-
"dynamic_expansion.dynamic_objects.extra_footprint_offset.right";
36+
static constexpr auto OBJECTS_EXTRA_OFFSET_FRONT =
37+
"dynamic_expansion.object_exclusion.extra_footprint_offset.front";
38+
static constexpr auto OBJECTS_EXTRA_OFFSET_REAR =
39+
"dynamic_expansion.object_exclusion.extra_footprint_offset.rear";
40+
static constexpr auto OBJECTS_EXTRA_OFFSET_LEFT =
41+
"dynamic_expansion.object_exclusion.extra_footprint_offset.left";
42+
static constexpr auto OBJECTS_EXTRA_OFFSET_RIGHT =
43+
"dynamic_expansion.object_exclusion.extra_footprint_offset.right";
44+
static constexpr auto STOPPED_OBJ_VEL_THRESH =
45+
"dynamic_expansion.object_exclusion.stopped_object_velocity_threshold";
4446
static constexpr auto MAX_EXP_DIST_PARAM = "dynamic_expansion.max_expansion_distance";
4547
static constexpr auto RESAMPLE_INTERVAL_PARAM =
4648
"dynamic_expansion.path_preprocessing.resample_interval";
4749
static constexpr auto MAX_PATH_ARC_LENGTH_PARAM =
4850
"dynamic_expansion.path_preprocessing.max_arc_length";
4951
static constexpr auto MAX_REUSE_DEVIATION_PARAM =
5052
"dynamic_expansion.path_preprocessing.reuse_max_deviation";
51-
static constexpr auto AVOID_DYN_OBJECTS_PARAM = "dynamic_expansion.dynamic_objects.avoid";
53+
static constexpr auto AVOID_STA_OBJECTS_PARAM = "dynamic_expansion.object_exclusion.exclude_static";
54+
static constexpr auto AVOID_DYN_OBJECTS_PARAM = "dynamic_expansion.object_exclusion.exclude_dynamic";
5255
static constexpr auto AVOID_LINESTRING_TYPES_PARAM = "dynamic_expansion.avoid_linestring.types";
5356
static constexpr auto AVOID_LINESTRING_DIST_PARAM = "dynamic_expansion.avoid_linestring.distance";
5457
static constexpr auto SMOOTHING_CURVATURE_WINDOW_PARAM =
@@ -72,18 +75,24 @@ struct DrivableAreaExpansionParameters
7275
double extra_width{};
7376
int curvature_average_window{};
7477
double max_bound_rate{};
75-
double dynamic_objects_extra_left_offset{};
76-
double dynamic_objects_extra_right_offset{};
77-
double dynamic_objects_extra_rear_offset{};
78-
double dynamic_objects_extra_front_offset{};
7978
double max_expansion_distance{};
8079
double max_path_arc_length{};
8180
double resample_interval{};
8281
double arc_length_range{};
8382
double max_reuse_deviation{};
8483
double min_bound_interval{};
85-
bool avoid_dynamic_objects{};
8684
bool print_runtime{};
85+
86+
struct ObjectExclusion{
87+
bool exclude_static{};
88+
bool exclude_dynamic{};
89+
double front_offset{};
90+
double rear_offset{};
91+
double left_offset{};
92+
double right_offset{};
93+
double stopped_obj_vel_th{};
94+
} object_exclusion;
95+
8796
std::vector<std::string> avoid_linestring_types{};
8897
autoware::vehicle_info_utils::VehicleInfo vehicle_info;
8998

@@ -109,17 +118,15 @@ struct DrivableAreaExpansionParameters
109118
max_path_arc_length = node.declare_parameter<double>(MAX_PATH_ARC_LENGTH_PARAM);
110119
resample_interval = node.declare_parameter<double>(RESAMPLE_INTERVAL_PARAM);
111120
max_reuse_deviation = node.declare_parameter<double>(MAX_REUSE_DEVIATION_PARAM);
112-
dynamic_objects_extra_front_offset =
113-
node.declare_parameter<double>(DYN_OBJECTS_EXTRA_OFFSET_FRONT);
114-
dynamic_objects_extra_rear_offset =
115-
node.declare_parameter<double>(DYN_OBJECTS_EXTRA_OFFSET_REAR);
116-
dynamic_objects_extra_left_offset =
117-
node.declare_parameter<double>(DYN_OBJECTS_EXTRA_OFFSET_LEFT);
118-
dynamic_objects_extra_right_offset =
119-
node.declare_parameter<double>(DYN_OBJECTS_EXTRA_OFFSET_RIGHT);
121+
object_exclusion.exclude_static = node.declare_parameter<bool>(AVOID_STA_OBJECTS_PARAM);
122+
object_exclusion.exclude_dynamic = node.declare_parameter<bool>(AVOID_DYN_OBJECTS_PARAM);
123+
object_exclusion.stopped_obj_vel_th = node.declare_parameter<double>(STOPPED_OBJ_VEL_THRESH);
124+
object_exclusion.front_offset = node.declare_parameter<double>(OBJECTS_EXTRA_OFFSET_FRONT);
125+
object_exclusion.rear_offset = node.declare_parameter<double>(OBJECTS_EXTRA_OFFSET_REAR);
126+
object_exclusion.left_offset = node.declare_parameter<double>(OBJECTS_EXTRA_OFFSET_LEFT);
127+
object_exclusion.right_offset = node.declare_parameter<double>(OBJECTS_EXTRA_OFFSET_RIGHT);
120128
avoid_linestring_types =
121129
node.declare_parameter<std::vector<std::string>>(AVOID_LINESTRING_TYPES_PARAM);
122-
avoid_dynamic_objects = node.declare_parameter<bool>(AVOID_DYN_OBJECTS_PARAM);
123130
avoid_linestring_dist = node.declare_parameter<double>(AVOID_LINESTRING_DIST_PARAM);
124131
min_bound_interval = node.declare_parameter<double>(MIN_BOUND_INTERVAL);
125132
print_runtime = node.declare_parameter<bool>(PRINT_RUNTIME_PARAM);

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/drivable_area_expansion/footprints.cpp

+30-10
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
#include "autoware/behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp"
1818

19+
#include "autoware/behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp"
20+
1921
#include <autoware_utils/geometry/boost_polygon_utils.hpp>
2022
#include <autoware_utils/geometry/geometry.hpp>
2123

@@ -44,21 +46,39 @@ MultiPolygon2d create_object_footprints(
4446
const autoware_perception_msgs::msg::PredictedObjects & objects,
4547
const DrivableAreaExpansionParameters & params)
4648
{
49+
using behavior_path_planner::utils::path_safety_checker::filter::velocity_filter;
50+
4751
MultiPolygon2d footprints;
48-
if (params.avoid_dynamic_objects) {
49-
for (const auto & object : objects.objects) {
50-
const auto front = object.shape.dimensions.x / 2 + params.dynamic_objects_extra_front_offset;
51-
const auto rear = -object.shape.dimensions.x / 2 - params.dynamic_objects_extra_rear_offset;
52-
const auto left = object.shape.dimensions.y / 2 + params.dynamic_objects_extra_left_offset;
53-
const auto right = -object.shape.dimensions.y / 2 - params.dynamic_objects_extra_right_offset;
54-
Polygon2d base_footprint;
55-
base_footprint.outer() = {
56-
Point2d{front, left}, Point2d{front, right}, Point2d{rear, right}, Point2d{rear, left},
57-
Point2d{front, left}};
52+
if (!params.object_exclusion.exclude_dynamic && !params.object_exclusion.exclude_static) {
53+
return footprints;
54+
}
55+
56+
auto get_base_footprint = [&](const auto & object) {
57+
const auto front = object.shape.dimensions.x / 2 + params.object_exclusion.front_offset;
58+
const auto rear = -object.shape.dimensions.x / 2 - params.object_exclusion.rear_offset;
59+
const auto left = object.shape.dimensions.y / 2 + params.object_exclusion.left_offset;
60+
const auto right = -object.shape.dimensions.y / 2 - params.object_exclusion.right_offset;
61+
Polygon2d footprint;
62+
footprint.outer() = {
63+
Point2d{front, left}, Point2d{front, right}, Point2d{rear, right}, Point2d{rear, left},
64+
Point2d{front, left}};
65+
return footprint;
66+
};
67+
68+
for (const auto & object : objects.objects) {
69+
const auto base_footprint = get_base_footprint(object);
70+
if (params.object_exclusion.exclude_dynamic) {
5871
for (const auto & path : object.kinematics.predicted_paths)
5972
for (const auto & pose : path.path)
6073
footprints.push_back(create_footprint(pose, base_footprint));
74+
continue;
6175
}
76+
77+
if (params.object_exclusion.exclude_static && velocity_filter(
78+
object.kinematics.initial_twist_with_covariance.twist, -std::numeric_limits<double>::epsilon(),
79+
params.object_exclusion.stopped_obj_vel_th)) {
80+
footprints.push_back(create_footprint(object.kinematics.initial_pose_with_covariance.pose, base_footprint));
81+
}
6282
}
6383
return footprints;
6484
}

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner_common/test/test_drivable_area_expansion.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ TEST(DrivableAreaExpansionProjection, expand_drivable_area)
215215
}
216216
{ // parameters
217217
params.enabled = true;
218-
params.avoid_dynamic_objects = false;
218+
params.object_exclusion.exclude_dynamic = false;
219219
params.avoid_linestring_dist = 0.0;
220220
params.avoid_linestring_types = {};
221221
params.max_expansion_distance = 0.0; // means no limit

Diff for: planning/behavior_path_planner/autoware_behavior_path_planner_common/test/test_footprints.cpp

+7-6
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,19 @@ TEST(FootprintTest, create_object_footprints)
104104
objects.objects.push_back(object);
105105

106106
autoware::behavior_path_planner::drivable_area_expansion::DrivableAreaExpansionParameters params;
107-
params.avoid_dynamic_objects = false;
108-
params.dynamic_objects_extra_front_offset = 0.5;
109-
params.dynamic_objects_extra_rear_offset = 0.5;
110-
params.dynamic_objects_extra_left_offset = 0.5;
111-
params.dynamic_objects_extra_right_offset = 0.5;
107+
params.object_exclusion.exclude_static = false;
108+
params.object_exclusion.exclude_dynamic = false;
109+
params.object_exclusion.front_offset = 0.5;
110+
params.object_exclusion.rear_offset = 0.5;
111+
params.object_exclusion.left_offset = 0.5;
112+
params.object_exclusion.right_offset = 0.5;
112113

113114
// Condition: doesn't avoid dynamic objects
114115
auto footprints = create_object_footprints(objects, params);
115116
EXPECT_TRUE(footprints.empty());
116117

117118
// Condition: single object and single point path
118-
params.avoid_dynamic_objects = true;
119+
params.object_exclusion.exclude_dynamic = true;
119120
footprints = create_object_footprints(objects, params);
120121

121122
ASSERT_EQ(footprints.size(), 1);

0 commit comments

Comments
 (0)