Audience

Verification level

COMPILE-ONLY PASS FOR THREE BACKENDS. main.py compiles the same run.yaml with PyBullet, MuJoCo, and Isaac Lab overrides and validates selected variant, resource format, semantics, and distinct plan digests. It does not start any native backend.

Files

  • run.yaml defaults to PyBullet and references one portable prop.
  • main.py calls public compile_file(..., backend_override=...) three times.
  • ../catalog/portable_prop.yaml maps each backend to the appropriate resource.

Read the Manifest

The logical identity appears once:

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, ...}}

Each Variant may carry backend-specific resources, semantics, requirements, and defaults. The identity does not change, so the Scenario stays portable. A successful selection still does not prove equivalent native physics or adapter compatibility.

Read the Run and Python

The Run remains backend-neutral at the entity:

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

Python changes only one invocation:

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

The override does not edit run.yaml. It changes the effective backend, selected Variant, resource format, provenance, and plan digest.

Run it

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

Expected rows show PyBullet/URDF, MuJoCo/URDF, Isaac Lab/USD, followed by Distinct plan digests: 3.

Common errors

  • Putting backend paths directly in every Run: keep the logical identity in the Run and backend packaging in the Manifest.
  • Expecting an unspecified Variant to fall back arbitrarily: only the exact backend or an explicit '*' Variant may be selected.
  • Treating URDF/USD choice as automatic universal conversion: this Manifest author supplied and owns both resource forms.
  • Treating compile pass as native parity: run backend acceptance separately.

Previous: 10 — Versions and stable · Next: 12 — Resource bundle and integrity