Gazebo ROS 2 Model Runtime Suite: model import, bridge discovery, and control management for Gazebo Harmonic
Hi everyone,
I would like to share a set of Gazebo Harmonic GUI plugins I have been developing to simplify common ROS 2 simulation workflows directly from the Gazebo interface.
The motivation is simple: when working with ROS 2 and Gazebo, especially with URDF/XACRO/SDF robot models, a lot of the runtime setup still tends to happen outside Gazebo through launch files, terminal commands, manual ros_gz_bridge invocations, and separate controller manager tooling.
This project tries to make that workflow more interactive and discoverable from the simulator GUI.
What the suite does
The current work is composed of three independet but complementary Gazebo GUI plugins:
1. Model Importer
A Gazebo Harmonic plugin to import URDF, XACRO and SDF models from the GUI.
Main features:
-
select a model file from disk;
-
preview the model before spawning;
-
configure model name, namespace, prefix and initial pose;
-
spawn the model into the running Gazebo world;
-
optionally launch the associated ROS 2 runtime pieces needed by the model;
-
support models that include
ros2_controlconfiguration.
The goal is not to replace proper robot description packages or launch files, but to provide a faster workflow for testing, debugging and demonstrating models in Gazebo.
2. ROS 2 Bridge Manager
A companion plugin to discover Gazebo Transport topics and help expose them to ROS 2 through ros_gz_bridge.
The plugin inspects the running Gazebo world and tries to associate available Gazebo topics with models and sensors.
Current / planned capabilities include:
-
list models present in the world;
-
inspect model sensors using Gazebo runtime information;
-
list bridgeable Gazebo topics;
-
map Gazebo message types to ROS 2 message types;
-
generate
ros_gz_bridge parameter_bridgecommands; -
avoid showing duplicated topics both under a model and under “additional topics”;
-
allow users to manually select extra topics when automatic association is not possible.
The intention is to keep the discovery runtime-based. The bridge manager should not depend on the original URDF/XACRO/SDF files or on metadata emitted by the importer. It should also work with models spawned by other mechanisms.
3. ros2_control Manager
A third plugin focused on interacting with controller_manager instances associated with models running in Gazebo.
The objective is to make it easier to inspect and operate controllers from the Gazebo GUI, especially for users testing models with gz_ros2_control.
The plugin is intended to expose information such as:
-
detected controller managers;
-
available controllers;
-
controller lifecycle state;
-
activate / deactivate actions;
-
controller-related feedback and errors.
Why I built this
The standard workflow is powerful, but it can be fragmented.
For example, a user may need to:
-
launch Gazebo;
-
spawn or include a model;
-
make sure the right Gazebo plugins are loaded;
-
identify the Gazebo topics created by the model;
-
inspect Gazebo message types;
-
manually write the
ros_gz_bridgecommand; -
launch
robot_state_publisher; -
inspect controller managers;
-
configure and activate controllers.
For experienced ROS 2 users this is manageable, but for debugging, demos, education, model validation and early integration work, it creates a lot of friction.
The aim of this suite is to keep the standard ROS 2/Gazebo mechanisms, but expose them through a GUI workflow that is easier to inspect and operate.
Target environment
The current target environment is:
-
Ubuntu 24.04
-
ROS 2 Jazzy
-
Gazebo Harmonic
Current status
The suite is already functional enough for internal demonstrations.
We are currently polishing:
-
UI layout and usability;
-
model/topic/sensor association;
-
bridge topic grouping;
-
camera info association;
-
controller state visibility;
-
controller activation/deactivation workflow;
-
README documentation;
-
example worlds and models.
What kind of feedback we are looking for
We would be very interested in feedback from ROS 2 and Gazebo users on:
-
whether this workflow would be useful in your simulation setup;
-
common pain points when importing models into Gazebo Harmonic;
-
common issues when bridging sensor topics to ROS 2;
-
expectations for
ros2_controlintegration from a GUI; -
naming: whether “Gazebo ROS 2 Model Runtime Suite” communicates the scope clearly;
-
whether these should remain separate plugins or be distributed as a single suite;
-
examples of models/sensors/controllers that would be useful as test cases.
Repository
Repositories:
Documentation and installation instructions are included in the READMEs.
Demo

The next planned steps are:
-
improve documentation and installation instructions;
-
add more example models;
-
add regression tests for bridge type mapping and command generation;
-
improve detection of sensors and associated topics;
-
improve controller manager interaction;
-
collect feedback from the community before stabilizing the API and UI.
Thanks, and feedback is very welcome.