advin.io AMR Emulator

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.

Robot 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

Full transcript + repro assets

Master side

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

Full transcript + repro assets

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}}

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

    Open the MiR console app Adapter validation transcript

    What the robot does

    SurfaceCoverage
    Protocol versions2.0.0, 2.1.0, 3.0.0 — switchable per robot (--spec); topic roots uagv/v2 and vda5050/v3
    Order lifecycleFull Figure-8 acceptance flow: base/horizon with stitching updates, the complete predefined rejection-error catalogue, newBaseRequest, cancelOrder semantics, idle rules
    ActionsBlocking 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
    ConnectionRetained ONLINE/OFFLINE, MQTT last-will CONNECTION_BROKEN, retained factsheet, hibernation (3.0.0)
    Fault injectionNon-standard …/_emulator topic: emergency stop, field violation, localization loss, battery override, teleport, forced action failures, connection drops, time scaling
    CompatibilityProven against deployed masters: 1.x-style instantActions field executed (deviation still reported), idempotent instant-action redelivery