本帖最后由 飞鸟翌 于 2018-3-31 22:14 编辑
由于kalman滤波器引起的争议和风波,已经把Betaflight推上了风口浪尖。
今天我不打算过多涉及这些争议,仅仅只讨论滤波器设定本身。
警告:以下调参内容,使用的都是未经长时间优化的固件,使用本文以下所述固件和调参方法,你要把自己当做一个测试人员,飞机可能随时会抽风,暴走,炸机,引起人身伤害事件。使用以下方法时,即代表你充分明确理解以上风险,并自己承担由此引起的所有后果。
警告:并没有透彻理解PID调参,D set值,PT1滤波,动态滤波调试方法的初学者,或者中级玩家,请使用默认参数和正式版固件,本文中的内容不适合初学者。相信我,默认参数已经足够优秀,等你累计了足够多的飞行经验,才能判断出如何来调试飞机,在这之前,请安心使用默认参数,FPV的精髓在于飞,不在于电脑前敲代码。
提示:优秀的飞手,是飞行技术和硬件的完美结合,飞行技术的提高,不仅仅是硬件或者软件算法的优化,更是大量飞行时间的积累,使用新的算法可以一定程度上解决你的问题,但是说用了新的算法对于飞行的技术一定有很大提高,这个不一定。
提示:以下内容是通过多家YouTube上主播的评测,Betaflight wiki的issue讨论,RCgroup的讨论贴,聊天软件上的问答,讨论,整合而来。本人能力有限,时间也不是太充裕。只是希望尽快将这些信息发布出来以保持和老外进度的同步。对这个kalman滤波的理解并不是十分透彻,请各位在留言里面多多指教。
以下是阅读本文之前你需要具备的基本知识点,也可以看做是很多背景知识介绍,扫盲。每一条都可以扩展出很多内容,会在后续公众号推文中展开,这里不做具体解释。
1:Betaflight3.3.0RC1~3到正式版,集成的是BiquadRC+FIR2滤波器,开发者表示其效果和kalman滤波器一样,“1+2=3,数学上是完全一样的”。
2:Betaflight3.3.0正式版的BiquadRC+FIR2滤波器,需要使用CLi命令激活和设定,如果没有使用CLi命令行打开这个滤波器,飞行性能和之前的3.2.X版本一致没有变化。
3:在早期的betaflight3.3.0 测试版中,序列编号为#521之前的固件版本集成了Kalman滤波器,之后的版本kalman的代码还在固件内,但是入口被关闭了。(也就是你无法启用Kalman滤波器)
4:RS2K(最早给BF加入kalman算法的人)在RCgroup上的博客发表的BF3.3.0测试版固件,默认开启Kalman滤波器,其中的kalman滤波器代码,是RS2K写的,他在Slack里面说过,和Raceflightone使用的是一样的东西。
5:Ctzsnooze(BF开发者,就是他写了BiquadRC+FIR2滤波器的代码),强烈建议mikeller在CLi中保留kalman和BiquadRC+FIR2的入口,这样使用者可以自己使用CLi命令切换这两种滤波器,这样可以比较两种滤波器的效果。但是mikeller表示现在已经是发布RC版和正式版的窗口期了,不能做大的源代码变动,拒绝了这个提议。
6:RS2K和HelioRC的一伙人,一起搞了Butterflight(黄油固件),这个版本的固件和调参软件是Betaflight的Fork版本,也就是说完全拷贝Betaflight的内容之上修改而来,所以本质上和Betaflight是一样的东西。
7:helioRC出品了一款飞控,号称使用了陀螺仪硬件滤波,完美支持黄油固件。
8:Butterflight 3.4.2 (黄油固件)同时集成了Kalman滤波器和BiquadRC+FIR2滤波器,默认开启Kalman滤波器,可以通过CLi命令行来切换这两种滤波器。
9:kalman矩阵方程里面最重要的就是Q值(过程噪声协方差)和R值(测量噪声协方差)这两个值的确定,目前是用等效于Stage2的低通频率的方法,通过查表的方式来换算出基础的Q值,(R值固定不变),再通过少许调节Q值的方法来调试kalman滤波器。
10:kalman算法可以在8k采样率陀螺仪上完美工作,但是发挥最大性能,是在32k采样率之下。
11:betaflight是在cleanflight的基础上fork出来的版本,butterflight是在betaflight之上fork出来的版本,这些软件代码都遵循GPL3.0开源协议(通用性公开许可证),就是你无法通过商业用途赚钱,都必须公开源代码。同样,只要你使用了GPL3.0开源协议的代码,哪怕就是一行,那你的软件就等同于继承了GPL3.0协议,也必须完全公开。这个大家百度一下GPL3.0就出来了。
========开始吧========
本文中的案例都是使用butterflight来演示,实际你使用RS2k发布的那一版,也可以使用以下参数。
使用kalman滤波器的第一个难度在于确定Q值。
黄油固件的首页,提供了一套参数
放大来看,熟悉命令的可以知道,这里面其实就三条命令有用,来依次解释一下。
set dterm_lowpass_type = PT1 设定D-term的软件低通滤波器为PT1
这个就等效于,把这里改成PT1
feature AIRMODE 打开airmode feature ANTI 打开反重力 feature DYNAMIC 打开动态滤波
等效于,上面三个滑块全开的效果。
set gyro_stage2_filter_type = FAST_KALMAN 设定2阶滤波器为快速kalman
set gyro_filter_q = 400 设定kalman矩阵Q值为400
set gyro_filter_r = 88 设定kalman矩阵R值为88
BiquadRC+FIR2和kalman都是陀螺仪软件低通滤波器,所以现在最简单的办法,是用BQRC的设定值,来等效算出kalman的方程Q值。
这个默认值,就是BQRC的设定低通切断频率,90Hz。或者是你在命令行里面设定的gyro_stage2_lowpass_hz = XX 这个频率值。通过这个切断值,来换算kalman的Q值。
这里有两种方法,第一是查表。 首先在第一行里面找到你的陀螺仪采样率,例如32K,往下找到90Hz附近的数值,看起来最接近的就是84~97Hz,然后往右边找,对应的Q值大约是7。
同理,可以找出在90Hz切断频率条件下,16K采样率对应的Q=28,8K采样率对应的Q=100,
4K陀螺仪采样率,对应的Q=400。
总结一下,在切断频率是默认值90Hz的情况下,换算而出对应的kalmanQ值是 32K采样率 Q=7 16K采样率 Q=28 8K采样率 Q=100 4K采样率 Q=400
针对32K的陀螺仪,不管Q是多少,R全部固定在88,即可。
接下来,针对32K采样率的陀螺仪,就可以在命令行里面输入 set gyro_filter_q = 8 set gyro_filter_r = 88
save
来设定好kalman的Q值和R值。
第二种方法,上网 进入 https://quadmeup.com/bf_kalman_calculator/ 这个网页
好吧,接下来就是一个数字游戏,我们填入陀螺仪采样率32000,填入R值=88,然后就是凑数了,多少的Q对应多少的切断频率。
额,顺路来看看默认值……
额,对于32k来说,感觉是不是高了一些……按照5寸机通常是260Hz左右的噪声值来说,711Hz的切断频率,这第一个低通滤波完全就木有发挥作用好伐……
32K陀螺仪,设定到Q=400的表现,就是在新机状态会没有问题(新机没有震动),但是一旦有一点炸坏了,那好,抖到炸机。 但是同一架飞机,之前使用BiquadRC+FIR2滤波器设定到90Hz毫无问题的。
改成4K的陀螺仪,数值就正常了。
RS2K对于kalman的调参建议,针对32K的陀螺仪,固定R=88不变,然后Q依次从小往上调,如果噪声很大的飞机,那Q要低一些,如果飞机噪声很低,那么可以将Q调高一些,避免过度滤波。也可以经常使用这两个表格,来确定目前滤波的程度,毕竟看Hz比看Q值要容易理解的多。
需要注意的是,Q越高,其等效的切断频率就越高,这个通过查表就可以看出来,所以抬高Q,就相当于提高了切断频率的值,降低Q,就相当于降低了切断频率的值。
切断频率90Hz是默认值,如果你的飞机很“安静”,那么可以适当抬高切断频率(抬高Q),如果你的飞机噪声很大,那么可以适当降低切断频率(降低Q)。
这个也是Ctzsnooze(BF开发者)说的,其实BQRC更好调整和容易理解一些,虽说这两个参数在“数学上是完全等效的”。
在CLi中输入,get gyro 就可以查看的相关命令,这里可以看到,黄油固件保留了kalman,BiquadRC+FIR2这两个滤波器。
如果你要用回BF3.3.0里的BQRC滤波器,那么输入 set gyro_stage2_filter_type = BIQUAD_RC_FIR2
别忘记设定stage2的切断频率 set gyro_stage2_lowpass_hz =90
别忘记保存 save
然后再打开Cli确认一下命令数值是不是都正确,这就切换回BQRC滤波器了,这就可以自己尝试两个滤波器的区别了。
上图是我的测试平台:
自制玩玩的机架 飞控:matek F722 STD 电调:iPeak 35A 四合一 BLheli_32
参数设定:
陀螺仪32k/Looptime 16K Multishot PWM强制同步到32k 开动态滤波,开PT1 kalmanQ=10 kalmanR=88 moron_threshold = 200 PID为默认
以上参数仅在我的平台上测试成功,飞了30电左右,油门到底有轻微抖动,之后由于电机烧了,暂时没法继续做测试了。
其余动态滤波的开启,32K陀螺仪的开启和冷启动bug解决,以及PT1 D-term的开启,这些都是常规操作了,或者可以参考之前的公众号历史消息,就不再赘述了。
=========小工具========= 安装Kalman Lua 由于在OSD里面没有继承这个调节选项,所以似乎用遥控器脚本来调参更方便一些,当然不是说非得用这个,用电脑调参也是一样的。上图里面的数值显示有点bug,不过不影响使用。具体如何安装kalman Lua,这里就不再展开了。
kalman Lua传送门:https://github.com/papayou66/betaflight-tx-lua-scripts/releases
有看不明白的地方,或者有需要更正的地方(因为kalman新出来,相关的内容还在更新中,可能会有很多需要更正的地方),大家可以在下方留言给我反馈。
特别注意飞行安全!祝大家玩的开心!
文件链接: RS2K在RCgroup上发布的kalman固件 https://www.dropbox.com/sh/ijtkl9bfu4pgq8z/AAACQugd9iSqkkPLDT1owgY-a?dl=0
kalman Q和R值与BQRC的切断频率换算表 https://quadmeup.com/bf_kalman_calculator/
kalman滤波器 Lua脚本下载链接 https://github.com/papayou66/betaflight-tx-lua-scripts/releases
解决OpenTX使用脚本出现内存溢出的讨论贴(已解决) https://github.com/opentx/opentx/pull/5579
HelioRC的网站 https://www.heliorc.com/
Butterflight 主页 http://butterflight.co/
Butterflight 固件下载地址 https://github.com/butterflight/butterflight/releases
Butterflight 调参软件下载地址 https://github.com/butterflight/butterflight-configurator/releases
部分需要的文件: 已放入公众号云盘,需要的同学可前去下载。
|