v19.3.0 - 2026-06-05
Highlights
-
nuScenes V4 converter + lidar model tooling (#128): Full nuScenes dataset support in NCore V4 format, shipping with a new generic lidar model library and evaluation tool:
- Converts nuScenes to V4 (closing #123), covering 6 cameras, HDL-32E lidar, 5 radars, and 3D cuboid annotations. Achieves 0.029deg far-range angular error on the lidar model - on par with PAI extraction quality.

- Change was a little involved on the lidar model side as nuScenes does only expose motion-compensated data without per-point timestamps, but effort resulted in a couple of additional re-usable features / tools:
- Structured lidar model estimation library (docs): Generic, reusable library for deriving spinning lidar models from motion-compensated point clouds. Works without raw per-point timestamps (but still relies on some additional assumptions for now). Composable steps for azimuth extraction, column alignment, resolution upsampling, and multi-frame optimization. HDL-32E presets included.
- Lidar model evaluation tool (
ncore_evaluate_lidar_model): CLI tool that compares model-predicted vs. native ray directions on any sequence and validates against target thresholds. Reports angular error (mean/median/p95), per-row and per-frame breakdowns, and optionally renders overlay and error heatmap images onto camera frames.
- Converts nuScenes to V4 (closing #123), covering 6 cameras, HDL-32E lidar, 5 radars, and 3D cuboid annotations. Achieves 0.029deg far-range angular error on the lidar model - on par with PAI extraction quality.
-
Generic Rolling-shutter solver refactor (#119): Extracted a shared and abstract
RollingShutterSolverimplementation from previously hardcoded camera and lidar models into a generic utility class, unifying both (camera convergence was based on pixel-deltas, whereas lidar uses the more general time-convergence criteria working for all sensors). This is groundwork for eventually adding support for solid-state lidars (#125). No observerable public behavior change, but includes a deeper analysis of the convergence pattern we see in practice for currently "time-linear" camera/lidar sensors, and also implements additional higher-order (approximate) differential solver variants that would handle non-linear measurement time readout behaviors better also.
-
OpenCV fisheye
compute_max_anglefix (#140): Replaced Newton-Raphson inversion with a hybrid analytical solver that correctly handles non-monotone distortion polynomials (images wider than the valid FOV). Up to 1667x faster by determining inflexion points via Eigenvalue decomposition; fixes nonsensical output angles (e.g. 451 deg) for affected cameras (example image of now-supported fisheye lenses of the model). Note that the API location changed from the model to the parameter pack, which is a mild breaking change, but as arguments remain compatible and usage is likely low opted for a minor instead of a major version bump.
➕ Added
- (data_converter) add structured lidar model extraction library - (d818a9e) - Janick Martinez Esturo
- (nuscenes) add nuScenes to NCore V4 converter - (827506d) - Janick Martinez Esturo
- (tools) add lidar model evaluation tool - (b694dea) - Janick Martinez Esturo
- Add OpenCV-based colormap utilities, remove matplotlib dependency - (c8fdd35) - Janick Martinez Esturo
🪲 Fixed
(data) respect monotonicity in OpenCV fisheye compute_max_angle - (c67ecfa) - Janick Martinez Esturo
- (pillow) Update Pillow to 12.2.0 to address CVE-2026-42311 - (1497969) - Janick Martinez Esturo
- Lockfile update - (0f82eae) - Janick Martinez Esturo
⚡ Performance
- (ci) drop repository-cache to eliminate 3 min download overhead - (e234b54) - Janick Martinez Esturo
- (ci) commit MODULE.bazel.lock to skip PyPI resolution in CI - (0498325) - Janick Martinez Esturo
🔄 Changed
- (sensors) extract shared rolling-shutter solver into generic utility - (c1e21ea) - Janick Martinez Esturo
⚙️ CI
- remove redundant tag trigger from CI workflow - (c69e32a) - Janick Martinez Esturo
🏗️ Build
- (bazelignore) Ignore .venv directory in .bazelignore - (bc07978) - Janick Martinez Esturo