PID控制应该算是一种应用非常广泛的控制算法。 PID控制可用于多种目的,从控制部件的温度到控制无人机的飞行姿态和速度。这里我们将从原理的角度来理解PID控制。
PID(比例积分微分)实际上是指比例积分微分控制。首先,我们来整理一下图表和公式。如果你不明白也没关系。 (当我第一次看到这个算法时,我明白了公式,我知道如何使用它,如何编写代码,但我不明白原理。我不明白为什么三个比例项为真。),微分,我们用积分来实现最优控制。为什么我不能有两个?每个项目的作用是什么?)
通常,在确定系统的输出时,通过使用比例、积分和微分三种计算方法将输出叠加在输入上来控制系统的运行。这是一个简单的例子:
比例控制算法
抛开另外两个,我们先讨论最简单的PID比例控制。让我们用一个经典的例子。假设你有一个水族馆。最终的控制目标是确保水族箱内的水位始终保持在1米的高度。如果一开始水族箱内的水位为0.2米,则当前水位与目标水位之间存在误差,误差为0.8米。站在你旁边,这个人朝坦克走去。 加水以控制水位。使用简单的比例控制算法意味着添加的水量u 与误差error 成正比。
所以:u=kp*误差
如果kp为0.5,那么在t=1时(第一次加水时,即系统第一次加入控制时),u=0.5*0.8=0.4,加水量这次将水位降低到0.2,然后从0.4上升到0.6。
然后,在时间t=2(第二次控制应用)时,当前水位为0.6,因此误差为0.4。 u=0.5*0.4=0.2,水位再次上升0.2~0.8。
如此循环下去,这就是比例控制算法的工作原理。 可以看到,最终水位达到了要求的1米。
然而,单独的比例控制有几个缺点,其中之一是稳态误差。 (我也读了很多书,思考了很长时间才明白什么是稳态误差以及它为什么存在)。
如上例,根据kp的值,最终会达到1米。但是,如果kp较大,则到达速度较快,如果kp较小,则到达速度较慢。不会出现稳态错误。但如果加水过程中水箱漏水,假设每次加水漏0.1米水。
如果我们仍然假设kp为0.5,就会出现这样的情况:假设多次加水后,水箱中的水位达到0.8,不再发生变化。由于水位为0.8,所以误差为error=0.2。因此,每次向水箱添加的水量为u=0.5*0.2=0.1。同时,每加水一次,添加的水就从水箱中流出0.1米。水会流出,水位不再变化。
所以目标是1米,但最终系统中的水位达到0.8米并停止变化,系统达到稳定状态。由此产生的误差是稳态误差。
(现实中这样的情况还有很多,比如水箱漏水。比如控制小车的运动时,摩擦阻力就相当于“漏水”。控制机器人的飞行时,摩擦阻力就相当于“漏水”。)阻力对应于“漏水”。我们可以看到,在这个例子中,手臂或无人机上的任何阻力和磨损都是“漏水”。
因此,很多情况下仅靠比例控制是无法满足要求的。
集成控制算法
继续上面的示例,但仅使用比率,我们可以看到存在临时误差,最终水位固定为0.8。因此,控制引入了另一个与误差积分成正比的分量。因此,比例+积分控制算法为:
u=kp*误差+ki*误差
继续上面的例子,第一个误差error是0.8,第二个误差是0.4。此时我们就得到了误差积分(离散情况下的积分实际上是累积的),error=0.8+0.4=。 1.2.本例中的受控变量除比例部分外,还有积分项乘以系数ki。该积分项累加了之前的误差,因此可以有效消除稳态误差(假设如果只有比例项,系统将陷入稳态误差(上例中为0.8)。通过添加项,输入增加,让水箱内的水位超过0.8,逐渐达到1.0的目标。)这就是积分项的作用。
微分控制算法
作为另一个例子,考虑制动情况。平稳行驶当前方看到红灯时,为了平稳行驶,基本规则是在看到红灯前几十米处松开油门并踩刹车。如果您的车辆距离停车线太近,请猛踩刹车以停止车辆。整个过程可以看作是一种微分控制策略。
坦率地说,离散情况下的导数就是误差的差值,也就是时间t和t-1时刻的误差差。即,u=kd*(error(t)-error(t-1) )),其中kd是A系数项。在制动过程中,误差越来越小,因此在控制中添加负项可以防止汽车在不踩刹车的情况下超车。我断开了线路。常识告诉我们,汽车越接近停车线,我们就越需要小心刹车,以防止汽车越线。因此,这个微分项的作用可以理解为施加制动。如果汽车非常接近停车线并且速度仍然很高,那么这个微分项的绝对值(实际上是负数)将会非常大。这意味着你必须更用力刹车才能停车。
代替上面向水族箱加水的例子,如果水族箱中的水接近1,添加微分项将阻止水被添加到任何更高的高度。简而言之,冲击控制过程花费的时间更少。
现在,如果我们回顾一下这个公式,就非常清楚了
括号中的第一项是比例项,第二项是积分项,第三项是微分项。第一项只是一个系数。它往往只需要在离散时间使用,控制可以简化为:
每一项之前都有一个系数。这些系数必须通过实验确定。为了方便起见,这些系数是统一的。
这使得内容更加清晰,比例、微分、积分项前面都有系数,离散化的表达式非常适合编程实现。
至此,PID的原理和方法就完整了,剩下的就是实践了。在实际工程实践中,最困难的就是三项系数的确定,需要大量的实验和经验。不断的尝试和正确的思考将选择正确的系数并产生良好的控制器。
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/84641.html