Monado
This page shows a camera–IMU calibration of the Monado sequences (TUM MIC). It is the dataset where two checks earn their keep:
t_ga: the time offset between the gyroscope and accelerometer channels- Round-trip validation: we apply the result to its own data and calibrate again
The data comes from a Valve Index headset, not a research rig. It ships with Monado’s own published calibration. So it gives a second opinion on TUM VI from a different toolchain.
The headset has a sensor page with its specs, solved rig and results.
The rig
Section titled “The rig”| Sensor | Detail |
|---|---|
| 2 × monochrome cameras | Stereo fisheye |
| IMU | /imu0 |
| Reference | Monado / Valve Index, baseline 134.0 mm |
Board: AprilGrid 6×6, tag_size 0.03 m, tag_spacing 0.3, family t36h11.
Getting the data
Section titled “Getting the data”The data uses the EuRoC mav0 layout, so no conversion is needed:
tum_mic/mic_calib/MIC05_imucalib2/mav0/- Main sequence: MIC05
- Also configured: MIC01, 02, 03, 07, 08, and 11
The extra sequences let us measure the spread across sequences.
Configuration
Section titled “Configuration”input: format: euroc path: /data/tum_mic/mic_calib/MIC05_imucalib2/mav0 imu_topics: ["/imu0"] window_mode: motion # auto-pick the most-exciting 80 s segment_length: 80.0 cache_dir: /tmp/mvis_detcache
board: {board_type: apriltag, rows: 6, cols: 6, tag_size: 0.03, tag_spacing: 0.3, tag_family: t36h11}
camera_input: path: examples/regression/tum_vi_mic/MIC_camchain_v2.yaml
solve: max_iterations: 40 init_kwargs: {keyframe_hz: 2.0, scale_rel_tol: 0.3} estimate_t_ga: true sigma_t_ga: 0.010
estimate: camera: {intrinsics: false, tr: false, td: true, extrinsics: true} imu: {intrinsics: dw_da, model: calyx}
output: path: results/regression/tum_vi_mic/mic05/cam_imu.json
reference: label: Monado Valve Index baseline_mm: 134.0Two choices to note:
window_mode: motionpicks the most-excited 80 s for you. You do not have to hunt for it.- Intrinsics are pinned to the committed camchain. The solve then focuses on
extrinsics,
td(the camera–IMU time offset) and the IMU.
Running it
Section titled “Running it”mvis cam-imu -c examples/regression/tum_vi_mic/cam_imu_mic05_tga.yamlValidation — round-trip
Section titled “Validation — round-trip”We do not accept the result on its residual alone. We apply it to its own data and calibrate again:
mvis roundtrip -c examples/regression/tum_vi_mic/cam_imu_mic05_tga.yaml \ --bag MIC05.bag| Quantity | Before | After correction | Verdict |
|---|---|---|---|
Da | 1.06 | 1.00 | collapsed ✅ |
b_a | −0.25 | −0.01 | collapsed ✅ |
| Stereo baseline | 133.8 mm | 133.8 mm | preserved ✅ |
Both checks pass at once, and they pull in opposite directions:
- IMU terms collapse: the correction absorbs the accelerometer scale and bias that the first pass claimed.
- Geometry holds: the stereo baseline does not move.
Monado publishes a 134.0 mm baseline. Our 133.8 mm is 0.2 mm off.
t_ga on and off
Section titled “t_ga on and off”We configure both variants:
cam_imu_mic05_tga.yamlestimatest_gacam_imu_mic05_notga.yamldoes not
This isolates the effect of estimating the gyro↔accel offset on real data, rather than arguing about it. See IMU model. See also Why calibrate t_ga.
Reproducibility
Section titled “Reproducibility”| Item | Value |
|---|---|
| Configs | examples/regression/tum_vi_mic/ |
| Sequence | MIC05_imucalib2, motion window 80 s |
| Board | AprilGrid 6×6, 0.03 m, spacing 0.3, t36h11 |
| Camera intrinsics | pinned to MIC_camchain_v2.yaml |
| IMU model | calyx, dw_da, t_ga estimated |
| Reference | monado_reference_calibration.yaml, baseline 134.0 mm |