ROS2 bridge does not work with Cyclone DDS

Isaac Sim Version

5.1.0

Operating System

Ubuntu 24.04, on aws server

GPU Information

  • Model: NVIDIA L40S (aws)
  • Driver Version: 570.172.08

Topic Description

Detailed Description

We use ROS2 jazzy with Cyclone DDS in our SW stack. When I follow the instructions to use Cyclone DDS (cyclone dds instructions) and start isaac sim, no ROS2 actions graphs are available when starting isaac via isaac-sim.sh.

Steps to Reproduce

  • remove "isaacsim.ros2.bridge" in ~/isaacsim/apps/isaacsim.exp.full.kit

  • I export relevant env:

export ROS_DOMAIN_ID=41
export CYCLONEDDS_URI=“~/cyclondds_config.xml”
export ROS_DISTRO=jazzy
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/IsaacSim/exts/isaacsim.ros2.bridge/jazzy/lib

  • I start isaac via bash isaac-sim.sh the ros bridge is not loaded (e.g. there are no ros2 nodes in the Action Graph explorer)
  • When I start isaac without setting the cyclone dds env, ROS2 gets correctly loaded and I get the following output

[29.268s] [ext: isaacsim.exp.full-5.1.0] startup
[29.558s] [ext: isaacsim.ros2.bridge-4.12.4] startup
[29.976s] Attempting to load system rclpy
[29.976s] Could not import system rclpy: No module named ‘rclpy’
[29.976s] Attempting to load internal rclpy for ROS Distro: jazzy
[30.060s] rclpy loaded

Error Messages

None

Screenshots or Videos

Can be provided if needed

Additional Information

What I’ve Tried

In contrast with isaac-sim.selector.sh ROS2 action graphs are loaded (still there seem to be some problems that outside ROS2 nodes cannot pick up the topics)

According to the documentation, the ROS_DISTRO env variable is used to check for ROS2 sourcing.

The ROS_DISTRO env variable is used to determine if ROS 2 is sourced and which distro to use. If this variable is not set, an internal ROS 2 distro build is used. Message definitions can be different between ROS 2 versions. Because of this, the appropriate ROS 2 backend is dynamically loaded depending on the sourced ROS distro.

Hence, i don’t think you should manually export it if you want to make Isaac Sim load its internal ROS libraries.
(I am using ros_bridge with CycloneDDS without any issues)

Also without setting the ROS_DISTRO env Isaac does not start ROS2. Somehow it is missing the argument/flag to start the bridge. Can you share your exact steps to start isaac?

did you also remove the LD_LIBRARY path?
on my setup i only exported the Cyclone RMW_IMPLEMENTATION and the ROS_DOMAIN_ID and i confirm it is working fine

Ok, the missing step for me was:
Window → Extensions → Search for ROS 2 BRIDGE → enable + Autoload

or

bash isaac-sim.sh --enable isaacsim.ros2.bridge

or

add in apps/isaacsim.exp.full.kit under

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

Thanks @JeanLesur for giving me confidence that cyclonedds is working for you, so I kept investigating :-)