@@ -234,14 +234,14 @@ void AvoidanceModule::fillFundamentalData(AvoidancePlanningData & data, DebugDat
234
234
// calc drivable bound
235
235
auto tmp_path = getPreviousModuleOutput ().path ;
236
236
const auto shorten_lanes = utils::cutOverlappedLanes (tmp_path, data.drivable_lanes );
237
- data.left_bound = toLineString3d ( utils::calcBound (
237
+ data.left_bound = utils::calcBound (
238
238
getPreviousModuleOutput ().path , planner_data_, shorten_lanes,
239
239
parameters_->use_hatched_road_markings , parameters_->use_intersection_areas ,
240
- parameters_->use_freespace_areas , true )) ;
241
- data.right_bound = toLineString3d ( utils::calcBound (
240
+ parameters_->use_freespace_areas , true );
241
+ data.right_bound = utils::calcBound (
242
242
getPreviousModuleOutput ().path , planner_data_, shorten_lanes,
243
243
parameters_->use_hatched_road_markings , parameters_->use_intersection_areas ,
244
- parameters_->use_freespace_areas , false )) ;
244
+ parameters_->use_freespace_areas , false );
245
245
246
246
// reference path
247
247
if (isDrivingSameLane (helper_->getPreviousDrivingLanes (), data.current_lanelets )) {
@@ -294,6 +294,7 @@ void AvoidanceModule::fillAvoidanceTargetObjects(
294
294
using utils::avoidance::filterTargetObjects;
295
295
using utils::avoidance::getTargetLanelets;
296
296
using utils::avoidance::separateObjectsByPath;
297
+ using utils::avoidance::updateRoadShoulderDistance;
297
298
298
299
// Separate dynamic objects based on whether they are inside or outside of the expanded lanelets.
299
300
constexpr double MARGIN = 10.0 ;
@@ -315,6 +316,7 @@ void AvoidanceModule::fillAvoidanceTargetObjects(
315
316
316
317
// Filter out the objects to determine the ones to be avoided.
317
318
filterTargetObjects (objects, data, forward_detection_range, planner_data_, parameters_);
319
+ updateRoadShoulderDistance (data, planner_data_, parameters_);
318
320
319
321
// Calculate the distance needed to safely decelerate the ego vehicle to a stop line.
320
322
const auto & vehicle_width = planner_data_->parameters .vehicle_width ;
@@ -929,10 +931,6 @@ BehaviorModuleOutput AvoidanceModule::plan()
929
931
DrivableAreaInfo current_drivable_area_info;
930
932
// generate drivable lanes
931
933
current_drivable_area_info.drivable_lanes = avoid_data_.drivable_lanes ;
932
- // generate obstacle polygons
933
- current_drivable_area_info.obstacles =
934
- utils::avoidance::generateObstaclePolygonsForDrivableArea (
935
- avoid_data_.target_objects , parameters_, planner_data_->parameters .vehicle_width / 2.0 );
936
934
// expand hatched road markings
937
935
current_drivable_area_info.enable_expanding_hatched_road_markings =
938
936
parameters_->use_hatched_road_markings ;
@@ -941,6 +939,21 @@ BehaviorModuleOutput AvoidanceModule::plan()
941
939
parameters_->use_intersection_areas ;
942
940
// expand freespace areas
943
941
current_drivable_area_info.enable_expanding_freespace_areas = parameters_->use_freespace_areas ;
942
+ // generate obstacle polygons
943
+ if (parameters_->enable_bound_clipping ) {
944
+ ObjectDataArray clip_objects;
945
+ // If avoidance is executed by both behavior and motion, only non-avoidable object will be
946
+ // extracted from the drivable area.
947
+ std::for_each (
948
+ data.target_objects .begin (), data.target_objects .end (), [&](const auto & object) {
949
+ if (!object.is_avoidable ) clip_objects.push_back (object);
950
+ });
951
+ current_drivable_area_info.obstacles =
952
+ utils::avoidance::generateObstaclePolygonsForDrivableArea (
953
+ clip_objects, parameters_, planner_data_->parameters .vehicle_width / 2.0 );
954
+ } else {
955
+ current_drivable_area_info.obstacles .clear ();
956
+ }
944
957
945
958
output.drivable_area_info = utils::combineDrivableAreaInfo (
946
959
current_drivable_area_info, getPreviousModuleOutput ().drivable_area_info );
@@ -1150,8 +1163,8 @@ bool AvoidanceModule::isValidShiftLine(
1150
1163
const size_t end_idx = shift_lines.back ().end_idx ;
1151
1164
1152
1165
const auto path = shifter_for_validate.getReferencePath ();
1153
- const auto left_bound = lanelet::utils::to2D (avoid_data_.left_bound );
1154
- const auto right_bound = lanelet::utils::to2D (avoid_data_.right_bound );
1166
+ const auto left_bound = lanelet::utils::to2D (toLineString3d ( avoid_data_.left_bound ) );
1167
+ const auto right_bound = lanelet::utils::to2D (toLineString3d ( avoid_data_.right_bound ) );
1155
1168
for (size_t i = start_idx; i <= end_idx; ++i) {
1156
1169
const auto p = getPoint (path.points .at (i));
1157
1170
lanelet::BasicPoint2d basic_point{p.x , p.y };
0 commit comments