Sim2Real 指的是:策略或控制器先在仿真里训练、调试,再放到真机上跑。仿真的好处是快、便宜、可以并行、失败不会损坏硬件。代价是仿真里的世界和真机不是同一个世界。这个差别就叫域差距(domain gap)。
差距从哪来
| 来源 | 仿真里常见的简化 | 真机上的结果 |
|---|---|---|
| 视觉 | 光照、材质、相机噪声比较干净 | 边缘飘、反光、曝光变了,检测或特征就偏 |
| 动力学 | 摩擦、柔性、齿轮间隙被简化或设成常数 | 打滑、到位过冲 |
| 时间 | 指令发出几乎立刻作用到关节 | 多一截通信和控制延迟,下一步是按过时状态出的 |
| 环境 | 地面平整、没有线缆 | 绊线、急停、桌面上一块没建模的东西 |
三条不必同时出现。中一条,仿真里连续成功的策略就可能在真机上晃或触发限位。
常用的补法
这些方法是在缩小差距,不是保证一次迁移成功。
- 域随机化:训练时随机光照、纹理、质量、延迟,让策略不要死记仿真里的那一种外观和手感。
- 系统辨识:用真机测到的摩擦、延迟、质量去改仿真参数,而不是只把材质做得更像照片。
- 残差学习:经典控制器负责主体,模型只学习仿真或模型没覆盖的那一点偏差。偏了还有原来的环托着。
- 渐进上真机:先做接触力小、速度低、空间小的任务,再放开。
仿真成功率高,只说明在仿真的假设下策略成立,也说明话题和代码多半是通的。它不代替真机成功率。
数字怎么记
至少分开三列:
- 仿真成功率
- 真机成功率
- 人插手的次数,以及急停、限位这类仿真里往往不会出现的事件
写在一起的那个「总成功率」只适合演示。真机上的线被拽紧、急停被碰到、地面有一条坎,不进仿真曲线,但要进记录。否则下次会把它们当成「模型突然变差」。
回滚也不只是换一个模型文件
限速、技能参数和模型版本绑在一起。只换模型、限速还是新的,或只把速度放开、模型还是仿真那一版,都可能再次触发限位。和纯软件里「回滚一个镜像」不同,物理系统回滚要同时回到控制器参数。失败成本和迭代速度的差别,见 Physical AI 扫盲。
小结
Sim2Real 的工作是承认两个世界不一样,并把差在哪里测出来。仿真负责把闭环跑通、把明显的逻辑错误先除掉;真机负责在低速和小范围里核对光、延迟和摩擦。两个成功率分开报。