OpenAI Dactyl:用「暴力随机化」把仿真练出的灵巧手搬上真机
🎯 为什么重要:灵巧手是机器人「最后一公里」的硬骨头
Shadow Dexterous Hand 是一只接近人手复杂度的机器人手——5 根手指、24 个自由度、20 对拮抗肌腱。商业上 2005 年就有了,但十几年里几乎没人能控制它做真正的灵巧操作。难点很朴素:
Dactyl 给的答案是:不再追求仿真 = 现实,而是让 policy 在「参数大幅波动的仿真分布」里都管用。这等于把 sim-to-real 问题重定义为分布外泛化问题,用「随机化覆盖现实的不确定性」来弥合 reality gap。这一思路后来成了四足、人形、灵巧手领域的标准配方。
💡 核心思想:把仿真参数当成随机变量,policy 在分布上学习
值得强调的是 LSTM + 随机化的组合:每个 episode 物理参数固定,但 policy 不知道是哪一套——它必须用前几步交互「在线辨识」当前环境再调动作。论文里把这点叫「implicit system identification」,这是随机化能 work 的隐形功臣。
🛠️ 让 sim-to-real 真的跑通的几个关键设计
| 设计 | 具体做法 | 为什么必要 |
|---|---|---|
| ① 物理参数随机化 | 摩擦系数 [0.7,1.3]、物体/连杆质量 [0.5,1.5]、阻尼 logU[0.3,3.0]、力矩增益 logU[0.75,1.5]、关节限位、重力向量扰动 | 真机的物理参数本来就不可能精确测得,让 policy 见过这些范围后真机自然落在范围内 |
| ② 视觉外观随机化 | 相机内外参、光照、纹理、材质、初始位姿全随机 | 视觉模型(给 policy 估物体位姿)也得见过千奇百怪的外观,迁移后才能稳 |
| ③ 未建模效应 | 电机 backlash、动作延迟 + 动作噪声、动捕 marker 短暂丢失与遮挡、对小物体施加随机扰动力 | 仿真不会自然包含这些现实噪声,得手动塞进去,policy 才不会被这些「假细节」绊倒 |
| ④ LSTM + 离散动作 | 策略网络是 LSTM(带记忆),动作每维离散成 11 个 bin | 记忆让 policy 隐式「在线辨识」当前环境;离散分布比高斯表达力更强,优势函数更易学 |
| ⑤ 双网络分工 | control policy 接 fingertip + object pose;vision CNN 单独训练,从 3 个 RGB 相机估位姿 | 避免 policy 被视觉噪声拖累;vision 模型用 100 万仿真状态单独训 |
| ⑥ 大规模分布式 PPO | 384 worker × 16 CPU + 8 GPU,每小时 ≈ 2 年仿真经验 | RL 在 24-DoF 系统上需要海量样本,没有这套基础设施根本跑不动 |
Shadow Hand 其实内建了指尖触觉(液囊式压力传感器)和关节角度霍尔传感器,但论文故意不提供给 policy。原因是:这些传感器有「状态相关噪声」——压力读数还受温度、气压、接触形状干扰,根本无法在仿真里建模出真实分布。宁可不给,policy 也学得起来,也不能给一个会被噪声骗倒的输入。传感器的可仿真性 > 传感器的信息量。
📊 结果:把 24-DoF 手的「转物体」任务搬到了真机上
| 维度 | 数字 |
|---|---|
| 任务 | 单手掌心转动物体到目标朝向,达成就给新目标,掉了则终止 |
| 物体 | 方块(block)、八角棱柱(octagonal prism);上限 50 次连续成功旋转 |
| 仿真(block, state) | mean 43.4,median 50(几乎打满) |
| 真机(block, state) | mean 18.8,median 13(50, 41, 29, 27, 14, 12, 6, 4, 4, 1) |
| 真机(block, vision) | mean 15.2,median 11.5——视觉版和动捕版差距很小 |
| 真机(octagonal prism) | mean 7.8,median 5(从 block 微调而来) |
| 控制频率 | policy ≈ 12 Hz,低层位置控制 ≈ 1 kHz |
| 奖励 | $r_t = d_t - d_{t+1}$(角度差减少),达目标 +5,掉落 −20 |
论文也坦诚了一些失败:球形物体只能连续转几次(滚动行为对接触细节过于敏感);真机硬件经常坏,实验数据是不同时间凑出来的——硬件损坏是核心挑战之一。
🌐 在领域中的位置
Dactyl 是 「domain randomization = sim-to-real 标准配方」的奠基性工作。它和同年(2018)的 ANYmal 第一篇 sim-to-real 一起,把「暴力随机化」从 trick 升级为主流范式。后续 Tassa et al.、RMA、ANYmal-C 等都继承了「物理参数分布」的思路。关联:ANYmal-C 感知运动(2022 年沿用并扩展)。
❓ 常见误区
它能从零开始抓任意物体吗?
不能。论文只验证了 方块和八角棱柱两类物体,且棱柱版是从 block policy 微调来的。球形物体直接失败。这是一个「证明 sim-to-real 思路可行」的工作,不是「通用的灵巧操作」工作。
「连续 50 次」是巧合吗?
50 是上限——实验里一旦达到 50 次就停止。仿真里 block 的中位数就是 50(几乎打满);真机 block state best trial 也是 50。「能跑通」的演示是可信的,但 mean/median 跨 trial 的方差很大,稳定性仍有限。
它「涌现出人类抓取」的说法不夸张吗?
论文用词是 "naturally discovers grasp types found in humans",指 tripod / prismatic / tip pinch 这几种人类常用的抓取构型。不是字面意义上「学到了人类的抓取策略」,而是在 reward 驱动下,policy 自己收敛到这些构型。这种「行为涌现」的观察在后续灵巧手 RL 工作里被反复提及。