GMR IK数学原理解读

把 IK 想成:机器人当前姿势不对,求"每个关节下一瞬间该往哪转一点"。

例如右手目标在前方 10 cm,机器人当前手还没到。IK 不会直接猜肩、肘、腕各转多少,而是问:

如果肩转 1 rad、肘转 1 rad、腕转 1 rad,手在 X/Y/Z 和朝向上各会怎么动?

这个"各关节微小变化 → 手/脚微小运动"的关系,就是雅可比矩阵 J。

对一个任务 link(例如左脚),令:

  • q:机器人当前所有关节角;
  • Δq:这次准备增加的很小关节角;
  • x(q):当前左脚的位置/朝向;
  • x*:人体映射来的左脚目标;
  • e = x* − x(q):当前误差。

在很小范围内,非线性的 FK 可以近似为线性关系:

x(q + Δq) ≈ x(q) + J(q)Δq

所以如果希望左脚本次移动 e,理想上就是:

J(q)Δq ≈ e

这里的e是6D的 速度3,旋转3

但通常有很多任务一起存在,例如骨盆、左脚、右脚、左右手。把它们叠起来:

⎡ J_pelvis ⎤

⎢ J_left-foot ⎥ Δq ≈ ⎡ e_pelvis ⎤

⎢ J_right-foot ⎥ ⎢ e_left-foot ⎥

⎣ J_left-hand ⎦ ⎣ e_right-foot ⎦

e_left-hand

改称带约束的最小二乘问题:

这就是mink 的 FrameTask,本身不是优化器,而是计算一个任务的误差,雅可比。真正把多个 FrameTask 合成优化问题的是 mink.solve_ik去求解

Δq* = argminΔq

i ‖Wᵢ(JᵢΔq − eᵢ)‖² + λ‖Δq‖²

含义非常直接:

  • 第一项:每个任务的剩余误差越小越好;
  • Wᵢ:任务权重。脚的位置权重大,IK 会优先让脚到位;手臂姿态权重小,手臂让步;
  • λ‖Δq‖²:不希望一帧内关节突然大幅跳动。λ 越大,动作越稳但跟踪越慢;
  • 关节限位与速度限制作为额外约束加入。

得到 Δq 后:

q_next = q_current + Δq*

然后重新计算 FK、误差,再做一轮。GMR 每帧最多追加 10 轮,误差不再明显变小时停止 ;见 retarget

以两关节平面手臂为例:

  • 手应向前移动;
  • 肩和肘都能让手向前;
  • IK 会在无限多种"肩转一点、肘转一点"的组合中,选一个既让手接近目标、又不需要关节猛跳、也不撞关节限位的组合。

这也是为什么不要用"人体肘关节角 = 机器人肘关节角"。IK 的输出由全部任务共同决定:当脚必须落地时,骨盆、髋、膝会优先配合脚;当手目标远得不可达,IK 会尽力伸展手臂但保留约束。

GMR 中 **FrameTask(position_cost, orientation_cost) 就是在给每个任务设置 Wᵢ**。例如骨盆位置权重 100、旋转 10,表示"骨盆位置比骨盆朝向重要约 10 倍"。任务创建位置见 motion_retarget.py

相关推荐
智者知已应修善业5 小时前
【4060BD_5V应用电路图】2022-12-24
驱动开发·经验分享·笔记·硬件架构·硬件工程
小弥儿5 小时前
GitHub今日热榜 | 2026-09-18:腾讯双项目上榜
学习·开源
知识分享小能手7 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(74):CompassMem——从相似度检索走向事件图上的记忆导航
论文阅读·人工智能·学习·开源·github
小李不想当小白8 小时前
DMA直接存储器存取(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·分享
2601_9499506310 小时前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
2601_9653842610 小时前
口腔黏膜清洁的工程化路径:从表面形貌表征到清洁策略匹配
经验分享·笔记
泡泡鱼(敲代码中)10 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
别动我齐刘海10 小时前
ROS2 Jazzy + C++ 实战路线——基础学习2
c++·人工智能·vscode·python·学习·机器学习·机器人
Hotchip_MEMS11 小时前
传统咪头与MEMS硅麦:雾化器气流传感方案对比
人工智能·笔记·物联网·电脑·制造