Skip to content

Dataset

Accepted demonstrations land in a public, versioned dataset in LeRobot and RLDS format. Each episode carries the operator's address and a signature over its SHA-256, so provenance is checkable without trusting us.

2,812

Episodes

7.31M

Control frames

753

Signing wallets

Episode schema

{
  "task_id":   "orn-0001",
  "seed":      918273645,          // reproduces the exact scene layout
  "hz":        30,
  "seconds":   104.2,
  "demo_hash": "<sha256 of this object without the proof block>",
  "proof": {
    "wallet":    "<base58 pubkey>",
    "signature": "<base58 ed25519 over the OPENROBOTICS-DEMO-v1 message>",
    "memo_tx":   "<solana signature>"
  },
  "samples": [
    {
      "t":      0.033,
      "q":      [j0, j1, j2, j3, j4, grip],   // rad x5, then 0..1
      "ee":     [x, y, z],                    // fingertip, metres, world frame
      "bodies": { "muffin": [x, y, z, yaw] },
      "joints": { "microwave_door": 0.42 }    // rad for hinges, metres for slides
    }
  ]
}

Verifying an episode

# 1. the hash is the hash of the trajectory
sha256(canonical_json(episode_without_proof)) == episode.demo_hash

# 2. the signature is that wallet's, over that hash
ed25519_verify(
  message   = "OPENROBOTICS-DEMO-v1\ntask:<id>\nhash:<demo_hash>\n...",
  signature = base58_decode(proof.signature),
  pubkey    = base58_decode(proof.wallet),
)

# 3. the physics agrees the task was completed
replay(episode.samples) -> every checker latches, in order

Step three is the one that matters. The server does not read a success flag from the client. It walks the recorded body poses through the same checkers the simulator ran, and it rejects an end effector that teleports, a sample count that disagrees with the duration, or a hash that has already been paid.

Task families

  • kitchen-tabletop3 tasks
  • assembly-tabletop2 tasks
  • office-tabletop1 tasks