- 引言
- 什么是现实差距
- 域随机化
- 系统辨识
- 观测历史与隐式适应
- 域适应
- 数字孪生与物理引擎
- 难以复现的物理 — 触觉与摩擦
- zero-shot 迁移的可能性与局限
- 观测差距与动力学差距
- 特权信息与教师-学生学习
- 从案例看差距的大小
- 实务工作流
- 执行器与延迟建模
- Real-to-Sim — 反方向的桥梁
- 从案例看 sim-to-real
- 现实部署时的安全机制
- 量化差距
- 陷阱与注意事项
- 结语
- 参考资料
引言
要让机器人做强化学习,需要几十万到几百万次的试错。要在真实机器人上积累这么多经验,时间、磨损和安全性的问题都会大到难以承受。因此许多研究选择这样的策略:先在仿真中快速、安全地积累大量经验,再把学到的策略迁移到真实机器人上。这就是 sim-to-real 迁移。
但这里存在一个根本性的难题。无论仿真做得多精细,都不是现实的完美复制品。摩擦、接触、传感器噪声、执行器延迟等因素都会有细微差异。这些细微差异累积起来,常常导致在仿真中表现完美的策略,一到现实中就惨遭失败。这种差距被称为现实差距(reality gap)。
本文将探讨现实差距为何产生,以及缩小它的代表性技术:域随机化、域适应、系统辨识、数字孪生,还有触觉这类特别难以复现的物理因素。为了准确起见,关于特定物理引擎或系统的细节规格,本文只提及确凿可靠的部分,不确定之处则做一般化描述。
什么是现实差距
现实差距泛指仿真与现实之间的一切不一致,它由多种原因造成。
现实差距(Reality Gap)的原因
─────────────────────────────
┌─────────────────────┐ ┌─────────────────────┐
│ 仿真 │ │ 现实 │
│ │ │ │
│ - 近似的物理 │ ≠ │ - 真实的物理 │
│ - 理想化的摩擦模型 │ ──差距─▶│ - 复杂的摩擦与磨损 │
│ - 完美的传感器 │ │ - 有噪声的传感器 │
│ - 即时响应的执行器 │ │ - 延迟与背隙 │
│ - 简化的接触模型 │ │ - 形变与打滑 │
└─────────────────────┘ └─────────────────────┘
如果策略学会了利用仿真的"漏洞"
到了现实中漏洞消失,策略就会崩溃。
现实差距的成因大致可归纳如下。
- 动力学不一致:仿真器所用的物理近似,与真实物体的质量、惯量、摩擦力存在细微差异。
- 接触与摩擦:物体相互接触瞬间的力、打滑、形变,恰恰是物理引擎最难精确复现的部分。
- 传感器差异:仿真中的相机图像或深度传感器数值,无法完全还原真实传感器的噪声、镜头畸变和光照变化。
- 执行器差异:真实电机存在延迟、背隙(齿轮间隙)、力矩上限和磨损,而仿真往往把这些理想化掉了。
域随机化
缩小现实差距最广为人知的技术是域随机化(Domain Randomization)。这个想法带点悖论意味:不是让仿真更贴近现实,而是每一轮训练都让仿真的多个参数大幅随机波动。
核心直觉是这样的:如果在训练时让摩擦、质量、光照、颜色、传感器噪声等因素大范围变化,策略就不会过拟合到某一个固定设定,而是学会"这个范围内的波动是常态"。经过这样训练的策略,眼中的现实世界不过是又一次随机变形而已。
域随机化的直觉
───────────────────
[ 单一仿真 ]
● ← 只针对一个狭窄的设定优化 → 在现实(○)中失败
现实 ○ (在训练分布之外)
[ 域随机化 ]
● ● ● ● ● ● ● ● ● ← 对大范围变化都保持稳健
现实 ○ (现实已包含在训练分布之内)
随机化对象大致可分为两类。
- 视觉随机化:扰动纹理、颜色、光照、相机位置、背景等,使视觉策略更稳健。
- 动力学随机化:扰动质量、摩擦系数、执行器延迟、关节阻尼等物理参数,使控制策略更稳健。
# 动力学随机化配置示例(概念性)
domain_randomization:
friction:
distribution: uniform
low: 0.5
high: 1.5
mass_scale:
distribution: uniform
low: 0.8
high: 1.2
actuator_delay_ms:
distribution: uniform
low: 0
high: 20
observation_noise_std: 0.02
gravity_scale:
low: 0.98
high: 1.02
域随机化的局限也很明显。随机化范围设得太宽,任务本身会变得太难,策略什么也学不到;设得太窄,又覆盖不了现实。把这个范围调到合适,本身就需要相当大的调参投入。
系统辨识
系统辨识(System Identification)是与域随机化互补的方法。它不靠随机扰动,而是用从真实机器人测得的数据,把仿真器的参数尽量校准到贴近现实。
举例来说,让真实机械臂沿多条轨迹运动,测量关节的响应,再优化摩擦系数、惯量、延迟等参数,使测量值与仿真结果一致。这样校准过的仿真器会更接近现实,从而缩小差距。
系统辨识的循环
─────────────────
真实机器人 ──▶ 采集测量数据
│
▼
与仿真结果比较
│
▼
调整仿真参数以减小误差
│
└────▶ (反复迭代,使仿真逼近现实)
实务中通常把域随机化和系统辨识结合使用:先用系统辨识把仿真器校准到接近现实,再用域随机化在其周围大范围扰动,把剩余的差距用稳健性来吸收。
观测历史与隐式适应
域随机化训练出的策略之所以能较好地迁移到现实,一个有趣的机制在于:策略会从过去观测的流动中,隐式地估计当前环境的特性。
只看某一瞬间的观测,无法判断此刻摩擦是大是小。但如果看最近几步中,机器人在给定命令下实际是如何运动的,就能在一定程度上推断出环境的物理特性。也就是说,如果策略以观测历史作为输入,它就有余地自行察觉"现在这是什么样的环境",并据此调整行为。
通过观测历史隐式估计环境
──────────────────────────────────
单帧: 观测 o_t ──▶ 环境特性未知
历史: o_(t-k) ... o_t ──▶ 从"命令与响应之间的关系"
(过去的流动) 隐式估计摩擦、质量等
──▶ 据此调整行为
从这个角度看,大范围的域随机化不只是让策略变得迟钝,而更应理解为训练它区分不同环境并分别适应的能力。这也是为什么循环神经网络这类处理时间信息的结构,对这种隐式适应更有优势。
域适应
域适应(Domain Adaptation)着眼于把策略或感知模型从仿真域移植到现实域。典型场景是在视觉感知中,让仿真图像与现实图像的特征分布对齐,使仿真中学到的表征在现实图像上也能生效。
具体方法多种多样:把仿真图像转换成看起来像现实的样子、让特征空间对齐以至于两个域无法区分、用少量现实数据微调最后一个阶段等。核心目标是一致的——把仿真中学到的知识迁移到现实,同时把所需现实数据的量降到最低。
数字孪生与物理引擎
sim-to-real 归根结底依赖仿真器的品质。近来,把真实机器人和作业环境精确复制到虚拟空间的数字孪生(Digital Twin)概念频繁出现。其思路是:如果在尽可能反映真实工作单元几何形状、物体、光照的虚拟环境中训练策略,就能缩小现实差距。
在物理引擎方面,利用 GPU 同时并行仿真成千上万个环境的工具,极大加速了机器人强化学习。NVIDIA 的 Isaac 系列仿真工具常被提及,此外还有多种物理引擎也用于机器人研究。不过各工具的具体功能和性能可能因版本而异,细节建议以官方文档为准。
GPU 并行仿真的优势
──────────────────────────
单一环境: [env] ──▶ 数据采集缓慢
并行环境: [env][env][env] ... [env] (成千上万个同时运行)
│ │ │ │
└────┴────┴────────┘
▼
短时间内采集大量经验
──▶ 强化学习变得切实可行
难以复现的物理 — 触觉与摩擦
sim-to-real 中特别棘手的领域是接触密集操作(contact-rich manipulation)。抓取、插入、擦拭这类动作高度依赖细微的摩擦力和接触力,而这恰恰是物理引擎最难精确复现的地方。
- 摩擦:静摩擦与动摩擦之间的切换、随表面状态发生的变化,很难用一个简单的系数来概括。
- 形变:柔软物体或布料这类会改变形状的对象,无法用刚体假设来表示。
- 触觉传感器:检测指尖压力分布或打滑的触觉传感器,在仿真中尤其难以复现。
由于这些原因,像精密装配这类高度依赖触觉的任务,单靠纯仿真学习局限很大,往往更需要现实数据或在现实中做微调。
zero-shot 迁移的可能性与局限
理想目标是 zero-shot 迁移,也就是在现实中完全不做额外学习或调整,仿真中学到的策略就能直接在现实中运行。在广泛应用域随机化的移动机器人步态等部分任务上,已有令人印象深刻的 zero-shot 结果被报告过。
但并非所有任务都是如此。像接触密集的精密操作这类现实差距较大的任务,往往仍需要在现实中做 few-shot 微调(few-shot fine-tuning)。因此在实务中,把它理解为一个光谱更为现实。
迁移的光谱
───────────────
zero-shot few-shot full real training
(无需现实调整) (少量现实数据) (在现实中大量学习)
│ │ │
差距较小的任务 差距中等的任务 差距非常大的任务
(例如:某些步态) (多数操作任务) (极限精密、柔性物体)
观测差距与动力学差距
处理现实差距时,把它分成两类来思考会更有帮助:观测差距和动力学差距。
观测差距是机器人"看"世界方式上的差异,比如仿真的相机图像与现实图像看起来不同,或者深度传感器的噪声特性不一致。动力学差距是世界实际运动方式上的差异,比如施加同样的力,物体在仿真和现实中的反应不同。
两类差距
──────────────
观测差距 动力学差距
┌──────────────┐ ┌──────────────┐
│ 感知世界 │ │ 世界运动 │
│ 方式的差异 │ │ 方式的差异 │
│ │ │ │
│ 例:图像质感 │ │ 例:摩擦、惯量 │
│ 传感器噪声│ │ 延迟、接触 │
└──────┬───────┘ └──────┬───────┘
│ │
▼ ▼
主要靠视觉随机化、 主要靠动力学随机化、
域适应来应对 系统辨识来应对
这种区分之所以有用,是因为出问题的是哪一种差距,决定了要开出什么样的处方。如果视觉感知不稳,需要视觉随机化或域适应;如果控制不稳,则应把精力集中在动力学随机化或系统辨识上。如果把两种差距混为一谈,很容易把力气用错地方。
特权信息与教师-学生学习
sim-to-real 中常用的一个强大技术,是利用特权信息(privileged information)的教师-学生(teacher-student)学习。
思路是这样的:在仿真中,可以获取现实中无法得到的完美信息,比如物体的精确质量、地形的精确高度、摩擦系数等数值。直接接收这类特权信息的教师策略,学习起来非常容易、效果也非常好。问题在于,现实中的机器人并没有这些信息。
因此把过程拆成两个阶段。首先在仿真中训练拥有特权信息的教师策略;然后只用现实中实际能获取的观测(相机、关节传感器等),训练一个模仿教师行为的学生策略。学生在没有特权信息的情况下,学会了表现得和教师相似,最终把这个学生策略部署到现实中。
教师-学生学习(利用特权信息)
────────────────────────────────
[教师] 特权信息(完美的物理数值) ──▶ 轻松学到好策略
│
│ 以教师的行为为目标
▼
[学生] 只使用现实中可获得的观测 ──▶ 学习模仿教师
│
▼
现实部署:学生策略(无需特权信息)
这种方法在地形信息至关重要的任务中特别有效,比如多足步行。在仿真中可以精确知道地形高度,但在现实中做不到,因此让学生学会从过去观测的流动中隐式估计地形。
从案例看差距的大小
再具体地看一下前面提到的迁移光谱。一个任务落在哪个位置,大致由两个因素决定:接触的复杂度和精度要求。
- 接触少、余量大的任务:开阔空间中的移动,或大致推动大型物体这类任务,现实差距相对较小,通常仅凭大范围域随机化就能实现良好迁移。
- 接触多但仍有余量的任务:拾取并搬运物体这类常见操作,差距处于中等水平,在随机化基础上加上少量现实数据微调会有帮助。
- 接触多且精度要求极高的任务:以微小间隙插装零件或处理布料等作业,差距非常大,需要大幅提高现实数据的比重。
决定任务位置的两个轴
────────────────────────
精度
要求
高 ┤ 精密装配 极限柔性物体
│ (大量现实数据) (几乎靠现实训练)
│
│ 大致推动 一般操作
低 ┤ (接近 zero-shot) (few-shot)
└────────────────────────────▶
低 接触复杂度 高
这张地图并非绝对,每个任务都可能有例外,但它能给出一个大致的直觉,帮你判断"自己的任务是多难的一次迁移"。
实务工作流
将 sim-to-real 实际应用时的大致流程如下。
sim-to-real 实务流水线
────────────────────────────
[1] 数字孪生/环境建模
│
▼
[2] 通过系统辨识校准仿真参数
│
▼
[3] 设定域随机化范围,进行仿真训练
│
▼
[4] 在现实中做小规模评估
│
├── 性能足够 ──▶ 部署
│
└── 发现差距 ──▶ 重新调整随机化范围/辨识 (回到 [2]/[3])
执行器与延迟建模
现实差距中占比意外地大的一项,是执行器的非理想性。仿真常常假设"命令的力矩会立即原样输出",但真实电机并非如此。
- 延迟(Latency):从下达命令到实际输出力,需要时间。控制周期越快,这种延迟的相对影响就越大。
- 背隙(Backlash,齿轮间隙):齿轮存在间隙,换向时会有短暂一段力无法传递。
- 力矩上限与饱和:电机能输出的力有上限,在接近上限时,响应不再按命令行事。
- 摩擦与磨损:关节摩擦会随时间变化,并且每个机器人个体之间也存在细微差异。
理想 vs 真实执行器
──────────────────────────
理想: 命令力矩 ──即时──▶ 输出力矩 (完全一致)
真实: 命令力矩 ──延迟──▶ ──背隙──▶ ──饱和──▶ 输出力矩
(耗时) (间隙) (上限) (不完全)
▶ 如果策略依赖理想化假设,在现实中就会出现振荡或失败。
应对方法包括把这些非理想性反映进仿真,或者用一个从数据中学到的独立模型来替代执行器的响应本身。特别是把延迟也纳入随机化对象,对控制策略的稳健性有很大帮助。
Real-to-Sim — 反方向的桥梁
到目前为止讨论的都是从仿真到现实的方向,但反方向的流动同样重要,即通过观测现实来构建或改进仿真的 real-to-sim。
如果用 3D 扫描或重建技术,把现实场景搬进虚拟环境,就能得到一个与真实作业空间一模一样的仿真。在这样构建出的仿真中学到的策略,再迁移回那个空间就会容易得多。循环往复地重复 real-to-sim 与 sim-to-real,就能形成仿真与现实相互改进的良性循环。
real-to-sim ↔ sim-to-real 的循环
────────────────────────────────
现实观测 ──(real-to-sim)──▶ 构建精确仿真
▲ │
│ ▼
│ 在仿真中训练策略
│ │
└──(sim-to-real)◀── 在现实中验证/采集数据
从案例看 sim-to-real
为了获得具体的感觉,不妨对比两类任务。真实系统的具体数值因实现而异,这里只描述一般性的趋势。
第一,四足与双足机器人的步态。这类任务把域随机化和基于特权信息的教师-学生学习结合起来,已有若干相对成功的 sim-to-real 案例被报告过。做法是先在仿真中训练出对多样地形和外部扰动都稳健的策略,再应用到现实中的行走。
第二,指尖精密操作。用多个手指旋转或重新摆放物体的任务,通过广泛的域随机化取得过令人印象深刻的结果。不过这类任务的接触极为复杂,设定随机化范围和训练本身都需要相当大的工程投入。
这两个案例共同的教训是:成功的 sim-to-real 不是某一种魔法技巧,而是多种技术(随机化、辨识、教师-学生、审慎评估)组合与反复调优的产物。
现实部署时的安全机制
无论在仿真中验证得多么充分,当学习到的策略第一次装到真实机器人上时,都可能出现意料之外的行为。因此在实际部署阶段设置多重安全机制,是标准做法。
- 力矩/速度限制:无论策略下达多大的命令,都在硬件层面阻止其超出安全极限。
- 工作空间边界:一旦机械臂离开指定的安全区域,立即使其停止。
- 紧急停止:设置人可以随时介入、停止机器人的物理开关和软件开关。
- 渐进式部署:先从低速、窄范围开始,随着信任逐渐积累再逐步放宽条件。
现实部署的安全层级
─────────────────────
策略输出
│
▼
[力矩/速度限制] ──▶ 阻止超出硬件极限
│
▼
[工作空间边界] ──▶ 离开安全区域即停止
│
▼
[紧急停止待命] ──▶ 人可随时介入
│
▼
实际机器人动作(在安全范围内)
这些机制本身不会提升 sim-to-real 的性能,但它们是防止差距导致的意外失败演变成事故的最后一道防线,对于在人身边工作的机器人尤其不可或缺。
量化差距
在 sim-to-real 的研究与实务中,判断"差距有多大"很重要。为此,通常会在仿真和现实中运行同一个策略,比较二者的性能或轨迹相差多少。
- 性能差距:仿真中的成功率与现实中的成功率之差。这个差值越大,说明迁移越失败。
- 轨迹差距:面对相同命令,机器人在仿真和现实中的状态随时间的演化有多大差异。
仿真-现实的轨迹差距
────────────────────
仿真: s0 ─▶ s1 ─▶ s2 ─▶ s3 ─▶ ...
现实: s0 ─▶ s1'─▶ s2'─▶ s3'─▶ ...
↑ ↑ ↑
逐渐拉大的差距
▶ 如果一开始就大幅拉开,应怀疑动力学差距;
如果只在特定情形下拉开,应怀疑该情形下的物理复现。
这类量化能告诉你该修什么。如果轨迹从一开始就出现偏离,需要做基础的动力学校准;如果只在特定瞬间(例如发生接触时)才出现偏离,则需要改进那部分物理的复现。
陷阱与注意事项
- 过度随机化:盲目扩大随机化范围,会导致训练完全无法收敛,或者得到一个过度保守的策略。
- 利用仿真漏洞:策略可能会利用仿真器的物理错误,以不切实际的方式获取奖励。这类只在仿真中管用的策略,一到现实中就会崩溃。
- 评估偏差:不能因为仿真性能好,就对现实性能盲目乐观,必须在现实中充分验证。
- 传感器对齐:如果仿真和现实之间的传感器坐标系、延迟、尺度出现偏差,策略会立刻失败。这种对齐经常被忽视,却非常重要。
结语
sim-to-real 迁移是让机器人学习变得切实可行的关键桥梁。域随机化用稳健性吸收差距,系统辨识和数字孪生把仿真器拉近现实,域适应则把学到的知识移植到现实中。这些技术并不互相排斥,实务中往往组合使用。
不过在触觉、精密接触等物理难以复现的领域,仍然需要现实数据,zero-shot 迁移并非万能。与其说 sim-to-real 是一个已经完成的解决方案,不如说它更接近一个持续不断、一点点缩小现实差距的工程过程。
参考资料
- NVIDIA Isaac / 机器人技术: https://developer.nvidia.com/isaac
- NVIDIA Isaac Lab 文档: https://isaac-sim.github.io/IsaacLab/
- OpenAI Spinning Up(强化学习入门): https://spinningup.openai.com/
- Domain Randomization 论文 (Tobin et al., arXiv): https://arxiv.org/abs/1703.06907
- Sim-to-Real via Domain Randomization (OpenAI Dactyl, arXiv): https://arxiv.org/abs/1808.00177
- Open X-Embodiment 论文 (arXiv): https://arxiv.org/abs/2310.08864
- MuJoCo 物理引擎: https://mujoco.org/
- Gymnasium(强化学习环境): https://gymnasium.farama.org/
현재 단락 (1/240)
要让机器人做强化学习,需要几十万到几百万次的试错。要在真实机器人上积累这么多经验,时间、磨损和安全性的问题都会大到难以承受。因此许多研究选择这样的策略:先在仿真中快速、安全地积累大量经验,再把学到的策...