VDA5050 Support for Open-RMF
A ROS 2 Jazzy implementation of the VDA5050 v2.1.0 protocol that lets Open-RMF command a mixed fleet — a custom FabLab AMR and TurtleBot3 robots — over MQTT.
Overview
VDA5050 is an open interface standard for communication between AGVs/AMRs and a master control, developed by the German associations VDA and VDMA. Open-RMF is an open-source framework for managing fleets of robots from different vendors. This joint project between the EIU FabLab and ARTC (Singapore) connects the two: Open-RMF plans and schedules the fleet, and every robot is driven through VDA5050 v2.1.0 messages over MQTT.
The ground station runs Open-RMF core, the fleet adapter and the operator dashboard together in one Docker container. Each robot runs its own VDA5050 client adapter and Nav2 navigation stack, and only the MQTT broker crosses between the two sides.
My role
As Technical Lead on the EIU side, I led the design and implementation of the system — the fleet adapters, the robot-side client adapter and Nav2 bridge, and the fleet dashboard — and prepared the milestone demos on real robots and in simulation.
System architecture
over MQTT
The robot side exposes two interfaces: northbound, the six VDA5050 MQTT topics
(order, instantActions, state, visualization, connection, factsheet), and
southbound, ROS 2 topics (vda5050_msgs) between the client adapter and the robot
driver. Because the robot side speaks plain VDA5050, a master control other than
Open-RMF can drive it unchanged.
Key features
A planned multi-waypoint route from RMF is sent as one order; nodes can be released step by step and replans are stitched into the same order.
When RMF asks a robot to stop, the AGV is paused and keeps its order, then resumes when the new route arrives.
One adapter process per fleet, many robots per fleet; the AMR and TurtleBot3 fleets run together and deconflict through RMF.
A robot found on the broker can be checked, added, removed or restored into a running fleet.
Pause, resume, speed limit and re-localization per robot; lane closures and no-go zones per fleet.
Resends unconfirmed orders, reads the AGV factsheet, validates orders before sending, and was tested with a third-party VDA5050 client.
Fleet dashboard
The dashboard (eiu_fleet_ui) monitors system health, robots, traffic and tasks;
dispatches and cancels patrol and delivery tasks; gives per-robot control; draws no-go
zones; edits the nav graph; and shows each robot’s live VDA5050 order and message log.
Robots
| FabLab AMR | TurtleBot3 Burger | |
|---|---|---|
| Kinematics | Differential drive | Differential drive |
| Size | 0.6 m × 0.4 m | 138 × 178 × 192 mm |
| Max speed | 0.30 m/s · 0.60 rad/s | 0.22 m/s |
| Compute | SOM-RK3399 (2× Cortex-A72 + 4× Cortex-A53) | SOM-RK3399v2 |
| Sensors | LR-1BS 2D LiDAR (270°), Orbbec DaBai Pro depth camera, BNO055 IMU | 2D LiDAR |
| Navigation | Nav2: Theta* planner → Simple Smoother → MPPI controller | Nav2 |
| RMF fleet | amr_fleet (1 robot) |
tb3_fleet (2 robots) |
Packages
| Package | Layer | Role |
|---|---|---|
eiu_fleet_ui |
Dashboard | PySide6/QML operator dashboard, can follow several fleet adapters at once |
vda5050_fleet_adapter_full_control |
Fleet adapter | Open-RMF full-control adapter; sends a planned route as one VDA5050 order |
vda5050_fleet_adapter |
Fleet adapter | EasyFullControl variant; one VDA5050 order per destination |
fleet_bringup |
Ground station | One launch file for RMF core, the adapter, mock workcells and the dashboard |
vda5050_client_adapter |
Robot | VDA5050 over MQTT ⇄ ROS 2 vda5050_msgs; publishes state and connection |
tb3_vda5050_bridge |
Robot | Turns order steps into Nav2 NavigateToPose goals; reports odometry, battery and progress |
tb3_simulation |
Simulation | TurtleBot3 + Nav2 in Gazebo Harmonic, world generated from the traffic editor |
vda5050_msgs |
Shared | ROS 2 message definitions shared by the robot-side nodes |
Simulation
Demo videos
- 3 robots — AMR + TurtleBot3 fleetsBoth fleets running together on real robots
- 2 × TurtleBot3Multi-robot deconfliction through RMF
- AMR fleetSingle-robot demo on the FabLab AMR
- TurtleBot3 (real robot)Patrol / delivery over VDA5050
- 3 robots in GazeboMulti-fleet simulation
- Third-party VDA5050 client3 virtual AGVs built on vda-5050-lib
Full playlist: YouTube · Source code and package documentation: GitHub
Current limitations
- Tested on one building level; lifts and multi-floor map switching are not built yet.
- Charging and pick-and-drop actions are supported in the protocol but tested only with simulated AGVs or mock workcells.
- Tested with a third-party VDA5050 client, not yet with a commercial AGV.