batching_pomp  1.0
This is an implementation of an algorithmic framework for anytime motion planning on large dense roadmaps.
batching_pomp

A motion planning algorithm implemented in OMPL, also using Boost Graph Library. It is released under the BSD License. The code is based on our upcoming IJRR submission. In the meantime, please cite the following papers if you are interested in using this code:

[1] Choudhury, S., Salzman, O., Choudhury, S., & Srinivasa, S. S. (2017, May). Densification strategies for anytime motion planning over large dense roadmaps. In Robotics and Automation (ICRA), 2017 IEEE International Conference on (pp. 3770-3777). IEEE.

[2] Choudhury, S., Dellin, C. M., & Srinivasa, S. S. (2016, October). Pareto-optimal search over configuration space beliefs for anytime motion planning. In Intelligent Robots and Systems (IROS), 2016 IEEE/RSJ International Conference on (pp. 3742-3749). IEEE.

This is an implementation of an algorithmic framework for anytime motion planning on large dense roadmaps. There are two key components:

Disclaimer

Currently the densification strategies use radius of connectivity (where appropriate) to induce subgraphs (check the densification paper for details). The results are obtained from analysis done for unit hypercubes. For other state spaces, please ensure that the distance function is appropriately defined so that the r-disk roadmaps have the appropriate expected average degree. Instead, a k-NN version of our framework could be used (and was started to be implemented in the kNN_bpomp branch but was not completed). Contact the author for more details if the r-disk version cannot be used reliably.

Dependencies

For the library

Build

The CMakeLists.txt file supports catkin tools. Once you have created and initialized your workspace, you should be able to clone batching_pomp into your workspace and do catkin build batching_pomp.

Please note that the build process has not been extensively tested for various different systems and the authors cannot commit to provide support for the same. Feel free to raise a Github issue though.

Usage

batching_pomp is implemented as an OMPL Geometric Multi-Query Planner and can be invoked on a RealVectorStateSpace problem. It returns a sequence of successively shorter feasible paths on the provided roadmap, for the given motion planning problem.

The following are the OMPL parameters that the planner supports:

Example

A Python script for generating a complete roadmap has been provided with some options, along with a C++ example of using the planner. To use them, checkout the example branch of the repository. Now we will run batching_pomp on a 2D point planning example on a B/W map. All code is assumed to be run from the batching_pomp level of the repository. Check the imports in the scripts/save_sequence_to_graph.py file to see what Python libraries you need. You will also need OpenCV to run the example.

The first step is to generate a complete roadmap for the unit 2D grid (the locations in the unit grid will be scaled to the square image, where (0,0) is the upper left and (1,1) is the lower right of the image). To do this, run

$ python scripts/save_sequence_to_graph.py --num_nodes 1000 --dimensions 2 --bounds unit --sequence halton --outfile data/halton_2d_1000.graphml

Open up the .graphml file if you have never seen one before and take a look at how the states are associated with the vertex IDs. Note that there are no edges defined between vertex IDs as these are assumed to be complete roadmaps, with the edges based on radii of connectivity, handled by the batching manager.

Now you can run the example in scripts/example_2d_image.cc on the map in data/example_map.png, once you have built the package and example. The example assumes you have a catkin workspace in which batching_pomp resides but you can also just use the typical cmake procedure

$ catkin build batching_pomp # Assuming you have a catkin workspace
$ ../../devel/lib/batching_pomp/example_2d -f data/halton_2d_5000.graphml -m data/example_map.png -v halton -s 0.1 0.1 -g 0.9 0.9 -b hybrid # There's probably an easier way to call the executable

You should see an OpenCV window with a solution path pop up. Keep pressing the 'Enter' key over the window to get shorter and shorter paths.

The above example assumes you have a catkin workspace but if you do not, you should still be able to do it through the cmake and make route after editing the CMakeLists.txt file appropriately. Contact the author for help with that if needed.