You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I’m wondering whether an alternative implementation of FurthestReachedPoint() would be interesting or worth considering. If it’s useful, I’d be happy to contribute a PR.
I’d really appreciate your input on this. I may be overlooking something in my setup, so I want to make sure I’m not misattributing the issue. Any pointers on where to look would be greatly appreciated.
Details
My application requires coverage of an area, tight path tracking, and dynamic obstacle avoidance.
Steps to reproduce issue
Send a path to MPPI with a "tight" U-Turn (e.g. 0.6 m)
Expected behavior
MPPI's optimal trajectory closely follows the path sent.
Actual behavior
When approaching the U-Turn, MPPI's optimal trajectory leans towards the end of the "pruned path" (videos below).
Additional information
My understanding is that this is caused by the interaction of:
findPathFurthestReachedPoint() (in include/nav2_mppi_controller/tools/utils.hpp)
Given the way FurthestReachedPoint() works, the end point of some of the "sampled control sequences" will effectively be on the "way back" of the U-Turn, so the selected point will already be on the way back, instead of continuing following the path.
Reducing prune_distance (and time_steps) would help; however, that would affect the obstacle avoidance capabilities (not long enough horizon time to result in control_sequences that make progress while avoiding obstacles).
Note: In my system, once the coverage path is calculated, it is sent to the controller (MPPI), which is responsible for dynamic obstacle avoidance (also static obstacles that were not in the costmap when the coverage path was computed).
Required Info:
I’m wondering whether an alternative implementation of FurthestReachedPoint() would be interesting or worth considering. If it’s useful, I’d be happy to contribute a PR.
I’d really appreciate your input on this. I may be overlooking something in my setup, so I want to make sure I’m not misattributing the issue. Any pointers on where to look would be greatly appreciated.
Details
My application requires coverage of an area, tight path tracking, and dynamic obstacle avoidance.
Steps to reproduce issue
Send a path to MPPI with a "tight" U-Turn (e.g. 0.6 m)
Expected behavior
MPPI's optimal trajectory closely follows the path sent.
Actual behavior
When approaching the U-Turn, MPPI's optimal trajectory leans towards the end of the "pruned path" (videos below).
Additional information
My understanding is that this is caused by the interaction of:
findPathFurthestReachedPoint()(ininclude/nav2_mppi_controller/tools/utils.hpp)With my nav config:
time_steps * model_dt=80 * 0.1= 8 secs)Given the way
FurthestReachedPoint()works, the end point of some of the "sampled control sequences" will effectively be on the "way back" of the U-Turn, so the selected point will already be on the way back, instead of continuing following the path.Reducing
prune_distance(and time_steps) would help; however, that would affect the obstacle avoidance capabilities (not long enough horizon time to result in control_sequences that make progress while avoiding obstacles).Note: In my system, once the coverage path is calculated, it is sent to the controller (MPPI), which is responsible for dynamic obstacle avoidance (also static obstacles that were not in the costmap when the coverage path was computed).
Controller config (main params):
Videos:
second_2026-01-22.12-56-18.mp4
converted_2026-01-22.12-53-38.mp4