Observability

A state (or direction in state space) is observable if the available measurements constrain it; unobservable directions can drift freely without changing any measurement. Formally, a direction n\mathbf{n} lies in the unobservable subspace when perturbing the state along n\mathbf{n} leaves every measurement invariant — for a linearized system, n\mathbf{n} spans the null space of the observability matrix built from the stacked HΦ\mathbf{H}\boldsymbol{\Phi} blocks. Knowing exactly which directions are unobservable in VIO is essential for building consistent estimators.

The 4 unobservable DoF of VIO

A visual-inertial system measures bearing angles to landmarks (camera) and specific force plus angular rate (IMU). Gravity gives an absolute reference for roll and pitch, and the accelerometer makes metric scale observable under generic motion. What remains unobservable:

So monocular VIO has exactly 4 unobservable DoF. Compare:

SystemUnobservable DoFWhat’s free
Monocular vision only7translation (3) + rotation (3) + scale (1)
Monocular VIO4translation (3) + yaw (1)
Stereo VIO4translation (3) + yaw (1) — the baseline adds a second scale source, but global position and yaw remain free

Motion-dependent degeneracies

Some states are only observable under sufficiently exciting motion:

A quick intuition check

Why is yaw unobservable but roll/pitch observable? Rotate the whole world (trajectory + map) by an angle α\alpha about the gravity vector: every camera still sees every landmark at the same bearing (the rotation is applied to both), and the accelerometer still measures the same gravity projection (gravity is the rotation axis, so it is unchanged). No measurement can distinguish the rotated world from the original — yaw is free. Now tilt the world about a horizontal axis instead: bearings are still consistent, but gravity now projects differently into the accelerometer — the IMU notices. Roll and pitch are pinned.

The same style of argument shows global translation is free (bearings and accelerations are translation-invariant) and why the accelerometer fixes scale under generic motion: doubling the map and trajectory doubles true accelerations, which the accelerometer would detect — unless acceleration is constant, in which case the change hides inside the bias/gravity estimate.

Consistency and First-Estimate Jacobians (FEJ)

An EKF that linearizes measurements at different estimates over time can spuriously gain information along the unobservable directions: each Jacobian is correct in isolation, but stacked together they define a linearized system whose unobservable subspace is smaller than the true one (typically yaw appears observable when it is not). The filter then becomes overconfident — inconsistent — most visibly in yaw covariance that shrinks without justification.

The FEJ remedy: evaluate the Jacobians of each state at its first estimate and keep using that linearization point, so all stacked Jacobians share a consistent linearization and the correct 4-dimensional unobservable subspace is preserved by construction. This is standard in OpenVINS and modern MSCKF variants, and the same idea governs the handling of marginalization priors in sliding-window optimizers (with Basalt’s nonlinear factor recovery and DM-VIO’s delayed marginalization as alternative treatments).

Practical consequences

Common pitfalls

Why it matters for SLAM

Observability analysis explains behaviors that otherwise look like bugs: yaw drift that never stops, scale drift on highway driving, overconfident covariances after long runs. It dictates the design of initialization (needs excitation), loop closure (4-DoF), and filter consistency machinery (FEJ). Reading a VIO paper starts with asking: which states does this system treat as observable, and under what motion?