Skip to content

Create a D*-Based Planner *or* Update Smac/Theta*/NavFn to allow for D* behavior optionallyΒ #5770

@SteveMacenski

Description

@SteveMacenski

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesthelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions