ROS 2 Sensor Graph Migration#

Isaac Sim 6.0 changes several ROS 2 sensor helper and publisher node contracts. This guide covers Camera, CameraInfo, RTX Lidar, RTX Radar, and PointCloud2 graph migration. For TF, JointState, and Odometry publisher graph changes, use ROS 2 OmniGraph Nodes.

Isaac Sim 6.0 deprecates frameSkipCount on the ROS 2 camera, Camera Info, and RTX Lidar helper nodes, and fullScan on the RTX Lidar helper node. Leave those inputs at their defaults and control publish rate with the sensor prim’s omni:sensor:tickRate attribute; see Sensor Timing and RTX Lidar Asset Migration for the timing model. Prefer sensor-side tickRate when the Isaac Sim render/sensor cadence is part of the simulation contract, and keep downstream ROS-node throttling only for application-level bandwidth control.

Camera and CameraInfo#

Set frameSkipCount to 0 on ROS2 Camera Helper and ROS2 Camera Info Helper, and set omni:sensor:tickRate on the camera sensor prim to the desired publish rate.

The ROS 2 CameraInfo path now reads lens distortion from OpenCV lens schemas authored on the camera prim. The CameraInfo path no longer reads legacy physicalDistortionModel and physicalDistortionCoefficients values. When the camera prim has no OpenCV lens schema, 6.0 computes pinhole intrinsics from the USD camera and publishes zero distortion coefficients instead of reading the legacy physical attributes.

Migration actions:

  • Author pinhole or fisheye calibration with the relevant OmniLensDistortionOpenCv*API schema on the camera prim.

  • Validate that CameraInfo width and height match the render-product resolution, not only the camera prim’s nominal resolution.

  • Validate that intrinsics are scaled when the render product resolution differs from the authored calibration resolution.

  • Update tests that checked legacy physical distortion attributes to subscribe to CameraInfo and assert the ROS K, D, R, and P values.

RTX Lidar and Radar Helpers#

Saved graphs that use RTX Lidar or Radar should be validated against OmniSensor prims. Isaac Sim 6.0 no longer supports Camera prims used as RTX sensors with JSON configs. Convert those assets before validating ROS output. Refer to RTX Lidar JSON and Camera-Prim Assets.

For RTX Lidar:

  • Use an OmniLidar prim, not a Camera prim with RTX Lidar schemas.

  • Set frameSkipCount to 0 on ROS2 RTX Lidar Helper and set omni:sensor:tickRate on the OmniLidar prim.

  • Do not use fullScan as the scheduler. To publish accumulated full scans, set omni:sensor:Core:accumulateOutputs on the OmniLidar prim directly.

  • Validate whether the downstream stack expects one message per completed scan or can consume partial scans.

  • Validate LaserScan angle bins and timestamps after migration. The 6.0 publisher bins rays into LaserScan slots by azimuth in float32 directly from the sensor output buffer, instead of consuming a precomputed flat scan, and can expose small (±1 bin) binning differences relative to old tests.

For RTX Radar:

  • Always enable Motion BVH.

  • RTX Radar is not multitick-aware and does not honor omni:sensor:tickRate. Validate the observed message cadence with the target build.

  • When a workflow runs Radar and Lidar together at startup, include a warmup period before asserting nonempty detections.

PointCloud2 Metadata#

In Isaac Sim 5.1, ROS2 Publish Point Cloud consumed a single XYZ point buffer through the data/dataPtr/bufferSize inputs, with no per-field metadata. In 6.0, point-cloud publishing consumes per-field pointer inputs (intensityPtr, timestampPtr, hitNormalPtr, objectIdPtr, and so on) populated by IsaacExtractRTXSensorPointCloud.

Metadata fields are opt-in. Supplying a pointer is not sufficient; the matching output* boolean must also be enabled.

Desired PointCloud2 field

Migration action

intensity

Connect the intensity pointer and enable outputIntensity.

timestamp

Connect the timestamp pointer and enable outputTimestamp.

objectId or material IDs

Connect the ID pointer and enable the matching output* flag. Verify the ID map in the downstream consumer.

Hit normals

Use outputHitNormal. Treat old outputNormal usage as deprecated.

Point frame of reference is not a publisher output* boolean. It is the sensor-prim attribute omni:sensor:Core:outputFrameOfReference (for Lidar) or omni:sensor:WpmDmat:outputFrameOfReference (for Radar), whose value is an enum such as WORLD or SENSOR. Set it on the sensor prim when the published point coordinates must be in a specific frame, and verify the subscriber’s frame_id and TF expectations. The ROS helper also uses this attribute for debug-draw setup: WORLD output disables an extra sensor-to-world transform, while SENSOR output enables it for visualization.

Validation Checklist#

Verify the following after migrating each sensor graph:

  • Saved USD Action Graphs open in Isaac Sim 6.0 without missing ROS 2 sensor node inputs.

  • Migrated helper nodes no longer use frameSkipCount or fullScan as runtime publish-rate controls.

  • CameraInfo subscribers receive the expected resolution, intrinsics, and distortion coefficients for each render product.

  • RTX Lidar and Radar publishers attach to OmniSensor prims and produce nonempty messages after warmup.

  • PointCloud2 fields match the enabled output* booleans, and disabled fields do not appear in the ROS message.

  • ROS header.stamp values advance with the simulation cadence expected by the application.