The creation and information retrieval of the custom "RTX Sensor" have failed.(Isaac sim 5.10)

Isaac Sim Version

5.1.0

Operating System

Ubuntu 22.04

I’m customizing a sensor using the “RTX Sensor”, but I’m encountering numerous issues.

  1. After I create an “RTX Sensor” with the path set as “path=”/World/lidar"“, it doesn’t actually appear at “path=”/World/lidar”" after creation.
from isaacsim import SimulationApp
kit = SimulationApp({"headless": False})
from isaacsim.core.utils.stage import add_reference_to_stage
import numpy as np
import omni
from isaacsim.sensors.rtx import LidarRtx
import omni
from pxr import Gf

my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
}
_, sensor = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    translation=Gf.Vec3d(0, 0, 0),
    orientation=Gf.Quatd(1, 0, 0, 0,),
    path="/World/lidar",
    parent=None,
    config=None,
    visibility=False,
    variant=None,
    force_camera_prim=False,
    **my_custom_attributes,
)

sensor.initialize()
sensor.attach_annotator("IsaacExtractRTXSensorPointCloudNoAccumulator")
timeline = omni.timeline.get_timeline_interface()
timeline.play()

for _ in range(100):
    kit.update()
while kit.is_running():
    kit.update()
  1. When I execute “sensor.initialize()”, an error occurs. It seems to be caused by the inability to find the path.
AttributeError
'Prim' object has no attribute 'initialize'
  File "/home/shubao/isaacsim510/isaac-sim-standalone-5.1.0-linux-x86_64/mypython/mytestpy.py", line 1161, in <module>
    sensor.initialize()
    ^^^^^^^^^^^^^^^^^
AttributeError: 'Prim' object has no attribute 'initialize'

3.Should I create an “Example_Rotary” and modify the “sensor_attributes” method in order to correctly create an “Rtx Sensor”? Are all other methods incorrect, such as using “config=None”?

  1. When I try to configure the “RTX Sensor” and add more attributes, it crashes or exits abruptly when acquiring point cloud data. I’m not sure where the error is.
my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
    'omni:sensor:Core:numberOfEmitters': 10,
    'omni:sensor:Core:numberOfChannels': 10,
    'omni:sensor:Core:emitterState:s001:azimuthDeg': [-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0] ,
    'omni:sensor:Core:emitterState:s001:elevationDeg':[-15.0,-14.19,-13.39,-12.58,-11.77,-10.97,-10.16,-9.35,-8.55,-7.74],
    'omni:sensor:Core:emitterState:s001:fireTimeNs':[0,0,0,0,0,0,0,0,0,0]


}
_, sensor = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    translation=Gf.Vec3d(0, 0, 0),
    orientation=Gf.Quatd(1, 0, 0, 0,),
    path="/World/lidar",
    parent=None,
    config=None,
    visibility=False,
    variant=None,
    force_camera_prim=False,
    **my_custom_attributes,
)
timeline = omni.timeline.get_timeline_interface()
timeline.play()
# render_product = rep.create.render_product(sensor.GetPath(), resolution=(1024, 1024))
render_product = rep.create.render_product("/World_lidar", resolution=(1024, 1024))
annotator = rep.AnnotatorRegistry.get_annotator("IsaacExtractRTXSensorPointCloudNoAccumulator")
annotator.attach([render_product.path])

while kit.is_running():
    kit.update()
    point_cloud = annotator.get_data()
    print(point_cloud)

2025-11-27T08:49:57Z [2,733ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] telemetrySessionId = ‘2161893739191443209’ 2025-11-27T08:49:57Z [2,735ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] terminatedByAbort = ‘0’ 2025-11-27T08:49:57Z [2,737ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] totalRamBareMetalMB = ‘31933’ 2025-11-27T08:49:57Z [2,739ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] totalRamLimitedMB = ‘31933’ 2025-11-27T08:49:57Z [2,741ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] totalSwapBareMetalMB = ‘2047’ 2025-11-27T08:49:57Z [2,743ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] totalSwapLimitedMB = ‘2047’ 2025-11-27T08:49:57Z [2,745ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] userId = ‘default’ 2025-11-27T08:49:57Z [2,747ms] [Warning] [carb.crashreporter-breakpad.plugin] [crash] workingDirectory = ‘/home//isaacsim510/isaac-sim-standalone-5.1.0-linux-x86_64’ 2025-11-27T08:49:57Z [2,750ms] [Fatal] [carb.crashreporter-breakpad.plugin] [crash] Thread 169472 backtrace follows: 2025-11-27T08:49:57Z [2,799ms] [Fatal] [carb.crashreporter-breakpad.plugin] 000: libc.so.6!__sigaction+0x50 (libc_sigaction.c:?) 2025-11-27T08:49:57Z [2,804ms] [Fatal] [carb.crashreporter-breakpad.plugin] 001: libomni.sensors.nv.lidar.rtxmodel_lidar_core.plugin.so!carbOnPluginPreStartup+0xcb6 (??:?) 2025-11-27T08:49:57Z [2,809ms] [Fatal] [carb.crashreporter-breakpad.plugin] 002: librtx.rtxsensor.plugin.so!carbOnPluginPreStartup+0x16c24 (??:?) 2025-11-27T08:49:57Z [2,815ms] [Fatal] [carb.crashreporter-breakpad.plugin] 003: librtx.rtxsensor.plugin.so!carbOnPluginPreStartup+0x1703c (??:?) 2025-11-27T08:49:57Z [2,820ms] [Fatal] [carb.crashreporter-breakpad.plugin] 004: librtx.rtxsensor.plugin.so!void std::vector<char const*, std::allocator<char const*> >::_M_realloc_insert<char const*>(__gnu_cxx::__normal_iterator<char const**, std::vector<char const*, std::allocator<char const*> > >, char const*&&)+0x13633 (??:?) 2025-11-27T08:49:57Z [2,823ms] [Fatal] [carb.crashreporter-breakpad.plugin] 005: librtx.rtxsensor.plugin.so!carbOnPluginPreStartup+0xa61c (??:?) 2025-11-27T08:49:57Z [2,828ms] [Fatal] [carb.crashreporter-breakpad.plugin] 006: libcarb.scenerenderer-rtx.plugin.so!std::_Hashtable<unsigned int, unsigned int, std::allocator, std::__detail::_Identity, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, true, true> >::_M_insert_unique_node(unsigned long, unsigned long, std::__detail::_Hash_node<unsigned int, false>, unsigned long)+0x7155 (??:?) 2025-11-27T08:49:57Z [2,832ms] [Fatal] [carb.crashreporter-breakpad.plugin] 007: libcarb.scenerenderer-rtx.plugin.so!std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > >::~unordered_map()+0x4d5ff (??:?) 2025-11-27T08:49:57Z [2,835ms] [Fatal] [carb.crashreporter-breakpad.plugin] 008: libcarb.scenerenderer-rtx.plugin.so!std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > >::~unordered_map()+0x4e7f1 (??:?) 2025-11-27T08:49:57Z [2,840ms] [Fatal] [carb.crashreporter-breakpad.plugin] 009: libcarb.scenerenderer-rtx.plugin.so!std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > >::~unordered_map()+0x51302 (??:?) 2025-11-27T08:49:57Z [2,846ms] [Fatal] [carb.crashreporter-breakpad.plugin] 010: libcarb.scenerenderer-rtx.plugin.so!std::unordered_map<unsigned long, unsigned long, std::hash, std::equal_to, std::allocator<std::pair<unsigned long const, unsigned long> > >::~unordered_map()+0x59d (??:?) 2025-11-27T08:49:57Z [2,852ms] [Fatal] [carb.crashreporter-breakpad.plugin] 011: libcarb.tasking.plugin.so!void std::vector<int, std::allocator >::_M_realloc_insert<int const&>(__gnu_cxx::__normal_iterator<int, std::vector<int, std::allocator > >, int const&)+0x3edd (??:?) 2025-11-27T08:49:57Z [2,858ms] [Fatal] [carb.crashreporter-breakpad.plugin] 012: libcarb.tasking.plugin.so!void std::vector<int, std::allocator >::_M_realloc_insert<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator > >, int const&)+0xfc53 (??:?) 2025-11-27T08:49:57Z [2,864ms] [Fatal] [carb.crashreporter-breakpad.plugin] 013: libcarb.tasking.plugin.so!std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (carb::tasking::Scheduler::)(carb::tasking::Fiber, carb::tasking::Scheduler::TrackedThread*), carb::tasking::Scheduler*, carb::tasking::Fiber*, carb::tasking::Scheduler::TrackedThread*> > >::_M_run()+0xa3a7 (??:?) 2025-11-27T08:49:57Z [2,870ms] [Fatal] [carb.crashreporter-breakpad.plugin] 014: libcarb.tasking.plugin.so!void std::vector<int, std::allocator >::_M_realloc_insert<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator > >, int const&)+0xb6dc (??:?) 2025-11-27T08:49:57Z [2,878ms] [Fatal] [carb.crashreporter-breakpad.plugin] 015: libcarb.tasking.plugin.so!void std::vector<int, std::allocator >::_M_realloc_insert<int const&>(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator > >, int const&)+0xb6ff (??:?) 2025-11-27T08:49:57Z [2,885ms] [Fatal] [carb.crashreporter-breakpad.plugin] 016: libcarb.tasking.plugin.so!make_fcontext+0x39 (??:?)

I did a quick test by modifying standalone_examples/api/isaacsim.util.debug_draw/rtx_lidar.py so that the RTX Lidar is created at /World/lidar, and the prim shows up correctly at the path on my side. Could you try adapting this example and see if the prim appears as expected?

@VickNV
“rtx_lidar.py” uses the “Sensor” from “lidar_config”.
If I try to define a custom “RTX_Sensor” and use it with the “Script Editor”, I encounter the problem described above.
The main issue is how to define a custom “RTX_Sensor”. When I try to define it and add some properties, the problem mentioned above occurs.
Could you try running my code to create an “RTX_Sensor” in the “Script Editor”?

my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
    'omni:sensor:Core:numberOfEmitters': 10,
    'omni:sensor:Core:numberOfChannels': 10,
    'omni:sensor:Core:emitterState:s001:azimuthDeg': [-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0] ,
    'omni:sensor:Core:emitterState:s001:elevationDeg':[-15.0,-14.19,-13.39,-12.58,-11.77,-10.97,-10.16,-9.35,-8.55,-7.74],
    'omni:sensor:Core:emitterState:s001:fireTimeNs':[0,0,0,0,0,0,0,0,0,0]


}
_, sensor = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    translation=Gf.Vec3d(0, 0, 0),
    orientation=Gf.Quatd(1, 0, 0, 0,),
    path="/World/lidar",
    parent=None,
    config=None,
    visibility=False,
    variant=None,
    force_camera_prim=False,
    **my_custom_attributes,
)
timeline = omni.timeline.get_timeline_interface()
timeline.play()
# render_product = rep.create.render_product(sensor.GetPath(), resolution=(1024, 1024))
render_product = rep.create.render_product("/World_lidar", resolution=(1024, 1024))
annotator = rep.AnnotatorRegistry.get_annotator("IsaacExtractRTXSensorPointCloudNoAccumulator")
annotator.attach([render_product.path])

while kit.is_running():
    kit.update()
    point_cloud = annotator.get_data()
    print(point_cloud)

force_camera_prim is set to False by default, so the rtx_lidar.py script should still be creating a native RTX Lidar prim and is a good reference.

Could you confirm whether the exact script you pasted above without errors in the the Script Editor, and that it creates a prim at /World/lidar in your stage? If it does not, please share the full script you are using.

Please review the OmniSensorGenericLidarCoreAPI schema and OmniSensorGenericLidarCoreEmitterStateAPI schema in the omni.usd.schema.omni_sensors extension to learn which attributes can be set on the OmniLidar prim.

@VickNV
Thank you for your reply. I hope you can give my code a try.

1. I first tried to create an “RTX Sensor” in the “Script Editor”.

My code is as follows:

import numpy as np
import omni
from isaacsim.sensors.rtx import LidarRtx
import omni
import omni.replicator.core as rep
from pxr import Gf

my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
    'omni:sensor:Core:numberOfEmitters': 10,
    'omni:sensor:Core:numberOfChannels': 10,
    'omni:sensor:Core:emitterState:s001:azimuthDeg': [-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0] ,
    'omni:sensor:Core:emitterState:s001:elevationDeg':[-15.0,-14.19,-13.39,-12.58,-11.77,-10.97,-10.16,-9.35,-8.55,-7.74],
    'omni:sensor:Core:emitterState:s001:fireTimeNs':[0,0,0,0,0,0,0,0,0,0]


}
_, sensor = omni.kit.commands.execute(
    "IsaacSensorCreateRtxLidar",
    translation=Gf.Vec3d(0, 0, 0),
    orientation=Gf.Quatd(1, 0, 0, 0,),
    path="/lidar",
    parent=None,
    config=None,
    visibility=False,
    variant=None,
    force_camera_prim=False,
    **my_custom_attributes,
)

During the creation process, there were no error messages. However, there was something wrong with the location where it was created. My input was “/World/lidar”, but the generated path was “/World_lidar”. I’ve uploaded my screenshot.

2. I tried creating it using the second methodand ran the code in “Standalone” mode.

I first tried to create the “Sensor” using the following method, but it crashed and flashed back (or “it crashed and closed abruptly”).

from isaacsim.sensors.rtx import LidarRtx

my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
    'omni:sensor:Core:numberOfEmitters': 10,
    'omni:sensor:Core:numberOfChannels': 10,
    'omni:sensor:Core:emitterState:s001:azimuthDeg': [-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0] ,
    'omni:sensor:Core:emitterState:s001:elevationDeg':[-15.0,-14.19,-13.39,-12.58,-11.77,-10.97,-10.16,-9.35,-8.55,-7.74],
    'omni:sensor:Core:emitterState:s001:fireTimeNs':[0,0,0,0,0,0,0,0,0,0]

}

sensor = LidarRtx(
    prim_path="/lidar",
    translation=np.array([0.0, 0.0, 1.0]),
    orientation=np.array([1.0, 0.0, 0.0, 0.0]),
    **my_custom_attributes,
)

Subsequently, I tested it in “standalone” mode:
It still threw errors. I think the issue is that it can’t find the “prim”. I suspect it’s because the “RTX Sensor” created by the first method shares the same path, which is causing the errors.

The complete code for it is


from isaacsim import SimulationApp
config = {
    "headless": False,
    "app_setting": {

        "/app/sensors/nv/lidar/outputBufferOnGPU": True,
        "/app/sensors/nv/radar/outputBufferOnGPU": True,
        "/app/sensors/nv/lidar/auxOutputType": "FULL",
        "/app/sensors/nv/lidar/skipDroppingInvalidPoints": True,
        "/app/sensors/nv/lidar/outputFrameOfReference": "GLOBAL",
        "/app/sensors/nv/lidar/elementsCoordsType": "CARTESIAN"
    }
}

kit = SimulationApp(config)
from isaacsim.core.utils.stage import add_reference_to_stage
import numpy as np
import omni
from isaacsim.sensors.rtx import LidarRtx
import omni
from pxr import Gf
add_reference_to_stage(usd_path="/home/test/Cube.usd", prim_path="/World")

my_custom_attributes = {
    'omni:sensor:Core:scanRateBaseHz': 5,
    'omni:sensor:Core:numberOfEmitters': 10,
    'omni:sensor:Core:numberOfChannels': 10,
    'omni:sensor:Core:emitterState:s001:azimuthDeg': [-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0,-3.0] ,
    'omni:sensor:Core:emitterState:s001:elevationDeg':[-15.0,-14.19,-13.39,-12.58,-11.77,-10.97,-10.16,-9.35,-8.55,-7.74],
    'omni:sensor:Core:emitterState:s001:fireTimeNs':[0,0,0,0,0,0,0,0,0,0]


 }

sensor = LidarRtx(
    prim_path="/lidar",
    translation=np.array([0.0, 0.0, 1.0]),
    orientation=np.array([1.0, 0.0, 0.0, 0.0]),
    **my_custom_attributes,
)


sensor.initialize()
sensor.attach_annotator("IsaacExtractRTXSensorPointCloudNoAccumulator")

timeline = omni.timeline.get_timeline_interface()
timeline.play()

for _ in range(100):
    kit.update()

while kit.is_running():
    kit.update()
    data=sensor.get_current_frame()
    print(data)
2025-12-11T07:02:16Z [572,227ms] [Error] [omni.usd] flushRenderProductPrimToFabric: renderProductPrimPath did not point to a valid UsdPrim
2025-12-11T07:02:16Z [572,234ms] [Error] [omni.hydra] Invalid USD RenderProduct Prim: /Render/OmniverseKit/HydraTextures/Replicator
2025-12-11T07:02:16Z [572,234ms] [Error] [omni.usd] HydraEngine::render failed to end the compute graph: error code 6

Thanks for sharing the detailed code and logs, this is very helpful.

On your first point about the path: when you call IsaacSensorCreateRtxLidar with path="/World/lidar", the resulting prim currently shows up as /World_lidar instead of /World/lidar. This comes from how the underlying Replicator API (omni.replicator.core.functional.create.omni_lidar) resolves prim paths, which is slightly different from the Isaac Sim command interface that passes the path in. A bug has been filed on our side to make this consistent, and a fix is planned for a future GA release. In the meantime, you can continue using the created prim even if the path is mangled this way.

For the standalone script, the key issue is with the lidar parameters. In the logs you should see something like:

LidarCore::updateParams() -- invalid parameters
ErrorString: Malformed model parameter length: NumberOfEmitters 10 is not equal to the param vector length 128 for emitter state s001

This means numberOfEmitters = 10 does not match at least one of the emitter state arrays for s001, which default to length 128 in the schema. You already set azimuthDeg, elevationDeg, and fireTimeNs with length 10. According to the schema for omni:sensor:GenericLidarCoreEmitterStateAPI, channelId also defaults to a 128-length list, so you should explicitly set it to a 10‑element list that matches your emitter count, for example:

python

my_custom_attributes = {
    "omni:sensor:Core:scanRateBaseHz": 5,
    "omni:sensor:Core:numberOfEmitters": 10,
    "omni:sensor:Core:numberOfChannels": 10,
    "omni:sensor:Core:emitterState:s001:azimuthDeg": [-3.0] * 10,
    "omni:sensor:Core:emitterState:s001:elevationDeg": [-15.0, -14.19, -13.39, -12.58, -11.77,
                                                        -10.97, -10.16, -9.35, -8.55, -7.74],
    "omni:sensor:Core:emitterState:s001:fireTimeNs": [0] * 10,
    "omni:sensor:Core:emitterState:s001:channelId": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
}

You can find the full schema details here for reference:
https://docs.omniverse.nvidia.com/kit/docs/omni.usd.schema.omni_sensors/latest/omni_sensors_schema.html#omnisensorgenericlidarcoreemitterstateapi​

Locally this configuration does not produce an “invalid prim” error. If you are still seeing that message (or the Hydra render-product errors) after fixing the parameter lengths, please attach your test USD so we can try the exact same setup on our side.​

One more recommendation: instead of setting sensor-related options via the global SimulationApp config (for example entries under "/app/sensors/nv/lidar/..."), it is better to express those as prim-level attributes on the sensor itself via my_custom_attributes, following the GenericLidarCore schema:

Those global app settings are deprecated and may not be honored going forward.

@VickNV
Thank you for your reminder. I found the problem and successfully solved it.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.