Skip to content

v1.2.0

Latest

Choose a tag to compare

@kevinzakka kevinzakka released this 20 Jun 19:24
Immutable release. Only release title and notes can be modified.

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 v1.1.1...v1.2.0