概念辨析 · Sim-to-Real 的各种方法
这组方法经常被混用,但它们解决的是不同层面的问题,实际工程中是组合使用。
💡 一句话总结:sim2real 不是单一方法而是按 gap 来源组合——能精确测的物理参数(质量/电机/延迟)用 SysID、测不准的(摩擦/惯量)用 Domain Randomization 覆盖、仿真有特权信息用 Teacher-Student 蒸馏、慢时变环境用 RMA 在线适应;四步叠加才是生产级。
速查:何时用哪个
| 场景 | 推荐 | 原因 |
|------|------|------|
| 能精确测的参数(质量、电机延迟、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)$ ms | OmniH2O |
| 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 5s | ANYmal |
哲学:离线鲁棒性。策略对所有情况都「平均地」鲁棒,部署时遇到真机(任意一种情况)都能应对。
起源: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 的核心贡献之一):
- 将机器人悬挂或固定在测试架上(确保关节自由运动)
- 对每个关节施加阶跃电流指令($i_q = 0 \to I_{max}/2$),记录编码器的位置和速度响应
- 拟合关节动力学模型:
$$\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{静摩擦(低速段)}$$
- $K_t$(扭矩常数)、$b$(阻尼系数)、$f_c$(库仑摩擦)通过最小二乘拟合
- 关键:非线性项(死区 $i_q < i_{dead}$ 时不输出、饱和 $i_q > i_{sat}$ 时被 clip)要单独标定
- ETH Hwangbo 2019 把这些标定结果编码成一个 actuator network(MLP),在仿真里替代 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 步:质量分布与惯量标定
- 总质量:直接称重($m_\text{total} = m_\text{robot} + m_\text{payload}$)
- CoM 位置:用静态平衡法——让机器人以不同姿态站立,测地面反力分布,反推 CoM。或者用摆动法——悬挂机器人让它自由摆,测周期反推惯量
- 连杆惯量:从 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 步:验证
标定完怎么确认仿真和真机对齐了?
- trajectory replay:在真机上录一条轨迹 $(s_t, a_t, s_{t+1})$,在标定后的仿真里回放同一个 $a_t$ 序列,比较 $\|s_{t+1}^\text{sim} - s_{t+1}^\text{real}\|$
- success rate 对比:在仿真和真机上跑同一 policy,比较 success rate。$\Delta_\text{SR} < 10\%$ = 标定足够好
- 悬空测试:机器人吊起来,手动命令关节运动,看仿真预测 vs 真机实际
- 慢速行走测试:先在低速验证(失败可控),再加速
如果 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 式,工程最佳实践):
- System ID 校准基础物理参数 $\hat\theta$(一次性)。
- DR 围绕 $\hat\theta$ 做窄带随机化 $p(\theta) = \mathcal{N}(\hat\theta, \Sigma)$,覆盖剩余不确定性。
- Teacher-Student 让 student 只用本体感受(隐式编码特权信息 $e$ 进历史 $h$)。
- (可选)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-Mead | 无 | 慢 | 差 | ETH 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 敏感),反之亦然。
量化方法:
- State trajectory divergence:$\sum_t \|s_t^\text{sim} - s_t^\text{real}\|^2$( rollout 同一 action 序列比较 state 差异)
- Success rate drop:$\Delta_\text{SR} = \text{SR}_\text{sim} - \text{SR}_\text{real}$(最实用)
- 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 倍。
范围要刚好包住真机参数的不确定性。
检查点
用一句话说清这套方法在解决什么共同问题?
💡 显示参考答案
- 入门层「是什么·为什么」段直接说明。
三种主流招数分别对应什么思路?
💡 显示参考答案
- 相应段落 + 直觉层 类比共同支撑。
飞行模拟器这个类比里,"模拟器省钱省命"对应仿真训练的什么优势?
💡 显示参考答案
- 常见误区或 入门层 关键句直接说明。
为什么"把仿真调得完全等于真机"做不到?举一个会时变的参数。
💡 显示参考答案
- 入门层 关键句或常见误区直接说明。
假如你的机器人要在沙地和冰面之间切换工作,哪一招最关键?为什么?
💡 显示参考答案
- 入门层 应用提示。
FAQ
Q1:仿真和真机为什么一定有差距?
物理世界太难精确建模。摩擦随温度湿度变,电机响应非线性,地面不是解析函数。仿真只是近似。
Q2:三招必须一起用吗?
不必须,但工程最佳实践是叠加。先标定基础参数,再随机化覆盖剩余不确定性,最后让策略在线适应慢变化。
Q3:为什么剧烈动作比走路更难迁移?
相关
- 线索:T01-sim2real-locomotion.md(locomotion sim2real 演进四阶段)
- 论文:P-RMA-2021.md、P-ASAP-2025.md(delta action model)、P-OmniH2O-2024.md(teacher-student + DAgger 实例)、P-OpenAIHand-2018.md(ADR 自动 DR)、P-VisualDexterity-2023.md(选择性 DR + contact-rich)
- 概念:C-safety-and-deployment.md(部署时的安全 filter 是 sim2real 之外的另一层保护)、C-rl-to-control-bridge.md(RL+MPC 结合 = 安全 filter 的实现)
- 综述:[Da et al. 2025, arXiv:2502.13187] MDP 视角 sim2real 综述(82 引)、[Lee et al. 2024] Robot Model ID 综述(44 引)、[arXiv:2510.20808, 2025] Reality Gap 综述
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 的三个关键词。