常用四轴的两种PID算法
这里主要讲解的PID算法属于一种线性控制器,这种控制器被广泛应用于四轴上。要控制四轴,显而易见的是控制它的角度,那么最简单,同时也是最容易想到的一种控制策略就是角度单环PID控制器,系统框图如图所示:
上述角度单环PID控制算法仅仅考虑了飞行器的角度信息,如果想增加飞行器的稳定性(增加阻尼)并提高它的控制品质,我们可以进一步的控制它的角速度,于是角度/角速度-串级PID控制算法应运而生。在这里,相信大多数朋友已经初步了解了角度单环PID的原理,但是依旧无法理解串级PID究竟有什么不同。其实很简单:它就是两个PID控制算法,只不过把他们串起来了(更精确的说是套起来)。那这么做有什么用?答案是,它增强了系统的抗干扰性(也就是增强稳定性),因为有两个控制器控制飞行器,它会比单个控制器控制更多的变量,使得飞行器的适应能力更强。为了更为清晰的讲解串级PID,这里笔者依旧画出串级PID的原理框图,如图所示:
同样,为了帮助一些朋友编程实现,给出串级PID伪代码:
四轴专用PID参数整定方法及原理
使用PID的四轴会在飞行中震荡,告诉大家为什么光使用PID并不能实现对四轴姿态‘足够好’的控制。文章中还是涉及了不少自控原理和其他控制相关的姿势,没有一点底子的话确实会看着很困惑(不然那么些人花好几年学控制还有什么意义?)。如果你只想知道结论的话,直接看文章开头和结尾部分就好了
PID控制器是什么?
我想每一个看到这里的人都对PID的概念有了足够的了解,我一遍遍叽歪比例积分微分没有任何意义。这里我只想说一些大家提的较少的‘重点’内容:
PID控制器是一个线性的控制器!从这里开始我们进入正题了,虽然若干年来PID已然成为了世界上使用最普遍的控制方法,也逐渐被人们神话到几乎可以控制一切………………但是,从理论上来说,只有‘线性的,符合要求的’被控系统才能在PID控制下实现良好的控制效果。
所以说,我们首先第一步,要保证我们的被控系统在被PID控制的区域‘表现为’一个线性系统才行。于是这里有人会说了,现实中没有哪个系统是线性的,自然,我们的四轴飞行器在大范围内是一个非常典型的非线性系统(随便按照理论推推模型就会出现漫天的三角函数),也就是说,我们‘仅’使用标准PID控制的话是不可能让四轴从各个姿态回到目标状态的过程都能保持稳定。于是这里出现我们使用PID时要注意的第一个问题:
我们的PID控制只能工作在四轴角度偏移不大的一个近似线性的区域内。这个区域没有定论,不过你要是飞机偏了90°的话想用PID调回到水平状态指定是非常危险的事情。PID的模型相关问题非常重要也比较费口舌,我们等下认真讨论,现在要先说另一个非常重要的非线性问题:
要保证我的控制通道与电机的输出力矩是线性的。如果我们的控制通道与电机输出力矩都不是线性的的话,我们的PID控制就很难起作用了,节省时间不举例子了,不明白的自行补脑吧,于是我这里要提醒大家的事情是:我们的航模电调调整的都是力矩而不是转速(虽然它叫做电子调速器),这是我们的福音,因为大家知道,螺旋桨产生的升力与转速的平方成正比,而角加速度与力矩成正比,正是因为我们的电调让电机产生的升力与我们输出的油门量成正比了我们才能使用PID控制器对四轴的姿态进行控制。这里可以看下我的四轴使用的四合一电调输出的升力与油门的对应曲线:
图中横坐标是输出油门的百分比,纵坐标是四个电机产生的总拉力(单位暂定kg),可以看到,具有非常好的线性关系,所以我们可以使用PID对大四轴实现比较好的控制。于是我们首先发现了第一个问题,有人反映小四轴不好调参数,因为小四轴没有专用的电子调速器,所以油门与输出力矩并不是严格线性的(这里我没有实践过,请大家随意批评指正),这时使用PID控制性能就会明显下降,当你的电机输出力矩与你的控制信号不是线性关系的时候,请先使用软件补偿的方法对油门做一下分段的线性仿射变化,再设计PID控制器。
不过对于大四轴而言貌似就不用那么麻烦了,那我们直接进入PID的控制模型环节。
评论
查看更多