Skip to content

Continuous-time refinement

Open MVIS solves on a discrete-time graph: the trajectory is a set of states at measurement times, linked by pre-integrated inertial factors. Kalibr and Basalt instead represent the trajectory as a continuous-time B-spline and evaluate every measurement against it. Both recover the same calibration; they differ in how they get there.

Discrete-time (Open MVIS)Continuous-time (Kalibr, Basalt)
Trajectorystates at discrete timescontrol points of a spline
Between statespre-integrated IMU factoranalytic evaluation of the spline
Asynchronous sensorshandled by interpolation and time offsetshandled natively — query at any tt
Cost per iterationgrows with measurement countgrows with control-point count
Model errornone from parameterisationspline order limits representable motion

The practical trade: a spline evaluates cleanly at any timestamp, which is convenient for rigs whose sensors never sample together — but it imposes a smoothness the true motion may not have. A knot spacing too coarse for the actual dynamics biases the calibration, and the bias is invisible in the residuals because the model, not the data, is what is wrong.

Why the discrete graph is the default here

Section titled “Why the discrete graph is the default here”

Multi-IMU rigs are the case Open MVIS is built for, and they push against the continuous-time assumption from two sides. Each IMU has its own clock and rate, so a single spline must be sampled at many inconsistent times; and the high-rate inertial data that makes multi-IMU rigs worth having is exactly the content a spline smooths away. Pre-integration keeps every sample.

  • Very high-rate sensors where per-measurement states would explode the graph size.
  • Cross-checking: since Kalibr is continuous-time, agreement between the two is evidence that neither parameterisation is driving the answer. This is part of what the benchmark measures.
  • Rolling shutter, where a within-frame trajectory query is natural rather than an interpolation.