7 puntos por GN⁺ 2023-10-16 | 1 comentarios | Compartir por WhatsApp
  • El Kalman Filter es un algoritmo que estima el estado actual y predice el futuro en sistemas con ruido de medición y factores externos desconocidos, y se usa en áreas como seguimiento, navegación, robótica y control
  • El ejemplo de radar en 1 dimensión mide la distancia (r) y la velocidad (v) de una aeronave, y maneja conjuntamente el estado y la incertidumbre con el vector de estado (\boldsymbol{x}=[r, v]^T) y las matrices de covarianza (\boldsymbol{P}, \boldsymbol{R}, \boldsymbol{Q})
  • Los valores iniciales medidos son una distancia de 10,000 m y una velocidad de 200 m/s; al aplicar un intervalo de muestreo de 5 segundos y un modelo de velocidad constante, la siguiente posición predicha es 11,000 m
  • La etapa de predicción propaga el estado con la matriz de transición de estado (\boldsymbol{F}) y calcula la covarianza con (\boldsymbol{F}\boldsymbol{P}\boldsymbol{F}^T+\boldsymbol{Q}), reflejando cómo la incertidumbre de la velocidad y el ruido de proceso aumentan la incertidumbre de la posición
  • La etapa de actualización no confía ciegamente en una nueva medición ni la descarta, sino que combina ponderadamente la predicción y la medición con la Kalman Gain para reducir la incertidumbre de la estimación; después, el filtro repite predicción y actualización

El problema que aborda el Kalman Filter

  • El Kalman Filter es un algoritmo que realiza estimación de estado y predicción futura en sistemas con incertidumbre
    • Trata situaciones donde hay ruido de medición o factores externos desconocidos que afectan al sistema
    • Se usa como herramienta clave en seguimiento de objetos, navegación, robótica y control
    • En la estimación de trayectorias del mouse de computadora, puede reducir el temblor de la mano y el ruido para crear una ruta de movimiento más estable
    • En el análisis de mercados financieros, se aplica para detectar tendencias del precio de las acciones en datos de mercado con ruido, y en meteorología para el pronóstico del tiempo
  • Este tutorial busca construir intuición con ejemplos numéricos antes de poner al frente las matemáticas complejas
    • También incluye un ejemplo de un Kalman Filter mal diseñado que no logra seguir correctamente un objeto
    • El objetivo es alcanzar un nivel en el que se puedan entender los conceptos y las matemáticas, y diseñarlo e implementarlo directamente

Ruta de aprendizaje

  • La ruta de aprendizaje ofrecida se divide en tres etapas
    • Resumen en una sola página: explica los conceptos clave y las ecuaciones esenciales sin derivaciones, asumiendo conocimientos básicos de estadística y álgebra lineal
    • Tutorial web gratuito basado en ejemplos: en tutorial se construye intuición con ejemplos numéricos y se aborda paso a paso hasta la derivación de las ecuaciones del Kalman Filter
    • Libro: Kalman Filter from the Ground Up incluye 14 ejemplos numéricos completamente resueltos, gráficas y tablas de desempeño, Extended Kalman Filter y Unscented Kalman Filter, fusión de sensores y lineamientos de implementación

Por qué se necesita predicción en el seguimiento por radar

  • Para que un radar siga una aeronave, debe apuntar repetidamente un haz estrecho hacia la dirección del objetivo, por lo que necesita predecir la posición futura al momento de enviar el siguiente haz
    • Si falla la predicción, el haz puede apuntar en la dirección equivocada y perder el seguimiento
    • Se necesita un modelo dinámico que represente cómo se mueve la aeronave con el tiempo
  • En el ejemplo simplificado de 1 dimensión, solo se considera el movimiento lineal de la aeronave acercándose o alejándose del radar
    • El estado se define como la distancia (r) desde el radar
    • El radar calcula la distancia (r) usando el tiempo de transmisión y recepción del pulso y la velocidad de la luz
    • También puede medir la velocidad (v) mediante el efecto Doppler
  • Se asume que en (t_0) se midieron la distancia de 10,000 m y la velocidad de 200 m/s con exactitud y precisión muy altas
    • El intervalo de muestreo es (\Delta t=5s)
    • En el modelo de velocidad constante, la distancia recorrida es (\Delta r=v\cdot\Delta t)
    • La posición predicha es (10,000+200\cdot5=11,000m)

Ruido de medición y ruido de proceso

  • Las mediciones reales de radar no son perfectas, así que incluso si varios radares miden la misma aeronave en el mismo instante, producen resultados ligeramente distintos
    • Esa variación ocurre por el ruido de medición
    • Hay que calcular no solo el valor estimado, sino también qué tan confiable es esa estimación
  • El modelo dinámico tampoco puede describir por completo el movimiento real
    • Aunque se asuma que la aeronave se mueve a velocidad constante, factores externos como el viento pueden cambiar su movimiento real
    • Esas influencias impredecibles se tratan como ruido de proceso
  • El Kalman Filter entrega conjuntamente la estimación del estado actual, la predicción del estado futuro y sus respectivas incertidumbres
    • Se presenta como un algoritmo óptimo que minimiza la incertidumbre de la estimación del estado

Representación del estado e inicialización en el ejemplo del radar

  • El estado del sistema en el ejemplo es un vector que incluye la distancia (r) y la velocidad (v) de la aeronave

[ \boldsymbol{x}=\left[\begin{matrix}r\v\\end{matrix}\right] ]

  • Los vectores se escriben en negritas minúsculas y las matrices en negritas mayúsculas
  • El Kalman Filter se inicializa con la primera medición
    • En (t_0), los valores medidos son una distancia de 10,000 m y una velocidad de 200 m/s
    • El vector de medición es el siguiente

[ \boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]

  • Los valores medidos no son el estado exacto del sistema, sino una variable aleatoria con ruido
    • La desviación estándar de la medición de distancia es (4m)
    • La desviación estándar de la medición de velocidad es (0.5m/s)
    • Como la varianza es el cuadrado de la desviación estándar, la matriz de covarianza de medición (\boldsymbol{R}_0) es la siguiente

[ \boldsymbol{R}_0=\left[\begin{matrix}16&0\0&0.25\\end{matrix}\right] ]

  • En este ejemplo se asume que los errores de medición de distancia y velocidad no están relacionados entre sí, por lo que los elementos fuera de la diagonal de la matriz de covarianza se dejan en 0
  • En el momento de la inicialización solo hay una medición, por lo que puede usarse como estimación inicial del estado

[ \boldsymbol{\hat{x}}_{0,0}=\boldsymbol{z}_0=\left[\begin{matrix}10{,}000\200\\end{matrix}\right] ]

  • Este método solo es posible en la etapa de inicialización

Etapa de predicción: propagación del estado y la covarianza

  • Para predecir el siguiente estado se usa un modelo dinámico de velocidad constante

[ v_1=v_0=v ]

[ r_1=r_0+v_0\Delta t ]

  • La predicción del estado en forma matricial es la siguiente

[ {\hat{\boldsymbol{x}}}{1,0}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{0,0} ]

  • (\boldsymbol{F}) es la matriz de transición de estado, y cuando (\Delta t=5s), el resultado de la predicción es el siguiente

[ {\hat{\boldsymbol{x}}}_{1,0}

\left[\begin{matrix}1&5\0&1\\end{matrix}\right] \left[\begin{matrix}10,000\200\\end{matrix}\right]

\left[\begin{matrix}11,000\200\\end{matrix}\right] ]

  • La ecuación general de extrapolación del estado, es decir, la ecuación de predicción, es la siguiente

[ {\hat{\boldsymbol{x}}}{n+1,n}=\boldsymbol{F}{\hat{\boldsymbol{x}}}{n,n}+\boldsymbol{G}\boldsymbol{u}_n ]

  • (\boldsymbol{u}_n) es la variable de entrada
  • (\boldsymbol{G}) es la matriz de transición de entrada
  • En el ejemplo no hay entrada, así que (\boldsymbol{u}_n=0)
  • La covarianza no se calcula simplemente como (\boldsymbol{F}\boldsymbol{P})
    • Porque la covarianza incluye términos cuadrados de varianzas y covarianzas
    • Cuando no hay ruido de proceso, la ecuación de extrapolación de la covarianza es la siguiente

[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T ]

  • Al propagar la covarianza inicial (\boldsymbol{P}_{0,0}) en el ejemplo, se obtiene el siguiente resultado

[ \boldsymbol{P}_{1,0}

\left[\begin{matrix}22.25&1.25\1.25&0.25\\end{matrix}\right] ]

  • La varianza de la velocidad se mantiene en (0.25m^2/s^2)
  • La varianza de la distancia aumenta de (16m^2) a (22.25m^2)
  • La incertidumbre en la velocidad se convierte con el tiempo en incertidumbre en la distancia

Incorporación del ruido de proceso

  • Con la sola suposición de velocidad constante es difícil describir completamente el movimiento real de la aeronave
    • Factores externos desconocidos, como el viento, pueden afectar la velocidad
    • Esas influencias impredecibles se representan con el ruido de proceso (\boldsymbol{Q})
  • La ecuación de predicción de la covarianza que incluye ruido de proceso es la siguiente

[ \boldsymbol{P}{n+1,n}=\boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T+\boldsymbol{Q} ]

  • En el ejemplo se asume una desviación estándar de aceleración aleatoria de (\sigma_a=0.2m/s^2)
    • La varianza es (\sigma_a^2=0.04m^2/s^4)
    • Cuando (\Delta t=5s), la matriz de ruido de proceso es la siguiente

[ \boldsymbol{Q}

\left[\begin{matrix}6.25&2.5\2.5&1\\end{matrix}\right] ]

  • La covarianza predicha al sumar el ruido de proceso es la siguiente

[ \boldsymbol{P}_{1,0}

\left[\begin{matrix}28.5&3.75\3.75&1.25\\end{matrix}\right] ]

Etapa de actualización: combinación de medición y predicción

  • En (t_1), el segundo valor medido es el siguiente

[ \boldsymbol{z}_1= \left[\begin{matrix}11{,}020\202\\end{matrix}\right] ]

  • Esta medición tiene una relación señal-ruido menor y una incertidumbre mayor que la primera debido a un fuerte pico de ruido
    • La desviación estándar de la medición de distancia es (6m)
    • La desviación estándar de la medición de velocidad es (1.5m/s)
    • La matriz de covarianza de medición es la siguiente

[ \boldsymbol{R}_1= \left[\begin{matrix}36&0\0&2.25\\end{matrix}\right] ]

  • En (t_1) ya se pueden usar tanto el estado predicho calculado en la etapa anterior como la nueva medición
    • Los elementos diagonales de la covarianza predicha (\boldsymbol{P}_{1,0}) son (28.5) y (1.25)
    • Los elementos diagonales de la covarianza de medición (\boldsymbol{R}_1) son (36) y (2.25)
    • En este caso, la incertidumbre de la predicción es menor que la incertidumbre de la medición
  • El Kalman Filter no usa la nueva medición tal cual ni conserva solo la predicción
    • Combina la predicción y la medición mediante un promedio ponderado
    • Da más peso al lado con menor incertidumbre
  • La combinación en forma de 1 dimensión es la siguiente

[ \hat{x}{1,1}=K_1z_1+(1-K_1)\hat{x}{1,0} ]

  • (K_1) es la Kalman Gain y determina cuánto peso dar a la medición y a la predicción
    • Mientras las suposiciones del modelo sean correctas, minimiza la incertidumbre de la estimación actualizada

Actualización del estado e innovation

  • La ecuación de actualización del estado en forma matricial es la siguiente

[ \hat{\boldsymbol{x}}_{1,1}

\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}) ]

  • En general, el valor medido y el estado del sistema pueden no representar la misma magnitud física
    • Un termómetro digital mide una señal eléctrica, pero el estado del sistema podría ser la temperatura
    • En ese caso se necesita una matriz de observación (\boldsymbol{H}) que transforme el estado predicho al dominio de medición
  • La ecuación general de actualización del estado es la siguiente

[ \hat{\boldsymbol{x}}_{1,1}

\hat{\boldsymbol{x}}_{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) ]

  • (\boldsymbol{z}1-\boldsymbol{H}\hat{\boldsymbol{x}}{1,0}) es la innovation o residual, y representa la información nueva
  • En el ejemplo, como tanto el estado como la medición son distancia y velocidad, (\boldsymbol{H}) es la matriz identidad

Cálculo de la Kalman Gain

  • La Kalman Gain en 1 dimensión es la siguiente

[ K_n=\frac{p_{n,n-1}}{p_{n,n-1}+r_n} ]

  • (p_{n,n-1}) es la varianza del estado predicho
  • (r_n) es la varianza de la medición
  • En el Kalman Filter multivariable, la Kalman Gain se convierte en una matriz y es la siguiente

[ \boldsymbol{K}n= \boldsymbol{P}{n,n-1}\boldsymbol{H}^T \left( \boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T+\boldsymbol{R}_n \right)^{-1} ]

  • La Kalman Gain calculada en (t_1) para el ejemplo es la siguiente

[ \boldsymbol{K}_1= \left[\begin{matrix}0.4048&0.6377\0.0399&0.3144\\end{matrix}\right] ]

  • La inversa de una matriz puede calcularse con inv(A) en MATLAB o numpy.linalg.inv(A) en Python
    • En implementaciones reales, normalmente es mejor resolver directamente el sistema lineal con A\b en MATLAB o numpy.linalg.solve(A, b) en Python, en lugar de calcular de forma explícita la inversa de la matriz

Resultado de la actualización y reducción de la covarianza

  • En el ejemplo, la innovation es la siguiente

[ \boldsymbol{z}1-\hat{\boldsymbol{x}}{1,0}

\left[\begin{matrix}20\2\\end{matrix}\right] ]

  • La corrección al aplicar la Kalman Gain es la siguiente

[ \boldsymbol{K}_1 \left[\begin{matrix}20\2\\end{matrix}\right]

\left[\begin{matrix}9.37\1.43\\end{matrix}\right] ]

  • La estimación de estado actualizada es la siguiente

[ \hat{\boldsymbol{x}}_{1,1}

\left[\begin{matrix}11{,}009.37\201.43\\end{matrix}\right] ]

  • En la actualización de covarianza multivariable se usa con frecuencia la 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 ]

  • En la literatura también aparece con frecuencia una forma simplificada

[ \boldsymbol{P}_{n,n}

(\boldsymbol{I}-\boldsymbol{K}n\boldsymbol{H}) \boldsymbol{P}{n,n-1} ]

  • Con aritmética exacta, ambas formas dan el mismo resultado
  • En implementaciones por computadora, la forma de Joseph suele ser más estable numéricamente
  • En el ejemplo se usa la actualización simplificada de la covarianza y se obtiene el siguiente resultado

[ \boldsymbol{P}_{1,1}

\left[\begin{matrix}14.57&1.43\1.43&0.71\\end{matrix}\right] ]

  • La incertidumbre de la estimación actualizada es menor que la incertidumbre de la predicción y de la medición
    • Los elementos diagonales de la covarianza predicha son (28.5) y (1.25)
    • Los elementos diagonales de la covarianza de medición son (36) y (2.25)
    • Los elementos diagonales de la covarianza actualizada son (14.57) y (0.71)
  • En teoría, la información nueva reduce la incertidumbre de la estimación aunque tenga mucha incertidumbre
    • En sistemas reales, a veces es necesario rechazar mediciones poco confiables

Siguiente predicción y bucle repetitivo

  • La etapa de predicción de la Iteration 1 se realiza de la misma manera que en la Iteration 0
    • Pero el punto de partida son (\hat{\boldsymbol{x}}{1,1}) y (\boldsymbol{P}{1,1}) ya actualizados
  • La predicción del estado es la siguiente

[ \hat{\boldsymbol{x}}_{2,1}

\boldsymbol{F}\hat{\boldsymbol{x}}_{1,1}

\left[\begin{matrix}12,016.5\201.43\\end{matrix}\right] ]

  • La predicción de la covarianza es la siguiente

[ \boldsymbol{P}_{2,1}

\boldsymbol{F}\boldsymbol{P}_{1,1}\boldsymbol{F}^\top+\boldsymbol{Q}

\left[\begin{matrix}52.86&7.47\7.47&1.71\\end{matrix}\right] ]

  • Si pasa el tiempo sin nuevas mediciones, ambas varianzas vuelven a aumentar
    • La incertidumbre en la velocidad incrementa aún más la incertidumbre en la distancia, por lo que la varianza de la distancia crece más rápido
  • El Kalman Filter funciona con una estructura en la que se inicializa una sola vez al comienzo y luego repite continuamente predicción y actualización
    • La predicción propaga la estimación actual y su covarianza al siguiente instante usando el modelo de transición de estado
    • La actualización combina la nueva medición y la predicción mediante la Kalman Gain para actualizar el estado actual y su incertidumbre

1 comentarios

 
GN⁺ 2023-10-16
Opiniones en Hacker News
  • Cada vez que veo un “tutorial para principiantes” me ilusiono, pero casi siempre termino decepcionado, y esta vez no fue la excepción.
    Empieza bien, pero inevitablemente pasa por alto algún concepto o término clave sin explicarlo lo suficiente. Aquí me detuve en la parte que dice: “Una variable aleatoria se describe mediante una función de densidad de probabilidad, y una función de densidad de probabilidad se caracteriza por sus momentos. El momento de un valor de probabilidad es el valor esperado de una potencia de la variable aleatoria”.
    No sé si se refiere al valor esperado del exponente del valor de probabilidad, o al valor esperado de alguna potencia del valor de probabilidad, ni por qué la potencia, y no simplemente el valor de probabilidad en sí, es algo especial. Es frustrante: se siente como si los autores, a mitad de su hilo de pensamiento, de pronto renunciaran a explicar las cosas de forma sencilla, o como si desde el principio no entendieran bien los conceptos de base y por eso no pudieran explicárselos a otros. Sería bueno poder hacerle preguntas al instructor, como en Udemy, pero con el autor de un libro no hay forma de recibir respuesta.

    • El aprendizaje, especialmente el de un campo nuevo, tiene una estructura en cadena, así que si falta un conocimiento previo, por definición se vuelve imposible entender.
      Si el autor no explica suficientemente bien una sola cosa, todo se derrumba, y tener un ciclo de retroalimentación ayuda muchísimo. Si no lo hay, al final uno tiene que hacerse responsable y buscar las palabras y frases que no entiende. Hay que buscar expresiones que no se comprendan lo suficiente, como “variable aleatoria” o “función de densidad de probabilidad”, y complementarlas con Wikipedia, ChatGPT, libros de texto, videos, etc. Este proceso es recursivo, así que aparecen otros conceptos que tampoco conoces, pero hay que seguir bajando. El valor de un tutor también está en guiar bien esta búsqueda en profundidad. En un campo nuevo, normalmente se tarda más en llenar el conocimiento de contexto que en leer el texto principal, y la próxima vez con un tema similar puede ser más rápido.
    • Para quienes se sentían frustrados con el concepto de “momento”, este artículo resultó revelador e interesante: https://gregorygundersen.com/blog/2020/04/11/moments/
      Es casi extraño que no haya logrado interiorizar un concepto tan básico después de pasar por la licenciatura y el posgrado.
    • Lo más difícil al enseñar es que no puedes volver a la perspectiva del momento en que no sabías lo que ahora sabes.
      Por eso olvidas las cosas que das por obvias. Siento un problema parecido con los videos de 3blue1brown. Los videos son bonitos, pero no generan comprensión; quienes ya conocen el tema asienten al ver una representación limpia de conceptos familiares, pero para alguien como yo parece haber demasiados prerrequisitos.
    • Por eso ya ni intento leer este tipo de tutoriales hasta el final.
      Para entender el filtro de Kalman, primero hay que conocer los fundamentos de probabilidad y la importancia de la distribución gaussiana. La derivación matemática asume que todas las distribuciones de probabilidad relevantes son gaussianas, y una distribución gaussiana queda determinada de forma única si conoces sus momentos de primer y segundo orden. Al final no se puede evitar introducir los momentos, y después viene matemática bastante dura. El filtro de Kalman no es un tema fácil, y Rudolf Kalman dijo en una entrevista que, sin su filtro, el alunizaje de Estados Unidos habría sido imposible.
    • Hay bastantes similitudes entre el sistema de puntuación Elo y el filtro de Kalman.
      Siempre he pensado que es una buena forma de enseñar el filtro de Kalman, porque se puede empezar con un caso univariado simple, modificarlo y generalizarlo.
  • Hace algunos años escuché una breve serie de charlas de Kalman, y él enfatizaba con mucha fuerza la virtud de trabajar directamente con los datos observados.
    Consideraba que si primero se asume un modelo y luego se intenta ajustarlo a los datos, se introduce sesgo, y como buen ejemplo de este principio mencionaba los Principia de Newton. La explicación era que Newton no anduvo buscando un modelo que explicara las leyes de Kepler, sino que, usando principalmente argumentos geométricos, derivó la ley de gravitación del inverso del cuadrado a partir de las leyes de Kepler. Era un gran orador y tenía opiniones firmes; por supuesto también explicó la idea del filtro de Kalman, pero como no tenía uso directo en mi trabajo, olvidé los detalles hace mucho.

    • Creo que esta parte se pasa por alto con demasiada frecuencia.
      He trabajado con científicos e ingenieros que desplegaron sistemas reales muy complejos y conocidos, y esas personas suelen ser escépticas frente a los algoritmos de moda y normalmente parten de primeros principios. En el 90% de los casos, bastaba con un filtro de Kalman lineal común y simple, o incluso sin un modelo de movimiento.
  • Hace poco un amigo me pidió una implementación de un filtro de Kalman para un proyecto paralelo. Leí varios materiales y este sitio web, pero todavía no sé cómo implementarlo.
    Todo me parece explicado al estilo “dibuje el resto del búho”. Me gustaría encontrar material que lo explique como lo haría un programador, por ejemplo con iteraciones sobre arreglos en vez de notación sigma. Según lo que entendí, el filtro de Kalman parece una especie de promedio móvil de posición, velocidad y quizá aceleración, y usa esos tres valores para estimar el “valor real” en lugar del valor que dice el sensor.

    • No sé bien qué material recomendar, pero con una biblioteca de álgebra lineal como NumPy, el código son apenas unas líneas.
      Eso sí, primero hay que escribir la matemática que describe la dinámica. El filtro de Kalman es más o menos aplicar el teorema de Bayes a una dinámica de sistema específica, repitiendo cómo actualizar la estimación del estado actual cuando llega una medición y cómo la dinámica del sistema afecta la incertidumbre después de esa medición y antes de la siguiente. Primero necesitas un modelo dinámico que indique cómo cambia con el tiempo el objeto que estás siguiendo. Sin eso, la implementación inevitablemente va a resultar confusa. Leer primero sobre filtros de Bayes o filtros de partículas ayuda a captar el concepto incluso sin matrices. Siempre me frustra la idea de que se puede ser desarrollador de software sin saber matemáticas: quizá alcance para hacer páginas web, pero mientras más matemáticas sepas, mucho mayor será el rango de problemas que puedes modelar y resolver.
    • Las variables reales como posición, velocidad y aceleración dependen del caso de uso.
      Lo importante es estimar a partir de ese estado y, después de recibir una medición, usar ambas fuentes de información para ajustar iterativamente el siguiente estado. Una vez que entiendes las fórmulas, la programación en sí es bastante fácil. Este material puede ayudar: http://bilgin.esme.org/BitsAndBytes/KalmanFilterforDummies
    • Primero necesitas un modelo de sistema dinámico lineal de tiempo discreto para el proceso.
      Se pueden agregar controles externos y ruido de proceso, y el estado interno se representa como un vector de valores. También hace falta un modelo lineal de cómo el estado interno se transforma en observaciones, además del ruido de observación.
      x es el estado del modelo, F es el modelo lineal de transición de estado x(t+1) = F x(t), Q es la matriz de covarianza del ruido de proceso, así que en realidad x(t+1) = F x(t) + N(0,Q), H es el modelo lineal de observación, R es la matriz de covarianza del ruido de observación, y u y B son el vector de control externo opcional y la forma en que actúa. N(0,Q) es una distribución normal con media 0 y covarianza Q.
      Por ejemplo, para un objeto en movimiento, el estado del modelo podría ser la posición x y la velocidad v. Con radar y similares, normalmente solo se observa la posición y no se puede observar la velocidad actual, así que el modelo de observación queda como algo que solo extrae la posición. Antes de hacer un filtro de Kalman, primero debe existir ese “búho”, y tienes que definirlo tú según el proceso. El filtro de Kalman te dice cómo estimar de forma óptima el vector de estado real en cada instante cuando tanto el modelo de transición de estado como las observaciones incluyen ruido. Muchos tutoriales mezclan la parte del modelo de proceso elegido con la parte del filtro de Kalman, lo que confunde; y en ejemplos demasiado pequeños, como un modelo constante unidimensional, el modelo dinámico desaparece dentro de las ecuaciones y eso aumenta la confusión.
    • Recomiendo el libro de texto Probabilistic Robotics, de Dieter Fox, Sebastian Thrun y Wolfram Burgard.
      En los primeros capítulos cubre muy bien los filtros de Kalman y los filtros de información.
    • El promedio móvil es un buen punto de partida para pensar en esto.
      Si sabes que las mediciones del sensor tienen ruido, promedias varias muestras para obtener una estimación más cercana al valor real; y si conoces el nivel de ruido del sensor, también tienes una idea de cuántas muestras conviene promediar. Aquí puedes pensar que todos los valores detectados o inferidos se estiman como una distribución gaussiana parametrizada por media y varianza.
      En un sistema físico con aceleración, velocidad y posición, si en el tiempo t tienes posición p y velocidad v, la posición en t+dt será aproximadamente p+(v*dt). También puedes actualizar la velocidad con una estimación de aceleración, y si es un sistema que estás controlando, puedes actualizar el modelo de aceleración con la fuerza que ordenaste aplicar. Pero como hay incertidumbre en la estimación inicial, si solo haces avanzar este modelo de proceso continuamente, la incertidumbre seguirá creciendo hasta volverse inútil.
      El filtro de Kalman es una técnica que combina información de sensores y un modelo de proceso para estimar mejor la cantidad que te interesa que usando solo uno de los dos. En cada paso de tiempo, predice el estado con el modelo de proceso a partir de la estimación del estado anterior y luego actualiza la media y la incertidumbre con la medición actual del sensor. En el filtro de Kalman básico se asume que el modelo de proceso es lineal y que todas las estimaciones son distribuciones gaussianas simples; luego se decide cuánto confiar en el modelo o en el sensor mediante un coeficiente multiplicativo llamado ganancia de Kalman.
  • Otra lista de reproducción con tutoriales en video paso a paso sobre el filtro de Kalman: https://www.youtube.com/watch?v=CaCcOwJPytQ&list=PLX2gX-ftPV...
    Una vez que captas la intuición, el filtro de Kalman es realmente interesante, y los filtros de partículas también son divertidos de tratar y visualizar.

  • Tengo este libro y lo he usado con bastante éxito en problemas reales.
    Hay algunas partes que, incluso releyéndolas varias veces, se sienten algo difíciles de seguir, pero en general está bastante bien.

    • Me gustaría escuchar con más detalle la parte de que “lo usaste con bastante éxito en problemas reales”.
  • Otro buen artículo relacionado: Is the Kalman filter a low-pass filter? Sometimes!
    https://jbconsulting.substack.com/p/is-the-kalman-filter-jus...
    Lo usé para reducir el temblor del movimiento de una cámara virtual en un video que recortaba en tiempo real el área alrededor del rostro. El flujo de posiciones de rostro detectadas se enviaba a un worker del filtro de Kalman y se recibía de vuelta un flujo de posiciones de cámara estables.

  • Cuando los recursos de cómputo son limitados, el filtro de Kalman es excelente, pero personalmente prefiero modelos más nuevos y avanzados, como los filtros de partículas.
    La ventaja de los filtros de partículas es que pueden manejar situaciones complejas con física no lineal y distribuciones no gaussianas. Por ejemplo, el GPS de un auto puede usar un mapa de calles, basándose en el historial reciente de giros, para eliminar ubicaciones imposibles. Un filtro gaussiano no puede hacer ese tipo de procesamiento y terminaría generando solo una mancha borrosa que cubre varias cuadras.

    • Me gustaría que recomendaran buenos recursos para aprender filtros de partículas.
      También me da curiosidad si, para procesamiento offline, hay modelos más nuevos o avanzados que valga la pena recomendar aparte de los filtros de partículas.
  • En 2007 trabajaba en una empresa de adtech, y el CEO y el equipo de investigación estaban obsesionados con los filtros de Kalman para optimizar campañas publicitarias en las redes de Google y MSN.
    Según recuerdo, funcionaba hasta cierto punto, pero ahora no encuentro la solicitud de patente, y Zeta y Walmart compraron esa tecnología.

  • Los artículos que explican los filtros de Kalman casi siempre empiezan con algo como: “Como ejemplo intuitivo, pensemos en un termostato. ¿Entendido? ¡Bien! Ahora, para hacerlo más intuitivo, veamos álgebra lineal avanzada”.
    Me pregunto si alguien ha visto una explicación de los filtros de Kalman que no salte directo a las matemáticas.

    • Se puede ver como un promedio ponderado entre la incertidumbre propagada del estado y la incertidumbre de la medición de ese estado.
      Si cierras los ojos y caminas hacia una pared, con el tiempo pierdes certeza sobre tu posición, y en el momento en que tus dedos tocan la pared tu certeza sobre la posición aumenta de golpe. La primera parte es la etapa de predicción y la segunda es la actualización por medición. El álgebra lineal es simplemente la forma de calcular esos pesos en un sistema dinámico lineal con ruido gaussiano.
    • El meme de “dibuja el resto del búho” en matemáticas está tan extendido que ya ni siquiera llega a ser un lugar común.
    • Vale la pena probar con este artículo: https://praveshkoirala.com/2023/06/13/a-non-mathematical-int...
    • Depende del nivel con el que te sientas cómodo.
      Los filtros de Kalman hacen supuestos estadísticos, como la distribución normal, así que como mínimo hay que conocer estadística y matrices de media y covarianza. Con eso, probablemente puedas seguir hasta antes de la sección 4 de https://sites.ualberta.ca/~dwiens/stat679/meinhold&singpurwa.... A partir de la sección 4 se enfoca en empujar los cálculos matemáticos necesarios para la implementación real, y no aporta mucho entendimiento adicional.
    • La intuición me llegó con el curso online AI for Robotics de Sebastian Thrun.
      El enfoque de tratar primero todo en una dimensión y luego extenderlo a problemas multidimensionales definitivamente ayuda a fijar los conceptos. La playlist del curso parece ser esta: https://youtube.com/playlist?list=PLAwxTw4SYaPkCSYXw6-a_aAoX...
      La parte de filtros de Kalman empieza en el video “Tracking Intro - Artificial Intelligence for Robotics”. Parece que el curso gratuito también está aquí, pero se necesita iniciar sesión para acceder: https://www.udacity.com/course/intro-to-artificial-intellige...
  • No conozco bien Kalman, así que leí los artículos introductorios de este sitio, pero no me terminaron de cerrar.
    Al pensar en los gráficos de ejemplo, me pareció mucho más parecido a una media móvil exponencial, que es mucho más fácil de entender. Al buscar comparaciones en Google, en Stats Stack Exchange decían que, para una “caminata aleatoria + ruido”, la EMA era tan buena como Kalman, y un paper de Joseph J. LaViola de 2003, de Brown University, mostraba que un algoritmo de suavizado exponencial doble tenía la misma calidad que Kalman y Kalman extendido, pero era 135 veces más rápido y más simple.
    Como el suavizado exponencial doble es mucho más fácil de entender que Kalman, si asumimos que el paper de LaViola es correcto, no pienso dedicar más esfuerzo a entender Kalman.