里程碑
机器人Shadow Dexterous Hand
上真机
实时
输入模态vision,proprioception

OpenAI Dactyl:用「暴力随机化」把仿真练出的灵巧手搬上真机

OpenAI(Marcin Andrychowicz, Bowen Baker, …, Lilian Weng, Wojciech Zaremba 等)。arXiv:1808.00177, 2018。 基于 OpenAI Five 同款分布式 RL 系统。dexteroussim-to-realdomain randomization

🧠 一句话心智模型:别指望仿真和现实一模一样——干脆把仿真做成「物理参数的分布」,摩擦、重力、质量、纹理全部随机。policy 在「千万种可能的物理世界」里都活下来,真机只是分布里的又一个样本。这是把sim-to-real 难题变成「鲁棒性考试」的范式开创。

🎯 为什么重要:灵巧手是机器人「最后一公里」的硬骨头

Shadow Dexterous Hand 是一只接近人手复杂度的机器人手——5 根手指、24 个自由度、20 对拮抗肌腱。商业上 2005 年就有了,但十几年里几乎没人能控制它做真正的灵巧操作。难点很朴素:

核心矛盾:深度 RL 需要百万级样本,而真机一小时跑不出几小时的有效数据——真机上从零学根本不现实。但仿真里能跑,仿真和真机的物理细节又对不齐(肌腱 vs 直接力矩、刚性接触 vs 软接触),直接迁移会立刻崩

Dactyl 给的答案是:不再追求仿真 = 现实,而是让 policy 在「参数大幅波动的仿真分布」里都管用。这等于把 sim-to-real 问题重定义为分布外泛化问题,用「随机化覆盖现实的不确定性」来弥合 reality gap。这一思路后来成了四足、人形、灵巧手领域的标准配方。

💡 核心思想:把仿真参数当成随机变量,policy 在分布上学习

传统做法:单一仿真 摩擦=0.5, 质量=1kg… policy 过拟合到这套参数 真机 摩擦=0.7, 质量略偏… ❌ 分布外,立刻崩 Dactyl:把仿真参数变成分布 摩擦 ∈ [0.7, 1.3] 质量 ∈ [0.5, 1.5] 阻尼 logU[0.3, 3] 重力扰动 光照/纹理/相机 关节限位 / 延迟 policy 学会「适应任意一套参数」 ✅ 真机 = 这个分布里的另一个样本
图 1:Dactyl 的核心心智——左图是「仿真=单一物理」,右图是「仿真=物理分布」。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 万仿真状态单独训
⑥ 大规模分布式 PPO384 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
关键洞察:sim 和 real 的中位数差距(50 → 13)说明 reality gap 没有完全消除,但 policy 已经能稳定做出人类级别的灵巧动作。更重要的是论文里那句观察——「自然涌现出人类常见的抓取类型」:tripod grasp、prismatic grasp、tip pinch grasp,finger gaiting(手指交替换位)、多指协调、对重力的受控利用。没人教过它这些,是 policy 自己发现的

论文也坦诚了一些失败:球形物体只能连续转几次(滚动行为对接触细节过于敏感);真机硬件经常坏,实验数据是不同时间凑出来的——硬件损坏是核心挑战之一。

🌐 在领域中的位置

模型控制(基于动力学 / MPC) 真机 RL(样本少,行为受限) Dactyl(sim-to-real + domain randomization)⭐ ANYmal / legged robots(同套配方,四足上) 现代灵巧手 + RL(DEX-Net, DexMimicGen 等)

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 工作里被反复提及。