This is primarily a performance release, with two major IK-loop improvements.
-
Faster collision avoidance.
CollisionAvoidanceLimitnow performs a bounding-sphere / plane broadphase before the narrow-phasemj_geomDistancequery. For each candidate geom pair, mink first checks whether the pair could be withincollision_detection_distanceusing bounding-sphere or sphere-plane bounds, mirroring MuJoCo'smj_filterSphere. Pairs that cannot produce a constraint are skipped, so the assembled(G, h)is unchanged. The broadphase can be disabled withbroadphase=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_ikformed the objective by summing per-task Hessians. Tasks now expose a weighted least-squares residual viaTask.compute_qp_residual, and the solver stacks those residuals into a singleWᵀWmatrix 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