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": "<0x address>",
"signature": "<0x secp256k1 personal_sign (EIP-191) over the ROBINROBOTICS-DEMO-v1 message>",
"memo_tx": "<ethereum tx hash>"
},
"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
ecrecover(
message = eip191("ROBINROBOTICS-DEMO-v1\ntask:<id>\nhash:<demo_hash>\n..."),
signature = proof.signature,
) == proof.wallet
# 3. the physics agrees the task was completed
replay(episode.samples) -> every checker latches, in orderStep 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