How to config Solid_State Lidar

Hello,
I want to simulate a custom mems lidar in Isaac sim, and I want to know Is there a detailed description of the parameters in the Example_Solid_State.json and the Solid State lidar model used in Isaac Sim. thanks~

Hi @cchasingw , please go through this documentation 11. Publish RTX Lidar Point Cloud — Omniverse Robotics documentation that will help you for solid state lidar configuration.

thanks for your help, I do have run the example follow the document, But I need more detailed description about the following fields in the Example_Solid_State.json file and I need more information about the lidar model used in the simulation to match our own LiDAR sensor better. look forward to your reply.

{
  "class": "sensor",
  "type": "lidar",
  "name": "Example Solid State",
  "driveWorksId": "GENERIC",
  "profile":
  {
    "scanType": "solidState",
    "intensityProcessing": "normalization",
    "rayType": "IDEALIZED",
    "nearRangeM": 1.0,
    "farRangeM": 200.0,
    "effectiveApertureSize": 0.01,
    "focusDistM": 0.12,
    "startAzimuthDeg": -50.0,
    "endAzimuthDeg": 50.0,
    "upElevationDeg": 8.0,
    "downElevationDeg": -8.0,
    "rangeResolutionM": 0.004,
    "rangeAccuracyM": 0.025,
    "avgPowerW": 0.002,
    "minReflectance": 0.1,
    "minReflectanceRange": 270.0,
    "wavelengthNm": 1550.0,
    "pulseTimeNs": 6,
    "reportTypes": "Strongest, Last, Dual",
    "maxReturns": 2,
    "scanRatesHz": [10.0],
    "scanRateBaseHz": 10.0,
    "reportRateBaseHz": 10,
    "numberOfEmitters": 50000,
    "numberOfChannels": 50000,
    "rangeCount": 1,
    "ranges": [
      {"min": 0.5, "max": 300}
    ],
    "azimuthErrorMean": 0.0,
    "azimuthErrorStd": 0.025,
    "elevationErrorMean": 0.0,
    "elevationErrorStd": 0.025,
    "stateResolutionStep": 1,
    "numLines": 50,
    "numRaysPerLine": 
    "emitterStateCount": 1,
    "emitterStates": [
      "azimuthDeg": [-50.0,-49.9,...],
      "elevationDeg": [-8.0, ...],
      "fireTimeNs": [0,1980,3960, ... , 98998019,99000000],
      "channelId": [1,2,3,4,5,6, ..., 49998,49999,50000],
      "rangeId": [0, 0, 0, ... ,0],
      "bank": [0,0, ... ,49,49,49,49]
      }
    ],
    "intensityMappingType": "LINEAR"

I also need to understand the fields in this JSON config file.

I hesitate to do this because I have not finished the documentation yet… PLEASE USE THE ISAAC SIM DOCUMENTATION FOR 2022.2.0+ AS THE MOST UP TO DATE SOURCE… that said… here is my early draft of the information you desire!

Must Have:

scanType: specifies the scanning principle of the simulated lidar

“rotary” - spinning lidars

“solidState” - non spinning lidars

[near,far]RangeM: the min and max valid range in meters

[start,end]AzimuthDeg: start/end azimuth of sensor fov in deg

[up,down]ElevationDeg: upper/lower elevation of sensor fov in deg

rangeResolutionM: range resolution in m

rangeAccuracyM: range accuracy in m

avgPowerW: average power of laser in W. This is a per pulse power, and I have only seen it set to 0.002. It is used in a lot of the shaders, so if you have a more accurate number try it! It is NOT the power of the entire lidar. (See Note 1)

waveLengthNm: wavelength of laser in nanometer

pulseTimeNs: laser pulse time in ns (See Note 1)

maxReturns: Number of returns of the lidar. Using 1 return has an optimized path, so if you don’t need more than 1 return, don’t use it!

reportRateBaseHz: the number of times the firing pattern is shot per second (See Note 1).

reportTypes: Not used but necessary for parsing.

scanRatesHz: Not used but necessary for parsing.

scanRateBaseHz: frequency of the sensor, i.e. how many times it spins a second fir rotating, or how many fill firing cycles per second for a solid state

numberOfEmitters: number of emitters per tick/sensor position (See Note 1)

Optional:

rangeOffset: start beam firing after this distance. Helpful for lidar inside housing geometry.

intensityProcessing: specifies the intensity correction method

“normalization” - this is the value I see most, and it normalizes based on the Rayleigh range

“correction” - a range based correction that is not derived from a gaussian beam profile, and treats all ranges past 100m the same

Any other string - fallback behavior

rayType: specifies the modeled ray type

“IDEALIZED” - emitter is modeled as an idealized ray (Less GPU Memory used)

“GAUSSIAN_BEAM” - emitter is simulated as an gaussian beam

“UNIFORM_BEAM” - emitter is simulated as a uniform beam

effectiveApertureSize: effective aperture size of collector in meters (Optional)

focusDistM: Focusing distance in m, distance to beam waist (Optional)

valid[Start,End]AzimuthDeg: star/endt azimuth in deg for capped sensor fov (Optional)

[hor,vert]ResolutionDeg: horizontal/vertical resolution in deg

minReflectance: minimum reflectance at a minReflectanceRange

minReflectanceRange: specified range with minReflectance

emitterStateCount: Number of different emitter states.

emitterStates: This holds the list or emitter states.

For Solid State Only

The next two properties are for solid state only.

numLines: Number of rows per full scan.

numRaysPerLine: Number of emitters in a row.

Emitter States

Emitter states hold properties that are arrays of size numberOfEmitters. As a convenience, if you have only one emitter state for a rotary lidar, you can use the emitters property and fill it with a single set of emitter properties (each one still of length numberOfEmitters). The first three emitter state properties are mandatory, and the rest are optional.

Must Have:

azimuthDeg: azimuth deviation in degrees of the emitter as measured from the angle the firing starts at.

elevationDeg: elevation deviation in degrees, must be between [up,down]ElevationDeg

fireTimeNs: firing time of emitter (delta to tick start time) in ns. It should be in the range [0, 1.000.000.000/reportRateBaseHz).

Optional:

bank: beam bank, corresponds to the line in case of a solid state sensor and should be filled if the line/bank information is important in post processing

channelId: channel of beam

rangeId: emitter range id, should be filled if there are different ranges for different emitters

1 Like

RTX Lidar will be better supported in our upcoming release.

Thank you very much for this information!

Question on emitter states. The lidar I’m trying to simulate has two firing sequences. It has 128 channels, but only 96 of them ever fire at any one time. Could this be modeled using the Emitter States? The only configs in the examples have one emitter state.

Also, could you post Note 1? It seems to have useful information.

Math is not working out on Note 1. It will probably just be removed unless I am sure of it’s correctness. So… nope. Sorry!

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