面向读者

验证等级

三个后端均仅配置编译通过。 main.py 用 PyBullet、MuJoCo、Isaac Lab 覆盖编译同一 份 run.yaml,验证 Variant、资源格式、语义和不同的计划摘要;不会启动任何原生后端。

文件说明

  • run.yaml 默认选择 PyBullet,并引用一个可移植物品。
  • main.py 三次调用公开 compile_file(..., backend_override=...)
  • ../catalog/portable_prop.yaml 把各后端映射到合适资源。

理解 Manifest

逻辑标识只出现一次:

yaml
id: object://fastsim/component-demo-portable-prop
variants:
  pybullet:
    resources: {model: {format: model/vnd.urdf+xml, ...}}
  mujoco:
    resources: {model: {format: model/vnd.urdf+xml, ...}}
  isaaclab:
    resources: {model: {format: model/vnd.usd, ...}}

每个 Variant 可以保存后端专用资源、语义、要求和默认值。标识本身不变,所以 Scenario 保持可移植。成功选择 Variant 并不等于原生物理一致,也不证明 Adapter 兼容。

理解 Run 与 Python

Run 中的实体不含后端路径:

yaml
prop:
  use: object://fastsim/component-demo-portable-prop

Python 只覆盖本次编译:

python
compiled = compiler.compile_file(RUN_FILE, backend_override=backend)

覆盖不会修改 run.yaml,但会改变有效 backend、Variant、资源格式、来源记录和计划摘要。

运行

bash
fastsim config validate run.yaml --backend pybullet --json
fastsim config validate run.yaml --backend mujoco --json
fastsim config validate run.yaml --backend isaaclab --json
python main.py

预期三行分别显示 PyBullet/URDF、MuJoCo/URDF、Isaac Lab/USD,最后显示 Distinct plan digests: 3

常见错误

  • 在每份 Run 中直接写后端路径:Run 保留逻辑标识,Manifest 负责后端打包。
  • 期待缺失的 Variant 随机回退:只会选择准确 backend 或明确的 '*' Variant。
  • 把 URDF/USD 选择理解成通用自动转换:这里的两类资源由组件作者提供并负责。
  • 把编译通过当成原生一致性:后端验收必须单独执行。

上一节:10 — 版本与稳定版本 · 下一节:12 — 资源包与完整性