背景介绍:
Sugar 是个胆子小又爱折腾的陈年老创客,喜欢玩儿飞机,关注 ardupilot。
曾经发过推文《arducopter 低通滤波与D控制器解耦合》,就是因为受不了 ardupilot 多年不改一回的 AC_PID 库的陈年老 bug。
然而,Sugar 上个月突然发现 ardupilot 竟然动了许多年都不动一下的 AC_PID 库,而且代码更合理,通用性更强,当时就决定要写个推文。
由于 Sugar 最近在玩儿车,所以先移了这套新 AC_PID 库到车上并调试验证确实不错,所以这篇文章就拖延到了现在。
下面就切入正题吧。
姿态角速度环的 24 个参数
玩 arducopter 多轴飞机的玩家一定知道这些参数。大家常说的“调姿态 pid”,说的就是这里。
- 终于一统江湖
从前 arducopter 的姿态 pid 在横滚(roll)、俯仰(pitch)用相同的接口,而偏航(yaw)用的是单独的接口。现在 AC_PID 库对外都是相同的接口,希望这种一统江湖的做法可以千秋万载,毕竟真是太方便了。
- 江湖上现在啥样子了呢
明明说是 24 个参数,上图中只有 8 个参数,咋回事儿?
不是 Sugar 把剩下那 16 个吃了,而是因为 roll、pitch、yaw 用统一的控制器。这里从控制器的角度说 8 个就可以了。
我们注意到图中的参数名写成了 “ATC_RAT_XXX_????”,这里的 “XXX” 在横滚(roll)上就是“RLL”、在俯仰(pitch)上就是“PIT”、在偏航(yaw)上就是“YAW”,比如:横滚(roll)的 P 控制器参数就是 ATC_RAT_RLL_P 这样。 - 江湖新秀,三个低通滤波器
上图 3 个橙色框框是 3 个低通滤波环节。这里的“低通滤波”是啥意思呢?下面 Sugar 就用通俗的方式说一说:
说“做人要有主见,同时要跟得上时代”,这里“主见”是人固有的想法,“跟得上时代”是说人要能接受新事物。
假设一个人绝对坚持固有的想法,对新事物完全不接受,就是我们常说的“老顽固”,这种新事物完全走不通的情况就是“不通滤波”。
假设一个人没有自己的想法,别人说啥是啥,接受一切新事物,就是我们常说的“无脑”,这种对新事物来者不拒的情况就是“不滤波”。
想做一个靠谱的潮人,要适度的中和自己的认识和新鲜事物,跟得上潮流的节奏又不乱自己的步伐。用数学来表述就是“接受的想法 = 因子1 * 自身认识 + 因子2 * 新事物”,满足“因子1 + 因子2 = 1”。把这个关系可以整理一下,变成“接受的想法 = (1 - 唯一因子) * 自身认识 + 唯一因子 * 新事物”,满足“0 < 唯一因子 < 1”。这里的“唯一因子”就是本段首句中的“适度”。这种适度以新鲜事物提升自我认识的情况就是“低通滤波”。
下面 Sugar 用实时飞行数据来说一下这 3 个低通滤波环节,并给出 Sugar 认为好的评判标准。
这里 Sugar 使用自己写的工具软件 ArduPilotLog 的脚本分析功能来展示。
首先,看一下 ATC_RAT_XXX_FLTT 参数的效果:
如图中所述,Sugar 认为:滤波后曲线更平滑,并且与未滤波前没有很大相位差的滤波参数值是好的。 下面看一下 ATC_RAT_XXX_FLTE 参数的效果:
下面再瞅一瞅 ATC_RAT_XXX_FLTD 参数的效果:
应该能注意到:上面 3 幅低通效果图是用横滚(roll)的实时数据展现的。右上角都有图例,在上面的“当前江湖概况图”中 Sugar 用淡淡的绿色标示了 log 数据的名称(就是图例名)。 - 老江湖换新装,pid和ff
这里 I 的饱和值 IMAX 就是用的默认参数,Sugar 调过很多飞机,从来没有动过这个家伙。
P、I、D 三个参数就不多说了,大家按自己飞机调就是。
关于 FF 说一下 Sugar 的体会:在 Yaw 上加合适的 FF 可以使 Yaw 的控制更“跟手”,用遥控器飞的时候能明显感觉到。对于 Roll 和 Pitch,一般不加,除非飞机结构很紧凑且动力又非常大,pid 很小都hold不住,这里调 FF 会有明显的效果。
既然都是老江湖,怎么调 Sugar 就不多说了,上一幅图,看下效果。
角度环的 3 个参数
这里按地面站社区斯东大神自动调参的经验,把角度环的 P 值调得比较大,效果确实不错。
角度环的三个参数 ATC_ANG_XXX_P 与 AC_PID 库无关,本篇讲姿态环免不了要提一下这 3 员老将。
Sugar 按 ardupilot 新的 AC_PID 库升级了自己的 QGC 调参插件,当下的参数如下。
解度环跟踪效果如下:
一个孤零零却效果显著的参数
ATC_RATE_FF_ENAB 前馈使能。
就是一个使能数据,参数值就是:使能、不使能。没什么要调的,直接使能就是了。至于原因,看下图:
一个被很多人忽视并且可以继续忽视的参数
ATC_INPUT_TC 调节前馈强度。
上面说使能前馈效果显著,有没有想过,按正点的设计思路:凡是参数都该是能在一定范围内调节才对。这么想的话,前馈就不应该是个只有“使能”和“使不能”的二值参数。
如果按这个思路去追代码,就会发现有个参数是可以调前馈强度的,就是这个 ATC_INPUT_TC。
在 ardupilot 代码里,这个值的倒数在开方控制器里相当于前馈的 p 值。这里上个代码截图。如果 Sugar 说:不管看不看得懂就这样了。会不会有人来揍我?
千万别来揍我,我这么说也是有原因的,看下图:
人家 ardupilot 这里不是都说了嘛:直升机和潜水艇默认就是 0.15。况且 Sugar 也从来没有调过这个参数,一直用默认也觉得挺好。
因为 Sugar 对这个参数确实没经验,所以说是个“可以继续忽视的参数”。不同意的别来揍我哦,开篇都说了我是个胆子小的创客,吓坏我可就没推文了。
至此姿态环相关的最新的 29 个参数都尽我所能介绍完了,有啥想交流的欢迎各种方式给我反馈。
PS
Sugar 胆子小,因为被大飞机切过胳膊缝了针,奈何又太爱玩飞机,喜欢研究 ardupilot 飞控代码。所以找到烈火狂龙团队专门做了一套小且功能全面的小飞机,Sugar 在 gitlab 上维护软件代码。
Sugar 推文里的数据就是这个小飞机的。
起初以为做个小飞机很容易,3月份就开始了。但实际比想像的要波折得多。
为了尽可能如意,最后甚至单独定制了动力马达。过程中花了不少时间和钱,这里非常感谢烈火狂龙团队的支持。烈火狂龙本人也和 Sugar 一样是个陈年老创客,我们这些在“创客”这个词还不被人所知的年代成长起来的创客做的东西非常的创客。
随手拍几张套件照,诚邀创客欣赏:
关注作者
欢迎扫码关注我的公众号MultiMCU EDU
。
提示:在公众号“关于我”页面可加作者微信好友。
喜欢本文求点赞,有打赏我会更有动力。
请我喝杯咖啡如何?
微信 支付宝