Asset Validation
An asset receives a published version only after its validation run passes. The same report model applies to your organization’s catalog and the read-only Simulo global catalog, but checks depend on the asset kind and source format.
- Every package is checked for a valid manifest, in-root files, entry presence, digest integrity, and supported source shape.
- USD packages are opened and checked for resolvable in-package references, declared units/up-axis, and relevant physics schemas.
- URDF robots are converted to USD and receive explicit physics-completion rules before probes run.
- Robots run settle and actuation probes in the simulation runtime.
- Worlds and props are structural/runtime content; they do not pretend to have robot joints, so settle and actuation do not apply.
The two robot probes
Section titled “The two robot probes”Settle — does it reach a quiet physical state?
Section titled “Settle — does it reach a quiet physical state?”The runtime places the robot into a physics world without commanding it. A healthy model should settle instead of jittering, sinking through the floor, or separating explosively. This catches common problems with collision shapes, masses, inertias, limits, and drives.
Actuation — do authored drives track targets?
Section titled “Actuation — do authored drives track targets?”The runtime sends small position targets to joints with authored drives and measures whether they track. A missing, weak, unstable, or badly limited drive fails this probe. The result applies to drives the asset actually authored; it does not promise that an undriven joint will move.
Settle establishes physical stability. Actuation establishes that the model’s declared controls respond.
Inspect the current version
Section titled “Inspect the current version”simulo asset inspect robot/my-arm:v1simulo asset inspect simulo/robot/cartpole:v1The human summary includes validation verdicts and a facts block. Save the complete record when you need measured data:
simulo asset inspect robot/my-arm:v1 --json > my-arm.record.jsonThe facts live under version.facts:
| Field | Meaning |
|---|---|
articulation_root |
Root prim of the robot articulation. |
joints, dof |
Joint records and total degrees of freedom. |
collision_shape_count |
Collision meshes/shapes found. |
units, up_axis |
Authored scale and orientation. |
link_masses, total_mass_kg |
Per-link and total mass used by physics. |
probe_outcomes |
settle and actuation pass/detail objects when applicable. |
step_cost_indicator |
A coarse runtime cost signal when measured. |
Read the staged validation report
Section titled “Read the staged validation report”Write the report captured by the validator:
simulo asset inspect robot/my-arm:v1 --report my-arm.validation.json# or validate without publishing:simulo asset validate ./my-arm --kind robot --report my-arm.validation.jsonThe report is not a pair of top-level settle/actuation fields. It is a
versioned sequence of stages and check rows. The following is a schema sketch,
not a literal emitted report; angle-bracket values stand in for measured text:
{ "report_schema_version": "simulo.asset_validation_report.v1", "verdict": "passed", "runtime": "<runtime identifier>", "kind": "robot", "entry": "robot.usda", "source_format": "usd", "summary": "Validation passed.", "stages": [ { "stage": "engine", "status": "passed", "skip_reason": null, "rows": [ { "status": "pass", "check": "probe_settle", "title": "Robot settles to a quiet physical state", "problem": null, "fix": null, "detail": "<measured result>" }, { "status": "pass", "check": "probe_actuation", "title": "Authored drives track commanded position targets", "problem": null, "fix": null, "detail": "<measured result>" } ] } ]}A non-pass row leads with a practical problem and fix; measured detail is
kept separately. A deliberately skipped engine stage is recorded as skipped,
not misreported as a passed physics probe.
Common failures and fixes
Section titled “Common failures and fixes”| What you see | Usually means | First correction to try |
|---|---|---|
| Entry or reference check fails | The entry is ambiguous/missing, or a dependency leaves the package root. | Put every dependency under one root and pass --entry when needed. |
| Units/up-axis warning | The USD layer relies on a fallback instead of authoring the metadata. | Author metersPerUnit and upAxis explicitly. |
| Settle fails | Collision, mass/inertia, limit, or drive configuration is unstable. | Inspect collisions and inertial properties, then revalidate. |
| Actuation fails | An authored drive is missing, too weak, unstable, or constrained by limits. | Check drive stiffness/damping and joint limits. |
| URDF conversion fails | A mesh reference is missing/unsafe or the URDF shape is unsupported. | Keep meshes under the package root and fix the reported row. |