介绍
关于PID的工作原理有很多解释,其中很多都是很棒的。 主要问题在于如何解释。 当我对数学知识不多时,我尝试去理解PID方程的想法,并且非常努力地寻找一个教程,该教程没有用我理解的符号来解释它。 符号很吓人,好吗?
我敢肯定,你们中的许多人都可以很好地阅读数学符号(现在在一定程度上,我现在也是),但由于有人不习惯,我发现符号和符号非常令人生畏。
我想在这里解释PID的方式是尽可能少地使用数学,而是优先考虑概念而不是方程式。 它们是适用于大量应用程序的东西,我认为对于任何人(甚至是程序员)学习都非常有用。
什么是PID控制器?
PID控制器本质上是一种使系统稳定的方法,无论是四轴飞行器,核反应堆中的燃料棒还是生物机械狗用安全带的手臂角度 。
PID会吸收一定数量的误差(稍后会详细介绍),以及减少该误差的方法,并计算出逐步解决它的速率。 例如,它是一种从陀螺仪获取角度数据并告诉每个转子旋转多快的方法。
P,I和D代表比例,微分和积分增益。 以后还会更多!
问题
您所在的汽车可以向前或向后逼近白线。 您唯一的指令是编写一个计算机程序,使其在该白线上直接停止,同时也尽可能快地到达该白线。 您的程序所能做的就是向汽车施加负加速度或正加速度。
想到的最简单的想法是,如果您落后于潮流,那就加油吧! 如果您在生产线前面,请向后踩油门!
很容易看出这是一个有缺陷的解决方案。 到达终点线时,您将变得太快,无法越过终点线射击。 因此,也许您的下一个解决方案是按比例将油门推到距管路的距离。 您离得越近,推动气体的作用就越小。
现在,与此有关的问题是它会导致与先前方法相同类型的现象。 您振荡,越过线,然后反转并越过线。 这将始终达到均匀的振荡(类似于正弦波)。
虽然这不是我们的解决方案,但这是其中的一部分。 这是我们P ID的比例部分。
(部分)解决方案
如果您在接近线路时有减速的方法怎么办? 一种即使在您达到目标之前也可以先行放慢速度的方法。
这是在PI d的d进来。你们当中谁在高中或大学的微积分了(如果你没有不用担心!)可能知道的衍生物是什么。 无需太深入探讨,它只是一个描述事物变化率的方程。 例如,您可以将其视为汽车的速度。 速度是汽车位置的变化率。
如果我们监控汽车的行驶速度,那么这将为我们提供第二个工具来停止在那条线上。 当我们接近线时,我们希望走得更慢,因此可以将PI D中的“ 衍生工具”视为一种阻力类型。 我们移动的越快,它的价值就越大。 当我们随着比例增益水平的降低而越来越近时,这更容易生效。 当误差接近零时,微分增益会降低整体功能。
这可能有点令人困惑,所以让我们加上一些数字吧!
算一下!
可以说,我们从尝试到达的线开始50米。 由于我们相距50米,这意味着我们的误差等于50。
PID控制器的每个成员都有一个所谓的增益 。 这只是乘以它的数字,它改变了该成员对方程整体的影响程度。 例如,如果我们的收益全为1,则每个成员(P,I和D)将同等地影响方程。 让我们假设,为简单起见,目前我们的收益都是全部。
让我们计算一下P和D(稍后再担心I)。 我们的比例增益是50,因为它直接基于误差。 现在,我们还没有动,所以我们的微分增益为零。 它直接基于我们的错误更改。 让我们这样写出来(K代表Gain不要问为什么):
现在我们要移动了! 也许有点太快了……无论哪种方式,我们现在都试图将汽车加速到50m / s。 也许这太苛刻了? 这就是增益的来源。PID增益的平衡通常是手动完成的,因为它只需要执行一次(除非对系统进行更改)。
对于那些敏锐的眼睛,您会看到导数的增益为负。 这是因为我们希望它抵抗比例增益。 我们离点越近,我们想走的越慢。 因此,我们希望速度对整个加速度值产生负面影响。
您会看到,随着我们加快并减少误差,比例增益将降低,而微分增益将升高(因为我们正在加速)。 这甚至意味着,随着我们走近线,如果我们走得太快(如微分增益太高),它实际上会使我们陷入负加速度,从而告诉我们的系统减速。
可以说,下一次我们对数据进行轮询时,我们现在将以5m / s的速度行驶,而我们的汽车距离我们的对象40米。 让我们看看我们现在正在加速的努力:
您会看到,我们的微分收益使我们越接近目标就越快。 它甚至可能使方程式变为负数,导致我们在到达目的地之前就放慢了速度。 这就像在红灯接近线路时按下分界线。
那我呢?
现在,我将Integral元素保存到最后,因为它通常是最不重要且最难看到其价值的。 许多系统甚至都不包含它!
I代表积分增益。 积分称为一段时间内的总和。 本质上,如果您有一个映射对象速度的方程,则该方程的积分将映射对象的位置。 这是因为它记录了每个时刻的速度总和,从而得出了对象移动的距离。
您可能会问,这对PID有何帮助? 好了,既然我们已经有了比例和微分增益,您可能会问,如果我们略微超调,会发生什么? 问题在于,现在纠正该细微错误非常缓慢(并且可能会有一些错误)。 当比例增益试图产生较小的速度时,导数现在正在抵抗该速度。
如果我们将总误差相加,那么这会将我们拖回到零误差的Goldilocks区域,从而解决了非常接近零误差的点处的缓慢加速问题。
编辑:正如Reddit上的一些伟人指出的那样,我没有提到积分项的最重要用法。 积分项用于消除系统误差。
例如,假设转弯处有少量阻力(在现实世界中总是存在),或者您的四轴飞行器增加了一些重量。
由于其累积水平,积分项能够将其拖回正轨。
计算增益
没有收益,系统将无法正常反应。 它可能会振荡,或者微分和比例元素可能会相互抵消。 平衡它们是使系统达到平衡的原因。
不幸的是,没有直接计算您想要使用的增益的方法。 有很多方法可以根据系统的反应来动态地找到良好的价值,但是有很多关于如何做到这一点的论文,我发现这是一个非常困难的概念,很难用数学来解释。
幸运的是,有许多好的方法可以手动执行,除非对系统进行了任何更改,否则您无需重复执行一次。
我发现最有用的方法是调整比例增益,直到出现稳定的振荡并找到理想的速度以达到零误差为止。
从那里您要调整微分增益,直到振荡停止。 如果系统现在太慢,请重复该循环。
附录
自从我学习PID以来,我一直对它们着迷。 从他们几乎拥有智力的意义上讲,它们非常酷。 只要您能找到错误的根源和减少错误的方法,PID就可以解决问题。
是否想通过改变平台的倾斜度来防止球从平台上滑落? 使用PID! 是否要计算使四轴飞行器倾斜多少以阻止其横向移动? PID是完美的。
这是非常有趣且适用范围很广的概念。
如果您走到了这一步,非常感谢您的阅读。 我一直很乐意与人分享这个概念,纯粹是因为我觉得这很容易解释。 如果您发现令人困惑的地方,请给我发消息,评论或发推特给我@bittneradave ,我将尽力回答您的问题/对此帖子进行修订!
From: https://hackernoon.com/a-conceptual-breakdown-of-pid-controllers-9fa072a140a5