How "intensityProcessing" works in RTX Lidar

Isaac Sim Version

4.5.0
4.2.0
4.1.0
4.0.0
4.5.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):

Operating System

Ubuntu 22.04
Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):

GPU Information

  • Model: Geforce RTX 4060Ti
  • Driver Version: 550.144.03

Topic Description

Detailed Description

I want to know how exactly “intensityProcessing” afects the intensity received by RTX Lidar. There are two commented options here:

  1. Normalization
  2. Correction

I found a third one, because writting “raw” returns always an intensity of 1.

I am trying to do a radiometric study for a custom LiDAR, and with these configurations available, the reduction in intensity vs distance is not I ∝ 1/d². I have corrected the intensity received to achive I ∝ 1/d². However, I would like to know how exactly the intensity is calculated or where I can find the corresponding documentation, to be sure how to work with these two options.

Thank you for your time and your help! :)

Hi @carles.prego

For where you install Isaac Sim 4.5.0, you can find where we define LidarIntensityProcessing under extscache

enum class LidarIntensityProcessing : uint8_t
{
    kCorrection, /**< simple correction method which removes the distance factor */
    kRaw, /**< no correction, raw intensity output scaled to fit */
    kNormalization, /**< normalized intensity output (not supported, yet) */
    kCalibrated, /**< close to true reflectance output, rigorous radimetric correction and calibration applied. (not
                    supported, yet) */
    kPointType, /**< inferred hit point type (not supported, yet) */
    kNum /**< indicator for number of elements in the enum */
};

Hi @zhengwang,
I have tried raw, correction, normalization and calibrated.

  • Raw and Calibrated returns always an intensity of 1 (I have the intensityScalePercent = 100 to get a value [0, 1]). So, it always returns the maximum value independent of the distance to the object or the beam incidence angle. Can it be a scale or resolution problem?
  • With normalization I get different values of intensity but it reduces it by a factor of 1/d⁰·⁵, where d is the distance to the object.
  • With correction reduces the intensity by a factor of 1/d¹·⁶.

To achieve a successful radiometric study, the intensity should be reduced by a factor of:

  • 1/d² : if the target object is bigger than the beam footprint.
  • 1/d⁴ : if the target object is smaller than the beam footprint.

I attach here my Lidar config JSON with only two beams (one centered) that I am using:

“profile”: {
“scanType”: “solidState”,
“rotationDirection”: “CW”,
“intensityProcessing”: “coorection”,
“rayType”: “GAUSSIAN_BEAM”,
“nearRangeM”: 0.5,
“farRangeM”: 300.0,
“effectiveApertureSize”: 0.015,
“focusDistM”: 0.16,
“rangeResolutionM”: 0.0015,
“rangeAccuracyM”: 0.03,
“avgPowerW”: 0.3,
“minReflectance”: 0.1,
“minReflectanceRange”: 300.0,
“wavelengthNm”: 1064.0,
“pulseTimeNs”: 3,
“maxReturns”: 1,
“scanRateBaseHz”: 6.6,
“reportRateBaseHz”: 6.6,
“numberOfEmitters”: 2,
“numberOfChannels”: 2,
“rangeCount”: 1,
“ranges”: [
{
“min”: 0.5,
“max”: 300
}
],
“beamWaistHorM”: 0.000194,
“beamWaistVerM”: 0.000194,
“azimuthErrorMean”: 0.0,
“azimuthErrorStd”: 0.0,
“elevationErrorMean”: 0.0,
“elevationErrorStd”: 0.0,
“stateResolutionStep”: 1,
“numLines”: 1,
“numRaysPerLine”: [
2
],
“emitterStateCount”: 1,
“emitterStates”: [
{
“azimuthDeg”: [
0, -15
],
“_commentOnAzimuth”: “Flat Scan is expecting equal angles between each emitter in the line it uses”,
“elevationDeg”: [
0, 0
],
“_commentOnElevation”: “Flat Scan use the line with elevation nearest 0 as it’s first line entry”,
“fireTimeNs”: [
0, 3820
]
}
],
“intensityMappingType”: “LINEAR”,
“intensityScalePercent”: 100
}
}

I would like to know if there is some equation related to distance vs intensity? I would like to understand how it is working on each case.

Thank you @zhengwang !