{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "urn:mujoco-web:robot:v1", "description": "V1 numeric robot payloads. Descriptor semantics and action epoch/lease/sequence are additionally validated at runtime. JSON numbers must be finite. No camera, lockstep or training support.", "oneOf": [ { "$ref": "#/$defs/descriptor" }, { "$ref": "#/$defs/action" }, { "$ref": "#/$defs/observation" } ], "$defs": { "id": { "type": "string", "pattern": "^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,127}$" }, "counter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "values": { "type": "object", "minProperties": 1, "maxProperties": 256, "propertyNames": { "$ref": "#/$defs/id" }, "additionalProperties": { "type": "number" } }, "channel": { "type": "object", "additionalProperties": false, "required": ["id", "unit", "mode", "min", "max"], "properties": { "id": { "$ref": "#/$defs/id" }, "unit": { "enum": ["rad", "rad/s", "m", "m/s", "ratio", "N", "N.m"] }, "mode": { "enum": ["position", "velocity", "effort", "opening"] }, "min": { "type": "number" }, "max": { "type": "number" } } }, "channels": { "type": "array", "minItems": 1, "maxItems": 256, "items": { "$ref": "#/$defs/channel" } }, "descriptor": { "type": "object", "additionalProperties": false, "required": [ "protocolVersion", "profileId", "profileVersion", "modelFingerprint", "frame", "actionChannels", "observationChannels", "capabilities" ], "properties": { "protocolVersion": { "const": 1 }, "profileId": { "$ref": "#/$defs/id" }, "profileVersion": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "modelFingerprint": { "type": "string", "pattern": "^[a-f0-9]{64}$" }, "frame": { "const": "x-forward-y-left-z-up" }, "actionChannels": { "$ref": "#/$defs/channels" }, "observationChannels": { "$ref": "#/$defs/channels" }, "capabilities": { "type": "object", "additionalProperties": false, "required": ["reset", "lockstep", "cameras", "training"], "properties": { "reset": { "type": "boolean" }, "lockstep": { "const": false }, "cameras": { "const": false }, "training": { "type": "boolean" } } } } }, "action": { "type": "object", "additionalProperties": false, "required": ["protocolVersion", "sessionId", "modelEpoch", "leaseId", "actionSeq", "values"], "properties": { "protocolVersion": { "const": 1 }, "sessionId": { "$ref": "#/$defs/id" }, "modelEpoch": { "$ref": "#/$defs/counter" }, "leaseId": { "$ref": "#/$defs/id" }, "actionSeq": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "values": { "$ref": "#/$defs/values" } } }, "observation": { "type": "object", "additionalProperties": false, "required": [ "protocolVersion", "sessionId", "modelEpoch", "sequence", "simTime", "appliedActionSeq", "paused", "values" ], "properties": { "protocolVersion": { "const": 1 }, "sessionId": { "$ref": "#/$defs/id" }, "modelEpoch": { "$ref": "#/$defs/counter" }, "sequence": { "$ref": "#/$defs/counter" }, "simTime": { "type": "number", "minimum": 0 }, "appliedActionSeq": { "$ref": "#/$defs/counter" }, "paused": { "type": "boolean" }, "values": { "$ref": "#/$defs/values" } } } } }