VDA 5050 · 2.0.0 / 2.1.0 / 3.0.0
A standard mobile robot fleet, no robots required
Spec-faithful emulated VDA 5050 robots over MQTT with an embedded broker — point your master control at one address and drive orders, instant actions, zones and faults. Every message in and out is validated against the official JSON schemas, vendored with pinned provenance from the VDA5050 repository.
Externally validated, both directions
Self-validation is circular. These transcripts are from live runs against independent open-source implementations — robot side and master side.
NVIDIA Isaac Mission Dispatch 4.3.0
MD's own client connected to the emulator's broker, dispatched a two-node route mission and tracked it to completion:
t+ 0.05s [MD>robot] order …-n0 (update 0): 3 nodes
t+ 5.15s [MD api ] mission RUNNING nodes={'goto_pickup': 'COMPLETED', …}
t+ 7.19s [MD api ] mission COMPLETED
RESULT: mission COMPLETED
InOrbit / OTTO vda5050_connector
Their ROS 2 connector accepted an order built by our MasterControl over our broker and executed it end to end:
t+ 3.35s [robot>us ] state: lastNodeId='wp0' … actions=[('detectObject', 'WAITING')]
t+ 5.54s [robot>us ] state: lastNodeId='wp2' … nodeStates=0
t+ 8.30s [robot>us ] state: … actions=[('detectObject', 'FINISHED')]
RESULT: order COMPLETED by InOrbit vda5050_connector
Five minutes to a moving robot
$ uv run vda5050-emulator
vda5050-emulator: VDA 5050 3.0.0, embedded broker on mqtt://0.0.0.0:1883
robot: vda5050/v3/amr-emulator/vagv-0001/{order,instantActions,state,connection,...}
five-minute check with any MQTT client:
subscribe: vda5050/v3/+/+/state
publish an order to: vda5050/v3/amr-emulator/vagv-0001/order
fault injection (JSON): vda5050/v3/amr-emulator/vagv-0001/_emulator
e.g. {"emergencyStop": "MANUAL"} or {"battery": {"level": 7}}
$ vda5050-emulator --broker 10.0.0.5 --spec 2.1.0 --robots 5 --time-scale 60 # joins YOUR existing MQTT broker — no infrastructure changes; # --spec switches the protocol generation (2.0.0 / 2.1.0 / 3.0.0); # --robots N puts a small fleet on the same broker; # --time-scale runs simulated time faster for soak tests.
$ docker compose up vda5050 # broker on :1883 + two robots $ docker build -f Dockerfile.vda5050 -t vda5050-emulator . $ docker run --rm -p 1883:1883 vda5050-emulator --robots 2
The wire, live
Paste an order message and check it against the official VDA 5050 order schema — the same documents the emulator bundles (vendored from VDA5050/VDA5050 with commit-pinned provenance).
In-browser subset validator (required / type / enum / items /
properties / local $ref) — the emulator itself validates with full
jsonschema on every message, both directions.
Your MiR robot is already a VDA 5050 robot
amr-vda5050-adapter bridges the MiR REST API (3.8.1)
to VDA 5050 — orders become MiR missions, GET /status becomes spec-valid
state. Validated live: Isaac Mission Dispatch → adapter → MiR emulator,
mission COMPLETED in 11 s.
$ uv run amr-emulator & # or a real MiR on your network $ uv run vda5050-emulator --robots 0 & # broker-only mode $ uv run amr-vda5050-adapter --mir-url http://127.0.0.1:8080 --broker 127.0.0.1:1883
What the robot does
| Surface | Coverage |
|---|---|
| Protocol versions | 2.0.0, 2.1.0, 3.0.0 — switchable per robot (--spec); topic roots uagv/v2 and vda5050/v3 |
| Order lifecycle | Full Figure-8 acceptance flow: base/horizon with stitching updates, the complete predefined rejection-error catalogue, newBaseRequest, cancelOrder semantics, idle rules |
| Actions | Blocking types NONE/SOFT/SINGLE/HARD per Figure 11; the predefined action table incl. pause, charging, maps, hibernation, pick/drop, waitForTrigger/trigger, retry/skipRetry |
| Zones (3.0.0) | BLOCKED, RELEASE (request/response with lease expiry), SPEED_LIMIT, ACTION zones — geometric enforcement, honestly advertised in the factsheet |
| Connection | Retained ONLINE/OFFLINE, MQTT last-will CONNECTION_BROKEN, retained factsheet, hibernation (3.0.0) |
| Fault injection | Non-standard …/_emulator topic: emergency stop, field violation, localization loss, battery override, teleport, forced action failures, connection drops, time scaling |
| Compatibility | Proven against deployed masters: 1.x-style instantActions field executed (deviation still reported), idempotent instant-action redelivery |