A ROS2 package which implements a connector for VDA5050, a standardized interface for communication between fleets of AGVs/AMRs and a central Master Control.
The package names itself Connector, since it can be thought as a bridge between a VDA5050 Master Control (MC) and the ROS2 robot API.
The connector is composed of three main parts (ROS2 nodes):
- MQTT_bridge: Communicates the VDA5050 <> ROS2 topics, translating VDA5050 messages into ROS2 vda5050_msgs and vice versa.
- Controller: Processes the VDA5050 robot execution as per standard specification. It validates, executes, or rejects orders and instant actions, as well as assembles feedback information to the MC.
- Adapter: Provides the interaction between the controller and the Robot API. The adapter is the one who knows how to send a navigation goal request, execute an action or retrieve specific information robot such as battery or odometry.
The way the adapter knows how to execute the different operations requested by the controller is using ROS2 plugins (components). The current project provides three plugin template interfaces, called handlers, which cover the main communication paths:
- State handler: Designed for updating robot specific information on the VDA5050 order_state.
- NavTONode handler: Designed for sending goals to the robot navigation stack.
- VDA Action handler: Designed for handling requests to execute specific actions (localize, lift a load, etc).
The package is also a library package; it exports the headers and binary files to create and assemble a specific adapter. To create your own adapter package, add this package as a dependency and define the different plugin handlers for your robot. You can also customize the adapter core functionalities if desired.
To do this this, you can check the vda5050_examples repository, where you will find examples of adapter packages, for python and C++, as well as docker scripts to quickly start testing them.
- ROS2 - ament_cmake: The package is based on ROS2, and uses
ament_cmake
. - vda5050_msgs: ROS2 messages for the VDA5050 standard (version 2.0).
- pluginlib: The adapter uses plugins to load the different handlers.
- python3-paho-mqtt: The
mqtt_bridge
uses thepaho-mqtt
library as the mqtt client.
Start a docker container with the required packages mounted on dev_ws
:
# Go to the repository root folder and execute
docker run -ti --rm \
--workdir /dev_ws/ \
-v ./vda5050_msgs:/dev_ws/src/vda5050_msgs \
-v ./vda5050_serializer:/dev_ws/src/vda5050_serializer \
-v ./vda5050_connector:/dev_ws/src/vda5050_connector \
osrf/ros:humble-desktop-full
Now build the package:
apt update && apt install ros-humble-ament* -y
cd /dev_ws/
colcon build --symlink-install
The package provides several lint test (ament_pep257
and ament_flake8
for Python, ament_clang_format
for C++ and ament_copyright
), as well as specific unit tests to check the correct functionality of the different modules. To run the tests, execute:
cd /dev_ws/
rosdep install --from-paths src -y --ignore-src
colcon test --packages-select vda5050_connector && colcon test-result --verbose
Please see the CONTRIBUTING document.