Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

GNSS & Navigation

factors::navigation — satellite positioning and the auxiliary sensors that bound inertial drift.


GpsFactor — position fix with a lever arm and frame transform

The receiver reports position in its frame, and the antenna is not at the body origin. Both matter: the frame transform is often unsurveyed, and the lever arm couples attitude into the position measurement.

Blocks — residual 3, Jacobian . Whitens internally.

Error

with the sensor-to-antenna lever arm in the sensor frame.

Jacobian

then scaled by . Note the attitude column is proportional to the lever arm: with a position fix says nothing about orientation.

Observability. Each pose owns three translation degrees of freedom and receives one 3D fix, so the poses can absorb any frame transform — with fully free the graph has a six-dimensional null space and a zero-cost family of solutions. Survey the frame rotation (or anchor enough poses) before estimating it.


GpsAsyncFactor — a fix that lands between keyframes

GNSS epochs rarely coincide with keyframes. This propagates the keyframe state forward with an IMU preintegration to the fix timestamp, then applies the same position error.

Blocks — residual 3, Jacobian . Whitens internally.

Error

then and the same projection into the GNSS frame as GpsFactor.

The term is easy to lose: every preintegrated quantity is gravity-free, so gravity has to be reinstated here exactly as the IMU factors do when they build their gravity-corrected state. Omitting it biases the predicted antenna position by 0.44 m after only 0.3 s, growing quadratically.


GpsVelocityFactor

Blocks — residual 3, Jacobian .

A Doppler-derived velocity in the local tangent frame, on a plain variable. For a raw range-rate along a satellite line of sight use DopplerFactor instead.


PseudorangeFactor

Raw ranging to one satellite, before any position solution has been formed.

Blocks — receiver position and clock bias, the latter in metres (already range-equivalent). Residual 1, Jacobian .

The position and clock columns are separable only when the line-of-sight directions span three dimensions — the reason a fix needs four satellites, and why poor geometry is penalized rather than silently accepted.


DopplerFactor

Range rate along the same line of sight.

Blocks — residual 1, Jacobian .

The position column carries the derivative of itself,

which is small at typical satellite ranges — velocity is what this measurement really informs.


BarometricFactor

Blocks — pose and a slowly-varying altimeter bias. Residual 1, Jacobian .

The pose block is the third row of , not , because the right perturbation moves the origin by .

Height and bias are only separable if the bias is otherwise constrained — give it a prior and a random walk, or the pair drifts together.


AttitudeFactor

Constrains rotation so a known world direction maps onto the direction the sensor measures in the body frame — gravity from an accelerometer at rest, or the field from a magnetometer.

Blocks — residual 3, Jacobian .

The Jacobian is rank 2: rotation about the reference direction leaves it unchanged, so one such factor pins two of the three rotational degrees of freedom. Add a gravity factor and a magnetometer factor for a full AHRS.