-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Description
From a discussion in Slack with Vinny Ruia, Christian Fritz, and Ilia Baranov, there's interest in a D* Lite / Field D* algorithm in Nav2.
My thoughts is that rather than improving dynamic replanning of paths, it by be better to have improved default replanning behaviors (only replan when necessary or after very long periods of time; when replanning make sure it is 'better' than the previous one by some metric like lower cost, shorter, or the original path cost has spiked). I think this deals with alot of the problems one could want, but a incremental replanner could still be useful. And covers the computation portion of the D* algorithm's improvements.
A down-side of one of these methods though is that they assume small amounts of change over the plan, not large changes in dynamic spaces. If a section of the path is invalidated, it'll attempt to replan that, but leave other sections alone -- which may themselves have more optimal solutions with shifting dynamic obstacles. This will create a local minima until a clean replan is done trapping the robot to go down a certain direction (which, in some cases, sounds like the committed behavior some may want, but worth noting that for every good 'commit to this route' there'll be a bad 'I replanned halfway around the warehouse and now I'm committed to it' due to a blocked corridor or something similar).
But, with all that said, I think this may still fill a niche that Nav2 users could leverage. Particularly for
- very low compute platforms
- and environments that don't change very much
FYI: In Smac Planner, we have a cache obstacle heuristic parameter that does similarly. We cache the existing cost-space between iterations which is a massive runtime improvement. The A* is the same, but we don't recompute H from scratch which is considering the cost field with a dynamic A*. While not the same, it sounds like its to solve a similar concern. It turns a ~200+ms planning request into single-digit milliseconds, so at that point, any further improvement would be pretty small. However, it probably isn't formulated the same way (since I didn't model it on D*) so probably doesn't have the same functional behavior. Maybe worth exploring that direction for Smac and a standalone D* planner (or modify NavFn/Smac2D/Theta* to have that option)