RTX Sensors#

The deprecated isaacsim.sensors.rtx extension is replaced by isaacsim.sensors.experimental.rtx. The replacement keeps the same sensor concepts (RTX Lidar, RTX Radar) but reshapes the Python API to mirror isaacsim.sensors.experimental.physics — array-form transforms, no command-based creation, and a split between authoring (Lidar/Radar/Acoustic) and runtime (LidarSensor/RadarSensor/AcousticSensor) classes. The previously-named “Ultrasonic” plugin is now exposed as Acoustic/AcousticSensor.

Concept mapping#

isaacsim.sensors.rtx (deprecated)

isaacsim.sensors.experimental.rtx

omni.kit.commands.execute("IsaacSensorCreateRtxLidar", path=..., parent=..., config=..., translation=..., orientation=..., variant=...)

Lidar.create(path, config=..., translations=..., orientations=..., variant=...) (no command registration; authoring class only). Wrap with the runtime: LidarSensor(Lidar.create(...)).

omni.kit.commands.execute("IsaacSensorCreateRtxRadar", ...)

Radar.create(path, ...) and wrap with RadarSensor(...).

omni.kit.commands.execute("IsaacSensorCreateRtxUltrasonic", ...)

Acoustic.create(path, ...) and wrap with AcousticSensor(...). The Omniverse plugin was renamed from “Ultrasonic”/”USS” to “Acoustic” (see RTX Acoustic Sensor); the new class authors OmniAcoustic prims with the OmniSensorGenericAcousticWpmAPI schema.

omni.kit.commands.execute("IsaacSensorCreateRtxIDS", ...)

No equivalent in ``isaacsim.sensors.experimental.rtx`` today; may be supported in a future release. In the meantime, continue to use the deprecated command or author the IDS occupancy prim directly in USD.

LidarRtx(prim_path, name=..., position=..., orientation=..., config_file_name=...)

LidarSensor(Lidar.create(path, config=..., translations=[[...]], orientations=[[...]])).

Singular position=, orientation=, translation= constructor args

Plural positions=[[...]], translations=[[...]], orientations=[[...]] arrays. Shape (N, 3) / (N, 4); only N=1 is supported per sensor.

name= constructor parameter

Removed (was unused).

LidarRtx.get_current_frame()

LidarSensor.get_data("generic-model-output") (returns (wp.array, dict)).

LidarRtx.attach_annotator("IsaacComputeRTXLidarFlatScan" / "IsaacExtractRTXSensorPointCloudNoAccumulator" / "IsaacCreateRTXLidarScanBuffer" / "StableIdMap" / "GenericModelOutput")

LidarSensor(..., annotators=[...]) with short names "generic-model-output" / "stable-id-map". The deprecated Replicator annotators IsaacCreateRTXLidarScanBuffer and IsaacComputeRTXLidarFlatScan ship with the deprecated isaacsim.sensors.rtx extension; the active replacement annotator IsaacExtractRTXSensorPointCloud ships with the still-active isaacsim.sensors.rtx.nodes extension and is what LidarSensor / RadarSensor use under the hood. See RTX Sensor Annotators.

LidarRtx.initialize() / pause() / resume() / is_paused()

Driven by omni.timeline.get_timeline_interface(); not duplicated on LidarSensor.

LidarRtx.enable_visualization() / disable_visualization()

LidarSensor.attach_writer("draw-point-cloud") / LidarSensor.detach_writer("draw-point-cloud") (registered by isaacsim.sensors.rtx.nodes).

LidarRtx.decode_stable_id_mapping() / LidarRtx.get_object_ids() (static)

parse_stable_id_map_data(...) and parse_object_ids(...) from isaacsim.sensors.experimental.rtx.

from isaacsim.sensors.rtx import get_gmo_data; gmo = get_gmo_data(rawPtr)

data, info = sensor.get_data("generic-model-output"); gmo = parse_generic_model_output_data(data).

isaacsim.sensors.rtx.nonvisual_materials (Python helpers + CSV-driven mapping)

USD attributes (omni:simready:nonvisual:*); see RTX Sensor Non-Visual Materials.

Code examples#

RTX Lidar — create and read

Old (isaacsim.sensors.rtx):

import numpy as np
from isaacsim.sensors.rtx import LidarRtx

sensor = LidarRtx(
    prim_path="/World/Lidar",
    config_file_name="Example_Rotary",
    orientation=np.array([1.0, 0.0, 0.0, 0.0]),
)
frame = sensor.get_current_frame()

New (isaacsim.sensors.experimental.rtx):

import numpy as np
from isaacsim.sensors.experimental.rtx import Lidar, LidarSensor

sensor = LidarSensor(
    Lidar.create(
        "/World/Lidar",
        config="Example_Rotary",
        orientations=np.array([[1.0, 0.0, 0.0, 0.0]]),
    ),
    annotators=["generic-model-output"],
)
data, info = sensor.get_data("generic-model-output")

RTX Radar — replace the create command

Old:

import omni.kit.commands
from pxr import Gf

omni.kit.commands.execute(
    "IsaacSensorCreateRtxRadar",
    path="/Radar",
    parent="/World/Robot",
    config="Example_Radar",
    translation=Gf.Vec3d(0.0, 0.0, 0.0),
)

New:

import carb
from isaacsim.sensors.experimental.rtx import Radar, RadarSensor

# RTX Radar requires Motion BVH to be enabled.
settings = carb.settings.get_settings()
settings.set("/renderer/raytracingMotion/enabled", True)
settings.set("/renderer/raytracingMotion/enableHydraEngineMasking", True)
settings.set("/renderer/raytracingMotion/enabledForHydraEngines", "0,1,2,3,4")

sensor = RadarSensor(
    Radar.create(
        "/World/Radar",
        translations=[[0.0, 0.0, 0.0]],
    ),
    annotators=["generic-model-output"],
)
data, info = sensor.get_data("generic-model-output")

Ultrasonic → Acoustic

Old (Ultrasonic plugin):

import omni.kit.commands
from pxr import Gf

omni.kit.commands.execute(
    "IsaacSensorCreateRtxUltrasonic",
    path="/Ultrasonic",
    parent="/World/Robot",
    translation=Gf.Vec3d(0.0, 0.0, 0.0),
)

New (Acoustic class authors an OmniAcoustic prim with the WPM schema):

from isaacsim.sensors.experimental.rtx import Acoustic, AcousticSensor

sensor = AcousticSensor(
    Acoustic.create(
        "/World/Acoustic",
        translations=[[0.0, 0.0, 0.0]],
    ),
    annotators=["generic-model-output"],
)
data, info = sensor.get_data("generic-model-output")

Reading raw GMO data

Old (helper that took a raw GMO pointer):

from isaacsim.sensors.rtx import get_gmo_data

# rawPtr is a raw GMO buffer pointer obtained from a deprecated
# OgnIsaacReadRTXLidarData OmniGraph node (removed in Isaac Sim 5.0).
gmo = get_gmo_data(rawPtr)  # noqa: F821

New (runtime sensor owns the buffer; parse_* helpers are module-level):

from isaacsim.sensors.experimental.rtx import Lidar, LidarSensor, parse_generic_model_output_data

sensor = LidarSensor(
    Lidar.create("/World/Lidar", config="Example_Rotary"),
    annotators=["generic-model-output"],
)
data, info = sensor.get_data("generic-model-output")
gmo = parse_generic_model_output_data(data)

For the per-sensor APIs, see RTX Lidar Sensor, RTX Radar Sensor, and RTX Acoustic Sensor. For the non-visual materials migration (CSV → USD attributes), see RTX Sensor Non-Visual Materials. For the camera migration (deprecated isaacsim.sensors.cameraRtxCamera/CameraSensor), see Camera Sensors.