Skip to content

Battin (1962): Statistical Optimizing Navigation for Space Flight

Richard Battin led the Mission Development Group at MIT’s Instrumentation Laboratory. This report defines the navigation algorithm that the Apollo Guidance Computer actually executed during cislunar flight — the recursive estimator that turned imperfect sextant measurements into precise trajectory knowledge, one observation at a time. Hoag (1963) cites it directly as the AGC’s statistical navigation procedure.

The core problem: an astronaut in a spacecraft between Earth and Moon knows approximately where they are and how fast they’re going, but not exactly. Each sextant measurement — the angle between a known star and a planet limb — provides partial information. Battin’s algorithm combines these measurements optimally, updating the state estimate and its uncertainty after each observation, without storing or reprocessing any previous data.

Battin works in deviation space. A reference trajectory r(t)\mathbf{r}^*(t) is pre-computed on the ground before the mission. The onboard algorithm estimates only the deviation from this reference:

x=(δr1δr2δr3δv1δv2δv3)\mathbf{x} = \begin{pmatrix} \delta r_1 \\ \delta r_2 \\ \delta r_3 \\ \delta v_1 \\ \delta v_2 \\ \delta v_3 \end{pmatrix}

This is a critical design choice. By working in deviation space, the AGC avoids integrating the full equations of motion in real time. The reference trajectory handles the heavy computation; the onboard filter handles only the small perturbations.

Each measurement qkq_k (a sextant angle, a horizon altitude, a range measurement) is related to the state through a linearized observation model:

qk=bkTx+εkq_k = \mathbf{b}_k^T \mathbf{x} + \varepsilon_k

where bk\mathbf{b}_k is the measurement geometry vector (partial derivatives of the observable with respect to state components) and εk\varepsilon_k is the measurement error.

After the kk-th measurement, the state estimate updates:

x^k=x^k1+ηk(qkbkTx^k1)\hat{\mathbf{x}}_k = \hat{\mathbf{x}}_{k-1} + \boldsymbol{\eta}_k \left( q_k - \mathbf{b}_k^T \hat{\mathbf{x}}_{k-1} \right)

The term in parentheses is the residual — the difference between what was measured and what was predicted. The gain vector ηk\boldsymbol{\eta}_k determines how much the estimate shifts in response:

ηk=Ak1bkwk+bkTAk1bk\boldsymbol{\eta}_k = \frac{A_{k-1} \mathbf{b}_k}{w_k + \mathbf{b}_k^T A_{k-1} \mathbf{b}_k}

where Ak1A_{k-1} is the covariance matrix of the current estimate and wkw_k is the measurement weight (inverse variance). The covariance matrix itself updates:

Ak=Ak1ηkbkTAk1A_k = A_{k-1} - \boldsymbol{\eta}_k \mathbf{b}_k^T A_{k-1}

The key property: the entire measurement history is compressed into two quantities — the state estimate x^k\hat{\mathbf{x}}_k (6 numbers) and the covariance matrix AkA_k (21 unique elements, since it’s symmetric). No previous measurements need to be stored or replayed.

For the AGC, this was not an academic nicety. It was the difference between a feasible algorithm and an impossible one. The AGC had 1,024 words of erasable memory shared between navigation, guidance, the executive, displays, and I/O. Battin’s recursive formulation needed approximately 30 double-precision values of working storage. A batch least-squares approach storing 40+ raw measurements would have been out of the question.

Between sextant observations, the state deviation propagates through the state transition matrix:

x(t2)=Φ(t2,t1)x(t1)\mathbf{x}(t_2) = \Phi(t_2, t_1) \, \mathbf{x}(t_1)

For two-body motion, Battin derives Φ\Phi analytically using the classical ff and gg series. For the actual mission, numerical integration on the ground provides the transition matrices, which are loaded into the AGC before flight and interpolated onboard.

Navigation alone is not the goal — the point is to steer the spacecraft. Battin develops the theory for when and how to apply velocity corrections.

The correction decision rests on a signal-to-noise criterion: the estimated required correction must be large relative to the uncertainty in the estimate. If the state is poorly known (large covariance), applying a correction based on that estimate may make things worse. The algorithm waits until the estimate has converged sufficiently, then commands a burn.

For the Apollo cislunar trajectory, this yields approximately 3 midcourse corrections per leg (Earth-to-Moon or Moon-to-Earth), with a total ΔV\Delta V budget of roughly 100 ft/s RMS per leg.

Not all observations are equally valuable. The information content of a measurement depends on the geometry vector bk\mathbf{b}_k and the current covariance AkA_k. A measurement whose geometry is nearly parallel to the direction of greatest uncertainty provides the most information; a measurement aligned with the already-well-known components is wasted effort.

Battin develops the theory for selecting optimal star-body pairs and observation times. For the actual mission, this was pre-computed into observation schedules — approximately 40 sightings per cislunar leg, spaced from 15 minutes to several hours apart.

Battin’s report is a worked example of how mathematical elegance can be driven by engineering necessity. The recursive estimator is optimal not because Battin was seeking beauty, but because the alternative (batch processing) was physically impossible on the available hardware. The deviation-space formulation, the compressed covariance representation, the signal-to-noise correction criterion — each choice reduces computational load while preserving mathematical rigor.

The algorithm ran successfully on every Apollo mission. The astronauts made their sextant measurements, the AGC updated its estimate, and the guidance software commanded midcourse burns that placed the spacecraft on trajectories accurate to fractions of a mile at lunar distance. Forty sightings through an optical instrument, processed by a recursive filter on a 15-bit computer, navigated humans to the Moon and back.