Skip to content

Commit 8e5008f

Browse files
Adding slow down at target heading to RPP Controller (#5361)
* Adding slow down at target heading to RPP Signed-off-by: SteveMacenski <[email protected]> * Update test_regulated_pp.cpp Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: SteveMacenski <[email protected]> Signed-off-by: Steve Macenski <[email protected]>
1 parent 70f4574 commit 8e5008f

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

nav2_regulated_pure_pursuit_controller/src/regulated_pure_pursuit_controller.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,12 @@ void RegulatedPurePursuitController::rotateToHeading(
350350
const double min_feasible_angular_speed = curr_speed.angular.z - params_->max_angular_accel * dt;
351351
const double max_feasible_angular_speed = curr_speed.angular.z + params_->max_angular_accel * dt;
352352
angular_vel = std::clamp(angular_vel, min_feasible_angular_speed, max_feasible_angular_speed);
353+
354+
// Check if we need to slow down to avoid overshooting
355+
double max_vel_to_stop = std::sqrt(2 * params_->max_angular_accel * fabs(angle_to_path));
356+
if (fabs(angular_vel) > max_vel_to_stop) {
357+
angular_vel = sign * max_vel_to_stop;
358+
}
353359
}
354360

355361
geometry_msgs::msg::Point RegulatedPurePursuitController::circleSegmentIntersection(

nav2_regulated_pure_pursuit_controller/test/test_regulated_pp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -549,13 +549,13 @@ TEST(RegulatedPurePursuitTest, rotateTests)
549549
// basic full speed at a speed
550550
ctrl->rotateToHeadingWrapper(lin_v, ang_v, angle_to_path, curr_speed);
551551
EXPECT_EQ(lin_v, 0.0);
552-
EXPECT_EQ(ang_v, 1.8);
552+
EXPECT_EQ(ang_v, 1.6); // hit slow down limit
553553

554554
// negative direction
555555
angle_to_path = -0.4;
556556
curr_speed.angular.z = -1.75;
557557
ctrl->rotateToHeadingWrapper(lin_v, ang_v, angle_to_path, curr_speed);
558-
EXPECT_EQ(ang_v, -1.8);
558+
EXPECT_EQ(ang_v, -1.6); // hit slow down limit
559559

560560
// kinematic clamping, no speed, some speed accelerating, some speed decelerating
561561
angle_to_path = 0.4;

0 commit comments

Comments
 (0)