PID算法
文章目录
控制系统介绍
每一个运动模型都能够简化为一个控制系统,控制系统是我们进行理论和控制算法分析的依据。所以在讲PID算法之前,应当先弄懂控制系统的架构,从而才能知道PID算法在控制系统中的角色。
一个控制系统通常由控制器、执行器、控制对象、传感器以及输入输出量构成。以机器人底盘控制系统为例,我们可以把期望速度Exspeed作为输入,PID算法作为控制器,电机作为执行器,轮子作为控制对象,实际速度Outspeed作为实际输出。
开环控制系统
作为一个开环控制系统来说,单通路的结构使得控制系统简单,搭建成本低,但却尤其怕扰动等不确定因素的存在,这会使整个系统很容易不稳定。
前馈控制系统
前馈控制系统仍然是一个开环的控制系统,前馈的意义在于我们可以事先通过传感器观测到某些干扰因素,然后针对这些干扰因素做出控制优化。
比如以道路倾斜作为干扰,陀螺仪作为传感器,此时经过控制器相比于平坦道路上一定要做出相应的改变。
单闭环控制系统
闭环控制系统相对于开环来说要更加复杂,控制起来难度也比较大,但面对干扰因素时,闭环控制系统就能展现它的优势。而实际控制系统是具有很多干扰因素的,比如场地粗糙程度,机械精度,温度,风力等等影响,所以我们通常会选用闭环控制。
- 期望输入:电机转速
单闭环控制系统表示系统仅由一个闭环组成,比如给电机一个期望转速作为输入,最终的电机实际转速经过编码器反馈回来,由此我们便可以知道这一次控制的偏差是多少。通过调整我们的控制器(如PID参数),使我们的偏差变小达到系统稳定,这个系统对于大部分干扰都具有稳定性。
双闭环控制系统
双闭环控制系统是在电控系统中比较常见的控制系统结构。例如:
电机期望转角作为输入,最终实际输出的电机转角经过编码器反馈得到与期望转角的偏差,这是外环——电机的角度环控制系统。
电机期望转角经过一级控制器解算得到期望转速,实际转速通过编码器反馈得到与期望电机转速的偏差,这是内环——电机的速度环控制系统。
复合控制系统
复合控制系统=闭环控制系统+前馈控制系统。例如:
将期望车速作为输入,最终的实际车速通过反馈得到与期望车速的差,以此构成的闭环为速度环。
将经过陀螺仪测量得出的干扰因素——坡面的倾斜度作为另一输出,构成前馈控制系统。
实际的控制系统往往比上述要更加复杂,通常有多个闭环和前馈组成,但闭环虽然稳定性高,也不是越多越好,当一个控制系统越复杂,参与的变量越多时,对稳定性以及调整难度的影响都会很大。
为什么选择PID?
PID是连续系统中最常用且最成熟的控制算法,适用于对被控对象模型了解不清楚的场合。实际的经验也都表明,大多数控制过程中,PID控制器都能达到很好的效果。另外PID参数的调整上,也要比其他控制器的参数更加容易。
什么是PID?
理论含义
PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。
适用系统:二阶以内线性时不变控制系统。
PID公式:
连续:
离散:
PID控制系统:
解释:
PID作为一种控制器,是参与控制系统运作的一部分。它通常控制的是闭环系统中期望输出与期望输入的偏差,目的是让这个偏差越小,越稳定,越快到0。这也对应了PID三个字母:
比例P:
假设车位移期望输入为100,P=0.9。
-
P<1的情况:
①第一次:因为此时反馈实际车位移为0,所以控制器最终的输出应该为90;
②第二次:此时偏差为100-90=10,所以控制器最终输出为99;
…以此下去,车位移将会无限逼近100。 -
P=1的情况:
这种情况下,实际车位移理论上会等于期望车位移,但因为干扰因素的存在,实际中是不可能的,典型的比如地面有摩擦力的情况,导致车位移无法达到100。 -
P>1的情况:
这种情况下,实际输出比期望值大,车位移大于100,如果调整过程中P过大会导致超调量增大,导致系统不稳定。(车可能会出现跑飞的情况)
KP仿真:
①利用simulink分别仿真KP=0.2,KP=1,KP=5的情况,得到结果如下图:
可以看出,随着比例系数KP的增加,输出达到期望输出的时间会缩短(调节时间),但带来的是超调量和振荡效果的增加。
②加入实际干扰因素的影响:
在干扰的作用下,KP=1时无法达到期望的输出值,这是更接近实际的情况。
综上,单有一个比例环节P,在实际控制情况中无法达到目的,只能尽可能使用P来减小误差,或者在一定的超调量内再去调整I和D的比例。
积分I:
I的作用就是为了弥补单纯的比例P所留下的净差问题。
KI仿真:
仿真接近实际的情况,选取比例Kp=1时,存在干扰且稳态误差为0.5的系统,对此系统控制器中加入积分环节,选取积分系数Ki分别为0.01,0.1,1,仿真结果如下:
从中可以看出,Ki的增加可以让系统的稳态误差减小到0,即弥补了实际情况中KP存在的静差。但随着Ki的增大,会导致系统超调量增大,产生振荡。最终应当选取一个稳态误差为0且超调量不太大的Ki参数。(Ki=0.3)
微分d:
微分,是对误差进行求导运算,我们得到的是误差变化的斜率,而斜率反映了曲线变化的趋势,选取适当的Kd系数,可以让我们用超前的思路去改变曲线的走向。
KD仿真:
在之前的基础上,我们选择KP=1,Ki=0.3的曲线,调整Kd分别为0.1,1,5得到结果如下:
可以看出,Kd可以影响系统达到稳态的时间,但Kd过大会导致系统振荡加剧,超调量增加。
PID限幅
在对P、I、D三个参数的讲解中,I、D两个参数都有过大会导致系统振动、超调不稳定的特点,所以在控制系统中,常常需要对I和D参与的控制器的输出进行限幅。
积分限幅(抗积分饱和)
假设系统开始运行,期望输出为100。现在有一个阻力一直让系统实际输出为0,一段时间后阻力突然消失,那么会导致实际输出变得非常非常大,导致机器人跑飞或者直接崩溃。
因此要对积分(累计误差)规定一个上限值。
积分分离
假设机器人目前在100m处,此时实际位置突然变为1000m,如果这个误差大于我们的预想(大于Kd系数所能预想到的变化趋势),那么这个时候机器人系统也会跑飞。
所以如果确有实际突变的情况会发生,让不同的误差设置不同的积分系数是很有必要的。
微分先行
同样考虑上述误差突然增大的情况,当误差突然增大时,我们在第一时间可以让系统只由微分去控制,利用微分削弱误差的变化趋势,一段时间后再考虑积分和比例的作用。
PID死区误差算法
有些系统为了避免频繁的操作引起振荡,通常使用带死区的PID控制算法,在输出值较小的情况下,让实际输出为0。
PID的应用
考虑机器人底盘运动控制系统:
这是一个三环的串级PID复合控制系统。
最内环:电机速度环,输入期望电机转速,通过电机速度环PID输出,利用编码器获取实际转速。
中间环:机器人底盘运动速度环,输入期望机器人速度,通过速度环PID和电机环输出,利用定位模块计算得出机器人当前实际速度。
最外环:机器人底盘运动位置环,输入期望机器人位置,通过位置环PID、中间环、电机环输出,利用定位模块计算得出机器人当前实际位置。
干扰:在实际机器人的运动中,机械加工的精度(比如齿间隙,悬挂,弹性机构等)、摩擦力、平坦度等因素的干扰。