Skip to main content

Batched differential inverse kinematics on MuJoCo Warp, with a Mink-shaped API

Project description

mink-warp

Build Documentation License PyPI PyPI downloads

mink-warp is batched differential inverse kinematics on MuJoCo Warp, with a Mink-shaped API. Given a robot configuration and a stack of task-space objectives, it computes joint velocities for many parallel worlds on the GPU — the same control-loop niche as Mink, scaled to nworld.

Features include:

  • Mink-compatible tasksFrameTask, RelativeFrameTask, PostureTask, ComTask, DampingTask, EqualityConstraintTask, soft JointLimitTask;
  • Hard limitsConfigurationLimit, VelocityLimit, CollisionAvoidanceLimit, LinearInequalityLimit via GPU ADMM (ConstrainedSolver);
  • Device-native hot path — FK, Jacobians, residual assembly, and linear solves as Warp kernels on wp.array buffers;
  • Interchangeable solvers — damped least squares (default), Levenberg–Marquardt, L-BFGS, constrained ADMM;
  • Optional CUDA graph capture for fixed task sets in real-time loops;
  • Runnable mjviser demos — numbered examples/01_… through 05_… (Panda → UR5e → Cassie → dual iiwa → G1).

For usage, concepts, and API reference, see the documentation.

Installation

From PyPI:

uv add mink-warp

Or clone and run locally:

git clone https://github.com/simeon-ned/mink-warp.git && cd mink-warp
uv sync --extra dev --extra examples

Requires Python 3.10+, MuJoCo 3.8+, mujoco-warp, and NVIDIA Warp. A CUDA-capable GPU is recommended for batched workloads.

Usage

import mink_warp as mw

cfg = mw.Configuration(model, nworld=512, device="cuda")

frame = mw.FrameTask("ee", "site", position_cost=1.0, orientation_cost=1.0)
frame.set_target_from_configuration(cfg)
posture = mw.PostureTask(model, cost=1e-2)
posture.set_target_from_configuration(cfg)

solver = mw.IKSolver(cfg)
solver.solve_and_integrate([frame, posture], dt=0.01, use_graph=True)

# Hard joint limits (Mink limits=None equivalent):
v = mw.solve_ik(cfg, [frame, posture], dt=0.01, limits=None)

Examples

Examples are ordered by increasing complexity:

uv run examples/01_panda_ik.py                  # FrameTask + soft limits, CUDA graph
uv run examples/02_constrained_ur5e.py          # hard config / velocity / collision limits
uv run examples/03_equality_cassie.py           # closed-chain EqualityConstraintTask
uv run examples/04_self_collision_dual_iiwa.py  # dual Kuka, inter-arm collision
uv run examples/05_relative_frame_g1.py         # G1 RelativeFrameTask + collision

Assets are vendored under examples/ from Mink (Panda, UR5e, Cassie, Kuka iiwa14, Unitree G1). See examples and the examples guide in the docs.

Benchmarks

Batched throughput and CPU-vs-Mink parity (benchmarks/README.md):

uv run python benchmarks/bench_ik.py             # solves/sec vs batch size
uv run python benchmarks/bench_constrained.py    # hard limits vs mink daqp
uv run python benchmarks/bench_parity.py         # agreement with mink (oracle)

See benchmarks/RESULTS.md for sample numbers.

Acknowledgements

mink-warp mirrors the API and conventions of Mink, which is a MuJoCo port of Pink (Pinocchio). The Lie-group helpers and task Jacobian conventions follow the same lineage as Mink and Pink.

Implementation patterns also draw from GPU IK / physics stacks in the MuJoCo Warp ecosystem and from Newton (NVIDIA + Google DeepMind), though mink-warp is not a wrapper around Newton — it targets differential IK with a Mink-shaped API on mujoco.MjModel + mjwarp.

Citation

If you use mink-warp in your research, please cite it as follows:

@software{nedelchev2026minkwarp,
  author       = {Nedelchev, Simeon and Domrachev, Ivan},
  title        = {{mink-warp: Batched differential inverse kinematics on MuJoCo Warp}},
  year         = {2026},
  version      = {0.1.0},
  url          = {https://github.com/simeon-ned/mink-warp},
  repository   = {https://github.com/simeon-ned/mink-warp},
  license      = {Apache-2.0},
}

Also available as CITATION.cff and CITATION.bib. Method papers: docs/references.bib.

License

Apache-2.0 — see LICENSE.

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

mink_warp-0.1.0.tar.gz (43.7 MB view details)

Uploaded Source

Built Distribution

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

mink_warp-0.1.0-py3-none-any.whl (78.4 kB view details)

Uploaded Python 3

File details

Details for the file mink_warp-0.1.0.tar.gz.

File metadata

  • Download URL: mink_warp-0.1.0.tar.gz
  • Upload date:
  • Size: 43.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mink_warp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9e834ad6678c865c15f135ce0f53bcabd50089adaf72dc03423dceacaba455be
MD5 c24369a65f323d27db08fd9c5f30029d
BLAKE2b-256 4075992a7444032965c9c7d2b36c243978b8f9d316a9bdeaeffa826401b3934b

See more details on using hashes here.

File details

Details for the file mink_warp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mink_warp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 78.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for mink_warp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 244d36321e315ceabf2229bc495bf070ee9d6179ac2ecd14612f4f996f7fcb53
MD5 c897014ca8292fb2fe70bdc264de1748
BLAKE2b-256 3591e49a13632c504acc39ea0269a7d3b0dfec0c120900ee9f050d50ff514298

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