Tengo un MPU9250 en mi PCB y uso un sistema AHRS con un filtro Madgwick para obtener el ángulo de guiñada. Tomé el código fuente de aquí: https://github.com/sonphambk/MPU9250/tree/master/Src y cambié allí la función MadgwickAHRSupdate como alguien dijo aquí: Madgwick sensor fusion on LSM9DS0 . Ahora el ángulo de guiñada es bastante preciso, pero hay un problema. Cuando muevo mi PCB, sin rotarla , el ángulo de guiñada cambia así: 
¿Por qué cambia el ángulo de guiñada si no giro mi PCB? ¿Qué tengo que cambiar en mi código?
Debe tener en cuenta que AHRS es un problema matemáticamente súper complejo. Un pequeño error al comienzo del procesamiento de datos puede causar una gran desviación en algún momento posterior. Si está seguro de que otros usaron el código provisto y no tuvieron desviaciones, le sugiero que verifique el flujo de datos sin procesar del sensor. Si MPU9250 se compró a proveedores chinos o a Ebay, es muy probable que no se puedan usar. Es imprescindible comprobar los voltajes, la relación señal/ruido de salida y la consistencia de la frecuencia de muestreo.
Si cree que la parte del hardware funciona perfectamente, pruebe los filtros de Kalman o filtre los datos de entrada. Además, las condiciones ambientales pueden afectar las lecturas del sensor: campos magnéticos, calor, etc.
PS Mover PCB sin rotación no es tan inocente como puede suponer. Las manos humanas están constantemente temblando y generando ruido.