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

相关推荐
疯狂打码的少年2 小时前
【数据库技术】关系模型基本概念(关系/属性/元组/键)
java·服务器·数据库·笔记
Bruce_Liuxiaowei4 小时前
从基础理论开始学习人工智能(三):盲目搜索——从状态空间图到生成-测试范式
人工智能·学习
有梦想的骇客4 小时前
PyTorch学习笔记
pytorch·笔记·学习
Capricorn19885 小时前
个人知识库接入大模型频现“幻觉引用”?排查 RAG 溯源失效问题,解析知芽构建可信第三大脑的底层架构
大数据·论文阅读·人工智能·笔记·架构·论文笔记
陈年老古董5 小时前
深度学习入门笔记:从神经元到深度神经网络
人工智能·笔记·深度学习·神经网络·学习
2601_967100427 小时前
护眼灯哪个牌子更好更专业耐用?专业长效护眼台灯品牌推荐,品质过硬
学习·护眼·台灯
疯狂打码的少年7 小时前
【数据库技术】关系完整性约束(实体/参照/用户定义)
运维·服务器·数据库·笔记
微露清风7 小时前
快慢指针算法学习记录
学习·算法·快慢指针
sunshine22 girl7 小时前
Angular7,9,学习笔记四 父子组件传值,组件之间传值
笔记·学习
蒸蒸yyyyzwd8 小时前
cpp选手秋招学习笔记 day18
笔记·学习