陀螺仪会零点漂移,加速度计噪声大,怎么办?简单理解互补滤波

在理想条件下如果要测量转过的角度,只要对对角速度进行积分就行,但在实际情况下并没有这么完美:

1. 积分运算的累积误差。角速度积分运算是有累积误差的,累积误差在短时间内表现不明显,只要零点漂移处理得好了,1分钟以内的漂移都不大,但时间长了,就会有累积误差。稳像仪中使用的MPU6050模块零点漂移比较小,5分钟大概0.02度。

2. 角速率零点漂移。所谓零点漂移就是模块静止的时候,我们认为正常的输出应该是0,或者均值为0的数据,但是实际上6050的输出不是,经测量,小于0.15度/秒。

所以单纯地用角速度积分不能解决问题。

如果单纯地用加速度计也不行,因为加速度计的波形有很多毛刺,所以用加速度计也不能很好地反映角度信息。

所以为了较好地得出角度信息,我们就要对角度度计和加速度计的优势互补,角度度计虽然会产生零点漂移和积分误差,但是它在短时间内的积分还是很准的;加速度计的虽然它的波形有很多毛刺,但是它的总体趋势还是准确的。

数字低通滤波器:低通滤波的目的,保留长期变化,滤掉短暂变化。让信号一点一点的起作用而不是一下子猛烈作用,即在时间范围上取平均。所以对于加速度计可以用低通滤波器。

数字高通滤波器:除去长期变化,保留短暂变化。高通滤波器加于陀螺仪,可以滤掉温漂;

时间常数用来定义滤波器对信号的作用;对于低通滤波器,信号长度比时间常数持久的,可以通过滤波器;对于高通滤波器,信号长度比时间常数短的,可以通过滤波器。

这里要介绍的是互补滤波:

angle:是所得出的角度

gyro:是角速度。并不是陀螺仪的读数,以mpu6050为例,mpu6050的角速度计的精度是±2000°/s,16位,而输出的是AD值,所以要将输出的AD值转化成角速度则要乘以一个比例系数,这个比例系数是1/(2^16/4000);

x_acc:是由加速度计计算出的角度值,和陀螺仪一样,加速度计读出的也是一个AD值,如何把它转化为角度呢,还是以mpu6050位例,先将模块正面朝上再将模块反面朝上,读出Z轴加速度计值的最大值和最小值,那么将AD值转化为角度的比例值为:180/(最大值-最小值)。

dt:采样周期:程序每次大循环用的时间

angle = (0.98) * (angle + gyro*dt) + (0.02) * (x_acc);

如果这里滤波器的循环频率时每秒100次(亦即循环周期 = 0.01s),那么上述公式的时间常数就是:

tau = (a * dt)/(1-a) = ( 0.98*0.01s )/0.02s = 0.49s

这个时间常数确定了陀螺仪和加速度计的信任边界。信号时间周期低于半秒时,陀螺仪占主导地位,加速度计的噪声除掉;信号时间周期大于半秒时,加速度计的角度平均值就占据主导地位,有温漂的陀螺仪可以站一边去。

实验,是检验时间常数的标准之一。首先你要挑一个时间常数,然后算出滤波器的系数a,弄到代码中去。检查角度拟合曲线,如果拟合角度与实际角度总相差那么2°,就说明陀螺仪的温漂影响较大,你可能需要把时间常数设置到1s以下,来保证加速度计能尽快校正陀螺仪的温漂值。不过,时间常数越短,就意味着加速度计的噪声更容易通过。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();