Skip to content

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.

SensorDetail
2 × monochrome camerasStereo fisheye
IMU/imu0
ReferenceMonado / Valve Index, baseline 134.0 mm

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

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.

cam_imu_mic05_tga.yaml
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.0

Two choices to note:

  • window_mode: motion picks 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.
Terminal window
mvis cam-imu -c examples/regression/tum_vi_mic/cam_imu_mic05_tga.yaml

We do not accept the result on its residual alone. We apply it to its own data and calibrate again:

Terminal window
mvis roundtrip -c examples/regression/tum_vi_mic/cam_imu_mic05_tga.yaml \
--bag MIC05.bag
QuantityBeforeAfter correctionVerdict
Da1.061.00collapsed ✅
b_a−0.25−0.01collapsed ✅
Stereo baseline133.8 mm133.8 mmpreserved ✅

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.

See Round-trip validation.

We configure both variants:

  • cam_imu_mic05_tga.yaml estimates t_ga
  • cam_imu_mic05_notga.yaml does 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.

ItemValue
Configsexamples/regression/tum_vi_mic/
SequenceMIC05_imucalib2, motion window 80 s
BoardAprilGrid 6×6, 0.03 m, spacing 0.3, t36h11
Camera intrinsicspinned to MIC_camchain_v2.yaml
IMU modelcalyx, dw_da, t_ga estimated
Referencemonado_reference_calibration.yaml, baseline 134.0 mm