Audience
Verification level
This case has two explicit levels:
- CONFIGURATION PASS:
main.pyvalidates both Manifests and checks the enabled cloth plus separately selectable water record without starting a simulator. - VISIBLE ISAAC DEFORMABLE RUN:
python verify_runtime.pyopens Isaac, reads all 144 cloth nodes, advances physics, and verifies that the cloth moved under gravity. - VISIBLE ISAAC FLUID RUN:
fastsim run fluid.yaml --duration 5runs the separately enabled particle fluid.
FastSim lowers procedural surface deformables and particle fluids to UniRoboSim and exposes both as on-demand state queries. Isaac Lab 3.0 cannot combine this adapter's USD-readback particle path with its tensor-backed deformable path in one native World, so the two checked configurations select one enabled matter type at a time.
Files
run.yamlenables the cloth and disables water for the visible deformable check.fluid.yamldisables the cloth and enables water for the visible fluid check.main.pycompiles the Run through the public configuration API and checks the resolved kinds, enabled states, capabilities, and procedural source types.verify_runtime.pyreads immutable deformable snapshots throughFastSimApplication.deformable()before and after physics advances.../catalog/deformable_cloth.yamldefines the reusable deformable component.../catalog/fluid_water.yamldefines the reusable fluid component.../catalog/index.yamlpublishes both releases as stable.
Read the manifests
The cloth manifest uses the deformable:// identity scheme and kind: deformable.
Its defaults.params.source describes a surface grid; material density is component
data shared by every instance unless a Run overrides it.
The water Manifest uses fluid:// and kind: fluid. Its box-grid source fixes the
particle region and spacing, while material holds density, viscosity, and surface
tension.
It deliberately does not declare capabilities: [fluid]. Component capabilities
are mapped FastSim contracts, not free-form labels and not raw UniRoboSim Provider
capabilities. For this procedural entity, kind: fluid, semantics.model: particle_fluid, and the typed parameters select Fluid Lowering. FastSim then adds the
versioned UniRoboSim requirement state.fluid.particles@1 to the World automatically.
Read the Run
scenario:
scene:
deformables:
cloth:
use: deformable://fastsim/component-demo-cloth
enabled: true
pose:
xyz_m: [0.0, 0.0, 1.2]
quat_xyzw: [0.0, 0.0, 0.0, 1.0]
fluids:
water:
use: fluid://fastsim/component-demo-water
enabled: false
pose:
xyz_m: [0.0, 0.0, 0.8]
quat_xyzw: [0.0, 0.0, 0.0, 1.0]
cloth and water are Scenario-local aliases. use asks the Project Registry for
the stable release; pose remains instance-specific physical placement. An entity
with enabled: false stays in the Scenario, ExecutionPlan, and Lock for authoring
inspection but is excluded from Runtime projection. fluid.yaml reverses the two
flags because of the documented Isaac mixed-matter limitation.
Run it
From this directory:
fastsim config validate run.yaml --json
fastsim config expand run.yaml
python main.py
python verify_runtime.py
fastsim run fluid.yaml --duration 5 --json
Expected output names backend isaaclab, source types surface_grid and box_grid,
their enabled/disabled states, and one 64-character Plan digest. The runtime verifier
prints node count, generation, tick, and cloth centroid before/after gravity. The final
command opens visible Isaac for the particle-fluid variant and closes cleanly after
five wall-clock seconds.
The CLI lifecycle run proves native construction, stepping, and clean shutdown. For
a semantic Fluid test that reads 125 particles, advances exactly 60 physics ticks,
and verifies centroid motion, continue to
fundamentals/17_liquid.
Common errors
- Adding
capabilities: [fluid]as a descriptive tag causesFastSim capabilities are not mapped by the procedural projection. Remove it;kindandsemanticsdrive this Fluid projection. - Enabling Cloth and Water together is rejected by the Isaac adapter because its two native state paths cannot share one World. Use the two supplied Run files.
- Putting water under
objects: the entity group must match the manifest kind. - Omitting a physical pose because behavior text describes a relation: component semantics do not replace concrete scene placement.
Previous: 06 — Sensors and lights · Next: 08 — Scenario component