1. Introducción: El 20 de julio de 1969, el alunizaje en el «Mar de la Tranquilidad» y el milagro de un ordenador de $2\,\text{KB}$
El 20 de julio de 1969, mientras el módulo lunar Eagle del Apolo 11 descendía hacia el Mar de la Tranquilidad, las alarmas de programa 1202 y 1201 sonaron en la cabina. A pocos kilómetros de la superficie lunar, Neil Armstrong y Buzz Aldrin dependían del Apollo Guidance Computer (AGC), diseñado en el MIT Instrumentation Laboratory.
Para los estándares actuales, el hardware del AGC era increíblemente modesto: palabras de 15 bits, un reloj de $2.048\,\text{MHz}$, apenas $2,048$ palabras de memoria RAM de núcleo magnético (unos $2\,\text{KB}$ útiles de trabajo) y $36,864$ palabras de memoria ROM (unos $72\,\text{KB}$). Además, todos los sensores a bordo eran imperfectos por separado:
- Unidad de Medición Inercial (IMU): Los giroscopios y acelerómetros miden la aceleración continuamente, pero al integrarla dos veces respecto al tiempo (navegación por estima / Dead Reckoning), cualquier pequeño sesgo deriva cuadráticamente ($\propto t^2$) o cúbicamente ($\propto t^3$) con el tiempo.
- Sextante óptico: Las mediciones estelares manuales de los astronautas no acumulaban deriva temporal, pero eran discretas y contenían errores de puntería humana y cuantización.
- Radar de alunizaje y seguimiento Doppler: Sufrían un fuerte ruido aleatorio de alta frecuencia debido a los cráteres lunares, el polvo en suspensión y las reflexiones multitrayecto.
¿Cómo podía un ordenador con solo $2\,\text{KB}$ de RAM fusionar en tiempo real una predicción física que deriva con el tiempo y mediciones de sensores llenas de ruido para obtener una posición mucho más precisa que la de cualquier sensor individual?
La respuesta matemática que salvó al Apolo 11 es el Filtro de Kalman, publicado en 1960 por el matemático e ingeniero de sistemas húngaro-estadounidense Rudolf Emil Kálmán (1930–2016).
1.1 El artículo de Kálmán de 1960 y la histórica visita a Stanley Schmidt en NASA Ames
En marzo de 1960, Kálmán publicó su célebre artículo “A New Approach to Linear Filtering and Prediction Problems”, superando las limitaciones en el dominio de la frecuencia del filtro de Wiener mediante una formulación en el dominio del tiempo basada en el espacio de estados (State-Space Model).
En noviembre de 1960, Kálmán visitó a Stanley F. Schmidt en el NASA Ames Research Center. Hasta entonces, la determinación de órbitas utilizaba el método de mínimos cuadrados por lotes (Batch Least Squares) inventado por Carl Friedrich Gauss en 1801 para recuperar el asteroide Ceres. Ese método exigía almacenar todo el historial de observaciones $\mathbf{Z}_{1:T} = \{\mathbf{z}_1, \dots, \mathbf{z}_T\}$ e invertir matrices con coste $O(T^3)$ y memoria $O(T)$, algo imposible en los $2\,\text{KB}$ del AGC.
Kálmán demostró que, gracias a la propiedad de Markov de primer orden, todo el historial pasado queda comprimido sin pérdida en un estadístico suficiente formado únicamente por el vector de estado estimado $\hat{\mathbf{x}}_{k-1\mid k-1}$ y su matriz de covarianza de error $\mathbf{P}_{k-1\mid k-1}$, requiriendo memoria $O(1)$ por paso de tiempo. Schmidt extendió inmediatamente esta teoría a la mecánica orbital no lineal (creando el Filtro de Kalman Extendido, EKF, o filtro de Kalman-Schmidt), y James E. Potter en el MIT desarrolló el filtro de raíz cuadrada (Square-Root Filter), que duplicó la precisión numérica en punto fijo de 15 bits y evitó varianzas negativas.
2. El milagro matemático en 1D: Por qué el producto de dos gaussianas ruidosas tiene menor varianza que cualquier sensor por sí solo
Analicemos primero la esencia bayesiana en una dimensión ($x \in \mathbb{R}$):
- La predicción del modelo físico proporciona una distribución a priori gaussiana $p(x) = \mathcal{N}(\mu_p, \sigma_p^2)$.
- Un sensor GPS o radar mide $z \equiv \mu_m$ con una verosimilitud gaussiana $p(z \mid x) = \mathcal{N}(\mu_m, \sigma_m^2)$.
Por el Teorema de Bayes, la densidad a posteriori es proporcional al producto de ambas densidades gaussianas:
$$p(x \mid z) \propto \exp\!\left(-\frac{(x - \mu_p)^2}{2\sigma_p^2}\right) \cdot \exp\!\left(-\frac{(x - \mu_m)^2}{2\sigma_m^2}\right) = \exp\!\left( -\frac{(x - \mu_p)^2}{2\sigma_p^2} - \frac{(x - \mu_m)^2}{2\sigma_m^2} \right) \propto \exp\!\left(-\frac{(x - \mu_{\text{new}})^2}{2\sigma_{\text{new}}^2}\right)$$Al completar el cuadrado en el exponente e igualar los coeficientes de $x^2$ y $x$:
$$J(x) = \frac{1}{2}\left( \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \right) x^2 - \left( \frac{\mu_p}{\sigma_p^2} + \frac{\mu_m}{\sigma_m^2} \right) x + \text{const} = \frac{1}{2\sigma_{\text{new}}^2}x^2 - \frac{\mu_{\text{new}}}{\sigma_{\text{new}}^2}x + \text{const}$$obtenemos exactamente la media a posteriori $\mu_{\text{new}}$, la varianza a posteriori $\sigma_{\text{new}}^2$ y la ganancia de Kalman 1D $K \in [0, 1]$:
$$K = \frac{\sigma_p^2}{\sigma_p^2 + \sigma_m^2}, \qquad \mu_{\text{new}} = \mu_p + K(z - \mu_p) = (1 - K)\mu_p + K z$$$$\frac{1}{\sigma_{\text{new}}^2} = \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \implies \sigma_{\text{new}}^2 = (1 - K)\sigma_p^2 = \frac{\sigma_p^2 \sigma_m^2}{\sigma_p^2 + \sigma_m^2} < \min(\sigma_p^2, \sigma_m^2)!$$Idea fundamental (Aditividad de la precisión): El inverso de la varianza $\tau = 1/\sigma^2$ es la precisión (información de Fisher). Al fusionar dos fuentes gaussianas independientes, las precisiones se suman linealmente ($\tau_{\text{new}} = \tau_p + \tau_m$, igual que las conductancias de dos resistencias en paralelo). Por tanto, la incertidumbre resultante $\sigma_{\text{new}}^2$ es estrictamente menor que la incertidumbre de la predicción Y estrictamente menor que la del sensor por separado. Por ejemplo, si $\sigma_p = 4\,\text{m}$ ($\sigma_p^2=16$) y $\sigma_m = 3\,\text{m}$ ($\sigma_m^2=9$), entonces $K = 0.64$ y la desviación estándar combinada cae a $\sigma_{\text{new}} = 2.4\,\text{m}$.
3. Formulación multivariante en el espacio de estados y deducción de las cinco ecuaciones del filtro de Kalman
Consideremos el sistema lineal estocástico en tiempo discreto para el estado $\mathbf{x}_k \in \mathbb{R}^n$ y la medición $\mathbf{z}_k \in \mathbb{R}^m$:
$$\mathbf{x}_k = \mathbf{F}_k \mathbf{x}_{k-1} + \mathbf{B}_k \mathbf{u}_k + \mathbf{w}_k, \qquad \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k$$con ruido de proceso $\mathbf{w}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{Q}_k)$ y ruido de medición $\mathbf{v}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{R}_k)$ mutuamente incorrelados.
Paso 1 — Predicción (Time Update / Chapman-Kolmogorov)
Tomando la esperanza condicional $\hat{\mathbf{x}}_{k\mid k-1} = \mathbb{E}[\mathbf{x}_k \mid \mathbf{Z}_{1:k-1}]$ y la covarianza del error a priori $\tilde{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \tilde{\mathbf{x}}_{k-1\mid k-1} + \mathbf{w}_k$, se deducen las dos primeras ecuaciones:
$$\hat{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \hat{\mathbf{x}}_{k-1\mid k-1} + \mathbf{B}_k \mathbf{u}_k, \qquad \mathbf{P}_{k\mid k-1} = \mathbf{F}_k \mathbf{P}_{k-1\mid k-1} \mathbf{F}_k^T + \mathbf{Q}_k$$Paso 2 — Actualización (Measurement Update / Bayes) y deducción matricial de $\mathbf{K}_k$
Definimos la innovación (residuo de medición) $\tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k\mid k-1}$ y la covarianza de innovación $\mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\mid k-1} \mathbf{H}_k^T + \mathbf{R}_k$. La actualización lineal es:
$$\hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k \tilde{\mathbf{y}}_k$$El error a posteriori es $\tilde{\mathbf{x}}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\tilde{\mathbf{x}}_{k\mid k-1} - \mathbf{K}_k \mathbf{v}_k$, cuyo producto exterior esperado proporciona la forma estabilizada de Joseph, válida para cualquier ganancia $\mathbf{K}_k$:
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}(\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)^T + \mathbf{K}_k \mathbf{R}_k \mathbf{K}_k^T = \mathbf{P}_{k\mid k-1} - \mathbf{K}_k \mathbf{H}_k \mathbf{P}_{k\mid k-1} - \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{K}_k^T + \mathbf{K}_k \mathbf{S}_k \mathbf{K}_k^T$$Para minimizar el error cuadrático medio esperado $\mathbb{E}[\|\mathbf{x}_k - \hat{\mathbf{x}}_{k\mid k}\|_2^2] = \operatorname{Tr}(\mathbf{P}_{k\mid k})$, derivamos la traza respecto a la matriz $\mathbf{K}_k$ e igualamos a cero:
$$\frac{\partial \operatorname{Tr}(\mathbf{P}_{k\mid k})}{\partial \mathbf{K}_k} = -2\mathbf{P}_{k\mid k-1}\mathbf{H}_k^T + 2\mathbf{K}_k \mathbf{S}_k = \mathbf{0} \implies \mathbf{K}_k = \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{S}_k^{-1}$$Sustituyendo la ganancia óptima en la expansión de Joseph se cancelan los dos últimos términos y se obtiene la quinta ecuación:
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}$$
flowchart TD
Init["Inicialización<br/>x̂₀|₀, P₀|₀"] --> Predict["[1. Predicción / Time Update]<br/>x̂ₖ|ₖ₋₁ = Fₖ x̂ₖ₋₁|ₖ₋₁ + Bₖ uₖ<br/>Pₖ|ₖ₋₁ = Fₖ Pₖ₋₁|ₖ₋₁ Fₖᵀ + Qₖ"]
Predict --> Innov["[Innovación y Covarianza]<br/>ỹₖ = zₖ - Hₖ x̂ₖ|ₖ₋₁<br/>Sₖ = Hₖ Pₖ|ₖ₋₁ Hₖᵀ + Rₖ"]
Innov --> Gain["[Ganancia de Kalman Óptima]<br/>Kₖ = Pₖ|ₖ₋₁ Hₖᵀ Sₖ⁻¹"]
Gain --> Update["[2. Actualización / Measurement Update]<br/>x̂ₖ|ₖ = x̂ₖ|ₖ₋₁ + Kₖ ỹₖ<br/>Pₖ|ₖ = (I - Kₖ Hₖ) Pₖ|ₖ₋₁"]
Update --> Predict
4. Optimalidad BLUE / MMSE, Dualidad y el Principio de Separación LQG
- Teorema de Gauss-Markov (BLUE) y MMSE: Bajo ruido gaussiano, el filtro de Kalman es el estimador de mínimo error cuadrático medio (MMSE) global entre todos los estimadores posibles; bajo ruido no gaussiano, sigue siendo el mejor estimador lineal insesgado (BLUE).
- Principio de separación del control óptimo LQG: Gracias a la dualidad entre observabilidad y controlabilidad, el control estocástico óptimo Linear-Quadratic-Gaussian (LQG) se separa exactamente en el diseño independiente de un filtro de Kalman ($\hat{\mathbf{x}}_{k\mid k}$) y un regulador determinista LQR ($\mathbf{u}_k^* = -\mathbf{L}_k \hat{\mathbf{x}}_{k\mid k}$).
5. Más allá de la linealidad: EKF, UKF, Filtros de Partículas y SLAM en conducción autónoma
Para dinámicas y sensores no lineales ($\mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k, \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k$):
- Filtro de Kalman Extendido (EKF): Linealiza en serie de Taylor de primer orden usando las matrices jacobianas $\mathbf{F}_k = \left.\frac{\partial f}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k-1\mid k-1}}$ y $\mathbf{H}_k = \left.\frac{\partial h}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k\mid k-1}}$.
- Filtro de Kalman Unscented (UKF, Julier & Uhlmann 1997): Propaga $2n+1$ puntos Sigma deterministas directamente a través de las funciones no lineales sin calcular derivadas jacobianas, logrando precisión de tercer orden de Taylor.
- Filtros de Partículas (SMC) y SLAM / ESKF: Representan distribuciones multimodales mediante partículas de Monte Carlo; en conducción autónoma y VIO, el filtro de Kalman de estado de error (ESKF) sobre grupos de Lie $SO(3)/SE(3)$ y el cierre de bucles (Loop Closure) en SLAM corrigen simultáneamente el mapa y la trayectoria.
flowchart TD
A["Análisis del problema de estimación"] --> B{"¿Son lineales f(x) y h(x)?"}
B -- "Sí" --> C["Filtro de Kalman Lineal (KF)<br/>Óptimo exacto MMSE / BLUE"]
B -- "No (No lineal)" --> D{"¿Posterior unimodal gaussiano?"}
D -- "No (Multimodal)" --> E["Filtro de Partículas (SMC)<br/>Muestreo secuencial de Monte Carlo"]
D -- "Sí" --> F{"¿Grado de no linealidad y Jacobianos?"}
F -- "Moderado / Jacobianos analíticos" --> G["Filtro de Kalman Extendido (EKF / ESKF)<br/>Linealización Taylor de 1er orden"]
F -- "Fuerte no linealidad / Sin derivadas" --> H["Filtro de Kalman Unscented (UKF)<br/>2n+1 puntos Sigma (3er orden)"]
| Arquitectura | Supuesto de linealidad | Representación probabilística | Complejidad | Precisión teórica | Aplicaciones principales |
|---|---|---|---|---|---|
| Filtro de Kalman (KF) | Estrictamente lineal | Gaussiana exacta $\mathcal{N}(\hat{\mathbf{x}}, \mathbf{P})$ | $O(n^3)$ | Óptimo global exacto (MMSE/BLUE) | Seguimiento radar, control de vuelo LQG |
| Kalman Extendido (EKF) | No lineal (Jacobianos) | Aproximación gaussiana local | $O(n^3)$ | Taylor de 1er orden | Navegación Apolo, fusión GPS/IMU, VIO |
| Kalman Unscented (UKF) | No lineal (sin derivadas) | $2n+1$ puntos Sigma deterministas | $O(n^3)$ | Taylor de 3er orden | Actitud de satélites, estimación SOC baterías |
| Filtro de Partículas (PF) | Arbitrario / multimodal | $N_p$ partículas ponderadas | $O(N_p \cdot n)$ | Converge al posterior exacto ($N_p \to \infty$) | Localización LiDAR (MCL), navegación por terreno |
6. Simulación completa en Python: Seguimiento 2D de un vehículo y reconstrucción de la velocidad no medida
El siguiente código simula un vehículo 2D con estado $\mathbf{x}_k = [p_x, p_y, v_x, v_y]^T$. Aunque el sensor GPS $\mathbf{H}$ solo mide la posición $(p_x, p_y)$ y nunca la velocidad, el filtro de Kalman reconstruye con alta precisión el vector de velocidad oculto gracias a las covarianzas cruzadas de $\mathbf{P}_{k\mid k-1}$.
| |
El RMSE de posición se reduce de $4.12\,\text{m}$ (GPS puro) a solo $1.18\,\text{m}$ (más de un 71 % de reducción de error), reconstruyendo además la velocidad oculta con un error de apenas $0.85\,\text{m/s}$. Al cuantificar rigurosamente la geometría de su propia incertidumbre ($\mathbf{P}_{k\mid k}$), el filtro de Kalman convierte datos imperfectos en navegación de precisión.
