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.
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

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.11.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.11-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.11-cp312-cp312-macosx_14_0_arm64.whl (24.4 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

embodik-0.20.11-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.11-cp311-cp311-macosx_14_0_arm64.whl (24.4 MB view details)

Uploaded CPython 3.11macOS 14.0+ ARM64

embodik-0.20.11-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.11-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.11.tar.gz.

File metadata

  • Download URL: embodik-0.20.11.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.11.tar.gz
Algorithm Hash digest
SHA256 09999317565e6e3d27dce3a04d96f97dd7cff387fbc86e4e74b9d9e207655b18
MD5 76074d3f0091953cb6ada156af5b2d94
BLAKE2b-256 9f81fe56cec096d23b59de7809afcda7c47dd92e072f386530bd7700d8ba522c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b7404358ec084448d9814d84686a9f2b900934237d6812466733f2af3c1279b7
MD5 9f7c06a15a0f5215701518720f76a35c
BLAKE2b-256 5f2b236472601d9fa7ff167329ce17fc4567894048efd694bd84157cb0d51a53

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp312-cp312-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 317f0f71e62a446504afa51a503a15656de4d3ea967b7317311da2477f68f8cb
MD5 684cf7572dfe036b495bb4c86628b376
BLAKE2b-256 d133dd81090cd94876004afb85c1fc33761b5b0dcbcb3bf882944b12463d6e84

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8b01cf942d948958f2a580a53c40f3bdab2ec4ffea658b58e6635c8510dff8c7
MD5 2fda80bc430039c980d4e5c8fa0af884
BLAKE2b-256 7ce437e0b02a3c75a95abb3200de0bb3f2c1f112c2bda437ce3e9085057149e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp311-cp311-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f32bc8f9b088e39d3efe099dddda2dc0a2d4815b722b8678d7cfaad879029470
MD5 5dff49a77debf7ce67ea56dece58406c
BLAKE2b-256 8868e5244f42584f1cc4ad2e1d52c2c80c0215b514c7df8d68cef2aa27418e99

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ab7e6817ee1d8d90b64084ddd2a9a948c0c90cdc2c8d95a22838040ecf510748
MD5 d8b8cb398f55f13237af1d447217dac6
BLAKE2b-256 44de8ab0f66de8827e1272cd29fdbee0f4df1f637f36f3d7bb0ad0ba9aa0219f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for embodik-0.20.11-cp310-cp310-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 fedc39658947a1495a0b163289c0334a52ffe79f5feb3f03aa78095b4f524ee3
MD5 8d10c960b5aba0bf79663b649812d1b9
BLAKE2b-256 be3844195f500c3b6897ccc3108cab77a6bf4f1a7c7649d54e5c4b2c62aa3a59

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