Skip to main content
EmbodiK logo

EmbodiK

Python C++ Nanobind Build PyPI Docs License: Apache-2.0 GitHub stars

EmbodiK is a high-performance prioritized numerical inverse kinematics library for cross-embodiment robotics and VLA/AI applications. It pairs a C++ core with Python bindings, exposes robot-model utilities without requiring the Python pin package at runtime, and includes interactive examples for collision-aware IK, CoM constraints, teleop, whole-body robots, GPU batch solving, and dual-arm coordination.

✨ Overview

EmbodiK is designed for bringing up IK behavior across different robot bodies without rewriting the solver stack for each model. The public examples focus on a practical path:

  • 🧭 start with the smallest fixed-base IK loop.
  • 🛡️ add collision, joint-limit, and CoM constraints.
  • 🎮 connect the same prioritized IK solver path to teleop input.
  • 🤖 scale to bimanual, humanoid, and Spot whole-body examples.
  • 🧪 use richer clone-only examples for development, stress testing, and policy rollout.

The intent is to keep Python examples lean: visualization and target plumbing stay in Python, while constraint handling and recovery policy stay in the C++ solver.

The detailed installation notes, API reference, and example walkthroughs live in the official documentation:

https://robodreamer.github.io/embodik/

🚀 Quick Start

Fastest path for most users is the wheel-only PyPI install inside a virtual environment:

python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
python -m pip install --only-binary=:all: embodik
python -c "import embodik; print(embodik.__version__)"

If that import works, the core package is installed.

If pip cannot find a compatible wheel, use the one-shot source installer for your platform from the Installation Guide. It creates the venv, installs native dependencies, builds EmbodiK, and runs an import smoke test.

To run copied examples from the same venv:

python -m pip install "embodik[examples]"
embodik-examples --copy
cd embodik_examples
python 01_basic_ik_simple.py

Published repaired wheels do not require the Python pin package at runtime. Source builds use pin or a system Pinocchio install as the native library provider; keep that provider installed in the environment used to import EmbodiK.

🎮 Examples

The pip-facing examples are intentionally split by purpose:

Script Purpose
01_basic_ik_simple.py Minimal fixed-base IK bring-up for a robot preset or new URDF.
02_collision_aware_IK.py Collision-aware IK behavior demo and advanced tuning surface.
03_teleop_ik.py Small adapter showing how teleop input drives the same IK solver path.
04_com_constraint_example.py CoM support-polygon constraint visualization.
05_dual_arm_ects.py Dual-arm ECTS and orthogonal coordination modes.
06_bimanual_whole_body_ik.py Bimanual whole-body teleop, defaulting to AI Worker and optionally supporting RB-Y1, with CoM, collision handling, torso gizmo control, torso/arm contribution controls, adaptive tuning, and optional Seer input.
07_unitree_g1_retargeting_ik.py Unitree G1 whole-body retargeting IK with CoM and optional collision handling.
08_spot_full_body_ik_viser.py Spot full-body IK in regular Viser with arm+torso, torso-only, full-body, and two-stage modes.
09_spot_locomanip_mjviser.py Spot locomanipulation ONNX policy rollout in MuJoCo through mjviser.

Run them from a copied example directory:

python 02_collision_aware_IK.py
python 03_teleop_ik.py
python 06_bimanual_whole_body_ik.py
python 07_unitree_g1_retargeting_ik.py
python 08_spot_full_body_ik_viser.py

For Seer/xvisio controller input in the public teleop examples, install the teleop extra and pass the controller port:

python -m pip install "embodik[examples,teleop]"
python 06_bimanual_whole_body_ik.py --controller-port /dev/ttyUSB0

The regular Viser Spot full-body IK example uses the standard example dependencies and includes a bundled Spot-with-arm URDF. The MuJoCo/mjviser locomanipulation example needs the optional mjviser stack and includes a bundled public MuJoCo Menagerie Spot-with-arm MJCF scene. mjviser is the MuJoCo-backed web viewer environment for policy rollout and interactive simulation. mjviser-teleop is the same viewer stack plus the optional Seer/xvisio controller dependencies, so use it only when running --enable-teleop:

python -m pip install "embodik[mjviser]"
embodik-examples --copy
cd embodik_examples
python 09_spot_locomanip_mjviser.py --policy locomanip
python 09_spot_locomanip_mjviser.py --policy locomanip-stationary
# add the optional Seer controller extra when needed:
python -m pip install "embodik[mjviser,teleop]"
python 09_spot_locomanip_mjviser.py --enable-teleop --policy locomanip

From a repository checkout, run the same example from the repository root with the matching Pixi environment and task:

pixi run -e mjviser spot-locomanip-mjviser --policy locomanip
pixi run -e mjviser-teleop spot-locomanip-mjviser --enable-teleop --policy locomanip

Use the spot-locomanip-mjviser Pixi task from a checkout, not raw pixi run -e mjviser-teleop python examples/09_spot_locomanip_mjviser.py, on a fresh environment. The task depends on install, so it builds/installs the native EmbodiK extension before launching the example.

See the Spot locomanipulation guide for mjviser, Seer teleop, solver tuning, and headless validation details.

Most examples default to the Panda preset. Use --robot <key> when a script supports alternate robot presets. See the Examples Guide for the full catalog, helper conventions, and clone-only development examples.

🎬 Preview

Franka Panda collision-free IK

Franka Panda collision-free IK preview

ROBOTIS AI Worker constraint teleop

ROBOTIS AI Worker constraint teleop preview

RB-Y1 bimanual whole-body IK

RB-Y1 bimanual whole-body IK preview

Unitree G1 retargeting IK

Unitree G1 retargeting IK preview

Spot full-body IK

Spot full-body IK preview

Spot locomanipulation mjviser

Spot locomanipulation mjviser preview

🧰 Core Capabilities

  • ⚙️ C++ IK core with Nanobind Python bindings.
  • 🎯 Hierarchical velocity IK tasks for frames, posture, CoM, and dual-arm coordination.
  • 🧮 Fixed-base acceleration eSNS with compatible position, velocity, acceleration, effort, contact-kinematics, and geometry constraints.
  • 🛡️ Joint-limit, self-collision, and CoM support-polygon constraints.
  • 📈 Solver diagnostics for timing, task scaling, and Jacobian condition-number logging.
  • 🧭 Lie-group-aware configuration operations for floating-base, quaternion, and continuous joints.
  • 🤖 Native Pinocchio-backed robot model utilities exposed through EmbodiK bindings.
  • 👁️ Optional Viser visualization for interactive IK demos.
  • ⚡ Experimental GPU batch IK and collision tooling for high-throughput research workflows.

📚 Documentation

🛠️ Development

Use Pixi from a repository clone:

pixi run build
pixi run test
pixi run docs-build

Run examples from the clone:

pixi run python examples/01_basic_ik_simple.py
pixi run python examples/02_collision_aware_IK.py
pixi run python examples/03_teleop_ik.py

🗂️ Repository Layout

embodik/
|-- README.md
|-- cpp_core/
|   |-- include/embodik/
|   `-- src/
|-- python_bindings/
|   `-- src/
|-- python/embodik/
|-- examples/
|-- docs/
|-- scripts/
`-- test/

⭐ Star History

Star History Chart

📄 License

EmbodiK is released under the Apache License 2.0. See LICENSE for details. Binary wheels may bundle permissively licensed native dependencies; see THIRD_PARTY_NOTICES.md.

Developer: Andy Park andypark.purdue@gmail.com

Release files for embodik 0.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for embodik 0.21.0
File Size Uploaded
embodik-0.21.0.tar.gz 37.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for embodik 0.21.0
File
embodik-0.21.0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details
embodik-0.21.0-cp312-cp312-macosx_14_0_arm64.whl CPython 3.12 CPython 3.12 macOS 14.0+ ARM64 Details
embodik-0.21.0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details
embodik-0.21.0-cp311-cp311-macosx_14_0_arm64.whl CPython 3.11 CPython 3.11 macOS 14.0+ ARM64 Details
embodik-0.21.0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details
embodik-0.21.0-cp310-cp310-macosx_14_0_arm64.whl CPython 3.10 CPython 3.10 macOS 14.0+ ARM64 Details

Total release size: 258.8 MB

Release files / embodik-0.21.0.tar.gz

Download URL embodik-0.21.0.tar.gz
Size 37.4 MB
Tags Source
SHA-256 checksum
How to use checksums
9cd7b559d10caa68175f8a27f8648723d9fa0184e3f6fea5901e7e497e79ee21
BLAKE2b-256 checksum
How to use checksums
2eb14cc54e7e3e33d47fe3dbd34d6aeedfceb70436c5ad32dddfbb7d8bbb2f86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL embodik-0.21.0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 28.7 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
32c614bc007a1d00903c6ca0efb8606e01e374dbefa971e14e324ceb063dbbf0
BLAKE2b-256 checksum
How to use checksums
3548e25b099b700a6630612881c9c29094c9c1ca44d9e37b87979707b07f65b8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp312-cp312-macosx_14_0_arm64.whl

Download URL embodik-0.21.0-cp312-cp312-macosx_14_0_arm64.whl
Size 45.0 MB
Tags CPython 3.12 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
7e78cc52c29a4a83bfaeecaba4cdd33426d5484efc6d1eb82a5463da6b91ad81
BLAKE2b-256 checksum
How to use checksums
80830a8955ed7e2fdd121b23e531440f60fb6acab44197bd2e0f789fd529b7f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL embodik-0.21.0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 28.7 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c5e1dc438278f1e71be4519130b8feb1f169bc914426c3d69275f7532ea0dc4e
BLAKE2b-256 checksum
How to use checksums
dc84dded67251a4de4c628ff1fca7621b632d265cd7c5aef18154f8515face2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp311-cp311-macosx_14_0_arm64.whl

Download URL embodik-0.21.0-cp311-cp311-macosx_14_0_arm64.whl
Size 45.0 MB
Tags CPython 3.11 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
683a19303ad4b64aa3b6e46b83b4cc8617e03fe3e399d66de772fc0b2e16edb1
BLAKE2b-256 checksum
How to use checksums
3c4f4e4a14739a2fb2361a116608a4c794705d803f443d250e3ce49302dde0f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL embodik-0.21.0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 28.7 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
44b8eafcc73dc19faac1cca81860a79f29033d0f98805df7e16ea2eb74260a5e
BLAKE2b-256 checksum
How to use checksums
1eeb73817f049de7eaf0da9c3cbfa7da6ef2431fdaf9f6584b17890c5f05c5a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / embodik-0.21.0-cp310-cp310-macosx_14_0_arm64.whl

Download URL embodik-0.21.0-cp310-cp310-macosx_14_0_arm64.whl
Size 45.0 MB
Tags CPython 3.10 macOS 14.0+ ARM64
SHA-256 checksum
How to use checksums
aa6e49019d9aa6b1e62c3a6d968e720ab21f76842e89df95cf9857d9266179cc
BLAKE2b-256 checksum
How to use checksums
1d05ba245f04b416337f330ec1ef62edeeeaadc4d11a48c5d29eaeff1e24db7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

0.23.1

7 release files

0.22.0

7 release files

0.21.1

7 release files

This release

0.21.0 This release

7 release files

0.20.13

1 release file

0.20.9

7 release files

0.20.8

1 release file

0.20.7

7 release files

0.20.6

1 release file

0.20.4

1 release file

0.20.3

1 release file

0.20.2

1 release file

0.20.1

1 release file

0.20.0

1 release file

0.19.0

1 release file

0.18.9

1 release file

0.18.8

1 release file

0.18.6

1 release file

0.18.5

1 release file

0.18.4

1 release file

0.18.3

1 release file

0.18.2

1 release file

0.18.1

1 release file

0.18.0

1 release file

0.17.0

1 release file

0.16.0

1 release file

0.15.6

1 release file

0.15.5

1 release file

0.15.4

1 release file

0.15.3

1 release file

0.15.2

1 release file

0.15.1

1 release file

0.15.0

1 release file

0.14.4

1 release file

0.14.3

1 release file

0.14.2

1 release file

0.14.1

1 release file

0.14.0

1 release file

0.13.2

1 release file

0.13.1

1 release file

0.13.0

1 release file

0.12.6

1 release file

0.12.5

1 release file

0.12.4

1 release file

0.12.3

1 release file

0.12.2

1 release file

0.12.1

1 release file

0.12.0

1 release file

0.11.0

1 release file

0.10.0

1 release file

0.9.0

1 release file

0.8.1

1 release file

0.8.0

1 release file

0.7.2

1 release file

0.7.1

1 release file

0.7.0

1 release file

0.6.0

1 release file

0.5.0

1 release file

0.4.1

1 release file

0.3.0

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page