v0.17.0 (Measured Chirp Bandwidth & Laser Linearity)

View this release on GitHub → Release Date: August 03, 2026

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.

Interface contract: carbon-interface v1.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.

Breaking Changes

  • HealthState.max_switch_resistance and min_switch_resistance are gone, replaced by ll_fom and ll_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 — substitute ll_fom for max_switch_resistance and ll_fom_smoothed for min_switch_resistance, and expect a float. No other HealthState field changed.

New Features

  • Laser linearization figure of merit in the health state. ll_fom reports the figure of merit for the sensor’s most recent linearization pass and ll_fom_smoothed reports its rolling average. Both are available on HealthState in Python and C++, and appear in the Voyant 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, and CAR-30-017, and updated for CAR-30-014. Required to bring up these sensors 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 DSP bandwidth_hz override (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 Voyant 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.

Documentation

For comprehensive documentation, examples, and installation instructions, visit our documentation site.

Feedback

We value your feedback! If you encounter issues or have suggestions for improvements, please see our troubleshooting guide for the best options for getting in touch with us.

← Next release
v0.17.1
Previous release →
v0.16.1

Copyright © Voyant Photonics, Inc.

This site uses Just the Docs, a documentation theme for Jekyll.