4 puntos por GN⁺ 2024-02-13 | 1 comentarios | Compartir por WhatsApp
  • El filtro de Kalman es un algoritmo usado en predicción y control basados en sensores que produce en tiempo real estimaciones de estado más precisas a partir de mediciones ruidosas o inexactas
  • No solo suaviza las mediciones, sino que también puede estimar variables de estado como posición y velocidad que son difíciles de observar directamente
  • El ejemplo de seguimiento por radar muestra el flujo para estimar la posición y velocidad de un objeto como un vector de estado 4×1 a partir de mediciones de posición 2D y una covarianza
  • Después de inicializar el estado con las dos primeras mediciones, repite la predicción, el cálculo de la ganancia de Kalman (Kalman Gain), y la actualización del estado y de la covarianza del error
  • Como el único historial que mantiene el filtro es la estimación del estado actual, es fácil de implementar incluso en dispositivos con restricciones de memoria

Panorama general del filtro de Kalman

  • El filtro de Kalman puede verse como una caja negra con entradas y salidas
    • La entrada son mediciones ruidosas o a veces inexactas
    • La salida son estimaciones con menos ruido y mayor precisión
  • La estimación puede corresponder a parámetros de estado del sistema que no se midieron ni observaron directamente
  • Se usa para estimar con alta precisión y en tiempo real tanto parámetros observables como no observables
  • Las estimaciones de alta precisión se aprovechan para predicciones y toma de decisiones más exactas
  • Por eso se usa con frecuencia en robótica y en sistemas en tiempo real donde se necesita información confiable

El problema que resuelve el filtro de Kalman

  • A partir de mediciones inexactas o ruidosas, estima con mayor precisión el estado de una variable, u otras variables que son difíciles de observar directamente
  • Algunas aplicaciones representativas son:
    • Seguimiento de objetos: usa la posición medida para estimar con mayor precisión la posición y velocidad de un objeto
    • Estimación de peso en una báscula digital: estima el peso de un objeto a partir de la presión aplicada sobre la superficie
    • Guiado, navegación y control: estima posición, velocidad y aceleración con sensores IMU y lo usa para controlar el siguiente movimiento
  • La fortaleza del filtro de Kalman no está tanto en suavizar mediciones, sino en su capacidad para estimar parámetros del sistema difíciles de medir
  • En sistemas en tiempo real, estimaciones más precisas se traducen en mejor control y mejores funciones

Entradas y salidas del ejemplo de seguimiento por radar

  • El ejemplo trata una situación de seguimiento por radar de aviones y objetos alrededor de un aeropuerto
  • El estado de trayectoria resultante se usa para mostrarse a operadores de control de tráfico aéreo que vigilan el espacio aéreo
  • El radar entrega mediciones de posición x, y en un sistema de coordenadas cartesianas 2D
    • Las mediciones se representan como el vector columna 2×1 z
    • La matriz de varianza-covarianza de las mediciones se representa como R
    • La marca de tiempo de la medición se representa como t
    • El subíndice m indica el parámetro medido y k indica el orden de la medición
  • El filtro de Kalman estima la posición y velocidad del objeto con base en las mediciones del radar
    • La estimación se representa como el vector columna 4×1 x
    • La matriz de varianza-covarianza de la estimación se representa como la matriz 4×4 P
    • La marca de tiempo de la estimación del estado se indica como T

Paso 1: inicialización del estado del sistema

  • La forma de inicialización del filtro de Kalman varía según la aplicación
  • En este ejemplo de seguimiento por radar, el estado del sistema se inicializa con la primera medición
  • La medición de entrada solo contiene información de posición, pero el estado del sistema de salida incluye la posición y velocidad del objeto
  • Cuando llega la primera medición, la única información conocida es la posición en ese instante
    • Después de la primera estimación, el estado estimado del sistema se fija con la posición de entrada
    • La covarianza del error del estado del sistema se fija con la precisión de posición de la primera medición

Paso 2: reinicialización del estado del sistema

  • Como para estimar la velocidad se necesita una segunda medición de posición, se reinicializa la estimación del estado del sistema
  • La velocidad se calcula con una aproximación lineal
    • La velocidad se calcula como distancia recorrida / tiempo transcurrido en el movimiento
  • La estimación actualizada del estado del sistema queda compuesta por la posición de la segunda medición y la velocidad calculada
  • La covarianza actualizada del error del estado del sistema incluye la precisión de posición de la segunda medición y la precisión aproximada de la velocidad
  • El valor aproximado de la precisión de la velocidad puede ajustarse mediante tuning después de pasar datos por el filtro
    • En el ejemplo, el término de varianza de la velocidad se fija en 10⁴
    • Este valor representa una gran incertidumbre sobre el valor del estado de velocidad
    • La unidad de velocidad en el ejemplo es m/s

Procesamiento iterativo después de la inicialización

  • Los dos primeros pasos son el proceso de inicializar y reinicializar la estimación del sistema con algunas mediciones
  • La forma de inicialización puede variar según la aplicación
  • El objetivo es contar con una estimación del estado del sistema que luego pueda actualizarse con las ecuaciones del filtro de Kalman
  • A partir de ahí, las nuevas mediciones se incorporan al filtro y se actualiza la estimación del estado

Paso 3: predicción de la estimación del estado del sistema

  • Cuando llega la tercera medición, la estimación del estado del sistema se propaga hacia adelante para alinearse en el tiempo con la medición
  • Esta alineación es necesaria para combinar la medición con la estimación del estado
  • Para la predicción se usa un modelo del sistema
  • En el ejemplo, se aproxima el cambio de posición del objeto durante el intervalo de tiempo con un modelo lineal de movimiento a velocidad constante
    • El modelo de velocidad constante asume que la aceleración es 0
  • La matriz de transición de estado representa esta ecuación de movimiento
    • Esta matriz se usa para propagar correctamente la estimación del estado y la matriz de covarianza del error del estado
  • Al propagar la estimación del estado a un instante futuro, aparece incertidumbre sobre ese estado, por lo que la covarianza del error aumenta

Matriz Q y matriz H

  • La matriz Q representa el ruido de proceso del modelo del sistema
    • El modelo del sistema es una aproximación
    • La precisión del modelo varía a lo largo de la vida del estado del sistema
    • La matriz Q representa esa incertidumbre y se suma al ruido del estado existente
    • En el ejemplo, la aceleración y desaceleración reales contribuyen a ese error
  • La matriz H es la matriz estado-medición, que transforma la estimación del estado del sistema del espacio de estados al espacio de medición
    • En algunas aplicaciones es una matriz compuesta por 0 y 1
    • En aplicaciones que usan un filtro de Kalman extendido (Extended Kalman Filter), se llena con ecuaciones diferenciales
    • La explicación relacionada continúa en el artículo Extended Kalman Filters
  • En este ejemplo, la matriz H es una matriz simple que reduce la estimación del estado y la covarianza del error para poder comparar solo los valores de posición, no toda la posición y velocidad

Paso 4: cálculo de la ganancia de Kalman

  • El filtro de Kalman calcula la ganancia de Kalman con cada nueva medición
  • La ganancia de Kalman determina cuánto influirá la medición de entrada en la estimación del estado del sistema
  • Si el ruido de la medición es muy grande, la ganancia de Kalman hará que se confíe más en la estimación actual del estado que en la información nueva pero imprecisa
  • El núcleo del algoritmo del filtro de Kalman está en ponderar adecuadamente la estimación actual y la nueva información medida para producir una estimación óptima

Paso 5: actualización del estado y de la covarianza del error

  • El filtro de Kalman usa la ganancia de Kalman para estimar el estado del sistema y la matriz de covarianza del error en el instante de la medición de entrada
  • La ganancia de Kalman se usa para dar el peso apropiado a la medición en dos cálculos
    • Cálculo de la nueva estimación del estado del sistema
    • Cálculo de la covarianza del error del estado del sistema
  • La estimación calculada del estado es el único historial de estado que conserva el filtro de Kalman
  • Gracias a esta característica, el filtro de Kalman puede implementarse incluso en dispositivos con bajas restricciones de memoria

Resumen

  • El filtro de Kalman es un proceso de propósito general para la estimación óptima de estado
  • Se usa en diversas aplicaciones donde se necesitan estimaciones precisas
  • Si se divide en pasos pequeños, el funcionamiento del filtro de Kalman se vuelve menos intimidante y más fácil de entender

1 comentarios

 
GN⁺ 2024-02-13
Comentarios de Hacker News
  • Cuando se habla del filtro de Kalman, no puede faltar el enlace a este excelente material de aprendizaje. Es un libro escrito como una colección de notebooks de Jupyter: https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Pyt...
    Este libro trata al filtro alfa-beta como una especie de hermano menor del filtro de Kalman “de verdad”, pero al leer bastante sobre algo parecido que necesitaba recientemente en el trabajo, me di cuenta de que el filtro alfa-beta y la familia Kalman están muy enfocados en la predicción del futuro cercano, mientras que lo que en realidad necesitaba era suavizado de datos pasados
    Así que empecé a leer sobre suavizado exponencial doble, y parecía encajar perfecto con mi caso de uso; pero mientras más profundizaba, más claro quedaba que al final era el mismo filtro alfa-beta con nombres de variables distintos
    Da la impresión de que toda esta área de las matemáticas se sostiene sobre unas cuantas teorías fundamentales compartidas, pero como distintos campos llegan al mismo sistema desde enfoques diferentes, cambian los nombres y la notación y eso oculta lo que tienen en común. Parece que en el centro de cosas como series de potencias, la constante natural, descenso por gradiente, filtros, sistemas de retroalimentación y teoría general de sistemas hay un núcleo intuitivo relativamente pequeño; si uno lograra captarlo, mucha matemática se conectaría de forma elegante

    • Cuando la gente se enoja porque los matemáticos usan variables de una sola letra, muchas veces se está perdiendo el punto. Los nombres cortos ayudan a concentrarse en la estructura de las ecuaciones y las relaciones, y facilitan reconocer patrones del tipo “espera, esto tiene la misma estructura que X que ya conozco, solo que con otro nombre”
      No es para ahorrar papel ni porque sea más fácil de escribir. En LaTeX, con un teclado en inglés, escribir letras griegas con superíndices y subíndices no es más fácil que escribir palabras. La idea es transmitir al lector cierto tipo de información específica que de otra manera sería difícil comunicar
      La notación matemática parece texto, pero en esencia es una notación bastante visual, y las palabras largas terminan tapando esa imagen
    • Lo que estás buscando se parece más a la teoría de sistemas dinámicos lineales o no lineales. Por desgracia, no hay un único núcleo intuitivo respaldado por una notación consistente, sino varias perspectivas inconsistentes entre sí
      Si tomas en serio cursos de control y de señales/sistemas, esa intuición se te queda grabada, y terminas aprendiendo las matemáticas y la terminología sin obsesionarte con una convención de notación en particular. La verdadera intuición es que “todo es un filtro”, y el resto es analizar y sintetizar esa idea
    • Probablemente te convenga revisar Probabilistic Robotics de Dieter Fox, Sebastian Thrun y Wolfram Burgard. Es un libro que organiza varios temas relacionados con Kalman desde una perspectiva bayesiana y con una notación consistente
      A medida que AI/ML ha crecido, las ideas de la teoría clásica de control también se están combinando con aprendizaje por refuerzo
    • Si Q y R son constantes, como suele pasar, entonces la ganancia converge rápido y el filtro de Kalman se vuelve un filtro exponencial con etapa de predicción. Para mucha gente, eso es mucho más fácil de entender y además encaja mejor con cómo realmente se usa
      Normalmente Q y R se ajustan a mano hasta que “se ven bien” y luego ya no se vuelven a cambiar. Además, en vez de ajustar a mano varios valores de Q y R, basta con ajustar una sola ganancia
    • Hace tiempo tuve una idea muy parecida. El truco es que muchos filtros al final se reducen a alfa/beta, y el filtro de Kalman puede verse como una forma de generar esas constantes cuando conoces bien un modelo lineal y la varianza del ruido de medición
      Si el ruido de las mediciones siempre es el mismo, con el tiempo converge a constantes; solo se vuelve especialmente útil cuando puedes conocer bien la precisión de la medición y aun así esta cambia mucho
  • Hace poco me tocó implementar un filtro de Kalman, y de verdad fue muy difícil encontrar buen material explicado en un lenguaje que yo, como desarrollador, pudiera entender. Después de aprenderlo durante más o menos un mes, escribí dos artículos, y quizá le sirvan a alguien: https://www.splinter.com.au/2023/12/14/the-kalman-filter-for..., https://www.splinter.com.au/2023/12/15/the-kalman-filter-wit...
    Irónicamente, desde la perspectiva de desarrollador, solo entendí las matemáticas después de implementarlo yo mismo. Parece una forma de aprender en la que vas construyendo sobre cosas que ya conoces; me pregunto si existe un término para eso

  • Siempre he pensado que las matemáticas serían mucho más fáciles de aprender si usaran nombres de variables descriptivos. Al menos en un medio interactivo como la web, podrían poner aunque sea tooltips. Cuando estudio matemáticas, paso el 90% del tiempo buscando qué significa cada símbolo
    También aquí me confunde cuando dicen que el subíndice “indica el orden de las mediciones”: no queda claro de qué orden hablan. Supongo que quieren decir el índice. Hace mucho que no toco el filtro de Kalman

    • Lo que la gente suele olvidar es que la notación matemática está diseñada para que sea fácil seguir las manipulaciones algebraicas. No pretende que el significado sea evidente solo por ver la notación, y quienes más tienden a pensar que una ecuación como E=mc^2 debería tener sentido por sí misma suelen ser los físicos
      Cuanto más pura se vuelve la matemática, más corto suele ser el alcance de la mayoría de las variables. Normalmente una variable se define justo antes de usarse, y su alcance no sale de esa prueba o derivación
      Aun así, algunas elecciones de este texto son simplemente raras. Por ejemplo, usar P a la vez como variable y como índice, y usar P para la matriz de covarianza aunque la matriz de precisión sea justamente la inversa de la matriz de covarianza
    • Esto es lo que más odio al leer artículos. Los autores intentan sonar abstractos y académicos, pero solo logran volverse desesperantemente ambiguos. Para que una oración tenga sentido, hay que incluir sujeto y objeto
      La parte más irritante de los artículos de investigación es justamente esta ambigüedad. Hay que ser necesariamente claros. Hay que usar descripciones absolutas, no relativas. No deberías decir “mira a la derecha”. Yo podría estar mirando a la izquierda
      Si escribes “después de rotar el prisma, el cono de luz...”, falta en qué dirección fue la rotación. Si fue hacia la izquierda o hacia la derecha, en horizontal o hacia arriba y abajo, rápido o lento. La persona que escribe tiene todos esos elementos clave dibujados en su cabeza, pero el lector no puede leerle la mente
    • Totalmente de acuerdo. En la misma línea, he pensado que el mejor libro de matemáticas que nadie ha escrito todavía sería uno que organizara bien la notación y el significado de las variables y curara con claridad teoremas de varios campos
    • El orden del que se habla aquí es el índice temporal al que corresponde cada valor. Por ejemplo, x_3 es el estado en el tercer paso de tiempo
      El subíndice “p” probablemente significa prediction, es decir, predicción. x_p en el tiempo 3 es el estado esperado en el tiempo 4. Pero cuando realmente llega el tiempo 4, se calcula x_4 incorporando la nueva medición
      Para ser claros, este x_4 es distinto del x_p calculado en el tiempo 3. Las predicciones siempre se equivocan un poco
    • Yo diría que los nombres de variables ya fueron elegidos para que fueran descriptivos. Nadie los escoge a propósito para volverlos más opacos o más difíciles de seguir
      El problema es que quien recién empieza todavía no domina los conceptos ni la notación estándar de cada área del problema, y por eso sigue existiendo el dolor de subirse a un tema nuevo
  • El filtro de Kalman puede ser uno de esos casos raros en matemáticas donde la versión simplificada está tan simplificada que casi ya no se parece al original
    Lo que realmente hace es tomar una medición, simular los posibles estados futuros, luego combinar esa información con la siguiente medición y repetir
    Por ejemplo, podrías tomar varias fotos de una pelota de tenis, estimar su posición y velocidad a partir de la primera imagen, simular hacia dónde irá, y luego compararlo con la siguiente foto para ver qué estimación está más cerca de la verdad. O, de una forma más antigua, puedes pensar en medir la altura del sol para trazar una línea de posiciones posibles en un mapa y compararla con el punto donde originalmente creías estar
    Claro, el cálculo exacto es prácticamente imposible en la realidad. Por eso se simplifica mediante muestreo. Aun así sigue siendo difícil, así que se asume que la distribución se parece en cierta medida a una distribución gaussiana. Si además se simplifica suponiendo que los cambios del sistema son una transformación lineal, se obtiene el filtro de Kalman del que se habla aquí
    Sería sorprendente poder entender qué está pasando realmente mirando solo el álgebra lineal

    • Curiosamente, muchas explicaciones del filtro de Kalman empiezan con “¡Es muy simple!”. El texto original también tiene ese formato
      Esta explicación fue la primera que de verdad me dio una intuición de lo que está pasando. Para alguien de computación como yo, hasta el nombre resulta bastante engañoso, porque no es un filtro en el sentido de procesamiento de streams o de SQL
    • Se puede decir todavía más simple. De hecho, el álgebra lineal es más fácil
      El filtro de Kalman intenta estimar la entrada oculta que produjo las mediciones. Para hacerlo, plantea el problema de minimizar respecto de x [medición_real - medición_esperada(x)]^2/s^2, donde s es la sigma del ruido
      Esto sale del problema de estimación de estado de maximizar la verosimilitud de observar la medición_real respecto de x. Porque en la función de verosimilitud, el término importante es solo -([x-expected(x)]/s)^2. Basta con mirar el exponente de una distribución normal, o de hecho de casi cualquier distribución exponencial
      Como medición_real es constante, si la función medición_esperada es lineal, se resuelve directamente como una optimización convexa. Derivas, igualas a 0 y resuelves, y así sale el paso de actualización del filtro de Kalman
      Si la función es no lineal, eso equivale a linealizar la ecuación, minimizarla y devolver la solución de esa “linealización falsa”: básicamente, un paso de Newton-Raphson. Es cálculo y álgebra lineal de licenciatura, solo que nadie te lo dice así
      Pero esto también es completamente incorrecto. Es un hack de los años 60 para maximizar la función de verosimilitud con este tipo de linealización recursiva de un solo paso. Por una mala lectura del límite de Cramér-Rao, varias generaciones de ingenieros han creído que esto es óptimo, pero en realidad no lo es
      Hoy tenemos 10,000 veces más recursos de cómputo, y se obtiene mejor rendimiento si se plantean y resuelven ecuaciones no lineales con varios pasos de Newton-Raphson, o si se mantiene un historial largo de mediciones y se resuelve todo ese bloque con varios pasos de Newton-Raphson, o si se usa una representación de mezcla gaussiana para admitir funciones de medición multimodales
      Estas cosas han sido bien tratadas en la investigación sobre estimación de estado desde los años 80 hasta hoy, pero los libros de texto siguen como si hubieran quedado grabados en piedra en 1972
      El límite de Cramér-Rao solo está definido cuando todas las funciones de verosimilitud de medición pueden linealizarse en el estado verdadero, algo que solo es posible asintóticamente en un bloque que conserve todas las mediciones, imposible antes de tiempo infinito e imposible también con un filtro recursivo
  • Entre las explicaciones antiguas, este texto estaba bueno: https://www.bzarg.com/p/how-a-kalman-filter-works-in-picture..., https://news.ycombinator.com/item?id=13449229

  • Si de verdad necesitas un filtro de Kalman, probablemente sí puedas leer y entender este texto, el artículo de Wikipedia o el código de implementación (https://github.com/LdDl/kalman-rs/blob/master/src/kalman/kal...)
    Pero, por experiencia, casi todo el mundo aprende mejor con ejemplos, como aprendiz visual. Por eso sorprende que el tutorial de la mitad de la página no meta números de ejemplo en las fórmulas. Puede que se me haya pasado, pero los diagramas tampoco empiezan hasta después de una página entera de texto que dice “qué es un filtro de Kalman”, y hasta esos diagramas son más fórmulas

    • En otro lado decían que las convenciones de nombres de variables son un obstáculo para aprender y entender temas matemáticos, y también coincido con esa perspectiva. Pero me identifico todavía más con el problema que aparece aquí
      Esto pasa tan seguido que hasta sorprende. En una versión más leve, el mismo problema aparece en bibliotecas de software que no incluyen ejemplos de código
  • Lo que sí me hizo clic fue que, si combinas dos distribuciones de medición inciertas, o sea distribuciones con varianza grande, obtienes una medición más confiable, es decir, una distribución más angosta
    Si vuelves a combinar esa medición más confiable con la siguiente medición y repites el proceso, eso ya es exactamente un filtro de Kalman

  • Entre los videos que explican KF, este estuvo realmente bueno. Lo entendí mejor que con el material del post original: https://www.youtube.com/watch?v=CaCcOwJPytQ

  • Mi difunto padre usó este filtro con frecuencia durante toda su carrera, desde la época en que apenas se estaba inventando. Trabajaba con radares y sistemas de guía de misiles

  • Cierra los ojos y camina un momento. Imagina dónde estás, y luego abre los ojos: ¿tu posición real es distinta de la que creías?
    Ese último paso, o sea usar una observación para actualizar tu creencia sobre las variables de estado, es lo que hace el filtro de Kalman