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.