Problemas modernos de la ciencia y la educación. Interpolación de la trayectoria del módulo GPS en función de los resultados de las mediciones de coordenadas.

De alguna manera sucedió que me gustan mucho todo tipo de algoritmos que tienen una justificación matemática clara y lógica) Pero a menudo su descripción en Internet está tan sobrecargada de fórmulas y cálculos que es simplemente imposible entender el significado general del algoritmo. Pero comprender la esencia y el principio de funcionamiento de un dispositivo/mecanismo/algoritmo es mucho más importante que memorizar fórmulas enormes. Por más banal que parezca, memorizar incluso cientos de fórmulas no te ayudará en nada si no sabes cómo y dónde aplicarlas 😉 En realidad, ¿para qué sirve todo esto? Decidí hacer una descripción de algunos algoritmos que Tuve que encontrarme en la práctica. Intentaré no sobrecargarme con cálculos matemáticos para que el material sea comprensible y fácil de leer.

Y hoy hablaremos de filtro de kalman, averigüemos qué es, por qué y cómo se usa.

Empecemos con un pequeño ejemplo. Nos enfrentamos a la tarea de determinar las coordenadas de un avión en vuelo. Además, naturalmente, la coordenada (denotémosla) debe determinarse con la mayor precisión posible.

Instalamos de antemano un sensor en el avión, que nos proporciona los datos de ubicación necesarios, pero, como todo en este mundo, nuestro sensor es imperfecto. Por tanto, en lugar del valor obtenemos:

¿Dónde está el error del sensor, es decir, una variable aleatoria? Así, a partir de las lecturas inexactas de los equipos de medición, debemos obtener un valor de coordenadas () que se acerque lo más posible a la posición real de la aeronave.

La tarea está planteada, pasemos a resolverla.

Háganos saber la acción de control () gracias a la cual vuela el avión (el piloto nos dijo qué palancas tira 😉). Luego, conociendo la coordenada en el k-ésimo paso, podemos obtener el valor en el paso (k+1):

¡Parecería que esto es lo que necesitamos! Y aquí no se necesita ningún filtro de Kalman. Pero no todo es tan sencillo. En realidad, no podemos tener en cuenta todos los factores externos que afectan al vuelo, por lo que la fórmula toma la siguiente forma:

¿Dónde está el error provocado por influencias externas, imperfecciones del motor, etc.?

Entonces, ¿qué pasa? En el paso (k+1) tenemos, en primer lugar, una lectura del sensor inexacta y, en segundo lugar, un valor calculado de forma inexacta obtenido a partir del valor en el paso anterior.

La idea del filtro de Kalman es obtener una estimación precisa de la coordenada deseada (para nuestro caso) a partir de dos valores inexactos (tomándolos con diferentes coeficientes de ponderación). En general, el valor medido puede ser absolutamente cualquier cosa (temperatura, velocidad...). Esto es lo que sucede:

Mediante cálculos matemáticos podemos obtener una fórmula para calcular el coeficiente de Kalman en cada paso, pero, como se acordó al inicio del artículo, no profundizaremos en los cálculos, sobre todo porque en la práctica se ha establecido que el coeficiente de Kalman siempre tiende a un cierto valor a medida que k aumenta. Obtenemos la primera simplificación de nuestra fórmula:

Ahora supongamos que no hay conexión con el piloto y no conocemos la acción de control. Parecería que en este caso no podemos utilizar el filtro de Kalman, pero no es así 😉 Simplemente "tiramos" de la fórmula lo que no sabemos, luego

Obtenemos la fórmula de Kalman más simplificada, que, sin embargo, a pesar de simplificaciones tan "duras", hace frente perfectamente a su tarea. Si presenta los resultados gráficamente, obtendrá algo como esto:

Si nuestro sensor es muy preciso, entonces, naturalmente, el coeficiente de ponderación K debería ser cercano a la unidad. Si la situación es la contraria, es decir, nuestro sensor no es muy bueno, entonces K debería estar más cerca de cero.

Probablemente eso sea todo, así de simple, ¡acabamos de descubrir el algoritmo de filtrado de Kalman! Espero que el artículo haya sido útil y comprensible =)

El filtro de Kalman es probablemente el algoritmo de filtrado más popular utilizado en muchos campos de la ciencia y la tecnología. Por su sencillez y eficacia se puede encontrar en receptores GPS, procesadores de datos de sensores, en la implementación de sistemas de control, etc.

Hay muchos artículos y libros en Internet sobre el filtro de Kalman (principalmente en inglés), pero estos artículos tienen una barrera de entrada bastante alta y quedan muchos lugares vagos, aunque en realidad es un algoritmo muy claro y transparente; . Intentaré hablar de ello en un lenguaje sencillo, con un aumento gradual de la complejidad.

¿Para qué es?

Cualquier dispositivo de medición tiene algún error; puede verse influenciado por una gran cantidad de influencias externas e internas, lo que lleva al hecho de que la información que contiene es ruidosa. Cuanto más ruidosos sean los datos, más difícil será procesar dicha información.

Un filtro es un algoritmo de procesamiento de datos que elimina el ruido y la información innecesaria. En el filtro de Kalman, es posible especificar información a priori sobre la naturaleza del sistema, la relación de las variables y, en base a esto, construir una estimación más precisa, pero incluso en el caso más simple (sin ingresar información a priori) da excelentes resultados.

Consideremos un ejemplo simple: supongamos que necesitamos controlar el nivel de combustible en el tanque. Para hacer esto, se instala un sensor capacitivo en el tanque; es muy fácil de mantener, pero tiene algunas desventajas, por ejemplo, la dependencia del combustible que se llena (la constante dieléctrica del combustible depende de muchos factores, por ejemplo, la temperatura); ), y la gran influencia del “embotellamiento” en el tanque. Como resultado, la información que contiene representa una típica "sierra" con una amplitud decente. Estos tipos de sensores suelen instalarse en equipos de minería pesados ​​(no se deje confundir por el volumen del tanque):

filtro de kalman

Hagamos una pequeña digresión y familiaricémonos con el algoritmo en sí. El filtro de Kalman utiliza un modelo dinámico del sistema (por ejemplo, una ley física de movimiento), entradas de control conocidas y múltiples mediciones secuenciales para formar una estimación de estado óptima. El algoritmo consta de dos fases repetidas: predicción y ajuste. En la primera etapa, se calcula la predicción del estado en el siguiente momento (teniendo en cuenta la inexactitud de su medición). En el segundo, la nueva información del sensor corrige el valor predicho (teniendo en cuenta también la inexactitud y el ruido de esta información):

Las ecuaciones se presentan en forma matricial; si no sabes álgebra lineal, está bien, lo que sigue es una versión simplificada sin matrices para el caso con una variable. En el caso de una variable, las matrices degeneran en valores escalares.

Primero comprendamos la notación: el subíndice denota un momento en el tiempo: k - actual, (k-1) - anterior, el signo menos en el superíndice indica que este previsto valor intermedio.

Las descripciones de las variables se presentan en las siguientes imágenes:

Es posible describir durante mucho tiempo y de manera tediosa lo que significan todas estas misteriosas matrices de transición, pero, en mi opinión, es mejor intentar aplicar el algoritmo en un ejemplo real, para que los significados abstractos adquieran un significado real.

Probemoslo en acción

Volvamos al ejemplo con el sensor de nivel de combustible, dado que el estado del sistema está representado por una variable (el volumen de combustible en el tanque), las matrices degeneran en ecuaciones ordinarias:

Definición de un modelo de proceso
Para aplicar el filtro es necesario determinar las matrices/valores de las variables que determinan la dinámica del sistema y las dimensiones F, B y H:

F- una variable que describe la dinámica del sistema, en el caso del combustible - puede ser un coeficiente que determina el consumo de combustible en ralentí durante el tiempo de muestreo (el tiempo entre pasos del algoritmo). Sin embargo, además del consumo de combustible, también hay gasolineras... así que por simplicidad pondremos esta variable en 1 (es decir, indicamos que el valor previsto será igual al estado anterior).

B- variable que determina la aplicación de la acción de control. Si tuviéramos información adicional sobre la velocidad del motor o el grado de presión sobre el pedal del acelerador, entonces este parámetro determinaría cómo cambiaría el consumo de combustible durante el período de muestreo. Como no hay acciones de control en nuestro modelo (no hay información sobre ellas), aceptamos B = 0.

h- una matriz que define la relación entre las mediciones y el estado del sistema, por ahora, sin explicación, aceptaremos esta variable también igual a 1;

Definición de propiedades de suavizado
R- El error de medición se puede determinar probando instrumentos de medición y determinando el error de su medición.

q- determinar el ruido del proceso es una tarea más difícil, ya que es necesario determinar la variación del proceso, lo cual no siempre es posible. En cualquier caso, puede seleccionar este parámetro para proporcionar el nivel de filtración requerido.

Implementémoslo en código.
Para disipar la confusión restante, implementemos un algoritmo simplificado en C# (sin matrices ni acciones de control):

clase KalmanFilterSimple1D
{
público doble X0 (obtener; conjunto privado;) // estado previsto
público doble P0 ( get; conjunto privado; ) // covarianza prevista

Public double F ( get; private set; ) // factor del valor real al valor real anterior
público doble Q ( get; conjunto privado; ) // medición de ruido
público doble H ( get; conjunto privado; ) // factor del valor medido al valor real
público doble R ( get; conjunto privado; ) // ruido ambiental

Doble Estado público ( get; set privado; )
Covarianza doble pública ( get; conjunto privado; )

Público KalmanFilterSimple1D (doble q, doble r, doble f = 1, doble h = 1)
{
Q = q;
R = r;
F = f;
H = h;
}

SetState público vacío (doble estado, doble covarianza)
{
Estado = estado;
Covarianza = covarianza;
}

Vacío público Correcto (dato doble)
{
//actualización de tiempo - predicción
X0 = F*Estado;
P0 = F*Covarianza*F + Q;

//actualización de medidas - corrección
var K = H*P0/(H*P0*H + R);
Estado = X0 + K*(datos - H*X0);
Covarianza = (1 - K*H)*F;
}
}

// Solicitud...

Var combustibleData = GetData();
var filtrado = nueva Lista();

Var kalman = nuevo KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // establece F, H, Q y R
kalman.SetState(fuelData, 0.1); // Establece los valores iniciales de Estado y Covarianza
foreach(var d en fuelData)
{
kalman.Correcto(d); // Aplicar el algoritmo

Filtrado.Agregar(kalman.Estado); //Guardar el estado actual
}

El resultado del filtrado con estos parámetros se muestra en la figura (para ajustar el grado de suavizado, puede cambiar los parámetros Q y R):

La parte más interesante queda fuera del alcance del artículo: aplicar el filtro de Kalman para varias variables, especificar la relación entre ellas y generar automáticamente valores para variables no observadas. Intentaré continuar con el tema en cuanto tenga tiempo.

Espero que la descripción no haya sido demasiado tediosa y complicada, si tienes alguna duda o aclaración bienvenido a los comentarios)

1

Se llevó a cabo un estudio sobre el uso del filtro de Kalman en los desarrollos modernos de sistemas de navegación integrados. Se proporciona y analiza un ejemplo de construcción de un modelo matemático que utiliza un filtro de Kalman extendido para mejorar la precisión de la determinación de las coordenadas de vehículos aéreos no tripulados. Se considera un filtro parcial. Se realiza una breve revisión de trabajos científicos que utilizan este filtro para mejorar la confiabilidad y tolerancia a fallas de los sistemas de navegación. Este artículo nos permite concluir que el uso del filtro de Kalman en los sistemas de localización de vehículos aéreos no tripulados se practica en muchos desarrollos modernos. Hay una gran cantidad de variaciones y aspectos de este uso, que también proporcionan resultados tangibles en el aumento de la precisión, especialmente en caso de falla de los sistemas de navegación por satélite estándar. Este es el factor principal de la influencia de esta tecnología en diversos campos científicos relacionados con el desarrollo de sistemas de navegación precisos y tolerantes a fallos para diversas aeronaves.

filtro de kalman

navegación

vehículo aéreo no tripulado (UAV)

1. Makarenko G.K., Aleshechkin A.M. Estudio de un algoritmo de filtrado en la determinación de las coordenadas de un objeto mediante señales de sistemas de radionavegación por satélite // Informes TUSUR. – 2012. – N° 2 (26). – págs. 15-18.

2. Bar-Shalom Y., Li X. R., Kirubarajan T. Estimación con aplicaciones

al Seguimiento y Navegación // Teoría de Algoritmos y Software. – 2001. – Vol. 3. – Pág. 10-20.

3. Bassem I.S. Navegación basada en visión (VBN) de vehículos aéreos no tripulados (UAV) // UNIVERSIDAD DE CALGARY. – 2012. – Vol. 1.- págs. 100-127.

4. Conte G., Doherty P. Un sistema de navegación UAV integrado basado en la coincidencia de imágenes aéreas // Conferencia aeroespacial. – 2008. –Vol. 1.- pág. 3142-3151.

5. Guoqiang M., Drake S., Anderson B. Diseño de un filtro Kalman extendido para localización de uav // En Información, Decisión y Control. – 2007. – Vol. 7. – págs. 224–229.

6. Optimización de trayectoria de Ponda S.S para la localización de objetivos utilizando pequeños vehículos aéreos no tripulados // Instituto de Tecnología de Massachusetts. – 2008. – Vol. 1. – Pág. 64-70.

7. Wang J., Garrat M., Lambert A. Integración de sensores gps/ins/visión para navegar vehículos aéreos no tripulados // IAPRS&SIS. – 2008. – Vol. 37. – pág. 963-969.

Una de las tareas urgentes de la navegación moderna con vehículos aéreos no tripulados (UAV) es aumentar la precisión en la determinación de las coordenadas. Este problema se resuelve utilizando varias opciones para integrar sistemas de navegación. Una de las opciones de integración modernas es la combinación de navegación GPS/GLONASS con un filtro Kalman extendido, que evalúa recursivamente la precisión utilizando mediciones incompletas y ruidosas. Por el momento, existen y se están desarrollando varias variaciones del filtro de Kalman extendido, incluido un número diverso de variables de estado. En este trabajo mostraremos cuán efectivo puede ser su uso en desarrollos modernos. Consideremos una de las representaciones características de dicho filtro.

Construyendo un modelo matemático

En este ejemplo, solo hablaremos del movimiento del UAV en el plano horizontal, de lo contrario consideraremos el llamado problema de localización 2d. En nuestro caso, esto se justifica por el hecho de que en muchas situaciones prácticas, el UAV puede permanecer aproximadamente a la misma altitud. Esta suposición se utiliza ampliamente para simplificar el modelado de la dinámica de las aeronaves. El modelo dinámico del UAV se especifica mediante el siguiente sistema de ecuaciones:

donde () son las coordenadas del UAV en el plano horizontal en función del tiempo, la dirección del UAV, la velocidad angular del UAV y la velocidad terrestre del UAV, funciones y se considerarán constantes. Son mutuamente independientes, con covarianzas conocidas. y , iguales a y respectivamente, y se utilizan para modelar cambios en la aceleración del UAV causados ​​por el viento, maniobras del piloto, etc. Los valores y se derivan de la velocidad angular máxima del UAV y los valores experimentales de los cambios en la velocidad lineal del UAV, - símbolo de Kronecker.

Este sistema de ecuaciones será aproximado debido a la no linealidad del modelo y la presencia de ruido. El método de aproximación más sencillo en este caso es el método de aproximación de Euler. A continuación se muestra un modelo discreto del sistema de propulsión dinámica del UAV.

un vector de estado de filtro de Kalman discreto que permite aproximar el valor de un vector de estado continuo. ∆ - intervalo de tiempo entre k y k+1 mediciones. () y () son secuencias de valores de ruido blanco gaussiano con media cero. Matriz de covarianza para la primera secuencia:

De manera similar, para la segunda secuencia:

Habiendo realizado las sustituciones apropiadas en las ecuaciones del sistema (2), obtenemos:

Secuencias y son mutuamente independientes. También son secuencias de ruido blanco gaussiano de media cero con matrices de covarianza y respectivamente. La ventaja de este formulario es que muestra el cambio en el ruido discreto entre cada medición. Como resultado, obtenemos el siguiente modelo dinámico discreto:

(3)

Ecuación para:

= + , (4)

donde, xey son las coordenadas del UAV en el instante de tiempo k, y una secuencia gaussiana de parámetros aleatorios con valor medio cero, que se utiliza para establecer el error. Se supone que esta secuencia es independiente de () y ().

Las expresiones (3) y (4) sirven como base para estimar la ubicación del UAV, donde las k-ésimas coordenadas se obtienen utilizando el filtro de Kalman extendido. Modelizar el fallo de los sistemas de navegación en relación con este tipo de filtro demuestra su importante eficacia.

Para mayor claridad, pongamos un pequeño ejemplo sencillo. Deje que un UAV vuele uniformemente acelerado, con cierta aceleración constante a.

Donde, x es la coordenada del UAV en el momento t y δ es alguna variable aleatoria.

Supongamos que tenemos un sensor GPS que recibe datos sobre la ubicación de una aeronave. Presentemos el resultado de modelar este proceso en el paquete de software MATLAB.

Arroz. 1. Filtrado de lecturas de sensores mediante un filtro Kalman

En la figura. 1 muestra cuán efectivo puede ser el uso del filtrado de Kalman.

Sin embargo, en situaciones reales, las señales suelen tener una dinámica no lineal y un ruido anormal. Es en tales casos que se utiliza el filtro de Kalman extendido. Si las variaciones del ruido no son demasiado grandes (es decir, la aproximación lineal es adecuada), el uso de un filtro de Kalman extendido proporciona una solución al problema con alta precisión. Sin embargo, en el caso de que el ruido no sea gaussiano, no se puede utilizar el filtro de Kalman extendido. En este caso se suele utilizar un filtro parcial, que utiliza métodos integrales numéricos basados ​​en métodos de Monte Carlo con cadenas de Markov.

filtro parcial

Imaginemos uno de los algoritmos que desarrolla las ideas del filtro de Kalman extendido: un filtro parcial. El filtrado parcial es una técnica de filtrado subóptima que funciona realizando una agrupación de Monte Carlo en un conjunto de partículas que representan la distribución de probabilidad del proceso. Aquí, una partícula es un elemento tomado de la distribución previa del parámetro que se estima. La idea básica de un filtro parcial es que se puede utilizar una gran cantidad de partículas para representar una estimación de la distribución. Cuanto mayor sea el número de partículas utilizadas, con mayor precisión el conjunto de partículas representará la distribución anterior. El filtro de partículas se inicializa colocando en él N partículas a partir de una distribución previa de los parámetros que queremos estimar. El algoritmo de filtración implica hacer pasar estas partículas a través de un sistema especial y luego pesarlas utilizando la información obtenida al medir estas partículas. Las partículas resultantes y sus masas asociadas representan la distribución posterior del proceso de estimación. El ciclo se repite para cada nueva medición y los pesos de las partículas se actualizan para representar la distribución posterior. Uno de los principales problemas con el enfoque tradicional de filtración de partículas es que el enfoque normalmente da como resultado que unas pocas partículas tengan pesos muy grandes, a diferencia de la mayoría de las demás que tienen muy poco peso. Esto conduce a la inestabilidad de la filtración. Este problema se puede resolver introduciendo una tasa de muestreo en la que se toman N partículas nuevas de una distribución formada por partículas antiguas. El resultado de la estimación se obtiene tomando una muestra del valor medio de un conjunto de partículas. Si tenemos varias muestras independientes, entonces la media muestral será una estimación precisa de la media, lo que dará la varianza final.

Incluso si el filtro de partículas es subóptimo, cuando el número de partículas tiende a infinito, la eficiencia del algoritmo se acerca a la regla de estimación bayesiana. Por tanto, es recomendable tener la mayor cantidad de partículas posible para obtener el mejor resultado. Desafortunadamente, esto conduce a un fuerte aumento en la complejidad de los cálculos y, en consecuencia, obliga a un compromiso entre precisión y velocidad de cálculo. Por lo tanto, la cantidad de partículas debe seleccionarse en función de los requisitos de la tarea de evaluación de la precisión. Otro factor importante para el funcionamiento del filtro de partículas es la limitación de la frecuencia de muestreo. Como se mencionó anteriormente, la frecuencia de muestreo es un parámetro importante para el filtrado de partículas y, sin ella, el algoritmo eventualmente degenerará. La idea es que si los pesos se distribuyen de manera demasiado desigual y el umbral de muestreo está a punto de alcanzarse, entonces las partículas de bajo peso se descartan y el conjunto restante forma una nueva densidad de probabilidad de la cual se pueden tomar nuevas muestras. Elegir un umbral de frecuencia de muestreo es una tarea bastante difícil, porque una frecuencia demasiado alta hace que el filtro sea demasiado sensible al ruido y una frecuencia demasiado baja provoca un gran error. También un factor importante es la densidad de probabilidad.

En general, el algoritmo de filtrado de partículas muestra un buen rendimiento en el cálculo de la posición para objetivos estacionarios y en el caso de objetivos que se mueven relativamente lentamente con una dinámica de aceleración desconocida. En general, el algoritmo de filtrado de partículas es más estable que el filtro de Kalman extendido y menos propenso a degenerarse y fallas graves. En casos de distribución no lineal y no gaussiana, este algoritmo de filtrado muestra muy buena precisión al determinar la ubicación del objetivo, mientras que el algoritmo de filtrado de Kalman extendido no se puede utilizar en tales condiciones. Las desventajas de este enfoque incluyen su mayor complejidad en relación con el filtro de Kalman extendido, así como el hecho de que no siempre es obvio cómo elegir los parámetros correctos para este algoritmo.

Investigación prometedora en esta área

El uso de un modelo de filtro de Kalman, similar al que presentamos, se puede ver en, donde se utiliza para mejorar el rendimiento de un sistema integrado (GPS + modelo de visión por computadora para emparejar con una base geográfica), y la situación de También se simula el fallo de los equipos de navegación por satélite. Usando el filtro de Kalman, los resultados del sistema en caso de falla mejoraron significativamente (por ejemplo, el error al determinar la altura se redujo aproximadamente dos veces y los errores al determinar las coordenadas a lo largo de diferentes ejes se redujeron casi 9 veces) . También se proporciona un uso similar del filtro de Kalman.

Un problema interesante desde el punto de vista de un conjunto de métodos se resuelve en . También utiliza un filtro Kalman de 5 estados, con algunas diferencias en la construcción del modelo. El resultado obtenido supera el resultado del modelo que presentamos debido al uso de medios de integración adicionales (se utilizan fotografías e imágenes térmicas). El uso del filtro de Kalman en este caso nos permite reducir el error en la determinación de las coordenadas espaciales de un punto determinado a un valor de 5,5 m.

Conclusión

En conclusión, observamos que el uso del filtro Kalman en los sistemas de localización de vehículos aéreos no tripulados se practica en muchos desarrollos modernos. Existe una gran cantidad de variaciones y aspectos de este uso, hasta el uso simultáneo de varios filtros similares con diferentes factores de estado. Una de las direcciones más prometedoras para el desarrollo de los filtros de Kalman parece ser la creación de un filtro modificado cuyos errores se representarán mediante ruido de colores, lo que lo hará aún más valioso para resolver problemas reales. También es de gran interés en este campo un filtro parcial que puede filtrar el ruido no gaussiano. Esta diversidad y los resultados tangibles en la mejora de la precisión, especialmente en caso de falla de los sistemas de navegación por satélite estándar, son los principales factores del impacto de esta tecnología en diversos campos científicos relacionados con el desarrollo de sistemas de navegación precisos y tolerantes a fallas para diversas aeronaves. .

Revisores:

Labunets V.G., Doctor en Ciencias Técnicas, Profesor, Profesor del Departamento de Fundamentos Teóricos de Ingeniería de Radio, Universidad Federal de los Urales que lleva el nombre del primer presidente de Rusia, B.N. Yeltsin, Ekaterimburgo;

Ivanov V.E., Doctor en Ciencias Técnicas, Profesor, Director. Departamento de Tecnología y Comunicaciones de la Universidad Federal de los Urales que lleva el nombre del primer presidente de Rusia B.N. Yeltsin, Ekaterimburgo.

Enlace bibliográfico

Gavrílov A.V. UTILIZACIÓN DEL FILTRO DE KALMAN PARA RESOLVER PROBLEMAS DE REFINAR COORDENADAS DE UAV // Problemas modernos de la ciencia y la educación. – 2015. – No. 1-1.;
URL: http://science-education.ru/ru/article/view?id=19453 (fecha de acceso: 06/04/2019). Llamamos su atención sobre las revistas publicadas por la editorial "Academia de Ciencias Naturales" 25 de marzo de 2012 a las 20:42

Filtro Kalman - Introducción

  • algoritmos,
  • Programación

El filtro de Kalman es probablemente el algoritmo de filtrado más popular utilizado en muchos campos de la ciencia y la tecnología. Por su sencillez y eficacia se puede encontrar en receptores GPS, procesadores de datos de sensores, en la implementación de sistemas de control, etc.

Hay muchos artículos y libros en Internet sobre el filtro de Kalman (principalmente en inglés), pero estos artículos tienen una barrera de entrada bastante alta y quedan muchos lugares vagos, aunque en realidad es un algoritmo muy claro y transparente; . Intentaré hablar de ello en un lenguaje sencillo, con un aumento gradual de la complejidad.

¿Para qué es?

Cualquier dispositivo de medición tiene algún error; puede verse influenciado por una gran cantidad de influencias externas e internas, lo que lleva al hecho de que la información que contiene es ruidosa. Cuanto más ruidosos sean los datos, más difícil será procesar dicha información.

Un filtro es un algoritmo de procesamiento de datos que elimina el ruido y la información innecesaria. En el filtro de Kalman, es posible especificar información a priori sobre la naturaleza del sistema, la relación de las variables y, en base a esto, construir una estimación más precisa, pero incluso en el caso más simple (sin ingresar información a priori) da excelentes resultados.

Consideremos un ejemplo simple: supongamos que necesitamos controlar el nivel de combustible en el tanque. Para hacer esto, se instala un sensor capacitivo en el tanque; es muy fácil de mantener, pero tiene algunas desventajas, por ejemplo, la dependencia del combustible que se llena (la constante dieléctrica del combustible depende de muchos factores, por ejemplo, la temperatura); ), y la gran influencia del “embotellamiento” en el tanque. Como resultado, la información que contiene representa una típica "sierra" con una amplitud decente. Estos tipos de sensores suelen instalarse en equipos de minería pesados ​​(no se deje confundir por el volumen del tanque):

filtro de kalman

Hagamos una pequeña digresión y familiaricémonos con el algoritmo en sí. El filtro de Kalman utiliza un modelo dinámico del sistema (por ejemplo, una ley física de movimiento), entradas de control conocidas y múltiples mediciones secuenciales para formar una estimación de estado óptima. El algoritmo consta de dos fases repetidas: predicción y ajuste. En la primera etapa, se calcula la predicción del estado en el siguiente momento (teniendo en cuenta la inexactitud de su medición). En el segundo, la nueva información del sensor corrige el valor predicho (teniendo en cuenta también la inexactitud y el ruido de esta información):

Las ecuaciones se presentan en forma matricial; si no sabes álgebra lineal, está bien, lo que sigue es una versión simplificada sin matrices para el caso con una variable. En el caso de una variable, las matrices degeneran en valores escalares.

Primero comprendamos la notación: el subíndice denota un momento en el tiempo: k - actual, (k-1) - anterior, el signo menos en el superíndice indica que este previsto valor intermedio.

Las descripciones de las variables se presentan en las siguientes imágenes:

Es posible describir durante mucho tiempo y de manera tediosa lo que significan todas estas misteriosas matrices de transición, pero, en mi opinión, es mejor intentar aplicar el algoritmo en un ejemplo real, para que los significados abstractos adquieran un significado real.

Probemoslo en acción

Volvamos al ejemplo con el sensor de nivel de combustible, dado que el estado del sistema está representado por una variable (el volumen de combustible en el tanque), las matrices degeneran en ecuaciones ordinarias:

Definición de un modelo de proceso
Para aplicar el filtro es necesario determinar las matrices/valores de las variables que determinan la dinámica del sistema y las dimensiones F, B y H:

F- una variable que describe la dinámica del sistema, en el caso del combustible - puede ser un coeficiente que determina el consumo de combustible en ralentí durante el tiempo de muestreo (el tiempo entre pasos del algoritmo). Sin embargo, además del consumo de combustible, también hay gasolineras... así que por simplicidad pondremos esta variable en 1 (es decir, indicamos que el valor previsto será igual al estado anterior).

B- variable que determina la aplicación de la acción de control. Si tuviéramos información adicional sobre la velocidad del motor o el grado de presión sobre el pedal del acelerador, entonces este parámetro determinaría cómo cambiaría el consumo de combustible durante el período de muestreo. Como no hay acciones de control en nuestro modelo (no hay información sobre ellas), aceptamos B = 0.

h- una matriz que define la relación entre las mediciones y el estado del sistema, por ahora, sin explicación, aceptaremos esta variable también igual a 1;

Definición de propiedades de suavizado
R- El error de medición se puede determinar probando instrumentos de medición y determinando el error de su medición.

q- determinar el ruido del proceso es una tarea más difícil, ya que es necesario determinar la variación del proceso, lo cual no siempre es posible. En cualquier caso, puede seleccionar este parámetro para proporcionar el nivel de filtración requerido.

Implementémoslo en código.
Para disipar la confusión restante, implementemos un algoritmo simplificado en C# (sin matrices ni acciones de control):

Clase KalmanFilterSimple1D ( público doble X0 (obtener; conjunto privado;) // estado predicho público doble P0 ( obtener; conjunto privado; ) // covarianza predicha público doble F ( obtener; conjunto privado; ) // factor del valor real al real anterior valor público doble Q (obtener; conjunto privado;) // ruido de medición público doble H (obtener; conjunto privado;) // factor del valor medido al valor real público doble R (obtener; conjunto privado;) // ruido ambiental público doble Estado (obtener; conjunto privado;) público doble Covarianza (obtener; conjunto privado;) público KalmanFilterSimple1D(doble q, doble r, doble f = 1, doble h = 1) ( Q = q; R = r; F = f; H = h; ) public void SetState(estado doble, covarianza doble) ( Estado = estado; Covarianza = covarianza; ) public void Correct(datos dobles) ( //actualización de tiempo - predicción X0 = F*Estado; P0 = F*Covarianza *F + Q; //actualización de medidas - corrección var K = H*P0/(H*P0*H + R )*P0 ) ) // Aplicación... var fuelData = GetData(); var filtrado = nueva lista

El resultado del filtrado con estos parámetros se muestra en la figura (para ajustar el grado de suavizado, puede cambiar los parámetros Q y R):

La parte más interesante queda fuera del alcance del artículo: aplicar el filtro de Kalman para varias variables, especificar la relación entre ellas y generar automáticamente valores para variables no observadas. Intentaré continuar con el tema en cuanto tenga tiempo.

Espero que la descripción no haya sido demasiado tediosa y complicada, si tienes alguna duda o aclaración bienvenido a los comentarios)

(); var kalman = nuevo KalmanFilterSimple1D(f: 1, h: 1, q: 2, r: 15); // establece F, H, Q y R kalman.SetState(fuelData, 0.1); // Establece los valores iniciales Estado y Covarianza para cada (var d en fuelData) ( kalman.Correct(d); // Aplica el algoritmo filtered.Add(kalman.State); // Guarda el estado actual)

  • ACTUALIZACIÓN:

Lista de fuentes.
Tutorial

En Internet, incluido Habré, puede encontrar mucha información sobre el filtro Kalman. Pero es difícil encontrar una conclusión fácilmente digerible a las fórmulas mismas. Sin una conclusión, toda esta ciencia se percibe como una especie de chamanismo, las fórmulas parecen un conjunto de símbolos sin rostro y, lo más importante, muchas afirmaciones simples que se encuentran en la superficie de la teoría están más allá de la comprensión. El propósito de este artículo será hablar sobre este filtro en un idioma lo más accesible posible.

Antes de familiarizarse con el filtro de Kalman, sugiero recordar algunas definiciones y hechos simples de la teoría de la probabilidad.

variable aleatoria

Cuando dicen que se da una variable aleatoria, quieren decir que esta cantidad puede tomar valores aleatorios. Toma diferentes valores con diferentes probabilidades. Cuando lanzas, digamos, un dado, aparecerá un conjunto discreto de valores: . Cuando hablamos, por ejemplo, de la velocidad de una partícula errante, entonces, obviamente, tenemos que tratar con un conjunto continuo de valores. Denotaremos los valores “eliminados” de una variable aleatoria por pero a veces usaremos la misma letra con la que denotamos la variable aleatoria:
En el caso de un conjunto continuo de valores, una variable aleatoria se caracteriza por una densidad de probabilidad, que nos dicta que la probabilidad de que una variable aleatoria "caiga" en una pequeña vecindad de un punto de longitud es igual a . Como podemos ver en la imagen, esta probabilidad es igual al área del rectángulo sombreado debajo del gráfico:

Muy a menudo en la vida, las variables aleatorias tienen una distribución gaussiana cuando la densidad de probabilidad es igual a .

Vemos que la función tiene forma de campana con centro en un punto y un ancho de orden característico.
Dado que estamos hablando de la distribución gaussiana, sería una pena no mencionar de dónde viene. Así como los números están firmemente establecidos en las matemáticas y se encuentran en los lugares más inesperados, la distribución gaussiana ha echado profundas raíces en la teoría de la probabilidad. Una afirmación notable que explica parcialmente la omnipresencia gaussiana es la siguiente:
Sea una variable aleatoria con una distribución arbitraria (de hecho, existen algunas restricciones a esta arbitrariedad, pero no son nada estrictas). Realicemos experimentos y calculemos la suma de los valores "eliminados" de una variable aleatoria. Hagamos muchos experimentos de este tipo. Está claro que cada vez recibiremos un valor diferente del importe. En otras palabras, esta cantidad es en sí misma una variable aleatoria con su propia ley de distribución específica. Resulta que cuando es lo suficientemente grande, la ley de distribución de esta suma tiende a la distribución gaussiana (por cierto, el ancho característico de la "campana" crece a medida que ). Leemos con más detalle en Wikipedia: teorema del límite central. En la vida, muy a menudo hay cantidades que son la suma de un gran número de variables aleatorias independientes distribuidas idénticamente y, por lo tanto, tienen una distribución gaussiana.

Valor medio

El valor promedio de una variable aleatoria es lo que obtendremos en el límite si realizamos muchos experimentos y calculamos la media aritmética de los valores eliminados. El valor promedio se denota de diferentes maneras: a los matemáticos les gusta denotarlo mediante (expectativa matemática o valor medio), y a los matemáticos extranjeros les gusta denotarlo mediante (expectativa). Físicos a través de o. Lo designaremos de forma extranjera: .
Por ejemplo, para una distribución gaussiana, la media es.

Dispersión

En el caso de la distribución gaussiana, vemos claramente que la variable aleatoria prefiere caer en una determinada vecindad de su valor medio.

Admire una vez más la distribución gaussiana.



Como puede verse en el gráfico, la dispersión característica de valores es del orden de . ¿Cómo podemos estimar esta dispersión de valores para una variable aleatoria arbitraria si conocemos su distribución? Puede dibujar una gráfica de su densidad de probabilidad y estimar el ancho característico a simple vista. Pero preferimos seguir la ruta algebraica. Puede encontrar la longitud promedio (módulo) de desviación del valor promedio: . Este valor será una buena estimación de la dispersión característica de los valores. Pero usted y yo sabemos muy bien que usar módulos en fórmulas es un dolor de cabeza, por lo que esta fórmula rara vez se usa para estimar la dispersión característica.
Una forma más sencilla (simple en términos de cálculos) es encontrar . Esta cantidad se llama dispersión y a menudo se denota como . La raíz de la varianza es una buena estimación de la dispersión de una variable aleatoria. La raíz de la varianza también se llama desviación estándar.
Por ejemplo, para la distribución gaussiana, podemos calcular que la varianza definida anteriormente es exactamente igual a , lo que significa que la desviación estándar es igual a , lo que concuerda muy bien con nuestra intuición geométrica.
De hecho, aquí se esconde una pequeña estafa. El hecho es que en la definición de la distribución gaussiana, debajo del exponente hay una expresión. Este dos está en el denominador precisamente para que la desviación estándar sea igual al coeficiente. Es decir, la fórmula de distribución gaussiana en sí está escrita en una forma especialmente diseñada para que calculemos su desviación estándar.

Variables aleatorias independientes

Las variables aleatorias pueden ser dependientes o no. Imagínese arrojar una aguja a un avión y registrar las coordenadas de ambos extremos. Estas dos coordenadas son dependientes; están relacionadas por la condición de que la distancia entre ellas sea siempre igual a la longitud de la aguja, aunque son variables aleatorias.
Las variables aleatorias son independientes si el resultado de la primera es completamente independiente del resultado de la segunda. Si las variables aleatorias son independientes, entonces el valor promedio de su producto es igual al producto de sus valores promedio:

Prueba

Por ejemplo, tener ojos azules y graduarse de la escuela con una medalla de oro son variables aleatorias independientes. Si, por ejemplo, medallistas de oro de ojos azules, entonces medallistas de ojos azules. Este ejemplo nos dice que si las variables aleatorias están dadas por sus densidades de probabilidad y , entonces la independencia de estos valores se expresa en el hecho de que la densidad de probabilidad (. el primer valor se eliminó y el segundo) se encuentra mediante la fórmula:

De esto se desprende inmediatamente que:

Como puede ver, la prueba se realizó para variables aleatorias que tienen un espectro continuo de valores y están especificadas por su densidad de probabilidad. En otros casos, la idea de prueba es similar.

filtro de kalman

Declaración del problema

Denotemos el valor que mediremos y luego filtraremos. Puede ser la posición, la velocidad, la aceleración, la humedad, el grado de hedor, la temperatura, la presión, etc.
Comencemos con un ejemplo sencillo, que nos llevará a la formulación del problema general. Imaginemos que tenemos un coche radiocontrolado que sólo puede ir hacia adelante y hacia atrás. Nosotros, conociendo el peso del coche, la forma, la superficie de la carretera, etc., calculamos cómo afecta el joystick de control a la velocidad de movimiento.

Entonces las coordenadas del coche cambiarán según la ley:

En la vida real, no podemos tener en cuenta en nuestros cálculos las pequeñas perturbaciones que actúan sobre el coche (viento, baches, guijarros en la carretera), por lo que la velocidad real del coche diferirá de la calculada. Se agregará una variable aleatoria al lado derecho de la ecuación escrita:

Tenemos un sensor GPS instalado en el coche que intenta medir las coordenadas reales del coche y, por supuesto, no puede medirlas con precisión, pero las mide con un error, que también es una variable aleatoria. Como resultado, recibimos datos erróneos del sensor:

La tarea es que, conociendo las lecturas incorrectas de los sensores, encuentre una buena aproximación a las verdaderas coordenadas de la máquina. Denotaremos esta buena aproximación como .
En la formulación del problema general cualquier cosa puede ser responsable de la coordenada (temperatura, humedad...), y al responsable de controlar el sistema desde el exterior lo denominaremos (en el ejemplo de la máquina). Las ecuaciones para las coordenadas y lecturas de los sensores se verán así:

(1)

Analicemos en detalle lo que sabemos:

Vale la pena señalar que la tarea de filtrado no es una tarea de suavizado. No estamos tratando de suavizar los datos del sensor, estamos tratando de obtener el valor más cercano a la coordenada real.

algoritmo de Kalman

Argumentaremos por inducción. Imaginemos que en el paso 1 ya hemos encontrado un valor filtrado del sensor que se aproxima mucho a la verdadera coordenada del sistema. No olvidemos que conocemos la ecuación que controla el cambio de la coordenada desconocida:

Por lo tanto, sin recibir aún el valor del sensor, podemos suponer que en el paso el sistema evolucionará según esta ley y el sensor mostrará algo cercano a . Lamentablemente, todavía no podemos decir nada más preciso. Por otro lado, durante el paso tendremos en nuestras manos una lectura inexacta del sensor.
La idea de Kalman es que para obtener la mejor aproximación a la coordenada verdadera, debemos elegir un término medio entre la lectura inexacta del sensor y nuestra predicción de lo que esperábamos que viera. Le daremos un peso a la lectura del sensor y quedará un peso sobre el valor previsto:

El coeficiente se llama coeficiente de Kalman. Depende del paso de iteración, por lo que sería más correcto escribir , pero por ahora, para no saturar las fórmulas de cálculo, omitiremos su índice.
Debemos elegir el coeficiente de Kalman de modo que el valor de la coordenada óptima resultante sea el más cercano a la coordenada verdadera. Por ejemplo, si sabemos que nuestro sensor es muy preciso, entonces confiaremos más en su lectura y le daremos más peso al valor (cercano a uno). Si el sensor, por el contrario, no es del todo preciso, entonces nos centraremos más en el valor predicho teóricamente.
En general, para encontrar el valor exacto del coeficiente de Kalman, basta con minimizar el error:

Usamos las ecuaciones (1) (aquellas con un fondo azul en el marco) para reescribir la expresión del error:

Prueba


Ahora es el momento de discutir ¿qué significa la expresión minimizar el error? Después de todo, el error, como vemos, es en sí mismo una variable aleatoria y cada vez toma valores diferentes. Realmente no existe un enfoque único para definir lo que significa tener un error mínimo. Al igual que en el caso de la dispersión de una variable aleatoria, cuando intentamos estimar el ancho característico de su dispersión, aquí elegiremos el criterio de cálculo más simple. Minimizaremos la media del error al cuadrado:

Anotamos la última expresión:

clave para la prueba

Del hecho de que todas las variables aleatorias incluidas en la expresión para son independientes y los valores promedio de los errores del sensor y del modelo son iguales a cero: , se deduce que todos los términos "cruzados" son iguales a cero:
.
Además, las fórmulas para las variaciones parecen mucho más simples: y (ya que )

Esta expresión toma un valor mínimo cuando (igualamos la derivada a cero)

Aquí ya estamos escribiendo una expresión para el coeficiente de Kalman con el índice de paso, con lo que enfatizamos que depende del paso de iteración.
Sustituimos en la expresión del error cuadrático medio el valor del coeficiente de Kalman que lo minimiza. Obtenemos:

Nuestro problema está resuelto. Hemos obtenido una fórmula iterativa para calcular el coeficiente de Kalman.

Todas las fórmulas en un solo lugar


Ejemplo

En la imagen publicitaria que aparece al principio del artículo se filtran los datos de un sensor GPS ficticio instalado en un coche ficticio que circula uniformemente con una aceleración ficticia conocida.

Mira el resultado del filtrado nuevamente.


código matlab

borrar todo; N=100% número de muestras a=0,1% aceleración sigmaPsi=1 sigmaEta=50; k=1:N x=k x(1)=0 z(1)=x(1)+normrnd(0,sigmaEta); para t=1:(N-1) x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi);

z(t+1)=x(t+1)+normrnd(0,sigmaEta); fin; Filtro %kalman xOpt(1)=z(1); eOpt(1)=sigmaEta; % eOpt(t) es una raíz cuadrada de la dispersión del error (varianza). No es una variable aleatoria. para t=1:(N-1) eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2 +eOpt(t)^2+sigmaPsi^2)) K(t+1)=(eOpt(t+1))^2/sigmaEta^2 xOpt(t+1)=(xOpt(t)+a*t )*(1-K(t+1))+K(t+1)*z(t+1) fin(k,xOpt,k,z,k,x)

Análisis

Si rastrea cómo cambia el coeficiente de Kalman con los pasos de iteración, puede demostrar que siempre se estabiliza en un valor determinado. Por ejemplo, cuando los errores cuadráticos medios del sensor y el modelo tienen una proporción de diez a uno, entonces la gráfica del coeficiente de Kalman dependiendo del paso de iteración se ve así:

En el siguiente ejemplo, analizaremos cómo esto puede hacernos la vida mucho más fácil.

Segundo ejemplo

Pero, francamente, tal sistema ya no satisface las condiciones que le impusimos a la variable aleatoria, porque ahora toda la física desconocida del movimiento está oculta allí y, por lo tanto, no podemos decir que en diferentes momentos del tiempo los errores del modelo sean independientes de entre sí y que sus valores medios son cero. En este caso, en general, la teoría del filtro de Kalman no es aplicable. Pero no prestaremos atención a este hecho, sino que aplicaremos estúpidamente todo el coloso de fórmulas, seleccionando los coeficientes a ojo, para que los datos filtrados se vean bien.
Pero puedes tomar un camino diferente y mucho más sencillo. Como vimos anteriormente, el coeficiente de Kalman siempre se estabiliza en el valor a medida que aumenta el número de pasos. Por lo tanto, en lugar de seleccionar coeficientes y encontrar el coeficiente de Kalman usando fórmulas complejas, podemos considerar que este coeficiente siempre es una constante y seleccionar solo esta constante. Esta suposición no estropeará casi nada. En primer lugar, ya estamos utilizando ilegalmente la teoría de Kalman y, en segundo lugar, el coeficiente de Kalman se estabiliza rápidamente hasta convertirse en una constante. Al final todo será mucho más sencillo. No necesitamos ninguna fórmula de la teoría de Kalman, solo necesitamos seleccionar un valor aceptable e insertarlo en la fórmula iterativa:

El siguiente gráfico muestra datos filtrados de dos formas diferentes desde un sensor ficticio. Siempre que no sepamos nada sobre la física del fenómeno. El primer método es honesto, con todas las fórmulas de la teoría de Kalman. Y el segundo es simplificado, sin fórmulas.

Como podemos ver, los métodos casi no son diferentes. Sólo se observa una pequeña diferencia al principio, cuando el coeficiente de Kalman aún no se ha estabilizado.

Discusión

Como hemos visto, la idea principal del filtro de Kalman es que necesitamos encontrar un coeficiente tal que el valor filtrado

En promedio, sería el que menos diferiría del valor real de la coordenada. Vemos que el valor filtrado es una función lineal de la lectura del sensor y el valor filtrado anterior. Y el valor filtrado anterior es, a su vez, una función lineal de la lectura del sensor y el valor filtrado anterior. Y así sucesivamente hasta dar la vuelta completa a la cadena. Es decir, el valor filtrado depende de todos lecturas anteriores del sensor linealmente:

Por tanto, el filtro de Kalman se denomina filtro lineal.
Se puede comprobar que de todos los filtros lineales, el filtro de Kalman es el mejor. Lo mejor en el sentido de que el error cuadrático medio del filtro es mínimo.

Caso multidimensional

Toda la teoría del filtro de Kalman se puede generalizar al caso multidimensional. Las fórmulas allí parecen un poco más aterradoras, pero la idea de derivarlas es la misma que en el caso unidimensional. Puedes verlos en este gran artículo:


Arriba