串级PID为什么外环输出是内环的期望?
我们先来看一个最典型的反馈系统
是不是非常熟悉,好像控制器天生就有能力链接我们的物理世界,轻而易举的改变物理对象。
但是仔细看,说破天,这个算法也就是一堆数学公式,输入的是数字,输出的也是数字,它怎么就能改变物理量呢?
控制器输出如何连接物理世界?
正如我们所想,几个数字不应该,也不能够直接改变物理量,真正能改变物理量的是执行器。
所以更真实的控制图应该是这样的。
我们应该感谢现在的执行器做的足够好,他们通常都有自己的驱动器,我们只需要通过输出一些简单的电平信号,驱动器就会帮助我们控制执行器。
典型的执行器就是电机,电机的驱动器,例如电调,通常都是用PWM信号就可以控制。
我们现在用的算法,最终都是写在一个单片机里的,所以严格来说我们使用的是数字PID算法,算法本身的确只能输出一些数字,但是单片机对于产生电平信号,却是非常擅长,简单的设置一下寄存器,真的只需要一个数字就可以产生你想要的PWM信号了。
举个例子:有一个电机,他的手册上写着,400HZ频率的PWM信号下,100%占空比为1000转每分钟,0%占空比为0转每分钟。
这时候你根据你设计好的控制器框图,用你的期望转速,例如500,与实际转速,例如0,做差,误差500通过PID后可以得到一个控制器输出,例如90,然后把90给单片机的寄存器,它自动的就产生了一个占空比为90%的PWM信号。这个信号传递给驱动器的时候,电机飕~的一声转了起来,物理世界真的因为你发生了一些改变。
控制器如何利用误差
那在这个过程中PID的作用是什么呢?为什么不能直接用误差作为输出,产生PWM呢?
最简单的思路其实就是只用误差来产生PWM,也就是利用当前的误差(比例),这个很容易理解,如果当前我们误差很大,我们自然就希望执行器能输出最大值尽快缩小这个误差。
但是误差还有其他信息我们可以用,例如过去的误差(积分),如果如果过去我们的误差一直很大,是不是代表我们一直都处于离目标很远的地方,那我们在输出的时候也可以考虑这一点。
而且我们还能利用将来的误差(微分),如果误差的改变越来越快,代表我们正在加速变化,很有可能导致我们,超过期望位置,所以我们也要把将来的误差考虑进去。
「所以PID把误差的全部信息的加权组合」,是综合考虑你能掌握所有跟误差有关想信息,这样高级误差才能更加快准稳的消除误差,但是,「误差的组合依然就是个误差」,单次看他就是个数字,连续起来看他是个跟随误差变化的曲线,没有实际的物理意义。
如果你能理解上面两点,我们再结合实际讲一讲。
通常你会发现,最后会把控制器输出限制成[-1,1]或者[0,1],其实这只是个工程技巧,是为了方便映射成PWM的占空比。
在单片机中你需要输出某个固定频率的PWM,使他从占空比从0到100变化,但根据你的设置不同,要产生这个效果,你需要的寄存器配置也许需要从1000到2000。
如果你把PID的输出限制在[-1,1],后续通过简单的映射就可以变化到[1000,2000],这就意味着你的PID调节只需要选择合适的参数让PID的输出随着误差变化在[-1,1]之间变化即可。
相反如果你将控制输出直接对应到占空比,那你需要你的PID做处理,而且要调节参数,才能使PID输出随着误差变化在[1000,2000]之间变化。
所以你看见的处理其实都是工程技巧,是为了让你能更好的理解。
控制器的期望有物理意义吗?
PID是输出没有物理意义,那它的输入呢?
让我们找来一幅非常“合理”的控制框图。通常大家接受的逻辑是,我想控制加速度,所以我要反馈加速度,通过误差让执行器改变加速度。
好像这里的期望天生就该是加速度一样。
真的是这样吗?
那我们把这套框图重新换一下。
这里的期望还应该是加速度吗?
显然这里是期望代表的物理量应该是速度,这就有点奇怪了,整个控制结构没有任何变化,怎么期望说变就变了?
那是因为你把需要控制的物理对象改变了,所以期望值的物理量也变化了。
这就说明,「期望值是什么,与控制器没有关系」,而是与物理对象有关。更直接的原因是因为你使用了这个物理量做反馈而,期望值需要与反馈做差,所以期望值才有了物理意义。「期望值是什么取决于反馈值是什么。」
假设图1图2的期望都是数字3。
如果我不告诉你我的反馈是什么物理量,你能知道这个3代表什么物理意义吗?它没有任何意义,就是数字3而已。
一旦我告诉你图1,反馈的是加速度,这时候你才知道,3代表的是我的期望加速度,但是这还不够,单位还没确定,这时候我再告诉你我反馈的加速单位是cm/s/s,这时候期望的才具有了真正的物理意义,就是我的期望是3cm/s/s。
所以真正让期望有物理意义的原因是因为你反馈了一个物理量,而不是因为PID算法。
真正的逻辑是,
1.我的执行器能改变加速度这个物理量,
2.我把加速度作为反馈,用误差消除误差。
3.设定期望值,这个值的物理意义需要与反馈一致。
所以,你的期望值是什么其实完全取决于你的反馈值,如果不表明反馈值,那期望值就是一个数字,或者一条曲线而已。
为什么要用串级PID呢
看上去PID不是已经够完美了吗?只要我能给出反馈,我就能控制所以的物理量不是吗?
为什么还要双闭环PID呢?那为什么说外环输入是内环期望呢?为什么位置误差经过PID就变成速度期望了呢?
那我们就来设计一个位置控制器吧!
感觉好像没什么问题,但是跟之前有些许不一样,之前我们的「执行器能直接改变反馈值」,但是在这个控制器里,执行器依然只能改变升力,只不过,因为升力改变,会有加速度,从而导致速度变化,最终导致位置变化。
如果你按照图中的思路设计控制器,那就说明「你只对位置有期望」,这意味着你对升力,速度没有期望,也就意味着加速度,速度是什么都无所谓。
所以实际效果变成什么呢?「你会以一个你无所谓的加速度,和速度,到达你的期望位置。」
这时候奇怪的事情发生了,到达你的期望位置时有加速度和速度,那这个就不是「到达期望位置」了,这叫「经过期望位置」。你会发现你的对象在期望位置附近“反复横跳”,超过后,又退回去,退过了,又超过去。
这时候你才想起来,原来「你期望的是停在期望位置上」。「什么叫停在期望位置上?就是到达期望位置的同时加速度与速度都为0。」
这个问题是如何产生的,为什么之前没有这个问题。
之前在单级PID时我们举的例子中,期望被控制的物理量,都是可以直接被执行器改变的。
但是在这个例子中,「期望被控制的物理量,不能被执行器直接改变,但是可以被间接改变,并且你知道间接改变的过程。」
之前我们想控制位置,类似于控制机器人,给出命令,它直接走到对应的位置。
现在我们想控制位置,类似于控制车,你只能踩油门加速,或者刹车进行减速,你只能通过速度控制间接控制位置。
但是你肯定知道,车我们也是可以控制位置的,还记得驾校里的倒车入库吗?不就是让你精准的控制位置吗?
开车的时候是怎么控制位置的呢?你想停在指定位置的时候,你先以一定的速度前往指定位置,快到的时候,通过刹车不断减速,直到速度为0,停到期望的位置。
这个过程告诉了我们什么?我们只通过控制速度就可以间接控制位置,也就是说「我们可以通过控制某个物理量的变化快慢,从而间接控制这个物理量。」
所以我们只需要选择「合适的速度变化曲线」就可以停在我们想要的位置。那我们就可以把控制器设置成下面的结构。
什么是「合适的速度变化曲线」呢,
首先当到达期望位置的时候,速度应该为0。
其次当没有到达期望位置的时候,期望速度是可以减小位置误差的。
总结一下:「期望速度必须能减小位置误差,且位置误差为0时,期望速度为0。」
什么意思呢?如果前方为正方向,当期望位置在我们前方时,即target-current>0,那我们就希望能有个向前的正速度,去缩小这个误差,当误差为0时,我们希望速度为0。满足这样的过程的速度变化曲线,就是「合适的速度变化曲线」。
想想开车的时候,快到终点的时候会出现什么操作?
新手在没达位置的时候,希望有一个比较快的速度,快到了直接一脚刹车踩到底。
高手可以提前预判,匀速降低速度。
更高阶的可以变化的减速让整个速度变化如丝般顺滑。
就有了下面的曲线。
(第一个曲线是实际中是做不到的,因为速度减小需要过程,不能突变)
因为我们对期望速度的要求「期望速度必须能减小位置误差,且位置误差为0时,期望速度为0。「所以我们发现这些期望速度都是」与位置误差相关的且经过0点的曲线」。
位置误差与期望速度在这时候才建立起的关系,注意,强调一遍,是我们主动把位置误差与期望速度联系起来的,起因是我们希望控制速度达到控制位置的效果。
而这种控制能够被实现的本质是,「速度与位置存在我们已知的简单变化关系,即速度的积分是位置」,所以改变期望速度才能改变位置,才能减小误差。
所以合理的控制过程应该就可以设计成这样。
只要找个合适的函数,根据误差生成合适的期望速度曲线就可以了。
我们最常使用的是什么样的曲线呢?
是不是非常熟悉。
因为这两个曲线满足「合适的期望速度」的要求,同时也非常的简单。
只要是满足「合适的期望速度」的曲线都可以作为期望速度,显然如果在外环使用PID也是可以的,但是为什么实际中不这么用呢?因为添加积分(I)后,导致响应变慢,添加微分(D)容易引入噪声,只用P又简单又有效,何乐而不为呢?
到这里外环的输出终于理所应当的变成了内环的期望,但是这并不是因为这件事本就应该成立,而是通过你的设计,和真实存在的物理关系,才设计出来的合情合理的双闭环控制器。
我们再回忆一下这个控制器的设计过程
「1.执行器输出无法直接控制目标物理量。」
「2.发现控制器能控制物理量的变化量(微分)。」
「3.你想了个办法,可以通过控制物理量的微分,按照某种曲线变化,从而达到间接控制目标物理量。」
「4.这个曲线必须满足两点,存在目标物理量误差的时候,应该产生一个能减小这个误差的变化,且当没有误差的时候,变化量也应该为0。」
「5.选择最简单实用的曲线即可,所以外环选择KP。」
「6.这个控制能成功的本质是因为,间接控制能成功,间接控制能成功的原因是因为,执行器能改变的量,与目标物理量之间有简单的物理关系。」
所以为什么外环的输入是内环的期望呢?因为你在设计控制器的时候,内环的目的就是实现用执行器控制直接能改变的变化量,外环的目的就是找到合适的曲线,来引导目标的微分变化,从而达到间接控制的效果。
你现在能不能理解,「内环是外环的微分」?
如果你对这些还是意犹未尽,下次我们可以讲讲为什么要选择不同的外环曲线,大误差,大增益,小误差,小增益的KP曲线,与大误差,小增益,小误差,大增益,sqrt曲线谁更有优势。
ok,今天就讲这么多,我是如果没有更新就是在出差的zing,一个有趣的飞控算法工程师,我们下期见。
zinghd
一个有趣的飞控算法工程师
个人公众号:无人机干货铺
长按识别二维码关注
原创不易,如果觉得不错可以动动手指,点赞,转发分享给更多的人