Tesseract robotics Python bindings (nanobind)
Project description
Tesseract Python (nanobind)
Note: This is a friendly fork of tesseract_python that replaces SWIG bindings with modern nanobind bindings.
Python bindings for Tesseract robotics motion planning using nanobind.
Features
- Scene loading and management (URDF, SRDF, meshes)
- Collision checking (Bullet, FCL)
- Kinematics (KDL, OPW, UR)
- Motion planning (OMPL, Descartes, TrajOpt)
- Time parameterization (TOTG, ISP, Ruckig)
- Task composition and pipelines
- Pythonic high-level API
Installation
pip install tesseract-robotics-nanobind
Platform support: Linux x86_64. macOS arm64 coming soon.
Quick Start
from tesseract_robotics.planning import (
Robot, MotionProgram, JointTarget, CartesianTarget,
Pose, box, create_obstacle, TaskComposer,
)
# Load robot
robot = Robot.from_urdf(
"package://tesseract_support/urdf/abb_irb2400.urdf",
"package://tesseract_support/urdf/abb_irb2400.srdf"
)
# Add obstacle
create_obstacle(robot, "box", box(0.5, 0.5, 0.5), Pose.from_xyz(0.5, 0, 0.3))
# Build motion program
program = (MotionProgram("manipulator", tcp_frame="tool0")
.set_joint_names(robot.get_joint_names("manipulator"))
.move_to(JointTarget([0, 0, 0, 0, 0, 0]))
.move_to(CartesianTarget(Pose.from_xyz(0.5, 0.3, 0.8)))
)
# Plan
composer = TaskComposer.from_config()
result = composer.plan(robot, program)
if result.successful:
for pt in result.trajectory:
print(pt.positions)
Low-Level API
For direct C++ API access:
from tesseract_robotics.tesseract_environment import Environment
from tesseract_robotics.tesseract_common import GeneralResourceLocator
env = Environment()
locator = GeneralResourceLocator()
env.init("/path/to/robot.urdf", "/path/to/robot.srdf", locator)
print(f"Joints: {env.getJointNames()}")
print(f"Links: {env.getLinkNames()}")
Examples
See the examples/ directory for:
basic_cartesian_example.py- Simple Cartesian planningfreespace_ompl_example.py- OMPL freespace planningpick_and_place_example.py- Pick and place with TrajOptpuzzle_piece_example.py- Cartesian path following- And more...
Versioning
Version follows 0.A.B.C where A.B tracks the upstream Tesseract release and C is the nanobind patch number. For example, 0.34.1.0 wraps Tesseract 0.34.1.
Development
This project uses pixi exclusively for dependency management and task running — no pip, conda, or venv needed. Pixi manages both the C++ toolchain (cmake, eigen, boost, bullet, ompl, ...) and Python deps in a single lockfile.
Prerequisites
Install pixi (docs):
curl -fsSL https://pixi.sh/install.sh | bash
First-time setup
git clone --recurse-submodules https://github.com/tesseract-robotics/tesseract_nanobind.git
cd tesseract_nanobind
pixi run build # builds C++ libs + installs bindings (editable)
pixi run build chains two steps: build-cpp (compiles tesseract C++ via colcon) → install (editable pip install of the Python package). First build takes ~15 min; subsequent rebuilds are incremental.
Available tasks
| Task | Description |
|---|---|
pixi run build |
Build C++ libs + install bindings |
pixi run build-cpp |
Build only the C++ libs |
pixi run install |
Editable install (assumes C++ already built) |
pixi run test |
Run pytest with xdist parallelism |
pixi run lint |
Lint with ruff |
pixi run fmt |
Format with ruff |
pixi run typecheck |
Type check with pyright |
pixi run docs |
Live docs server (localhost:8000) |
pixi run docs-build |
Build static docs to site/ |
Running tests
pixi run test # full suite, parallel
pixi shell && pytest tests -x --testmon # incremental (only changed)
Pre-commit hooks
pixi shell
pre-commit install
pre-commit install --hook-type pre-push
This runs ruff + auto-staging on commit, and pyright + pytest on push (configured in .pre-commit-config.yaml).
Project layout
├── pyproject.toml # package config + pixi workspace
├── CMakeLists.txt # nanobind build
├── src/tesseract_robotics/ # Python package + C++ extension modules
├── tests/ # pytest suite
├── examples/ # usage examples
├── ws/ # C++ workspace (colcon src/ + install/)
├── scripts/ # build scripts (build_tesseract_cpp.sh, build_wheel.sh)
└── docs/ # mkdocs-material documentation
Building portable wheels
Editable installs bake absolute paths — not portable. For distributable wheels:
./scripts/build_wheel.sh # builds + delocates (bundles dylibs)
pip install wheelhouse/tesseract*.whl
Acknowledgments
This project builds upon the excellent work of John Wason and the Tesseract Robotics team. The original tesseract_python SWIG bindings laid the foundation for this nanobind implementation.
Special thanks to:
- John Wason (Wason Technology, LLC) - Original tesseract_python author and Tesseract maintainer
- Levi Armstrong - Tesseract core developer
- Jelle Feringa (Terrestrial) - nanobind port developer
- The ROS-Industrial consortium for supporting Tesseract development
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tesseract_robotics_nanobind-0.34.1.0-cp312-abi3-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tesseract_robotics_nanobind-0.34.1.0-cp312-abi3-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 100.7 MB
- Tags: CPython 3.12+, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4211c9702ccc7debc4d842a47464883f53966da91279b700d6c445daba8586d
|
|
| MD5 |
3a51275efdf5837b410601167fb7d757
|
|
| BLAKE2b-256 |
bee722623636554dfbb938d058be5344bd567f7ec20d62384c9fa2a9364088c2
|
Provenance
The following attestation bundles were made for tesseract_robotics_nanobind-0.34.1.0-cp312-abi3-manylinux_2_35_x86_64.whl:
Publisher:
wheels.yml on tesseract-robotics/tesseract_nanobind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tesseract_robotics_nanobind-0.34.1.0-cp312-abi3-manylinux_2_35_x86_64.whl -
Subject digest:
e4211c9702ccc7debc4d842a47464883f53966da91279b700d6c445daba8586d - Sigstore transparency entry: 982225822
- Sigstore integration time:
-
Permalink:
tesseract-robotics/tesseract_nanobind@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Branch / Tag:
refs/tags/0.34.1.0 - Owner: https://github.com/tesseract-robotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tesseract_robotics_nanobind-0.34.1.0-cp311-cp311-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tesseract_robotics_nanobind-0.34.1.0-cp311-cp311-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 100.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b19ac56d359fb18cb2bafd696d5172fde83703a16be74711b968ae64fcd19c66
|
|
| MD5 |
14e406bdbd19b3d4335fb83d182595df
|
|
| BLAKE2b-256 |
21b908374fe06704fdf5e29dbe2cda631b3a102b2296d474e34b56de152a96f6
|
Provenance
The following attestation bundles were made for tesseract_robotics_nanobind-0.34.1.0-cp311-cp311-manylinux_2_35_x86_64.whl:
Publisher:
wheels.yml on tesseract-robotics/tesseract_nanobind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tesseract_robotics_nanobind-0.34.1.0-cp311-cp311-manylinux_2_35_x86_64.whl -
Subject digest:
b19ac56d359fb18cb2bafd696d5172fde83703a16be74711b968ae64fcd19c66 - Sigstore transparency entry: 982225788
- Sigstore integration time:
-
Permalink:
tesseract-robotics/tesseract_nanobind@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Branch / Tag:
refs/tags/0.34.1.0 - Owner: https://github.com/tesseract-robotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tesseract_robotics_nanobind-0.34.1.0-cp310-cp310-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tesseract_robotics_nanobind-0.34.1.0-cp310-cp310-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 100.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5bbe5217df876f815e9f3c8e8c7e2e05b76509d091ccd2a5f3bf111fbb6495f
|
|
| MD5 |
28d0ef33c0820619e47bfc7feda52c5c
|
|
| BLAKE2b-256 |
229b0931a58199ac3768beea4f2adeea5ae71cc25f930fc75c102061cc32da61
|
Provenance
The following attestation bundles were made for tesseract_robotics_nanobind-0.34.1.0-cp310-cp310-manylinux_2_35_x86_64.whl:
Publisher:
wheels.yml on tesseract-robotics/tesseract_nanobind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tesseract_robotics_nanobind-0.34.1.0-cp310-cp310-manylinux_2_35_x86_64.whl -
Subject digest:
f5bbe5217df876f815e9f3c8e8c7e2e05b76509d091ccd2a5f3bf111fbb6495f - Sigstore transparency entry: 982225719
- Sigstore integration time:
-
Permalink:
tesseract-robotics/tesseract_nanobind@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Branch / Tag:
refs/tags/0.34.1.0 - Owner: https://github.com/tesseract-robotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tesseract_robotics_nanobind-0.34.1.0-cp39-cp39-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: tesseract_robotics_nanobind-0.34.1.0-cp39-cp39-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 100.8 MB
- Tags: CPython 3.9, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3130f48480711e6b59b2a1ed00c655fffd6b5e4a9b5bceddd1a8e07b08b4700
|
|
| MD5 |
5c3b6ced37069c92e10c8a7947fc2365
|
|
| BLAKE2b-256 |
a4639ca0982d4bff72a4501f1c9603c1012a4ec77980392cc5c15e7c9362771d
|
Provenance
The following attestation bundles were made for tesseract_robotics_nanobind-0.34.1.0-cp39-cp39-manylinux_2_35_x86_64.whl:
Publisher:
wheels.yml on tesseract-robotics/tesseract_nanobind
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tesseract_robotics_nanobind-0.34.1.0-cp39-cp39-manylinux_2_35_x86_64.whl -
Subject digest:
a3130f48480711e6b59b2a1ed00c655fffd6b5e4a9b5bceddd1a8e07b08b4700 - Sigstore transparency entry: 982225765
- Sigstore integration time:
-
Permalink:
tesseract-robotics/tesseract_nanobind@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Branch / Tag:
refs/tags/0.34.1.0 - Owner: https://github.com/tesseract-robotics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@8c24d5b5234bb2f89ac81f6f1524514dcd7cd675 -
Trigger Event:
push
-
Statement type: