智能车PID

PID学习笔记——2021.3.20

PID原理

一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

bilibili:通俗易懂的PID控制算法讲解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

PID系数调节

  1. 比例环节
  • P参数越小比例作用越强,动态响应越快,消除误差的能力越强。

  • 由于实际系统是有惯性的,比例作用不宜太强,比例作用太强会引起系统振荡不稳定。

  • P参数的大小应在以上定量计算的基础上根据系统响应情况,现场调试决定,通常将P参数***由大向小调***,以能达到最快响应又无超调(或无大的超调)为最佳参数。

  1. 积分环节
  • 由于实际系统是有惯性的,输出变化后,y(t)值不会马上变化,须等待一段时间才缓慢变化,因此积分的快慢必须与实际系统的惯性相匹配

  • 惯性大、积分作用就应该弱,积分时间I就应该大些,反之而然。如果积分作用太强,积分输出变化过快,就会引起积分过头的现象,产生积分超调和振荡。

  • I参数也是***由大往小调***,即积分作用由小往大调,观察系统响应以能达到快速消除误差,达到给定值,又不引起振荡为准。

  1. 微分环节
  • D越大,微分作用越强,D越小,微分作用越弱。系统调试时通常把D***从小往大调***,具体参数由试验决定。
  • 微分作用可以在产生误差之前一发现有产生误差的趋势就开始调节,是提前控制,所以及时性更好,可以最大限度地减少动态误差,使整体效果更好。
  • 但微分作用只能作为比例和积分控制的一种补充,不能起主导作用,微分作用不能太强,太强也会引起系统不稳定,产生振荡,微分作用只能在P和I调好后再由小往大调,一点一点试着加上去。

在低频段,主要是PI控制规律起作用,提高系统型别,消除或减少稳态误差;在中高频段主要是PD规律起作用,增大截止频率和相角裕度,提高响应速度。因此,控制器可以全面地提高系统的控制性能。

PID控制器的参数整定

  1. 理论计算整定法

依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。

  1. 工程整定方法

主要依赖工程经验,直接在控制系统的试验中进行

主要有临界比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。

临界比例法

步骤如下:

  1. 首先预选择一个足够短的采样周期让系统工作;

2. 仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;

  1. 在一定的控制度下通过公式计算得到PID控制器的参数。

PID调试一般原则

a.在输出不振荡时,增大比例增益P。
   b.在输出不振荡时,减小积分时间常数Ti。
   c.在输出不振荡时,增大微分时间常数Td。

PID调试一般步骤
  1. 确定比例增益P

    ​ 确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0,使PID为纯比例调节。

    ​ 输入设定为系统允许的最大值的60%-70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,设定PID的比例增益P为当前值60%~70%。比例增益P调试完成。

  2. 确定积分时间常数Ti

    比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID的积分时间常数Ti为当前值的150%~180%。积分时间常数Ti调试完成。

  3. 确定微分时间常数Td

    微分时间常数Td一般不用设定,为0即可。若要设定,与确定 P和Ti的方法相同,取不振荡时的30%。

  4. 系统空载、带载联调,再对PID参数进行微调,直至满足要求。

变速积分的基本思想是,设法改变积分项的累加速度,使其与偏差大小相对应:偏差越大,积分越慢;反之则越快,有利于提高系统品质。

img

img

img

img

img

转载地址:PID控制详解

维基

经典经验试凑口诀:

​ 参数整定找最佳, 从小到大顺序查。
​ 先是比例后积分, 最后再把微分加。
​ 曲线振荡很频繁, 比例度盘要放大。
​ 曲线漂浮绕大弯, 比例度盘往小扳。
​ 曲线偏离回复慢, 积分时间往下降。
​ 曲线波动周期长, 积分时间再加长。
​ 曲线振荡频率快, 先把微分降下来。
​ 动差大来波动慢, 微分时间应加长。
​ 理想曲线两个波, 前高后低四比一。
​ 一看二调多分析, 调节质量不会低。

无人机PID调试

使用PID库,轻松搞定PID(上)


PID学习笔记——2021.3.21

模糊PID原理

  • 模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。

  • 模糊算法是一种基于智能推理的算法,虽然称之为模糊算法其实并不模糊,实际上是一种逐步求精的思想。一个模糊控制器主要是由***模糊化,模糊推理机和精确化/解模糊***三个功能模块和知识库(包括数据库和规则库)构成的

    img

  • 小车通过传感器/摄像头采集赛道信息,经过算法处理之后确定**当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec*,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。

    img

  1. 输入量的量化
  • 输入数据都是精确的,要实现模糊算法/量化函数需要现对其实现量化

  • 所谓量化就是通过量化函数将输入量投射到一定的数字级别,一般都是相对于0对称的数字区间。具体投射到怎样的区间根据实际情况而定,因为这会直接影响到计算的精度。

  1. 模糊化
  • 确定对应各语言变量的模糊子集,然后根据量化的结果,我们就可以判断该输入所属的集合并计算出对应的隶属度。计算隶属度的方法有很多,最常用的是使用三角形隶属度函数或梯形隶属度函数等来计算获得。

对这E、EC进行模糊化:

将E的区间(-240 到 240)分成8个部分,那么他们分别为-240 ~ -180,-180 ~ -120 ,-120 ~ -60,-60 ~ 0,0 ~ 60,60 ~ 120,120 ~ 180,180 ~ 240。然后我们把-180,-120,-60,0,60,120,180分别用NB,NM,NS,ZO,PS,PM,PB表示(个人理解N为negative,P为positive,B为big,M为middle,S为small,ZO为zero)。例如,当E = 170时,此时的E属于PM和PB之间,而此时的E也会对应2(或1)个隶属度。E隶属于PM(120)的百分比为(180 - 170) / (180 - 120) = 1 / 6 ,而同理隶属于PB(180)的百分比为(170 - 120) / (180 - 120) = 5 / 6 。意思就是120到180进行线性分割了,E离PM和PB哪个更近,则隶属于哪个就更大(当输出值E大于180(PB)时,则隶属度为1,隶属度值为PB,即E完全隶属于PB,同理当E小于 - 180 (NB)时也一样)。同理也可以对EC进行模糊化。

  1. 规则库

    规则库是基于控制量的模糊化而的得到的,是实现模糊推理的基础,很大程度上依赖于经验来完成。

img

  1. 推理机
  • 对于采集回来的E和EC,我们可以推出它们各所占的隶属度,此时我们可以根据模糊规则表去找出输出值所对应的隶属度。

我们假设为E的两个隶属度值为PM、PB,E属于PM的隶属度为a(a < 1),则属于PB的隶属度为(1 - a)。再假设EC的两个隶属度值为NB、NM,EC属于NM的隶属度为b,则属于NB的隶属度为(1 - b)。而在假设中,E属于PM的隶属度为a,EC属于NB的隶属度为( 1 - b ),则输出值属于ZO的隶属度为a *( 1 - b )
img

同理我们可以得出,当输出值属于ZO的另外两个隶属度为a * b, ( 1 - a ) * ( 1 - b) ,而输出值属于NS的隶属度为 ( 1 - a ) * b。

img

将这四个隶属度加起来,刚好等于1

(a + (1 - a)) * (b + (1 - b)) = a * b + ( 1 - a ) * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b )

即一个十字相乘的概念。这个等式说明输出值的隶属度之和等于1(第三步求解的时候需要用到隶属度之和)。

  1. 精确化——解模糊

    • 最大隶属度法——计算简单,适用于控制要求不高场合。
    • 重心法——输出更平滑,但计算难度大

    img

    式中μ(Zi) * Zi相当于文章上面的(a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO + ( 1 - a ) * b * NS,即隶属度乘以隶属度值之和,而μ(Zi)之和就是输出值的隶属度之和,我们已经证明它是等于1的。

    • 加权平均法——一般在工业上应用最广泛
  2. 工程量化

    系统控制输出是一个精确的数,但不是可以直接用于对象控制的物理量,所以在最后还要按照我们的需要进行转换。比如对应PID的参数则可进行必要的转换和修正在输出给PID控制器。

img

转载地址:飞思卡尔智能车----模糊PID算法通俗讲

PID用法——by学长

闭环控制速度

set_speed——>(PID算法处理)——>PWM(控制速度)——>轮子转动——>检测装置检测轮子速度——>反馈速度——>与set_speed 比较——>(PID算法处理)——>PWM(控制速度)——>轮子转动改变速度

  1. 轮子达到set_speed,反馈给set_speed——>告诉PWM下降减速,但反馈的过程中PWM仍在增加,超过set_speed。同理,减速时,PWM也会减少过set_speed。如此闭环控制轮子实时的速度。V-T曲线先斜线上升,后速度值在set_speed附近波动。
  2. 优秀的PID可以使得V-T曲线:起始PWM加速斜线上升快速(陡峭),后稳定在set_speed几乎不抖动——快和稳。
  3. PWM需要设定*上限MAX_和下限值MIN***(负值,控制轮子转向),以免电机烧坏
  4. PID函数:输入参数set_speed、now_speed,返回参数PWM

其中set_speed可任意设定(100),now_speed需要利用代码测出

学长写了个转角的算法?必要时去请教请教!

  1. PID可以运用的地方还有很多,并不局限于速度PID

    :角度PID(加个电子指南针模块,转之前读一下当前的方向,转的过程中通过读取电子指南针的角度不断调节电机。否则在不同的路面上行驶或者是车的重量不同可能转的角度都会有区别)

飞思卡尔智能车——舵机及PID控制

信号:pwm信号,其中脉冲宽度从0.5-2.5ms(周期为20ms),相对应的舵盘位置为0-180度,呈线性变化。

pwm波脉冲宽度与舵机转角角度的关系:

img

不同脉冲宽度的pwm波,舵机将输出不同的轴转角。所以要控制小车的转角,我们就要控制输出不同脉冲宽度的pwm波。

增量式PID可以应用在电机上。
假设当前电机PID的pwm值为5000(精度为10000,即此时的占空比为50%)。对应的速度为100r/s。
程序发出一个命令,要求pwm输出为0,即要求停车。(可能有人有疑问为什么不直接程序给pwm为0,这也是一种方法,可是由于惯性的存在,小车会在一段时间后才停下。)
这时,我们可以采用PID控制的方法来实现。
我们在程序中定义几个变量:

int speed_now=100; //此刻的速度
int speed_want=0; //期望输出的速度
int pwm_duty=0; //本次pwm输出值
float P=100,I=20,D=2; //P I D 数值
float error_pre_pre=0; //上上次差值
float error_pre=0.0; //上次差值
float error=0.0; //本次差值

根据公式,我们编写程序:
void PID()
{
/*
增量式PID
P=Kp*(error-error_pre);
D=Kd*(error-2error_pre+error_pre_pre);
I=Ki
error;
Pwm+=P+I+D;
/
error=speed_want-speed_now; //speed_now可以通过编码器采值等等方式得到
pwm_duty+=(int)(P
(error-error_pre)+Ierror+D(error-2*error_pre+error_pre_pre));
//注意上面的加号,加号是增量式PID的体现。我们对增量(即右边的式子)进行PID控制。
error_pre_pre=error_pre;
error_pre=error;
}

当函数运行第一次的时候,输出的pwm为:
在这里插入图片描述
电机给了一个反转的力,小车前进受到了阻力,于是可以很快的停下来了。

与增量式不同,位置式PID不需要对控制量进行记忆,直接对偏差值进行计算得出期望的pwm。
公式:
在这里插入图片描述
(说明:Kp->P,Ki->I,Kd->D,ek->本次误差、ek-1->上次误差)
举个例子,位置式PID可以应用在舵机上。因为舵机本次的pwm输出值与上次pwm输出值关系不太,舵机需要的是快速转到某个角度。
假设舵机pwm输出1000时舵盘转轴为90°,pwm输出0时舵盘转轴为0°,pwm输出2000时舵盘转轴为180°。
现在舵机pwm输出为1500,我们要让舵盘转到最中间。
在这里我们采用PD控制,即I值为0(I值为偏差的积分,即对偏差求和。我们当时试验小车的舵机控制时发现I值可以省略,PD控制足矣。当然,具体需不需要I项要在实际中进行分析验证)。
代码:

pwm_duty=(int)(Perror+D(error-error_pre); //红色部分表示这是位置式PID控制

未完成

  • 49
    点赞
  • 245
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值