Why calibrate IMUs together
Use this page to see why a rig with several IMUs needs them calibrated against each other. You need nothing to run here; the numbers come from published runs.
The answer first:
- No shared clock: each IMU stamps its data on its own clock. On the running example, the T265 IMU is 7.2 ms off the Xsens.
- No shared origin: each IMU sits at its own place on the rig, with its own rotation.
- What MVIS solves: for each auxiliary IMU (aux IMU: every IMU after the first), its lever arm (position),
rotation,
td(time offset) andt_ga(gyro–accel offset) against the base IMU.
How to set it up: Multi-IMU spatial-temporal calibration.
1. The offsets on one recording
Section titled “1. The offsets on one recording”- Data: VI-Rig 4 IMUs + 4 cams, recording 4imus_4cams_01.
- Run: all four cameras and all four IMUs in one solve. Details: example run.
- Base IMU: the Xsens MTi. The other three are solved against it.
| IMU | Rate | Lever arm (mm) | log(R) (rad) | td (ms) | t_ga (ms) |
|---|---|---|---|---|---|
| Xsens MTi (base) | 400 Hz | 0 | 0 | 0 | −0.82 ± 0.02 |
| MicroStrain GX3-25 | 500 Hz | [−122.8, −45.3, −3.1] | [+2.2502, +2.1849, −0.0279] | −0.69 | +0.10 ± 0.02 |
| MicroStrain GX3-35 | 100 Hz | [−82.3, −46.2, −3.5] | [+2.2304, +2.2070, −0.0192] | −2.07 | +0.01 ± 0.02 |
| T265 IMU | 200 Hz | [+54.7, −107.4, −30.3] | [+1.5724, −0.0054, −0.0113] | −7.17 | −6.74 ± 0.02 |
- Frames: lever arms and rotations are each IMU in the base IMU frame. Rotation is log(R), in rad.
- td sign:
t_imu = t_sensor + td, witht_imuon the base clock. - Time: the aux IMU clocks are 0.69 to 7.17 ms off the base clock. MVIS solves each one.
- t_ga: only the T265 IMU has a real gyro–accel offset. The other three read near 0. See Why calibrate t_ga.
2. Repeatability against Kalibr
Section titled “2. Repeatability against Kalibr”We ran every recording of a dataset and looked at how much each value moves. Small spread means the value repeats; it does not prove it is right. All numbers are from the public results pages.
- MVIS column: “MVIS (K-IMU)”, MVIS run with Kalibr’s IMU model, so the IMU terms mean the same thing in both tools. The 5 IMUs + 4 cams set has no Kalibr run, so its numbers are the plain “MVIS” column.
- sd: the standard deviation over recordings.
4 IMUs + 4 cams, T7 (T265 IMU base, Xsens aux):
| Xsens vs T265 IMU | MVIS (15 recordings) | Kalibr (14 recordings) |
|---|---|---|
| td | 7.240 ms (sd 0.146) | 7.260 ms (sd 0.122) |
| distance to base ‖p‖ | 124.09 mm (sd 0.32) | 114.10 mm (sd 2.96) |
- td agrees: the two tools are 0.02 ms apart.
- Same offset, other side: with the Xsens as base (section 1), the T265 IMU td is −7.17 ms. With the T265 IMU as base, the Xsens td is +7.24 ms.
- Lever differs: the tools are 10 mm apart, and Kalibr’s spread is about 9× larger.
- Unequal counts: Kalibr failed on one recording, so it has 14 against MVIS’s 15.
- T8 (ELP pair, same two IMUs): MVIS 123.94 mm (sd 0.30, 15 recordings) against Kalibr 115.85 mm (sd 1.24, 3 recordings). Kalibr’s 3 come from separate earlier runs, so read this as a rough check.
More: VI-Rig 4 IMUs + 4 cams results.
4 IMUs + 3 cams, T6 (Xsens base, three aux IMUs, 10 recordings each):
| Aux IMU | MVIS lever sd | Kalibr lever sd |
|---|---|---|
| GX3-25 | 0.20 mm | 0.88 mm |
| GX3-35 | 0.19 mm | 0.86 mm |
| T265 IMU | 0.19 mm | 1.42 mm |
More: VI-Rig 4 IMUs + 3 cams results.
5 IMUs + 4 cams (Xsens base, two T265 units, 7 recordings, MVIS only):
| td (ms) | distance to base ‖p‖ (mm) | |
|---|---|---|
| T265 A IMU | −7.170 (sd 0.115) | 180.77 (sd 0.40) |
| T265 B IMU | −7.259 (sd 0.120) | 188.60 (sd 0.41) |
- Two units, same offset: both T265 IMUs sit about 7.2 ms off the Xsens.
- No Kalibr run on this set, so nothing is compared. More: VI-Rig 5 IMUs + 4 cams results.
3. The same IMU, two camera sets
Section titled “3. The same IMU, two camera sets”- Test: T7 and T8 solve the same two IMUs (T265 IMU base, Xsens aux) on the same 15 recordings. Only the cameras differ: T265 fisheye 1 + ELP-L in T7, the ELP pair in T8.
- Public medians: Xsens distance to base 124.09 mm (T7) and 123.94 mm (T8).
- Internal study (MVIS main of 2026-11-02): the gap between the two families’ Xsens levers was 0.11 mm.
- What it means: the aux IMU lever comes from the IMUs, not from which cameras are in the solve.
4. Why redundancy helps
Section titled “4. Why redundancy helps”Several IMUs see the same motion. That redundancy constrains what one IMU leaves weak:
- Time offsets: every IMU must agree on when each motion happened.
- IMU intrinsics: scale, misalignment and similar sensor errors.
- A meaningful check: a wrong calibration usually cannot satisfy every IMU at once. This is what makes the round-trip check useful on these rigs.
Limits
Section titled “Limits”-
Slow IMUs bias levers on short windows. In a noise-free twin (a simulated copy of the 4 IMUs + 3 cams rig with known truth and true
t_ga0), lever error at aux factor intervals 1 / 2 / 3:IMU rate Interval 1 Interval 2 Interval 3 100 Hz 2.94 mm 1.47 mm 0.63 mm 200 Hz 0.56 mm 0.30 mm 0.17 mm 500 Hz 0.11 mm 0.05 mm 0.05 mm - Why: at 100 Hz an aux factor at interval 1 holds only about 3 samples.
- Default now: MVIS upsamples an IMU slower than 200 Hz before it integrates it (
solve.imu_min_rate_hz: 200,solve.imu_upsample_method: cubic). In the same twin, cubic upsampling of the 100 Hz IMU gave 0.80 / 0.52 / 0.12 mm. - The knob:
solve.aux_imu_stride, one aux IMU factor per this many base intervals. The default is 3. - Levers move with it: keep the default unless you have a reason, and compare runs only at the same value.
- These are internal twin results, not public files.
-
More IMUs do not help the readout. The rolling-shutter readout comes from the cameras. In an older internal study (June 2026, older code), adding IMUs moved the ELP readout from 15.9 to 16.6 ms and made the fit worse (reprojection error 3.04 → 3.49). See Why calibrate rolling shutter.
-
Pick the base with care. The base IMU carries the trajectory and the reference clock. Its errors reach every other sensor.
-
Repeatable is not right. Spread over recordings shows precision. There is no reference lever for these rigs.
Related
Section titled “Related”- Multi-IMU spatial-temporal calibration: the config, step by step
- Why calibrate t_ga
- Why calibrate cameras together
- Auxiliary IMU factor