Python package for single and dual robot arm motion planning.
Key motivation:
- 🔗 Provide unified interfaces for different motion planners and collision checkers, such as OMPL's powerful (but robot-agnostic) sampling-based planners and Drake's collision checking for robots.
- 🦾 Standardize and add other features tailored to robotic arm motion planning such as joint limits and planning to TCP poses.
Features: this packages provides two main things:
- 🤝 Interfaces: specify interfaces for robot arm motion planning
SingleArmPlannerDualArmPlanner
- 🔌 Implementations: reliable and well-tested implementations of these interfaces.
- OMPL for single and dual arm planning to joint configurations or TCP poses
- cuRobo for single arm planning to joint configurations or TCP poses
Design goals:
-
⚓ Robustness and stability: provide an off-the-shelf motion planner that supports research by reliably covering most (not all) use cases at our labs, prioritizing dependability over niche, cutting-edge features.
-
🧩 Modularity and flexibility in the core components:
- 🧭 Motion planning algorithms
- 💥 Collision checker
- 🔙 Inverse kinematics
-
🐛 Debuggability and transparency: many things can go wrong in motion planning, so we log generously and store debugging information (IK solutions, alternative paths) to troubleshoot issues.
-
🧪 Enable experimentation: Facilitate the benchmarking and exploration of experimental planning algorithms.
Planned features:
- Drake optimization-based planning
See the getting started notebooks, where we set up:
- 🎲 OMPL for sampling-based motion planning
- 🐉 Drake for collision checking
- 🧮 ur-analytic-ik for inverse kinematics of a UR5e
- 🟢 cuRobo for GPU-accelerated motion planning
If you have mostly static scenes, use OMPL. It’s well tested, fast, and runs on your CPU. If you have dynamic scenes that change often and have access to a CUDA-supporting GPU, use cuRobo.
airo-planner is available on PyPI and installable with pip:
pip install airo-planner
If you want to use cuRobo with airo-planner, you first need to install it yourself; airo-planner does not depend on it directly since cuRobo isn't published on PyPI. Note that you will need a CUDA-enabled GPU (newer than Turing, driver ≥580.65.06).
git clone https://github.com/NVlabs/curobo.git
cd curobo && git checkout v0.8.0
uv venv --python 3.11 && uv pip install ".[cu12-torch]" # or .[cu13-torch], matching your CUDA driver
See the official install instructions for details.
If your robot isn't one of cuRobo's bundled configs (franka.yml, ur10e.yml, ...), cuRobo ships a first-party RobotBuilder (curobo.robot_builder) to build a robot config from a URDF, including automatic collision-sphere fitting — no Isaac Sim required:
from curobo.robot_builder import RobotBuilder
builder = RobotBuilder("robot.urdf", "assets/")
builder.fit_collision_spheres()
builder.compute_collision_matrix()
config = builder.build()
builder.save(config, "my_robot.yml")See notebooks/07_curobo_custom_robot.ipynb for the full walkthrough — it covers two real gotchas the snippet above hides (a RobotBuilder.save() bug that breaks reloading the saved file, and why self-collision passing doesn't mean your fitted spheres are collision-free against your actual scene), verified end-to-end on real hardware.
See the airo-mono developer guide.
A very similar process and tools are used for this package.
See airo-models, releasing airo-planner works the same way.