Solid State RTX Lidar Config

I have been trying to model a solid state lidar using the RTX Lidar of Isaac-Sim. I read the documentation here.

What I am trying to do:

  • Trying to model a solid state lidar which
    • scans row-by-row starting from below
    • has no time-offset between channels of the same row
    • Let’s say the pointcloud dimensions are (columns,rows)=(100,50) and I scan 100 points at once (bottom row) and these emitters move up a row and scan the next row and this repeats 50 times for one complete scan.
    • Lidar frequency is 10 Hz meaning I should receive 10 complete scans per second.

Anyways, I have a few doubts about the documentation.

  • For my use case, which is recommended?
    • One emitter state with 5000 points in which fireTimeNs list changes its value at every 100th element
    • 50 emitter states with each emitter state representinǵ a row
  • What is the difference between reportRateBaseHz and scanRateBaseHz which would lead me to the next questions
    • What is the difference between firing pattern and full firing cycle in the documentation? (in my case, which is one row and which is one complete scan)
    • I assume scanRatesHz is a list of configurable scanning frequencies. How does it help in the simulation if we have to change the actual frequency values ourselves?
    • What does ‘tick’ in relation to scans mean; is it per row or per complete scan?
    • I understand that the RTX lidar renders frames with a texture which is then post-processed to generate the pointcloud - which of the above frequencies correspond to this frequency of rendering frames?
  • What is the purpose of waveLengthNm, minReflectance, minReflectanceRange because I wrote a simple MDL file with spectral properties (defining reflectance values for a set of wavelengths) and I see no effect. For eg., I set the waveLengthNm in the config file to 885 nm and created a material which reflects only light of wavelength=520nm and another material which reflects only light of wavelength=885nm and I saw no difference in the pointcloud (I expected that the rays won’t reflect and hence no points of intersection for the first material)
  • What is intensityMappingType which I don’t see in the documentation but the console says that it is missing.
  • I also read from one of the forum posts that there are solid-state specific parameters like numLines and numRaysPerLine which are not yet included in the documentation; these parameters are more intuitive but how do we use this to write emitterStates

I believe the Example_Solid_State.json file is similar to what you need, but it’s rows have 1000 columns instead of 100.

  • For my use case, which is recommended?

    “numLines”: 50,
    “numRaysPerLine”: [100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
    100, 100, 100, 100, 100, 100],

And unless the parameters of the emitters changes, you only need one state.

  • What is the difference between reportRateBaseHz and scanRateBaseHz which would lead me to the next questions

I’m not sure there is one for the solid state lidar. I’ll pass that question up the chain, but I have only seen these be equal in solid state lidar.

  • What is the difference between firing pattern and full firing cycle in the documentation? (in my case, which is one row and which is one complete scan).

Nothing, your firing pattern has 5000 firings for a full scan. It fires at 10Hz, so you fire 10 patterns a second.

  • I assume scanRatesHz is a list of configurable scanning frequencies. How does it help in the simulation if we have to change the actual frequency values ourselves?

scanRatesHz is not used.

  • What does ‘tick’ in relation to scans mean; is it per row or per complete scan?

per complete scan. Your solid state lidar has 5000 emitters. tic is a bad word, should probably be Hz

  • I understand that the RTX lidar renders frames with a texture which is then post-processed to generate the pointcloud - which of the above frequencies correspond to this frequency of rendering frames?

None. The rendering is done at the FPS of the application. So if your running at 30fps, then you will get about 1/3 of your emitters firing per frame.

  • What is the purpose of waveLengthNm, minReflectance, minReflectanceRange because I wrote a simple MDL file with spectral properties (defining reflectance values for a set of wavelengths) and I see no effect. For eg., I set the waveLengthNm in the config file to 885 nm and created a material which reflects only light of wavelength=520nm and another material which reflects only light of wavelength=885nm and I saw no difference in the pointcloud (I expected that the rays won’t reflect and hence no points of intersection for the first material)

I’m not sure waveLengthNm is used outside atmospheric interference, which is not in IsaacSim yet.
minReflectance is the min return power at a range that is considered valid. below that, the return may be invalid. The minReflectanceRange is the range to consider that min value at.

  • What is intensityMappingType which I don’t see in the documentation but the console says that it is missing.

You should not be getting an error, your intensityMappingType should default to “LINEAR”, like in the example json files.

  • I also read from one of the forum posts that there are solid-state specific parameters like numLines and numRaysPerLine which are not yet included in the documentation; these parameters are more intuitive but how do we use this to write emitterStates

Huh, those got left out by mistake, I’ll update the docs on my end. They will read:

numLines: Number of rows per full scan.

numRaysPerLine: Number of emitters in a row.

They are not in emitter states… but the number or array entries in the emitter state parameters is numLines*numRaysPerLine

Solid state config files tend to be large compared to rotary config files because of this fact.

1 Like

Regarding the scan rates for solid state lidar, a more knowledgeable person than I responded:

“The reportRateBaseHz and scanRateBaseHz are the same for solid state configurations. It makes a difference when you have a different lidar system (like a rotary lidar) where you have a tick that encompasses a sub scan of the full scan (Think of it as a sub field of view that will encompass the full field of regard). The scanRate is the rate at which a full PC is completed (which is the same for solid state or rotary). The reported rate is the rate per tick. Since solid states are basically one tick, the reportBaseRate and the ScanRate are the same.
Have you taken a look at the Example_Solid_State.json configuration? Based upon what the nature of the question at hand, the segmentation in angle and time can be fully defined. It would require some modifications to the file to support the specific scan timing. This is a good place to start to grasp how a simple solid state lidar can be configured. It should provide the full context on a lot of the following questions about how the solid state lidar is configured
Note the wavelength, minReflectance, and minReflectanceRange are metrics that help define the capability of the lidar in regards to intensity thresholds.
The intensity mapping is yet another way to scale the output. A real sensor can scale and quantize intensities and this is a feature where one can use different mapping types to achieve a different scaled output. A linear mapping type is probably what is desired here”

1 Like