文档库 最新最全的文档下载
当前位置:文档库 › 互补

互补

再发一些我认为不错的文档吧!
首先是一阶互补滤波算法:
1、一阶互补滤波
这种滤波的原理是对AngleGyro进行高通滤波,而对AngleAccel进行低通滤波,最后再将两者加合,输出姿态角估计值。其公式如下:
angle = a * (angle + AngleRateGyro * dt) + (1 - a) * AngleAccel;
高通滤波的目的是过滤掉长期的变量,而让短期的变量通过,这可以用来去掉陀螺仪的漂移;低通滤波的目的是过滤掉短期的变量,而让长期的变量通过,这可以用来去掉加速度计的噪声。为了确定滤波系数a,得确定一个时间常数tau,
tau = a * dt / (1 - a);
a = tau / (tau + dt);
dt为滤波取样时间。tau代表的是你对陀螺仪的信任度和对加速度计的信任度的界限。
当时间小于tau,AngleGyro处于优先地位,AngleAccel的噪声将被过滤。当时间大于tau时,AngleAccel的平均值将被优先考虑,这时的AngleGyro将产生漂移。tau的选择将取决于AngleGyro何时产生漂移,观察数据拟合曲线即可确定。我们选取tau = 1s,带入以下程序中:
void ComplementaryFilter(float AngleRateGyro,float AngleAccel)
{
//tau is a time constant
//a = tau / (tau + dt);
//angle = a * (angle + AngleRateGyro * dt) + (1 - a) * AngleAccel
float tau = 1.0;
float a = 0.0;
a = tau / (tau + dt);
angle = a * (angle + AngleRateGyro * dt) + (1 - a) * AngleAccel;
}
一阶互补滤波的资料来源于MIT的一篇文章:
《The Balance Filter》,Shane Colton
这篇文章里所提到的算法是最简单也是最简洁最实用的算法,个人大力推荐,但在参数a的选择上要根据实际加以调整,方能得到好的滤波效果。具体实验效果在一开始发的PDF文档里有介绍,大家最好自己买IMU来亲自实验一下,比较不同的滤波算法,这样体会更深。
附上《The Balance Filter》,Shane Colton zlzlstone@https://www.wendangku.net/doc/a115450626.html,


相关文档