Skip to content

Running Many Robots as One System: Multi-Robot Fleet Orchestration with Open-RMF and VDA 5050

How task allocation, traffic management and vendor adapters fit together for mixed AMR fleets, from the VDA 5050 spec and Open-RMF docs, with a message-load calculation.

Contents

Key takeaways

  1. Multi-robot orchestration does three jobs: task allocation, traffic management and shared-infrastructure integration (doors, lifts, chargers). With mixed vendors, first decide who owns each job.
  2. VDA 5050 is a common interface between mobile robots and a fleet control. Version 3.0.0 uses MQTT (3.1.1 minimum) with JSON, and robots publish state when relevant events occur or at least every 30 seconds.
  3. Open-RMF is an Apache-2.0, ROS 2-based platform that coordinates traffic and shared infrastructure across fleets. Each fleet connects through an adapter, at Full Control (RMF sets paths) or Traffic Light Control (pause/resume only).
  4. Estimate control load as robots × message rate × message size. Real operating rates such as position visualization, not the spec minimum, set the load.

With one or two robots in a warehouse or hospital, the vendor’s management screen is enough. Once robots from different vendors share aisles and lifts, you need a fleet layer that decides which robot takes which job and who goes first. This article explains the two most common building blocks for that layer, VDA 5050 and Open-RMF, from their official documentation, and calculates how control traffic grows with fleet size.

Three jobs a multi-robot fleet layer does

JobWhat it decidesWhat goes wrong without it
Task allocationWhich robot gets which jobA distant robot travels while a close one idles; charging times collide
Traffic managementWho passes a shared aisle or junction firstRobots deadlock head-on; detours multiply
Shared infrastructureOrder of use for doors, lifts, chargersQueues at lifts; contested chargers

With a single vendor, that vendor’s fleet manager does all three. The trouble starts with mixed brands. MiR’s own explanation notes that mixed-vendor fleets can create complex traffic situations and that a common control source simplifies operating them.

The data loop that keeps improving models in the field is covered in our article on robot fleet MLOps. This article sits one layer below: coordinating robots that are moving right now.

VDA 5050: a common language between robots and fleet control

VDA 5050 is the interface defined by the German Association of the Automotive Industry (VDA) for communication between mobile robots and a fleet control. The latest published version in the GitHub repository is 3.0.0. Transport is MQTT, with MQTT 3.1.1 as the minimum version, and messages are JSON.

TopicDirectionContent
orderFleet control → robotLists of nodes and edges to traverse
instantActionsFleet control → robotImmediate actions such as pause
stateRobot → fleet controlPosition, order progress, battery, errors
visualizationRobot → visualization systemsHigh-rate position and planned path (optional)
connectionBroker or robot → fleet controlConnection status
factsheetRobot → fleet controlRobot capabilities and specifications

Source: VDA 5050 specification v3.0.0

An order carries two lists, nodes and edges, and the number of edges must equal the number of nodes minus one. Released nodes and edges form the base; unreleased ones form the horizon. Fleet control can show a robot its horizon while extending the base step by step, which is one way to sequence robots through a junction. A trimmed example:

{
  "orderId": "pick-0412",
  "orderUpdateId": 0,
  "nodes": [
    {"nodeId": "dock-A", "sequenceId": 0, "released": true},
    {"nodeId": "aisle-3", "sequenceId": 2, "released": true},
    {"nodeId": "shelf-17", "sequenceId": 4, "released": false}
  ],
  "edges": [
    {"edgeId": "dock-A_aisle-3", "sequenceId": 1, "released": true},
    {"edgeId": "aisle-3_shelf-17", "sequenceId": 3, "released": false}
  ]
}

Fields are trimmed to show the structure; the required fields and schemas live in the repository’s json_schemas folder. Per the spec, a robot’s state message is published when relevant events occur or at least every 30 seconds.

Open-RMF: a coordination layer over several fleets

Open-RMF is an open-source platform for managing multiple fleets together. It is built on ROS 2, supports the Humble, Jazzy, Kilted and Rolling distributions, and is licensed under Apache-2.0. A number of commercial robots, building systems and workcells have already been integrated, and a new fleet connects through an adapter started from fleet_adapter_template.

If VDA 5050 defines what one robot and its fleet control say to each other, Open-RMF sits above that, coordinating paths and shared infrastructure across different fleets. The ROS 2 multi-robot guide describes adapter integration levels:

  • Full Control: RMF specifies the explicit paths robots follow and can interrupt and replace them; robot positions update live.
  • Traffic Light Control: RMF can only pause and resume each robot; the vendor system chooses the path.

The lower the integration level, the coarser traffic management becomes. With many pause/resume-only robots, RMF has to stop robots earlier and more often to avoid conflicts.

AspectVDA 5050Open-RMF
NatureInterface specificationSoftware platform (implementation)
ScopeOne robot ↔ fleet controlMultiple fleets ↔ building infrastructure
FoundationMQTT, JSONROS 2
Shared infrastructureOutside the spec’s scopeCovers doors and lifts
How you adopt itRobot and fleet control both implement the specWrite or obtain an adapter per fleet

The two work at different layers rather than competing. A site can run VDA 5050 robots under a VDA 5050 fleet control while a separate layer handles building infrastructure and coordination with other robot families.

Calculating control message load by fleet size

Load on the fleet server and MQTT broker can be estimated from robot count, message rate and message size. Using only the spec’s minimum rate badly understates it, so calculate an operating assumption alongside it.

robots = 50

# 1) Spec minimum: state at least every 30 s (VDA 5050 v3.0.0)
min_msgs_per_s = robots / 30
print(round(min_msgs_per_s, 2))          # 1.67 msg/s

# 2) Operating assumption: state 1 Hz (2 KB), visualization 10 Hz (0.5 KB)
state_hz, state_kb = 1, 2.0
vis_hz, vis_kb = 10, 0.5
msgs_per_s = robots * (state_hz + vis_hz)
mbit_per_s = robots * (state_hz * state_kb + vis_hz * vis_kb) * 1024 * 8 / 1e6
print(msgs_per_s, round(mbit_per_s, 2))  # 550 msg/s, 2.87 Mbit/s

For the same 50 robots, the spec minimum (about 1.7 messages per second) and the operating assumption (550 per second) differ by more than 300×. Message sizes and rates depend on the robot vendor and fleet software settings, so replace these assumed values with the message counts and sizes your broker actually records during a pilot.

Two practical consequences follow. First, the broker and network should be sized from the operating case, with headroom for robots reconnecting after a Wi-Fi drop, when many connection and state messages arrive at once. Second, the visualization stream is optional in the spec; if a dashboard only needs a refresh every second, lowering its rate is the cheapest way to cut load.

Five things to confirm with robot and fleet-software vendors

  1. Supported VDA 5050 version and actions: fields and behavior differ between versions.
  2. Integration level: whether paths can be set (Full Control) or only pause/resume (Traffic Light).
  3. Shared infrastructure: whether the fleet layer can control doors, lifts and chargers.
  4. Message rates and sizes: how many Hz state and visualization run at, and how many KB each message is.
  5. Behavior when control is lost: whether robots stop immediately or finish the current task.

The fleet size and operating conditions you settle here feed directly into our warehouse and factory robot TCO and ROI model. For the order in which humanoids are entering real sites, see humanoid first deployments.

Common mistakes

  • Assuming VDA 5050 support means plug-and-play with any fleet control — the spec version and supported actions must match.
  • Leaving each vendor’s fleet manager in charge while robots share aisles — robots that cannot see each other’s paths deadlock.
  • Sizing the network on the 30-second minimum state interval — high-rate messages such as visualization create the real load.

Pre-flight checklist

  • Do you have each vendor’s supported VDA 5050 version and action list?
  • Have you confirmed per robot whether paths can be set (Full Control) or only pause/resume (Traffic Light)?
  • Can the fleet layer control doors, lifts and chargers?
  • Have you calculated MQTT broker load from robot count and message rates?
  • Is the robot behavior defined for when the fleet control goes offline (stop vs. finish current task)?

Frequently asked questions

Does VDA 5050 apply to humanoids?
VDA 5050 covers communication between mobile robots and a fleet control, so its main targets are AGVs and AMRs. A humanoid used like a mobile robot in logistics could sit under the same fleet layer, but manipulation tasks need a separate check of what the spec’s actions cover.
Do I need to know ROS 2 to use Open-RMF?
Open-RMF is built on ROS 2 and supports the Humble, Jazzy, Kilted and Rolling distributions. Writing your own fleet adapter requires ROS 2 nodes and topics, so first check whether the robot vendor already ships an adapter.

Sources & verification

  1. VDA 5050 — Interface for the Communication between Mobile Robots and a Fleet Control (v3.0.0, GitHub)
  2. Open-RMF — platform for multi-fleet robot management (GitHub)
  3. Programming Multiple Robots with ROS 2 — Fleet integration (RMF fleet adapters)
  4. MiR — Interoperability, the VDA5050 standard and MiR's approach

Last verified: