Skip to content

TUM VI

The TUM Visual-Inertial dataset is the reference check for a camera–IMU calibrator: a stereo-fisheye + IMU rig with a published Kalibr calibration to score against. It is also the dataset where every distortion model can be compared on identical data.

SensorRateDetail
2 × monochrome global-shutter cameras20 Hz1024×1024 fisheye
Bosch BMI160 IMU200 Hz/imu0

Board: AprilGrid 6×6, tag_size 0.088 m, tag_spacing 0.3, family t36h11.

Use the raw IMU-calibration bagsdataset-calib-imu{1,2,3,4}.bag — for the camera–IMU solve, and standard_1024/dataset-calib-cam1_1024_16.bag as the board bag when a model needs a camera-only fit first.

tum_vi_calib/
raw/dataset-calib-imu{1..4}.bag # cam-IMU sequences
raw/dataset-calib-cam1-camchain.yaml # Kalibr omni/radtan intrinsics
tumvi_camchain.yaml # Kalibr equidistant intrinsics
standard_1024/dataset-calib-cam1_1024_16.bag
omni-radtan-1024/ , pinhole-equi-1024/ # Kalibr cam-IMU reference results

omni_radtan and equidistant ship with a Kalibr camchain for these cameras, so the calibration is a single stereo run with intrinsics pinned:

Terminal window
camcalib cam-imu -c examples/configs/tumvi_cam_imu/cam_imu_omni.yaml
camcalib cam-imu -c examples/configs/tumvi_cam_imu/cam_imu_equi.yaml

double_sphere, eucm, and fov have no shipped camchain, so fit the camera first and feed the result in:

Terminal window
camcalib calibrate -c examples/configs/tumvi_cam_imu/camcalib_cam0_ds.yaml
camcalib cam-imu -c examples/configs/tumvi_cam_imu/cam_imu_ds.yaml
ModelModeReprojcam0 lever (mm)Baselinetd
omni_radtanstereo, pinned0.273 px[45.0, −68.7, −43.2]100.8 mm−0.73 ms
equidistantstereo, pinned0.277 px[44.7, −70.1, −43.7]100.8 mm−0.72 ms
double_spherecam0, pinned0.275 px[44.3, −68.5, −43.9]−0.71 ms
eucmcam0, pinned0.275 px[44.3, −68.3, −43.9]−0.71 ms
fovcam0, pinned0.288 px[44.0, −65.2, −44.0]−0.68 ms
Kalibr (omni)reference0.11 px[46.2, −70.9, −43.7]100.94 mm~0

Every model lands on the same physical rig. Lever ~[44, −68, −44] mm and td ~−0.7 ms across all six. Model choice changes how easily you get a good fit, not the geometry a good fit recovers.

Agreement with Kalibr: omni_radtan and equidistant reproduce the reference lever to ≤2 mm and the stereo baseline to ≤0.15 mm, with the time offset inside 1 ms.

Across all four bags, omni_radtan holds: baseline 100.8–101.1 mm, lever within ~1 mm, and the freed IMU intrinsics (Dw/Da) consistent to under 1%. That cross-sequence spread is the honest error bar — better evidence than any single run’s residual.

CamCalib’s reprojection error is higher than Kalibr’s 0.11 px because the two are not measuring the same thing: different corner subsampling and robust statistics. Compare the parameters, not the residuals.

ItemValue
Configsexamples/configs/tumvi_cam_imu/
Sequencedataset-calib-imu1.bag, t0 3.0 s, 45 s window
BoardAprilGrid 6×6, 0.088 m, spacing 0.3, t36h11
ReferenceKalibr omni-radtan-1024/, pinhole-equi-1024/
Detection cache/tmp/camcalib_tumvi_detcache — re-runs repeat only the solve