Mink 是一个基于 MuJoCo 的 Python 逆运动学(Differential Inverse Kinematics)库。它让开发者能够轻松、精确地控制复杂机器人(机械臂、人形机器人、灵巧手、腿式机器人等),同时处理关节限位、速度限制和碰撞避免等约束。

(上图展示 Mink 支持的典型机器人:灵巧手、Unitree G1 人形机器人,以及带任务标记的四足机器人)
逆运动学?
传统逆运动学(IK)直接求解关节角度使末端执行器到达目标位姿。Mink 使用微分 IK,每一步求解关节速度,让任务误差逐步减小,同时通过二次规划(QP)优雅地融合多个任务和约束。
典型工作流(Mink + MuJoCo):

核心优势:
- 任务(Tasks):定义机器人“想做什么”(如末端到达目标位姿、质心调节、相对位姿)。
- 约束(Constraints):定义机器人“不能做什么”(关节限位、速度限位、碰撞避免、闭链约束)。
- 原生 Lie Group 接口处理刚体变换(SE(3)),并用 C 扩展加速热点路径。

主要特性
- ✅ 高效 Lie Group 接口 + 原生 C 优化
- ✅ 与 MuJoCo 无缝集成,适合实时控制、运动规划、遥操作、动作重定向
安装与快速开始
推荐使用 uv(极快):
uv add mink
从源码安装:
git clone https://github.com/kevinzakka/mink.gitcd minkuv sync
最小示例(驱动末端执行器到目标位置):
import mujocofrom mink import Configuration, FrameTask, solve_ikmodel = mujoco.MjModel.from_xml_path("robot.xml")configuration = Configuration(model)task = FrameTask( frame_name="end_effector", frame_type="site", position_cost=1.0, orientation_cost=0.0,)task.set_target_from_position([0.5, 0.0, 0.3])for _ in range(100): vel = solve_ik(configuration, [task], dt=0.01) configuration.integrate_inplace(vel, dt=0.01)
运行示例(Linux):
uv run examples/arm_ur5e.py
支持的机器人与示例
Mink 示例覆盖大量真实机器人模型(来自 MuJoCo Menagerie 等):
单臂:Franka Panda、UR5e、KUKA iiwa14、ALOHA 2双臂:Dual Panda、Dual iiwa14臂+手:iiwa14 + Allegro、xArm + LEAP灵巧手:Shadow Hand人形机器人:Unitree G1、Unitree H1、Apptronik Apollo腿式/移动机器人:Unitree Go1、Boston Dynamics Spot、Agility Cassie、Hello Robot Stretch、TidyBot 等

(Unitree G1 人形机器人实物/仿真参考)
文档、社区与生态
- 官方文档(含完整 API):https://kevinzakka.github.io/mink/
- GitHub:https://github.com/kevinzakka/mink (约 1.4k stars,Apache-2.0 许可)
- 生态:已有 C++ 直接移植版 Minc(MuJoCo Inverse Kinematics in C++),API 几乎一致。
为什么选择 Mink?
- 生产级质量:约束处理优雅、性能优秀,适合实时循环。
- MuJoCo 原生:与仿真、强化学习、sim-to-real 流程完美结合(作者团队常用于人形机器人研究)。
- 易用且灵活:任务抽象清晰,远比手动写 QP 或数值 IK 方便。
总结
无论你是做机械臂、机器人控制、运动规划、还是人形/灵巧手研究,Mink 都是 MuJoCo 生态中目前最推荐的微分 IK 解决方案。