9轴传感器数据融合算法说明.doc
文本预览下载声明
TestKalman2.m对Kalman滤波进行仿真。
仿真设定了这样一个系统,他只有一个自由度的旋转,角速度恒定为35.9度/s,旋转持续了一段时间。在这段时间内使用6轴传感器(加速度计和磁传感器)来测量绝对角度,同时用陀螺来测量瞬时角速度。
如果用6轴传感器(加速度计和磁传感器)来测量系统的绝对角度,根据以前的经验,这样的误差在1度上下。这个测量误差是一种噪声,我们简单利用白噪声来表达,程序中“angleNoise = randn(1, N)/3”构造了一个标准差为0.33333的白噪声(保证最大数值波动在1度)。绝对位置测量值可通过差分转换成瞬时角速度估计值。
跟据陀螺的数据手册,在角速度不很快的情况下,单纯的陀螺测量误差为0.1dps(度每秒),所以在这里用另外一个噪声“axis9Noise = 0.1*randn(1, N)/3”来模拟陀螺的测量误差。将这两种测量数值输入kalman滤波器,发现角速度数据收敛非常快。下图中蓝色线表示的是6轴传感器测量出的瞬时角速度,波动范围达到30dps,紫色的线是kalman滤波器输出,放大后可看出,其波动范围0.1dps,收敛到了陀螺的测量数值上。
结论:对于角速度的测量,陀螺比6轴传感器精确300倍!!!
从这里可以看出,对于两个测量源的系统,通过kalman滤波,结果会向更精确的测量源收敛(上个例子中kalman滤波向陀螺的测量值收敛)。对于角速度的测量,陀螺比6轴传感器精确300倍,那么,对于9轴传感器,最终的结果可以说完全取决于陀螺的测量数据。可不可以这样说:9轴传感器的姿态值用陀螺的数据积分就完全可以了,剩下的6轴数据可以扔掉了???
答案是:不可能。6轴传感器虽然局部误差很大,但是姿态值的大方向把握的非常准,没有累积误差(用人来类比,是不拘小节,大方向把的准),陀螺虽然局部误差很大,但是姿态值是通过积分求得的,有持续的累积误差。这样我们就有了一种新的思路,这种思路可以不用什么Kalman滤波,只需要将陀螺数据积分用作精确的局部姿态数据,用6轴传感器的姿态值与陀螺数据获得的姿态值的差值进行滑动平均,这样就可以把握好陀螺积分数据的大方向。
TestKalman3.m就通过200点的滑动平均来把握陀螺积分数据的大方向。这种方法的仿真结果如下图所示,黑线是6轴传感器在测量过程中的误差,大概在正负1度;青色的线是陀螺积分数据,虽然波动幅度小很多,但是长期的漂移很大(可以看到青色的线在逐渐下行,时间足够长的话他会超出黑色的线,这就是累积误差的效果);紫色的线是上述新方法获得的结果,可以看到不光波动幅度很小(大概在正负0.1度,精度提高了1个数量级),而且没有累积误差。
Wxx
2013-2-10
显示全部