Changelog¶
Unreleased¶
-
Switched the public installation path to the verified GitHub Release wheel and removed the automatic PyPI publishing workflow following the maintainer decision to skip PyPI distribution.
-
Added the continuous-time trajectory foundation.
slac.continuous_time_trajectory/v0.1is a typed, schema-valid trajectory contract that declares the interpolation model, knot-domain validity (queries outside the domain are rejected, never clamped), and clock/capture-time semantics, and converts losslessly to the existing piecewise linear-slerp adapter. Analytic SE(3) manifold operations (se3_manifold) provide right-trivialized exp/log, the SO(3)/SE(3) left Jacobians and adjoint, the point-transform Jacobian, and two-knot screw interpolation Jacobians, all verified against finite differences. A sparse Gauss--Newton/Levenberg--Marquardt fitter (continuous_time_sparse) assembles the normal equations as a block-banded system in which every factor touches at most its two bracketing knots, estimating all knots on the manifold from body-frame point measurements and pose measurements (poses become four anchored point factors using only the analytic point Jacobian).calibrex trajectory build-contractandcalibrex trajectory fitexpose the workflow, and the fit result validates againstslac.continuous_time_trajectory_fit/v0.1with provenance pinned to both input digests. -
Added schema-valid empirical SE(3) uncertainty evidence (
slac.empirical_se3_uncertainty/v0.1).calibrex camera-lidar empirical-uncertaintyrefits the native probabilistic multi-frame refiner on deterministic contiguous temporal-block subsamples that never split a block across the train/holdout boundary, reports tangent-space intervals with Sidak-corrected joint family coverage against injected truth, retains weak or unobservable directions instead of dropping them, and applies an overconfident interval control that must be refuted before the PASS/WARN/FAIL policy can certify the intervals. Without a declared reference (--stability-only) the artifact reports the empirical spread with an INCONCLUSIVE policy. Every resample refit is retained as a digest-bound schema-valid result, and the artifact validates against its generated schema.
0.4.1 - 2026-08-11¶
- Promoted the no-download KITTI-shaped Camera-LiDAR evidence path into a strict five-minute demo. Its deterministic, generator-bound 300x300 fixture now detects 16/24 mandatory ±1 deg / ±0.10 m perturbation cases, passes all six falsification-policy gates without relaxing thresholds, and remains explicitly synthetic rather than a real-sensor accuracy claim. Added direct generator parity and strict end-to-end tests plus README commands that validate the result and verify its digest-bound provenance bundle.
- Added the Phase 3 provider-neutral probabilistic 2D--3D correspondence artifact and an optional Apache-2.0 OpenCV PnP-RANSAC adapter with confidence filtering, covariance-aware diagnostics, tests, and complete provider/input provenance. The correspondence contract now distinguishes dataset-license provenance from the provider's code/model license; ablation evidence is marked unverified when the dataset license or source digests are undeclared.
- Added a D2D-initialized native multi-frame probabilistic pose refiner with covariance/outlier/reliability weighting, robust loss, bounded SE(3) correction, disjoint frame holdout, complete candidate traces, and explicit uncertainty ablation switches.
- Added explicit D2D candidate-trace initialization for probabilistic
multi-frame refinement and its paired ablations. The trace must pin the same
problem digest and frame pair; results record its ID, digest, solver status,
and hit decision. Runs without a trace declare
problem_initial_transformand are not mislabeled as solved-D2D initialization evidence. The generic method ID is nowprobabilistic_multiframe_refinement/v0.2; the old v0.1 ID remains accepted for artifact compatibility. - Added a paired probabilistic-refinement ablation benchmark that executes the full estimator and three one-factor removals over fixed frame-split seeds, retains every schema-valid result, and reports failure-aware paired bootstrap comparisons with both input digests. Results and ablations now include translation distance and quaternion-geodesic rotation error to the problem's digest-pinned reference, making the planned cm/deg gates directly auditable alongside held-out reprojection.
- Added a ROS-independent joint camera--LiDAR continuous-time solver boundary using per-point firing times, supplied body twists, probabilistic image residuals, bounded extrinsic/clock refinement, disjoint holdout evidence, and an explicit weak-motion rejection gate.
- Added rolling-shutter row-time deskew plus fixed-clock, no-per-point-time, no-rolling-shutter, and no-covariance temporal ablations. The paired multi-split benchmark retains every result, failure, source digest, and bootstrap comparison. Optional frozen extrinsic/time references now produce initial/final rotation, translation, and clock errors in each result and paired ablation, making injected-recovery gates directly auditable. Continuous-time problems separately declare their dataset license; absent license provenance marks the ablation benchmark unverified.
- Added a ROS-independent, provenance-pinned piecewise SE(3) body-trajectory
adapter with linear translation, shortest-arc quaternion interpolation, and
strict no-extrapolation behavior. Continuous-time camera--LiDAR refinement
now uses this non-constant motion model when supplied while retaining the
constant-twist input as a backward-compatible fallback. A CLI adapter
attaches existing schema-valid
T_world_bodytrajectory artifacts while preserving both input digests and frame semantics. - Added a digest-frozen Camera-LiDAR SOTA audit protocol/result and CLI. It evaluates every numerical/integrity gate, dataset-family and independent-rig coverage, and can emit only supported, refuted, or incomplete verdicts; schema validation prevents an unsupported success label.
- Extended benchmark distributions with p90 and p95 and made mean, median,
p90, p95, maximum, and failure rate individually addressable by frozen SOTA
audit requirements, so tail failures cannot be hidden behind a mean. Paired
bootstrap improvement confidence bounds can also be frozen against an
explicit reference/candidate method pair, while runtime and peak-memory
mean/p95 statistics are directly auditable. Evidence whose benchmark
provenance declares
data_verified: falseis rejected, and result validation now enforces the semantics of all three verdicts rather than guarding onlysupported. Optional smoke requirements cannot inflate the achieved dataset-family or independent-rig coverage counts. - Added a schema-valid Camera-LiDAR D2D research pipeline with frozen Fibonacci-sphere protocols, complete candidate traces, Bull's Eye artifacts, an external FeatDepth provider adapter, rectified KITTI problem construction, deterministic parallel execution, and a 200/200-hit KITTI raw 0018 rotation-only reproduction gate.
- Completed the frozen KITTI raw 0018 rotation matrix at
1, 2, 10, 20 degwith 200 deterministic directions per level. The1, 2, 10 deglevels recovered 200/200;20 degrecovered 178/200 with zero computational failures, while its17.0067 degp90 and28.4920 degp95 retain the direction-dependent capture failures that its0.2425 degmedian would otherwise hide. All new traces and aggregate artifacts are schema- and digest-validated. - Added the KITTI-360 half of the D2D reproduction path: a pinned external
MiDaS v3.1 provider, official MEI fisheye projection, official
pose/azimuth-based Velodyne motion compensation with a schema-valid
provenance manifest, KITTI-360 problem construction, and CLI support. The
frozen
10 deggate completed at 200/200 hits with zero failures (mean0.3812 deg, maximum0.4676 deg), matching the paper's 100% target. - Completed the frozen KITTI-360 rotation matrix at
1, 2, 10, 20 degwith 200 deterministic directions per level. The1, 2, 10 deglevels recovered 200/200;20 degrecovered 184/200 with zero computational failures. Its0.3882 degmedian contrasts with a28.4409 degp95 and45.4505 degmaximum, retaining the direction-dependent capture failures. All new trace, benchmark, and Bull's Eye artifacts are schema- and digest-validated. - Added a digest-pinned A2D2 MiDaS/provider and pre-registered camera-view D2D
smoke path. The frozen five-direction
10 degrun completed 5/5 trials but failed recovery at 0/5 hits; the two-frame/pre-registration limitation and negative result are retained rather than weakening the gate. - Added digest-checked resumable Camera-LiDAR trial execution plus a bounded
six-DoF D2D solver, paired Fibonacci rotation/translation protocols,
schema-valid candidate traces, benchmark aggregation, and CLI commands. The
first real KITTI-360
(0.5 deg, 0.5 m)smoke converged to0.2505 deg / 2.08e-17 mand passed the frozen hit gate. - Completed the first full six-DoF matrix cell on KITTI raw 0018 at the frozen
(0.5 deg, 0.25 m)perturbation. All 200 trials converged with zero computational failures, but only 84/200 passed the strict<0.5 deg / <0.20 maccuracy gate. Rotation error was0.5230 degmean,0.5239 degmedian, and0.7228 degp95; translation error was0.1447 mmean,0.1421 mmedian, and0.1803 mp95. The negative 42% hit-rate result, all trace identities/digests, and schema-valid aggregate provenance are retained without weakening the gate. -
Corrected the UniCalib adapter's default provenance URL to the official WACV 2026
han-15/UniCalibrepository and locked it with a unit assertion. Updated the SOTA evidence review for TLC-Calib's May 2026 code/data release while retaining its non-commercial, external-process-only license boundary. -
Added a digest-locked fixed-frame KITTI raw Camera-LiDAR input artifact and recovery benchmark comparing a scalar-reference Pandey I2I optimizer with a vectorized, safety-gated deterministic coarse-to-fine path. On the fixed official KITTI raw 0005 input, all paired accuracy metrics were identical while mean trial runtime improved by 1.719x.
0.4.0 - 2026-07-29¶
- Extended
calibrex doctorfrom an environment check into an optional dataset-readiness workflow with type inference, quality and degeneracy diagnostics, compatible-workflow suggestions, a versionedslac.doctor/v0.1artifact, generation provenance, and validation support. - Added local and GitHub-hosted Calibration CI with
calibrex ci, a composite action, Step Summary rendering, enforced falsification and protocol gates, digest-bound inputs and custom policies, provenance-bound SVGs, and the versionedslac.calibration_ci/v0.1decision artifact. - Added the schema-versioned
slac.external_calibration_run/v0.1contract for digest-bound subprocess, container, precomputed, and imported calibration results; migrated the Koide adapter to it and added a ROS-free Kalibr camchain importer with explicit frame/time conventions and failure states. - Added a reproducible full-scale KITTI raw Camera-LiDAR falsification runner with a frozen reference/known-bad protocol, selected-frame and raw-input SHA-256 provenance, independently verified evidence bundles, an honest PASS/FAIL/INCONCLUSIVE decision artifact, and an opt-in official-data test.
- Prepared the public launch surface with a concrete five-minute quickstart, an approachable documentation home, a repository social preview, citation metadata, and corrected issue links.
- Added guarded PyPI trusted publishing after a GitHub release is published, including tag-to-package-version checks and clean wheel smoke tests.
- Replaced the abbreviated license notice with the complete Apache-2.0 text and
added a distributable
NOTICE. - Restored the Calibrex product, Python distribution/package, CLI, and source
path. Existing
slac.*schema IDs,slac_version,slac_native, and versioned protocol/policy IDs remain the stable legacy wire namespace. - Added provenance-bound SVG evidence cards via
calibrex render --format evidence-cardand schema-source comparison tables viacalibrex compare --format evidence-table, with deterministic README artifacts and drift tests. - Reworked the README around a concise evidence-first story, generated visual summaries, an honest accepted-vs-known-bad comparison, public-data demos, and a compact calibration coverage matrix.
0.3.0¶
- Trajectory artifact (
slac.trajectory/v0.1, schema #18) with ground-truth-free quality gates (kinematic health, interpolation clamp fraction, cross-segment drift proxy) on motion-compensated online runs. - Two-pass and native-deskew KISS-ICP odometry modes at rosbag conversion; native deskew cut Indoor02 identity selftest translation error ~9.5 cm → ~4.3 cm (~55%) with modest rotation regression (~1.2° → ~2.0°); two-pass odometry FAILed its own trajectory gate (cross-segment RMSE 0.366 m).
- Anchored temporal time-offset estimation (
time_offset_anchor: initial), dual-mode adapted/anchored provenance, joint extrinsic/temporal separability evidence row, and validation-onlyinject_time_offset_s(anchored mode tracked +50 ms injection exactly on selftest; adapted mode absorbed it). - LiDAR-IMU rotation evidence (
lidar_imufamily):sensor_msgs/ImuCDR decoding,--imu-topicbag conversion with OS1 IMU restamp, symmetric rotation-rate smoothing (holdout RMSE ~8 deg/s → ~3.6 deg/s, passing 5 deg/s gate), per-axis observability, known-bad rotation probes, and supporting-only gravity consistency (4.42° on Indoor02).
0.2.0¶
- Pure-Python rosbag2/MCAP reader (sqlite3 + MCAP, CDR PointCloud2 and Odometry).
- Odometry-aware online motion compensation for rosbag2 replays with world-frame source maps, odometry-extrapolation gate, and clock-domain restamping.
- KISS-ICP rig-frame odometry path and TIERS Indoor02 real-data validation (identity self-consistency control: ~10× extrinsic error reduction with motion compensation vs static control).
- Per-point deskew via
sensors.<name>.point_time_fieldon rosbag2 online runs. - Camera-LiDAR projection promoted to ADR-0004-protocol evidence rows with family-aware assessment policy gates and KITTI committed-sample demonstration.
- Temporal time-offset perturbation probes and 1D holdout-RMSE estimator on motion-compensated online runs (synthetic ±5 ms recovery; honest real-data degeneracy reporting).
- Project rename Calibrex → slac (ADR 0006).
0.1.0-alpha.1¶
- Project bootstrap.
- Typed config and result models.
- CLI skeleton with
doctor,schema,validate,verify,assess,evidence,init,inspect,calibrate,evaluate,render,visualize,compare,report, andexport. - Frame graph and SE3 utilities.
- Dataset manifest schema, filesystem dataset adapter, timestamp normalization, and MCAP adapter boundary.
- HTML report, report sidecars, and PASS/WARN/FAIL quality aggregation.
- Metric registry, deterministic holdout splitting, and threshold-based metric grading profiles.
- RGB-D Open3D SLAC adapter boundary and example config.
- Backend-neutral graph problem compiler and
slac compile. - Public dataset catalog, TUM RGB-D config, KITTI raw config, and direct TUM downloader helper.
- KITTI raw loader and fixed-mounted LiDAR prior factor.
- KITTI
calib_velo_to_cam.txtimporter for fixed-LiDAR initial transforms. - Autonomous-driving starter profile with Radar and Autoware export surface.
- Public Livox Horizon-Horizon PCD evidence demo for rigidly mounted solid-state LiDAR pairs.
- LiDAR pair evidence metrics, known-bad perturbation cases, holdout point-to-plane summaries, and evidence protocol metadata.
- Machine-readable
summary.json,metrics.json,observability.json,degeneracy.json, andevidence.jsonreport sidecars. - Machine-readable
comparison.jsonartifacts with metric, transform, evidence summary, and evidence protocol compatibility comparisons. - Static JSON schemas for config, result, comparison, dataset manifest, and report sidecars.
- Bulk schema generation via
slac schema all --output-dir schemas, with schema drift tests and CI smoke coverage. - 3D rig viewer artifact for reference, candidate, and estimated extrinsic comparison.
- Falsification assessment framework:
slac assessapplying a policy to evidence, policy artifacts,--enforceexit codes, per-DoF known-bad challenge summaries, a fixed support denominator, mandatory challenge verification, and assessment recomputation verification inside evidence bundles. - Evidence bundle verification:
slac verify, anevidence-bundle-verificationschema, a--require-raw-recomputedraw recomputation gate, a verified-raw-inputs requirement, and structured verification claims. slac renderandslac evidencecommands for producing report and evidence artifacts from an existing result without recomputing metrics.- Protocol and policy JSON schemas, and
compare --enforce-compatibleprotocol compatibility enforcement. - README GIF gallery generation (
generate_calibration_evidence_gif.py --readme-gallery) with a provenance manifest and schema-validated visual modes. - Local release smoke helper, wheel smoke coverage in CI, and a draft GitHub release workflow.
- Configurable public-dataset frame sampling:
DatasetConfig.sample_limitandslac inspect --sample-limit. - N-way
slac report-comparecommand with labeled results, protocol-compatibility gating, metric-family rankings, and areport_comparisonschema (16 schemas total). - Pure-Python rosbag1 (v2.0) reader with PointCloud2 decoding (
none/bz2, optionallz4extra),slac inspect --type rosbag1, and the TIERS LidarsCali example config. - Native LiDAR point-to-plane solver backend (
solver.backend: native_lidar_point_to_plane) wired intoslac calibrate, with real rank/condition-number/weak-DoF observability replacing theuncomputed_alpha_backendstub and point-to-plane metrics in results.