Skip to content

[Isaac Sim 6.0.1] Recurring segfaults with ROS 2 sensor publishing: textureCopyToRawBufferKernel<float> (depth image writer) and rtx.rtxsensor.plugin (RTX lidar) #708

Description

@llagoeiro-botbot

Description

Environment

Isaac Sim 6.0.1 (lib_isaacSim_buildVersion 6.0.1-rc.7, Kit 110.1.2+production.326809)
OS Ubuntu 22.04.5 LTS, kernel 6.8.0-124-generic, X11
GPU NVIDIA RTX A5500 (Ampere, 24 GB), driver 580.159.03, CUDA 13.0
CPU / RAM Intel i7-14700K, 64 GB
ROS 2 Humble via isaacsim.ros2.bridge 5.1.2 with internal ROS libs (isaacsim.ros2.core 1.9.4), rmw_cyclonedds_cpp
Run mode Standalone SimulationApp Python script ({"headless": False}), physics 200 Hz (CPU device), rendering 25 fps

Scene

A saved USD world containing the NVIDIA Spot asset
(.../Isaac/6.0/Isaac/Robots/BostonDynamics/spot/spot.usd) driven by
SpotFlatTerrainPolicy, with a custom sensor payload mounted on the robot:

  • 2 cameras (640×480), each publishing rgb + depth (32FC1) + camera_info
    through ROS2CameraHelper / ROS2CameraInfoHelper OmniGraph nodes;
  • 1 RTX lidar based on the Ouster OS0 asset
    (.../Isaac/6.0/Isaac/Sensors/Ouster/OS0/OS0.usd) with a customized
    OmniLidar profile (40 channels authored as attribute overrides),
    publishing point cloud via ROS2PublishPointCloud.

The setup is Software-in-the-Loop (SIL): the ROS 2 topics published by
the simulation are consumed by a second machine connected over Ethernet,
with rmw_cyclonedds_cpp on both ends (CycloneDDS configured via XML with
explicit network interfaces and enlarged receive/defrag buffers for the large
image and point-cloud samples).

The crashes occur when the world is run through a standalone
SimulationApp Python script
(launched with ~/isaacsim-6.0.1/python.sh,
which loads the stage, attaches the policy and steps the app in a
simulation_app.update() loop). So far we have not observed them when the
same world is opened interactively in the GUI editor.

We get two distinct, recurring segfaults (exit code 139). In all of them,
py-spy shows the Python main thread idle inside SimulationApp.update()
the crash is always in a native worker thread.

Crash A — depth image writer (most frequent, reliably triggered)

002: libcuda.so!cuEGLApiInit+0x57f1b
003: libcuda.so!cuMemRetainAllocationHandle+0xaab4
004: libcuda.so!cuMipmappedArrayGetLevel+0x20
005: libisaacsim.ros2.nodes.plugin.so!void textureCopyToRawBufferKernel<float>(unsigned long long, float*, unsigned int, unsigned int)+0x76c8
006: libisaacsim.ros2.nodes.plugin.so!void textureCopyToRawBufferKernel<float>(...)+0x4bc17

Trigger: the crash only happens when the ROS 2 publishers are consumed
from the second device over Ethernet
(the SIL consumer described above) —
subscribing on the sim host alone does not reproduce it. At one point it
crashed every time the remote machine subscribed to a depth image topic
(i.e., the moment the lazy publisher performs its first GPU texture copy).
It also crashed seconds after starting to drive the robot while the remote
consumers were attached. Uptime at crash ranged from ~136 s to ~20 min. The
<float> instantiation and the SDG pipeline commands in the crash metadata
point at the 32FC1 depth writers
(*_Pseudo_Depth_render_product_NodeWriterWriter, ROS2PublishImage).

What we tried:

  • /rtx/ecoMode/enabled = false — crashes still occurred;
  • resolution is standard 640×480; GPU healthy (24 GB free VRAM, 55–63 °C,
    no ECC errors, no OOM);
  • workaround that avoids the crash entirely: disabling the depth
    ROS2CameraHelper nodes and reading depth via the Replicator
    distance_to_image_plane annotator attached to the same render products,
    publishing sensor_msgs/Image from Python. rgb + camera_info writers keep
    running fine. This isolates the fault to the bridge's GPU texture-copy path
    for float images.

Frequency is intermittent across sessions (some days it triggers on every
remote subscribe, later the same setup ran clean), which suggests a race on
the render-product texture handle rather than a deterministic config error.

Crash B — RTX lidar plugin (long-running sessions)

002: librtx.rtxsensor.plugin.so!std::_Rb_tree<unsigned int, ...>::_M_get_insert_hint_unique_pos(...)+0x13d2d   [low-confidence symbols]
003: librtx.rtxsensor.plugin.so!std::_Rb_tree<unsigned int, ...>::_M_get_insert_hint_unique_pos(...)+0x141d8
004-006: libgpu.foundation.plugin.so!...
007-010: libcarb.tasking.plugin.so!... (fiber, make_fcontext)

Happened twice: once early in a session and once after 3499 s (~58 min) of
continuous simulation with the robot being teleoperated. Possibly relevant:
our OS0 lidar profile is customized to 40 channels via attribute overrides on
top of the stock OS0_REV6_128ch10hz1024res profile — if any per-channel
array length is read from the base profile while numberOfChannels is
overridden, an out-of-bounds access inside the plugin would match this
signature.

Questions

  1. Is the textureCopyToRawBufferKernel crash on first depth-image
    subscription a known issue in 6.0.x, and is there a fix planned?
  2. Is publishing depth through the Replicator annotator (our workaround) the
    recommended path until then?
  3. For the RTX lidar: are partial attribute overrides of a stock sensor
    profile (changing numberOfChannels/emitter arrays) supported, or must a
    custom profile be complete and self-consistent?

Isaac Sim version

6.0.1

Operating System (OS)

Ubuntu 22.04

GPU Name

RTX A5500

GPU Driver and CUDA versions

driver 580.159.03, CUDA 13.0

Logs

No response

Additional information

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions