Custom ROS2 Nodes for Image Publishing in Isaac Sim Impacting FPS

Hello,

I’m working with NVIDIA Isaac Sim and have encountered an issue related to customizing ROS2 nodes for publishing. Here’s a detailed description of the problem:

  1. Built-in Nodes Performance: The built-in nodes for OmniGraph in Isaac Sim are highly optimized and run smoothly, maintaining a high FPS.
  2. Need for QoS Customization: I need to change the Quality of Service (QoS) profile, which is not customizable with the built-in nodes.
  3. Custom Nodes Performance Issue: To address this, I created my own ROS2 nodes for publishing. However, this approach significantly lowers the FPS.
  4. Replicator Writer: I noticed that the built-in nodes refer to a ‘replicator writer’ for publishing images. It appears to be implemented in C++ as I cannot find the source.

Questions:

  1. Access to Replicator Writer: How can I access the ‘replicator writer’ used by the built-in nodes?
  2. Modifiability: Is the replicator writer modifiable to suit our needs, particularly for QoS customization?
  3. Custom Implementation: If the replicator writer is not accessible or modifiable, can we create something similar that retains high performance? Any guidance or examples would be greatly appreciated.

The core issue here — needing custom QoS profiles for ROS2 image publishing — has been resolved in the Isaac Sim ROS2 bridge since version 2.20.0 (shipped with Isaac Sim 4.0+, April 2024).

QoS is now configurable on built-in nodes — no custom nodes needed:

  1. Add a ROS2 QoS Profile OmniGraph node (isaacsim.ros2.bridge.ROS2QoSProfile) to your graph
  2. Configure it with preset profiles (Sensor Data, Services, System Default, Custom) or set individual policies (reliability, durability, history, depth, deadline, lifespan, liveliness)
  3. Connect its qosProfile output to the qosProfile input on any ROS2 publisher node (including ROS2 Camera Helper, ROS2 Publish Image, etc.)

All ROS2 publisher, subscriber, and service OmniGraph nodes now accept a qosProfile input.

Regarding the FPS impact of custom Python OmniGraph nodes for image publishing: The built-in camera publisher nodes use C++ replicator writers (rep.writers) that copy GPU render product data directly to ROS2 messages without round-tripping
through Python. Custom Python nodes that read image data, convert it, and publish via rclpy will always be significantly slower because of the Python GIL and CPU-side memory copies. If you need custom processing beyond QoS, consider writing a
C++ OmniGraph node extension instead.

Since the QoS customization is now natively supported and this topic has had no activity since June 2024, I’m closing it. If you’re still experiencing issues on a current Isaac Sim version, please open a new topic or a GitHub discussion
(isaac-sim/IsaacSim · Discussions · GitHub).