filter sensor fusion kalman-filter

filter - Sensor fusionando con filtro Kalman.



kalman-filter (3)

El giroscopio mide la tasa de cambio de ángulo (por ejemplo, en radianes por segundo), mientras que a partir de la lectura del acelerómetro puede calcular el ángulo en sí. Aquí hay una manera simple de combinar estas medidas:

En cada lectura de giro recibido:

angle_radians+=gyro_reading_radians_per_sec * seconds_since_last_gyro_reading

En cada lectura del acelerómetro recibida:

angle_radians+=0.02 * (angle_radians_from_accelerometer - angle_radians)

La constante 0.02 es para la sintonización: selecciona la compensación entre el rechazo del ruido y la capacidad de respuesta (no se pueden tener ambas al mismo tiempo). También depende de la precisión de ambos sensores y de los intervalos de tiempo en que se reciben las nuevas lecturas.

Estas dos líneas de código implementan un filtro de Kalman 1-dimensional (escalar) simple. Asume que

  • el giro tiene un ruido muy bajo en comparación con el acelerómetro (cierto con la mayoría de los sensores de nivel de consumidor). Por lo tanto, no modelamos el ruido de giro en absoluto, sino que utilizamos el giro en el modelo de transición de estado (generalmente denotado por F).
  • las lecturas del acelerómetro se reciben a intervalos de tiempo generalmente regulares y el nivel de ruido del acelerómetro (generalmente R) es constante
  • angle_radians se ha inicializado con una estimación inicial (por ejemplo, promediando angle_radians_from_accelerometer durante algún tiempo)
  • por lo tanto, también la estimación de la covarianza (P) y la ganancia óptima de Kalman (K) son constantes, lo que significa que no necesitamos mantener la estimación de la covarianza en una variable en absoluto.

Como veis, este enfoque está simplificado. Si no se cumplen las suposiciones anteriores, debe aprender algo de la teoría del filtro de Kalman y modificar el código en consecuencia.

Estoy interesado, ¿cómo se modela la entrada dual en una configuración de fusión de sensores en un filtro de Kalman?

Digamos, por ejemplo, que tiene un acelerómetro y un giroscopio y quiere presentar el "nivel de horizonte", como en un avión, una buena demostración de algo como esto aquí.

¿Cómo cosechan las propiedades positivas de los dos sensores y minimizan los negativos?

¿Está esto modelado en la matriz del Modelo de observación (generalmente simbolizado por el capital H)?

Nota: esta pregunta también se hizo sin respuestas en math.stackexchange.com


La línea del horizonte es G ''* (u, v, f) = 0, donde G es un vector de gravedad, las coordenadas centradas en la imagen u y vy la distancia focal f. Ahora los pros y los contras de los sensores: el giroscopio es súper rápido y preciso pero a la deriva, el acelerómetro es menos preciso pero (si está calibrado) tiene una desviación cero y no se desvía (dado que no hay aceleración, excepto la gravedad). Miden diferentes cosas: el acelerómetro mide la aceleración y, por lo tanto, la orientación en relación con el vector de gravedad, mientras que el giroscopio mide la velocidad de rotación y, por lo tanto, el cambio de orientación. Para convertirlo en orientación, uno tiene que integrar sus valores (afortunadamente se puede muestrear a fps altos como 100-200). por lo tanto, el filtro de Kalman que se supone que es lineal no es aplicable al giro. por ahora solo podemos simplificar la fusión de sensores como una suma ponderada de lecturas y predicciones.

Puede combinar dos lecturas: acelerómetro y giroscopio integrado y predicción de modelos utilizando ponderaciones que son inversamente proporcionales a las variaciones de datos. También tendrá que usar la brújula de vez en cuando, ya que el acelerómetro no le dice mucho sobre el acimut, pero creo que es irrelevante para el cálculo de una línea del horizonte. El sistema debe ser sensible y preciso, y para este propósito, siempre que la orientación cambie rápidamente, los pesos para el giro deben ser grandes; cuando el sistema se estabilice y la rotación se detenga, los pesos para el acelerómetro aumentarán, lo que permitirá una mayor integración de las lecturas de sesgo cero y matará la deriva del giro.


Normalmente, el problema de fusión del sensor se deriva del teorema de Bayes. En realidad, tiene que su estimación (en este caso, el nivel del horizonte) será una suma ponderada de sus sensores, que se caracteriza por el modelo del sensor. Para los sensores duales, tiene dos opciones comunes: modelar un sistema de dos sensores y derivar la ganancia de kalman para cada sensor (usando el modelo del sistema como predictor), o ejecutar dos etapas de corrección usando diferentes modelos de observación. Debería echar un vistazo a los Predictores Bayesianos (un poco más general que el Filtro de Kalman) que se deriva precisamente de minimizar la varianza de una estimación, dadas dos fuentes de información diferentes. Si tiene una suma ponderada, y minimiza la varianza de la suma, para dos sensores, entonces obtiene la ganancia de Kalman.

Las propiedades del sensor se pueden "ver" en dos partes del filtro. Primero, tienes la matriz de error para tus observaciones. Esta es la matriz que representa el ruido en la observación de los sensores (se supone que es un ruido gaussiano medio cero, que no es una suposición demasiado grande, dado que durante la calibración, puede alcanzar un ruido medio cero).

La otra matriz importante es la matriz de covarianza de observación. Esta matriz le da una idea de qué tan bueno es el sensor al darle información (información que significa algo "nuevo" y no depende de la lectura de otros sensores).

Sobre la "recolección de las buenas características", lo que debe hacer es realizar una buena calibración y caracterización del ruido (¿está bien escrito?) De los sensores. La mejor manera de hacer que un filtro de Kalman converja es tener un buen modelo de ruido para sus sensores, y eso es 100% experimental. Intente determinar la variación para su sistema (no confíe siempre en las hojas de datos).

Espero que esto ayude un poco.