@@ -1066,28 +1066,30 @@ MinMaxValue DynamicAvoidanceModule::calcMinMaxLongitudinalOffsetToAvoid(
1066
1066
// calculate bound start and end length
1067
1067
const double start_length_to_avoid = [&]() {
1068
1068
if (obj_vel < parameters_->max_stopped_object_vel ) {
1069
- // The ego and object are the same directional or the object is parked.
1069
+ // The ego and object are the opposite directional or the object is parked.
1070
1070
return std::min (time_while_collision.time_to_start_collision , 8.0 ) * std::abs (obj_vel) +
1071
1071
std::abs (relative_velocity) * parameters_->start_duration_to_avoid_oncoming_object ;
1072
+ } else {
1073
+ // The ego and object are the same directional
1074
+ const double obj_acc = -0.5 ;
1075
+ const double decel_time = 1.0 ;
1076
+ const double obj_moving_dist =
1077
+ (std::pow (std::max (obj_vel + obj_acc * decel_time, 0.0 ), 2 ) - std::pow (obj_vel, 2 )) / 2 /
1078
+ obj_acc;
1079
+ const double ego_moving_dist = getEgoSpeed () * decel_time;
1080
+ return std::max (0.0 , ego_moving_dist - obj_moving_dist) +
1081
+ std::abs (relative_velocity) * parameters_->start_duration_to_avoid_overtaking_object ;
1072
1082
}
1073
- // The ego and object are the opposite directional.
1074
- const double obj_acc = -0.5 ;
1075
- const double decel_time = 1.0 ;
1076
- const double obj_moving_dist =
1077
- (std::pow (std::max (obj_vel + obj_acc * decel_time, 0.0 ), 2 ) - std::pow (obj_vel, 2 )) / 2 /
1078
- obj_acc;
1079
- const double ego_moving_dist = getEgoSpeed () * decel_time;
1080
- return std::max (0.0 , ego_moving_dist - obj_moving_dist) +
1081
- std::abs (relative_velocity) * parameters_->start_duration_to_avoid_overtaking_object ;
1082
1083
}();
1083
1084
const double end_length_to_avoid = [&]() {
1084
1085
if (obj_vel < parameters_->max_stopped_object_vel ) {
1085
- // The ego and object are the same directional or the object is parked.
1086
+ // The ego and object are the opposite directional or the object is parked.
1086
1087
return std::abs (relative_velocity) * parameters_->end_duration_to_avoid_oncoming_object ;
1088
+ } else {
1089
+ // The ego and object are the same directional
1090
+ return std::min (time_while_collision.time_to_end_collision , 3.0 ) * obj_vel +
1091
+ std::abs (relative_velocity) * parameters_->end_duration_to_avoid_overtaking_object ;
1087
1092
}
1088
- // The ego and object are the opposite directional.
1089
- return std::min (time_while_collision.time_to_end_collision , 3.0 ) * obj_vel +
1090
- std::abs (relative_velocity) * parameters_->end_duration_to_avoid_overtaking_object ;
1091
1093
}();
1092
1094
1093
1095
// calculate valid path for the forked object's path from the ego's path
0 commit comments