概述
互补滤波和卡尔曼滤波通常与MPU6050联系在一起。由于陀螺仪是积分计算角度,因此任意时刻的微小误差将会随着时间的推移在积分过程中被放大,导致陀螺仪数据产生漂移,因此长时间内陀螺仪的可信度较低。因此在实际应用中我们需要进行滤波。
但是卡尔曼滤波太复杂了,在下数学太差,没看懂。所以决定还是看看互补滤波吧。
互补滤波结合加速度计的准确性,和陀螺仪噪声小的特性,互取所长。
盗图一张:
互补滤波器,就是上面积分器和低通滤波器的变种结合体。
简单地说,就是通过 低通滤波器 过滤掉短期波动,让长期变化得以保留。让信号一点一点起作用而不是一下子猛烈作用,即在时间范围上取平均。积分器 通过对该角度的积分得到系统运行以来的角度。而 高通滤波器 除去长期变化,保留短暂变化,加于陀螺仪,可以滤掉温漂;
公式
其中,angle为当前角度,gyro为陀螺仪角速度,dt为计算周期。gyro*dt 得到计算周期时间段内通过的角度,通过对该角度的积分(不断累加),得到系统运行以来的角度。x_acc为当前加速度计换算后的角度值。对x_acc进行低通滤波,让加速度计的长期变化得以保留,angle能追踪加速度计的长期变化。
- 这里,0.98和0.02为自己取的系数,实际应用时需根据实际情况调参。
时间常数
这个时间常数确定了陀螺仪和加速度计的信任边界。信号时间周期低于dt时,陀螺仪占主导地位,加速度计的噪声除掉;信号时间周期大于dt时,加速度计的角度平均值就占据主导地位,有温漂的陀螺仪可以站一边去。
代码示例
参考资料:
互补滤波器
平衡车直立算法:互补平衡滤波
互补滤波器——从RC电路到数字滤波器