A modular design was followed to make
OOPSMP simple to use and easy to extend. Navigate the
directory structure and documentation pages for more details on what each module accomplishes. Below you will find a brief summary of each of the different code modules.
The utilities module encompasses general purpose functionality.
- OOPSMP/src/Utils/General/
Generation of pseudorandom uniform and Gaussian numbers; generation of points inside disks or on the surface of high-dimensional spheres or ellipsoids; generation or enumeration of permutations of k elements out of n elements; measuraments of computational time; binary search; reading/parsing sequences of tokens etc. - OOPSMP/src/Utils/Math/
- OOPSMP/src/Utils/Math/Algebra
Low-dimensional vector and matrix operations including affine transformations. - OOPSMP/src/Utils/Math/Topology
- R(2): rigid body translations in R^2
- SO(2): rigid body rotations in R^2
- SE(2): rigid body translations and rotations in R^2
- R(3): rigid body translations in R^3
- SO(3): rigid body rotations in R^3 as quaternions
- SE(3): rigid body translations and rotations in R^3
Uniform random samples, multiplication and addition, logarithmic and exponential maps, geodesic interpolations, distance measures, conversions from and to matrices, and others. - OOPSMP/src/Utils/Math/Flow
Numerical integration of ordinary differential equations using fixed-step and adaptive-step methods that take several one steps. OOPSMP provides implementations of
- 2nd order Runge-Kutta
- 4th order Runge-Kutta
- 5th order Runge-Kutta-Cash-Karp
- 5th order Runge-Kutta-Fehlberg
- 8th order Runge-Kutta-Prince-Dormand
- OOPSMP/src/Utils/DataStructures/
- Maps, sets, disjoint sets, updatable heaps, graphs; DFS, BFS, Dijkstra, A*
- Nearest-neighbors methods that work with any distance metric.
- OOPSMP/src/Utils/Geometry/
2D and 3D workspaces and wrappers for publicly available collision detectors such as PQP. - OOPSMP/src/Utils/XML/
XML parser in case libxml2 is not available in your system; ability to plug-and-play existing or new code via XML specifications.
Common components used by sampling-based motion planners.
- OOPSMP/src/Core/StateSpace/
- State space for sofa/piano movers problems, i.e., single robot that can translate and rotate in 2D/3D.
- Control state space for robotic systems whose motions are obtained by applying controls, e.g., vehicles.
- State space for multiple robots as a Cartesian product of the individual state spaces of each robot.
- OOPSMP/src/Core/Sampler/
Uniform, Gaussian, bridge, obstacle-based, and sampling for multiple robots. - OOPSMP/src/Core/Path/
Paths are parameterized by time duration and the path submodule contains functionality to extract states at any time during path duration, clone, reverse, split, concatenate, discretize, test for equality, obtain subpaths etc. In the case of SE(2) and SE(3) state spaces, paths are defined as either decoupled or non-decoupled geodesic interpolations between start and last states. In the case of control state spaces, paths are defined by start state, control, and duration. - OOPSMP/src/Core/LocalPlanner/
Incremental or subdivision approach for testing path validity. If the entire path is not valid, the module contains functionality to determine the subpath that is valid. - OOPSMP/src/Core/Query submodule
Single or multiple motion planning queries. - OOPSMP/src/Core/Data submodule
Data structures to set up and access the state space, path generator, sampler, local planner for one or multiple robots.
- Solution of geometric or kinodynamic problems involving one or multiple robots
The motion planners can be used to solve motion planning problems involving one or more robots. Each robot can freely rotate and translate or kinodynamic and other constraints can be imposed that restrict the possible motions. - Extendibility and compatibility
All the sampling-based methods extend or provide implementations of an abstract motion planning class.
Common interface for all
OOPSMP programs and program managers, which are responsible for running programs.
Programs to create random queries, run motion planners, test path implementations, inline xml contents.
- OOPSMP/src/Graphics/GUtils/
Rendering in 2D and 3D; orthogonal, perspective, frustum projections; camera control; scene illumination; and so on. - OOPSMP/src/Graphics/GCore/
Rendering of state and paths. - OOPSMP/src/Graphics/GMotionPlanners/
Common interface and specific implementations for rendering motion planners. - OOPSMP/src/Graphics/GManagers/
Common interface for all OOPSMP programs that use graphics and/or process events, such as mouse movement, window resizing, keyboard presses, etc. - OOPSMP/src/Graphics/GUserPrograms/
Implementations of different OOPSMP graphical programs, such as programs to run motion planners interactively, view and edit workspaces, view queries, solution paths, or visually test core components