Creating custom Lidar in Isaac Sim 5.1.0

Hello,

I’m wondering in Isaac Sim 5.1.0 via the Python API, is there an expected way to use custom lidars? In the 4.5.0 documentation (see RTX Lidar Sensor — Isaac Sim Documentation), it mentions additional lidar configs being put in the lidar_configs folder. In the 5.1.0 documentation, there’s no mention of this folder, and a vague mention to using USD files. When I try to reference a config in this folder in Python, I get an error such as “Config ‘VELODYNE_VLS128’ not found for OmniLidar at /lidar”. Any advice here would be appreciated.

To create or configure a custom Lidar in Isaac Sim 5.1.0, please refer to RTX Lidar Sensor — Isaac Sim Documentation.

@yoshterra2 @VickNV
I am also looking for methods to customize the sensor. The official documentation for version 5.10 does provide some guidance, but it does not cover how to perform this customization.

import omni
from pxr import Gf

# Specify attributes to apply to the ``OmniLidar`` prim.
sensor_attributes = {'omni:sensor:Core:scanRateBaseHz': 20}

_, 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,
    visiblity=False,
    variant=None,
    force_camera_prim=False,
    **sensor_attributes,
)

Executing the code creates a sensor, but it’s unclear which parameters are required for “sensor_attributes”, and there is no example provided to demonstrate it.

Hi @yoshterra2 @Julie_A,

Thanks for the questions. The RTX Lidar API changed significantly in Isaac Sim 5.0, and the documentation hasn’t fully caught up with all the details. Let me clarify both questions.

@yoshterra2 — “Config ‘VELODYNE_VLS128’ not found”

In 5.x, the config parameter in IsaacSensorCreateRtxLidar no longer maps to the JSON config files in the lidar_configs/ folder. Instead, it maps to USD sensor assets from the Isaac Sim asset library. The supported config names are derived
from those asset paths — for example “HESAI_XT32_SD10”, “Example_Rotary”, “OS1”, etc.

The Velodyne VLS-128 is not currently in the supported USD asset list. To create a VLS-128-like sensor, use config=None and set the attributes directly:

  import omni                                                                                                                                                                                                                                      
  from pxr import Gf                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                   
  _, sensor = omni.kit.commands.execute(                                                                                                                                                                                                           
      "IsaacSensorCreateRtxLidar",                                                                                                                                                                                                                 
      path="/lidar",                                                                                                                                                                                                                               
      parent=None,                                                                                                                                                                                                                                 
      config="Example_Rotary",  # start from a rotary template                                                                                                                                                                                     
      **{                                                                                                                                                                                                                                          
          'omni:sensor:Core:numberOfEmitte rs': 128,                                                                                                                                                                                               
          'omni:sensor:Core:numberOfChanne ls': 128,                                                                                                                                                                                               
          'omni:sensor:Core:scanRateBaseHz ': 10,                                                                                                                                                                                                  
          'omni:sensor:Core:nearRangeM': 1.0,                                                                                                                                                                                                      
          'omni:sensor:Core:farRangeM': 200.0,                                                                                                                                                                                                     
          'omni:sensor:Core:rangeResolutio nM': 0.004,                                                                                                                                                                                             
          'omni:sensor:Core:rangeAccuracyM ': 0.02,                                                                                                                                                                                                
          'omni:sensor:Core:maxReturns': 2,                                                                                                                                                                                                        
      }                                                                                                                                                                                                                                            
  )                                                                                                                                                                                                                                                

You can also look at the existing Velodyne JSON config at <isaac_sim>/exts/isaacsim.sensors.rtx/data/lidar_configs/Velodyne/Velodyne_VLS128.json as a reference for the full parameter set, and map those values to the corresponding
omni:sensor:Core:* attributes.

@Julie_A — “Which parameters are required for sensor_attributes?”

The sensor_attributes are the omni:sensor:Core:* USD prim attributes on the OmniLidar prim. Key ones for customization:

  • omni:sensor:Core:scanType — “ROTARY” or solid state
  • omni:sensor:Core:scanRateBaseHz — scan/rotation rate (Hz)
  • omni:sensor:Core:numberOfEmitte rs — number of emitters
  • omni:sensor:Core:numberOfChanne ls — number of channels
  • omni:sensor:Core:nearRangeM / farRangeM — min/max range (meters)
  • omni:sensor:Core:rangeResolutio nM / rangeAccuracyM — range precision
  • omni:sensor:Core:maxReturns — max returns per pulse
  • omni:sensor:Core:reportRateBase Hz — point report rate
  • omni:sensor:Core:avgPowerW — average emitter power
  • omni:sensor:Core:waveLengthNm — wavelength

For emitter-level configuration (elevation angles, azimuth offsets, fire timing), see the omni:sensor:Core:emitterState:* attributes. The full schema is defined in the omni.usd.schema.omni_sensors extension.

The easiest workflow is: start from a supported config (e.g., “Example_Rotary”), then override specific attributes to match your target sensor.

Note: this behavior is the same in Isaac Sim 6.0 — the approach for custom sensors uses USD prim attributes rather than the legacy JSON configs.

Closing this one out — hope this helps unblock you both.