Skip to content

INS-LiDAR registration-quality development

This is post hoc development, following the refuted KITTI + Boreas rotation audit. It uses the already-spent first 600 scans of KITTI 2011_09_29_0071. No new evaluation data was acquired, no audit gate was changed, and this experiment establishes no new SOTA standing.

Question and comparison

The odometry accumulated transforms from all 599 scan registrations, including two that did not converge. The hand-eye motion builder previously had no way to exclude relative motions crossing those edges. Could these observations explain why no rotation axis cleared the frozen 0.1 degree uncertainty ceiling?

Both fits use the same LiDAR-only odometry trajectory, computed once, with all other settings unchanged. The baseline includes every motion; the candidate excludes a motion if any registration edge between its endpoints did not converge. It retains later motions whose intervals contain only converged edges. The two failed edges are zero-based indices 283 and 316 (283 to 284 and 316 to 317). All registration counts, including failures, remain in the result. The reference extrinsic is used only for post-fit comparison.

Result

Quantity Baseline Exclude failed edges
Training motions 115 112
Held-out motions 53 52
Estimated rotation axes 0/3 0/3
Roll reported uncertainty (deg) 0.378174 0.377499
Pitch reported uncertainty (deg) 0.226495 0.227188
Yaw reported uncertainty (deg) 1.225164 1.234833
Roll difference to reference (deg) +0.013378 -0.037199
Pitch difference to reference (deg) +0.558456 +0.543268
Yaw difference to reference (deg) -1.975854 -1.850560

The baseline reproduces the original three rotation uncertainties and reference differences exactly. Excluding four crossing motions does not make any rotation observable. The small changes do not justify adopting this candidate as the standard method. All three reference differences above concern unobservable axes; they are not new scored accuracy results. The dataset reference is an estimate, not independent metrology.

Nonconvergence alone does not explain the failure. This comparison does not establish that the remaining registrations are unbiased or that later registrations are unaffected by earlier initialization errors. Further work needs to examine motion errors and stability across time blocks, including coupling with the clock and reference-scale nuisance parameters.

Follow-up: block stability

A second post hoc diagnostic reuses the saved trajectory and reproduces all nine native leave-one-training-block-out fits. Their rotation spread reproduces the original jackknife standard deviations: 0.378174 / 0.181509 / 1.225164 deg. Pitch's reported uncertainty remains the larger analytic value, 0.226495 deg. The largest absolute yaw component of a leave-one-block-out rotation change is 0.811099 deg when block 7 (35 to 40 seconds after the first scan) is omitted. These changes are components of a left rotation perturbation in the parent frame, not differences between Euler angles.

Omitted training block Yaw component of rotation change (deg) Full-fit block rotation RMSE (deg)
1 (5 to 10 s) -0.588606 0.112059
6 (30 to 35 s) +0.531230 0.117948
7 (35 to 40 s) +0.811099 0.118061

Block 3 has the largest rotation RMSE, 0.214579 deg, but omitting it changes the yaw component by only -0.018357 deg. Thus residual magnitude alone does not identify influential intervals. This does not label block 7 as corrupted or authorize dropping it: weak information, model errors and nuisance-parameter coupling remain possible explanations. No new rejection rule was selected.

Per-block residuals use the native covered_motions rule. The initial block has 15 candidate motions and 12 covered motions; both counts are retained. An initial diagnostic without this coverage check failed at interpolation and is retained locally with its source and failure record. The final diagnostic does not change the original train/holdout split. Residuals at the reference extrinsic use the full fit's clock and scale nuisance values, so they are explanatory comparisons, not independent accuracy or control measurements.

Follow-up: translation weighting

A two-arm development comparison uses the same saved first-600-scan trajectory: the original noise model, and one with both translation sigma terms multiplied by ten. Rotation noise, the 0.1 degree observability ceiling, train/holdout blocks, clock/scale settings, controls and policy limits stay fixed. No priors are added. Both arms run from isolated source 0f45a2b2; the baseline again reproduces every original per-DoF record exactly.

Quantity Original noise Translation sigma x10
Estimated rotation axes 0/3 0/3
Roll reported uncertainty (deg) 0.378174 0.289775
Pitch reported uncertainty (deg) 0.226495 0.630469
Yaw reported uncertainty (deg) 1.225164 1.055593
Yaw difference to reference (deg) -1.975854 -0.238504
Yaw 1 deg control delta chi-square -69.336824 -3.184904

The smaller yaw reference difference is accompanied by uncertainty above one degree and a failed held-out yaw control. Roll's control also fails. These unobservable axes are not scored accuracy successes, and the native default noise model is unchanged. The candidate reports a clock DoF, but this study makes no clock-accuracy claim. It does not show that translation weighting is the sole physical cause of the rotation failure, nor that this candidate generalizes beyond this spent recording.

Follow-up: the rest of the recording

An OXTS-only development acquisition reads all 1059 samples of the already-spent 0071 recording. The archive size and ETag are checked against the existing pins; selected payload ranges are capped at 2 MiB, with one attempt and no curl retries. The actual selected range payload is 616615 bytes; archive metadata and HTTP overhead are additional. CRC checks pass and all first-600 packet SHA-256 values match the original acquired packets. No images or LiDAR points are acquired, and the original audit's input directory is unchanged.

Reference-only quantity First 600 All 1059
Duration (s) 62.201997 109.886087
Unwrapped heading range (deg) 16.509607 16.509607
Mean rotation over 10-frame pairs (deg) 1.809892 1.303462

These diagnostics use every overlapping pair at fixed lags of 5, 10 and 20 frames, matching the earlier reference-only proxy rather than the native block-contained motion sample. The complete recording adds no heading range and has smaller mean rotations at all three lags. We therefore defer acquiring the extra 459 point clouds at this stage. More samples can still add information: these normalized rotation proxies omit LiDAR errors and nuisance coupling and do not prove that a longer fit cannot improve or decide observability.

The full OXTS recording is development data. It cannot become a new held-out evaluation by choosing a different window. Raw OXTS packets stay outside Git; the published acquisition receipt, SHA-256 manifest and exact source bind the reference-only results.

API and reproducibility

The experimental policy is available through InsLidarRunOptions(exclude_failed_registrations=True) in both KITTI and Boreas adapters. Its default is False, preserving the existing method. New artifacts record the chosen policy in options; the artifact schema remains v0.1.

build_sensor_motions(..., registration_valid=mask) accepts one boolean per consecutive pose edge. It checks every edge inside a motion, rejects malformed masks, and retains block boundaries. An all-valid mask produces exactly the original motions. Omitting the mask preserves trusted-trajectory callers.

The final comparison ran from an isolated checkout of source a68644a82137b8bd0e0c7efee3fefd8bab40d455. All acquired input files were SHA-256 verified against their existing receipt before and after the comparison. An earlier development comparison at de6b75a1 is retained locally; it exposed the need to record the new policy explicitly in the artifact, which the final source does. Neither comparison changes the original v1 audit.

The evidence contains schema-valid native artifacts, a report and schema, and the exact comparison source. The shared odometry cache stays outside Git; its digest is recorded in the report. It avoids repeated scan registration during later development. Runtime fields include different work in the two branches of this experiment and must not be interpreted as a speed comparison.

The original audit remains refuted, 6/8, and the leaderboard remains seven audited sensor pairs with three supported pairs. A future claim requires a new frozen method, new pre-registration and new held-out recordings.