[isaacsim.ros2.nodes] ROS 2 Nodes#

Version: 1.18.11

Overview#

The isaacsim.ros2.nodes extension provides OmniGraph nodes that enable ROS 2 communication within Isaac Sim. This extension bridges robotics simulation with ROS 2 systems by offering nodes for publishing, subscribing, and handling services that can be connected in Action Graphs. It relies on isaacsim.ros2.core for the underlying ROS 2 functionality and integrates sensor data from camera and physics sensors into the ROS 2 ecosystem.

Functionality#

The extension registers OmniGraph nodes that handle ROS 2 message passing and service calls. These nodes can be placed in Action Graphs to stream sensor data, receive commands, and interact with ROS 2 topics and services. The nodes inherit ROS distribution and core settings from isaacsim.ros2.core, which centralizes all ROS 2 Bridge configuration under /exts/isaacsim.ros2.bridge/*. This allows the nodes to automatically align with the configured ROS 2 environment at runtime without requiring separate configuration.

Integration#

The extension depends on isaacsim.ros2.core for the ROS 2 backend, isaacsim.sensors.camera and isaacsim.sensors.experimental.physics for sensor data access, isaacsim.sensors.physics.nodes for physics sensor OmniGraph nodes, and omni.graph for the OmniGraph framework. It uses isaacsim.core.experimental.utils for stage and prim utilities, isaacsim.core.experimental.objects and isaacsim.core.experimental.prims for scene object creation in tests, and isaacsim.core.rendering_manager and isaacsim.core.simulation_manager for viewport and physics management. C++ publisher implementations for images and point clouds provide optimized data transfer for high-bandwidth sensor streams.

Enable Extension#

The extension can be enabled (if not already) in one of the following ways:

Define the next entry as an application argument from a terminal.

APP_SCRIPT.(sh|bat) --enable isaacsim.ros2.nodes

Define the next entry under [dependencies] in an experience (.kit) file or an extension configuration (extension.toml) file.

[dependencies]
"isaacsim.ros2.nodes" = {}

Open the Window > Extensions menu in a running application instance and search for isaacsim.ros2.nodes. Then, toggle the enable control button if it is not already active.

Python API#

Internal interface that is automatically called when the extension is loaded so that Omnigraph nodes are registered.

Example

# import isaacsim.ros2.nodes.bindings._ros2_nodes as _ros2_nodes

# Acquire the interface interface = _ros2_nodes.acquire_interface()

# Use the interface # …

# Release the interface _ros2_nodes.release_interface(interface)

class IRos2Nodes
acquire_interface(
plugin_name: str = None,
library_path: str = None,
) isaacsim.ros2.nodes.bindings._ros2_nodes.IRos2Nodes
create_camera_info_publisher_capsule(
topic_name: str,
frame_id: str,
node_namespace: str,
queue_size: int,
qos_profile: str,
width: int,
height: int,
distortion_model: str,
k: List[float],
r: List[float],
p: List[float],
d: List[float],
) capsule

Create a ROS 2 CameraInfo publisher and return a PyCapsule wrapping the C-ABI callback descriptor.

The capsule is named “SrtxFrameCallbackDescriptor” and is intended to be passed to omni.replicator.srtx’s register_frame_callback().

create_image_publisher_capsule(
topic_name: str,
frame_id: str,
node_namespace: str,
queue_size: int,
qos_profile: str = '',
) capsule

Create a ROS 2 Image publisher and return a PyCapsule wrapping the C-ABI callback descriptor.

The capsule is named “SrtxFrameCallbackDescriptor” and is intended to be passed to omni.replicator.srtx’s register_frame_callback().

Parameters:
  • topic_name – ROS 2 topic name to publish on.

  • frame_id – TF frame_id for the published message header.

  • node_namespace – ROS 2 node namespace.

  • queue_size – Publisher queue depth.

  • qos_profile – JSON-encoded QoS profile (empty string for defaults).

Returns:

PyCapsule containing the callback descriptor.

create_laser_scan_publisher_capsule(
topic_name: str,
frame_id: str,
node_namespace: str,
queue_size: int,
qos_profile: str = '',
azimuth_range_start: float = -180.0,
azimuth_range_end: float = 180.0,
depth_range_min: float = 0.0,
depth_range_max: float = 100.0,
rotation_rate: float = 20.0,
horizontal_resolution: float = 1.0,
horizontal_fov: float = 360.0,
) capsule

Create a ROS 2 LaserScan publisher and return a PyCapsule wrapping the C-ABI callback descriptor.

The capsule is named “SrtxFrameCallbackDescriptor” and is intended to be passed to omni.replicator.srtx’s register_frame_callback().

Parameters:
  • topic_name – ROS 2 topic name to publish on.

  • frame_id – TF frame_id for the published message header.

  • node_namespace – ROS 2 node namespace.

  • queue_size – Publisher queue depth.

  • qos_profile – JSON-encoded QoS profile (empty string for defaults).

  • azimuth_range_start – Scan start angle in degrees.

  • azimuth_range_end – Scan end angle in degrees.

  • depth_range_min – Minimum range in meters.

  • depth_range_max – Maximum range in meters.

  • rotation_rate – Scan frequency in Hz.

  • horizontal_resolution – Angular resolution in degrees.

  • horizontal_fov – Horizontal field of view in degrees.

Returns:

PyCapsule containing the callback descriptor.

create_lidar_publisher_capsule(
topic_name: str,
frame_id: str,
node_namespace: str,
queue_size: int,
qos_profile: str = '',
) capsule

Create a ROS 2 PointCloud2 (lidar) publisher and return a PyCapsule wrapping the C-ABI callback descriptor.

The capsule is named “SrtxFrameCallbackDescriptor” and is intended to be passed to omni.replicator.srtx’s register_frame_callback().

Parameters:
  • topic_name – ROS 2 topic name to publish on.

  • frame_id – TF frame_id for the published message header.

  • node_namespace – ROS 2 node namespace.

  • queue_size – Publisher queue depth.

  • qos_profile – JSON-encoded QoS profile (empty string for defaults).

Returns:

PyCapsule containing the callback descriptor.

release_interface(
arg0: isaacsim.ros2.nodes.bindings._ros2_nodes.IRos2Nodes,
) None

Omnigraph Nodes#

The extension exposes the following Omnigraph nodes: