4 puntos por GN⁺ 20 일 전 | 1 comentarios | Compartir por WhatsApp
  • El filtro de Kalman es un algoritmo óptimo de estimación de estado que estima el estado de un sistema y predice el futuro en entornos con mucho ruido.
  • Usando como ejemplo un radar de seguimiento de aeronaves, se explica el proceso de mejorar la precisión repitiendo las etapas de predicción y actualización a partir de mediciones de distancia y velocidad.
  • En cada etapa se calculan el vector de estado, la matriz de covarianza y la ganancia de Kalman (Kalman Gain) para combinar de forma ponderada las mediciones y las predicciones.
  • Se muestra con valores numéricos que, al considerar tanto la incertidumbre de medición como la del modelo, el error de estimación (incertidumbre) disminuye con el tiempo.
  • Mediante un ejemplo numérico intuitivo y cálculos paso a paso, se brinda una base de comprensión para diseñar e implementar el filtro directamente.

Introducción al filtro de Kalman

  • Kalman Filter** es un algoritmo de estimación de estado que estima y predice el estado de un sistema en entornos donde existe incertidumbre, como ruido de medición o factores externos.

    • Se utiliza como herramienta clave en diversos campos como seguimiento de objetos, navegación, robótica y control.
    • Por ejemplo, puede usarse para reducir el ruido en la trayectoria del mouse y obtener un movimiento más suave, detectar tendencias en datos financieros o hacer predicciones meteorológicas.
    • Se señala que muchos materiales educativos se centran en la derivación matemática y carecen de ejemplos prácticos, por lo que este material ofrece una explicación intuitiva centrada en ejemplos numéricos.
    • También se abordan casos en los que un filtro mal diseñado falla en el seguimiento, y se presentan formas de corregirlo.
    • El objetivo es que el lector consolide la comprensión necesaria para diseñar e implementar un filtro de Kalman por sí mismo.

Ruta de aprendizaje

  • Resumen en una sola página: presenta de forma breve los conceptos clave y las fórmulas principales, y solo requiere conocimientos básicos de estadística y álgebra lineal.
  • Tutorial web gratuito: tutorial en línea con ejemplos numéricos paso a paso para desarrollar intuición, sin conocimientos previos necesarios.
  • Kalman Filter from the Ground Up (libro): 14 ejemplos numéricos completos, filtros no lineales (Extended/Unscented) y fusión de sensores, con código en Python y MATLAB.

La necesidad de predecir

  • Se explica la necesidad de la estimación de estado y la predicción mediante el ejemplo de un radar de seguimiento de aeronaves.
    • El estado del sistema es la posición de la aeronave (distancia (r)), y el radar calcula la distancia midiendo el tiempo de reflexión del pulso.
    • La velocidad (v) puede medirse mediante el efecto Doppler.
  • La predicción de la posición después de un intervalo de tiempo fijo (\Delta t) se realiza mediante un modelo dinámico.
    • Ejemplo: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
    • (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
  • En el entorno real existen ruido de medición (Measurement Noise) e incertidumbre del modelo (Process Noise).
    • Incluso si varios radares miden al mismo tiempo, los resultados difieren ligeramente.
    • Factores externos como el viento rompen la suposición de velocidad constante.
  • El filtro de Kalman realiza al mismo tiempo la estimación del estado actual y la predicción del estado futuro, y además proporciona la incertidumbre (varianza) de cada estimación.
    • Es un algoritmo óptimo que minimiza la incertidumbre de la estimación del estado.

Ejemplo de filtro de Kalman

  • Un radar unidimensional mide la distancia (r) y la velocidad (v) de una aeronave.

    • Vector de estado (\boldsymbol{x} = [r, v]^T)
    • El sistema se representa usando vectores y matrices.
  • Iteration 0 — inicialización y predicción

  • Inicialización

    • El filtro se inicializa con la primera medición. (\boldsymbol{z}_0 = [10{,}000, 200]^T)
    • Incertidumbre de medición (desviación estándar): distancia 4m, velocidad 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
    • Estimación inicial del estado (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
    • Covarianza inicial (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
  • Etapa de predicción

    • Intervalo de tiempo (\Delta t = 5s)
    • Matriz de transición de estado (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
    • Estado predicho (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
    • Predicción de la covarianza (sin incluir ruido de proceso): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
    • Se agrega ruido de proceso ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
    • Covarianza predicha final: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
  • Resumen de Iteration 0

    • Se inicializan el estado y la covarianza con la primera medición.
    • Se predicen el siguiente estado y la incertidumbre usando el modelo de transición de estado.
    • Fórmulas de predicción
      • Predicción del estado: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
      • Predicción de la covarianza: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
  • Iteration 1 — actualización y predicción

  • Actualización del filtro

    • Segunda medición: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
    • Aumenta la incertidumbre de medición (desviación estándar: distancia 6m, velocidad 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
    • Al compararla con la covarianza predicha (\boldsymbol{P}_{1,0}), la incertidumbre de la predicción es menor.
    • El filtro de Kalman combina medición y predicción como un promedio ponderado.
      • Peso (K_1): ganancia de Kalman
      • Ecuación de actualización del estado: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
      • Matriz de observación (\boldsymbol{H} = \boldsymbol{I})
    • Cálculo de la ganancia de Kalman: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) Resultado: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
    • Innovación (innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
    • Valor de corrección: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
    • Estado actualizado: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
  • Actualización de la covarianza

    • Se usa la forma simplificada: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
    • Resultado: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
    • Después de la actualización, la incertidumbre es menor que la incertidumbre de la predicción y la de la medición. → Al combinar medición y predicción, la incertidumbre siempre disminuye
  • Etapa de predicción

    • Predicción para el siguiente instante (t_2)
      • Predicción del estado: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
      • Predicción de la covarianza: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
    • Si pasa el tiempo sin mediciones, la incertidumbre vuelve a aumentar.
  • Resumen de Iteration 1

    • Etapa de actualización: se combinan predicción y medición con la ganancia de Kalman.
    • Etapa de predicción: el estado actualizado se proyecta al siguiente instante.
    • Fórmulas principales
      • Actualización del estado: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
      • Actualización de la covarianza (forma de Joseph): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
      • Ganancia de Kalman: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})

Resumen del ejemplo

  • Las tres etapas del filtro de Kalman: inicialización → predicción → actualización
  • Después, se repite el bucle predicción-actualización.
  • Cada vez que se agrega una nueva medición, la incertidumbre disminuye y la estimación del estado del sistema se vuelve cada vez más precisa.
  • Materiales de aprendizaje adicionales
    • Tutorial en línea gratuito: ofrece ejemplos numéricos paso a paso.
    • Libro Kalman Filter from the Ground Up: incluye filtros lineales y no lineales, guía de implementación y código en Python/MATLAB.

1 comentarios

 
GN⁺ 20 일 전
Comentarios en Hacker News
  • Soy el autor. Hace poco actualicé la página principal de mi tutorial de Kalman Filter. Añadí un ejemplo sencillo de seguimiento por radar para que también lo pueda entender gente que solo tenga bases de estadística y álgebra lineal.
    Intenté minimizar la derivación de fórmulas, pero mostrando de forma intuitiva el ruido de las mediciones, el modelo de predicción y cómo se combinan en el filtro. Me gustaría recibir comentarios sobre el nivel matemático y la claridad de la explicación.

    • Lo revisé por encima, y sentí que la matriz de ruido del proceso Q aparecía de repente. Supongo que en el libro sí se explicará, pero estaría bien incluir una justificación breve de por qué toma esos valores.
    • En general estuvo claro. Aun así, al inicio me pareció un poco borrosa la distinción entre el modelo del sistema y el propio Kalman filter. Hasta la parte de construir la matriz de estado pensé que seguía siendo explicación del modelo, pero de ahí pasó directo a las ecuaciones del filtro y me confundió.
    • Me encantó el menú de accesibilidad. Fue muy fácil ajustar la legibilidad de la página.
    • Hace unos 6 meses intenté implementar un Kalman filter por mi cuenta, pero la estructura cambia bastante según el dominio de aplicación, así que lo dejé a medio camino. Tengo expectativas de que este material me ayude mucho a terminarlo esta vez.
    • La expresión “algoritmo óptimo” al principio del tutorial me pareció algo abstracta. Estaría bien explicar brevemente qué significa antes de entrar en la parte matemática.
  • La guía intuitiva como yo la veo sería así:

    1. Entender mínimos cuadrados ponderados y aprender a actualizar una estimación existente usando una nueva medición y su incertidumbre
    2. Si asumimos que la media real no cambia, este enfoque funciona bien
    3. Pero si la media cambia, el Kalman filter usa un modelo que predice ese cambio
    4. Después de predecir, se vuelve otra vez al mismo problema de (1)
      Al final, la clave es el método de mínimos cuadrados, y bajo ciertas suposiciones se puede demostrar que eso es óptimo.
  • El artículo “How a Kalman Filter Works in Pictures” me pareció muy bueno.

    • A mí también me gusta su forma visual de explicar las cosas. Pero mi tutorial buscaba enfocarse en un ejemplo de radar paso a paso, cubriendo tanto la intuición como las trampas comunes.
    • Pero incluso estas “explicaciones simples” a veces terminan sintiéndose demasiado complejas. En esencia, un Kalman filter es un tipo de estimador (estimator).
      Por ejemplo, un filtro pasa-bajas también es una clase de estimador, pero el Kalman filter le agrega un modelo de proceso y cálculo de covarianza para ajustarse dinámicamente.
      Refleja la relación entre variables correlacionadas, como posición y velocidad, de modo que una medición de una afecte también la estimación de las otras.
      Aun así, como está basado en álgebra lineal, necesita asumir ruido gaussiano, y para problemas no lineales hacen falta variantes como EKF o UKF.
  • Para entender un Kalman filter hay que conocer estas cuatro cosas:

    1. Modelo del sistema
    2. Estado interno
    3. Definición de estimación óptima
    4. El concepto de covarianza
      El filtro es una solución matemática para estimar de forma óptima el estado interno y la covarianza de un sistema a partir de mediciones.
      Creo que el libro de Alex Becker es una excelente introducción al tema. Tiene muchos ejemplos y ayuda mucho a construir intuición.
    • Gracias por el comentario. Estoy considerando un volumen 2 que cubra temas más avanzados. Aun así, quiero dejar claro que EKF y UKF son aproximaciones y no soluciones completamente óptimas.
  • Al aprender Kalman filter, se vuelve mucho más intuitivo cuando hay dos o más entradas con distintas características de ruido. Pero la mayoría de los tutoriales solo tratan una sola entrada.

    • Mi libro tiene un capítulo que introduce el concepto de sensor fusion. Si quieres profundizar más, recomiendo los libros de Bar-Shalom o Blackman.
    • En realidad, la esencia del Kalman filter es la estimación de estado (state estimation). La fusión de sensores es solo una de sus aplicaciones, y tratarlas como si fueran lo mismo puede llevar a malentendidos.
  • El Kalman filter sí se usa bastante en la práctica. Por ejemplo, en Sendspin lo usan para sincronizar bocinas.
    Puedes revisar el demo en vivo y la documentación de implementación.

  • Me pregunto si el concepto del Kalman filter podría aplicarse también a los testimonios de personas.

    • Es una idea interesante. La observación humana también podría verse como un sensor con ruido. Pero el Kalman filter estándar asume ruido gaussiano sin sesgo, así que no está claro que esa suposición se cumpla en el caso humano.
  • En thekalmanfilter.com también se puede ver una explicación sencilla.

  • Este artículo me pareció como un anuncio de un libro caro. Ya hay muchos materiales gratuitos, por ejemplo Kalman and Bayesian Filters in Python y otros. Me da curiosidad saber qué ventaja ofrece este libro en particular.

    • Buena pregunta. El contenido central sobre Kalman filter está disponible gratis. En el libro se cubren más cosas como tuning, consideraciones de diseño y ejemplos adicionales.
    • El libro de Roger Labbe y sus notebooks de Jupyter son realmente excelentes. Ayudan mucho no solo a entender Kalman filter, sino también el enfoque general para problemas de estimación.
    • He visto muchos otros materiales, pero este libro sí merece recomendación porque explica los detalles con muchísimo cuidado. El tutorial gratuito también se puede ver aquí.
    • El material que enlazaste es un clásico.
    • No hay tantos buenos materiales. De los que he visto, muy pocos están realmente bien hechos. Este se siente como un recurso hecho con un esfuerzo genuino por ofrecer una nueva forma de entender Kalman filter.