Skip to content

IK Retargeting 全概念百科

从人手解剖到机器人硬件、从控制理论到 Sim-to-Real,系统梳理 IK Retargeting 涉及的所有核心概念。每个概念均包含定义、数学原理、代码示例和在 Retargeting 中的角色。


目录

  1. 运动学与几何基础
  2. 人手解剖学
  3. 控制理论
  4. 机器人硬件
  5. 通信与软件架构
  6. Sim-to-Real
  7. 动作表示与策略
  8. 轨迹与插值
  9. 机械传动
  10. 评估与度量

1. 运动学与几何基础

1.1 DH 参数(Denavit-Hartenberg Parameters)

定义:一种标准化的方法,用 4 个参数 描述相邻连杆之间的几何关系,建立机器人运动学模型。

四个参数:

参数 符号 含义 单位
连杆长度 \(a_i\) 沿 \(x_i\) 轴从 \(z_i\) 到 \(z_{i+1}\) 的距离 m
连杆转角 \(\alpha_i\) 绕 \(x_i\) 轴从 \(z_i\) 到 \(z_{i+1}\) 的旋转角 rad
关节距离 \(d_i\) 沿 \(z_{i-1}\) 轴从 \(x_{i-1}\) 到 \(x_i\) 的距离 m
关节角 \(\theta_i\) 绕 \(z_{i-1}\) 轴从 \(x_{i-1}\) 到 \(x_i\) 的旋转角 rad

变换矩阵(从连杆 \(i-1\) 到连杆 \(i\)):

\[T_i^{i-1} = \begin{bmatrix} \cos\theta_i & -\sin\theta_i\cos\alpha_i & \sin\theta_i\sin\alpha_i & a_i\cos\theta_i \\ \sin\theta_i & \cos\theta_i\cos\alpha_i & -\cos\theta_i\sin\alpha_i & a_i\sin\theta_i \\ 0 & \sin\alpha_i & \cos\alpha_i & d_i \\ 0 & 0 & 0 & 1 \end{bmatrix}\]

DH 参数表示例(O10 灵巧手指食指链):

import numpy as np

# 食指的 DH 参数表(3 关节:MCP 外展 → MCP 屈曲 → PIP 屈曲)
finger_dh = [
    #  a     alpha    d    theta
    [0.0,    np.pi/2, 0.0, theta_abd],  # MCP 外展
    [0.035,  0.0,     0.0, theta_mcp],  # MCP 屈曲 (近端指节 35mm)
    [0.025,  0.0,     0.0, theta_pip],  # PIP 屈曲 (中间指节 25mm)
]

在 Retargeting 中的角色: - DH 参数是 FK 和 IK 的数学基础 - 不同灵巧手有不同的 DH 参数表,需要分别建模 - Vector Optimization 中的 FK(ctrl) 函数就是基于 DH 参数的齐次变换

1.2 正运动学(Forward Kinematics, FK)

定义:已知关节角 \(\theta\),计算末端执行器在空间中的位置和姿态。

\[T_{ee} = FK(\theta) = T_1^0(\theta_1) \cdot T_2^1(\theta_2) \cdot ... \cdot T_n^{n-1}(\theta_n)\]

在 Retargeting 中的角色: - Vector Optimization 中:\(FK(\theta_t)\) 将机器人关节角映射为指尖位置 - 优化目标:\(\min || \text{target\_landmark} - FK(\theta_t) ||\)

1.3 逆运动学(Inverse Kinematics, IK)

定义:已知末端执行器的目标位姿,求解关节角。

\[\theta = IK(T_{target})\]

IK 方法分类:

方法 类型 速度 精度 适用场景
解析法 封闭解 最快 精确 6-DOF 以下,有特殊几何结构
Jacobian 伪逆法 数值迭代 快 好 实时控制
阻尼最小二乘(DLS) 数值迭代 快 好 越过奇异点
非线性优化 数值迭代 慢 最好 离线规划
CCD 数值迭代 中等 一般 简单游戏

在 Retargeting 中的角色: - Rule-based 方法直接映射关节角,不涉及 IK - Vector Optimization 本质上是 IK 求解(任务空间→关节空间) - 多指手的 IK 参数多、冗余大,需要 DLS 或约束优化

1.4 Jacobian 矩阵

定义:描述关节空间速度与任务空间速度之间的线性映射关系。

\[\dot{x} = J(\theta) \cdot \dot{\theta}\]

其中 \(J \in \mathbb{R}^{m \times n}\),\(m\) 是任务空间维度,\(n\) 是关节空间维度。

几何意义:Jacobian 的每一列表示对应关节单位速度对末端速度的贡献。

\[J = [J_1, J_2, ..., J_n], \quad J_i = \begin{bmatrix} z_{i-1} \times (p_n - p_{i-1}) \\ z_{i-1} \end{bmatrix}\]

在 Retargeting 中的角色: - DLS 求解器:\(\dot{\theta} = J^T (J J^T + \lambda^2 I)^{-1} \dot{x}\) - 可操作度分析:\(w = \sqrt{\det(J J^T)}\),评估关节构型是否接近奇异 - 零空间投影:\(\dot{\theta} = J^+ \dot{x} + (I - J^+ J) \nabla \phi\),在完成任务的同时优化次要目标

1.5 关节空间 vs 任务空间

维度 关节空间(Joint Space) 任务空间(Task Space)
坐标 \(\theta_1, \theta_2, ..., \theta_n\) \(x, y, z, roll, pitch, yaw\)
维度数 = 关节数(如 O10 是 10 维) = 6(3 位置 + 3 姿态)
物理含义 电机角度 手指位置和朝向
直观性 不直观 直观
约束 关节限位 工作空间边界
FK/IK 原点 目标
插值效果 线性插值可能导致任务空间轨迹弯曲 线性插值产生直线轨迹

关键区别:同样的关节空间差值,在任务空间可能产生完全不同的轨迹。

# 关节空间线性插值(任务空间路径可能弯曲)
theta_start = np.array([0.0, 0.0])  # 伸直
theta_end = np.array([1.0, 1.0])    # 弯曲
for t in np.linspace(0, 1, 10):
    theta = theta_start + t * (theta_end - theta_start)
    tip = forward_kinematics(theta)  # 可能不是直线

# 任务空间线性插值(直线路径)
tip_start = forward_kinematics(theta_start)
tip_end = forward_kinematics(theta_end)
for t in np.linspace(0, 1, 10):
    tip_target = tip_start + t * (tip_end - tip_start)
    theta = inverse_kinematics(tip_target)  # 求解对应关节角

2. 人手解剖学

2.1 手部骨骼结构

人手由 27 块骨骼 组成,分为腕骨(8 块)、掌骨(5 块)、指骨(14 块):

手腕 (Carpal) ── 掌骨 (Metacarpal) ── 指骨 (Phalanges)
                                      ├─ 拇指: 近节 + 远节 (2 节)
                                      ├─ 其他手指: 近节 + 中节 + 远节 (3 节)

2.2 关节缩写体系

缩写 全称 位置 手指 DOF 功能
CMC Carpometacarpal 腕掌 拇指 3 拇指对掌、外展、屈曲
MCP Metacarpophalangeal 掌指 所有手指 2 屈伸 + 外展/内收
PIP Proximal Interphalangeal 近端指间 食指~小指 1 屈伸
DIP Distal Interphalangeal 远端指间 食指~小指 1 屈伸
IP Interphalangeal 指间 拇指 1 屈伸

人手 DOF 分布:

拇指: CMC(3) + MCP(2) + IP(1) = 6  (实际约 5 个有效自由度)
食指: MCP(2) + PIP(1) + DIP(1) = 4
中指: MCP(2) + PIP(1) + DIP(1) = 4
环指: MCP(2) + PIP(1) + DIP(1) = 4
小指: MCP(2) + PIP(1) + DIP(1) + 掌骨 = 5
总计: 约 23 DOF

2.3 MediaPipe 21 点映射

MediaPipe 的 21 个 landmarks 对应实际解剖位置:

0:  WRIST              (腕关节)
1:  THUMB_CMC          (拇指腕掌关节)
2:  THUMB_MCP          (拇指掌指关节)
3:  THUMB_IP           (拇指指间关节)
4:  THUMB_TIP          (拇指指尖)
5:  INDEX_FINGER_MCP   (食指掌指关节)
6:  INDEX_FINGER_PIP   (食指近端指间关节)
7:  INDEX_FINGER_DIP   (食指远端指间关节)
8:  INDEX_FINGER_TIP   (食指尖)
9:  MIDDLE_FINGER_MCP  (中指掌指关节)
10: MIDDLE_FINGER_PIP  (中指近端指间关节)
11: MIDDLE_FINGER_DIP  (中指远端指间关节)
12: MIDDLE_FINGER_TIP  (中指指尖)
13: RING_FINGER_MCP    (环指掌指关节)
14: RING_FINGER_PIP    (环指近端指间关节)
15: RING_FINGER_DIP    (环指远端指间关节)
16: RING_FINGER_TIP    (环指尖)
17: PINKY_MCP          (小指掌指关节)
18: PINKY_PIP          (小指近端指间关节)
19: PINKY_DIP          (小指远端指间关节)
20: PINKY_TIP          (小指尖)

2.4 弯曲角与外展角

弯曲角(Flexion Angle):相邻 3 个关键点形成的夹角,反映手指卷曲程度。

def flexion_angle(p1, p2, p3):
    """p1-p2-p3 三点形成的夹角"""
    v1 = p1 - p2
    v2 = p3 - p2
    cos_a = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2) + 1e-8)
    return np.arccos(np.clip(cos_a, -1.0, 1.0))

外展角(Abduction Angle):相邻手指根部方向向量之间的夹角,反映手指张开程度。

def abduction_angle(wrist, mcp_a, mcp_b):
    """手指 A 和手指 B 之间的外展角"""
    v_a = mcp_a - wrist
    v_b = mcp_b - wrist
    cos_a = np.dot(v_a, v_b) / (np.linalg.norm(v_a) * np.linalg.norm(v_b) + 1e-8)
    return np.arccos(np.clip(cos_a, -1.0, 1.0))

3. 控制理论

3.1 PD 控制(比例-微分控制)

定义:根据位置误差和速度误差计算控制力矩。

\[\tau = k_p \cdot (q_d - q) + k_d \cdot (\dot{q}_d - \dot{q})\]
参数 含义 作用 调大影响
\(k_p\) 比例增益 抵抗位置偏差 响应更快,但可能振荡
\(k_d\) 微分增益 抵抗速度偏差 阻尼更大,更稳定

MuJoCo 中的 position actuator 本质就是 PD 控制:

<actuator>
  <!-- kp = 比例增益, kv = 微分增益 -->
  <position joint="index_mcp" kp="100" kv="10"/>
</actuator>
# MuJoCo 内部等效的 PD 控制(简化)
def pd_controller(q_desired, q_current, qdot_current, kp=100, kv=10):
    error = q_desired - q_current
    torque = kp * error - kv * qdot_current  # 注意 kv 项是负号
    return torque

在 Retargeting 中的角色: - data.ctrl[i] 设置了 position actuator 的目标角度 \(q_d\) - \(k_p\) 和 \(k_v\) 决定关节响应速度和稳定性 - 高 \(k_p\) 使关节快速跟随,但可能超调;低 \(k_p\) 导致跟踪延迟

3.2 PID 控制(比例-积分-微分控制)

定义:在 PD 基础上增加积分项,消除稳态误差。

\[\tau = k_p \cdot e(t) + k_i \int_0^t e(\tau) d\tau + k_d \cdot \frac{de(t)}{dt}\]

其中 \(e(t) = q_d(t) - q(t)\)。

参数 含义 作用 调大影响
\(k_p\) 比例增益 快速响应 响应更快,但可能振荡
\(k_i\) 积分增益 消除稳态误差 消除静差,但可能积分饱和
\(k_d\) 微分增益 阻尼振荡 更稳定,但对噪声敏感

PID 位置闭环控制流程(O10 硬件内部):

目标角度 → 误差计算 → PID 控制器 → 电流指令 → 电机 → 减速器 → 关节
    ↑                                                                  |
    └────────────────── 编码器反馈 ──────────────────────────────────────┘

在 Retargeting 中的角色: - 真实机器人硬件内部使用 PID 控制(如 O10 的 set_all_active_joint_angles()) - 仿真中常用 PD 控制(MuJoCo position actuator 默认无积分项) - \(k_i\) 在仿真中通常不需要(无摩擦建模),但在真实机器人中必不可少

3.3 阻抗控制(Impedance Control)

定义:控制机器人表现出期望的机械阻抗(质量-弹簧-阻尼特性),而非直接控制位置或力。

\[M_d \ddot{e} + B_d \dot{e} + K_d e = F_{ext}\]
参数 含义 类比
\(M_d\) 惯性矩阵 质量
\(B_d\) 阻尼矩阵 减震器
\(K_d\) 刚度矩阵 弹簧
\(F_{ext}\) 外力 机械扰动

阻抗控制与位置控制的关系:

位置控制:  target → ┌───PID───→ 电机 → 关节 → 实际位置
                     ↑                     │
                     └─────── 编码器 ──────┘

阻抗控制:  target → ┌───Mass-Spring-Damper───→ 期望力 → 电机 → 关节
                     ↑                                          │
                     └─────────────── 力传感器 ─────────────────┘

在 Retargeting 中的角色: - 遥操作中,阻抗控制提供"柔顺性",人手操作更自然 - 与人接触时,低阻抗(低刚度)更安全 - 与物体交互时,需要根据任务调整阻抗参数

3.4 刚度(Stiffness)

定义:抵抗外力导致位置变化的度量。\(K = \frac{dF}{dx}\),单位 N/m。

  • 高刚度:位置精度高,但对外力不柔顺(如工业机器人)
  • 低刚度:柔顺性好,但位置精度低(如协作机器人)

在 Retargeting 中的角色: - 灵巧手抓取物体时,需要调整刚度以平衡"抓稳"和"不损坏" - 仿真中通过 position actuator 的 \(k_p\) 间接控制刚度 - 真实硬件中通过电机电流环控制刚度

3.5 阻尼(Damping)

定义:抵抗速度导致的能量耗散。\(B = \frac{dF}{d\dot{x}}\),单位 N·s/m。

  • 高阻尼:运动平稳,不振荡,但响应慢
  • 低阻尼:响应快,但可能振荡

在 Retargeting 中的角色: - 人手遥操作时,机器人手指的阻尼影响操作手感 - 过高阻尼导致手指"粘滞"、运动不自然 - 过低阻尼导致手指振荡、无法稳定抓持

3.6 柔顺性(Compliance)

定义:刚度的倒数。\(C = \frac{1}{K}\),单位 m/N。

主动柔顺:通过控制算法(如阻抗控制)实现的柔顺行为。 被动柔顺:通过机械结构(如弹簧、腱绳)实现的柔顺行为。

在 Retargeting 中的角色: - 主动柔顺:人手抓取物体时,机器人手指主动随物体形状调整姿态 - 被动柔顺:腱驱动灵巧手(如 Shadow Hand、ORCA Hand)天生具有机械柔顺性

3.7 控制频率与实时性

级别 频率范围 典型周期 用途
位置环 100-1000 Hz 1-10 ms 关节角度控制
速度环 1-10 kHz 0.1-1 ms 电机速度控制
电流环 10-100 kHz 0.01-0.1 ms 电机力矩控制
视觉/遥操作 30-100 Hz 10-33 ms 人手视觉捕捉

在 Retargeting 中的关键约束: - MediaPipe 视觉捕捉上限约 30-60 Hz - 机械臂+灵巧手控制通常需要 100 Hz 以上 - 需要插值/滤波填补视觉捕捉与控制的频率差距


4. 机器人硬件

4.1 编码器(Encoder)

定义:将机械运动(角度/位置)转换为电信号的传感器,是机器人关节的"眼睛"。

类型:

类型 原理 精度 特点
增量式编码器 光栅/磁栅脉冲计数 中等 需上电回零
绝对式编码器 码盘编码 高 断电不丢位置
磁性编码器 霍尔效应 中等 成本低、抗振动
光学编码器 光栅干涉 极高 精度最高、怕油污

关键参数: - 分辨率:每转脉冲数(PPR),如 4096 PPR,角度分辨率 = 360°/4096 ≈ 0.088° - 精度:测量值与真实值的偏差,通常比分辨率低 1-2 个数量级 - 采样率:编码器数据更新频率,通常 10-100 kHz

在 Retargeting 中的角色: - 编码器提供 qpos(当前关节角)的真实测量值 - 编码器分辨率决定了关节角控制精度下限 - 灵巧手通常使用前臂侧编码器(电机端)而非指尖侧,存在传动间隙误差

4.2 减速器(Reducer / Gearbox)

定义:将电机高速低扭矩转换为低速高扭矩的机械装置。

类型:

类型 减速比 传动级典型效率 背隙 特点
谐波减速器 50-160:1 80-90% 极小 高精度、紧凑、昂贵
行星减速器 3-10:1 90-97% 小 效率高、响应快
RV 减速器 30-200:1 85-95% 极小 高刚度、重载
蜗轮蜗杆 10-80:1 40-70% 大 自锁、效率低
直驱(无减速器) 1:1 不适用(无减速级) 无减速器背隙 反向驱动好、关节扭矩密度通常较低

表中效率是传动级的典型量级,不包含电机、驱动器、轴承和线缆等损耗;实际系统效率必须查阅器件曲线或通过实验测量,任何真实系统都不应按 100% 效率建模。

关键参数: - 减速比 \(n\):电机转速 / 输出转速,\(n = \omega_{motor} / \omega_{joint}\) - 力矩放大:\(T_{out} = n \cdot T_{motor} \cdot \eta\)(\(\eta\) 为效率) - 惯量匹配:\(J_{eff} = n^2 \cdot J_{motor}\),减速比越大,反射惯量越大

在 Retargeting 中的角色: - 减速比影响了关节角与控制指令的映射关系 - 高减速比 → 高精度、高力矩、但低反向驱动能力 - 灵巧手通常使用小减速比(3-10:1)或直驱,以保持较好的反向驱动性

4.3 传动比(Gear Ratio / Transmission Ratio)

定义:输入端与输出端的转速比(或力矩比)。\(i = \frac{\omega_{in}}{\omega_{out}} = \frac{T_{out}}{T_{in}}\)

含义: - 传动比 > 1:减速增矩 - 传动比 < 1:增速减矩(很少用于机器人)

在 Retargeting 中的角色: - 影响人手关节角到机器人关节角的缩放因子 - 例如:人手屈曲 90° → 电机转动 90° × 齿轮比 = 机器人关节 90° / 减速比 - 高减速比意味着编码器能分辨更细微的角度变化

4.4 反向驱动(Backdrivability)

定义:从输出端(关节侧)施加外力时,能否反向带动电机转动的能力。

\[ \text{Backdrivability} \propto \frac{1}{n^2 \cdot \eta} \]

其中 \(n\) 为减速比,\(\eta\) 为传动效率。

反向驱动能力 减速比 典型应用 遥操作适配性
高 1:1(直驱) LEAP Hand V2 最佳:人手可自由推动
中 3-10:1 O10 / Allegro 好:可反向驱动但需力量
低 50-160:1 工业机器人 差:很难反向驱动

在 Retargeting 中的角色: - 高反向驱动允许力反馈遥操作:操作者感受到机器人接触的力 - 低反向驱动需要力传感器才能实现力反馈 - 真机调试时,高反向驱动的手更安全(可手动推回)

4.5 电机(Motor / Actuator)

类型:

类型 功率密度 控制精度 适用场景
直流有刷电机 低 中 低成本、简单应用
直流无刷电机(BLDC) 高 高 灵巧手主流选择
步进电机 中 中(开环) 低精度位置控制
伺服电机 高 极高 工业机器人
舵机(Servo) 低 低 低成本灵巧手(AR10)

BLDC 在灵巧手中的优势: - 高扭矩密度,体积小 - 高效率(>85%),发热小 - 无刷磨损,寿命长


5. 通信与软件架构

5.1 CAN 总线(Controller Area Network)

定义:一种差分信号串行通信协议,广泛用于机器人内部通信。

关键特性: - 差分信号:CAN_H 和 CAN_L 两根线,抗干扰能力强 - 多主架构:任何节点均可发起通信 - 优先级仲裁:ID 越小优先级越高 - 速率:经典 CAN 最高 1 Mbps,CAN FD 最高 8 Mbps

在 Retargeting 中的角色: - O10 灵巧手通过 CAN 总线(zlgcan 或 hcan)与主控通信 - 控制数据包格式:{关节ID, 目标角度, 控制模式, 校验位} - CAN 总线延迟(通常 < 1 ms)影响实时性

# O10 SDK 中的 CAN 通信(简化)
from omnihand import OmniHand2025, HandType

# 通过 CAN 总线初始化灵巧手
hand = OmniHand2025.create_hand_by_zlgcan(
    hand_device_id=0,
    canfd_device_id=0,
    hand_type=HandType.RIGHT,
    canfd_channel_id=0
)

# 发送关节角通过 CAN
hand.set_all_active_joint_angles([0.5, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])

5.2 CMD(命令 / Command)

定义:发送给机器人执行器的控制指令,与 ctrl 概念类似但更广泛。

CMD 的层级:

高层次 CMD (应用层)             低层次 CMD (硬件层)
┌─────────────────┐            ┌─────────────────┐
│  set_joint_angle │  → CAN →  │  电机驱动器     │
│  (0.5 rad)      │            │  (PID 目标)     │
└─────────────────┘            └─────────────────┘
       ↓                              ↓
    retargeting 输出              编码器反馈

CMD 与 Ctrl 的关系:

术语 作用域 含义
CMD 应用层 发送给硬件的控制指令(含模式、ID、校验)
Ctrl 仿真层 MuJoCo 中 actuator 的控制量
Command 一般 泛指所有控制指令

在 Retargeting 中的角色: - Retargeting 的最终输出是一组 CMD(目标关节角) - CMD 通过总线(CAN/EtherCAT)发送到电机驱动器 - 低延迟的 CMD 通信是实时遥操作的基础

5.3 EtherCAT

定义:一种基于以太网的实时工业通信协议,广泛用于机器人控制。

特点: - 极低延迟(< 100 μs) - 分布式时钟同步(< 1 μs) - 支持 100+ 轴同步控制

对比:

协议 典型延迟 同步精度 拓扑 应用
CAN 1-5 ms 100 μs 总线 灵巧手
EtherCAT 10-100 μs 1 μs 菊花链 机械臂
UDP 1-10 ms 10 ms 网络 视觉传数据
ROS 2 1-100 ms 10 ms 网络 上层通信

6. Sim-to-Real

6.1 Sim-to-Real Transfer(仿真到真机迁移)

定义:将在仿真环境中训练的策略/模型成功迁移到真实机器人上的过程。

核心挑战:仿真与现实之间的"现实差距(Reality Gap)"。

仿真环境 (Sim)                   真实环境 (Real)
┌──────────────┐               ┌──────────────┐
│ 理想物理模型   │               │ 真实物理世界  │
│ 无摩擦/精确建模 │  → 差距 ←  │ 摩擦/间隙/噪声 │
│ 完美传感器    │               │ 传感器噪声/漂移 │
│ 确定性执行    │               │ 电机误差/延迟  │
└──────────────┘               └──────────────┘

Sim-to-Real 的完整流程:

┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐
│ 系统辨识  │ → │ 域随机化  │ → │ 策略训练  │ → │ 真机迁移  │
│ 识别关键参数 │   │ 覆盖真实分布 │   │ 在仿真中  │   │ 零样本/微调 │
└──────────┘   └──────────┘   └──────────┘   └──────────┘

三种主要方法:

方法 原理 适用场景 难度
Domain Randomization 训练时随机化仿真参数 参数范围可覆盖真实分布 低
System Identification 精确校准仿真参数匹配真实 可精确建模的场景 中
Domain Adaptation 特征空间对齐 视觉/感知差异大 高

在 Retargeting 中的角色: - 仿真中调试好的 retargeting 参数(缩放系数、关节限位)需要迁移到真机 - 仿真与真机的关节范围差异、传动比误差、编码器噪声都需要校准 - 常见做法:先在仿真中调通,再在真机中微调缩放系数

6.2 系统辨识(System Identification / SysID)

定义:通过实验数据确定机器人系统物理参数的过程。

辨识参数:

参数类别 具体参数 辨识方法
运动学 连杆长度、关节偏移 标定仪测量
动力学 质量、质心、惯量 激励轨迹 + 最小二乘
摩擦 库仑摩擦、粘性摩擦 恒速运动 + 力测量
电机 力矩常数、电阻电感 阶跃响应 + 系统辨识
传动 减速比、背隙、刚度 编码器差分 + 力矩测量

在 Retargeting 中的角色: - 关节角校准:仿真中的关节角与真机实际关节角需要校准 - 传动比校准:人手屈曲角度与机器人关节角之间的缩放因子需要通过 SysID 确定 - 延迟校准:视觉捕捉 → 控制指令 → 机器人动作的总延迟

6.3 域随机化(Domain Randomization)

定义:在仿真训练过程中随机化各种物理参数,使策略对真实世界的变化具有鲁棒性。

随机化参数:

参数 典型范围 在 Retargeting 中的影响
关节摩擦 ±50% 影响关节响应速度
连杆质量 ±20% 影响惯性力
关节阻尼 ±30% 影响关节平滑度
传感器噪声 ±5% 影响编码器读数
控制延迟 0-50 ms 影响实时跟踪
初始关节角 ±10° 影响初始姿态匹配

在 Retargeting 中的角色: - 训练 retargeting 网络时,对 landmarks 做随机旋转、缩放、噪声 - 仿真中随机化关节限位,使策略适应不同机器人的关节范围差异

def domain_randomized_landmarks(landmarks):
    """对 landmarks 应用域随机化"""
    noisy = landmarks.copy()

    # 随机旋转(±30°)
    angle = np.random.uniform(-np.pi/6, np.pi/6)
    R = rotation_matrix(angle)
    noisy = noisy @ R.T

    # 随机缩放(±20%)
    scale = np.random.uniform(0.8, 1.2)
    noisy = noisy * scale

    # 随机噪声(±5mm)
    noise = np.random.randn(*noisy.shape) * 0.005
    noisy += noise

    return noisy

6.4 零样本迁移(Zero-Shot Transfer)

定义:仿真中训练的策略在真机上直接运行,无需额外微调。

前提条件: - 充分的域随机化(覆盖真实分布) - 高保真仿真模型 - 良好的系统辨识

在 Retargeting 中的角色: - 理想情况下,人手 → 机器人手的 retargeting 参数可零样本迁移 - 实际中至少需要校准缩放系数和关节偏移

6.5 现实差距(Reality Gap)

定义:仿真与真实世界之间的不可消除差异。

主要来源:

差距来源 仿真 真实 影响
摩擦 简化为库仑+粘性 复杂的非线性摩擦 关节响应不同
间隙 无 齿轮背隙、机械间隙 位置精度差
柔性 刚体假设 连杆弹性变形 动力学误差
延迟 通常为 0 通信+计算+执行延迟 跟踪滞后
噪声 理想传感器 传感器噪声、漂移 控制抖动

7. 动作表示与策略

7.1 动作表示(Action Representation)

4 种常见表示:

表示 维度 示例 适用场景
关节角 \(n\)(关节数) [0.5, 0.3, ...] 直接控制机器人
末端位姿 6(位置+姿态) [x, y, z, qx, qy, qz, qw] 任务空间控制
Delta 动作 6-7(增量) [dx, dy, dz, droll, ...] 增量式控制
Landmarks 21×3 [[x,y,z], ...] 视觉捕捉输入

7.2 动作空间(Action Space)

定义:策略可输出的所有可能动作的集合。

连续 vs 离散:

类型 描述 示例 维度
连续动作空间 实数向量 关节角 [0.0, 1.2] 无穷
离散动作空间 有限集合 手势 {fist, open, pinch} 有限

在 Retargeting 中的角色: - Retargeting 通常输出连续动作空间(关节角) - 每个关节有独立的范围(关节限位),构成动作空间约束 - 动作空间维度 = 控制自由度(如 O10 是 10 维)

7.3 观察空间(Observation Space)

定义:策略可感知的所有环境信息的集合。

在 Retargeting 中的角色: - 观察空间 = 手部 landmarks(21×3) - 可能还包括:机器人当前关节角、手掌位置、物体位置

7.4 Action Chunking(动作分块)

定义:一次预测多步连续动作,而非单步动作。

$$

\text{Action Chunking: } \quad a_t \rightarrow [a_t, a_{t+1}, ..., a_{t+H-1}] $$

为什么需要:

问题 单步预测 Action Chunking
高频控制 策略需 100Hz 运行 策略可 10Hz 运行
时序平滑 每步独立,易抖动 整体序列,平滑自然
延迟容忍 对延迟敏感 可容忍更大延迟

常见分块大小:

应用 典型分块长度 控制频率 策略频率
Diffusion Policy 16-32 步 50 Hz 1.5-3 Hz
ACT 100 步 50 Hz 0.5 Hz
灵巧手遥操作 4-8 步 100 Hz 12-25 Hz

在 Retargeting 中的角色: - 人手视觉捕捉(30-60 Hz)通常低于机器人控制频率(100-1000 Hz) - Action Chunking 弥补频率差距:一次预测多步,逐步执行 - 灵巧手遥操作中,通常使用 4-8 步的 Action Chunking

def action_chunking_example(landmark_seq, chunk_size=8):
    """
    对 landmarks 序列做 Action Chunking,生成连续关节角预测
    """
    # 输入: 连续 N 帧 landmarks
    # 输出: 一次预测 chunk_size 步的关节角

    # 方法 1: 对 landmarks 做插值,再逐帧 IK
    interpolated_lm = spline_interpolate(landmark_seq, num_steps=chunk_size)
    joint_angles = [ik_solve(lm) for lm in interpolated_lm]

    # 方法 2: 网络一次输出 chunk_size 步
    # joint_angles = policy(landmark_seq, chunk_size=chunk_size)

    return joint_angles  # [chunk_size, n_joints]

7.5 行为克隆(Behavioral Cloning, BC)

定义:通过监督学习,直接从人类示教数据中学习策略。

\[\pi(a|s) = \arg\max \sum_{(s, a) \in \mathcal{D}} \log \pi(a|s)\]

在 Retargeting 中的角色: - 从人手 landmarks 直接学习机器人关节角映射 - 需要大量高质量的人-机器人配对数据 - 简单但受限于数据质量

7.6 扩散策略(Diffusion Policy)

定义:使用扩散模型生成动作序列的策略表示方法。

流程:

训练:  动作序列 → 添加噪声 → 去噪网络 → 预测噪声
推理:  随机噪声 → 去噪网络(逐步) → 动作序列

在 Retargeting 中的角色: - 可生成多模态、平滑的动作序列 - 天然支持 Action Chunking - 适合灵巧手的高维连续动作空间


8. 轨迹与插值

8.1 轨迹插值(Trajectory Interpolation)

定义:在已知关键帧之间生成平滑过渡路径的方法。

插值方法对比:

方法 连续性 计算量 特点 适用场景
线性插值 \(C^0\) 最低 速度不连续 低帧率过渡
三次样条 \(C^2\) 中 最优平滑 手势过渡
贝塞尔曲线 \(C^1\) 中 可调控制点 路径规划
B 样条 \(C^2\) 高 局部控制 复杂轨迹
五次多项式 \(C^3\) 低 可控加速度 高精度运动
指数平滑/EMA 无 最低 简单实时 噪声滤波

插值空间选择:

# 错误的做法:关节空间插值 → 任务空间路径弯曲
θ_lerp(t) = θ_0 + t * (θ_1 - θ_0)
# 指尖位置 FK(θ_lerp(t)) 可能不是直线

# 正确的做法:Landmarks 插值 → IK 求解
lm_lerp(t) = lm_0 + t * (lm_1 - lm_0)
θ(t) = IK(lm_lerp(t))  # 任务空间路径更自然

在 Retargeting 中的关键原则: - 对 landmarks 插值,而非对关节角插值(避免任务空间失真) - 插值帧数取决于控制频率与视觉捕捉频率之比 - 三次样条插值保持 \(C^2\) 连续性,确保加速度连续

8.2 指数移动平均(Exponential Moving Average, EMA)

定义:一种加权移动平均滤波,旧的观测权重呈指数衰减。

\[\bar{x}_t = \alpha \cdot x_t + (1 - \alpha) \cdot \bar{x}_{t-1}\]

参数 \(\alpha\) 的影响:

\(\alpha\) 滤波强度 响应速度 噪声抑制
0.1 强 慢 好
0.3 中 中 中
0.7 弱 快 差

在 Retargeting 中的角色: - 平滑 landmarks 的视觉捕捉噪声 - 平滑关节角输出,防止手指振荡 - 引入延迟(\(\approx 1/\alpha\) 帧),需要在平滑度和延迟之间权衡

8.3 轨迹平滑度(Trajectory Smoothness)

度量:

  • Jerk(加速度变化率):\(j = \frac{da}{dt} = \frac{d^3 x}{dt^3}\)
  • 加速度峰值:\(\max |a(t)|\)
  • 速度连续性:\(\|\dot{x}(t^+) - \dot{x}(t^-)\|\)

在 Retargeting 中的角色: - 平滑的 retargeting 输出产生更自然的机器人运动 - 高频抖动(> 10 Hz)在视觉上明显,需通过滤波抑制 - 评估指标中的 Jerk 就是衡量轨迹平滑度


9. 机械传动

9.1 腱绳驱动(Tendon-Driven)

定义:通过柔性腱绳(类似生物肌腱)传递动力,电机置于前臂,腱绳拉动手指。

原理:

电机 (前臂) → 腱绳 (柔性) → 滑轮/导向 → 手指关节

优点 vs 缺点:

优点 缺点
手指轻量化(电机不在手上) 非线性传动(腱绳有弹性)
被动柔顺性(可缓冲冲击) 需要腱绳张力控制
仿生设计(如人手肌腱) 腱绳蠕变/磨损
易于紧凑设计 传递效率较低

在 Retargeting 中的角色: - 腱绳驱动的关节角与电机转角非线性(因为腱绳伸长、摩擦) - 需要额外的校准步骤:motor_angle = f(joint_angle) - 常见于 Shadow Hand、ORCA Hand

9.2 腱绳耦合(Tendon Coupling)

定义:一根腱绳同时驱动多个关节,导致关节之间存在运动约束。

耦合类型:

类型 耦合关系 示例
PIP-DIP 耦合 DIP 角度 = PIP 角度 × 0.7 Shadow Hand 食指~小指
交叉耦合 外展与屈曲耦合 某些灵巧手拇指
对角耦合 对侧手指同时运动 欠驱动夹爪

数学建模:

def tendon_coupling(joint_angles, coupling_matrix):
    """
    考虑腱绳耦合的关节角映射

    coupling_matrix: [n_actuator, n_joint]
    每行表示一个 actuator 驱动的关节组合
    """
    # 如果 PIP 和 DIP 耦合:
    # actuator_angle[0] = joint_angles[0]  (MCP 独立)
    # actuator_angle[1] = joint_angles[1] + 0.7 * joint_angles[2]  (PIP + DIP 耦合)

    return coupling_matrix @ joint_angles

在 Retargeting 中的角色: - 耦合限制了独立控制自由度 - Retargeting 需要将人手多个关节角合并为机器人耦合的关节角 - 例如:人手 DIP 角度 → 机器人 DIP 角度 = PIP 角度 × 耦合比

9.3 直驱(Direct Drive)

定义:电机直接连接关节,无减速器或腱绳。

特点: - 反向驱动性好(可自由推动) - 无背隙(精度高) - 扭矩密度低(需要大电机) - 传动效率高

代表:LEAP Hand V2、Allegro Hand、O10

9.4 欠驱动(Underactuation)

定义:驱动器数量少于关节数量,通过机械结构(弹簧/腱绳)实现自适应。

在灵巧手中的应用: - Robotiq 3F:3 指,每指 1 个驱动器驱动 3 个关节 - Shadow Hand:PIP 和 DIP 欠驱动耦合 - 抓取时,手指自适应包裹物体形状

在 Retargeting 中的角色: - 欠驱动关节无法独立控制,映射时需合并或忽略 - 例如:O10 的每指只有 2 个驱动器,但 PIP 和 DIP 作为一个联合关节


10. 评估与度量

10.1 关节角度误差(Joint Angle Error, JAE)

定义:机器人关节角与预期关节角之间的平均绝对偏差。

\[JAE = \frac{1}{n} \sum_{i=1}^n |\theta_i^{pred} - \theta_i^{gt}|\]

单位:rad

10.2 指尖位置误差(Fingertip Position Error, FPE)

定义:机器人指尖位置与预期指尖位置之间的欧氏距离。

\[FPE = \frac{1}{5} \sum_{i=1}^5 \|p_i^{pred} - p_i^{gt}\|_2\]

单位:m(毫米)

10.3 Jerk(加加速度)

定义:位置的三阶导数,衡量轨迹平滑度。

\[jerk = \frac{d^3 x}{dt^3} = \frac{d a}{dt}\]

在 Retargeting 中的角色: - 高 Jerk 值表示运动不平滑、有抖动 - 人手自然运动 Jerk 低,机器人应模仿

10.4 延迟(Latency)

定义:从人手动作到机器人响应的总耗时。

延迟组成:

人手动作 → 视觉捕捉 → 坐标转换 → IK 求解 → 通信 → 电机响应 → 机器人动作
  t=0      t=33ms    t=35ms     t=40ms   t=42ms  t=47ms     t=50ms

各环节典型延迟:

环节 典型延迟 优化方向
视觉捕捉 (MediaPipe) 15-33 ms GPU 加速
坐标转换/预处理 < 1 ms 算法优化
IK 求解 (DLS) 1-3 ms 减少迭代次数
通信 (CAN/UDP) 0.5-5 ms 提高波特率
电机响应 (PID) 3-10 ms 提高 PID 频率

容忍范围:

场景 可接受延迟 不可接受延迟
慢速遥操作 < 100 ms > 300 ms
灵巧操作 < 50 ms > 150 ms
力反馈 < 10 ms > 50 ms

附录:概念关系图

┌──────────────────────────────────────────────────────────────────┐
│                        IK Retargeting 概念体系                      │
│                                                                  │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐   │
│  │ 人手解剖  │ → │ 运动学   │ → │ 控制方法  │ → │ 机器人硬件│   │
│  │ CMC/MCP  │    │ DH/FK/IK │    │ PD/PID   │    │ 编码器   │   │
│  │ PIP/DIP  │    │ Jacobian │    │ 阻抗控制  │    │ 减速器   │   │
│  │ 21points  │    │ 关节/任务│    │ 刚度/阻尼 │    │ CAN/CANFD│   │
│  └──────────┘    └──────────┘    └──────────┘    └──────────┘   │
│       │               │               │               │         │
│       └───────┬───────┘               └───────┬───────┘         │
│               │                               │                 │
│               ▼                               ▼                 │
│        ┌──────────┐                    ┌──────────┐             │
│        │ 动作表示  │                    │ 机械传动  │             │
│        │ Action   │                    │ 腱驱动   │             │
│        │ Chunking │                    │ 齿轮比   │             │
│        │ 扩散策略  │                    │ 反向驱动  │             │
│        └──────────┘                    └──────────┘             │
│               │                               │                 │
│               └───────────┬───────────────────┘                 │
│                           │                                     │
│                           ▼                                     │
│                    ┌──────────────┐                             │
│                    │  Sim-to-Real │                             │
│                    │  系统辨识    │                             │
│                    │  域随机化    │                             │
│                    │  现实差距    │                             │
│                    └──────────────┘                             │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ 评估指标: JAE / FPE / Jerk / Latency / 限位违规率 / 成功率 │   │
│  └──────────────────────────────────────────────────────────┘   │
└──────────────────────────────────────────────────────────────────┘

索引:概念速查

概念 章节 核心一句话
DH 参数 1.1 4 个参数标准描述相邻连杆的几何关系
正运动学 (FK) 1.2 关节角 → 末端位置
逆运动学 (IK) 1.3 末端位置 → 关节角
Jacobian 1.4 关节速度与任务速度的线性映射
关节空间 1.5 机器人关节角构成的坐标系
任务空间 1.5 末端执行器位置/姿态构成的坐标系
MCP/PIP/DIP/CMC 2.2 人手关节缩写体系
弯曲角 2.4 相邻 3 个 landmarks 的夹角
外展角 2.4 相邻手指根部向量的夹角
PD 控制 3.1 比例+微分的位置控制
PID 控制 3.2 比例+积分+微分的闭环控制
阻抗控制 3.3 控制机器人表现出质量-弹簧-阻尼特性
刚度 3.4 抵抗外力导致位置变化的度量
阻尼 3.5 抵抗速度导致能量耗散的度量
柔顺性 3.6 刚度的倒数,意味着适应外力
编码器 4.1 将机械运动转换为电信号的传感器
减速器 4.2 将高速低扭矩转换为低速高扭矩的装置
传动比 4.3 输入转速与输出转速之比
反向驱动 4.4 从输出端推动能否带动电机
CAN 总线 5.1 差分信号串行通信协议
CMD / Command 5.2 发送给机器人执行器的控制指令
Sim-to-Real 6.1 仿真策略迁移到真实机器人
系统辨识 6.2 通过实验确定系统物理参数
域随机化 6.3 训练时随机化仿真参数
现实差距 6.5 仿真与真实世界的不可消除差异
动作空间 7.2 策略可输出的所有可能动作
Action Chunking 7.4 一次预测多步连续动作
轨迹插值 8.1 关键帧之间生成平滑过渡
EMA 8.2 指数加权移动平均滤波
腱驱动 9.1 通过柔性腱绳传递动力
腱绳耦合 9.2 一根腱绳驱动多个关节
欠驱动 9.4 驱动器数 < 关节数
JAE 10.1 关节角度误差
FPE 10.2 指尖位置误差
Jerk 10.3 加加速度,轨迹平滑度
Latency 10.4 从人手动作到机器人响应的总延迟