Try it out online!
DynoRRT is a C++/Python library for sampling-based motion planning using algorithms such as Rapidly Exploring Random Trees (RRT) and Probabilistic Roadmaps (PRM).
It delivers state-of-the-art performance with an easy-to-use and install Python interface. The installation is straightforward—no need for ROS, system-wide packages, MoveIt, or OMPL—just a simple pip install
or conda install
. It's significantly faster than OMPL and includes out-of-the-box integration with collision checking for robotics.
With DynoRRT, you can define and solve a motion planning problem within 60 seconds and solve it in milliseconds. Planning problems can be described using URDF files, through a collision function in Python, or a Pinocchio Model. Internally, we rely on Pinocchio and HPP-FCL for collision detection and forward kinematics calculations. In the pip package, these libraries are statically linked, so you don't need them at runtime—or it's fine if you have another version of these libraries. If you want to pass a Pinocchio model to the planner using the Python interface, you have to use the conda package or compile from source and install locally.
The Python package is created using pybind11, and the API is very similar to the C++ interface. Additionally, the Python package provides a couple of utilities to visualize the problems using Pinocchio and Meshcat, but you're free to use any viewer you prefer.
The library is currently in its alpha state. We are aiming for a public release in June. Feel free to open a GitHub issue or pull request!
conda install quimortiz::dynorrt -c conda-forge
or
pip3 install pydynorrt
You can try it online! Run the tutorial0
notebook in Google Colab (links at the top of the README).
Check the GitHub CI cpp-py conda to see how to compile the code and how to run tests and examples.
You can build the Python package using setup.py
or using cmake
.
With Cmake
mkdir build
cd build
cmake -DBUILD_EXAMPLES=ON -DBUILD_DYNOBENCH=ON -DBUILD_PYRRT=ON -DBUILD_BENCHMARK=OFF -DCMAKE_PREFIX_PATH="/opt/openrobots/" -DBUILD_TESTS_RRT=1 ..
make
make install
With setup.py
(adjust accordingly):
CMAKE_PREFIX_PATH=/opt/openrobots/ python3 -m build
cd dist
pip install pydynorrt-0.0.9-cp310-cp310-linux_x86_64.whl --force-reinstall
After changing C++, we can build Pybindings and copy by hand:
cp bindings/python/pydynorrt.cpython-310-x86_64-linux-gnu.so /home/quim/envs/mim/lib/python3.10/site-packages/pydynorrt
Standard cmake build and install workflow. Check the options to choose which components of the project to build.
The conda package is created in the separate repository dynorrt-conda. dynorrt-conda contains the recipe files to create the package from a chosen commit of this repository.
From the root of the repository:
docker run -it -v $(pwd):/io quay.io/pypa/manylinux2014_x86_64
Inside Docker
bash /io/build_deps_in_docker.sh
bash /io/wheels_build.sh
Outside docker
python3 -m twine upload wheelhouse_repaired/* --verbose
Geometric Planners:
- RRT
- RRT Connect
- Bidirectional RRT
- PRM
- BIT*
- LAZY PRM
- RRT*
Kinodynamic Planners:
- Kinodynamic RRT
- SST*
Looking for more planners? Check out our latest work in kinodynamic motion planning using Search And Trajectory Optimization. Our state-of-the-art motion planners for optimal kinodynamic motion planning are available here.
- Using Python bindings: You can define the collision function in Python.
- Robotics: Examples using Python Bindings of Pinocchio for collision checking.
- In C++: Flexibility to implement whatever you want.
- In Python: Similar flexibility, but it may be slower.
- C++ Pinocchio Interface: Define your problem using a URDF file.
- C++ Collision for Point robot in 2D and 3D and spheres/boxes (maybe using HPP-FCL, or just coding).
To Use the Code
- Python Package
- (Coming soon) C++: Easy integration into CMake build system. As submodule, Fetch Content...
- (Coming soon) Conda Package
We will have comprehensive tests and CI setup, including code coverage analysis.
How fast is DynoRRT?
TODO
Release 0.1
- Build graphs with multicore?
- Add the missing planners PRM*, LazyPRM*.
- Add a video.
- Evaluate in MotionBenchMaker.
- Offer problem as two files (robot vs. environment).
- Integrate in Dynoplan.