Skip to main content

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

Project description

EmbodiK

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

EmbodiK is a high-performance 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, 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-aware behavior and visualization.
  • connect the same stepping IK pattern to teleop input.
  • use richer clone-only examples for development and stress testing.

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 step.
08_com_constraint_example.py CoM support-polygon constraint visualization.
09_dual_arm_ects.py Dual-arm ECTS and orthogonal coordination modes.
12_bimanual_whole_body_ik.py Bimanual whole-body teleop, defaulting to AI Worker and optionally supporting RB-Y1, with CoM and collision handling.
13_unitree_g1_retargeting_ik.py Unitree G1 whole-body retargeting IK with CoM and optional collision handling.
14_spot_full_body_ik_viser.py Spot full-body IK in regular Viser with arm+torso, torso-only, full-body, and two-stage modes.
15_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 12_bimanual_whole_body_ik.py
python 13_unitree_g1_retargeting_ik.py
python 14_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 15_spot_locomanip_mjviser.py --policy locomanip
python 15_spot_locomanip_mjviser.py --policy locomanip-stationary
# add the optional Seer controller extra when needed:
python -m pip install "embodik[mjviser,teleop]"
python 15_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

Use a single Pixi environment per run: mjviser for browser GUI control and mjviser-teleop for browser GUI plus Seer controller input. Do not add mjviser after python; it is a Pixi environment name, not a Python module argument. Passing --enable-teleop connects the optional controller; the in-app Enable teleop box starts enabled when the controller connects. The locomanipulation app also has solver preference sliders. Base assist controls how much the solver uses x/y/yaw locomotion while tracking the gripper target: lower values keep more motion in the arm, and higher values let the base help earlier. Arm recovery bias increases the arm posture return while condition-number protection is active, which helps avoid fully stretched arm configurations during loco-manipulation teleop. The default values are tuned for teleop: the base helps on reachable x/y/yaw nudges, and arm recovery stays active without making the high-condition-number solve overly stiff. The mjviser loop rate-limits ONNX policy inference and background IK requests to 50 Hz by default while MuJoCo simulation and rendering continue stepping at the model/viewer rate. The IK worker keeps only the newest pending request so collision-constrained solves cannot build a backlog and starve the sim thread. When collision avoidance is enabled, the default checks the 3 closest active collision pairs with balanced speed/accuracy tuning. Clone-based Spot IK changes can be headlessly checked with:

pixi run -e mjviser-teleop python scripts/spot_locomanip_ik_hardening.py

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

Bimanual whole-body IK 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.10.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.10-cp312-cp312-manylinux_2_28_x86_64.whl (28.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

embodik-0.20.10-cp311-cp311-manylinux_2_28_x86_64.whl (28.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

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

Uploaded CPython 3.11macOS 14.0+ ARM64

embodik-0.20.10-cp310-cp310-manylinux_2_28_x86_64.whl (28.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

embodik-0.20.10-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.10.tar.gz.

File metadata

  • Download URL: embodik-0.20.10.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.10.tar.gz
Algorithm Hash digest
SHA256 477ce3349337f6d44d8d984cd0502927a2e9b0d8947a4d42546a0a7cb45c1514
MD5 3c06d5adace530f23b88cf74eb3abca9
BLAKE2b-256 5495f32a75bd1d4e3a2db75b3df29e2a2e8d66bbce72c77c37bb85fa23fcefc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7f6b491a50c10c06fc053823ba0c8bb883d5ad376dbcd3dc1ab23a3086f6a67d
MD5 b8c07736ee35189e748f8aa030e1225b
BLAKE2b-256 127e1911ce2746fb793acf5d4f60591222d7ce103bda81edcd6e9d77ab6fac2a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 0b659d66cce19d55d54268838962a95fde2dc0386ceb4e426b42d52542b708f8
MD5 6935ca272466fd153f6edd0807ba902f
BLAKE2b-256 c8932b471f891f23e98dabcb9340fe6be90989d4ac47f954d02210750b2351dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e0d34c6134558ae9813830dcaa5315672d94d4c4e997987705575db24967579d
MD5 556a5e5beebf88d25c116b714f981bc7
BLAKE2b-256 e8d182a43723db5b3ef25cfb4dc849e9aeaba645af83c5012245e6307f95e25d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 a14ddba32112d5144fef8af7929f6c82667a88d992a5018003f859dcd2730c0e
MD5 f79f2bdbc2554374ec919b07d3b3097f
BLAKE2b-256 3b0db7377d94016c61f6673c95bf6ae28ac70e01cd296589d2c1ee8249c4e07f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 fc8ceeb7c32f5082c4725403a0d995272f0c452e13564048b8a5eb3dbc32f394
MD5 b754452df7e5c3a5b6eaae9ee67b22b1
BLAKE2b-256 9fd9cd35e7ec1f542fba478bbaf5c8b86a072e21a2686af4e2f553c68713c998

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.10-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 3b3936029302535aa4b0ae9078e5fe065a2cf2c136761e62c6cb53040b1cbf10
MD5 009ffa14f23970998cfab7ba3c9ede7a
BLAKE2b-256 37d96794031964a67e8754c264802e84700f9feb9c382bff627ae650260ea461

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