IK Retargeting 核心概念¶
什么是 Retargeting?为什么需要它?核心问题定义与动作表示方式。
什么是 Retargeting?¶
Retargeting(重定向/重映射) 是将一个角色/物体的运动(源运动)迁移到另一个具有不同骨骼结构或尺寸的角色/物体(目标运动)上的技术。
在机器人领域,最常见的场景是:将人手的运动映射到机器人灵巧手上,实现人-机器人遥操作(Teleoperation)。
人手(Source) 机器人手(Target)
┌─────────────────┐ ┌─────────────────┐
│ 21 点 landmarks │ Retargeting │ 10/20 关节角 │
│ 骨骼长度 L_s │ ───────────→ │ 骨骼长度 L_t │
│ 关节范围 R_s │ │ 关节范围 R_t │
└─────────────────┘ └─────────────────┘
↓ ↓
MediaPipe / O10 / Shadow
InterHand Hand
为什么需要 Retargeting?¶
人手和机器人手存在根本差异:
| 维度 | 人手 | 机器人灵巧手(如 O10) |
|---|---|---|
| 自由度 | 20+ DOF | 10-20 DOF |
| 骨骼比例 | 手指长、掌心小 | 因设计而异 |
| 关节范围 | 连续、灵活 | 机械限位 |
| 拇指结构 | 对掌(opposable) | 简化或缺失对掌 |
| 传感器 | 触觉密集 | 力/位置传感器 |
| 控制频率 | 生物神经 ~100Hz | 电控 100-1000Hz |
直接复制人手的关节角度到机器人手上会导致: - 关节超限:机器人关节范围比人手小 - 尺寸不匹配:人手手指长,机器人手指短,同样的角度导致指尖位置差异巨大 - 结构差异:机器人可能缺少某些自由度(如 MCP 外展) - 泛化性差:换一个操作者或机器人,映射失效
问题形式化定义¶
给定: - 源手状态 $S_s$(如人手 21 点坐标、关节角) - 目标手模型 $M_t$(关节数、DH 参数、关节限位)
求解: - 目标手关节角 $\theta_t$,使得目标手的姿态/动作尽可能"相似"于源手
"相似"可以定义为: 1. 关节空间相似:$|\theta_t - f(S_s)|$ 最小(直接映射) 2. 任务空间相似:指尖位置差异最小(向量优化) 3. 语义相似:手势类别一致(学习-based)
动作表示方式¶
Retargeting 的输入和输出可以有多种表示形式:
1. 关节角度(Joint Angles)¶
最直观的表示,直接控制每个关节的角度。
# O10 灵巧手: 10 个主动关节
joint_angles = [
thumb_mcp, thumb_ip, # 拇指
index_mcp, index_pip, # 食指
middle_mcp, middle_pip, # 中指
ring_mcp, ring_pip, # 无名指
pinky_mcp, pinky_pip, # 小指
]
优点:直接、物理意义明确 缺点:人手和机器人手关节数不同,需要映射函数
2. 末端位姿(End-Effector Pose)¶
控制手指尖的位置和朝向。
# 每个 fingertip 的 [x, y, z, qx, qy, qz, qw]
fingertip_poses = {
"thumb": [0.12, 0.05, 0.03, 0, 0, 0, 1],
"index": [0.15, 0.02, 0.01, 0, 0, 0, 1],
# ...
}
优点:与机器人结构无关,任务空间直观 缺点:需要 IK 求解器转换为关节角;可能存在多解
3. Delta 动作(Delta Actions)¶
表示相对于当前状态的增量。
delta_action = [
dx, dy, dz, # 位置增量
droll, dpitch, dyaw, # 旋转增量
dgripper # 夹爪增量
]
优点:与绝对坐标系无关,适合闭环控制 缺点:累积误差;需要初始姿态
4. 关键点坐标(Landmark Coordinates)¶
从视觉捕捉获得的人手 21 点坐标。
# MediaPipe 21 点格式: [21, 3]
landmarks = [
[0.0, 0.0, 0.0], # 0: wrist
[0.02, 0.01, 0.0], # 1: thumb_cmc
[0.04, 0.03, 0.0], # 2: thumb_mcp
# ... 共 21 点
]
优点:直接从视觉获取,无需穿戴设备 缺点:3D 深度估计可能不准;需要坐标系转换
Retargeting 的核心挑战¶
挑战 1:自由度不匹配¶
人手有 20+ DOF,O10 只有 10 DOF。需要合并或忽略某些自由度。
常见策略: - 食指/中指/无名指/小指:各 2 DOF(MCP 弯曲 + PIP 弯曲),忽略 MCP 外展和 DIP - 拇指:2 DOF(MCP + IP),忽略 CMC 外展和内收
挑战 2:尺寸差异¶
人手手指长度可能与机器人手指差异 2-3 倍。
解决思路: - 归一化:以手腕到中指 MCP 的距离为单位长度 - 比例缩放:按手指长度比例缩放角度 - 任务空间 IK:直接在指尖位置空间优化,绕过角度映射
挑战 3:关节限位¶
机器人关节有硬限位,超出范围会导致: - 仿真中关节穿透或爆炸 - 真实机器人报错或损坏
解决思路: - 裁剪(Clipping):超限角度直接截断到范围边界 - Sigmoid 映射:将无界角度映射到有界范围 - 优化约束:在 IK 求解器中加入关节限位约束
挑战 4:左右手对称¶
双手系统中,左右手需要镜像处理。
左手: index @ -Y, pinky @ +Y
右手: index @ +Y, pinky @ -Y
处理:对左手 landmarks 的 Y 坐标取反,再进行后续计算。
Retargeting 流程概览¶
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 视觉捕捉 │ → │ 坐标转换 │ → │ Retargeting │ → │ 机器人控制 │
│ (21点) │ │ (局部坐标系) │ │ (映射方法) │ │ (关节角) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │ │ │
MediaPipe wrist-origin Rule-based position ctrl
InterHand Y-mirror(L/R) Vector Opt torque ctrl
Leap Motion scale-normalize Learning-based impedance ctrl
完整内容见:
- docs/03-human-hand-to-robot-hand.md — 人手→机器人手映射详解
- docs/02-retargeting-taxonomy.md — 方法分类体系