跳转至

仿真世界构建与物理规则

机器人仿真并不是“把几个资产扔进仿真器”那么简单。真正能用于训练、评测、部署迁移的仿真世界,必须同时回答三个问题:

  1. 世界是怎么组织的?
  2. 世界遵循什么物理规则?
  3. 这个世界如何被验证、随机化并服务于 Sim2Real?

这篇笔记讨论的不是单个资产,而是资产如何组成世界。它位于 仿真资产 之后、仿真平台 之下、Sim2Real 之前:前者告诉你“零件是什么”,本文告诉你“零件如何拼成一个可运行、可训练、可迁移的宇宙”。


1. 世界构建总论

1.1 什么是“仿真世界”

在具身智能里,世界(World)通常不是单纯的 3D 场景文件,而是以下几个对象的组合:

\[ \text{World} = \text{Scene Graph} + \text{Physics Rules} + \text{Task Logic} + \text{Reset Logic} + \text{Observation Interfaces} \]

也就是说,一个世界至少要同时定义:

  • 哪些实体存在
  • 它们如何组织
  • 它们如何运动和接触
  • 任务何时开始和结束
  • 策略能看到什么、能控制什么

1.2 世界、场景、任务、episode 的层次

概念 含义 典型例子
World 最大容器,包含场景、规则、任务接口 KitchenPickWorld
Scene 静态或半静态空间布局 厨房台面、仓储通道
Task 目标定义与成功标准 Pick red mug
Episode 单次 roll-out 一次从 reset 到 done 的执行
Domain 参数分布与随机化空间 光照、摩擦、噪声分布
Benchmark 一组标准化任务与评测协议 LIBERO、RLBench、SIMPLER

1.3 一个“好世界”应满足什么条件

维度 要求
正确性 物理、坐标、传感器、任务逻辑一致
稳定性 长时间 roll-out 不炸
可控性 reset、采样、随机化都可配置
可复现性 seed 固定后可复现
可扩展性 能加新资产、新任务、新传感器
可迁移性 能服务 Sim2Real

1.4 从平台视角看世界构建

graph TD
    A[仿真平台] --> B[资产载入]
    B --> C[世界层次组织]
    C --> D[物理规则配置]
    D --> E[传感器和观测]
    E --> F[任务逻辑和奖励]
    F --> G[reset / randomization / evaluation]

    style A fill:#e3f2fd
    style B fill:#fff3e0
    style C fill:#e8f5e9
    style D fill:#fce4ec
    style E fill:#f3e5f5
    style F fill:#ede7f6
    style G fill:#fff8e1

1.5 为什么世界层是最容易被低估的工程层

算法工程师常常默认以下前提:

  • reset 总是干净的
  • 接触总是稳定的
  • 相机总是朝对方向
  • 同一个任务在并行环境里行为一致

实际项目里,这些都要靠世界层来保证。很多训练结果看上去像是算法差异,实质上是世界层的系统偏差。


2. 世界组织与层次结构

2.1 通用层次结构

一个通用仿真世界通常可以拆成:

graph TD
    W[World] --> S[Scene]
    S --> E[Entity]
    E --> C[Component]
    E --> T[Task Hooks]
    C --> P[Physics]
    C --> R[Render]
    C --> N[Sensor]
    T --> Reset[Reset Logic]
    T --> Reward[Reward / Success Logic]

2.2 世界组织的常见风格

风格 代表系统 特点
树状场景图 USD, Smallville 层次清晰、组合性强
worldbody 递归体 MuJoCo 物理与层次耦合紧密
ECS / component Unity, 部分仿真引擎 解耦性强
配置驱动 world + task Isaac Lab, ManiSkill 与训练流程结合好

2.3 Smallville 树结构的启示

虚拟世界仿真引擎 里的 Smallville 看似是社会仿真,不是机器人平台,但它有一个非常重要的工程思想:世界不是一张图,而是一棵带语义的树。

World
├── House
│   ├── Kitchen
│   │   ├── Table
│   │   └── Cup
│   └── Bedroom
└── Cafe

对机器人仿真也是一样。树结构的好处是:

  • 更容易管理局部变换
  • 更容易做部分加载
  • 更容易做语义继承

2.4 USD scene graph

USD 的世界组织优势在于:

  • 引用(reference)
  • 实例化(instance)
  • layer 叠加
  • 变换继承

这使得一个世界可以由多个子层拼装:

  • 基础建筑层
  • 家具布局层
  • 机器人层
  • 灯光层
  • 任务对象层
  • 随机化覆盖层

2.5 SDF world

SDF 更接近“完整世界定义文件”:

  • world
  • model
  • link
  • joint
  • light
  • physics
  • plugin

对 Gazebo 来说,世界构建不仅是摆东西,也是把模拟引擎设置、传感器插件、话题桥接写进统一描述。

2.6 MuJoCo worldbody

MuJoCo 的世界组织更强调:

  • body 递归层次
  • geom 与 joint 的紧耦合
  • contact / actuator / sensor 的统一物理视角

它不天然像 USD 那样适合大型协作资产库,但对研究型世界构建非常高效。

2.7 组织边界:什么该做成 entity,什么该做成 component

对象 建议
机器人 独立 entity
抽屉 独立 entity,内部再细分部件
灯光 可做成 scene component 或独立 entity
传感器 rig 通常挂在 entity 上,但作为可复用 component 管理
任务成功判定 不是实体,而是 world/task layer 逻辑

2.8 世界层次设计 Checklist

项目 问题
根坐标系 所有对象是否有明确 root frame
命名 scene graph 名称是否稳定
组合性 新资产能否方便插入
局部重置 是否支持只重置任务对象
语义标签 是否能从层次中恢复语义类别

3. 坐标系与时间系统

3.1 为什么坐标系错误比物理错误更常见

训练失败最常见的低级 bug 之一就是 frame 错误:

  • 相机 frame 错
  • 末端工具坐标错
  • 物体 pose 以错误参考系表达
  • 奖励函数在 world frame 里算,动作却在 robot frame 下施加

3.2 常见坐标系

坐标系 作用
world 全局参考
map 长时稳定定位参考
base_link 机器人底座
tool0 / tcp 末端执行器
camera_frame 相机本体
camera_optical_frame 视觉投影约定
object_frame 物体自身参考

3.3 变换链

位姿变换的核心关系是:

\[ {}^{A}\mathbf{T}_{C} = {}^{A}\mathbf{T}_{B} \cdot {}^{B}\mathbf{T}_{C} \]

这在世界构建里几乎无处不在:

  • 机器人 base 到 camera
  • world 到 object
  • table 到 mug
  • mug 到 grasp pose

3.4 操作任务里常见的 frame 选择

任务 更推荐的参考系 原因
末端位姿控制 robot base / tool frame 更稳定
物体抓取 object frame + tool frame 便于定义 grasp
导航 map / world 便于规划
多相机融合 world + camera rig 便于外参一致性

3.5 时间系统

除了空间坐标,世界还必须有时间系统:

概念 说明
simulation time 仿真时钟
wall-clock time 实际运行时间
fixed step 固定物理步长
render step 渲染频率
sensor step 传感器刷新频率
control step 控制输出频率

3.6 常见时间关系

设:

  • 物理步长 \(\Delta t_p\)
  • 控制步长 \(\Delta t_c\)
  • 传感器步长 \(\Delta t_s\)
  • 渲染步长 \(\Delta t_r\)

通常需要满足:

\[ \Delta t_p \le \min(\Delta t_c, \Delta t_s, \Delta t_r) \]

否则就会出现控制频率高于状态更新频率、传感器数据与状态不同步等问题。

3.7 real-time factor

真实时间因子定义为:

\[ \text{RTF} = \frac{\text{simulated time}}{\text{wall-clock time}} \]
  • RTF > 1:仿真比真实时间快
  • RTF = 1:实时仿真
  • RTF < 1:仿真拖慢

训练环境希望 RTF 尽可能大;人机联调和数字孪生则更关心接近 1。

3.8 坐标和时间层的调试手段

问题 调试方法
frame 错误 tf 可视化、绘制坐标轴、手工验证 pose
时间不同步 记录时间戳、检查 sensor/control lag
optical frame 错误 可视化投影方向
render / physics 脱节 关闭渲染看物理是否仍异常

4. 刚体动力学基础

4.1 本节的边界

本节不重复 动力学 中的系统推导,而聚焦于“仿真器如何实现一个刚体世界的最小动力学闭环”。

4.2 刚体状态

一个刚体最基本的状态包括:

  • 位置 \(\mathbf{x}\)
  • 姿态 \(\mathbf{R}\) 或四元数 \(\mathbf{q}\)
  • 线速度 \(\mathbf{v}\)
  • 角速度 \(\boldsymbol{\omega}\)

4.3 动力学方程

对刚体的平动,有:

\[ m \dot{\mathbf{v}} = \sum \mathbf{F} \]

对转动,有:

\[ \mathbf{I}\dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega}) = \sum \boldsymbol{\tau} \]

对仿真器而言,世界构建者至少要提供:

  • 质量
  • 惯量
  • 外力(含重力)
  • 约束和接触

4.4 重力不是唯一外力

在世界层里,常见外力来源包括:

  • 重力
  • 接触力
  • 执行器输出
  • 弹簧/阻尼
  • 风场/流体近似
  • 手工扰动(domain randomization / robustness testing)

4.5 资产参数如何进入动力学

资产字段 动力学作用
mass 决定平动响应
inertia 决定转动响应
center_of_mass 决定重心和姿态稳定性
joint damping 决定速度耗散
friction 决定接触切向约束
stiffness 决定弹性约束强度

4.6 自由体和受约束体

对象 特征
自由体 6-DoF,自由移动
固定体 与世界刚性连接
关节约束体 运动受关节类型限制
接触体 受环境接触条件约束

4.7 物理世界中的能量视角

训练环境里很多“奇怪抖动”可以从能量角度理解:

  • 注入过大驱动力
  • 阻尼不足
  • 接触解过于刚硬
  • 积分器误差导致系统“凭空生能量”

4.8 刚体动力学在世界模板中的体现

世界模板 最关键的刚体问题
桌面抓取 目标物是否稳定站立
抽屉操作 关节和接触耦合
插拔装配 高精度接触和小公差
四足地形 足端接触和本体惯量
人形搬运 大质量载荷和全身稳定性

5. 接触与碰撞规则

5.1 为什么接触是世界构建最难的一环

“世界能跑”与“世界可信”之间,最大差距往往就在接触。

物体只要不碰撞,很多问题都简单:

  • 刚体积分
  • 关节约束
  • 视觉观测

一旦涉及:

  • 抓取
  • 插入
  • 堆叠
  • 行走触地
  • 推动和摩擦

接触规则就成为系统核心。

5.2 broad phase 与 narrow phase

flowchart LR
    A[所有几何体] --> B[Broad Phase<br/>筛掉显然不接触的 pair]
    B --> C[Narrow Phase<br/>计算实际接触点/穿透]
    C --> D[Constraint / Contact Solver]

Broad phase 常见目标:

  • 快速缩小候选 pair
  • 减少不必要精确检测

Narrow phase 常见输出:

  • 接触点
  • 法向
  • 穿透深度
  • 接触 patch

5.3 穿透与约束

接触通常被建模为约束问题。理想情况下,法向穿透应满足:

\[ \phi(\mathbf{x}) \ge 0 \]

其中 \(\phi(\mathbf{x})\) 表示物体之间的间隙函数。若 \(\phi < 0\),则表示发生穿透。

5.4 摩擦锥

接触切向力通常满足摩擦锥约束:

\[ \|\mathbf{f}_t\| \le \mu f_n \]

其中:

  • \(\mathbf{f}_t\) 为切向摩擦力
  • \(f_n\) 为法向接触力
  • \(\mu\) 为摩擦系数

这就是为什么地面、轮胎、夹爪 pad、物体表面材质设置对仿真效果至关重要。

5.5 恢复系数与弹跳

恢复系数决定碰撞后速度反弹程度。过大时会:

  • 让桌面物体像球一样弹跳
  • 让插入任务变得不真实

过小则:

  • 某些需要回弹的任务不自然
  • 碰撞显得“黏”

5.6 contact offset / rest offset

许多平台允许设置:

  • contact offset:何时开始认为即将接触
  • rest offset:稳定接触时允许的接近距离

它们本质上是数值策略,不是现实世界“真实参数”,但对世界稳定性影响极大。

5.7 接触规则的工程取舍

目标 取舍策略
更真实 更复杂碰撞几何、更细 solver
更稳定 更粗碰撞代理、更大 buffer、更高阻尼
更快 更少接触 pair、更低几何复杂度
更可训练 牺牲一部分极端真实性,换可控性

5.8 典型接触问题

问题 表现
卡入/穿透 物体互相嵌入
接触抖动 夹持或堆叠时高频振荡
虚假弹跳 轻碰就飞
摩擦过强 推不动或拖不动
摩擦过弱 目标总滑走

5.9 世界构建中的接触检查

应至少验证:

  1. 目标物静置在台面不漂移
  2. 手爪闭合后不会瞬间穿透
  3. 多物体堆叠不会持续抖动
  4. 足端触地不出现非物理弹射

6. 关节、驱动与约束

6.1 关节类型

关节类型 自由度 典型用途
Fixed 0 刚性连接
Revolute / Hinge 1 门、机械臂、轮轴
Prismatic 1 滑台、抽屉
Spherical 3 球铰
Planar 3 特殊平面机构
Floating 6 自由基体

6.2 关节限制

世界层中的 joint limit 通常包含:

  • 位置范围
  • 速度上限
  • 力矩/推力上限
  • 软限位或硬限位

如果 limit 不合理:

  • 关节超出真实结构
  • 强化学习学到非物理动作
  • Sim2Real 直接失败

6.3 驱动模型

驱动类型 含义 适用
Position drive 跟踪目标位置 工业臂、低速精控
Velocity drive 跟踪目标速度 底盘、滑轨
Torque drive 直接施加力矩 研究和高性能控制
Impedance drive 位置/速度/力混合 接触任务

6.4 刚度与阻尼

在许多仿真器中,关节驱动可以近似写成:

\[ \tau = K_p (q_d - q) + K_d (\dot{q}_d - \dot{q}) \]

其中:

  • \(K_p\) 决定刚度
  • \(K_d\) 决定阻尼

这就是为什么世界构建时“关节参数”和控制理论天然相连。

6.5 mimic、tendon 与闭链

有些世界模板不能只靠简单树结构:

  • 夹爪双指常需要 mimic
  • 绳索和弹簧需要 tendon
  • 并联机构和四连杆需要闭链约束

6.6 约束类型

约束 例子
几何约束 球铰、滑轨
接触约束 物体碰撞后不得穿透
运动学约束 闭链机构
驱动约束 电机输出限制
任务约束 末端保持朝向、保持抓持

6.7 约束越多不一定越好

过度约束会导致:

  • 约束冲突
  • solver 难收敛
  • 系统刚性过强
  • 并行环境中偶发爆炸

6.8 关节与约束的世界构建检查

检查项 验证方式
轴向 手工转动并观察
limit 扫描边界姿态
drive 测 step response
mimic/tendon 联动是否正确
闭链 是否出现约束发散

7. 数值积分与稳定性

7.1 为什么“一改 dt 就炸”

很多工程师第一次遇到这个问题会困惑:明明资产没变、控制器没变,只把时间步从 1/240 改到 1/60,系统就炸了。

这是因为仿真世界不是纯静态描述,而是一个被数值积分器近似求解的动态系统。

7.2 常见积分方法

积分器 特点
Explicit Euler 简单、快,但稳定性差
Semi-implicit Euler 常见于物理引擎,稳定性更好
RK4 精度高,但代价更高
Implicit methods 对刚性系统更稳定

7.3 最简单的显式 Euler

对状态变量 \(x\),显式 Euler 为:

\[ x_{t+1} = x_t + \Delta t \cdot \dot{x}_t \]

若系统刚性高、\(\Delta t\) 过大、驱动力强,这个近似就会快速失真。

7.4 Substep 与 solver iteration

世界构建里常见两个稳定性旋钮:

  • substep:每个控制步里再细分多个物理步
  • solver iteration:每步里多次迭代约束求解
参数 增大后通常带来的效果
substep 更稳定、更慢
solver iteration 接触更稳、更慢
dt 更大更快,但更不稳定

7.5 刚性系统的稳定性来源

最容易引发刚性的是:

  • 高刚度关节
  • 高硬度接触
  • 极小质量物体与大力矩混用
  • 非常尖锐的碰撞几何

7.6 为什么 RL 环境常用更小 dt

因为 RL 会:

  • 探索极端动作
  • 在并行环境里放大少数异常
  • 长时间 roll-out 累积误差

所以即使 human demo 看起来在粗步长下也能跑,训练环境仍可能需要更细时间步。

7.7 数值稳定性的经验规则

场景 常见建议
桌面操作 中等 dt + 足够 solver iteration
插拔装配 小 dt + 细接触模型
四足 locomotion 高频 control + 足端稳定接触
人形全身控制 小 dt + 更严格的 joint 和 contact 调参

7.8 典型稳定性问题

问题 根因候选
抖动 dt 大、阻尼小、接触过硬
爆炸 惯量异常、约束冲突、极端 action
慢漂移 积分误差、接触残差
夹持时震荡 摩擦/刚度/solver 组合不当

7.9 稳定性调参顺序

建议顺序:

  1. 先查资产质量
  2. 再查 dt / substep / solver
  3. 再查关节刚度阻尼
  4. 最后才查控制器或 RL policy

7.10 稳定性 smoke test

flowchart TD
    A[静置 10 秒] --> B[自由落体]
    B --> C[接触堆叠]
    C --> D[关节全范围扫描]
    D --> E[重复 reset 100 次]
    E --> F[并行环境异常检测]

8. 传感器仿真规则

8.1 传感器规则与资产规则的区别

仿真资产 讨论的是“传感器对象本身如何建模”。本节讨论的是:

  • 它如何采样
  • 它如何延迟
  • 它如何加噪声
  • 它如何和 world/control time 对齐

8.2 采样频率

传感器 常见范围
RGB Camera 10-60 Hz
Depth Camera 10-30 Hz
LiDAR 5-20 Hz
IMU 100-1000 Hz
Joint State 100-1000 Hz
Force/Torque 100-1000 Hz

8.3 延迟模型

延迟可以粗分为:

  • 感知延迟
  • 通信延迟
  • 控制执行延迟

对训练来说,如果这些延迟全省略,world 会比现实“更好控制”,导致部署时策略变脆。

8.4 噪声模型

传感器 噪声来源
RGB 读出噪声、曝光变化、运动模糊
Depth 空洞、量化、反光失败
LiDAR beam noise、dropout、多径近似
IMU bias drift、white noise
Encoder 量化误差、偏置
Force/Torque 漂移、饱和、低通滤波效应

8.5 rolling shutter 与 global shutter

如果世界里有高速运动,rolling shutter 会让图像中的几何形变与真实相机更接近。若完全忽略:

  • 训练视觉策略可能过于乐观
  • 手眼协作的快速动作部署时可能掉性能

8.6 深度空洞与透明反光问题

真实 RGB-D 相机常见问题:

  • 透明物体深度失败
  • 反光金属深度异常
  • 边缘空洞
  • 远距噪声增大

如果仿真里深度图“无条件完美”,那很多操作策略部署时会受到明显打击。

8.7 传感器时序同步

世界层必须决定:

  • 相机与 joint state 是否同帧
  • depth 是否滞后于 RGB
  • IMU 是否高频插值
  • 多相机是否严格同步

8.8 传感器规则检查清单

项目 问题
频率 是否符合目标硬件
延迟 是否被建模
噪声 是否存在且可控
多模态同步 是否定义清楚
数据时间戳 是否能回放验证

9. 渲染与视觉世界规则

9.1 视觉世界不仅是“看起来好”

渲染规则决定的不只是展示效果,还决定:

  • 训练图像分布
  • 目标检测难度
  • domain gap 大小
  • 数据生成可控性

9.2 光照模型

规则 含义
Direct lighting 直接光照
Indirect / bounce light 间接反射
Shadow 阴影规则
Specular highlight 高光
Ambient / dome 环境光

9.3 PBR 与后处理

视觉世界规则常涉及:

  • PBR 材质响应
  • Bloom
  • Tonemapping
  • Auto exposure
  • Motion blur
  • Depth of field

训练里不一定都要开,但要明确开/关的理由。

9.4 HDR 与曝光

高动态范围光照和自动曝光对真实感很重要,但也可能把训练输入分布拉得过宽。常见策略:

  • 训练时用受控曝光范围
  • 评测时再扩大范围

9.5 视觉 domain gap 的来源

来源 例子
光照 现实里顶灯方向和强度经常变
材质 真实表面更脏、更旧、更不均匀
相机 噪声、压缩、模糊、白平衡变化
背景 家庭和工位不会总是干净
传感器缺陷 depth 空洞、镜头畸变

9.6 视觉世界规则中的工程取舍

目标 做法
稳定训练 限制视觉分布范围
泛化鲁棒 扩大光照/材质/背景随机化
高保真演示 打开高质量渲染和后处理
大规模并行 降低渲染开销,甚至不用图像

9.7 渲染规则验证

检查项包括:

  • 相机视角覆盖是否正确
  • 阴影是否遮挡关键目标
  • 亮暗对比是否过度
  • 透明和反光资产是否表现合理
  • 随机化后图像分布是否符合预期

10. 世界生成方法

10.1 手工场景搭建

优点:

  • 可控
  • 便于调试
  • 适合 demo

缺点:

  • 多样性差
  • 难以规模化
  • 人工维护成本高

10.2 模板化布局

模板化场景通常固定一类骨架:

  • 桌子固定在中心
  • 相机 rig 固定在四周
  • 目标物从若干 anchor 中采样

这种方式是许多训练环境的主流做法。

10.3 程序化生成

程序化生成并不是“随便随机”,而是受约束采样:

\[ x \sim p(x \mid \text{constraints}) \]

约束可包括:

  • 物体不能重叠
  • 抽屉必须在柜体中
  • 相机视野里必须看得到目标
  • 起始姿态必须可达

10.4 参数化任务组合

参数 例子
目标对象 红杯子/蓝杯子/盒子
目标位置 左/中/右
场景布局 单桌/双桌/带障碍
光照 顶灯/侧光/背光
背景干扰 有/无其他杂物

10.5 课程学习式生成

世界生成也可以服务 curriculum:

  1. 初期:空场景、少物体、轻扰动
  2. 中期:增加光照变化和背景物
  3. 后期:加入遮挡、干扰物、复杂接触

10.6 资产采样与 placement sampling

核心问题包括:

  • 采样哪个资产实例
  • 放在哪里
  • 朝向如何选
  • 是否与其他对象冲突

10.7 干扰物采样

很多泛化能力来自干扰物,不是来自目标对象本身。采样干扰物时应考虑:

  • 视觉上是否遮挡目标
  • 物理上是否阻塞路径
  • 语义上是否混淆目标类别

10.8 世界生成策略对比

方法 优点 缺点
手工搭建 最可控 最不 scalable
模板化 工程性强 多样性有限
程序化生成 覆盖广 约束设计复杂
学习式生成 潜力大 可控性和可靠性仍是问题

批量 world 布局与复制环境界面

图:世界生成一旦进入批量训练阶段,重点就不再只是“场景里有什么”,而是“如何复制环境、如何统一物理设置、如何让批量 world 可视化和可调试”。这类界面正好对应 world 级组织与批量环境管理。


11. Sim2Real 导向的规则设计

11.1 为什么世界规则必须为迁移服务

训练世界不是为了“在仿真中赢”,而是为了让策略对真实世界足够稳健。因此很多规则设计要从迁移角度反推。

11.2 物理随机化

类别 常见随机项
质量 物体质量、负载质量
摩擦 桌面、地面、指尖 pad
关节参数 damping、stiffness、backlash
接触参数 restitution、contact offset
延迟 actuator / sensor latency

11.3 视觉随机化

Sim2Real 中总论一致,世界层真正要落的是:

  • 哪些灯光可随机化
  • 哪些材质可替换
  • 哪些背景层可切换
  • 哪些相机参数可扰动

11.4 传感器随机化

常见项目:

  • 噪声强度
  • bias 漂移
  • dropout
  • 分辨率
  • 视场角轻微变化

11.5 延迟建模

现实世界中的控制链路通常近似为:

graph LR
    A[World State] --> B[Sensor Sampling]
    B --> C[Perception / Policy]
    C --> D[Controller]
    D --> E[Actuator]
    E --> F[Next World State]

如果世界层把这条链路简化成“状态立刻送到策略、动作立刻作用”,就会产生明显迁移偏差。

11.6 系统辨识与默认参数

随机化不能替代系统辨识。更好的策略往往是:

  1. 用系统辨识找到较准的默认参数
  2. 围绕默认值做合理随机化

11.7 现实差距闭环

世界层应该支持“部署 -> 回收失败样本 -> 回改世界”的闭环。

真实失败模式 世界层应如何回补
光照突变失败 增加光照模板
抓取后滑落 扩大摩擦/接触扰动
深度空洞导致定位错 引入 depth artifact
控制滞后 注入延迟和执行器动态

11.8 Sim2Real 设计 Checklist

项目 问题
默认参数 是否贴近实机
随机化范围 是否覆盖现实变化
噪声模型 是否过于理想
延迟 是否有建模
失败回流 是否有更新机制

12. 平台实现差异

12.1 为什么同一世界在不同仿真器里表现不同

同样的机器人、同样的场景、同样的任务逻辑,换个仿真器就可能:

  • 接触更稳或更差
  • 动作更软或更硬
  • 渲染更真或更假
  • 训练速度差一到两个数量级

根因不是“文件导错了”,而是平台实现不同。

12.2 PhysX vs MuJoCo vs DART/Bullet/ODE vs SAPIEN/PhysX

平台/引擎 接触风格 典型强项 典型弱项
PhysX 工程导向、GPU 支持强 大规模场景、NVIDIA 生态 研究上可解释性不总是最强
MuJoCo 接触和约束细节表达强 控制、操作、研究迭代 大型世界组织能力一般
DART 多体系统建模好 ROS/Gazebo 场景 大规模并行弱
Bullet/ODE 历史悠久,兼容广 原型和社区支持 高精度操作不一定理想
SAPIEN/PhysX 操作和视觉结合好 可交互物体与 benchmark 通用世界生态稍窄

12.3 差异块一:接触

不同平台在以下方面差异明显:

  • 穿透容忍度
  • 摩擦近似方式
  • solver 迭代策略
  • 静止接触稳定性

12.4 差异块二:关节和驱动

问题 平台差异影响
position drive 行为 不同平台 PD 实现不同
torque saturation 饱和方式和裁剪时机不同
mimic/tendon 支持 表达能力不同

12.5 差异块三:传感器

维度 差异
RGB 渲染 材质和光照支持差异
Depth 空洞和噪声模拟差异
LiDAR beam model 与性能差异
Contact sensor 支持粒度差异

12.6 差异块四:世界组织

平台 更自然的世界构建风格
Isaac Sim USD 场景层叠
MuJoCo 物理研究 worldbody
Gazebo SDF world + plugin
ManiSkill/SAPIEN 配置驱动任务环境

12.7 平台差异意味着什么

世界层应避免把平台特性硬编码得太死。更好的做法是抽象出:

  • 资产接口
  • 任务接口
  • 随机化接口
  • 评测接口

平台相关部分尽量局限在适配层。


13. 世界验证与基准

13.1 验证什么

仿真世界至少需要验证四件事:

  1. 物理是否稳定
  2. 任务是否可执行
  3. 数据是否可信
  4. 评测是否可复现

13.2 验证层次

层次 验证问题
单资产 物体是否站得住、关节是否能动
单场景 world reset 是否正常
单任务 成功条件是否正确
多任务套件 难度和分布是否合理
Sim2Real 是否能解释真实失败模式

13.3 核心指标

指标 含义
Success Rate 任务成功率
Stability Score 长时间无爆炸比例
Reset Reliability reset 后可重复进入有效初始状态的比例
Contact Robustness 接触任务稳定性
Trajectory Reproducibility 同 seed 轨迹一致性
Runtime / RTF 性能指标

13.4 回放与可视化

世界验证必须支持:

  • 单步回放
  • 慢动作重播
  • 关键 frame 导出
  • 接触点可视化
  • frame tree 可视化
  • 传感器时间戳对齐检查

13.5 Benchmark 的意义

Benchmark 不是简单“给 10 个任务”。它本质上是在定义:

  • 世界分布
  • 成功标准
  • 难度增长
  • 比较协议

例如:

  • LIBERO 更关注知识迁移与长期学习
  • SIMPLER 更关注仿真评测与真实部署相关性
  • RLBench 更关注操作技能覆盖

13.6 世界验证 Checklist

项目 问题
reset 是否无残留状态
接触 是否长时间稳定
指标 是否可自动记录
回放 是否能复盘失败
seed 是否可复现
benchmark split 是否避免 train/test 泄漏

14. 典型世界模板

14.1 桌面抓取世界

组成 内容
资产组合 机械臂、夹爪、桌子、目标物、背景板、相机
规则重点 抓取接触、摩擦、相机视角
常见失败 物体滑走、抓后穿透、视觉遮挡

14.2 抽屉开合世界

组成 内容
资产组合 柜体、抽屉、把手、机械臂、腕部相机
规则重点 prismatic joint、把手 affordance、接触稳定性
常见失败 轴向错、抽屉卡死、把手不可达

14.3 插拔装配世界

组成 内容
资产组合 插头、插座、夹持器、定位治具
规则重点 小公差、细接触、力觉/接触反馈
常见失败 穿透、卡边、需要极小 dt

14.4 四足地形世界

组成 内容
资产组合 四足机器人、地面、坡道、楼梯、障碍
规则重点 足端接触、地形摩擦、高频控制
常见失败 地形不连贯、触地弹跳、局部爆炸

14.5 人形搬运世界

组成 内容
资产组合 人形机器人、箱体、工位、障碍、多个相机
规则重点 全身平衡、接触切换、自碰撞
常见失败 负载过重导致不稳、双手抓持不一致

14.6 移动导航世界

组成 内容
资产组合 地图、墙体、门、障碍物、LiDAR/相机、底盘
规则重点 全局地图、局部避障、传感器频率
常见失败 map/odom 对不齐、动态障碍处理不真实

14.7 世界模板的复用方式

一个好的模板应支持:

  • 换资产实例
  • 换光照
  • 换观测组合
  • 换任务目标
  • 换成功标准

15. 开发流程与检查清单

15.1 从空世界到 benchmark 的工程流程

flowchart TD
    A[定义任务目标] --> B[选择平台与资产格式]
    B --> C[导入资产]
    C --> D[建立场景层次]
    D --> E[配置物理规则]
    E --> F[绑定传感器与观测]
    F --> G[实现任务/reset/reward]
    G --> H[做 smoke test]
    H --> I[做随机化与稳定性测试]
    I --> J[接入训练与评测]
    J --> K[回收真实失败样本并迭代]

并行世界中的批量训练示意

图:在工程上,“世界”常常不是单个场景,而是一批并行复制的 episode 容器。训练框架真正关心的是这些 world 是否能稳定 reset、稳定 rollout、稳定记录指标。

15.2 推荐开发节奏

  1. 先做一个最小世界,只保留关键资产和关键接触。
  2. 先让 reset 稳定,再谈训练。
  3. 先在单环境下做长时间 roll-out,再扩并行。
  4. 先验证指标和回放,再引入复杂随机化。

15.3 CI / Smoke Test 应包含什么

类别 建议测试
加载 世界是否能无报错初始化
reset 连续 100 次 reset 是否稳定
控制 随机 action 下是否爆炸
传感器 topic / buffer / timestamp 是否正常
指标 reward / success / done 是否可记录
回放 是否能导出关键调试信息

15.4 错误案例一:世界配置错误导致训练学偏

现象:

  • 桌面抓取在仿真中成功率很高
  • 真机一抓就滑落

根因:

  • 世界层把夹爪 pad 摩擦设置得过高
  • 目标物碰撞代理过粗
  • 真实相机延迟没有建模

修复:

  • 回调物理参数
  • 增加视觉和延迟随机化
  • 用真实失败样本回补 world 设计

15.5 错误案例二:时间系统错误导致部署抖动

现象:

  • 仿真 locomotion 非常平滑
  • 真机控制出现滞后与过冲

根因:

  • 仿真 control step 和 sensor step 理想同步
  • 未建模 actuator delay
  • IMU 噪声和 bias 过于理想

修复:

  • 引入异步与延迟
  • 加入 IMU drift
  • 重测实机链路延迟并回灌世界参数

15.6 最终检查清单

检查项 是否明确
世界层次 world/scene/entity/task 是否清楚
坐标系 frame 链是否一致
时间系统 dt、substep、sensor rate 是否文档化
接触规则 摩擦、恢复系数、solver 参数是否可追踪
关节驱动 控制模式和限制是否合理
传感器 噪声、延迟、同步是否定义
随机化 范围是否覆盖部署变化
验证 smoke test 和 benchmark 是否存在

16. 与其他章节的关系


17. 参考文献与延伸阅读

  • NVIDIA Isaac Sim / Isaac Lab documentation.
  • MuJoCo documentation and contact model references.
  • Open Robotics SDFormat documentation.
  • SAPIEN / ManiSkill documentation.
  • PhysX documentation.
  • LIBERO, RLBench, SIMPLER, ManiSkill benchmark papers.
  • 仿真资产
  • 仿真平台
  • Sim2Real

18. 附录:典型参数经验表与工程实践

18.1 为什么仍然需要经验参数表

理论上,最理想的世界参数应来自:

  • 真实系统辨识
  • 真实传感器标定
  • 高保真接触建模

但在项目初期,工程团队通常仍需要一个“能让世界先跑起来”的经验起点。经验参数表的作用不是替代理论,而是提供:

  • 初始默认值
  • 调参方向
  • 排错边界

18.2 桌面操作世界的经验参数

项目 经验建议 说明
物理步长 小于控制步长的 1/2 到 1/8 接触任务通常需要更细时间分辨率
子步数 2-8 抓取和堆叠时常见
桌面摩擦 中等偏高 过低容易滑走,过高会掩盖真实问题
物体恢复系数 低到中等 多数日用品不应明显弹跳
夹爪 pad 摩擦 不宜过高 否则策略会学到不现实抓取
相机频率 15-30 Hz 与真实 RGB-D 设备接近
腕部相机延迟 非零 避免“完美感知”

18.3 插拔装配任务的经验参数

项目 经验建议 风险
几何公差 不要一开始就极限精度 先用可学习版本,再逐步收紧
contact offset 比普通抓取更精细 太粗会让插入“穿模式成功”
solver iteration 较高 否则高刚性接触不稳定
执行器速度 适中 过快会导致撞击和发散
力觉/接触反馈 建议建模 完全无反馈会使训练难以泛化

18.4 四足和人形世界的经验参数

项目 四足 人形
控制频率 很高
足/脚底接触 必须稳定 必须稳定
地形多样性 强依赖 中到强依赖
自碰撞 中等重要 极其重要
负载变化 次要 较重要

18.5 视觉世界的经验设计

项目 建议
训练初期灯光 先少量模板,再逐步加大随机化
背景干扰 初期适度,后期扩大
相机曝光 不要默认固定不变
材质库 先建立标准材质族,再做替换
透明/反光资产 单独测,不要直接混入主 benchmark

18.6 传感器调度矩阵

模态 高频控制需要 视觉操作需要 导航需要
Joint State 中高
IMU
RGB
Depth 低到中
LiDAR
Force/Torque

18.7 reset 策略模式库

世界层里的 reset 不是单一函数,而是一套策略。

reset 模式 用途 风险
Hard Reset 全部对象回初始状态 成本高但最干净
Partial Reset 只重置任务对象 可能遗留隐藏状态
Lazy Reset 批量环境按需重置 管理逻辑更复杂
Curriculum Reset 难度随训练阶段变化 需要额外状态机

18.8 reset 设计中的三个隐性问题

  1. 速度是否归零:很多系统只重置位姿,不清零速度。
  2. 缓存是否清理:传感器缓存、动作历史、RNN 隐状态常被遗漏。
  3. 语义状态是否同步:门关上了,但 is_open 还留在上一轮状态。

18.9 世界 profiling 的观察维度

graph TD
    A[World Profiling] --> B[Physics Cost]
    A --> C[Rendering Cost]
    A --> D[Sensor Cost]
    A --> E[Reset Cost]
    A --> F[Task Logic Cost]

    B --> B1[Contact Pairs]
    B --> B2[Solver Iterations]
    C --> C1[Resolution]
    C --> C2[Lighting/PostFX]
    D --> D1[Camera]
    D --> D2[LiDAR/Depth]
    E --> E1[Sampling]
    E --> E2[Scene Reload]
    F --> F1[Reward]
    F --> F2[Success Checks]

18.10 常见 profiling 结论

现象 更可能的瓶颈
GPU 占满但 FPS 低 渲染、相机、点云
CPU 占高且 step 慢 scene 管理、奖励逻辑、插件
physics 明显变慢 接触 pair 太多、碰撞几何过密
reset 比 step 还慢 采样器、资产加载、Python 逻辑

18.11 性能调优顺序

建议顺序如下:

  1. 先减少碰撞复杂度
  2. 再减少渲染成本
  3. 再检查传感器频率
  4. 最后才考虑牺牲物理精度

18.12 多平台迁移时的世界适配表

重点检查
URDF/Gazebo Isaac Sim/USD 坐标轴、材质、传感器桥接
MJCF Isaac Sim 关节驱动、接触参数、mesh 转换
USD MuJoCo 层次表达、传感器、材质降级
SAPIEN MuJoCo 物体交互规则、相机接口

18.13 平台迁移 Checklist

项目 问题
单位 是否一致
frame 根坐标和 optical frame 是否一致
材质 是否需要降级/重建
关节 drive 平台语义是否一致
接触参数 是否有一一对应
传感器接口 话题/缓冲/采样频率是否匹配

18.14 大规模并行训练时的世界约束

项目 单环境看起来没问题,但并行后会暴露的风险
随机采样 少数环境重叠或不可达
接触 少数 pair 爆炸拖慢整批
reset 批量 reset 逻辑遗漏状态
资源占用 相机和点云显存线性增长

18.15 Debug Playbook

遇到世界层异常时,建议按如下顺序排查:

  1. 关掉策略,用固定动作或零动作。
  2. 关掉渲染,只留 physics。
  3. 关掉随机化,检查 deterministic 版本。
  4. 关掉大部分资产,只保留最小世界。
  5. 逐个恢复组件,定位问题层。

18.16 最小世界原则

几乎所有复杂世界都应该有一个“最小可复现版本”:

  • 最少资产
  • 最少传感器
  • 最少随机化
  • 单环境
  • 固定 seed

这个版本的价值在于:

  • 复现 bug
  • 解释物理问题
  • 做 regression test

18.17 工程上的最终结论

世界构建不是美术工作,也不是纯物理建模工作,而是一项混合工程:

  • 一半是系统架构
  • 一半是数值稳定性
  • 一半是数据分布设计

它直接决定机器人训练的上限,也直接决定 Sim2Real 的下限。

18.18 World Review Rubric

在团队评审一个新世界时,可以用下面这张表做快速打分:

维度 1 分 3 分 5 分
物理稳定性 经常爆炸 大体可跑 长时间稳定
世界组织 命名混乱 可维护 清晰可复用
任务逻辑 经常误判 基本正确 指标和语义一致
随机化设计 几乎没有 覆盖核心变量 覆盖部署长尾
调试能力 很难复盘 有基础日志 回放、可视化、profiling 完整

若任何一项长期低于 3 分,通常不应直接进入大规模训练阶段。

同样重要的是,这张 rubric 不应只在项目结尾使用。更合理的做法是:

  • 世界首次可运行时评一次
  • 接入训练前再评一次
  • 首轮真实部署失败后再评一次

这样世界层的质量会真正进入迭代闭环,而不是停留在“能跑就行”。


评论 #