LiDAR ranging · window transmission characterization
Window Transmission
Two 31-frame series on the same bench scene, no window vs a ZnS IR window in front of the sensor. The window cuts returned signal by roughly half at the VL53L8CX's 940 nm ranging wavelength — and the reported distance barely moves. Ranging is robust to this loss; it costs confidence, not correctness.
- Part
- ST VL53L8CX, 8×8 zones, SATEL-VL53L8 breakout
- Device
- cali.EGG68 (nRF9151), shared I²C bus with Grid-EYE
- Window
- UQG ZSW-132 ZnS-MS, uncoated, Ø13×2 mm
- Scene
- bench ceiling (~1.8 m) + nearby shelving, unchanged between runs
- Frames
- 31 + 31 (one dropped read per series), ~0.5 s apart
- Fields
- distance_mm, signal_per_spad, range_sigma_mm, ambient_per_spad, reflectance
Summary
Every zone's returned signal drops with the window in place, every zone's distance-measurement noise rises with it, and every zone's reported distance stays where it was. The three move together exactly as a pure transmission loss predicts: weaker return, noisier estimate, same answer.
Signal (signal_per_spad)
−46.6%
median, all 64 zones
Distance noise (range_sigma_mm)
+44.9%
median, all 64 zones
Reflectance (estimated)
−45.2%
algorithm reads the loss as target reflectance
Reported distance
+0.4%
~16 mm — unchanged
The setup
Same bench scene both runs — the sensor faces a ceiling roughly
1.8 m away, with nearby shelving entering the field of view at an angle, so
the 64 zones span both a far, uniform surface and a closer, harder edge. Nothing
else in the rig changed between series: only the window, added between the
first and second capture. Each series is 31 successful cal tof raw
reads (one read failed per series, unrelated to the window — both series
otherwise clean). Per-zone values below are the mean across the 31 frames.
The window is a ZnS disc already in service on the Grid-EYE side of this project, chosen and characterized there for its long-wave IR transmission. It was never selected for 940 nm — this run is the first direct measurement of how it performs at the LiDAR's actual wavelength.
Signal, noise, distance
Each panel plots one metric, no-window on the x-axis against with-window on the y-axis, one point per zone (mean of 31 frames). A point on the dashed line means the window changed nothing; below it means attenuation, above it means an increase.
The consistency is the finding, not just the average. Every single zone moved the same direction in panels a and b — this is not a few bad readings pulling a mean around, it is the window doing the same thing everywhere in the frame.
Reading the numbers together
Signal and reflectance dropped by almost the same amount (−46.6% and −45.2%). That is not a coincidence: the ULD firmware estimates reflectance from the returned signal at a given range, and it has no way to tell “the target got less reflective” apart from “something in the path absorbed the return.” A window in front of the sensor reads as the second one but gets reported as the first. Ambient light dropped too (−21.5%), consistent with the same window attenuating background IR along with the VCSEL return, just by a smaller fraction — ambient light isn't collimated through the window on the same path the ranging return takes.
None of that moved the distance. range_sigma_mm is the
sensor's own per-target noise estimate, and it rose right where the signal
fell — the firmware is correctly reporting lower confidence, not
silently degrading the answer. A ~50% signal loss is well inside what this
sensor's ranging algorithm can absorb without the reported distance moving.
What this means for the window choice
This ZnS window is a broadband compromise: it has to work across the Grid-EYE's long-wave IR band, not just the LiDAR's single 940 nm line. Uncoated ZnS has a refractive index near 2.2, so two uncoated surfaces alone predict roughly 25–30% Fresnel reflection loss; the rest of the measured ~46% is likely bulk absorption/scattering outside the band this material was actually chosen for.
A window picked specifically for 940 nm — narrowband, ideally AR-coated for that line — could get much closer to the >95% transmission an uncoated broadband material can't reach, at the cost of no longer sharing one window across both sensors. Worth scoping once the two-sensor mechanical design is far enough along to know whether a shared window is still the plan. Whatever it ends up being, it needs to be waterproof — this is a sewer-deployment platform.
Method & caveats
- Part: ST VL53L8CX, ULD driver, 8×8 resolution,
NB_TARGET_PER_ZONE = 1. Target status read a uniform 6 across every zone in both series — the ULD header comments 5 and 9 as “OK,” not 6; not yet resolved against the fuller status-code table, but consistent and physically coherent in both runs regardless. - One read failed in each 32-attempt series (31/32 both times) for reasons unrelated to the window — occasional transient read failures, not a pattern tied to either condition.
- Bench scene, not a controlled radiometric target: the ceiling and shelving are whatever reflectance they happen to be, not a calibrated reference panel. The comparison is still valid because it's the same scene, unmoved, between the two series — only the window changed.
- Per-zone values are the 31-frame mean; no attempt yet to separate frame-to-frame noise from the window effect itself, since the noise increase (panel b) is itself part of what's being characterized here.
- Single window sample, single distance, single incidence angle (the window sits flat against the sensor face). Angle- and distance-dependence of the transmission loss are both open.
Data: 31-frame series each, no-window and with-window, matched bench scene, 2026-09-19. Raw per-zone series (distance_mm, target_status, signal_per_spad, range_sigma_mm, ambient_per_spad, reflectance × 64 zones × 31 frames) held in the device project repository, not published here.