He intentado varios algoritmos para obtener cabeceo, balanceo y guiñada bajo continuas aceleraciones lineales y vibraciones (más pequeñas que 0.4 g, frecuencia inferior a 10 HZ). Ninguno de ellos da buenos resultados porque las lecturas derivan o se ven demasiado afectadas por las aceleraciones lineales. Lo que quiero lograr es que cuando la aceleración externa sea menor que + -0.4g, el error en pitch and roll debería ser menor que + -1deg.
He intentado estos algoritmos:
Algoritmo de Madgwick . Cuando la ganancia Beta se establece muy alta, la convergencia es rápida pero los ángulos son más susceptibles a las aceleraciones lineales. Lo ajusté y reduje el error bajo aceleraciones lineales a + -0.5 grados. Sin embargo, si la vibración es continua, las lecturas se desviarán y tardará una eternidad en converger a 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 desplaza la integración del giroscopio.
El algoritmo de Mahony . Por el contrario de Madgwick, no va a la deriva, independientemente de los valores que use para Ki y Kp. Sin embargo, siempre se ve afectado por aceleraciones lineales. (Errores mayores que + -6deg)
Filtro tradicional de Kalman . Se ha dedicado mucho tiempo a ajustar esos enormes vectores R y Q. Hasta ahora tiene el mismo rendimiento que Mahony's.
Estoy usando la afeitadora 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.