Missing Object ID information from RTX Lidar Omnigraph node RtxSensorCpuIsaacReadRTXLidarData

Isaac Sim Version

4.5.0
4.2.0
4.1.0
4.0.0
4.5.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):

Operating System

Ubuntu 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

GPU Information

  • Model: NVIDIA RTX A3000 Laptop GPU
  • Driver Version: 535.161.08
  • CUDA Version: 12.2

Topic Description

Object Id information from the annotator, RtxSensorCpuIsaacReadRTXLidarData, is not getting filled.

Detailed Description

I am simulating Ouster-0 128x1024 @10Hz sensor in isaac sim by first creating the sensor, creating render product and attaching the annotator RtxSensorCpuIsaacReadRTXLidarData as shown in the code below.
The reason I am not using RtxSensorCpuIsaacCreateRTXLidarScanBuffer is that, scan buffer has it’s own issues (data from previous frames not getting cleared, deltaTimes for each point not being in proper time units and channel Ids not being available, see this issue).

Information quality from RtxSensorCpuIsaacReadRTXLidarData is so much better and up to date compared to RtxSensorCpuIsaacCreateRTXLidarScanBuffer. So, I in the end ended up creating a new Omni node that stitches multiple sectors of data from RtxSensorCpuIsaacReadRTXLidarData which outputs into ROS with the point format that Ouster Driver outputs at the frequency of the sensor (10hz) instead of every render frame as ROS1RTXLidarHelper does. The node I created also has the feature to set phase-lock (internal to Ouster) to be more realistic. Long story short, switching to RtxSensorCpuIsaacCreateRTXLidarScanBuffer is not an option.

All the information, X, Y, Z, I, T, Channel is accurate from the node RtxSensorCpuIsaacReadRTXLidarData except for ObjectId. when I use the following code regardless of how many objects I have in the scene I only see ‘0’.

import omni
import omni.graph.core as og
from isaacsim.core.utils.extensions import enable_extension
import omni.replicator.core as rep
from pxr import Gf
import omni.timeline
import numpy as np

lidar_config = "OS0_REV7_128ch10hz1024res"
_, sensor0 = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    path=f"/sensor0",
    parent=None,
    config=lidar_config,
    translation=(1, 0, 1.0),
    orientation=Gf.Quatd(1.0, 0.0, 0.0, 0.0),  # Gf.Quatd is w,i,j,k
)
rp = rep.create.render_product(sensor0.GetPath(), [1, 1], name=f"Isaac0")
read_lidar_pointcloud = rep.AnnotatorRegistry.get_annotator("RtxSensorCpuIsaacReadRTXLidarData")
read_lidar_pointcloud.initialize(keepOnlyPositiveDistance=False)
read_lidar_pointcloud.attach(rp)

frame_count = 0
def on_timeline_event(event: omni.timeline.TimelineEventType):
    global frame_count
    if event.type == omni.timeline.TimelineEventType.CURRENT_TIME_TICKED.value:
        oids = read_lidar_pointcloud.get_data()["objectIds"]
        unique_oids = np.unique(oids)
        print(f"Object Count: {len(unique_oids)}, Object Ids: {unique_oids}")
        frame_count += 1
        if frame_count >= 20:
           timeline_sub.unsubscribe()
timeline = omni.timeline.get_timeline_interface()
timeline_sub = timeline.get_timeline_event_stream().create_subscription_to_pop(on_timeline_event)

Steps to Reproduce

  1. Open any USD or create a scene with ground plane, physics scene, cone, cube, sphere
  2. Open Script Editor and paste the above code.
  3. Run the simulation and you will see ‘0’

Error Messages

Screenshots or Videos

Additional Information

What I’ve Tried

I checked to see whether Object Id data from RtxSensorCpuIsaacCreateRTXLidarScanBuffer is good or not and it is not. Object Id information from RtxSensorCpuIsaacCreateRTXLidarScanBuffer starts from 0 and increases to infinity.

Related Issues

Additional Context

None