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。

相关推荐
小嘉丶学长42 分钟前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
白山编程大哥1 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛139246256731 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白1 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
weixin_448119943 小时前
Datawhale Jev Cookbook 202610 笔记3
笔记
姚瑞南3 小时前
【PRD】招投标商机雷达爬虫系统
人工智能·经验分享·笔记·爬虫·产品运营·产品经理
Gnevergiveup4 小时前
ATT&CK红蓝对抗实战指南-Windows安全基础
笔记·网络安全
adinnet20265 小时前
电商客服对话知识库的自学习闭环与质量演进机制
学习
lazy H5 小时前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408
cnbestec6 小时前
Inverse3三轴力反馈控制器接入 NVIDIA Isaac Sim:4kHz 触觉刷新率×0.01mm 分辨率加速 Physical AI 数据采集
遥操作·haply·inverse3·力反馈控制器·三轴力反馈·physical ai数据采集·inverse3x