@@ -58,6 +58,8 @@ class AvoidanceHelper
58
58
59
59
double getEgoSpeed () const { return std::abs (data_->self_odometry ->twist .twist .linear .x ); }
60
60
61
+ geometry_msgs::msg::Pose getEgoPose () const { return data_->self_odometry ->pose .pose ; }
62
+
61
63
size_t getConstraintsMapIndex (const double velocity, const std::vector<double > & values) const
62
64
{
63
65
const auto itr = std::find_if (
@@ -185,10 +187,20 @@ class AvoidanceHelper
185
187
return parameters_->object_check_max_forward_distance ;
186
188
}
187
189
190
+ const auto & route_handler = data_->route_handler ;
191
+
192
+ lanelet::ConstLanelet closest_lane;
193
+ if (!route_handler->getClosestLaneletWithinRoute (getEgoPose (), &closest_lane)) {
194
+ return parameters_->object_check_max_forward_distance ;
195
+ }
196
+
197
+ const auto limit = route_handler->getTrafficRulesPtr ()->speedLimit (closest_lane);
198
+ const auto speed = isShifted () ? limit.speedLimit .value () : getEgoSpeed ();
199
+
188
200
const auto max_shift_length = std::max (
189
201
std::abs (parameters_->max_right_shift_length ), std::abs (parameters_->max_left_shift_length ));
190
- const auto dynamic_distance = PathShifter::calcLongitudinalDistFromJerk (
191
- max_shift_length, getLateralMinJerkLimit (), getEgoSpeed () );
202
+ const auto dynamic_distance =
203
+ PathShifter::calcLongitudinalDistFromJerk ( max_shift_length, getLateralMinJerkLimit (), speed );
192
204
193
205
return std::clamp (
194
206
1.5 * dynamic_distance + getNominalPrepareDistance (),
0 commit comments