OOPSMP is a package for motion planning that is easy to extend, robust, and efficient. It can be used for motion planning research or as a teaching tool.
NEW: At IROS 2008, we organized an OOPSMP tutorial. The slides from this tutorial are now available on the tutorial web site.
CURRENT RELEASE: version 1.1.1, February 2009
Implementations of popular motion planners
Probabilistic RoadMap (PRM), Rapidly-exploring Random Tree (RRT), Expansive Spaces Tree (EST), bi-directional tree planners, and others.
Solution of problems involving one or multiple robots
Each robot can freely rotate and translate or kinodynamic constraints can be imposed that restrict the possible motions.
General purpose utilities and data structures
Nearest neighbors; numerical integration; SE(2), SO(3) [quaternions], SE(3); sets, maps, disjoint sets, updatable heaps, graphs; DFS, BFS, Dijsktra, A*; and others.
One of the most distinctive features of OOPSMP is that it allows to plug-and-play existing code or new code via XML specifications.
OOPSMP is an on-going project at Professor Lydia Kavraki’s Physical and Biological Computing Group at Rice University. The group has been working on sampling-based motion planners since 1997 and is credited with the development of several versions of the Probabilistic Roadmap Planner (PRM), tree-based planners, such as the Path Directed Subdivision Tree Planner (PDST), the Discrete Search Leading Continuous Exploration Planner (DSLX) and the Informed Subdivision Tree Planner (IST), among others. For an extensive list of publications see our publications page.
The lead developer and implementer on version 1.0 of OOPSMP was Erion Plaku. Several other people have contributed to OOPSMP in many different ways (group meeting discussions, development of early stage code that is not included in OOPSMP but has influenced the thinking and direction of the whole group, ideas on extensibility, earlier interfaces, ways to organize and compile the code, using the code and its libraries and providing feedback and many other ways that can not possibly be listed here), and continue to develop OOPSMP. Below is a list of all OOPSMP contributors:
This project has been funded in part by NSF IIS 0308237 and IIS 0713623, the Brown Engineering Fund, the Rice Century Scholars program, and other funds from Rice University.
We hope that researchers and users will find OOPSMP useful and contribute new code and benchmarks or improve and/or extend existing functionality. Such contributions will be acknowledged here and will significantly improve the system and benefit the community of researchers and users. If you would like to contribute code, benchmarks, or plan to use OOPSMP as a teaching tool contact oopsmp/AT/rice.edu. If you would like to use OOPSMP for commercial purposes contact techtran/AT/rice.edu
If you use OOPSMP for any publication, please include the following two references:
OOPSMP has become an integral part of COMP450, a robotics course for senior undergraduate students and new graduate students offered by the Computer Science Department at Rice University every fall semester and taught by Prof. Lydia Kavraki. We thank the students for their feedback, which is used to further improve OOPSMP.
OOPSMP Relies on several external packages:
PQP Used for collision detection. See: S. Gottschalk, M. C. Lin and D. Manocha. “BB-Tree: A Hierarchical Structure for Rapid Interference Detection,” Technical report TR96-013, Department of Computer Science, University of N. Carolina, Chapel Hill. Proc. of ACM Siggraph’96.
Triangulate A library for polygon triangulations. See: Atul Narkhede, Dinesh Manocha. “Fast Polygon Triangulation based on Seidel’s Algorithm”, University of N. Carolina, Chapel Hill.
CMake CMake is a Makefile generator and is used to detect which libraries you have installed and where. CMake can also generate project files for Microsoft Visual Studio and XCode. See the CMake documentation for more information.
libxml2 We use XML for input files, so we use this library to parse them.
google-sparsehash [Optional] Google’s memory efficient hash_map implementation can be used instead of the default STL hash_map.