PID算法学习
以下内容来自对于B站链接的学习笔记:
<学会PID-基于板球平衡系统-初中基础就能听懂的简单讲_哔哩哔哩_bilibili>
1.闭环控制概念
以小车为例,在现实中很难要求小车一直走直线(因为电机的性能问题),此时我们可以给小车提供一个参照物:比如一条白线。这样,小车通过传感器,可以监视自己与白线的偏差距离,偏差多少,小车就修正多少。这样的控制流程可以保证小车一直沿着白线直线行走,上述流程可以称为闭环控制。
闭环控制的流程图
那么应该如何从偏差量得到执行量呢?,就需要使用PID算法
2.PID算法
PID算法由三个环节组成
(1)比例环节 P P P
- 比例P定义:
比例值是有数据范围的
- 比例环节
比例环节分为以下三步:
-
偏差量 = 目标量 - 小球位置
-
比例P = 偏差量 × \times × 比例系数
-
执行量 = 比例P
偏差量 需要乘以 一个比例系数的原因是:偏差量与执行量的单位可能不同(因为偏差量来源于传感器,执行量需要传递给执行器),需要二者统一到一个范围内.
- 比例P的缺点
-
数值固定
-
不辨情形
不辨情形指的是,比例P不能够环境动态调整大小;而导致这种情况的主要原因,是因为比例P是对于单一时间点而言的。即在某个时间点,传感器传递一个偏差量,我们计算出一个比例值P。
- 解决方案:
在时间维度上,需要增幅器(即积分 I ),和抑制器(即微分D)来完成增幅和抑制,来解决比例值P过小和过大的情况
比例P过小时,由增幅器进行补充;比例P过大时,由抑制器进行削减
(2) 积分环节 I I I - 增幅器
- 积分 I 定义:积累经验
积分 I 利用了过去的累加经验,来判断比例P是否需要增加数值。这就是增幅器的原理。
- 积分环节
-
偏差量 = 目标量 - 小球位置
-
积分 I = 积分 I + 偏差量 × \times × 积分 I 系数
-
执行量 = 比例P + 积分 I
我们具体地理解一下:
如果偏差量一直朝一个方向出现(比如向100的方向出现),说明比例P小了(没有把小车纠正回直线路径),这是积分 I 就会不断累加到一个很大的值,来影响执行量。
如果在目标附近(也就是 0 附近抖动),会发生什么样的情况?这个时候偏差量会不断在正、负数之间跳动,这就会导致积分 I 不断趋近于 0 ,也就不会产生效果了。
- 增幅器需要限制
如果系统出现意外或者错误,增幅器可能会累加到无限大,这就会影响系统的正常工作。通常使用两种方法来限制增幅器 积分 I :
- 限制幅度
在任何时刻限制积分 I 的幅度,即设置上限和下限
如果积分 I > 最大值:积分 I = 最大值
如果积分 I < 最小值:积分 I = 最小值
- 不运行时清零
当系统判断此时没有在运行或者目标丢失时,主动将积分 I 清零
(3) 微分环节 D D D - 抑制器
- 微分D定义:预测未来
用当前的偏差量减去上一次的偏差量,得到的结果就可能是下一次的偏差量,我们可以让下一次的偏差量提前参与到当前运算环节中。
- 微分环节
-
偏差量 = 目标量 - 小球位置
-
微分D = (偏差量 - 上一次偏差量) × \times ×微分D系数
此处偏差量 - 上一次偏差量 其实就是 下一次偏差量
-
上一次的偏差量 = 偏差量
-
执行量 = 比例P + 积分 I + 微分D
我们具体理解一下:
在小车沿直线行驶模型中,如果小车以非常快的速度偏离直线,这个时候微分D的调整量就会非常大,从而避免小车完全偏离直线导致目标小车,系统给停止工作。
(4) PID算法的流程:
- 基础流程
这里由于UP主设计的板球系统,需要独立的控制x和y两个方向上的倾斜量,因此需要两套PID系统。
代码中,每个变量都储存了两个量(即x,y),代码格局for循环运行两次。
- 改善流程 - 追加时间因数
追加时间因数的原因是:由于系统的采样频率会影响到偏差量,进而影响PID值的计算。比如每5秒获取一次偏差量,一般来说,会比每1秒获取一次偏差量要更大。
3. PID调参
(1)明白各项功能
- 比例P - 基础运行能力。大小适中
P过小,则系统无法达到目标
P过大,则系统会超过目标
- 积分 I - 补足P过小产生过的问题,对小偏差量起效
- I 过小,则不能达到目标。
在实际系统中,表现为:小幅度的偏差无法回正。
- I 过大,则很容易超出目标
在实际系统中,表现为: 系统表现迟钝
- 微分D - 阻止超出目标
D 过小,则超出目标
D 过大,则系统会在目标范围内高频抖动,对误差非常敏感
(3) 调节顺序和关联
三个环节的系数从0开始调节,0代表这个环节不起作用。以下给出顺序:
- 先调节P
一般先调节P,P的系数是可以计算的。我们需要计算出偏差量与执行量的比例。
小车直线行走系统涉及速度,先不考虑
按照板球平衡系统来说,摄像头画面宽度是240,而舵机可运行角度设置为50(这不一定是角度,只是代表的数值),那么就可以得到 P 系数 50/240=0.2
之后D和I的顺序是要看设计的系统对什么敏感。板球平衡系统对 I 不敏感(即有足够的能力使小球滚动,但很有可能用力过猛,抑制器的作用更大)
- 调节D
抑制小球超出目标
对于板球平衡系统,小球每移动50抬高5
有足够的限制力时,可以增加P
- 调节 I
能加快回正
有足够的回复力时,可以减少P