Skip to content

Commit a9dca14

Browse files
committed
refactor(avoidance): add helper function
Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
1 parent d0af96e commit a9dca14

File tree

3 files changed

+39
-38
lines changed

3 files changed

+39
-38
lines changed

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/src/scene.cpp

+11-18
Original file line numberDiff line numberDiff line change
@@ -638,21 +638,16 @@ void AvoidanceModule::fillDebugData(
638638
const auto o_front = data.stop_target_object.value();
639639
const auto object_type = utils::getHighestProbLabel(o_front.object.classification);
640640
const auto object_parameter = parameters_->object_parameters.at(object_type);
641-
const auto & additional_buffer_longitudinal =
642-
object_parameter.use_conservative_buffer_longitudinal
643-
? planner_data_->parameters.base_link2front
644-
: 0.0;
641+
const auto constant_distance = helper_->getFrontConstantDistance(o_front);
645642
const auto & vehicle_width = planner_data_->parameters.vehicle_width;
646643

647644
const auto max_avoid_margin = object_parameter.lateral_hard_margin * o_front.distance_factor +
648645
object_parameter.lateral_soft_margin + 0.5 * vehicle_width;
649646

650-
const auto variable = helper_->getSharpAvoidanceDistance(
647+
const auto avoidance_distance = helper_->getSharpAvoidanceDistance(
651648
helper_->getShiftLength(o_front, utils::avoidance::isOnRight(o_front), max_avoid_margin));
652-
const auto constant = helper_->getNominalPrepareDistance() +
653-
object_parameter.safety_buffer_longitudinal +
654-
additional_buffer_longitudinal;
655-
const auto total_avoid_distance = variable + constant;
649+
const auto prepare_distance = helper_->getNominalPrepareDistance();
650+
const auto total_avoid_distance = prepare_distance + avoidance_distance + constant_distance;
656651

657652
dead_pose_ = calcLongitudinalOffsetPose(
658653
data.reference_path.points, getEgoPosition(), o_front.longitudinal - total_avoid_distance);
@@ -1434,16 +1429,14 @@ double AvoidanceModule::calcDistanceToStopLine(const ObjectData & object) const
14341429

14351430
const auto avoid_margin = object_parameter.lateral_hard_margin * object.distance_factor +
14361431
object_parameter.lateral_soft_margin + 0.5 * vehicle_width;
1437-
const auto variable = helper_->getMinAvoidanceDistance(
1432+
const auto avoidance_distance = helper_->getMinAvoidanceDistance(
14381433
helper_->getShiftLength(object, utils::avoidance::isOnRight(object), avoid_margin));
1439-
const auto & additional_buffer_longitudinal =
1440-
object_parameter.use_conservative_buffer_longitudinal
1441-
? planner_data_->parameters.base_link2front
1442-
: 0.0;
1443-
const auto constant = p->min_prepare_distance + object_parameter.safety_buffer_longitudinal +
1444-
additional_buffer_longitudinal + p->stop_buffer;
1445-
1446-
return object.longitudinal - std::min(variable + constant, p->stop_max_distance);
1434+
const auto constant_distance = helper_->getFrontConstantDistance(object);
1435+
1436+
return object.longitudinal -
1437+
std::min(
1438+
avoidance_distance + constant_distance + p->min_prepare_distance + p->stop_buffer,
1439+
p->stop_max_distance);
14471440
}
14481441

14491442
void AvoidanceModule::insertReturnDeadLine(

planning/behavior_path_avoidance_module/src/shift_line_generator.cpp

+9-20
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
123123
{
124124
// To be consistent with changes in the ego position, the current shift length is considered.
125125
const auto current_ego_shift = helper_->getEgoShift();
126-
const auto & base_link2rear = data_->parameters.base_link2rear;
127126

128127
// Calculate feasible shift length
129128
const auto get_shift_profile =
@@ -140,13 +139,10 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
140139

141140
// calculate remaining distance.
142141
const auto prepare_distance = helper_->getNominalPrepareDistance();
143-
const auto & additional_buffer_longitudinal =
144-
object_parameter.use_conservative_buffer_longitudinal ? data_->parameters.base_link2front
145-
: 0.0;
146-
const auto constant = object_parameter.safety_buffer_longitudinal +
147-
additional_buffer_longitudinal + prepare_distance;
148-
const auto has_enough_distance = object.longitudinal > constant + nominal_avoid_distance;
149-
const auto remaining_distance = object.longitudinal - constant;
142+
const auto constant_distance = helper_->getFrontConstantDistance(object);
143+
const auto has_enough_distance =
144+
object.longitudinal > constant_distance + prepare_distance + nominal_avoid_distance;
145+
const auto remaining_distance = object.longitudinal - constant_distance - prepare_distance;
150146
const auto avoidance_distance =
151147
has_enough_distance ? nominal_avoid_distance : remaining_distance;
152148

@@ -278,11 +274,8 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
278274
}
279275
}
280276

281-
// use each object param
282-
const auto object_type = utils::getHighestProbLabel(o.object.classification);
283-
const auto object_parameter = parameters_->object_parameters.at(object_type);
277+
// calculate feasible shift length based on behavior policy
284278
const auto feasible_shift_profile = get_shift_profile(o, desire_shift_length);
285-
286279
if (!feasible_shift_profile.has_value()) {
287280
if (o.avoid_required && is_forward_object(o)) {
288281
break;
@@ -297,12 +290,8 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
297290

298291
AvoidLine al_avoid;
299292
{
300-
const auto & additional_buffer_longitudinal =
301-
object_parameter.use_conservative_buffer_longitudinal ? data_->parameters.base_link2front
302-
: 0.0;
303-
const auto offset =
304-
object_parameter.safety_buffer_longitudinal + additional_buffer_longitudinal;
305-
const auto to_shift_end = o.longitudinal - offset;
293+
const auto constant_distance = helper_->getFrontConstantDistance(o);
294+
const auto to_shift_end = o.longitudinal - constant_distance;
306295
const auto path_front_to_ego = data.arclength_from_ego.at(data.ego_closest_path_index);
307296

308297
// start point (use previous linear shift length as start shift length.)
@@ -338,8 +327,8 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline(
338327

339328
AvoidLine al_return;
340329
{
341-
const auto offset = object_parameter.safety_buffer_longitudinal + base_link2rear + o.length;
342-
const auto to_shift_start = o.longitudinal + offset;
330+
const auto constant_distance = helper_->getRearConstantDistance(o);
331+
const auto to_shift_start = o.longitudinal + constant_distance;
343332

344333
// start point
345334
al_return.start_shift_length = feasible_shift_profile.value().first;

0 commit comments

Comments
 (0)