Description
Summary
Following up on a previously closed forum thread: Isaac Sim 5.1.0 - ROS2CameraHelper reports "Render product not valid" despite valid render product and image data
We've since narrowed the issue significantly with additional diagnostics and believe we've isolated the actual distinguishing factor, which was an open question in that thread.
Environment
- Isaac Sim 5.1.0
- Ubuntu on AWS EC2, NVIDIA L40S GPU
- ROS2 Humble (in Docker,
--network host)
- Custom robot (Nova Carter) referenced via payload in a City Massing demo environment
Pipeline
OnPlaybackTick → ROS2Context → IsaacCreateRenderProduct → ROS2CameraHelper (×2: depth, semantic_segmentation)
authored as a USD over override on Nova_Carter_ROS, a prim composed from an external payload (World_CityMassingDemopack_custom1.usd).
The key distinguishing factor we've isolated
Every pre-existing camera graph on this same robot (front_hawk, back_hawk, left_hawk, right_hawk stereo pairs) publishes continuously and correctly. These graphs are authored directly in the payload's own defining USD layer.
Our new graph, added identically in structure and node types/versions, but authored as an over override on top of the already-composed payload (not in the defining layer), publishes only 1-2 frames after Play, then goes silent — no further errors, no further data, indefinitely, while the native graphs on the same robot keep running at full rate.
Diagnostics performed
- DDS/transport layer — ruled out. Initially all topics (including pre-existing, previously-working ones) went completely silent after an EC2 instance stop/start. Root cause: AWS VPC blocks UDP multicast, which both
rmw_fastrtps_cpp and default rmw_cyclonedds_cpp discovery rely on. Fixed with:
<CycloneDDS><Domain><General><AllowMulticast>false</AllowMulticast></General><Discovery><Peers><Peer address="localhost"/></Peers></Discovery></Domain></CycloneDDS>
forcing unicast discovery to localhost (both processes on the same host, --network host). This fully restored the pre-existing camera/lidar/imu topics to sustained, correct rates. Our new graph's topics were unaffected by this fix — still only 1-2 frames.
-
Node attribute values — verified via og.Controller.attribute(...).get() (not raw prim.GetAttributes(), which incorrectly shows None for connection-driven inputs):
gpr_render_product.inputs:cameraPrim → correctly resolves to the target camera
gpr_render_product.outputs:renderProductPath → valid, distinct path (e.g. /Render/OmniverseKit/HydraTextures/Replicator_02), confirmed via UsdRender.Product inspection: resolution=(640,480), camera relationship target correct
ROS2CameraHelper.inputs:context/renderProductPath/nodeNamespace/topicName/type → all correctly resolved on both depth and segmentation helpers
-
QoS profile — found empty ("") on our nodes vs. a full profile JSON on the working reference nodes; authored a matching QoS profile. No change in behavior.
-
Execution wiring — hypothesized ROS2CameraHelper.inputs:execIn chained through IsaacCreateRenderProduct.outputs:execOut (rather than directly from OnPlaybackTick) might only pulse once. Rewired both helpers' execIn directly to OnPlaybackTick.outputs:tick in parallel via og.Controller.connect(). No change in behavior.
-
Render product resource limits — this robot has ~10 concurrent render products (4 stereo pairs + LiDAR + viewport). Disabled an existing camera (back_hawk) to free a slot; no change in our graph's behavior. GPU memory was not under pressure (5GB/40GB used).
-
Type mismatches — found and fixed inputs:height/inputs:width on IsaacCreateRenderProduct incorrectly typed uint64 instead of schema-required uint. Fixed; eliminated load-time errors, no effect on the runtime stalling behavior.
Question
Is there a known difference in how OnPlaybackTick-driven OmniGraphs are scheduled/re-evaluated when:
- authored in a payload's defining layer, vs.
- added afterward as an
over override on the already-composed prim
We can provide the full .usda scene, diagnostic scripts, and Console logs on request.
Isaac Sim version
5.1.0
Operating System (OS)
Ubuntu 22.04
GPU Name
NVIDIA L40S
GPU Driver and CUDA versions
nvidia-smi
Logs
No response
Additional information
Full .usda scene, gpr_camera_node.py, and step-by-step reproduction session available on request.
Description
Summary
Following up on a previously closed forum thread: Isaac Sim 5.1.0 - ROS2CameraHelper reports "Render product not valid" despite valid render product and image data
We've since narrowed the issue significantly with additional diagnostics and believe we've isolated the actual distinguishing factor, which was an open question in that thread.
Environment
--network host)Pipeline
OnPlaybackTick → ROS2Context → IsaacCreateRenderProduct → ROS2CameraHelper (×2: depth, semantic_segmentation)
authored as a USD
overoverride onNova_Carter_ROS, a prim composed from an external payload (World_CityMassingDemopack_custom1.usd).The key distinguishing factor we've isolated
Every pre-existing camera graph on this same robot (
front_hawk,back_hawk,left_hawk,right_hawkstereo pairs) publishes continuously and correctly. These graphs are authored directly in the payload's own defining USD layer.Our new graph, added identically in structure and node types/versions, but authored as an
overoverride on top of the already-composed payload (not in the defining layer), publishes only 1-2 frames after Play, then goes silent — no further errors, no further data, indefinitely, while the native graphs on the same robot keep running at full rate.Diagnostics performed
rmw_fastrtps_cppand defaultrmw_cyclonedds_cppdiscovery rely on. Fixed with:forcing unicast discovery to
localhost(both processes on the same host,--network host). This fully restored the pre-existing camera/lidar/imu topics to sustained, correct rates. Our new graph's topics were unaffected by this fix — still only 1-2 frames.Node attribute values — verified via
og.Controller.attribute(...).get()(not rawprim.GetAttributes(), which incorrectly showsNonefor connection-driven inputs):gpr_render_product.inputs:cameraPrim→ correctly resolves to the target cameragpr_render_product.outputs:renderProductPath→ valid, distinct path (e.g./Render/OmniverseKit/HydraTextures/Replicator_02), confirmed viaUsdRender.Productinspection:resolution=(640,480),camerarelationship target correctROS2CameraHelper.inputs:context/renderProductPath/nodeNamespace/topicName/type→ all correctly resolved on both depth and segmentation helpersQoS profile — found empty (
"") on our nodes vs. a full profile JSON on the working reference nodes; authored a matching QoS profile. No change in behavior.Execution wiring — hypothesized
ROS2CameraHelper.inputs:execInchained throughIsaacCreateRenderProduct.outputs:execOut(rather than directly fromOnPlaybackTick) might only pulse once. Rewired both helpers'execIndirectly toOnPlaybackTick.outputs:tickin parallel viaog.Controller.connect(). No change in behavior.Render product resource limits — this robot has ~10 concurrent render products (4 stereo pairs + LiDAR + viewport). Disabled an existing camera (
back_hawk) to free a slot; no change in our graph's behavior. GPU memory was not under pressure (5GB/40GB used).Type mismatches — found and fixed
inputs:height/inputs:widthonIsaacCreateRenderProductincorrectly typeduint64instead of schema-requireduint. Fixed; eliminated load-time errors, no effect on the runtime stalling behavior.Question
Is there a known difference in how
OnPlaybackTick-driven OmniGraphs are scheduled/re-evaluated when:overoverride on the already-composed primWe can provide the full
.usdascene, diagnostic scripts, and Console logs on request.Isaac Sim version
5.1.0
Operating System (OS)
Ubuntu 22.04
GPU Name
NVIDIA L40S
GPU Driver and CUDA versions
nvidia-smi
Logs
No response
Additional information
Full .usda scene, gpr_camera_node.py, and step-by-step reproduction session available on request.