@@ -502,7 +502,7 @@ void DynamicAvoidanceModule::updateTargetObjects()
502
502
const auto lon_offset_to_avoid = calcMinMaxLongitudinalOffsetToAvoid (
503
503
*path_points_for_object_polygon, object.pose , obj_points, object.vel , time_to_collision);
504
504
const auto lat_offset_to_avoid = calcMinMaxLateralOffsetToAvoid (
505
- *path_points_for_object_polygon, obj_points, is_collision_left, prev_object);
505
+ *path_points_for_object_polygon, obj_points, is_collision_left, object. lat_vel , prev_object);
506
506
507
507
const bool should_be_avoided = true ;
508
508
target_objects_manager_.updateObject (
@@ -782,7 +782,7 @@ MinMaxValue DynamicAvoidanceModule::calcMinMaxLongitudinalOffsetToAvoid(
782
782
783
783
MinMaxValue DynamicAvoidanceModule::calcMinMaxLateralOffsetToAvoid (
784
784
const std::vector<PathPointWithLaneId> & path_points_for_object_polygon,
785
- const Polygon2d & obj_points, const bool is_collision_left,
785
+ const Polygon2d & obj_points, const bool is_collision_left, const double obj_normal_vel,
786
786
const std::optional<DynamicAvoidanceObject> & prev_object) const
787
787
{
788
788
// calculate min/max lateral offset from object to path
@@ -798,28 +798,25 @@ MinMaxValue DynamicAvoidanceModule::calcMinMaxLateralOffsetToAvoid(
798
798
}
799
799
return getMinMaxValues (obj_lat_abs_offset_vec);
800
800
}();
801
- const double min_obj_lat_offset = obj_lat_abs_offset.min_value * (is_collision_left ? 1.0 : - 1.0 ) ;
802
- const double max_obj_lat_offset = obj_lat_abs_offset.max_value * (is_collision_left ? 1.0 : - 1.0 ) ;
801
+ const double min_obj_lat_abs_offset = obj_lat_abs_offset.min_value ;
802
+ const double max_obj_lat_abs_offset = obj_lat_abs_offset.max_value ;
803
803
804
804
// calculate bound min and max lateral offset
805
805
const double min_bound_lat_offset = [&]() {
806
+ constexpr double object_time_to_shift = 2.0 ;
807
+ const double lat_abs_offset_to_shift =
808
+ std::max (0.0 , obj_normal_vel * (is_collision_left ? -1.0 : 1.0 )) *
809
+ object_time_to_shift; // TODO(murooka) use rosparam
806
810
const double raw_min_bound_lat_offset =
807
- min_obj_lat_offset - parameters_->lat_offset_from_obstacle * (is_collision_left ? 1.0 : - 1.0 ) ;
811
+ min_obj_lat_abs_offset - parameters_->lat_offset_from_obstacle - lat_abs_offset_to_shift ;
808
812
const double min_bound_lat_abs_offset_limit =
809
813
planner_data_->parameters .vehicle_width / 2.0 - parameters_->max_lat_offset_to_avoid ;
810
- if (is_collision_left) {
811
- if (raw_min_bound_lat_offset < min_bound_lat_abs_offset_limit) {
812
- return min_bound_lat_abs_offset_limit;
813
- }
814
- } else {
815
- if (-min_bound_lat_abs_offset_limit < raw_min_bound_lat_offset) {
816
- return -min_bound_lat_abs_offset_limit;
817
- }
818
- }
819
- return raw_min_bound_lat_offset;
814
+ return std::max (raw_min_bound_lat_offset, min_bound_lat_abs_offset_limit) *
815
+ (is_collision_left ? 1.0 : -1.0 );
820
816
}();
821
817
const double max_bound_lat_offset =
822
- max_obj_lat_offset + parameters_->lat_offset_from_obstacle * (is_collision_left ? 1.0 : -1.0 );
818
+ (max_obj_lat_abs_offset + parameters_->lat_offset_from_obstacle ) *
819
+ (is_collision_left ? 1.0 : -1.0 );
823
820
824
821
// filter min_bound_lat_offset
825
822
const auto prev_min_lat_avoid_to_offset = [&]() -> std::optional<double > {
@@ -830,7 +827,8 @@ MinMaxValue DynamicAvoidanceModule::calcMinMaxLateralOffsetToAvoid(
830
827
}();
831
828
const double filtered_min_bound_lat_offset =
832
829
prev_min_lat_avoid_to_offset
833
- ? signal_processing::lowpassFilter (min_bound_lat_offset, *prev_min_lat_avoid_to_offset, 0.3 )
830
+ ? signal_processing::lowpassFilter (
831
+ min_bound_lat_offset, *prev_min_lat_avoid_to_offset, 0.5 ) // TODO(murooka) use rosparam
834
832
: min_bound_lat_offset;
835
833
836
834
return MinMaxValue{filtered_min_bound_lat_offset, max_bound_lat_offset};
0 commit comments