Algoritmo AHRS bajo aceleraciones lineales continuas

He probado varios algoritmos para obtener cabeceo, balanceo y guiñada bajo aceleraciones y vibraciones lineales continuas (inferiores a 0,4 g, frecuencia inferior a 10 HZ). Ninguno de ellos da buenos resultados porque las lecturas se desvían o se ven demasiado afectadas por las aceleraciones lineales. Lo que quiero lograr es que cuando la aceleración externa sea inferior a +-0,4 g, el error de cabeceo y alabeo sea inferior a +-1 grado.

He probado estos algoritmos:

  1. Algoritmo de Madgwick . Cuando la ganancia Beta se configura muy alta, la convergencia es rápida pero los ángulos son más susceptibles a las aceleraciones lineales. Lo sintonicé y reduje el error bajo aceleraciones lineales hasta +-0.5 grados. Sin embargo, si la vibración es continua, las lecturas se desviarán y tardarán una eternidad en converger a los valores verdaderos. Tiene sentido porque bajo aceleraciones lineales, se confía más en el giroscopio y los ángulos calculados se desvían a medida que se desvía la integración del giroscopio.

  2. Algoritmo de Mahony . Al contrario de Madgwick, no se desvía en absoluto, independientemente de los valores que use para Ki y Kp. Sin embargo, siempre se ve afectado por aceleraciones lineales. (Errores mayores que +-6deg)

  3. Filtro Kalman tradicional . Se ha dedicado mucho tiempo a ajustar esos enormes vectores R y Q. Hasta ahora tiene el mismo rendimiento que el de Mahony.

Estoy usando la maquinilla de afeitar IMU . Sé que con sensores baratos es imposible lograr el mismo resultado que este .

Hay un par de opciones más como UKF, pero es difícil de entender o implementar.

Cualquier sugerencia es bienvenida.

¿Cómo te estás integrando en Kalman?
Usando la integración de Euler, pero las rotaciones son estrictamente de un eje para evitar los DCM. @C.TowneSpringer
¿Se supone que eso funciona bien? La última vez que hice esto (ALCM) Euler no era adecuado. Euler es un método de primer orden con error local proporcional al cuadrado del tamaño del paso y error bruto proporcional al tamaño del paso. Utilizamos Runge-Kutta de cuarto orden con un filtro de Kalman. Creo que Newton-Feynman o Euler tendrán una suposición inicial para comenzar con Runge-Kutta. ¿Tiene el procesamiento para manejar eso a una buena tasa de actualización?
Gracias por la sugerencia. Se pasó por alto el error local del método de integración de Euler. Planeamos hacer el filtrado en la publicación, por lo que no tenemos restricciones importantes en la complejidad del cálculo. @C.TowneSpringer

Respuestas (1)

En primer lugar, asegúrese de comprender dos puntos clave aquí:

  1. La determinación de la actitud solo a partir de los datos de la IMU es inherentemente ambigua en presencia de aceleración lineal . Sin conocimientos adicionales sobre la naturaleza de las aceleraciones, siempre habrá un límite superior para la precisión que puede lograr.

  2. La precisión está limitada por la deriva en las mediciones del giroscopio integrado . Con una integración y datos giroscópicos perfectos, los datos del acelerómetro no serían necesarios en absoluto. Cuanto más te acerques a la perfección, más podrás ignorar las aceleraciones.

La selección del algoritmo de orientación es en gran medida irrelevante aquí. Todos ellos funcionan con el mismo principio: usar la dirección de la aceleración gravitacional para corregir la deriva de los datos del giroscopio integrado, con una cantidad variable de ponderación entre los dos. Si ha intentado ajustar los parámetros y no ha logrado los resultados que desea, es poco probable que lo haga mejor con un algoritmo diferente.

Entonces, hay esencialmente dos cosas que puedes hacer.

  1. Mejore la precisión de la integración de su giroscopio.
  2. Modele la naturaleza de las aceleraciones lineales de alguna manera.

La segunda opción es difícil de discutir porque depende de los detalles de la moción que esté estudiando. Hay algunos trucos simples como descartar o reducir el peso de las aceleraciones fuera de un rango determinado. Esencialmente, estos se reducen a modelar las aceleraciones lineales como breves ocurrencias solamente. Si su sistema está en movimiento continuo, no son de mucha ayuda.

Sin embargo, hay varias cosas que puede hacer para mejorar la integración de su giroscopio:

  1. Obtenga la mejor estimación posible del sesgo del giroscopio . Tome lecturas estáticas del giroscopio durante varios segundos inmediatamente antes del uso y promedie estas para obtener sus valores de compensación. No confíe en una calibración previa única.
  2. Trate de minimizar la deriva debido a la temperatura. Deje que la IMU alcance la temperatura de funcionamiento estable antes de la calibración/uso. Trate de mantenerlo a una temperatura constante durante el funcionamiento.
  3. Mejore su modelo de calibración. Considere incluir efectos de eje transversal y no linealidad, así como solo escala y compensación.
  4. Utilice un mejor método de integración. Ya hay algunas ideas en los comentarios sobre su pregunta.
  5. Vea si puede rastrear la deriva del giroscopio. Si el algoritmo de orientación tiene que corregir constantemente la deriva en una dirección particular, esto se puede detectar y usar para ajustar suavemente los valores de sesgo.

Tiene razón en que los sensores que está utilizando no son del grado más alto disponible. Sin embargo, es posible obtener muy buenos resultados de los sensores de consumo si están suficientemente bien caracterizados y calibrados.

¿Algún sensor de consumo recomendado?