Skip to content

Repository files navigation

DelSimLab Training Contract (DSTC)

A conformance profile for robot models: everything a training pipeline needs, declared — nothing silently invented.

The sim-to-real gap is usually treated as a physics problem. A large part of it is not — it is an information problem: the things a robot model fails to say about itself, which every simulator then quietly invents on its behalf. This contract is about closing that half.

Authored and maintained by Delta Sim Labs. Openly licensed (CC-BY-4.0 / Apache-2.0) and open to contribution from anyone — see GOVERNANCE.md.

The problem

Open a random public robot description and there is a good chance it contains at least one of these:

  • links with no inertia at all — the simulator quietly invents one
  • identity or zero inertia tensors — CAD exporter defaults that correspond to no possible rigid body
  • the render mesh reused as collision geometry — tens of thousands of triangles fed to the contact solver every step
  • joints with infinite effort limits, or no dynamics with no hint whether an external actuator model is supposed to supply them

Every simulator loads these files anyway. Each engine forgives differently, and the policies trained on top inherit errors nobody declared and nobody can reproduce. If you have ever watched a robot explode, sink through the floor, or train 3× slower than it should, you have probably met one of these defects.

The carrier formats (URDF, MJCF, USD) define whether a file parses. Nothing defines whether a file is complete enough to train against. This repository is that definition.

What it is

  • A short spec (SPEC.md) with numbered, testable requirements (RB-1 … TE-2), organized into four cumulative conformance levels:

    Level Meaning
    L0 Loads honestly — no engine forgiveness required
    L1 Physics-complete — no absent or placeholder dynamics
    L2 Provenance-complete — every number has a source; estimates have bounds
    L3 Transfer-evidenced — cross-engine behavioral evidence attached
  • One JSON sidecar (contract.json, schema in schema/) for the things URDF/MJCF/USD cannot express: where each number came from, how uncertain it is, what actuator model is assumed, and honest randomization ranges.

  • A reference checker (in development) — one command, per-requirement pass/fail, CI-friendly exit codes, a level badge you can put in your README.

Not a new file format. Your URDF stays a URDF. The sidecar sits next to it; nothing in your existing toolchain changes.

What a declaration looks like

The single most useful idea in the contract, in six lines. Instead of a joint with silently missing dynamics:

"joint_2": {
  "actuator": {"type": "external", "injected_by": "isaac_lab train_cfg.py"}
}

or, if the model is meant to be used directly:

"joint_2": {
  "actuator": {"type": "ideal-torque", "bandwidth_hz": 40}
}

Missing dynamics are often intentional — the actuator model lives in the RL config. The contract doesn't forbid that pattern. It forbids the silence. A declared simplification can be trained against; an undeclared one cannot.

The same principle everywhere: estimated inertia carries its density assumption and a range. Unknown transmission ratio says "unknown" instead of omitting the key. Friction is either measured-with-provenance or an honest interval. See examples/ for a complete sidecar.

Quickstart

Today (draft phase):

  1. Read SPEC.md — it is short, and every requirement has a "why."

  2. Write a contract.json next to your robot's carrier file, starting from examples/example_arm.contract.json.

  3. Validate it against schema/contract.schema.json with any JSON Schema validator:

    pip install check-jsonschema
    check-jsonschema --schemafile schema/contract.schema.json contract.json

The reference checker (carrier checks + sidecar validation + level computation in one command) tracks the spec and will live in this organization.

Status

0.1.1-draft. The requirement set is stable enough to reference; the thresholds are not. Per the process rules in the spec, nothing becomes normative until the checker has been exercised against a substantial corpus of real public models. Numbers like RB-4's plausibility factor and CG-2's triangle budget are expected to move.

Levels L0/L1 are checkable today against any URDF. L2 requires writing a sidecar. L3 requires attaching cross-engine evidence.

One conforming instance exists — see conformance/fr3/ for a complete sidecar authored against a real, widely used public robot, the measured audit behind it, and the three spec changes that first contact forced.

Contributing

The one rule that matters: no requirement without a motivating model. Every proposed requirement or threshold change must cite at least one real, commit-pinned public model that demonstrates the problem. The spec codifies practice; it does not speculate.

See CONTRIBUTING.md for the change process and GOVERNANCE.md for how decisions get made.

License

About

A PROPER conformance profile for robot models: everything a training pipeline needs, declared and announed in one place. MAKE YOUR TRAINING ORGANIZED

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages