Skip to content
ROS Discourse — Community updates· C88-YQ·· 2 hours agoSignalEditorial score75

[GSoC 2026] Scalable Multi-Robot Simulation in ROS 2 and Gazebo

[GSoC 2026] Scalable Multi-Robot Simulation in ROS 2 and Gazebo

Summary

This article describes a GSoC project by Open Robotics contributor Jiayi Cai aimed at simplifying multi-robot simulation in ROS 2 and Gazebo.

Editorial context

This publication details a GSoC project by Open Robotics contributor Jiayi Cai that introduces model namespace support and automated ROS-Gazebo bridging to simplify multi-robot simulation setups, with core infrastructure merged as of November 1, 2026, while plugin integrations and documentation remain under review.

Source: ROS Discourse — Community updates · Read original article ↗

Article text · Original source · English

On this page

Organization: Open Robotics

Contributor: Jiayi Cai (@C88-YQ)

Mentor: Addisu Taddese (@azeey)

Community Meeting Talk: Talk video; Talk slides

Project Overview

Multi-robot simulation is widely used in robotics research and development, including warehouse automation, robot swarms, and multi-robot coordination.

However, setting up a multi-robot simulation in ROS 2 and Gazebo can require a lot of repetitive configuration.

There are two main challenges:

  1. Communication isolation: When multiple robots share the same SDF model, they may also share the same topic and service names, leading to conflicts. Users often need to create separate SDF files or use templates to configure different names for each robot.
  2. ROS-Gazebo bridge configuration: Each robot usually requires several topic and service bridges. As the number of robots increases, manually maintaining these configurations becomes more difficult.

The goal of this GSoC project was to simplify multi-robot simulation by introducing two main features:

  • Model namespace support: Allow multiple robots to share the same SDF model while keeping their communication interfaces separate.
  • Automated ROS-Gazebo bridging: Automatically discover and create bridges for matching ROS 2 and Gazebo topics and services, reducing manual configuration.

These features aim to make multi-robot simulations easier to set up, maintain, and scale.

Main Work

1. Model Namespace Support

The first major part of the project was introducing model namespace support across SDFormat, Gazebo Sim, and ROS-Gazebo integration.

With this feature, users can assign a namespace to a model, allowing supported Gazebo plugins to use it when resolving topic and service names.

Model namespace support

Model namespace support1212×602 191 KB

Namespaces can be configured directly in SDF files using the <model> namespace attribute or the <include> namespace element. They can also be specified when spawning models at runtime.

For nested models, namespaces are resolved by searching from the current model up through its parents, combining relative namespaces until an absolute namespace is found. The resolved namespace is then used as a prefix for default and relative topic and service names, while absolute names remain unchanged.

Backward compatibility is preserved, so models without a namespace continue to use their existing topic and service naming behavior.

This feature provides a consistent approach for handling topic and service names across Gazebo plugins. It also allows multiple robots to share the same SDF model while keeping their communication interfaces separate, making multi-robot simulations much easier to set up and maintain.

Namespace support has been added to DiffDrive and extended to other drive plugins and sensors, with several PRs still under review.

2. Automated ROS-Gazebo Bridge

Previously, users needed to manually configure the names, message types, and communication directions of their bridges. This becomes repetitive when working with many robots that have similar communication interfaces.

The new automated bridge can discover matching topics and services on the ROS 2 and Gazebo sides and create the corresponding bridges. As illustrated below, the process consists of three main steps: discovering available interfaces, matching them based on their names and compatible message types, and creating the required bridges.

Automated birdge

Automated birdge1744×400 254 KB

The feature is optional and can be enabled using the automated_bridge.enable parameter. It also provides two optional configuration parameters:

  • include_patterns: Select which topics and services should be considered.
  • exclude_patterns: Exclude specific topics and services from automated bridging.

For example, the following configuration enables automated bridging for interfaces under /robot1 while excluding camera-related topics:

# example
ros_gz_bridge:
  ros__parameters:
    automated_bridge:
      enable: true
      include_patterns:
        - "/robot1.*"
      exclude_patterns:
        - ".*camera.*"

The automated bridge continuously checks for new interfaces, allowing it to discover topics and services created after the simulation starts.

It also supports using manual and automated bridge configurations together. Within the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces.

To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during this test, average CPU usage increased from 2.44% to 3.32%, while memory usage remained nearly unchanged. This suggests that the discovery and matching process adds relatively little overhead in the tested setup.

3. Documentation and Demos

Three documentation updates and two demos were prepared to demonstrate the new features and help users get started.

Documentation:

Demos:

  • Multi-Robot Demo — Demonstrates model namespaces and automated bridging with multiple robots.
  • Warehouse Demo — Demonstrates independent control of four Mecanum-wheel robots sharing the same SDF model.

Project Status and Pull Requests

The project involved changes across several repositories, including sdformat, gz-msgs, gz-sim, gz-transport, ros_gz, and Gazebo documentation. As of 1st November 2026, the core namespace infrastructure and several related features have been merged, while some plugin integrations, automated bridging, demos, and documentation are still under review.

The following table lists all PRs for the project:

Feature PR Title Status
Namespace Support sdformat #1663 Add support for namespace attribute on <model> ✅ Merged
gz-sim #3777 Add namespace component ✅ Merged
gz-sim #3872 Display namespace in gui ✅ Merged
gz-sim #3897 Add helper functions for namespaced topic resolution and unit test setup ✅ Merged
gz-sim #3871 Support entity_namespace in user commands entity creation ✅ Merged
gz-msgs #595 Add EntityFactoryWithNs ✅ Merged
gz-msgs #612 Add entity_namespace to EntityFactory ✅ Merged
gz-msgs #616 Deprecate EntityFactoryWithNs and EntityFactoryWithNs_V ✅ Merged
gz-sim #4057 UserCommands: Deprecate EntityFactoryWithNs and EntityFactoryWithNs_V 🔄 Under review
ros_gz #925 Add entity_namespace support for spawned entities ✅ Merged
ros_gz #1005 Replace EntityFactoryWithNs with EntityFactory for entity creation 🔄 Under review
gz-sim #3878 Add namespace support to DiffDrive ✅ Merged
gz-sim #4004 DiffDrive: Add support for custom enable topic ✅ Merged
gz-sim #4067 Document namespace support in DiffDrive parameters ✅ Merged
gz-sim #4066 MecanumDrive: Add namespace support 🔄 Under review
gz-sim #4136 AckermannSteering: Add namespace support 🔄 Under review
gz-sim #4141 TrackedVehicle & TrackController: Add namespace support 🔄 Under review
gz-sim #4147 JointController & JointPositionController: Add namespace support 🔄 Under review
gz-sim #4164 ApplyJointForce: Add custom topic support and namespace support 🔄 Under review
gz-sim #4166 DriveToPoseController: Add custom topic support and namespace support 🔄 Under review
gz-sim #4041 Add namespace support to rendering sensor 🔄 Under review
gz-sim #4050 Add namespace support to sensor plugins 🔄 Under review
gz-sim #4052 Add namespace support to sensor plugins 🔄 Under review
docs #719 Document namespace support 🔄 Under review
Automated Bridge gz-transport #967 Add Node::AllTopicInfo ✅ Merged
ros_gz #923 Support automated bridging 🔄 Under review
docs #721 Document automated bridge 🔄 Under review
Demo ros_gz #978 Add multi-robot namespace and automated bridge demo 🔄 Under review
docs #722 Add multi-robot tutorial with namespaces and automated bridging 🔄 Under review

Future Work

1. Extending Namespace Support

Namespace support will continue to be extended to the remaining Gazebo plugins and sensors. Some PRs are already under review, and additional issues have been prepared for community contributors.

2. Handling TF Frame IDs

Although namespaces can separate TF topics for different robots, the frame IDs inside TF messages may still conflict.

Two possible approaches are to maintain independent TF trees for each robot or rewrite frame IDs on the ROS 2 side before combining them. Future work will explore supporting namespace-based frame ID prefixes directly in Gazebo.

3. Further Improvements to Automated Bridging

The discovery and direction inference logic developed for automated bridging could also be used to simplify manual bridge configuration, reducing the need to specify message types and bridge directions manually.

Acknowledgments

Sincere thanks to my mentor, Addisu Taddese, for his excellent guidance and support throughout the project, and to the Gazebo and Open Robotics community members for their valuable feedback, reviews, and suggestions.

Working on this project has been a great learning experience, especially in open-source development and collaboration. I’m grateful to Google Summer of Code and Open Robotics for this opportunity and look forward to continuing my contributions to Gazebo.

What the source reports

Publisher-reported claims, with original evidence. These results have not been independently verified by RoboSignal.

Environment
SimulationOpen source S2

Reported numbers

  • Simulation scale (robots)

    12 robots

    View original evidence
    the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi
    Open source S12
  • Gazebo topics count

    124

    View original evidence
    the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi
    Open source S12
  • Gazebo services count

    94

    View original evidence
    the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi
    Open source S12
  • ROS 2 topics count

    115

    View original evidence
    the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi
    Open source S12
  • ROS 2 services count

    44

    View original evidence
    the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi
    Open source S12
  • paper: not_reported
  • code: not_reported
  • weights: not_reported
  • dataset: not_reported
Source excerpts and review record

Automatically extracted; no manual editorial approval recorded.

Organization: Open Robotics Contributor: Jiayi Cai ( @C88-YQ ) Mentor: Addisu Taddese ( @azeey ) Community Meeting Talk : Talk video ; Talk slides Project Overview Multi-robot simulation is widely used in robotics research and development, including warehouse automation, robot swarms, and multi-robot coordination. However, setting up a multi-robot simulation in ROS 2 and Gazebo can require a lot of repetitive configu

Open source S2

s test, average CPU usage increased from 2.44% to 3.32% , while memory usage remained nearly unchanged. This suggests that the discovery and matching process adds relatively little overhead in the tested setup. 3. Documentation and Demos Three documentation updates and two demos were prepared to demonstrate the new features and help users get started. Documentation: Model Namespace — How to configure and use model na

Open source S13

the same bridge instance, manually configured bridges take priority, and automated bridging handles the remaining interfaces. To evaluate the overhead of continuous discovery and matching, I tested the automated bridge with a simulation containing 12 robots, 124 Gazebo topics, and 94 Gazebo services, along with a separate ROS 2 node providing 115 topics and 44 services. With actual bridge creation disabled during thi

Open source S12

mespaces. Automated Bridge — How to enable and configure automated bridging. Multi-Robot Tutorial — How to use both features together in multi-robot simulations. Demos: Multi-Robot Demo — Demonstrates model namespaces and automated bridging with multiple robots. Warehouse Demo — Demonstrates independent control of four Mecanum-wheel robots sharing the same SDF model. Project Status and Pull Requests The project invol

Open source S14

Source:ROS Discourse — Community updates · discourse.openrobotics.org

Timezone · UTC

Article dates follow your selected timezone. Briefing editions use Hong Kong time (UTC+8).