Batched differential inverse kinematics on MuJoCo Warp, with a Mink-shaped API
Project description
mink-warp
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 tasks —
FrameTask,RelativeFrameTask,PostureTask,ComTask,DampingTask,EqualityConstraintTask, softJointLimitTask; - Hard limits —
ConfigurationLimit,VelocityLimit,CollisionAvoidanceLimit,LinearInequalityLimitvia GPU ADMM (ConstrainedSolver); - Device-native hot path — FK, Jacobians, residual assembly, and linear solves as Warp kernels on
wp.arraybuffers; - 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_…through05_…(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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e834ad6678c865c15f135ce0f53bcabd50089adaf72dc03423dceacaba455be
|
|
| MD5 |
c24369a65f323d27db08fd9c5f30029d
|
|
| BLAKE2b-256 |
4075992a7444032965c9c7d2b36c243978b8f9d316a9bdeaeffa826401b3934b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
244d36321e315ceabf2229bc495bf070ee9d6179ac2ecd14612f4f996f7fcb53
|
|
| MD5 |
c897014ca8292fb2fe70bdc264de1748
|
|
| BLAKE2b-256 |
3591e49a13632c504acc39ea0269a7d3b0dfec0c120900ee9f050d50ff514298
|