Skip to main content

VDA5050

VDA5050 is an open standard for communication between AGV fleets and a central master control, usually a fleet manager. The 2.0.0 version of this standard is natively supported by Slamcore Aware, enabling a fast and simple integration between Slamcore Aware and third party systems with the purpose of allowing users to monitor manually guided vehicles in a facility seamlessly.

VDA5050 uses JSON messages sent over MQTT Topics for communication. An MQTT broker is required to connect Slamcore Aware with the master control.

note

The official specification document for VDA5050 can be found at https://github.com/VDA5050/VDA5050/blob/release/2.1.0/VDA5050_EN.md

VDA5050 Topics and Messages

VDA5050 supports a number of different topics for communication.

Slamcore Aware publishes to the connection, state and visualization topics.

The connection topic enables the master control (fleet manager) to detect the vehicle's connection status with the MQTT broker. The state topic is used to communicate the overall AGV state, state messages are published with occurrence of relevant events or at the latest every 30s. The visualization topic can be used for near real-time position updates, this message contains the same positioning information as the state topic but is published at a higher frequency.

Example message content published by Slamcore Aware is shown below. Note not all fields in a message may be populated.

Connection Message

All fields are populated. Manufacturer and SerialNumber can be set in the Slamcore Aware VDA5050 settings.

{
"headerId":0,
"timestamp":"2024-08-14T16:13:38.986063Z",
"version":"2.0.0",
"manufacturer":"Slamcore",
"serialNumber":"SC-LAP-00202",
"connectionState":"ONLINE"
}

State Message

Live data is published in the header, driving, agvPosition, and velocity fields. Other fields are empty or have placeholder data e.g. batteryState.

note

loads field is conditionally populated when load detection sensor is enabled, see details in Load Detection section.

Note the driving flag is set based on the thresholds available under Driving state in the Positioning tab of the Settings page (The default thresholds are 1s movement timeout, 0.5m/s for linear velocity (for each axes) and 0.05rad/s for angular velocity (for each axes).

Note the positionInitialized flag is set to True when the system has relocalised on the map.

{
"headerId":1,
"timestamp":"2024-08-15T14:12:07.196380Z",
"version":"2.0.0",
"manufacturer":"Slamcore",
"serialNumber":"SC-LAP-00202",
"orderId":"",
"orderUpdateId":0,
"lastNodeId":"",
"lastNodeSequenceId":0,
"driving":false,
"operatingMode":"MANUAL",
"nodeStates":[

],
"edgeStates":[

],
"agvPosition":{
"x":0.0003174958496715071,
"y":0.00014522085300529145,
"theta":-0.0002669197967105682,
"mapId":"dataset_with_fiducials",
"positionInitialized":false,
"localizationScore":1.0
},
"velocity":{
"vx":0.00023870712250831204,
"vy":-0.0003285838557528985,
"omega":-0.000027387174505402767
},
"loads":[

],
"actionStates":[

],
"batteryState":{
"batteryCharge":0.0,
"charging":false
},
"errors":[

],
"safetyState":{
"eStop":"NONE",
"fieldViolation":false
}
}

Visualization Message

All fields are populated.

Note the positionInitialized flag is set to True when the system has relocalised on the map.

{
"headerId":2,
"timestamp":"2024-08-15T12:15:29.912029Z",
"version":"2.0.0",
"manufacturer":"Slamcore",
"serialNumber":"SC-LAP-00202",
"agvPosition":
{
"x":0.00003969906005146165,
"y":0.00008901086901519631,
"theta":0.00002634349343674802,
"mapId":"dataset_with_fiducials",
"positionInitialized":false,
"localizationScore":0.0
},
"velocity":
{
"vx":0.0011625125154127933,
"vy":0.0001592607690816649,
"omega":-0.000022725268365876898
}
}

Slamcore specific VDA5050 topics and messages

Aware Slamcore introduces a custom topic, perception for publishing information on nearby objects (person, vehicle) detected by the system.

note

This topic is disabled by default and can be enabled from settings_icon Settings > Integrations page.

Perception Message

All fields are populated. This messages carries a list of detected objects at the time of publishing. If no objects are detected, the list is empty. The location for each detected object is provided in two different reference frames. world_location is reported in world coordinate frame, the same reference frame the vehicle pose, avgPosition is located in state message. Note that when system is not localised, this field is empty. body_location is reported relative to the vehicle based on the latest estimated pose. It is reported in the frame defined by Vehicle Tracking Point setting, set from settings_icon Settings > Positioning page.

{
"headerId":10,
"timestamp":"2025-12-18T14:03:14.228706Z",
"version":"2.0.0",
"manufacturer":"Slamcore",
"serialNumber":"sc-aware-jpah0005",
"detections":
[
{
"label":"Person",
"world_location":
{
"x":-0.9514351499122923,
"y":-0.3987028865113173
},
"body_location":
{
"x":3.6405984683845896,
"y":2.9875839071762567
}
}
]
}

VDA5050 MQTT Broker

How does Slamcore Aware communicate with a third party system using VDA5050?

VDA5050 requires an MQTT broker, which will receive messages from Slamcore Aware and make them available to a third party application. The broker can run on a device on the local network or be hosted on the cloud.

An example broker that can be used is https://mosquitto.org .

To set this up, simply install it on a laptop or desktop computer:

sudo apt install mosquitto mosquitto-clients

Once installed, the mosquitto service should start automatically with default settings. You can check this is running with:

systemctl status mosquitto.service

If the service is not currently running, you can also start mosquitto manually from the command line:

user@SC-LAP-00252:~$ mosquitto
1724924957: mosquitto version 2.0.11 starting
1724924957: Using default config.
1724924957: Starting in local only mode. Connections will only be possible from clients running on this machine.
1724924957: Create a configuration file which defines a listener to allow remote access.
1724924957: For more details see https://mosquitto.org/documentation/authentication-methods/
1724924957: Opening ipv4 listen socket on port 1883.
1724924957: Opening ipv6 listen socket on port 1883.
1724924957: mosquitto version 2.0.11 running

The broker can be configured through the /etc/mosquitto/mosquitto.conf file. Otherwise, with default settings you should be able to connect to the broker using port 1883 of localhost on the machine that is running the broker. To access the broker from the Slamcore Aware device, use the same port but the IP address of the device running the broker. Further details and an example are provided below.

Broker Security and Authentication

Currently it is possible to use a broker with no authentication, or with a TLS Client Certificate or Username/password authentication if additional security is required.

VDA5050 Settings Overview

VDA5050 can be enabled and configured through the Integrations tab of the Settings page. Enabling the VDA5050 toggle will reveal the configurable settings. The following settings are available.

MQTT Broker Connection Settings
MQTT Broker Connection Settings
MQTT Broker Certificate Settings
MQTT Broker Certificate Settings
Interface Details Settings
Interface Details Settings
Topic & Message Settings
Topic & Message Settings

The following table provides a brief overview of the available settings, highlighting which ones are required for VDA5050 to work.

VDA5050 Settings

Settings FieldDescriptionRequired
MQTT ProtocolThe MQTT protocol version should be set depending on the version supported by the MQTT broker. Mosquitto supports v3.1, v3.1.1. and v5.Yes
MQTT Client IDThe Client ID must be set to something unique for each device, we recommend setting it to e.g. the device hostname or serial number. This helps the broker recognize when a client reconnects and it can close any old connections.Yes
MQTT HostThe MQTT host should point to the address where the broker can be found. If running Mosquitto on a machine on the same network as Slamcore Aware, this should be set to the IP address of that machine. This field can also be set to a specific server address (e.g. AWS, Azure etc).Yes
MQTT PortThe MQTT port should be set to the port which the broker is listening to. When running Mosquitto with default settings this should be set to 1883.Yes
MQTT UsernameUsername for MQTT broker authentication.No
MQTT PasswordPassword for MQTT broker authentication.No
TLS Certificate AuthorityUsed to upload the certificate authority certificate (.pem file) when using TLS security/authentication.No
TLS Client CertificateUsed to upload the unique Client Certificate for the device (.pem.crt file) when using TLS security/authentication.No
TLS Client KeyUsed to upload the unique Client Key for the device (.pem.key file) when using TLS security/authentication.No
Disable hostname verificationDisable hostname verification against an uploaded certificate (Insecure).No
MQTT Topic PrefixDefine what prefix will be used in front of each topic name. When inspecting the topic on the broker, this will show up as <topic_prefix>/<topic>. It is recommended to leave this field empty.No (default will be used)
Interface NameUsed to populate the first part of the MQTT Topic Prefix (if this has not been set explicitly). This is used to help identify the interface being used for the topics.Yes
ManufacturerThe Manufacturer field will be used to populate the MQTT Topic Prefix (if this has not been set explicitly) as well as the Manufacturer field inside the connection, state and visualization messages. This is set to Slamcore by default.No (default will be used)
Serial NumberThe Serial Number field will be used to populate the MQTT Topic Prefix (if this has not been set explicitly) as well as the Serial Number field inside the connection, state and visualization messages. This is set to the device’s hostname by default e.g. sc-aware-jp5b0003.No (default will be used)
Connection message toggleDisables the connection topic when unchecked. No messages will be published on that topic.No (default will be used)
State message toggleDisables the state topic when unchecked. No messages will be published on that topic.No (default will be used)
State publication periodThe State publication period slider allows users to adjust the frequency at which the state message is published. Defaults to 30s.No (default will be used)
Visualization message toggleDisables the visualization topic when unchecked. No messages will be published on that topic.No (default will be used)
Visualization publication periodThe Visualization publication period slider allows users to adjust the frequency at which the visualization message is published. Defaults to 1s.No (default will be used)
Perception message toggleEnables the custom perception topic when checked. When unchecked (the default), no messages will be published on that topic.No (default will be used)
Perception publication periodThe Perception publication period slider allows users to adjust the frequency at which the perception message is published. Defaults to 30s.No (default will be used)

Once the required settings have been completed, ensure you click Save Changes at the top of the page to apply them. You can then check if the system is able to connect with the broker successfully before starting positioning by using the CHECK CONNECTION button on the top right of the page. Whilst VDA5050 is enabled, Slamcore Aware will attempt to establish a connection with the MQTT broker every time positioning is started. The Notifications section of the positioning page will show if the connection with the broker was established successfully (VDA5050 Connected: Success) or not (VDA5050 failed to connect).

Example using Mosquitto

  1. Make sure the Mosquitto broker is running with default settings as explained earlier.
  2. Enable VDA5050 in the Slamcore Aware settings and set the following example values (dash “-” means leave empty/default):

Example Settings

Settings FieldValue
MQTT Protocolv5
MQTT Client IDslamcore-aware-device
MQTT Host<IP address of machine running the broker>
MQTT Port1883
MQTT Username-
MQTT Password-
TLS Certificate Authority-
TLS Client Certificate-
TLS Client Key-
Disable hostname verification-
MQTT Topic Prefix-
Interface Nameslamcore-aware
Manufacturer-
Serial Number-
State publication period1s
Visualization publication period0.3s
  1. Click Save Changes and head to the Positioning Page.
  2. Start Mapping or Localisation mode and ensure the Notifications show VDA5050 Connected: Success once the system is running.
  3. You can use something like https://mqtt-explorer.com or https://vda5050-visualizer.vercel.app to inspect the messages being published by Slamcore Aware. Further details are provided in the following sections.

Inspecting messages with MQTT Explorer

If using MQTT Explorer on the same machine that is running the broker, use the following settings to connect to the broker:

MQTT Explorer Connection Details
MQTT Explorer Connection Details

If running MQTT Explorer on a different device to the one running the broker, replace localhost with the IP address of the device running the broker. Once connected and if Slamcore Aware is running, you should be able to inspect the messages being published.

Received messages on MQTT Explorer
Received messages on MQTT Explorer

Inspecting messages with VDA5050 Visualizer

If using VDA5050 Visualizer, first create the file /etc/mosquitto/conf.d/mosquitto_local.conf with the contents shown further below. This is required because modern web browsers cannot access the MQTT protocol directly. Therefore, the use of web sockets must be enabled in the MQTT broker settings, as noted in the VDA5050 Visualizer GitHub Readme - MQTT Broker Settings.

per_listener_settings true
listener 1883
allow_anonymous true

listener 14520
protocol websockets
allow_anonymous true

Then stop and restart the broker with the new configuration.

mosquitto -c /etc/mosquitto/conf.d/mosquitto_local.conf

With the broker running, enter the following settings on VDA5050 Visualizer

VDA5050 Visualizer Settings

Settings FieldValue
Broker IPlocalhost (assuming the visualizer is running on the same machine as the broker)
Broker Port14520
Basepathslamcore-aware/v2/Slamcore/<replace-with-device-serial or hostname>
Interface Nameslamcore-aware
VDA Version2.0.0

You should start to see data at the bottom of the page. Note, nothing will be shown on the 2D canvas.