Mink: Python inverse kinematics based on MuJoCo

Read full text
Authors: Kevin Zakka
Cited by: 0

Abstract

This is primarily a performance release, with two major IK-loop improvements. Faster collision avoidance. CollisionAvoidanceLimit now performs a bounding-sphere / plane broadphase before the narrow-phase mj_geomDistance query. For each candidate geom pair, mink first checks whether the pair could be within collision_detection_distance using bounding-sphere or sphere-plane bounds, mirroring MuJoCo's mj_filterSphere. Pairs that cannot produce a constraint are skipped, so the assembled (G, h) is unchanged. The broadphase can be disabled with broadphase=False. In the ALOHA dual-arm benchmark on an M1 Max, this reduces collision-phase time by ~2.9x and end-to-end IK time by ~3.3x. Faster QP objective assembly. Profiling showed that a substantial fraction of each IK iteration was spent assembling the QP objective rather than solving it. Previously, solve_ik / build_ik formed the objective by summing per-task Hessians. Tasks now expose a weighted least-squares residual via Task.compute_qp_residual, and the solver stacks those residuals into a single WᵀW matrix multiplication. This preserves the same objective up to floating-point summation order. In the G1 humanoid benchmark with 8 active tasks on an M1 Max, this reduces end-to-end IK time by ~1.3x. Also included: dependency updates for security fixes. For the full changelog, see https://github.com/kevinzakka/mink/compare/v1.1.1...v1.2.0

Publication details

Journal / source
Zenodo (CERN European Organization for Nuclear Research)
Publication date
20 June 2026