Skip to content

Result formats

What a run writes, and which file to use for what.

Camera calibration writes two files on purpose:

FileContainsUse for
*_calib.yamlIntrinsics, distortion, extrinsics, time offsets, readoutDeploy. The calibration itself
*_full.yamlThe above plus per-frame board posesReplay. Re-run analysis without redetecting

Deploy the small one; keep the full one to reproduce the run.

Both carry a timings: block — hierarchical per-stage timings with metadata, so you can ask whether a change was faster overall or only in one stage.

output_format: json writes JSON instead.

camcalib cam-imu writes a JSON result containing, per sensor:

FieldMeaning
T_CtoICamera → IMU transform
tdCamera–IMU time offset
readoutRolling-shutter readout, when estimated
Dw, Da, TgIMU intrinsics, in the configured convention
b_g, b_aBiases
t_gaGyro↔accel offset, when estimated
gyro_onlyPer-IMU flag — the result self-documents which IMUs skipped the accel
source topicPer sensor; this is what lets apply-calib derive the topic→sensor map without a hand-written file

With input.bags, each sequence gets its own discoverable result:

<output_dir>/
bag00/cam_imu.json
bag01/cam_imu.json
bag02/cam_imu.json

That layout is what the repeatability study reads.

One self-contained file per run — no external assets, so it can be emailed. Contents: navigable TOC, summary stat cards, intrinsics and distortion tables, extrinsics with an inline 3D plot, temporal calibration (time offset and readout together), reprojection analysis (per-frame robust median and P95, per-tag, error-vector histograms, dual-panel scatter, corner heatmaps), calibration-data quality (motion-excitation metrics with grades, rotation-axis spread, angular-velocity timeline, feature-coverage heatmap), detection statistics, pipeline timing, and collapsible appendices. Print-friendly CSS.

Rebuild reports from saved YAML plus the detection cache, without recalibrating:

Terminal window
python -m camcalib.analysis.regenerate_html

camcalib.io.kalibr is the one surface for Kalibr files:

FunctionDirectionHandles
read_camchaininIntrinsics + distortion across pinhole / ds / eucm / fov
read_camchain_imucaminAlso each camera’s T_cam_imu and stereo T_cn_cnm1
write_camchain_imucamoutExports a cam-IMU result as a round-trippable camchain-imucam

This is how a Kalibr calibration becomes a CamCalib starting point, and how a CamCalib result goes back into a Kalibr-expecting pipeline.

Per-dataset ground-truth YAMLs live under examples/regression/gt/. Where one exists, the dashboard annotates each parameter with its deviation — for example Δ +0.27% GT=190.97 — colour-coded by accuracy band.

camcalib apply-calib writes a corrected ROS1 bag plus a provenance sidecar recording which calibration was applied and what it changed. The bag is ordinary — anything that read the original reads the corrected one.