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.
  • 🛡️ 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

embodik-0.20.17.tar.gz (37.3 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

embodik-0.20.17-cp312-cp312-manylinux_2_28_x86_64.whl (28.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

embodik-0.20.17-cp312-cp312-macosx_14_0_arm64.whl (44.6 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

embodik-0.20.17-cp311-cp311-manylinux_2_28_x86_64.whl (28.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

embodik-0.20.17-cp311-cp311-macosx_14_0_arm64.whl (44.6 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

embodik-0.20.17-cp310-cp310-manylinux_2_28_x86_64.whl (28.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

embodik-0.20.17-cp310-cp310-macosx_14_0_arm64.whl (44.6 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

Details for the file embodik-0.20.17.tar.gz.

File metadata

  • Download URL: embodik-0.20.17.tar.gz
  • Upload date:
  • Size: 37.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for embodik-0.20.17.tar.gz
Algorithm Hash digest
SHA256 a44b4d82acf3502b8f095e31bd02a0da4630936ecb2bf1ca281cd5c084ddf1e7
MD5 f5dba1e16f2e56bf07cbdff389da5b1c
BLAKE2b-256 885bc931281d7a3b89755afd3efc1dafb9a7d166f8cfb9ce03719b49c8b97e3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17.tar.gz:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0d6d602a5f659a60f9fccaf463ca1bf469992f0dc3fd64d1b12c41649165d893
MD5 0bd8a03a61e78de83d2d793901b0694c
BLAKE2b-256 3d76cf4d8af79a164dc722efdc2ea7d055402623ec91089823cd5ff415cae12f

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp312-cp312-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c198f02538de6a16dbfa387f757d45af5ae125d45554c97bc7e9b37581958079
MD5 5e7cda6c56cc93fb5deb24650bbd0ff8
BLAKE2b-256 bbb0025ee2bcf127354074dd68ac2de6017babc2992e19409c7aea80da4b77e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp312-cp312-macosx_14_0_arm64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d28fc9bf7ebcfc1d29775966a52e02bbbd6c3615a6bf927cfb65c255a123dade
MD5 c59c17d82c9dbdfc28eaf9238764a260
BLAKE2b-256 97a23b5c458ee6eea1a3fab75b80f00f83da7e5bda913674fa9f5d0560744a2f

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp311-cp311-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3545da9b9e142c65316fc6fb56d49566ca9d5600469e4a9a02097698d7f88aff
MD5 a0ede51c06ed18a3b6eb7356d2b1cf29
BLAKE2b-256 e9da435b7e168afde9fa1444d5313c15c6b9532f7908f44a7c6b528fc53ae1c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp311-cp311-macosx_14_0_arm64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 19db3283a9368b1ccbcd613d48759e182eb593dd1da6e044aa86da6a26ed63cf
MD5 554a93bec0bd7a3f52c919f5c6df8577
BLAKE2b-256 e51010b49a4b0c4257826186c5f3bfa8cd39203c1471fa42dfa3d817f561efc0

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embodik-0.20.17-cp310-cp310-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for embodik-0.20.17-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 e96454a3851818fbfc232aefae882024f896d163b6d036db0433882e6eebb8bd
MD5 1b236281e0184a5fe55d3fe4891d5378
BLAKE2b-256 dc6754d3c919ed150c03104b9e6d7f1a840cb029c1e198c584071e7175161e3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for embodik-0.20.17-cp310-cp310-macosx_14_0_arm64.whl:

Publisher: wheels.yml on robodreamer/embodik

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.20.18

7 files

This release

0.20.17 This release

7 files

0.20.16

7 files

0.20.15

7 files

0.20.14

7 files

0.20.13

1 file

0.20.12

7 files

0.20.11

7 files

0.20.10

7 files

0.20.9

7 files

0.20.8

1 file

0.20.7

7 files

0.20.6

1 file

0.20.5

7 files

0.20.4

1 file

0.20.3

1 file

0.20.2

1 file

0.20.1

1 file

0.20.0

1 file

0.19.0

1 file

0.18.9

1 file

0.18.8

1 file

0.18.6

1 file

0.18.5

1 file

0.18.4

1 file

0.18.3

1 file

0.18.2

1 file

0.18.1

1 file

0.18.0

1 file

0.17.0

1 file

0.16.0

1 file

0.15.6

1 file

0.15.5

1 file

0.15.4

1 file

0.15.3

1 file

0.15.2

1 file

0.15.1

1 file

0.15.0

1 file

0.14.4

1 file

0.14.3

1 file

0.14.2

1 file

0.14.1

1 file

0.14.0

1 file

0.13.2

1 file

0.13.1

1 file

0.13.0

1 file

0.12.6

1 file

0.12.5

1 file

0.12.4

1 file

0.12.3

1 file

0.12.2

1 file

0.12.1

1 file

0.12.0

1 file

0.11.0

1 file

0.10.0

1 file

0.9.0

1 file

0.8.1

1 file

0.8.0

1 file

0.7.2

1 file

0.7.1

1 file

0.7.0

1 file

0.6.0

1 file

0.5.0

1 file

0.4.1

1 file

0.3.0

1 file

0.1.1

1 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