|
最近一直在研究MK的加速度计和陀螺仪的融合代码。我看的是经过killagreg重新修改过的MK 0.71h的代码,里面把原版的德文函数名、变量名、注释等大部分都翻译成了英文,看起来容易不少。
V0.71h Code Redesign killagreg.rar
(186.5 KB, 下载次数: 135)
经过一段时间的理解,我觉得MK的融合部分一共通过3种方式实现。
第一种是即时融合,通过当前加速度计的数值做移动平均得出大致的偏转角,然后和陀螺仪积分进行对照,当中用到一个系数。得到的差异经过限幅后补偿进I里。这种逻辑UAVP也有,不过UAVP只是将幅度限制到了+1,-1之间。而且这个逻辑是UAVP 3.15里的唯一融合逻辑。
具体代码位于fc.c文件的890-946行。
第二种是稍微长期一点的融合。通过一个256次累加陀螺仪和加速度计的积分,然后将积分总数除以256得出平均的加速度计积分和陀螺仪积分之间的差异,依次作为融合参数。
这个逻辑UAVP中没有,而且这个逻辑我觉得是比较关键的一个逻辑。如果只有第一种逻辑非常容易引起震荡,原因就是在四轴平衡时积分并不为0。但这种逻辑会和第一种逻辑打架,所以参数调整好是重点。UAVP中的取代代码是在积分过程中不断对积分值进行衰减,用+1,-1的方式让积分逐渐回到0。
还有一个就是由于这个逻辑是将加速度计和陀螺仪的积分比较,而加速度计只要有偏转积分就会一直增加,而陀螺仪不是。所以在实际使用时要注意调整量的大小。在MK里对这个调整量连续除了2个256。
这部分代码位于fc.c文件的949-992行。
第三种逻辑是用来修正陀螺仪的0点漂移的。这部分代码我看的不是很明白,而且看起来这个代码默认没有启用,所以也没花太多时间去理解。
这部分代码位与fc.c的1002-1083,可以看到它最后都修正AdNeutralRoll和AdNeutralNick了,就是陀螺仪的中立点参数。
目前我也实现了前2种融合逻辑,现在的问题是相应速度太慢,都倾斜1秒钟了马达才开始有反映。:em25:
还需要不断调整啊。:loveliness: |
欢迎继续阅读楼主其他信息
|