Gazebo ROS 2 Runtime Suite for Harmonic: model import, bridge, and ros2 control managing

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_control configuration.

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_bridge commands;

  • 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:

  1. launch Gazebo;

  2. spawn or include a model;

  3. make sure the right Gazebo plugins are loaded;

  4. identify the Gazebo topics created by the model;

  5. inspect Gazebo message types;

  6. manually write the ros_gz_bridge command;

  7. launch robot_state_publisher;

  8. inspect controller managers;

  9. 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_control integration 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:

GZ_MODEL_IMPORTER_PLUGIN

GZ_ROS2_BRIDGE_MANAGER

GZ_ROS2_CONTROL_MANAGER

Documentation and installation instructions are included in the READMEs.

Demo

demo_complete (1)

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.

2 Likes

Wow, this is absolutely awesome!

As it is intended to work with ROS, it won’t become a part of the core Gazebo libraries, but I think there’d be high value in distributing these plugins as a part of ros_gz. This has always been a bit underdeveloped area: Gazebo gets its development efforts , ROS gets them, but ros_gz always seemed to be just the minimum effort to make Gazebo and ROS usable together. But there are pieces exactly as yours which bring high value to the actual combination of the two.

I’d like to try your suite, but I can’t promise I’ll find the time needed for it…

1 Like