Sim2Real 是什么 仿真到真机有哪些 gap

一句话速记

Sim2Real(Simulation-to-Real)= 在仿真器里训练的策略迁移到真机时性能下降的问题。Gap 来自 5 个方面:① 物理引擎和真实世界差异(接触、摩擦、刚体假设)② 渲染和真实视觉差异(光照、纹理、相机噪声)③ 传感器噪声分布不同 ④ 执行延迟与抖动 ⑤ 真机机械误差和老化。核心解法:domain randomization(仿真里加大随机扰动,让模型对环境多样性鲁棒)、domain adaptation(用少量真机数据微调)、teacher-student(仿真训练高保真 teacher,蒸馏成轻量 student)。

通俗解释(5 分钟版)

为什么需要 Sim2Real

  • 真机训练:一个机器人 30 万、坏一次几万、训练几万小时不可能
  • 仿真训练便宜:100 个 GPU 并行 100 个机器人,每天跑 24 小时,几天搞定
  • 可问题是:仿真里训得很好的策略,搬到真机就崩——这就是 Sim2Real gap

5 类 gap

   gap 类型              仿真里                       真机里
   ──────────────────────────────────────────────────────────
   ① 物理               理想刚体、零误差               柔性、振动、变形
   ② 视觉               完美渲染、确定光照              噪声、阴影、反光
   ③ 传感器             无延迟、无噪声                 低帧、卡顿、漂移
   ④ 执行               关节响应理想                   电机滞后、抖动
   ⑤ 机械               几何完美                       磨损、零位漂移

举个例子:仿真里抓杯子百发百中。真机上:

  • 杯子比仿真里软一点(pickle 不同)
  • 摄像头有轻微偏色(VLM 训练时没见过)
  • 电机执行慢 50ms(动作就过冲了)
  • 抓取力不够(电机标定不准)

结果:策略以为自己在抓,实际上扑空。

解法的核心思想让仿真”更不完美”——加随机扰动让模型见过各种”差”环境,真机这种环境只是其中一种。

关键细节 / 数学直觉

1)五类 Gap 详细

① 物理 Gap

   仿真假设                          真实情况
   ──────────────────────────────────────────────────
   刚体不变形                         物体会变形(杯子被捏扁)
   摩擦系数 = 常数                    摩擦随接触面变化
   接触点是质点                       接触是面(带分布)
   关节阻尼可调                       真实电机阻尼很难精确建模
   重力 = 9.8                         真实地面有微小坡度

仿真器现状

  • MuJoCo / Isaac Lab:物理基本可信但接触/形变不强
  • 专门接触仿真(如 GraspIt):精度高但贵
  • 柔体仿真:还在发展(FleX、PolyFlex)

② 视觉 Gap

   仿真渲染                          真实图像
   ──────────────────────────────────────────────────
   光线追踪很完美                     真实光照杂乱(窗户、阴影)
   纹理是 PBR material                真实物体磨损、脏污
   相机模型理想                       真实相机有畸变、坏点、白平衡
   背景可控                           真实背景多变(家具、墙)

典型痛点:仿真训练的视觉策略,看到真实”反光的杯子”或”白色桌面在阳光下”就傻了。

③ 传感器 Gap

   传感器           仿真               真实
   ──────────────────────────────────────────
   RGB 相机         理想 30Hz           掉帧、滚动快门
   Depth            完美 depth         有空洞、噪声
   IMU              零偏移              有 bias、温漂
   Force/Torque     精确                有零漂、温度敏感
   编码器           完美关节角          有量化、回程间隙

④ 执行 Gap

   维度              仿真             真实
   ──────────────────────────────────────────
   控制延迟          0 ms              5-30 ms
   动作执行抖动      无                有
   电机响应          理想              带惯性、惰性、温度漂
   电源              无限              电池电压会跌

⑤ 机械 Gap

   - 同款机器人不同台,零位标定有差异
   - 用了几个月会有磨损(齿轮间隙变大)
   - 装配公差(每台机器人略有不同)

结果:在仿真里调好的策略,A 机器人能用,B 机器人就不能用

2)三大主流解法

a) Domain Randomization(DR)—— 最主流

核心:仿真里随机化所有可能不一样的因素,逼模型对所有变化鲁棒。

def randomized_env():
    env = MujocoEnv("scene.xml")
    
    env.set_friction(uniform(0.5, 1.5))
    env.set_object_mass(uniform(0.1, 1.0))
    env.set_lighting(random_lighting())
    env.set_texture(random_texture_from_pool())
    env.set_camera_noise(gaussian(0, 0.05))
    env.set_action_delay(uniform(0, 30))  # ms
    env.set_imu_bias(gaussian(0, 0.01))
    
    return env

直觉:训练时见过 100 万种”差”环境后,真机只是其中一种。

效果:很多 paper 显示能从 0% 直接达到 70-90% real success rate(视任务难度)。

b) Domain Adaptation(DA)

核心:用少量真机数据校正仿真训练的策略。

   流程:
   ① 仿真预训练 1000 万步 → 得到 policy_sim
   ② 真机采集 1000 条 demo → fine-tune 50 步
   ③ 得到 policy_real(保留泛化、补真机分布)

比较

  • DR 需要仿真够好+ 会随机,不需要真机数据
  • DA 需要少量真机数据,比纯仿真效果稳

c) Teacher-Student / 数据蒸馏

   teacher (仿真): 大模型、多模态输入(用 priviledged info)
                    在仿真里能看到完美状态
                    ↓ 蒸馏
   student (真机): 轻量、只用真实可获得的输入(视觉 + 本体)

典型应用:四足机器人的 walking policy 几乎都是这种。

3)数据采集策略对比

   策略                   成本           质量          泛化
   ─────────────────────────────────────────────────
   纯仿真                 极低           低(gap 大)   弱
   仿真 + DR              低             中            中
   仿真 + DR + 真机微调   中             高            强
   纯真机(teleoperation)极高           高            弱(数据少)

业界主流:仿真 + DR 大量训练 + 少量真机微调 → 最划算。

4)VLA 时代 Sim2Real 的变化

VLA 模型(如 OpenVLA)的训练数据是真实采集的(Open X-Embodiment:百万条真机示教),所以绕过了 Sim2Real——但也带来新问题

  • 真机数据采集贵
  • 数据集多样性受限于已有机器人
  • 新场景/新物体仍然需要 fine-tune

前沿趋势:用真机采集 + 仿真 augment 双管齐下。

5)Sim2Real 的”反向”——Real2Sim

   - 真机失败 case → 在仿真里复现 → 调试
   - 真机日志 → 提取"真实噪声分布"→ 用作仿真随机化的先验

这是关闭闭环的关键:真机失败的 case 不能丢,要转化为下次训练的素材。

6)选什么仿真器

   仿真器              强项                      弱项
   ────────────────────────────────────────────────
   MuJoCo              稳定、轻量、学术常用       渲染弱、生态小
   Isaac Sim/Lab       渲染好、GPU 并行强         学习曲线陡
   Gazebo              ROS 生态、传感器全         物理慢、过时
   PyBullet            Python 友好、开源         精度一般
   Habitat             室内导航、视觉强           物理弱

当前业界Isaac Lab 在工业应用里上升最快,academia 仍 MuJoCo 多。

延伸追问

  • Q: Sim2Real 跟 LLM 训练的 distribution shift 是一回事吗? → 思想类似——都是训练分布≠测试分布。但 LLM 主要靠数据规模抹平,具身因为数据贵只能靠仿真+随机化+少量真机数据这种”曲线救国”。
  • Q: 后端工程师在 Sim2Real 里能做什么? → 大量”非算法”工作:① 数据闭环平台(真机失败 → 仿真复现)② 训练任务调度(数千次仿真并行)③ 模型版本管理(policy v1 v2 v3 在不同机器人上的成绩)④ A/B 灰度发布到真机。
  • Q: Sim2Real 的”失败”长什么样?怎么诊断? → 典型 6 类:① 仿真训练就不收敛 → 任务设计问题;② 仿真好真机崩 → DR 不够;③ 部分场景崩 → 仿真没覆盖那种 case;④ 时间一长退化 → 机械磨损 / 标定漂;⑤ 不同机器人不同效果 → 个体差异;⑥ 偶发崩 → 噪声敏感。
  • Q: 为什么不直接 100% 真机训练? → 训练 1 个机器人步行需要几万小时演示——单台真机一天 8 小时,需要几年。再加 GPU 并行的”数据量优势”,纯真机不可行。

我的记法

  • Sim2Real = 仿真训得好但真机崩的鸿沟
  • 5 类 Gap:物理 / 视觉 / 传感器 / 执行 / 机械
  • 三大解法:DR(随机化)/ DA(真机微调)/ Teacher-Student(蒸馏)
  • 业界主流:仿真 + DR + 少量真机微调
  • VLA 时代部分绕过 Sim2Real(用真机数据),但仍需要
  • 真机失败 → 反向改善仿真(Real2Sim 闭环
  • 一句话:「仿真训练只能让你『接近真机』、永远到不了——剩下那段必须用真机数据补」

状态

  • 已背速记
  • 能讲通俗版
  • 能答追问
  • 看一遍 OpenAI Dactyl / NVIDIA Eureka 的论文/报告

参考资料