⏱ ~81 min

概念辨析 · Sim-to-Real 的各种方法

这组方法经常被混用,但它们解决的是不同层面的问题,实际工程中是组合使用

💡 一句话总结sim2real 不是单一方法而是按 gap 来源组合——能精确测的物理参数(质量/电机/延迟)用 SysID、测不准的(摩擦/惯量)用 Domain Randomization 覆盖、仿真有特权信息用 Teacher-Student 蒸馏、慢时变环境用 RMA 在线适应;四步叠加才是生产级。

Sim2Real 四法对比图:Domain Randomization / System Identification / Teacher-Student / RMA 四列卡片 + 底部 ASAP delta dynamics 突出框

速查:何时用哪个
| 场景 | 推荐 | 原因 |
|------|------|------|
| 能精确测的参数(质量、电机延迟、PD 增益) | System Identification | 直接缩小 gap,让策略能更激进 |
| 测不准的参数(摩擦、惯量、CoM) | Domain Randomization($U(0.7,1.3)\times$ nominal) | 离线鲁棒性,让 $\pi$ 在 $p(\theta)$ 上期望最优 |
| 仿真有特权信息、真机只有本体感受 | Teacher-Student + DAgger | student 从历史 $h_t$ 隐式反推 $e_t$,学到 recover |
| 慢时变环境(温度/磨损)需实时适应 | RMA 在线适应 | $\hat{z}_t=\phi(h_t)$,从 50 步历史推断环境参数 |
| 剧烈动作(跳/翻)的 residual gap | ASAP / delta action | DR 覆盖不住,需学 $\Delta a$ 补偿 |

本页内容

基础解释

一句话直觉

让在电脑里练好的机器人动作,搬到真机上还能用。好比飞行员先在模拟器里练手,再上真飞机。

是什么·为什么

电脑里的仿真和真机总有差距。仿真里摩擦是 0.8,真机可能在 0.6 到 1.2 之间任意值。仿真电机一响就动,真机有几毫秒延迟。这个差距叫"现实沟"。

为什么重要:真机一步动辄几秒,样本极贵。仿真里能开几千个并行练。练得再好搬不过去都白搭。这套方法就是把"练得快"和"搬得过"中间的桥搭起来。

主流招数分三种。

第一招·都练一遍:既然不知道真机是哪种情况,就让机器人在仿真里把所有可能都练过。真机只是其中一种。思路是"平均地都练到"。

第二招·把仿真对齐真机:实测真机的摩擦、质量、电机延迟。把仿真调得跟真机一样。差距小了,策略搬过去就稳。

第三招·边走边摸环境:让机器人上线后自己感觉。原来这是沙地还是冰面?走几步就知道,然后调整步态。

核心大白话:要么让仿真"什么情况都见过"。要么让仿真"和真机一样"。要么让机器人"上线后边用边猜当前环境"。三招常叠加用。

一句话类比:仿真练技能之于真机部署,像飞行模拟器之于真飞机。模拟器省钱省命,但最后得上真飞机。

核心矛盾

仿真 ≠ 现实。仿真里的摩擦系数是 0.8,真机可能是 0.6-1.2 之间任意值;仿真里电机响应是瞬时的,真机有 5ms 延迟;仿真地形是解析的,真实地形是未知的。这个差距叫 reality gap

形式化:仿真 MDP $\mathcal{M}_\text{sim}=\langle \mathcal{S}, \mathcal{A}, \mathcal{T}_{\theta}, R_{\theta}, \gamma\rangle$ 和真机 $\mathcal{M}_\text{real}=\langle \mathcal{S}, \mathcal{A}, \mathcal{T}_{\theta^\star}, R_{\theta^\star}, \gamma\rangle$ 共享状态/动作空间但参数 $\theta$ 不同。sim2real 的目标是从 $\mathcal{M}_\text{sim}$ 学的策略 $\pi$ 在 $\mathcal{M}_\text{real}$ 上仍然有高 return

四种主流方法

1. Domain Randomization (DR) · 域随机化

思路:既然不知道真机参数 $\theta^\star$,那就把 $\theta$ 当随机变量,让策略在所有可能 $\theta \sim p(\theta)$ 上都 work。真机参数 $\theta^\star$ 只是 $p(\theta)$ 一个样本。

形式化为 robust MDP:训练目标从 $\max_\pi J(\pi, \theta)$ 改成最坏情况(robust)或期望(Bayesian):

$$\pi^\star_\text{DR} = \arg\max_\pi \mathbb{E}_{\theta \sim p(\theta)}\big[J(\pi, \theta)\big] \quad \text{(Bayesian DR, 主流)} \tag{DR-E}$$

$$\pi^\star_\text{robust} = \arg\max_\pi \min_{\theta \in \Theta}\,J(\pi, \theta) \quad \text{(robust DR, 保守)} \tag{DR-M}$$

实际训练用 PPO 采样:每条轨迹 reset 时从 $p(\theta)$ 采 $\theta_k$,rollout 用 $\mathcal{M}_{\theta_k}$。常见随机化范围:

参数分布来源
Friction $\mu$$U(0.5, 1.5)$OmniH2O Appendix Table 16
Link mass$U(0.7, 1.3)\times m_\text{default}$OmniH2O / ANYmal
Control delay$U(20, 60)$ msOmniH2O
PD gain$U(0.75, 1.25)\times k_\text{default}$OmniH2O
Added torque$0.1\times\tau_\text{limit}$OmniH2O
External push$U(0, 1)$ m/s every 5sANYmal

哲学离线鲁棒性。策略对所有情况都「平均地」鲁棒,部署时遇到真机(任意一种情况)都能应对。

起源:OpenAI Hand [Andrychowicz 2018, arxiv:1808.00177] 用 DR 让五指手学会 manipulation,是 DR 的标志性应用。

理论边界:DR 训出的策略不是任何单一环境的最优——它是 $p(\theta)$ 平均意义下的最优,必然牺牲在真机 $\theta^\star$ 上的性能。这是 "conservative" 的来源:DR 策略倾向保守动作,不敢用满物理极限。

局限

  • 「平均鲁棒」≠「针对当前环境的最优」。策略会学到「保守」行为,不敢用满物理极限。
  • 当 $p(\theta)$ 取得太宽,训练任务变得不可解(policy 任何 $\theta$ 都失败);取得太窄覆盖不到真机 $\theta^\star$。
  • 无法应对 $p(\theta)$ 没建模的扰动(如未知地形类别)。

2. System Identification · 系统辨识

思路:反过来——实测真机参数 $\theta^\star$,把仿真「校准」得接近真机

形式化为最小二乘估计:在真机采一批 $(s_t, a_t, s_{t+1})$ 转移对,找 $\hat\theta$ 让仿真转移函数 $\mathcal{T}_\theta$ 最贴合真机:

$$\hat\theta = \arg\min_\theta \sum_{(s_t, a_t, s_{t+1})\in\mathcal{D}_\text{real}} \big\|\mathcal{T}_\theta(s_t, a_t) - s_{t+1}\big\|^2 + \lambda\|\theta - \theta_0\|^2 \tag{SysID}$$

后一项是正则(拉向 nominal $\theta_0$),防过拟合。求解用 L-BFGS 或 Bayesian sysID(MCMC 采样 $\theta$ 后验)。

SysID 实操指南(工程级)

以下是基于 ETH RSL(Hwangbo et al. 2019, ANYmal)、UC Berkeley(RMA, A1)、Stanford/UCSD(OmniH2O, H1)等公开论文 + 代码 + 社区经验整理的具体怎么干

第 1 步:电机/关节标定(Actuator Model

这是最重要也最费时的步骤。ETH 的做法(Hwangbo 2019 的核心贡献之一):

  1. 将机器人悬挂或固定在测试架上(确保关节自由运动)
  2. 对每个关节施加阶跃电流指令($i_q = 0 \to I_{max}/2$),记录编码器的位置和速度响应
  3. 拟合关节动力学模型:

$$\tau_\text{joint} = K_t \cdot i_q - \underbrace{b \cdot \dot{q}}_\text{粘性阻尼} - \underbrace{f_c \cdot \text{sign}(\dot{q})}_\text{库仑摩擦} - \underbrace{\tau_\text{stiction}}_\text{静摩擦(低速段)}$$

  1. $K_t$(扭矩常数)、$b$(阻尼系数)、$f_c$(库仑摩擦)通过最小二乘拟合
  2. 关键:非线性项(死区 $i_q < i_{dead}$ 时不输出、饱和 $i_q > i_{sat}$ 时被 clip)要单独标定
  3. ETH Hwangbo 2019 把这些标定结果编码成一个 actuator networkMLP),在仿真里替代 PD 解析模型,让仿真器的关节行为精确匹配真机

工程数值参考(Unitree A1/H1/G1 系列):

  • PD 增益:$K_p \in [20, 120]$(典型 55),$K_d \in [0.5, 5]$(典型 0.8)[RMA PDF Sec.IV.A]
  • 电机延迟:$20\text{-}60$ ms [OmniH2O DR Table]
  • 编码器分辨率:12-14 bit(0.01-0.05°)
  • 控制频率:100 Hz policy → PD → 1 kHz 电流环

第 2 步:摩擦系数测量

摩擦是最难测的参数之一,因为它是接触的属性(脚底 vs 地面),不是单方面的。

方法原理精度适用场景
斜面法把已知材质的板倾斜,测机器人开始滑的角度 $\alpha$,$\mu = \tan\alpha$粗($\pm 0.1$)实验室快速估
力传感器拖拽法用力传感器拖机器人,记录开始滑动时的力 $F$,$\mu = F / (mg)$中($\pm 0.05$)有力传感器时
sim-real trajectory match在真机和仿真里跑同一条轨迹,调 $\mu$ 直到 state divergence 最小精($\pm 0.02$)最常用
直接 DR不测,直接 $\mu \sim U(0.5, 1.5)$ 让 policy 自己鲁棒N/A最简单

工程经验:橡胶脚底 vs 水泥地 $\mu \approx 0.7\text{-}0.9$;橡胶 vs 冰面 $\mu \approx 0.05\text{-}0.15$;橡胶 vs 草地 $\mu \approx 0.5\text{-}0.7$。但 $\mu$ 随温度/湿度/磨损变化,所以永远要配 DR 使用

第 3 步:质量分布与惯量标定

  1. 总质量:直接称重($m_\text{total} = m_\text{robot} + m_\text{payload}$)
  2. CoM 位置:用静态平衡法——让机器人以不同姿态站立,测地面反力分布,反推 CoM。或者用摆动法——悬挂机器人让它自由摆,测周期反推惯量
  3. 连杆惯量:从 URDF 继承名义值,然后 DR $\sim U(0.7, 1.3) \times m_\text{nominal}$ [OmniH2O / ANYmal 标准]

关键:惯量是最难测准的参数。ETH 的策略是不试图精确测,而是用宽 DR 覆盖

第 4 步:PD 增益调参

RL policy 输出的是关节目标位置 $\hat{q}$,PD 控制器转为力矩 $\tau = K_p(\hat{q} - q) + K_d(\dot{\hat{q}} - \dot{q})$。$K_p, K_d$ 的选择直接影响 sim-real gap。

方法怎么做来源
仿真继承在仿真里先调好 $K_p, K_d$(用 grid search 让跟踪误差最小),直接搬到真机RMA($K_p=55, K_d=0.8$)
真机微调仿真值基础上手动微调(先 $K_p$ 后 $K_d$,$K_p$ 控制刚度,$K_d$ 控制阻尼)工程经验
Ziegler-Nichols先只开 $K_p$,增大到系统开始振荡→$K_u$,然后 $K_p = 0.6K_u$, $K_d = 1.2K_u / T_u$经典控制论
DR 覆盖$K_p \sim U(0.75, 1.25) \times K_p^\text{nominal}$ [OmniH2O DR Table]最简单

工程经验:Unitree 系列出厂 $K_p$ 通常 20-50;做 locomotion 要加大到 55-120(更刚硬的跟踪);做精细 manipulation 要降低到 10-30(更柔和)。$K_p$ 太大→振铃;$K_p$ 太小→软绵绵跟踪不上。

第 5 步:可辨识性分析

不是所有参数都能从 $(s, a, s')$ 数据唯一确定:

参数可辨识性原因策略
总质量 $m$✅ 可辨识直接影响重力项称重
CoM 偏移⚠️ 部分和惯量耦合静态平衡 + DR
关节阻尼 $b$❌ 难辨识和库仑摩擦 $f_c$ 耦合($\tau_\text{fric} = b\dot{q} + f_c \text{sign}(\dot{q})$)一起辨识或 DR
摩擦 $\mu$⚠️ 依赖接触对不是物体自身属性DR 覆盖
电机延迟✅ 可辨识从阶跃响应直接测阶跃测试
连杆惯量❌ 难辨识和 CoM 耦合DR 覆盖

规则:能精确测的(质量、电机参数、延迟)→ SysID;测不准的(摩擦、惯量、CoM)→ DR 覆盖。这是「ETH 三件套」的实践智慧。

第 6 步:验证

标定完怎么确认仿真和真机对齐了?

  1. trajectory replay:在真机上录一条轨迹 $(s_t, a_t, s_{t+1})$,在标定后的仿真里回放同一个 $a_t$ 序列,比较 $\|s_{t+1}^\text{sim} - s_{t+1}^\text{real}\|$
  2. success rate 对比:在仿真和真机上跑同一 policy,比较 success rate。$\Delta_\text{SR} < 10\%$ = 标定足够好
  3. 悬空测试:机器人吊起来,手动命令关节运动,看仿真预测 vs 真机实际
  4. 慢速行走测试:先在低速验证(失败可控),再加速

如果 sim-real gap 仍然大:要么 SysID 不准(重标定),要么 gap 来自未建模的 dynamics(上 ASAP 式 delta model)

典型识别参数

  • 摩擦系数(让仿真物体滑动距离匹配真机)
  • 关节摩擦、电机延迟(用阶跃响应拟合)
  • 质量分布、CoM offset(用静态平衡拟合)
  • PD 增益(用频率响应拟合)

哲学缩小 gap。让 $\theta_\text{sim} \to \theta^\star$,直接消除 DR 需要覆盖的不确定性。

优势:比纯 DR 精确,策略能更激进。和 DR 组合时 $p(\theta)$ 可以窄一些(围绕 $\hat\theta$)。

局限

  • 有些参数测不准(接触摩擦、软地形、温度依赖)。
  • 真机参数会随时间变化(磨损、温度、电池电压)——sysID 是一次性的、不跟踪时变。
  • 真机采数据本身要花钱(要安全跑 policy 才能 $(s, a, s')$)。

典型组合:先 sysID 得 $\hat\theta$,再以 $\hat\theta$ 为中心做窄带 DR $p(\theta)=\mathcal{N}(\hat\theta, \Sigma)$,兼顾精度和鲁棒性。

3. Teacher-Student / Privileged Learning · 师生蒸馏

思路:仿真里有「上帝视角」(真实 $\theta$、高度图、接触力),真机没有。那就分两层:teacher 用特权信息训练,student 蒸馏 teacher 的输出但只用本体感受。

形式化:定义特权信息 $e_t$(environment latent,含 $\theta$、地形、接触等),本体感受 $o_t$(关节角、IMU、历史)。

Stage 1(teacher):训 $\pi^T(a_t | o_t, e_t)$,最大化 privileged return:

$$\pi^T = \arg\max_\pi \mathbb{E}\!\left[\sum_t \gamma^t R(s_t, a_t)\right] \quad \text{via PPO, state} = (o_t, e_t) \tag{T1}$$

Stage 2(student distillation):训 $\pi^S(a_t | h_t)$,$h_t$ 是只用 $o$ 的隐式状态(如 $o$ 的历史窗口),最小化与 teacher 输出差异:

$$\pi^S = \arg\min_\phi \mathbb{E}_{(o, e)\sim\mathcal{D}_\text{rollout}}\big[\mathcal{L}\big(\pi^S_\phi(h_t),\,\mathrm{sg}(\pi^T(o_t, e_t))\big)\big] \tag{T2}$$

$\mathcal{L}$ 可以是:

  • MSE on action:$\|\pi^S(h_t) - \pi^T(o_t,e_t)\|^2$(DAgger 式,OmniH2O 用的:$\mathcal{L}=\|a^{privileged}_t - a_t\|^2_2$)。
  • KL on action distribution:$\mathrm{KL}(\pi^S \| \pi^T)$(连续动作用 Gaussian)。
  • Feature matching:蒸馏中间 hidden state 而非 action。

关键设计:DAgger rollout:student 在仿真里 on-policy rollout 产生 $\mathcal{D}_\text{rollout}$,再让 teacher 在这些 student 状态上标注。这样 student 的失败状态被反复标 → 学到 recover。这是和「固定数据集蒸馏」的本质区别。

和 asymmetric actor-critic 的区别:asymmetric actor-critic 是 critic 用特权信息(训练时),actor 不用(部署时),但 critic 和 actor 是同一个网络一起训。Teacher-student 是两个网络分两阶段:先训 teacher,再蒸馏 student。机制相似但流程不同。

代表

  • ANYmal [Lee et al. 2020, Science Robotics] 让「盲」ANYmal 稳走复杂地形。
  • OmniH2O(teacher 维 913、student 维 1665=25 步历史,DAgger 蒸馏)。
  • ANYmal-C in the wild [Miki 2022, Science Robotics]。

形式化总览

$$\underbrace{\pi^T(a|o, e)}_\text{teacher, privileged} \xrightarrow{\text{distill via DAgger}} \underbrace{\pi^S(a|h(o_{1:t}))}_\text{student, deployed} \tag{T-summary}$$

student 通过历史 $h$ 隐式估计 $e$——这是它能在没有特权信息时仍接近 teacher 的关键。

4. Online Adaptation · 在线适应(RMA 式)

思路:DR 给「平均鲁棒」,但部署时遇到的具体环境 $\theta^\star$ 可能不在 $p(\theta)$ 平均范围内。让策略在部署时实时推断当前环境参数,并调整行为

RMA 的两阶段(基于 PDF 正文 [Kumar 2021, Sec.4]):

Stage 1:用 PPO + privileged info 训 base policy $\pi(a_t|s_t, a_{t-1}, z_t)$。其中 $z_t = \mu(e_t) \in \mathbb{R}^8$ 是环境参数 $e_t \in \mathbb{R}^{17}$(质量 + 3 维 COM + 12 维电机强度 + 摩擦 + 局部地形高度)经 encoder $\mu$ 压成的 8 维 latent。Policy 输出关节目标位置(100 Hz)。

Stage 2:训 adaptation module $\phi$(1D causal temporal convolution,窗口 $T=50$ 步≈0.5 秒),从历史 $(s, a)$ 序列推断 $\hat{z}_t = \phi(h_t)$。监督信号是 Stage 1 encoder $\mu$ 的真值 $z_t$。部署时 $\phi$ 运行在 10 Hz,$\pi$ 运行在 100 Hz(异步设计,适配低成本机器人有限算力)。

数学形式

$$e_t \in \mathbb{R}^{17} \xrightarrow{\mu} z_t = \mu(e_t) \quad \text{(Stage 1, training)}$$

$$\hat{z}_t = \phi(s_{t-T}, a_{t-T}, \ldots, s_{t-1}, a_{t-1}) \quad \text{(Stage 2, deployment)}$$

$$a_t = \pi(s_t, a_{t-1}, \hat{z}_t) \quad \text{(base policy, 100 Hz)}$$

Stage 2 loss( supervised regression):

$$\phi = \arg\min_\phi \mathbb{E}\big[\|\phi(h_t) - \mathrm{sg}(z_t)\|^2\big] \tag{RMA-2}$$

注意 Stage 2 不再训 $\pi$(已固定)也不再有 RL,纯监督——所以训练快。

和 teacher-student 的关系:RMA Stage 1+2 ≈ teacher-student 的特殊形式——teacher 是 $\pi(\cdot|\cdot, z_t)$(用 privileged $e_t$),student 是 $\pi(\cdot|\cdot, \hat z_t)$(用历史估的 $\hat z_t$),区别在 RMA 显式参数化 $z$(可解释 17 维环境参数),teacher-student 的 latent 不可解释。

哲学在线适应。策略走几步就能「感觉」到这是沙地还是冰面,调整步态。RMA 的核心洞察:当机器人 command 某个关节运动时,实际运动和 command 的偏差取决于环境参数——因此从历史 $(s, a)$ 能反推环境。

代表:RMA [Kumar 2021, RSS]、A-RMA(双足)、DreamWaQ(隐式地形估计)、BeyondMimic(用 RMA 思想做 motion tracking 适配)。

方法间关系:实际工程是组合

方法解决什么数学形式层面
System ID缩小基础 gap$\hat{\theta} = \arg\min_\theta \\mathcal{T}_\theta - \mathcal{T}_\text{real}\^2$物理参数标定
DR覆盖剩余不确定性$\theta \sim p(\theta)$,$\max_\pi \mathbb{E}_{\theta}[J(\pi,\theta)]$离线鲁棒性
Teacher-Student让真机只靠本体感受$\min_\phi \\pi^S(h_t) - \pi^T(o_t, e_t)\^2$ via DAgger信息蒸馏
Online Adaptation针对当前环境优化$\hat{z}_t = \phi(h_t)$, $a_t = \pi(s_t, \hat{z}_t)$在线适应

DR 的形式化:训练时每步从分布 $p(\theta)$ 采样物理参数,让 $\pi$ 在所有可能 $\theta$ 上都 work。目标是 $\max_\pi \mathbb{E}_{\theta \sim p(\theta)}[J(\pi, \theta)]$(Bayesian)或 $\max_\pi \min_{\theta\in\Theta} J(\pi,\theta)$(robust)。

Teacher-Student 的形式化:Teacher $\pi^T(a|o, e)$ 用特权信息 $e$。Student $\pi^S(a|o)$ 只用本体感受。蒸馏 loss:

$$\min_{\pi^S} \mathbb{E}_{(o, e)\sim\mathcal{D}}\big[\mathcal{L}\big(\pi^S(h(o_{1:t})),\,\pi^T(o_t, e_t)\big)\big] \quad \text{(DAgger rollout)}$$

DAgger(Dataset Aggregation)的关键:student 自己 rollout 产生 $\mathcal{D}$ → teacher 在 student 状态上标注 → student 再训。这让 student 学到 recover 而非只在 nominal 上 work。

典型组合(ANYmal-C 式,工程最佳实践):

  1. System ID 校准基础物理参数 $\hat\theta$(一次性)。
  2. DR 围绕 $\hat\theta$ 做窄带随机化 $p(\theta) = \mathcal{N}(\hat\theta, \Sigma)$,覆盖剩余不确定性。
  3. Teacher-Student 让 student 只用本体感受(隐式编码特权信息 $e$ 进历史 $h$)。
  4. (可选)RMA 式在线适应微调 $\hat{z}_t = \phi(h_t)$,应对慢时变环境。

四步叠加才能拿到生产级 sim2real——单用任一步都不够。

开放问题

  • 剧烈动作(跳、翻滚)的 sim-real gap:DR 不够,ASAP 学 residual delta action model 弥合。形式上 ASAP 学一个 delta action $\Delta a$(transformer)让 $f_\text{sim}(s_t, a_t + \Delta a_t) \approx f_\text{real}(s_t, a_t)$,即用「修正过的仿真器」 fine-tune 策略。
  • 可变形/流体地形:物理建模本身就是难题,DR 和 system ID 都难。
  • 跨机器人形态:H1 训的策略能给 G1 用吗?需要 morphology-invariant 表示(如 GR00T N1 的 LAPA latent action)。
  • sim2real 评估:缺乏量化 reality gap 的协议——大多靠真机 demo 主观判断。

进阶方法(前沿扩展)

下面 6 节是对四种主流方法(DR / SysID / Teacher-Student / RMA)的现代扩展与跨视角补充,编号 5-10 延续上面的方法序列。

5. 可微仿真 · 梯度式系统辨识(现代前沿)

思路:传统 SysID 用无梯度优化(L-BFGS/Nelder-Mead)拟合 $\theta$,慢且不 scale。可微仿真器(Brax / MuJoCo MJX / Genesis / DiffTaichi)直接提供 $\partial\mathcal{T}_\theta / \partial\theta$,让 SysID 变成梯度下降问题。

数学形式:可微仿真器 $\mathcal{T}_\theta$ 对 $\theta$ 可微。给定真机数据 $\mathcal{D}_\text{real}$,SysID 变成:

$$\hat\theta = \arg\min_\theta \mathcal{L}(\theta), \quad \mathcal{L}(\theta) = \sum_t d\big(\mathcal{T}_\theta(s_t, a_t),\, s_{t+1}^\text{real}\big)$$

梯度可以直接反向传播

$$\nabla_\theta \mathcal{L} = \sum_t \frac{\partial d}{\partial \mathcal{T}} \cdot \frac{\partial \mathcal{T}_\theta(s_t, a_t)}{\partial \theta}$$

对比传统方法:

方法梯度速度可 scale代表
L-BFGS / Nelder-MeadETH ANYmal 2019
Bayesian MCMC无(采样)极慢传统控制
可微仿真DPSI [2411.00554]、gradSim、DiffTaichi

代表工作

  • DPSI [arXiv:2411.00554, 2024]:基于 DiffTaichi 的可微物理 SysID,用点云相似度函数算梯度,同时优化多个物理参数。
  • gradSim [NVIDIA, 2021]:统一可微渲染 + 多物理仿真框架,同时做参数估计和控制。
  • Real-time MPC + DiffSim [Chen 2022, arXiv:2202.09834]:在线 SysID + MPC,用可微仿真实时辨识。
  • Robot Model ID: A Modern Perspective [Lee 2024, 44 引]:综述,统一可微仿真式和 Bayesian 式 SysID。

局限

  • 可微物理的梯度可能不准(接触/碰撞的不可微性 → 梯度噪声/爆炸)[Zhong ICML 2023]
  • 需要可微仿真器支持(Brax/MJX/Genesis/DiffTaichi),MuJoCo 原生不可微
  • 参数可辨识性问题:不同 $\theta$ 可能产生相同轨迹(non-identifiability)[Bryutkin 2025]

6. Bayesian 系统辨识 · 不确定性量化

思路:传统 SysID 给点估计 $\hat\theta$,但真机参数有不确定性。Bayesian SysID 给后验 $p(\theta|\mathcal{D})$,可以直接喂给 DR 当 $p(\theta)$。

数学形式

$$p(\theta|\mathcal{D}_\text{real}) = \frac{p(\mathcal{D}_\text{real}|\theta)\,p(\theta)}{\int p(\mathcal{D}_\text{real}|\theta')\,p(\theta')\,d\theta'}$$

用 MCMC/VI 采样后验,然后把后验当 DR 分布:

$$\pi^\star = \arg\max_\pi \mathbb{E}_{\theta \sim p(\theta|\mathcal{D})}[J(\pi, \theta)]$$

和 DR 的天然结合:Bayesian SysID → 后验 → DR 分布。这是「先辨识再随机化」的 principled 版本——不是拍脑袋选 $p(\theta)$,而是用真机数据推断出最合理的 $p(\theta)$。

代表:Bayesian Object Models [Jatavallabhula CoRL 2023]——可微概率程序建模 latent 场景结构,用 Bayesian 推断物体动力学参数。

7. Reality Gap 量化

思路:怎么量化 sim-real gap 有多大?什么时候 DR 能覆盖、什么时候必须 SysID?

Reality Gap vs Performance Gap [arXiv:2510.20808, 2025 综述]:

  • Reality Gap:$\epsilon_\text{reality} = \|\mathcal{T}_\text{sim}(\cdot) - \mathcal{T}_\text{real}(\cdot)\|$(环境差异)
  • Performance Gap:$\Delta J = J_\text{sim}(\pi) - J_\text{real}(\pi)$(策略性能差异)

两者不等价——小 reality gap 可能导致大 performance gap(如果策略对 gap 敏感),反之亦然。

量化方法

  1. State trajectory divergence:$\sum_t \|s_t^\text{sim} - s_t^\text{real}\|^2$( rollout 同一 action 序列比较 state 差异)
  2. Success rate drop:$\Delta_\text{SR} = \text{SR}_\text{sim} - \text{SR}_\text{real}$(最实用)
  3. NVIDIA Isaac Lab 的三因子:approximation error(物理模型简化)、model error(参数不准)、unmodeled dynamics(没建模的动力学)

工程判断标准

  • $\Delta_\text{SR} < 10\%$ → DR 能覆盖,直接部署
  • $10\% < \Delta_\text{SR} < 30\%$ → 需要 SysID + 窄带 DR
  • $\Delta_\text{SR} > 30\%$ → 需要 ASAP 式 delta model 或 redesign

8. 接触丰富操作的 sim-to-real 特殊性

locomotion 的接触(脚-地面)相对简单,但灵巧操作的接触(指-物体)复杂得多:

为什么 contact-rich 更难

  • 接触是不连续的(stick-slip 瞬间切换),梯度不存在或爆炸
  • 接触面积小(指尖 vs 脚底),参数敏感度高
  • 摩擦不是单一系数——取决于表面微观结构、湿度、温度
  • 软指尖变形(BioTac/GelSight)在仿真里几乎无法精确建模

OpenAI Hand 的 ADR(Automatic DR)解决方案:

  • 不缩小 gap,而是自动扩大 DR 范围直到仿真覆盖真机
  • ADR 的边界自适应:performance 好→缩窄 DR(更精确),performance 差→扩宽 DR(更鲁棒)
  • 数学:ADR 维护 boundary $\phi^L_i, \phi^H_i$,entropy $H(P_\phi) = \frac{1}{d}\sum_i \log(\phi^H_i - \phi^L_i)$
  • 当 performance > $t_H$(阈值高)→ 扩张边界(探索更宽参数空间)
  • 当 performance < $t_L$(阈值低)→ 收缩边界(聚焦当前参数)
  • 这是 contact-rich sim2real 最成功的方案——不是缩小 gap 而是覆盖 gap

Visual Dexterity 的选择性 DR(MIT 2023):

  • 机器人物理参数(质量、惯量)用窄带 DR(参数相对确定)
  • 物体参数(摩擦、形状)用宽带 DR(跨物体泛化
  • 软指尖 + 随机扰动力补偿接触模型不准
  • 这是「分参数 DR」的思想——不同参数用不同 DR 策略

9. Sim-to-Real 的 MDP 视角分类法

[Da et al. 2025, arXiv:2502.13187] 提出按 MDP 四元素分类 sim2real 方法:

MDP 元素gap 来源对应方法
State $s$观测差异(渲染/传感器噪声)观察自适应、domain adaptation
Action $a$执行器差异(电机延迟/死区)action smoothing、sysID of motor
Transition $\mathcal{T}$动力学差异(物理参数不准)DR、SysID、可微仿真、ASAP
Reward $r$任务定义差异reward shaping、task transfer

这个分类法比传统「DR/DA/SysID」三分类更系统——它指出了 sim2real 的 gap 不只在 dynamics($\mathcal{T}$),还可能出在 state(观测)、action(执行)、reward(任务)。

10. 机器人-控制器 Co-Design

思路:不只是 $\theta$(物理参数)和 $\pi$(策略)分别优化,而是同时优化

数学

$$\max_{\theta, \pi} J(\pi, \theta) \quad \text{s.t.} \quad \theta \in \Theta_\text{feasible}$$

即同时优化机器人物理参数(URDF:连杆长度/质量/弹簧刚度)和控制策略。可微仿真器让这成为可能——梯度可以同时流到 $\theta$ 和 $\pi$。

意义:不只是让仿真器对齐真机(SysID),也不只是让策略适应真机(DR/RMA),而是改变机器人物理设计来让 sim-real gap 更小、策略更优。

当前状态:co-design 仍是前沿研究,主要在仿真阶段(优化 URDF 参数让 locomotion 更高效),真机验证少。但随着可微仿真器成熟,co-design 会成为 sim2real 的下一个前沿。

方法总表(最终版)

方法核心 idea数学优势局限代表
DR随机化 $\theta$ 让策略鲁棒$\max_\pi \mathbb{E}_{\theta}[J]$简单、通用保守、不可解OpenAI Hand
SysID实测 $\theta^\star$ 校准仿真$\min_\theta \\mathcal{T}_\theta - \mathcal{T}_\text{real}\^2$精确时变、测不准ETH ANYmal 2019
Bayesian SysID推断后验 $p(\theta\mathcal{D})$MCMC/VI → DR 分布有不确定性慢、需可辨识Bayesian Object Models
可微仿真 SysID梯度下降 $\theta$$\nabla_\theta \mathcal{L}$ via backprop快、可 scale梯度噪声、需可微仿真DPSI、gradSim
Teacher-Student蒸馏特权信息DAgger rollout distill无需真机数据两阶段复杂ANYmal-C
RMA在线推断环境$\hat{z}_t = \phi(h_t)$实时适应需要足够历史RMA 2021
ASAP学 delta action 补偿 gap$f_\text{sim}(s, a{+}\Delta a) \approx f_\text{real}(s, a)$剧烈动作 work需真机数据ASAP 2025
Co-Design同时优化 $\theta$ 和 $\pi$$\max_{\theta,\pi} J(\pi,\theta)$根本性改善前沿、真机少可微仿真
复盘:误区、检查点与 FAQ

常见误用

  • ❌ 「用了 DR 就能 sim-to-real」——剧烈动作的 sim-real gap DR 解决不了,需要 ASAP [2502.01143] 式 residual delta dynamics。
  • ❌ 「Teacher-Student 就是蒸馏」——蒸馏只是形式,关键是特权信息的隐式编码(student 从历史 $h$ 反推 $e$)。
  • ❌ 「RMA 替代 DR」——RMA 是补充,不是替代。没有 DR 的基础鲁棒性,RMA 适应不过来(分布外)。
  • ❌ 「sysID 一次到位」——真机参数时变(磨损、温度),需周期性 re-ID 或 RMA 兜底。
  • ❌ 「DR 范围越宽越好」——太宽训不动;太窄覆盖不到真机。论文经验:$U(0.7, 1.3)\times$ nominal 是常用 sweet spot。

常见误区

"用了第一招就能搬过去" —— 不一定。剧烈动作(跳、翻滚)的差距第一招覆盖不了,需要补一层"残差模型"。

三招各有适用范围,实际工程常常组合使用。

"把仿真调得完全等于真机就够了" —— 做不到。摩擦、温度、磨损会随时间变,一次标定吃不了永久。

标定只解决静态差距,动态变化要靠在线适应兜底。

"随机化范围越宽越好" —— 错。太宽训不动,太窄覆盖不到真机。经验值多在名义值的 0.7 到 1.3 倍。

范围要刚好包住真机参数的不确定性。

检查点

Q1

用一句话说清这套方法在解决什么共同问题?

💡 显示参考答案
  • 入门层「是什么·为什么」段直接说明。
Q2

三种主流招数分别对应什么思路?

💡 显示参考答案
  • 相应段落 + 直觉层 类比共同支撑。
Q3

飞行模拟器这个类比里,"模拟器省钱省命"对应仿真训练的什么优势?

💡 显示参考答案
  • 常见误区或 入门层 关键句直接说明。
Q4

为什么"把仿真调得完全等于真机"做不到?举一个会时变的参数。

💡 显示参考答案
  • 入门层 关键句或常见误区直接说明。
Q5

假如你的机器人要在沙地和冰面之间切换工作,哪一招最关键?为什么?

💡 显示参考答案
  • 入门层 应用提示。

FAQ

Q1:仿真和真机为什么一定有差距?

物理世界太难精确建模。摩擦随温度湿度变,电机响应非线性,地面不是解析函数。仿真只是近似。

Q2:三招必须一起用吗?

不必须,但工程最佳实践是叠加。先标定基础参数,再随机化覆盖剩余不确定性,最后让策略在线适应慢变化。

Q3:为什么剧烈动作比走路更难迁移?

剧烈动作对接触和惯性极敏感。微小的物理误差会被放大成完全不同的轨迹。走路节奏稳定,误差能被平均掉。


深度辨析 → site/concepts/C-sim2real-methods.html

相关

2026 最新前沿

Actuator Reality Shaping(arXiv:2607.02205, 2026)

突破:不是在仿真里加 DR 覆盖 gap,而是直接对仿真器里的 actuator(伺服电机)模型做「现实塑造」——让仿真器里的电机扭矩-速度曲线、死区、摩擦匹配真机。效果:substantially reduces tracking error,实现 zero-shot sim-to-real。

和传统 SysID 的区别:SysID 辨识的是物理参数 $\theta$(质量/摩擦/惯量),Reality Shaping 辨识的是 actuator 模型本身(电机内部的非线性特性)。这是 SysID 的细化——从「机器人物理参数」下沉到「电机内部模型」。

Trajectory-based Actuator ID via Differentiable Simulation(arXiv:2604.10351, 2026)

突破:用可微仿真器从编码器运动数据(不需要力/扭矩传感)拟合系统级 actuator 模型。这是可微仿真 SysID 在 2026 的最新应用——不需要额外传感、只从已有的编码器信号就能辨识。

Active Exploration System ID(ASID, arXiv:2505.14266, 2025→2026 持续)

突破:机器人自主探索来采集最有信息量的数据辨识参数——不是被动收集 $(s, a, s')$ 数据,而是主动选择「最能区分不同 $\theta$ 的动作」。这是 optimal experimental design 思想在 robot SysID 上的应用。

Heavy-loaded Humanoid Sim-to-Real(arXiv:2603.15084, 2026)

突破:重载场景(人形扛重物)的 sim2real gap 更大——惯性变化、连杆形变、电机负载效应。这篇针对重载做了专门的 actuator 建模和参数辨识。

2026 趋势总结

sim2real 在 2026 的趋势从「整体物理参数辨识」下沉到 actuator 级别建模:不是辨识「摩擦系数」而是辨识「电机内部的扭矩-速度-死区曲线」。这反映了社区对 gap 来源理解的深化——gap 不只来自宏观物理参数,更来自电机内部非线性。Actuator Reality Shaping + 可微仿真 + 主动探索是 2026 的三个关键词。