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:
- Would you be interested in merging this as an alternative hardware interface within the
gz_ros2_control meta-package?
- Are there specific CI, formatting, or architectural adjustments you'd require before I open a PR?
Context: Currently,
gz_ros2_controlruns 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 theROS_DOMAIN_IDmust 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 standardSystemInterfacein theros2_controlframework, but instead of using shared memory, it communicates directly with Gazebo usinggz-transport.Key Features:
realtime_tools::RealtimeBufferensuringread()never blocks.<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:
gz_ros2_controlmeta-package?