PID的学习与理解(一)

前言

最近在做SRT,方向是足式机器人,,例会上老师要求我们学习PID这一有趣的东西,对于新手的我来说只知道个PDD GDP 。于是乎,在广泛的搜索资料和摸索中,也是勉勉强强了解了一下什么是PID。

什么是PID?

什么是PID呢?相信在网络上已经有很多的PID的解释了,解释大多有趣好动,在这里我也简单的说一下。

PID是一种在实验控制中广泛运用的一种控制器,它通过p(比例)I(积分)D(微分),将偏差的比例积分微分通过线性组合构成控制量,用该控制量对受控对象进行控制,这就是PID算法。

举个有趣的例子:
在家中洗澡的时候,往往是用手来调节水的温度,所以每当冬天洗澡,我就会缩成一团 。用手调节温度往往是不好的,有的时候调小了,有的时候调大了,对人的身体健康都是有害的,这个调节过程我们就可以将他近似地想成是一个PID肉体控制器~。

P:P总是获得水温的差度。由于每次改变的是误差,所以我们可以把它想象成一个加热器,我们如果想要把水温升到某一温度时,我们需要加热,温差过大就开足马力加热,太小则稍微加热,建立一个一次函数的关系,就可以实现最基本的“比例”控制了,Kp大,调节作用会越激进,Kp变小可以让调节作用更保守。但是每次加热不可能稳稳的加热到需要的温度,总是在其上下徘徊。因为我们每次增加的数值往往并不能够与目标值相差为零,一旦不为零,就会造成超出或不够,自然是上下徘徊。

D:所以我们又引入D这一个变量,使用它时我们可以让被控制的物理量的“变化速度”趋于0,即类似于“阻尼”的作用(类似于斜率)可以让其温度震荡变小,直至震荡为零,稳稳地到达设定的水温。但是有的时候由于外界作用,加热和散热功率相等,导致如果我们加热到100度,则只能加热到80度上不去了。为了消除这个误差,使我们的水温变回去。

I:所以我们又引入I这个概念,它可以用来消除“静态误差”。所以我们设置一个积分量。只要偏差存在,就不断地对偏差进行积分(累加),并反应在调节力度上。

PID的公式与讲解。

PID说是PID但是有时候只有PI/PD,并无完全使用P.I.D.
在这里插入图片描述
PID

P:(比例模块)
其就等于一个变量KP,他来乘以我们的error(偏差值),构成kp*error(t)
举个简简单单的例子:当我们想把水温跳到从0到10时,我们设定每次增加其偏差值的一半也就是kp=0.5,于是乎

  1. 第一次:0+0.5*10=5
  2. 第二次:5+5*0.5=7.5
  3. 第三次:7.5+2.5*0.5=8.75
  4. 第四次:…
    这样一来就能够慢慢的加到我们所需要的那个10了。
    在这里插入图片描述

I:(积分模块)
积分则是误差在一定时间内的和,积分作用是其误差变化的“面积”。面积即为积分作用的结果,其不断累积的误差,最终乘以积分系数K i就得到了积分部分的输出,也就是说其值就是error偏差变化的曲线与x,y轴的面积,它可以消除稳态误差,帮助我们达到我们所需要的值。
从另一个角度看,我们可以将这个面积细分成许许多多个小矩形,随着时间的延长,所加的矩形面积也越小,从而如果出现了稳态误差,小矩形面积不为零,则可以进行加操作直到没有。
在这里插入图片描述

D:(微分模块)
微分则是误差变化曲线某处的导数,或者说是某一点的斜率当偏差变化过快,微分环节会输出较大的负数,作为抑制输出继续上升,从而抑制过冲。所以我们可以把它叫成“阻尼”模块,它可以在突然变化太大时调整曲线,从而慢慢地变成平稳的直线(偏差为0).
在这里插入图片描述
在这里插入图片描述

PID的伪代码操作

接下来我们要进行伪代码的操作

我们在c的环境下实现一下。
P:
在这里插入图片描述

PI:
在这里插入图片描述
PID:
在这里插入图片描述

至于PD,把PID拆开就好啦~~
主要是懒emmmmm

公式变换

PID标准公式在上面已经展现出来了,下一步为了运用我们要将它进行变换:

在这里插入图片描述
在这里插入图片描述

之后我们要将它进行离散化
为什么要将他离散化,直接这样用不香么?
因为:

在计算机中实现,我们要将它离散化。为什么要离散化?
因为计算机处理的是离散信号,我们研究的理论最后需要计算机处理,所以要离散化。
由于PID的算法可以通过计算,用计算机进行实现,从而形成数字式的PID控制器。当采样周期T足够短时,我们可以用求和代替积分,用差商代替微分,是连续系统的PID算法离散化

所以为了之后在matlab等仿真软件上模拟,我们需要将他离散化。

也就是:
在这里插入图片描述
对于:
P模块没有改变.
I模块变成了一个一个的矩形面积相加求和(面积).
D模块则是前一个与后一个的插值(导数)
此后我们可以从离散化的公式中,我们可以知道比例控制是每次的误差值,而积分控制是每次误差的和;微分控制是这一次误差与上一次误差的差值。

如何调节PID呢?

PID写出来并不难,难就难在与如何对他的调整,这对使它实际运用中有重要意义。重要的是:目前我也不会调这个东西emmmmmm

第一步:将Kp、Ki和Kd设置为0。这样可以有助于我们开始调整。
第二步:增加Kp直到误差相当小,这样可以保证我们大部分调整正确(P是pid中最重要的,将他调好可以有利于我们的下一步工作)。
第三步:增加Kd,直到任何超过你可能拥有的覆盖面积(因为他上面的公式中就是求面积)。
第四步:增加Ki,直到任何仍然存在的错误被消除。由于ki是基于斜率的,所以我们应该从小值开始调整。
第五步:使用调整常量的规则,可以根据经验来更改一些常量,以使其工作到最佳性能。

还有一个到处都可以看见的口诀:

调试口诀
参数整定找最佳,从小到大顺序查,先是比例后积分,最后再把微分加,
曲线振荡很频繁,比例度盘要放大,曲线漂浮绕大湾,比例度盘往小扳,
曲线偏离回复慢,积分时间往下降,曲线波动周期长,积分时间再加长,
曲线振荡频率快,先把微分降下来,动差大来波动慢,微分时间应加长,
理想曲线两个波,前高后低4比1。

总结

P-比例误差,这个误差在真实值和预期值之间。
​ error = (target value) – (sensor reading)

I – 先前误差的运行和(面积),用于在误差很小的时候进行精细的调整。
​ integral = integral + error*dT

D – 误差的变化(导数),用来预测下一个误差可能是什么。
​ derivative = ( (current error) – (previous error) ) / dT

将三个组件放在一起,就可以开始调整Kp、Ki和Kd的精确值了。

ps:再有时间在更新下我学的吧,初学者也不太会,就只能现学现卖啦!
新手求喷emmm(ε=ε=ε=┏(゜ロ゜;)┛)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值