面向读者
验证等级
三个后端均仅配置编译通过。 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 选择理解成通用自动转换:这里的两类资源由组件作者提供并负责。
- 把编译通过当成原生一致性:后端验收必须单独执行。