multi-robot-framework
Multi-robot ROS2 (C++) framework for ground vehicles, enabling swarming capabilities of the EDIDP iMUGS project.
Science Score: 54.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
✓Academic publication links
Links to: researchgate.net -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.2%) to scientific vocabulary
Repository
Multi-robot ROS2 (C++) framework for ground vehicles, enabling swarming capabilities of the EDIDP iMUGS project.
Basic Info
- Host: GitHub
- Owner: ras-lab-rma
- License: mit
- Default Branch: main
- Size: 8.34 MB
Statistics
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Multi-Robot ROS2 Framework for Ground Vehicles
Overview
This repository serves as a Multi-robot ROS2 (C++) framework designed for ground vehicles. The primary purpose is to enable swarming capabilities as part of the European Defence Industrial Development Programme (EDIDP) Integrated Modular Unmanned Ground System (iMUGS) project. The framework is developed to showcase a centralized multi-robot coordination approach using real autonomous Unmanned Ground Vehicle (UGV) platforms.
For more information about the iMUGS project: RMA page

View Demonstration Videos: - iMUGS demonstration 4 - iMUGS demonstration 5 - iMUGS demonstration 6 - iMUGS demonstration 7
Citation and License
If you use this code, please cite both the code using the Citation file and our conference paper where we present the the underlying architecture.
This project is licensed under the MIT License.
Architecture
Within the iMUGS architecture, the multi-robot module is composed of a central fog module and distributed edge modules. The fog module is interfaced with the command and control (C2) module and orchestrates the mission planning, execution and the fleet management. The edge module is running on the mobile robots and takes care of supervising the execution of the computed trajectories. The module that takes care of reaching one waypoint after the other autonomously is the Autonomy module.

Included Features
- Swarm Manager: The swarm Manager is the fog module but without the mapping and planning submodules. The Swarm Manager module communicates with C2 (command & Control) and with the edge module of every agent.
- Swarm Edge Client: The Swarm Edge Client is the edge module, which communicates with the Swarm Manager and the Autonomy module
Not (yet) included
- Command and Control (C2): The C2 module is collocated with but not part of the fog module. This repository only includes a terminal C2 with basic command and control features for development.
- Swarm Planner: The swarm planner is part of the fog module and takes care of the mapping and trajectory planning based on the mission definition as requested by the C2 module.
- Autonomy: The Autonomy module takes care of the motion planning to reach the successive waypoints as requested by the edge module.
This repository has basic simulation nodes for the latter modules to allow easy integration by substitution.
Usage
Swarm Manager
As stated before, the Swarm Manager module communicates with C2 (command & Control), with the Swarm Planner (not included in this repository), which are all collocated on the Fog. The swarm Manager Module also communicates with the individual agents (Edge devices) remotely. The latter edge devices run the edge module (namely the Swarm Edge Client).
The whole communication network is using FASTRTPS dynamic, using DDS as a middleware.
The ROS2 nodes spinned by the executor.cpp are: * C2interfacenode: ROS2 interfaces with C2 are instantiated here * swarmorchestratornode: The main processes of the swarm manager are executed here (initializing a mission, adding it to the database, ...) * edgemanagernode: The interface with the edge devices and the main processes related to sending individual agent tasks and changing task states * mission_manager (multiple instances): One node for each mission is created. Here, the state machine is running for a specific mission and all mission-related processes are manger here (planning a mission, start, pause, stop, delete, ...) * swarm_planner ( ! not spinned by executor): This was dotOcean's task, so only the docker image is available. However, our own version is under development in another git repo.
MongoDB is used for storing multiple json objects. The different databases are: 1. MissionDB: * MissionConfig (=json files gathering all operator-defined mission parameters) * Planning 2. FeedbackDB: * MissionFeedback (= json files sent to C2 giving feedback about a specific mission) 3. VehicleDB: * Vehicles (= all kind of vehicle information like fuel level, size, constraints, connexion status, ...)
Using Docker
Prerequisites:
* Docker and docker-compose should be installed
* The latest docker image of MongoDB from DockerHub should be pulled
* (optional) MongoDB Compass installed for visualization of the databases
* The docker image of the Swarm Manager should be either:
- pulled from the gitlab container registry
- built locally through the DockerFile with the whole workspace
- loaded from a compressed .tar file of the image
* The docker-compose.yaml and config.yaml files should be available in the current working directory
To run docker images with the Docker Plugin in VS Code, right-click on any docker-compose.yaml and select 'Compose Up' (or in terminal running docker-compose up ).
To view the logs: using Docker Plugin, right-click on swarmmanager container which is running and select "View Logs". Or using terminal: find its contained ID with "docker ps" and run "docker logs --follow <containerid>"
- Go to docker-compose-dir/swarm_manager
- Run the
mongodb-docker-compose.yamlto run de database independently - Run the
docker-compose.yamlfile to start the swarm manager (! depends on mongodb !) - To have the C2 control, in another terminal, run "docker-compose run --rm c2_sim ". This allows to run the terminal C2 simulator interactively.
- Go to docker-compose-dir/swarm_planner to run the
swarm-planner-docker-compose.yaml. Remember that this swarm planner is no included in this repo.
Run locally (not recommended)
Prerequisites:
- Dependencies installed: ``` cd .config/ . install-dependencies.sh . install-custom-message-packages
``` * (optional) MongoDB Compass installed for visualization of the databases
Source ROS & install in all Terminals:
. /opt/ros/galactic/setup.bash && . install/local_setup.bash(optional) Setup FastRTPS:
in all terminals:
export RMW_IMPLEMENTATION="rmw_fastrtps_dynamic_cpp"
- Setup mongoDB:
Choose MongoDB hostname and port:
export MONGODB_CONNSTRING=mongodb://localhost:27017
Start MongoDB ('start' can be replaced by 'stop' or 'restart'):
sudo systemctl start mongod
Verify that MongoDB has started successfully:
sudo systemctl status mongod
- Terminal 1 - run the whole Swarm Manager module
ros2 run swarm_manager swarm_manager_executable
Testing with C2 and swarm planner simulators:
Terminal 3 - simulating the swarm planner
ros2 run swarm_manager test_swarm_planner_simTerminal 4 - simulating C2
ros2 run swarm_manager test_c2_sim
Swarm Edge Client
This project uses ROS2 C++ node(s) to act as the edge module of swarming within the iMUGS project. The Swarm Edge Client module communicates with Autonomy (also on edge, so locally) and with the Swarm Manager (on the Fog, so remotely). There is one instance of this module for each UGV, running independently of each other.
The whole communication network is using FASTRTPS dynamic, with eProsima integration service.
The only ROS2 node of this specific module is: * agent_ uuid: swarm edge client node which manages tasks and sends individual waypoints to autonomy.
Run with Docker-Compose
Prerequisites:
- Docker and docker-compose should be installed
- The docker image of the Swarm Edge Client should be either:
- pulled from the gitlab container registry
- built locally through the DockerFile with the whole workspace
- loaded from a compressed .tar file of the image
- The
docker-compose.yamlandconfig.yamlandlaunch_swarm_edge.shfiles should be available in the same working directory
Using Docker
- Go to docker-compose-dir and navigate to desired configuration (multiple agents, single agent with or without autonomy, ...)
- Comment/uncomment specific services in the
docker-compose.yamlfile based on desired running modules. The minimum service is the swarmedgeclient. Change the AGENT_ID environment variable here (it should be a uuid) - Adapt the
config.yamlfile based on desired parameters. For edge-only testing, set the corresponding parameter to True (the node will then use the given waypoints as a task) - With the Docker Plugin in VS Code, right-click on the desired
docker-compose.yamland select 'Compose Up' (or in terminal runningdocker-compose up) - To view the swarm edge client logs: using Docker Plugin, right-click on swarmmanager container which is running and select "View Logs". Or using terminal: find its contained ID with "docker ps" and run "docker logs --follow <containerid>" Comment: The autonomy simulator node can't differentiate between multiple swarmedgeclients messages (and vice-versa).
| Folder | Comments | |----------------------------------|-------------------------------------------------------------------------------------| | multiple-agents-sim | create multiple instances of swarm-edge-client | | multiple-agent-sim-with-autonomy | create multiple instances of swarm-edge-client + autonomy simulation for all agents | | single-agent | create one instance of swarm-edge-client (deployed version) | | single-agent-with-autonomy-sim | create one instance of swarm-edge-client + autonomy simulation | -------------------------------------------------------------------------------------------------------------------------|
Run locally (not recommended)
Prerequisites:
- Dependencies installed: ``` cd .config/ . install-dependencies.sh . install-custom-message-packages
``` Usage:
Terminal 1 - run the whole Swarm Edge Client module
. ros2ws/launch_swarm_edge.sh(For Testing) Terminal 2 - simulating the autonomy (if no autonomy module running on the robot)
. ros2ws/launch_autonomy_sim.sh
Owner
- Login: ras-lab-rma
- Kind: user
- Repositories: 1
- Profile: https://github.com/ras-lab-rma
Citation (CITATION.cff)
cff-version: 1.0.0
message: "If you use this software, please cite it as below."
authors:
- family-names: Le Flécher
given-names: Emile
- family-names: La Grappe
given-names: Alexandre
title: "Multi-Robot ROS2 Framework for Ground Vehicles"
version: 1.0.0
doi: 10.5281/zenodo.1234
date-released: 2023-11-14