前言
博主是工业互联网行码农一枚,尽管不是算法工程师和自动化方向的,但常常加入共事介绍控制算法原理的培训,缓缓的对小局部控制算法有肯定理解,其中应用频率最高的控制算法非 PID 莫属。很多同学在学习 PID 的时候,会被繁冗的数学公式吓倒,明天咱们就抛开数学公式,用逻辑和例子给大家讲明确“到底什么是 PID”?
PID 算法简介
PID 是一种控制算法,是 Proportional(比例)、Integral(积分)、Differential(微分)的缩写。它是间断零碎中技术最为成熟、利用最为宽泛的一种控制算法。
PID 控制器次要实用于基本上线性,且动静个性不随工夫变动的零碎。简略来说就是:相似于须要将某一个物理量“保持稳定”的场合,PID 根本都能派上用场。
工业中 PID 典型的利用场景有:温度控制、流量管制、液位管制等。
生存中 PID 的利用也很常见:自来水的压力管制、空调的温度控制、均衡车的均衡管制、汽车的定速巡航管制、无人机的悬停管制、火箭飞机的姿势调整等。
理论运行教训和实践剖析都表明,使用 PID 控制算法对许多工业过程进行管制都能失去比较满意的成果。
PID 的概念及公式
PID 的基本思路是依据偏差量的大小,使用比例、积分、微分计算出一个管制量,将这个管制量输出被管制的零碎,零碎接管到该输入量后会输入一个相应的输出量,PID 控制器再检测该输出量,并再计算偏差,而后再循环以上过程。
原始公式如下:
$u(t)=K_p \Bigg(e(t)+\frac{1}{T_i}\int^t_0e(t)dt+T_d\frac{de(t)}{dt}\Bigg)$
- $K_p$ —— 控制器的比例系数;
- $T_i$ —— 积分时间常数;
- $T_d$ —— 微分时间常数;
- $u(t)$ —— PID 控制器的输入信号;
- $e(t)$ —— 给定值 $r(t)$ 与测量值之差。
公式可简化为:
$u(t)=K_p * e(t) + K_i * \sum_{n=0}^t e(t) + K_d * (e(t) – e(t-1))$
- $K_p$ —— 控制器的比例系数;
- $K_i$ —— 控制器的积分系数;
- $K_d$ —— 控制器的微分系数;
- $u(t)$ —— PID 控制器的输入信号;
- $e(t)$ —— 给定值 $r(t)$ 与测量值之差。
- $e(t-1)$ —— 上一次给定值 $r(t)$ 与测量值之差。
很多同学可能会被下面数学公式整懵了,没关系,咱们先看完上面例子,再回头看来公式,置信你能对以上公式有新的意识。
在学习 PID 之前,咱们须要先理解什么是 开环管制 和 闭环控制,这 2 个概念可能帮忙咱们更好的了解 PID。
凋谢回路控制系统
开环管制(Open Loop Control System):不将管制的后果反馈回来影响以后管制的零碎。例如:
- 开关——按下开关后的一瞬间,管制流动曾经完结,灯是否亮起已对按开关的这个流动没有影响;
- 投篮——篮球出手后就无奈再持续对其管制,无论球进与否,球出手的一瞬间管制流动即完结。
闭环回路控制系统
闭环控制(Closed Loop Control System):须要将管制的后果反馈回来与心愿值比拟,并依据它们的误差调整管制作用的零碎。例如:
- 调节水龙头——首先在头脑中对水流有一个冀望的流量,水龙头关上后由眼睛察看现有的流量大小与期望值进行比拟,并一直的用手进行调节造成一个反馈闭环控制;
- 骑自行车——同理,须要一直的修改前进的方向与速度造成闭环控制。
闭环控制零碎通常会由以下 6 个环节组成。
咱们拿“维持水缸水位高度在 1 米”为例,来详解闭环控制中的每个环节:
传感器
:人工测量以后水位高度指标量
:维持水缸水位高度在 1 米偏差量
:指标量
– 以后水位高度控制器
:依据偏差量
计算出执行量
执行量
:传给执行器
的入参执行器
:人工用水桶向水缸中加水
其中 传感器
、 指标量
、 偏差量
、 执行量
、 执行器
这 5 个环节都比较简单,一眼就能看明确意思。最要害的环节 控制器
绝对简单一些,在 控制器
环节抉择不同的控制算法,依据 偏差量
计算出 执行量
也不同,明天咱们就具体看看 PID 的管制成果。
PID 之 比例 P
后面有说到 PID 的基本思路是依据 偏差量
的大小,使用 比例 P
、积分 I
、微分 D
计算出一个管制量。但 PID 的 3 个参数,并不是非要一起应用,能够单用 比例 P
来管制,也能够两两联结用 比例 P
+积分 I
或 比例 P
+微分 D
来管制。
咱们先看看仅用 比例 P
能带来什么样的管制成果?持续下面的“水缸”例子:
传感器
:人工测量水缸初始水位高度是 0.2 米指标量
:维持水缸水位高度在 1 米偏差量
:1 米 – 0.2 米 = 0.8 米控制器
:应用 PID 算法的比例控制,依据偏差量
计算出执行量
执行量
:传给执行器
的入参执行器
:人工用水桶向水缸中加水
通常状况 偏差量
和执行量
之间的单位不同,在以后例子里 偏差量
的单位是水缸,而 执行量
的单位是水桶,他们的容积不一样,所以咱们须要一个系数,来放大或者放大两者的关系。具体公式可形象为:
执行量
=比例 P
=偏差量
*比例 P 系数
这个时候,假如水缸旁边站着一个人,用水桶往水缸里加水来管制水位的高度。如果单纯的用比例控制算法,假如 比例 P 系数
是 0.5(相当于 两桶水的容量
等于 一缸水的容量
),咱们开始模仿加水试验:
如上图后果所示,人工用水桶向水缸中加水 8 次,就能把水缸水位加到 1 米高度。把以后水位转换成曲线,大略成果如下。
上述例子比较简单,单靠 比例 P
就能实现工作,但现实情况往往只有 比例 P
是不够的,咱们再来看一个更简单的状况,假如 比例 P 系数
依然是 0.5,但在每次加水的距离,水缸都会漏掉 0.1 米高度的水。咱们再从头模仿加水试验,看看具体后果会怎么?
如上图后果所示,当水位达到 0.8 之后,水位就不会持续减少了。因为,当水位等于 0.8 时,偏差量
是 0.2,每次往水缸中加水的量为 执行量
= 比例 P
= 0.2 * 0.5 = 0.1,而每次加水的距离,水缸都会漏掉 0.1 米高度的水,所以退出的水和流出的水相对消。
尽管,此时控制系统已达稳固状态,但 理论值
与指标量
之间的会存在一个稳固差值,这个差值叫 稳态误差
。 稳态误差
十分常见,比方:管制空调温度会因为空气温差而降温、管制无人机固定高度会受重力影响往下掉、管制汽车定速巡航会有空气阻力和摩擦力的影响而加速,这些场景都会产生 稳态误差
。
单单只用 比例 P
管制闭环回路,是无奈防止 稳态误差
问题的,因为 比例 P 系数
无奈依据工夫或次数累加,当存在外界烦扰因素时,比例 P 系数
无奈动静调整大小,那么 稳态误差
就会始终存在。
如果咱们引入工夫的维度,就能取得 2 个神器 增幅器 - 积分 I
和 抑制器 - 微分 D
,他们别离解决 比例 P
过小和过大的状况,比例 P
过小的话由 增幅器 - 积分 I
补充即可解决 稳态误差
问题,比例 P
过大由 抑制器 - 微分 D
消减来避免适度震荡。
PID 之 积分 I
(增幅器)
咱们先来看看增幅器 积分 I
,它也能够了解为累加教训,当 比例 P
过小,能够由 积分 I
补充,它的原理是利用过来的工夫一直累加。具体公式可形象为:
比例 P
=偏差量
*比例 P 系数
积分 I
=上一次积分 I
+偏差量
*积分 I 系数
执行量
=比例 P
+积分 I
设想一下,如果用只 比例 P
管制存在 稳态误差
,阐明 比例 P
过小,这时 积分 I
就会一直累加到一个很大的值,来补充 比例 P
,从而影响 执行量
。
如果最终管制成果在 指标量
左近抖动,咱们就能失去一个正负交替的 偏差量
,会在指标左近一直产生正负数累加到 积分 I
,积分 I
就会一直趋近于零,最终使管制成果趋于稳定。
咱们持续用下面“水缸加水”的例子,假如 指标量
是 1,每次漏水 0.1,比例 P 系数
为 0.5,积分 I 系数
为 0.2,咱们再从头模仿加水试验,具体数值如下。
把以后水位转换成曲线,大略成果如下。
上一轮试验只用 比例 P
管制存在 稳态误差
。本轮试验退出了 积分 I
之后就有了累加成果,在未达到管制成果之前 积分 I
会继续累加,在达到 指标量
之后 积分 I
因为惯性会持续适量管制,同时 偏差量
会由正转负再转正,积分 I
也会由正转负再转正,最终 积分 I
会继续对消掉每次漏水 0.1,管制成果趋于稳定。
增幅器有他的危险性,如果零碎出现意外或谬误,增幅器可能会被累加到无限大,导致系统不可用,所以增幅器须要有肯定的限度。
- 1、限度幅度,在任意时刻都给
积分 I
设定最大值和最小值。 - 2、不运行时清零,当零碎判断没有运行时,被动将
积分 I
清零。
PID 之 微分 D
(抑制器)
我持续再看看抑制器 微分 D
,它也能够了解为预测将来,用以后的 偏差量
减上一次偏差量
,失去的后果就可能是 下一次偏差量
,用 下一次偏差量
提前参加到计算中,就能够避免 执行量
过大,产生超出 指标量
的问题。具体公式可形象为:
比例 P
=偏差量
*比例 P 系数
积分 I
=上一次积分 I
+偏差量
*积分 I 系数
微分 D
= (偏差量
–上一次偏差量
) *微分 D 系数
执行量
=比例 P
+积分 I
+微分 D
换个“汽车刹车”的例子,安稳驾驶的车辆,当发现后面有红灯时,为了使得行车安稳,基本上提前几十米就松油门踩刹车。当车辆离停车线十分近的时候,则使劲踩刹车使车辆停下来,整个过程能够看做一个退出 微分 D
的控制策略。
能够看到,在刹车过程中,因为 偏差量
是越来越小的,所以 微分 D
= (偏差量
– 上一次偏差量
)* 微分 D 系数
肯定是正数,在管制中退出一个正数项,他存在的作用就是为了避免汽车因为刹车不及时而闯过停车线。
从常识上了解,越凑近停车线,就越应该踩深刹车,不能让车过线,所以这个 微分 D
的作用,能够了解为刹车。当车离停车线很近,并且车速还很快时,这个 微分 D
的绝对值(实际上是一个正数)就会很大,示意应该鼎力踩刹车尽快让车停下来。
再回到下面“水缸加水”的例子,当发现水缸里的水快要靠近 指标量
时,退出 微分 D
能够缩小适量加水的幅度,说白了就是缩小管制过程中的震荡。假如 指标量
是 1,每次漏水 0.1,比例 P 系数
为 0.5,积分 I 系数
为 0.2,微分 D 系数
为 0.2,咱们再从头模仿加水试验,具体数值如下。
上一轮试验应用 比例 P
和 积分 I
联结管制,最高水位达到 1.3,超过 指标量
之后,水位最低回落至 0.83。本轮试验退出了抑制器 微分 D
之后,最高水位仅达到 1.23,超过 指标量
之后,水位最低回落至 0.88,相比上一轮试验,本轮震荡幅度显著减小,这就是 微分 D
的抑制作用。
分享一个动图,很好的展现了 比例 P
、积分 I
、微分 D
的管制成果,其中红色虚线是 指标量
,曲线是用 以后值
的变化趋势。联合这个动图,大家再回忆一下“水缸加水”的例子,管制成果是不是很类似呀~
PID 原理总结
咱们用了“水缸加水”的例子,具体解释了 PID 的 比例 P
、积分 I
、微分 D
三个参数的管制原理,置信小伙伴们曾经明确什么是 PID 了。大家再回过头看这个公式,是不是也感觉挺亲切的。
$u(t)=K_p * e(t) + K_i * \sum_{n=0}^t e(t) + K_d * (e(t) – e(t-1))$
- $K_p$ —— 控制器的比例系数;
- $K_i$ —— 控制器的积分系数;
- $K_d$ —— 控制器的微分系数;
- $u(t)$ —— PID 控制器的输入信号;
- $e(t)$ —— 给定值 $r(t)$ 与测量值之差(偏差量);
- $e(t-1)$ —— 上一次给定值 $r(t)$ 与测量值之差。
最初再总结一下:
比例 P
、积分 I
、微分 D
都跟偏差量
无关比例 P
取决于以后的偏差量
积分 I
累计过来所有偏差量
之和微分 D
预测下一时刻偏差量
所以,常常有人说 比例 P
是当初,积分 I
是过来,微分 D
是将来,是不是有一种哲学的感觉,哈哈~
PID 调参口诀
最初分享个 PID 调参口诀,写得挺好还挺押韵的~
参数整定找最佳,从小到大程序查;
先是比例后积分,最初再把微分加;
曲线振荡很频繁,比例度盘要放大;
曲线沉没绕大湾,比例度盘往小扳;
曲线偏离回复慢,积分工夫往降落;
曲线稳定周期长,积分工夫再加长;
曲线振荡频率快,先把微分降下来;
动差大来稳定慢。微分工夫应加长;
现实曲线两个波,前高后低 4 比 1;
一看二调多剖析,调节品质不会低;
若要反馈增快,增大 P 减小 I;
若要反馈减慢,减小 P 增大 I;
如果比例太大,会引起零碎振荡;
如果积分太大,会引起零碎机灵。
参考援用
- 百度百科 -PID 算法
- 百度百科 - 开环管制
- PID 管制入门原理:https://zhuanlan.zhihu.com/p/197927959
- PID 控制算法原理:https://zhuanlan.zhihu.com/p/39573490
- PID 管制原理及管制框图阐明:https://www.dgzj.com/zidonghua/96044.html
- PID 参数调整,集体教训:https://blog.csdn.net/weixin_44407238/article/details/119255699
- 学会 PID- 基于板球均衡零碎:https://www.bilibili.com/video/BV1xL4y147ea
如有任何问题或倡议,欢送返回公众号【劼哥舍】留言~