5.3 Sim-to-Real:域随机化与跨越现实鸿沟


5.3 Sim-to-Real:域随机化与跨越现实鸿沟

本节摘要:仿真训练的策略第一次上真机就翻车,不是意外而是必然——鸿沟由模型误差、延迟、噪声、带宽限制四类成分叠加而成。域随机化的对策不是「把模型做得更准」,而是「把策略练得更钝」:训练时刻意扰动模型参数与观测,让最优策略退化为对参数不敏感的稳健策略。本节拆解鸿沟成分、给出随机化的范围设计方法、并用一次完整的上真机复盘把全流程串起来。

5.1 与 5.2 的产物都停在「仿真里可用」这一步。本节处理最后一公里,也是整个试车场存在的终极理由:让虚拟样机的成绩单在真实世界兑现。

现实那边发生了什么

先别急着谈方法,把鸿沟本身拆开——「真机不如仿真」从来不是一个笼统的失败,而是几类可枚举的误差在叠加。模型误差:真机连杆的惯量与你填的数字有出入、关节有未建模的摩擦死区、接触面的材质不均匀。延迟:从传感器读数到控制生效,真机链路上有几十毫秒的滞后,仿真里是零。噪声:编码器抖动、电流纹波、相机噪点,仿真读数干净得像无菌室。带宽限制:真机执行器有力矩上限与响应速度上限,仿真里的执行器年轻力壮不知疲倦。

四类成分的破坏力不成正比:模型误差的「量级偏差」通常最致命(第二章的惯量事故是现成案例),延迟在高速任务里排第二(一帧延迟就能让振型错位),噪声与带宽相对温和但会持续磨损性能。拆分的意义在于对症下药——不同成分有不同的桥接手段,域随机化只是其中主力,不是全部。

图 5-3 仿真到现实的鸿沟:四种成分与四条桥

图 5-3 仿真到现实的鸿沟:四种成分与四条桥

一、域随机化:把「准确」换成「稳健」

原理一句话:训练时每个回合(或每若干回合)从预设区间里随机抽取模型参数,策略面对的是一个「参数族」而非单一参数集;能在这个族上统拿高回报的策略,对真机的参数偏差天然免疫——因为真实参数大概率落在你随机过的区间里。

区间设计是全技术唯一需要动脑的地方,三条经验法则:

法则一:中心用标定值,宽度按不确定度。 摩擦系数实测零点八、量具误差一成,区间取零点七二到零点八八,而不是拍脑袋的零点五到一点五——区间外的人生,策略没学过。没有实测条件的参数(接触刚度类)用「文献值加宽一倍」起步,靠真机失败迭代收窄。

法则二:随机化清单按影响力排序,先抓大头。 优先级从高到低通常是:接触摩擦与 solref(直接影响抓与走)、连杆惯量与质心(动态任务的命门)、执行器增益与时延(所有任务的地基)、观测噪声(最后加,量小)。全部一起随机是常见错误——训练难度暴涨、收敛慢十倍,且失败后无法归因是哪个参数的区间不合理。正确姿势是逐组开启、验证训练不塌方、再加下一组。

法则三:随机化频率与环境结构匹配。 每回合重抽是最常用档;慢漂移类参数(如温度导致的摩擦变化)用「每若干回合缓慢重抽」更贴近真实现象。频率过高的极端情况(每步重抽)会把任务变成不可辨识的噪声场,策略学到的是消极等待。

落实到代码,域随机化就是 3.4 讲的「低风险改 model」操作在重置时机的循环使用:

class RandomizedReachEnv: def reset(self, rng): mujoco.mj_resetData(self.model, self.data) # 每回合抽取一组模型参数——改的是 model,低风险区 self.model.geom_friction[0] = rng.uniform(0.7, 1.1) # 地面摩擦 self.model.dof_damping[:] *= 1.0 # 先复位再抽 self.model.dof_damping[:] = self._base_damping * rng.uniform(0.8, 1.3) self.model.body_mass[3] = self._base_mass * rng.uniform(0.9, 1.4) # 观测噪声:加在读出端,不改 model self._obs_noise = rng.uniform(0.0, 0.01, size=self.model.nv) mujoco.mj_forward(self.model, self.data) return self._obs()

注意 dof_damping 的写法:先乘一复位再基于基准抽比例——直接在 model 上累乘会让参数越训越漂,这是随机化代码里最常见的一行级 bug。

二、延迟与观测:两处容易被忽略的桥

延迟注入:真机五十毫秒的感知到执行延迟,仿真里就要造出等量延迟——把动作延迟生效(控制队列)或把观测滞后输出(历史缓冲)二选一,工程上常用前者。未注入延迟的高速任务,真机上「仿真稳如钟摆、真机抖如筛糠」的翻车,几乎全部源于此。

观测对齐:5.1 的红线在这里升级为清单——真机能给什么传感器,仿真观测就用什么;真机没有的(完美速度、无噪位置)坚决不给;真机有的缺陷(相机曝光变化、编码器量化)反而要在仿真里模拟。观测侧的纪律比对模型侧更严格,因为策略对观测分布的偏移远比对参数偏移敏感。

三、一次完整的上真机复盘

把全流程串成案例。背景:四足机器人平地行走策略,仿真训练完成,reward 曲线平台期稳定。操作:第一版直接部署——真机原地抖动,十秒内跌倒。排查按 5.3 方法论走:抄真机的控制链路,发现感知到执行延迟四十毫秒而仿真为零;关节摩擦未建模,髋关节死区明显。第二轮:仿真注入四十毫秒延迟、髋关节加死区模型、摩擦与惯量开随机化(区间按实测),重训两天,真机能走但侧向漂移。第三轮:加入真机回流——用真机行走数据做系统辨识,修正髋关节摩擦模型(第二章的逆动力学接口在这里还魂),再把随机化区间按辨识结果收窄,重训一天,真机连续行走通过验收。解读:三次迭代的本质是「假设检验循环」——每次真机失败给出一个「鸿沟里漏掉的成分」,仿真补上该成分再验证。变式:预算不足做不了多轮迭代时,优先补延迟与摩擦两项(性价比最高),惯量误差靠随机化宽度硬扛;视觉任务的额外功课是仿真画面与真机画面的域对齐(纹理、光照随机化)。

这个案例的通用结论值得单独一行:Sim-to-Real 不是一次部署,是一条「仿真—真机—辨识—再仿真」的迭代流水线。域随机化负责让策略宽容,系统辨识负责让区间收敛,两者缺一不可。

本节要点回顾

  • 鸿沟四成分:模型误差、延迟、噪声、带宽限制,逐项对症下药,不做笼统的「调一调」;
  • 随机化哲学:不求模型更准,求策略更钝——区间宽度按不确定度,不是拍脑袋;
  • 三条法则:中心标定宽度定界、清单按影响力逐组开、频率与环境结构匹配;
  • 代码级防呆:随机化基于基准值抽比例,避免在 model 上无限累乘;
  • 迭代流水线:真机失败是信息,辨识修正区间,Sim-to-Real 是循环不是冲刺。

训练成了、真机过了,故事就结束了?没有——真机与仿真之间还会出现各种「说不清的不对劲」,需要系统性的诊断与修复方法。下一章进入调校与排错。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U