如何使用磁力计为陀螺仪 z 轴添加互补滤波器?

How to add a complementary filter for the gyro z axis using a magnetometer?

我正在为我的陀螺仪 X 和陀螺仪 Y 值使用互补滤波器:

float angle_x = alpha*gyro_angle_x + (1.0 - alpha)*accel_angle_x;

但是,由于陀螺仪 Z 漂移,我正在使用磁力计来尝试消除它。

我有局部倾角和 z 轴磁力计读数,但我不确定如何将其应用到互补滤波器中。

我试过猜测(我知道这没有用)来试试这个:

float angle_z = alpha*gyro_angle_z + ((1.0 -alpha)*accel_angle_y*InclinationAngle)/magZ;

然而,它只是在移动时增加陀螺仪的z值,然后在静止时将其恢复为0。

使用 Madgwick 过滤器效果最佳。 link 可以找到 here。 它很容易实现(如果使用正确的库并且读数非常准确。目前唯一的缺点是每次你想在新的方向上使用设备时都必须校准磁力计)。