grey
6
I’d say this is an open area of research, so I don’t think there’s going to be a specific standard to follow. The link that @victor_sillerico provided has a lot of great suggestions in it, but I can mention what we’ve been using for RMF.
If you can define a discrete navigation graph for the robot to follow, then you could use kinodynamic A*. In this context “kinodynamic” means that time and velocity/acceleration constraints are factors for the A* branching. When expanding the search, you should compute each expansion trajectory and verify that it has no collisions with any of the trajectories of other robots that have been given higher priority. If any such collisions exist, then the expansion should be discarded. Note that sitting in place or returning to a previous graph node should be considered valid expansions, which makes pruning the search very tricky.
Using A* will guarantee that your single-robot planner is optimal, relative to the discrete navigation graph. We have a C++ implementation of that planner which can be found here. It’s made for the RMF traffic management stack, but it can be used on its own.
Otherwise if you need to work in free space, then you’ll need a time-configuration space free space motion planner that can account for obstacles with known motion. Here’s a paper that describes the concept of a time-configuration space motion planner, although I can’t say the specific technique being used is relevant.
We’re looking into developing a suitable free space motion planner, but we don’t have any firm timeline for that currently.
2 Likes