Skip to main content

High-performance inverse kinematics solver optimized for cross-embodiment VLA/AI applications

Project description

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 and collision handling.
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

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:

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

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

Clone-only advanced surfaces live under dev_examples/ and are not copied by embodik-examples --copy.

🗂️ Repository Layout

embodik/
|-- README.md
|-- cpp_core/
|   |-- include/embodik/
|   `-- src/
|-- python_bindings/
|   `-- src/
|-- python/embodik/
|-- examples/
|-- dev_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

Project details


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.12.tar.gz (17.2 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.12-cp312-cp312-manylinux_2_28_x86_64.whl (28.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

embodik-0.20.12-cp312-cp312-macosx_14_0_arm64.whl (24.4 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

embodik-0.20.12-cp311-cp311-manylinux_2_28_x86_64.whl (28.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

embodik-0.20.12-cp311-cp311-macosx_14_0_arm64.whl (24.4 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

embodik-0.20.12-cp310-cp310-manylinux_2_28_x86_64.whl (28.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

embodik-0.20.12-cp310-cp310-macosx_14_0_arm64.whl (24.4 MB view details)

Uploaded CPython 3.10macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: embodik-0.20.12.tar.gz
  • Upload date:
  • Size: 17.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for embodik-0.20.12.tar.gz
Algorithm Hash digest
SHA256 602f539a5b7b11cfa97baa9250400473f34936c0ceb12d7d694fda55dc081365
MD5 8cd31f9a4aa6d9fa2fc07a2b64f877e6
BLAKE2b-256 1fa318c7084a9ca1fdc0bfbfdaa94c24fea66b5dc7b7f209532c4284c64eb1f3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9379d8fb370e31899e38a5cc6d22e446738d7e918033d85622e5f2ca98c5d872
MD5 8753823b470538cdbf80e785ede39dbe
BLAKE2b-256 5040d7457862bf6fe73190dbc43a590ceacdc4951c5281b0184c4825b5dc183b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 acec7ef0ab792b0b625040ec5e5d5ea8ac5ec19c6c59ec013d22fa2b5c428754
MD5 d9db8cda4cae7bf99aca8cfa5ad5a99b
BLAKE2b-256 ef1de0a20787edc1170f8b212a063f1b332dae01c9b142208037ea9b1b138a00

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b820c69abe34d737c54bdef79d0d29e8787a40ed6240564760eaf0a73778b05
MD5 6286edaaa63b3c30e76b94a014bb0d60
BLAKE2b-256 7f24610e2230f7cdea6f059043492fd7e7942b8b2aca5802a6717c5f981c6af2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 da1b93f974d5e11c724dfdc55795fa575e3c83be5bcc9f3515a1bbf0921afd7c
MD5 2301541755d73f09ff4c5cc1e64d902f
BLAKE2b-256 1baa41beba1ea6f4aa271a46fa2ef81b2262c80e7aabdb3f5bfad8f4cbd11746

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e3c20d53182011021d2602a606eb61cba0172a6d818b47252c702872ada31bf4
MD5 e5f262cc61f71c073d9eeefaa61eb3d9
BLAKE2b-256 3eeb504527f7ea66ca60428c3263128ba0f859762950c24d0f5b8e33d51f7065

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.12-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 208fcadc1ce709b4b68c1c2fef82f5a621c170cf28a71d75b2b5ccdf4d44e156
MD5 efc2f2f61f5332f39a9f8345d5c6c67d
BLAKE2b-256 792b563b19e6bbc8fe885a8090c7d40650a820d0b187156751f7fcbdf56bd431

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page