He intentado varios algoritmos para obtener cabeceo, balanceo y giro bajo aceleraciones y vibraciones lineales continuas (más pequeñas que 0.4 g, frecuencia más baja que 10 Hz). Ninguno de ellos da buenos resultados porque las lecturas se desvían o se ven afectadas por las aceleraciones lineales. Lo que quiero lograr es que cuando la aceleración externa sea más pequeña que + -0.4g, el error en el tono y la tirada sea menor que + -1deg.
He probado 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 afiné y reduje el error en aceleraciones lineales a + -0.5deg. Sin embargo, si la vibración es continua, las lecturas se desviarán y tomará una eternidad converger a los valores reales. Tiene sentido porque bajo las aceleraciones lineales, se confía más en el giro y los ángulos calculados se desvían a medida que la integración del giro gira.
El algoritmo de Mahony . Al contrario que el 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 las aceleraciones lineales. (Errores mayores que + -6deg)
Filtro de 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 maquinilla de afeitar IMU . Sé que con sensores baratos es imposible lograr el mismo resultado que éste .
Hay un par de opciones más, como UKF, pero es difícil de entender o implementar.
Cualquier sugerencia es bienvenida.