Skip to content

[RFC] New Hardware Interface: Native gz-transport bridge for Multi-Domain / Network-Isolated Simulation #847

Description

@yenode

Context: Currently, gz_ros2_control runs the controller manager inside the Gazebo process and relies on shared memory. This is highly efficient but presents limitations for multi-robot fleets, custom network-isolated state estimators, and distributed simulation setups where the ROS_DOMAIN_ID must be strictly separated from Gazebo's transport layer.

Proposal: I've developed a lightweight "data diode" hardware interface (emcon_gz_hardware_interface). It acts as a standard SystemInterface in the ros2_control framework, but instead of using shared memory, it communicates directly with Gazebo using gz-transport.

Key Features:

  • Bypasses RMW entirely for simulation comms.
  • Lock-free RT loop using realtime_tools::RealtimeBuffer ensuring read() never blocks.
  • O(1) joint lookups during high-frequency Gazebo state callbacks.
  • Fully parameterized via standard <ros2_control> URDF tags (bot_name, world_name, joint_state_topic).

Working Implementation: I have a clean, working repository here: https://github.com/yenode/emcon_gz_hardware_interface

Questions for Maintainers:

  1. Would you be interested in merging this as an alternative hardware interface within the gz_ros2_control meta-package?
  2. Are there specific CI, formatting, or architectural adjustments you'd require before I open a PR?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Needs discussion

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions