Skip to content

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 — 方法分类体系