v0.17.0
Interface contract:
carbon-interfacev1.5.6 (up from v1.3.3 in v0.16.1)
Firmware compatibility: install FPGA v1.5.6 / MCU v4.1.0 with the v7.1.X
bringup script / updater — v4.1.0 postdates this release and is now the recommended
firmware for it, because it quiets excess sensor-side log output (see v0.17.1). This
release shipped against, and still runs on, MCU v4.0.0 – v4.0.3 with the v7.0.X
updater. Not compatible with FPGA v1.3.3 / MCU v2.6.0 or older.Do not run this release against the previous firmware generation (FPGA v1.3.3 /
MCU v2.6.0). The interface contract keeps the API and the sensor firmware in sync,
so the two must be updated together. Update the sensor before installing this
release.
A range-accuracy and sensor-health release. Range is now solved from the chirp
bandwidth the sensor actually measures rather than the value that was commanded, the
laser linearization figure of merit replaces the two undefined switch-resistance
readouts, and four Carbon sensors gain or refresh their default background-noise
calibration.
Breaking Changes
HealthState.max_switch_resistanceandmin_switch_resistanceare gone,
replaced byll_fomandll_fom_smoothed. The removed pair never had defined
units; the same two heartbeat slots now carry the laser linearization figure of
merit, and the new fields are floats rather than integers. Python and C++ code
reading the old names must be updated.
New Features
- Laser linearization figure of merit in the health state.
ll_fomreports the
figure of merit for the sensor's most recent linearization pass — lower is better —
andll_fom_smootheda rolling 5-sample average of it. Both are available on
HealthStatein Python and C++, and appear in the visualizer's sensor-health panel
as "Linearity Figure of Merit" and "Linearity Figure of Merit Smoothed". Use it as
a relative indicator of laser sweep quality; absolute units are not yet specified.
New Supported Units
- Background noise calibration: default masks added for
CAR-30-015,
CAR-30-016, andCAR-30-017, and updated forCAR-30-014. Required to bring
these sensors up through the compiled binaries (visualizer, CLI, Python/C++
bindings).
Behavior Changes
- Range is now computed from the sensor's measured chirp bandwidth. Point
generation previously divided by the commanded ramp bandwidth — the sweep that was
requested, not the one the laser produced. It now uses the chirp bandwidth the
sensor measures and reports with each frame, so range no longer inherits the error
between commanded and actual sweep width. - Points are flagged invalid while no measured chirp bandwidth is reported. The
measured value reads zero until the sensor fills it in, which leaves range
uncomputable; those points now carry an invalid-bandwidth drop reason instead of an
infinite or nonsense range. In practice this shows up on the first frames after
power-up. The DSPbandwidth_hzoverride (set_bandwidth_hz()in Python) pins a
fixed bandwidth for replay and bench work — it is not a way to run this release
against older firmware.
Bug Fixes
- Fixed occasionally garbled text in the visualizer. Frames that skipped
rendering discarded that pass's font-atlas updates, which permanently corrupted
some on-screen text until the viewer was restarted. Text now stays correct for the
life of the session.