从开始做四轴到现在,已经累计使用了三个月的时间,从开始的尝试用四元数法进行姿态检测,到接着使用的卡尔曼滤波算法,我们走过了很多弯路,我在从上周开始了对德国人四轴代码的研究和移植,发现德国人的代码的确有他的独到之处,改变了很多我对模型的想法,因为本人是第一次尝试着制作模型,因此感觉很多想法还是比较简单。经过了一周的时间,我将德国人的代码翻译并移植到了我目前的四轴上,并进行了调试,今天,专门请到了一个飞直升机的教练,对我们的四轴进行试飞,并与一个华科尔的四轴进行了现场比较,现在我们四轴的稳定性已经达到了商品四轴的程度。下面是我这一周时间内对德国人代码的一些理解:r
r
德国人代码中的姿态检测算法:r
首先,将陀螺仪和加速度及的测量值减常值误差,得到角速度和加速度,并对角速度进行积分,然后对陀螺仪积分和加速度计的数值进行融合。融合分为两部分,实时融合和长期融合实时融合每一次算法周期都要执行,而长期融合没256个检测周期执行一次,(注意检测周期小于控制周期的2ms)r
实时融合:r
1将陀螺仪积分和加表滤波后的值做差;r
2按照情况对差值进行衰减,并作限幅处理;r
3将衰减值加入到角度中。r
长期融合:r
长期融合主要包括两个部分,一是对角速度的漂移进行估计(估计值是要在每一个控制周期都耦合到角度中的),二是对陀螺仪的常值误差(也就是陀螺仪中立点)进行实时的修正。r
1将陀螺仪积分的积分和加速度积分做差(PS:为什么这里要使用加表积分和陀螺仪积分的积分,因为在256个检测周期内,有一些加速度计的值含有有害的加速度分量,如果只使用一个时刻的加表值对陀螺仪漂移进行估计,显然估计值不会准确,使用多个周期的值进行叠加后做座平均处理,可以减小随机的有害加速度对估计陀螺仪漂移过程中所锁产生的影响)r
2将上面两个值进行衰减,得到估计的陀螺仪漂移r
3对使考虑了陀螺仪漂移和不考虑陀螺仪漂移得到的角度做差,如果这两个值较大,说明陀螺仪在前段时间内测到的角速率不够准确,需要对差值误差(也就是陀螺仪中立点)进行修正,修正幅度和差值有关r
长期融合十分关键,如果不能对陀螺仪漂移做修正,则系统运行一段时间后,速率环的稳定性会降低。r
r
下面比较一下德国四轴中姿态检测部分和卡尔曼滤波之间的关系:r
卡尔曼滤波是一种线性系统的最优估计滤波方法。对于本系统而言,使用卡尔曼滤波的作用是通过对系统状态量的估计,和通过加速r