基于一阶互补滤波算法的MPU6050数据融合
我们已经知道,MPU6050可以获得加速度和角速度,但是由于传感器的噪声信号比较大,无法直接通过两个数据来获得该轴上的角度。因此,需要进行互补滤波来近似得到一个比较准确的角度。
传感器原始数据特点分析:
加速度数据,不是很准确,但是趋势是对的,通过受力分能够显示角度变化趋势,在长期变化来看是可以利用的。
角速度数据,加速度积分得到角度,但是由于传感器误差,积分作用会造成累计误差,所以角速度数据在短期是可以使用的,长期来看误差会很大是不可使用的
两种特点的数据使得我们对得到精确地角度看到了希望,以下几个内容需要明白
数字低通滤波器
可以让长期变化通过,滤波消除短期变化,用于对加速度计的滤波
数字高通滤波器
可以让短时信号通过,过滤出变化缓慢的信号,消除漂移
积分
数字积分是通过累加来实现的,即 Angle = gyro * dt
dt是采样时间越短积分值越准确
采样周期
这个简单,比如1ms获取一次时间,则采样率是1000HZ,采样时间为0.001s
时间常数
τ是常用时间常数符号,一般表示过渡反应的时间过程的常数。指该物理量从最大值衰减到最大值的1/e所需要的时间,对于滤波器而言是信号会作用的相对时间。
对于低通滤波器周期比时间常数大的多的信号可以平稳通过,周期比时间常数短的信号被滤出,高通则相反。
设互补滤波系数为a,则
y = a*y + (1-a)*x;
若以dt为周期执行,则有τ = (a*dt)/(1-a) ->得出互补滤波系数为 a = τ/(τ + dt);
互补
即,高频信号与低频信号都与我们将求得的量相关,我们将其进行滤波运算,给两部分一个权重得到一个相对准确的值,或者得到一个很好的近似的过程
角度互补滤波器
Angle = (0.98) * (Angle + gyro * dt) + (0.02) *(acc);
我们可以根据采样周期来算出滤波器的时间常数,最终求得它的响应速度。同样的,我们也可以根据自己的需要,确定一个时间常数,进而获得合适的滤波系数,为了获取更加准确的值需要对系数进行一定的调整。