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.
- Weighting report
- Weighting report schema
- Original-noise artifact
- Translation-sigma-x10 artifact
- Weighting comparison source
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.
- Full-reference report
- Full-reference report schema
- Acquisition receipt
- Input SHA-256 manifest
- Reference-only comparison source
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.