Skip to content

Fix: reset controller_server loop_rate when missed desired rate #5712#5723

Merged
SteveMacenski merged 1 commit intoros-navigation:mainfrom
gennartan:fix_controller_server
Nov 26, 2025
Merged

Fix: reset controller_server loop_rate when missed desired rate #5712#5723
SteveMacenski merged 1 commit intoros-navigation:mainfrom
gennartan:fix_controller_server

Conversation

@gennartan
Copy link
Contributor

When a single iteration takes longer than the expected period, this impacts the next iterations behavior since they will have less time to perform the control logic, thus increasing the actual controller_frequency. By resetting the loop_rate on sleep() failure, this ensures that each iteration will have a full period to exectue its logic.

Basic Info

Info Please fill out this column
Ticket(s) this addresses #5712
Primary OS tested on
Robotic platform tested on
Does this PR contain AI generated software?
Was this PR description generated by AI software?

Description of contribution in a few bullet points

Fix controller frequency loop rate

  • Ensures that the loop_rate makes the controller logic be executed at the desired frequency and not faster

Description of documentation updates required from your changes

Reset the loop_rate on error so that the next iteration has a full period to execute its logic.

Description of how this change was tested


Future work that may be required in bullet points

For Maintainers:

  • Check that any new parameters added are updated in docs.nav2.org
  • Check that any significant change is added to the migration guide
  • Check that any new features OR changes to existing behaviors are reflected in the tuning guide
  • Check that any new functions have Doxygen added
  • Check that any new features have test coverage
  • Check that any new plugins is added to the plugins page
  • If BT Node, Additionally: add to BT's XML index of nodes for groot, BT package's readme table, and BT library lists
  • Should this be backported to current distributions? If so, tag with backport-*.

…avigation#5712

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
@codecov
Copy link

codecov bot commented Nov 26, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
nav2_controller/src/controller_server.cpp 83.41% <100.00%> (+0.03%) ⬆️

... and 10 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@SteveMacenski SteveMacenski merged commit 9f43545 into ros-navigation:main Nov 26, 2025
17 checks passed
kaichie added a commit to botsandus/navigation2 that referenced this pull request Nov 27, 2025
adivardi pushed a commit to enwaytech/navigation2 that referenced this pull request Dec 8, 2025
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
decwest pushed a commit to decwest/navigation2 that referenced this pull request Dec 10, 2025
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
decwest pushed a commit to decwest/navigation2 that referenced this pull request Dec 11, 2025
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
Signed-off-by: Decwest <fumiyaonishi1016@gmail.com>
adivardi pushed a commit to enwaytech/navigation2 that referenced this pull request Dec 12, 2025
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
georgflick pushed a commit to enwaytech/navigation2 that referenced this pull request Dec 12, 2025
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
georgflick pushed a commit to enwaytech/navigation2 that referenced this pull request Jan 21, 2026
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
georgflick pushed a commit to enwaytech/navigation2 that referenced this pull request Jan 22, 2026
…avigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
SteveMacenski pushed a commit that referenced this pull request Jan 24, 2026
…#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
SteveMacenski added a commit that referenced this pull request Jan 24, 2026
* No need to spam the logs (#5674)

Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>

* Conditionally call onLoop based on node status (#5700)

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>

* Allow for no progress checkers to be configured (#5701)

Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>

* Fix: wait for drive_on_heading_client instead of backup_client (#5724)

The basic navigator was waiting for the backup_client in the
driveOnHeading function.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>

* Fix: reset controller_server loop_rate when missed desired rate #5712 (#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>

* temporary fix bug null pointer (#5749)

* temporary fix bug null pointer

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* add return

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* remove return

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

---------

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* fix: change warning to exception when goal poses cannot be transformed (#5759)

- Replace RCLCPP_WARN with std::runtime_error exception in onPreempt method
- Remove bt_action_server_->terminatePendingGoal() call after accepting goal
- Add required stdexcept include for exception handling

Fixes issue where navigators accept pending goal but are not properly
terminated if rejected during goal pose transformation.

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* Update obstacle layer usage of max ranges (#5697)

* Use cell distance for obstacle marking max range

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Don't raytrace clear the cell containing the current observation

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Add tests for max marking and clearing ranges

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Fix cpplint failures

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Fix distance calculation

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* fix casting, formatting

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* check origin is in map, update CMakeLists

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* use hypot instead of squared dist

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Move origin calc out of loop

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Revert don't raytrace observation cell

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Revert don't raytrace origin if it is observation cell

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Remove new line

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

---------

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* [mppi] Don't reset zone-based speed limits (#5768)

* [mppi] Don't reset zone-based speed limits

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* [mppi] update motion model params from speed_limit

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* fix linting issue

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* Revert: reset speed limits after param change

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

---------

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* Bugfix inactive publishers (#5748)

* Do not publish costmap unless active

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix style

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix typo

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Use layers isEnabled() to prevent publishing

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix style

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Add missing include for CostmapLayer type

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Remove extra scoping

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

---------

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>
Co-authored-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix MAX_NON_OBSTACLE_COST in theta star planner (#5865)

Signed-off-by: mini-1235 <mauricepurnawan@gmail.com>

* Bump jazzy to 1.3.11 for release

Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>

---------

Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>
Signed-off-by: agennart <antoine.gennart@quimesis.be>
Signed-off-by: suifengersan123 <yangabc810@gmail.com>
Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>
Signed-off-by: mini-1235 <mauricepurnawan@gmail.com>
Co-authored-by: Tim Clephas <tim.clephas@nobleo.nl>
Co-authored-by: Saitama <gennartan@users.noreply.github.com>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: suifengersan123 <136066397+suifengersan123@users.noreply.github.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Simon Dathan <simon.dathan@kudan.eu>
Co-authored-by: Adi Vardi <57910756+adivardi@users.noreply.github.com>
Co-authored-by: Christopher Thompson <pele1410@gmail.com>
Co-authored-by: Christopher Thompson <cthompson@metalsharkboats.com>
Co-authored-by: Maurice Alexander Purnawan <mauricepurnawan@gmail.com>
redvinaa pushed a commit to EnjoyRobotics/navigation2 that referenced this pull request Mar 2, 2026
* No need to spam the logs (ros-navigation#5674)

Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>

* Conditionally call onLoop based on node status (ros-navigation#5700)

Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>

* Allow for no progress checkers to be configured (ros-navigation#5701)

Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>

* Fix: wait for drive_on_heading_client instead of backup_client (ros-navigation#5724)

The basic navigator was waiting for the backup_client in the
driveOnHeading function.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>

* Fix: reset controller_server loop_rate when missed desired rate ros-navigation#5712 (ros-navigation#5723)

When a single iteration takes longer than the expected period,
this impacts the next iterations behavior since they will have
less time to perform the control logic, thus increasing the actual
controller_frequency. By resetting the loop_rate on sleep() failure,
this ensures that each iteration will have a full period to exectue its
logic.

Signed-off-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: agennart <antoine.gennart@quimesis.be>

* temporary fix bug null pointer (ros-navigation#5749)

* temporary fix bug null pointer

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* add return

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* remove return

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

---------

Signed-off-by: suifengersan123 <yangabc810@gmail.com>

* fix: change warning to exception when goal poses cannot be transformed (ros-navigation#5759)

- Replace RCLCPP_WARN with std::runtime_error exception in onPreempt method
- Remove bt_action_server_->terminatePendingGoal() call after accepting goal
- Add required stdexcept include for exception handling

Fixes issue where navigators accept pending goal but are not properly
terminated if rejected during goal pose transformation.

Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>

* Update obstacle layer usage of max ranges (ros-navigation#5697)

* Use cell distance for obstacle marking max range

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Don't raytrace clear the cell containing the current observation

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Add tests for max marking and clearing ranges

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Fix cpplint failures

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Fix distance calculation

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* fix casting, formatting

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* check origin is in map, update CMakeLists

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* use hypot instead of squared dist

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Move origin calc out of loop

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Revert don't raytrace observation cell

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Revert don't raytrace origin if it is observation cell

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* Remove new line

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

---------

Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>

* [mppi] Don't reset zone-based speed limits (ros-navigation#5768)

* [mppi] Don't reset zone-based speed limits

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* [mppi] update motion model params from speed_limit

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* fix linting issue

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* Revert: reset speed limits after param change

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

---------

Signed-off-by: Adi Vardi <adi.vardi@enway.ai>

* Bugfix inactive publishers (ros-navigation#5748)

* Do not publish costmap unless active

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix style

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix typo

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Use layers isEnabled() to prevent publishing

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix style

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Add missing include for CostmapLayer type

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Remove extra scoping

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>

---------

Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>
Co-authored-by: Christopher Thompson <cthompson@metalsharkboats.com>

* Fix MAX_NON_OBSTACLE_COST in theta star planner (ros-navigation#5865)

Signed-off-by: mini-1235 <mauricepurnawan@gmail.com>

* Bump jazzy to 1.3.11 for release

Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>

---------

Signed-off-by: Tim Clephas <tim.clephas@nobleo.nl>
Signed-off-by: Steve Macenski <stevenmacenski@gmail.com>
Signed-off-by: SteveMacenski <stevenmacenski@gmail.com>
Signed-off-by: agennart <antoine.gennart@quimesis.be>
Signed-off-by: suifengersan123 <yangabc810@gmail.com>
Signed-off-by: Simon Dathan <simon.dathan@kudan.eu>
Signed-off-by: Adi Vardi <adi.vardi@enway.ai>
Signed-off-by: Christopher Thompson <cthompson@metalsharkboats.com>
Signed-off-by: mini-1235 <mauricepurnawan@gmail.com>
Co-authored-by: Tim Clephas <tim.clephas@nobleo.nl>
Co-authored-by: Saitama <gennartan@users.noreply.github.com>
Co-authored-by: agennart <antoine.gennart@quimesis.be>
Co-authored-by: suifengersan123 <136066397+suifengersan123@users.noreply.github.com>
Co-authored-by: claude[bot] <209825114+claude[bot]@users.noreply.github.com>
Co-authored-by: Simon Dathan <simon.dathan@kudan.eu>
Co-authored-by: Adi Vardi <57910756+adivardi@users.noreply.github.com>
Co-authored-by: Christopher Thompson <pele1410@gmail.com>
Co-authored-by: Christopher Thompson <cthompson@metalsharkboats.com>
Co-authored-by: Maurice Alexander Purnawan <mauricepurnawan@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants