Asset validation
An asset gets a published version only after its validation passes. When you
run simulo asset publish, Simulo runs an asset_validation job in the
cloud, and a broken package is caught there instead of halfway through a
training run. The same checks apply to your organization’s catalog and the
Simulo catalog. Which ones run depends on the asset’s kind and source format:
| Stage, in order | Runs for | What it checks |
|---|---|---|
structural |
Every package | The manifest, that every file stays inside the package, that the entry file exists, and that the contents match their digest. |
conversion |
URDF robots | Converts the URDF to USD and fills in the physics settings URDF can’t express. A URDF can only be published as a robot. |
usd_checks |
Every uploaded package; the converted USD for a URDF robot | That references inside the package resolve, that units and up axis are declared, and the relevant physics schemas. |
engine |
Robots | The settle and actuation probes below, run in the simulator. |
Some built-in Simulo-catalog assets record usd_checks as skipped, with the
reason.
Worlds and props have no joints to drive, so the probes do not run for them;
their report shows the engine stage as skipped, with the reason.
The two robot probes
Section titled “The two robot probes”Both probes run the robot in one environment. Asset validation checks whether the robot is safe to publish and records position tracking as facts. Preview keeps the stricter checks that judge the robot inside your task.
Settle: does it stay physically bounded?
Section titled “Settle: does it stay physically bounded?”The robot is placed on a ground plane and left alone for about two seconds. A floating-base robot starts with its lowest bound just above the floor. The probe fails if state becomes non-finite, a joint exceeds its explosion speed, or the robot falls through the floor. A driven joint that is still moving at the end produces a warning with its measured tail speed and a damping hint.
Actuation: do its drives work?
Section titled “Actuation: do its drives work?”Every joint with an authored position drive is sent a small position target inside its limits. For a floating-base robot whose rigid articulation root is a descendant of the entry prim, the probe fixes that root above the floor so contact with the floor does not distort the measurement. Otherwise it uses the spawned robot without a fixed root. When a robot has position-driven joints and its root cannot be held, the report notes that it was measured standing on the floor. A joint within 0.1 rad of its target passes. A larger offset produces a warning that records the offset, tail speed, and stiffness, whether the joint stopped short, is still converging, or is oscillating.
Actuation fails only when state becomes non-finite, a joint exceeds its explosion speed, or a driven joint barely changed position over the whole actuation phase.
The probe tests only drives the asset actually authored. A joint without a position drive is not tracked, and a robot with no position drives at all passes with a note saying tracking did not apply, since effort-driven robots are legitimate. Settle shows the robot remains physically bounded; actuation shows whether its authored controls respond and records how closely they track.
Read the result
Section titled “Read the result”simulo asset inspect robot/my-arm:v1simulo asset inspect simulo/robot/cartpole:v1The summary lists the validation runs on its Validated: line, then a
Facts block of what the platform measured about the asset. For the full record as JSON:
simulo asset inspect robot/my-arm:v1 --json > my-arm.record.jsonThe facts are under version.facts:
| Field | Meaning |
|---|---|
articulation_root |
The robot’s articulation root. |
joints, dof |
The joints and the total degrees of freedom. |
collision_shape_count |
How many collision shapes were found. |
units, up_axis |
The authored scale and orientation. |
link_masses, total_mass_kg |
Each link’s mass and the total. |
probe_outcomes |
The settle and actuation results, each with passed and detail, for robots. |
step_cost_indicator |
The median physics step time measured during settle, a rough sign of how expensive the robot is to simulate. For robots whose root is held during actuation, this figure includes the held copy. |
The validation report
Section titled “The validation report”The report explains why a validation passed or failed:
simulo asset inspect robot/my-arm:v1 --report my-arm.validation.jsonsimulo asset validate ./my-arm --kind robot --report my-arm.validation.json # check without publishingIt lists stages, each with rows of individual checks. This sketch shows its shape; the angle-bracket values stand in for real text:
{ "report_schema_version": "simulo.asset_validation_report.v1", "verdict": "passed", "runtime": "<runtime>", "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": "<title>", "problem": null, "fix": null, "detail": "<measured result>"}, {"status": "pass", "check": "probe_actuation", "title": "<title>", "problem": null, "fix": null, "detail": "<measured result>"}, {"status": "warn", "check": "probe_actuation_tracking_offset", "title": "<joint> position tracking", "problem": "<measured offset>", "fix": "<plain fix hint>", "detail": "<offset, tail speed, and stiffness>"} ] } ]}A failing row leads with problem and fix, and keeps the measured value in
detail. A stage that did not run is recorded as skipped with its
skip_reason, never as passed.
Common failures
Section titled “Common failures”| What you see | Usually means | Try first |
|---|---|---|
| Entry or reference check fails | The entry file is ambiguous or missing, or a dependency lives outside the package folder. | Put every dependency under one folder, and pass --entry if needed. |
| Units or up-axis warning | The USD file relies on a default instead of declaring them. | Author metersPerUnit and upAxis explicitly. |
| Settle warning | A driven joint is still moving after two seconds. | Add damping if the joint should come to rest before training. |
| Settle fails | State became non-finite, a joint exceeded its explosion speed, or the robot fell through the floor. | Check collision shapes, masses, inertia, limits, and drive gains. |
| Actuation warning | A driven joint changed position but remained more than 0.1 rad from its target. | Use the reported offset, tail speed, and stiffness to decide whether to raise the gain for position control. |
| Actuation fails | State became non-finite, a joint exceeded its explosion speed, or a driven joint barely changed position over the whole actuation phase. | Check that the drive is authored, enabled, and free to move. |
| URDF conversion fails | A mesh reference is missing or unsafe, or the URDF uses something unsupported. | Keep meshes inside the package folder and fix the row the report names. |