Skip to content

Why calibrate t_ga

t_ga is the time offset between the gyroscope and the accelerometer inside one IMU. td is the time offset between the camera and the IMU. MVIS fits both. Kalibr and Basalt fit only td: they treat the IMU as one clock.

This page asks one question: what happens to a camera–IMU calibration when the IMU has a t_ga?

  • Two datasets: Looper Insight 9 (looper_1) and Intel T265 (VI-Rig april_01).
  • Prepared so t_ga is 0: MVIS calibrated each raw recording. We then resampled the camera and IMU streams with that result. So on the new bag, by MVIS’s estimate, td = 0, t_ga = 0 and the IMU scales are 1.
  • Settings: each tool’s usual settings. T265: camera intrinsics pinned; Looper: intrinsics free.
  • Result: all three tools read td within 0.3 ms of 0. The IMU scales are within 0.4 % of 1, except Basalt on the T265 (below).
ToolLooper Insight 9Intel T265
td (ms)scale error (%)td (ms)scale error (%)
MVIS−0.010.01+0.070.30
Kalibr−0.040.13−0.190.34
Basalt−0.040.21−0.281.50

Corrected bag, no injected delay. Scale error is the largest |scale − 1| over the six IMU axes.

Two scales are further off: Basalt on the T265 reads gyro x and accel z about 1.2 % and 1.5 % from 1. That is already there with no offset, so it is not caused by t_ga.

  • Sweep: delay only the accel by τ = −50, −20, −10, −5, −2, 0, 2, 5, 10, 20 and 50 ms. Everything else is unchanged. That is 11 bags per device, and the true t_ga in each is τ.
  • Run all three tools on every bag, with the same settings as above.
Accel delayed by τ. MVIS puts it in t_ga (solid blue) and keeps td flat (dashed); Kalibr and Basalt have no t_ga, so their td takes a steady share of τ.
  • MVIS reports the delay as t_ga (slope 1.00 on both devices). Its td stays flat, and its IMU scales change by under 0.01 %.
  • Kalibr and Basalt have no t_ga, so their td takes a steady share of τ. A share of 0.64 means td moves 0.64 ms for every 1 ms of t_ga. The shares are 0.64 (Kalibr) and 0.59 (Basalt) on Looper, and 0.30 and 0.28 on the T265.
  • Their IMU scales drift too: mostly under 0.2 % within ±10 ms (Basalt on the T265: accel 0.3 % at ±2 ms), and up to about 1.8 % at ±50 ms.
  • No warning: every run of every tool converged.

This is not a bug in Kalibr or Basalt. With one IMU clock, the closest fit puts td somewhere between the gyro and the accel. Where depends on the recording, likely on how much the gyro and the accel each drive the fit; that is not tested here.

MVIS measures t_ga on the raw bags: −5.03 ms on Looper and −5.69 ms on the T265. A tool without t_ga moves td by its share of that.

Devicet_ga on the raw bag (MVIS)Kalibr: share → td movedBasalt: share → td moved
Looper Insight 9−5.03 ± 0.02 ms0.64 → −3.21 ms0.59 → −2.97 ms
Intel T265−5.69 ± 0.43 ms0.30 → −1.72 ms0.28 → −1.60 ms

On the raw bags, Kalibr's td really differs from MVIS's by about this much (−3.16 ms on Looper, −1.91 ms on the T265).

Conclusion: t_ga matters for camera–IMU calibration. On these two devices, a tool without it moves td by about 1.6–3.2 ms.

MVIS fits t_ga by default (solve.estimate_t_ga: true, with a weak 10 ms prior, sigma_t_ga: 0.010), as in these runs. See Estimate t_ga. To use a tool without t_ga, remove the offset first with corrected-dataset export.

The test favours MVIS. The zero point is MVIS’s own calibration, and the sweep injects exactly the shift MVIS models (a pure accel delay). Which tool’s td is right on raw data is not tested. A real offset need not be a pure shift: on the T265 it shrinks with frequency, from −6.8 ms at 2–4 Hz to −3.6 ms at 16–22 Hz (less certain above 22 Hz), so one t_ga is a compromise. One recording per device, and the MVIS authors ran all three tools.

The sweep bags are on the Hub, with a README, the MVIS calibration used for the correction and a provenance.json (sign, τ, crop, sha256 per bag):

Licence CC BY-NC 4.0, gated; commercial use by request. Please cite the VI-Rig dataset and MVIS.