精华内容
下载资源
问答
  • 智能小车PID算法资料,一些自己用的7788的资料
  • PID-小车类-智能小车PID算法
  • 智能车PID算法资料包

    2018-05-17 17:35:15
    最全的PID调节资料,里面包含了PID算法,调节技巧,源代码,以及上位机
  • . 为了实现 PID 控制所需要的等间隔采样我们使用了一个定时中断每 2ms进行一次数据 采样和 PID 计算与此并行系统中还设计了一个 转速脉冲检测中断 从而实现了转速检测 为了调试的需要程序中还
  • 智能车PID
  • PID 飞思卡尔智能车PID控制教程,讲的很详细,也很容易懂 PID 飞思卡尔智能车PID控制教程,讲的很详细,也很容易懂
  • pid智能车控制算法研究的分享.......................................................................................................................................
  • 智能车PID_算法实现原理讲解是飞思卡尔智能车应用中最为普遍的算法
  • 智能小车自动寻迹过程中,方向控制与速度控制都存在高度非线性的问题。采用模糊 PID 控制算法,实现...该方案运用于智能车控制系统,克服了传统 PID 控制的不足,通过模糊规则进行推理决策,实现了 PID 参数的实时优化
  • PID 飞思卡尔智能车PID控制教程,讲的很详细,也很容易懂
  • 今天我代表历届参加大赛的网友,给大家分享一些有关PID的学习代码、pid算法和研究、PID在智能车黑线识别算法及控制策略研究、PID电机调速等等。需要参加智能车大赛的朋友,赶紧充电学习下 PID算法吧。 智能车大赛PID...
  • 本文档对智能车算法实现有详细讲解,希望对那些喜欢智能小车的同学有帮助
  • 飞思卡尔智能车竞赛算法主要是PID算法
  • 本文提出了一种基于积分环节改进的数字PID 智能车舵机控制算法以及间接PID 驱动电机控制算法,阐述了以上两种算法的主要思想和原理,并且对上述两种算法的软件实现方法作具体介绍。智能车车模以HCS12 的16 位单片机...
  • 介绍了基于MC9S12XS128单片机控制的智能车系统,该系统以CCD摄像头传感器作为路径识别装置,通过图像识别提取道路黑线信息,...测试结果表明智能车能准确稳定地跟踪引导黑线行驶,该算法能够很好地对智能车进行控制。
  • 基于模糊自适应PID的列车智能驾驶算法
  • Arduino智能小车(三):PID算法简介

    千次阅读 2021-01-24 13:32:04
    本篇文章是对PID算法的原理进行了一些探讨,并对其在Arduino智能车中的使用做了简单的介绍。如有纰漏,烦请指出???? 前两篇文章地址: Arduino智能小车(一):编码马达 Arduino智能小车(二):编码马达的使用 PID...

    本篇文章是对PID算法的原理进行了一些探讨,并对其在Arduino智能车中的使用做了简单的介绍。如有纰漏,烦请指出😜

    前两篇文章地址:
    Arduino智能小车(一):编码马达
    Arduino智能小车(二):编码马达的使用

    PID是控制里面最为经典的一个算法,从智能小车,到扫地机器人,再到工业机械臂,或多或少都在使用这个控制算法。简单而又可靠的特性使其适用于各种场合,而广泛的应用又使之衍生出了各种各样的改进算法。总而言之,PID可谓是控制领域最常用的一个组成部分之一。

    PID控制算法简介

    PID,这个名字由三个字母组成,P为比例,I为积分,D为微分。而这个算法顾名思义也就是包含三部分:比例(Proportional),积分(Integral)和微分(Derivative)。

    下面我将分别从控制理论和机器人学两个方面分别对PID算法的原理和组成进行探讨。

    自动控制原理中的PID

    我们从最基础的控制系统开始:

    开环控制系统

    这是一个开环的控制系统,优点是简单,但因为其没有反馈,所以无法保证精度,稳定性也较差,当系统有干扰时,输出有较大的不确定性。为了提高控制的精度和鲁棒性,一般会加入反馈,将反馈以一定的比例和输入量相减得到误差,将误差作为控制量,形成闭环控制系统,当K=1时,即为常见的单位负反馈

    闭环控制系统

    对于我们这里的电机控制而言,反馈量也就是编码器读取到的数据。

    而系统的重点就在于控制器(Controller)的设计,根据原理的不同也就产生了各种各样的控制器。

    而我们所要介绍的PID则是如下图所示的一个控制器:

    PID控制器

    上面所提到的三部分即为分别对误差E(t)E(t)比例积分微分运算,再加起来作为指令输入给被控制对象。表达式如下:
    U(t)=KpE(t)+Ki0tE(τ)dτ+KdE˙(t) U(t)=K_p\cdot E(t)+K_i\int^t_0 E(\tau)d\tau+K_d \cdot \dot{E}(t)

    一个例子

    我们用一个例子从本质上理解一下这三部分的作用,就以电机控制为例,比如我们要控制电机从0运动到1。

    这时,比例环节相当于每隔一段时间加KpErrK_p\cdot Err,也就是电机速度和误差是成正比的。而当kpk_p越大时,电机将更快的运动到目标位置。

    如果只有比例环节的话,当电机受到一个外作用扭矩时,电机最终是不会到1的,而是存在一个稳态误差。因为在到达这一点后,电机输入KpErrK_p\cdot Err所提供的扭矩已经无法克服外部扭矩作用,于是就停在了这一点。而积分环节的作用就是将误差积分,如果这个误差一直存在的话,积分会越来越大,最终也就表现在电机输入越来越大,也就可以克服这个扭矩继续运动至目标位置,消除稳态误差

    开过车的朋友们一定有这个经验,在红绿灯路口前如果速度较快的话,要提前点刹车,使车在线前停下来。微分环节的作用也在于此,其与误差的导数成正比,因为误差是一直在减小的,所以这一项一般是负的,相当于扣除一部分输入。当速度越快,也就是越快的接近目标时,扣除的部分越多,这一作用使得电机提前减速,起一个缓冲的作用,也避免了超调和振荡的出现。

    传递函数表示

    在经典控制理论中,习惯采用传递函数来描述控制系统,传递函数是指输出和输入的拉普拉斯变换之比。对上式求拉普拉斯变换,可得:
    U(s)=KpE(s)+Ki1sE(s)+KdsE(s)=Kp(1+1Tis+Tds)E(s) U(s)=K_pE(s)+K_i\frac{1}{s}E(s)+K_dsE(s)\\ =K_p(1+\frac{1}{T_is}+T_ds)E(s)
    式中涉及到的参数关系为Ki=KpTiK_i=\frac{K_p}{T_i}Kd=KpTdK_d=K_pT_d,而PID控制器性能的关键影响因素即为Kp,Ki,KdK_p,\,K_i,\,K_d这三个参数,这三个参数的整定也是设计PID控制器的重点部分。整定参数的方法暂时不表,我们下篇文章再做深入介绍。下面我们从另外一个角度去了解PID。

    机器人学中的PID

    这学期学习了机器人学,我们用了John J.Craig的**《机器人学导论》**作为教材,这本书中的最后几章对PID的介绍是从一个对我来说很“新鲜”的角度切入的,还挺有意思的。为了能彻底搞懂,我在这里做一些探讨。

    首先考虑一个“单关节”机械臂,简单起见,该关节为移动关节:

    这里我们假定关节处在一个势场中,其势能函数为V(x)=12kp(xxd)2V(x)=\frac{1}{2}k_p(x-x_d)^2xdx_d为目标位置,也就是关节处在目标位置时势能最低,而我们控制的目标也就是让关节的势能最低。这里利用了势能总是趋向于更低的地方这一原理设计了我们的控制算法。我们用弹性势能来类比我们所假定的势能,这样一来,就可以把左面的关节看作右面的系统。

    机器人PD控制

    先不考虑摩擦力及其他外力,由简单的受力分析很容易得到关节力表达式:
    f=mx¨=V(x)x=kp(xxd) f=m\ddot x =-\frac{\partial V(x)}{\partial x}=-k_p(x-x_d)
    上式即表达了一个简单的比例控制,接下来我们加入摩擦力:
    f=kp(xxd)kvx˙ f=-k_p(x-x_d)-k_v\dot x
    接下来是一个神奇的处理,要看仔细了。我们把控制器分为两部分,一部分基于模型(Model-Based),一部分基于伺服控制(Servo-Based)。基于模型的部分基于的就是机器人的模型;而伺服控制的部分比较贴近我们这里探讨的PID。

    之前我们已经知道f=mx¨f=m\ddot x,但实际上机器人正常工作时,因为各种因素影响还会引入一个非线性环节b(x,x˙)b(x,\dot x),因此:
    f=mx¨+b(x,x˙) f=m\ddot x+b(x,\dot x)
    这就是基于模型的部分,这一部分不做详细介绍,看不懂没关系。我们只关心伺服控制部分,所以接下来将Model-Based这部分剔出来:
    f=mx¨+b(x,x˙)=αf+β f=m\ddot x+b(x,\dot x)=\alpha f'+\beta
    形成类似下图的控制部分:

    Model-Based Part

    而显而易见的是,此时f=x¨f'=\ddot x,再代入上面受力分析的式子中可得:
    mf=mx¨=kp(xxd)kvx˙=m[kp(xxd)kvx˙]f=kp(xxd)kvx˙ mf'=m\ddot x=-k_p(x-x_d)-k_v\dot x=m[-k_p'(x-x_d)-k_v'\dot x]\\ \Rightarrow f'=-k_p'(x-x_d)-k_v'\dot x
    此时我们就得到了一个比例-微分(PD)控制的式子。观众朋友们或许也注意到了,这里的控制都是给定一个目标位置,控制关节运动到目标位置并停在这里(速度为0)。而对机器人做轨迹规划后得到的是轨迹上的目标位置,以及此时的目标速度和目标加速度。因此我们可以将关节力取为:
    f=x¨dkv(x˙x˙d)kp(xxd) f'=\ddot x_d-k_v'(\dot x-\dot x_d)-k_p'(x-x_d)
    由于f=x¨f'=\ddot x,移项可得:
    (x¨x¨d)+kv(x˙x˙d)+kp(xxd)=0e¨+kve˙+kpe=0 (\ddot x-\ddot x_d)+k_v'(\dot x-\dot x_d)+k_p'(x-x_d)=0\\ \Rightarrow \ddot e+k_v'\dot e+k_p'e=0
    也就是说我们最后的控制目的是要让位置,速度和加速度误差均为0。

    机器人PID控制

    但是这样的控制仍然存在一定的问题:比如关节受一个干扰力fdistf_{dist}时,系统到达稳态后会有一个稳态误差:
    Δx=fdistkp \Delta x=\frac{f_{dist}}{k_p}
    这个稳态误差可以用积分来表示:
    kpΔx=ki(xxd)dt k_p\Delta x=k_i\int (x-x_d)dt
    此时系统受力分析就变成了:
    f+fdist=mx¨+b(x,x˙) f+f_{dist}=m\ddot x+b(x,\dot x)
    将基于模型的控制规律代入可计算出f=x¨fdistmf'=\ddot x-\frac{f_{dist}}{m}

    于是我们在上面的ff'再加上这一个积分项得到如下比例-积分-微分(PID)控制规律:
    f=x¨dkv(x˙x˙d)kp(xxd)fdistm=x¨dkv(x˙x˙d)kp(xxd)ki(xxd)dt f'=\ddot x_d-k_v'(\dot x-\dot x_d)-k_p'(x-x_d)-\frac{f_{dist}}{m}\\ =\ddot x_d-k_v'(\dot x-\dot x_d)-k_p'(x-x_d)-k_i'\int(x-x_d)dt
    稍作移项我们就能发现这一控制规律的本质:
    e¨+kve˙+kpe+kiedt=fdistm ˙e¨+kve¨+kpe˙+kie=0 \ddot e+k_v'\dot e+k_p'e+k_i'\int e\,dt=\frac{f_{dist}}{m}\\ \xrightarrow{两边求导}\dot \ \ddot e+k_v'\ddot e+k_p'\dot e+k_i'e=0
    也就是说,我们PID控制的最终目的是使位置的误差,速度的误差,加速度的误差,甚至加加速度的误差都等于0。对于机器人的运动来说,当然是能越多的控制其运动过程中的参数,越能使其平稳的运动,也就越能达到良好的效果。

    最终我们的控制框图如下:

    PID控制框图

    Arduino上的PID算法

    原理讲了很多,或许读者已经晕晕乎乎,似懂非懂了,不过没有关系,我们不求甚解,直接从Arduino上实现PID控制入手,做一些实用的介绍。

    离散化

    在使用我们上面得到的式子前,还需要进行一步工作:离散化。毕竟我们不可能时时刻刻采样计算,输出连续的指令,这对于我们的控制系统来说是不现实的。正常的操作是以一定周期进行采样,计算,然后每隔一段时间给一个指令,输出的一个离散化的信号。

    我们假设系统的采样周期为T,以第K次采样为例。此时积分就可以表示为:i=1kE(i)\sum_{i=1}^k E(i),而微分则为:E(k)E(k1)E(k)-E(k-1),那上面的式子离散化后就为:
    U(k)=KpE(k)+Kii=1kE(i)+Kd[E(k)E(k1)] U(k)=K_pE(k)+K_i\sum^{k}_{i=1}E(i)+K_d\left[E(k)-E(k-1)\right]

    位置式PID

    直接采用上面的离散化公式,很容易写出代码:

    int PositionPID(int target_high, int target_low)
    {
        //bias为E(k),intergral_bias为积分项,last_bias为E(k-1),m为电机编码器读取到位置数据(反馈量)
      	static float bias, result, intergral_bias, last_bias;
      	if (m > target_high)
        	bias = target_high - m;
      	else if (m < target_low)
        	bias = target_low - m;
      	else
      	{
        	bias = 0;
        	intergral_bias = 0;
      	}
      	intergral_bias += bias;
      	result = Position_KP * bias + Position_KI * intergral_bias + Position_KD * (bias - last_bias);
      	last_bias = bias;
      	return result;
    }
    

    注意到上面的函数有两个target输入,这里是设定了一个目标阈,只要达到了target_lowtarget_high之间,就算达到了目标位置。这样操作增加了一定的稳定性,在一定程度上减小了振荡的可能性。

    另外要注意biasintergral_biaslast_bias变量类型是static float,这样会使其值保存到下一次计算,而不是随着该函数返回而清空。

    增量式PID

    除了位置式PID外,还有一种改进算法叫做增量式PID。所谓增量式,指的是我们每次不是计算U(k)U(k),而是ΔU\Delta U。其计算公式为:
    ΔU=U(k)U(k1)=Kp[E(k)E(k1)]+KiE(k)+Kd[E(k)2E(k1)+E(k2)] \Delta U=U(k)-U(k-1)\\ =K_p\left[E(k)-E(k-1)\right]+K_iE(k)+K_d\left[E(k)-2E(k-1)+E(k-2)\right]
    根据这个式子写出函数:

    float VelocityPID(float target)
    {
      	static float bias, result, last_bias, last_dif_bias;
      	bias = target - velocity;
        dif_bias = bias - last_bias;
      	result += Velocity_KP * dif_bias + Velocity_KI * bias + Velocity_KD * (dif_bias - last_dif_bias);	//注意这里是result+=
      	last_dif_bias = dif_bias;
      	last_bias = bias;
      	return result;
    }
    

    值得一提的是,增量式PID一般用于速度控制,也就是给定目标速度,得到电机输入。且一般只用PI两个参数,D为0。

    另外,增量式没有\sum运算,增量只由最近几次的采样值有关,因此偏差带来的影响较小,累计误差也小。

    PID库

    Arduino上有PID库,这个库贼好用👍,推荐大家用一用。可以使用Library Manager进行安装。具体的介绍在这里,例子很清楚,这里就不做详细介绍了。大神还对这个库的原理进行详细介绍,感兴趣的可以移步原文👈观看研究,(这里有翻译)

    展开全文
  • 飞思卡尔智能车PID控制算法精介,有利于学习提高
  • PID概念PID的控制方法-1.增量式PID-2.位置式PID 概念 PID控制:一种调节器控制规律为比例、积分、微分的控制。其中:P:比例(proportion)、I:积分(integral)、D:导数(derivative) 式子中Kp为比例系数,Ti为...

    概念

    在这里插入图片描述

    PID控制:一种调节器控制规律为比例、积分、微分的控制。其中:P:比例(proportion)、I:积分(integral)、D:导数(derivative)
    在这里插入图片描述

    式子中Kp为比例系数,Ti为积分时间参数,Td为微分时间常数。
    各个参数的意义作用:

    Kp:比例系数。一般增大比例系数,将加快系统的响应。

    Ti:积分时间常数。一般地,积分控制通常与比例控制或比例微分控制联合使用,构成 PI或 PID控制.增大积分时间常数 (积分变弱)有利于小超调,减小振荡,使系统更稳定,但同时要延长系统消除静差的时间.积分时间常数太小会降低系统的稳定性,增大系统的振荡次数.

    Td:微分时间常数。一般微分控制和比例控制和比例积分控制联合使用,组成PD或PID控制,微分控制可改善系统的动态特性。

    PID的控制方法

    常用的有两种:

    -1.增量式PID

    所谓的增量,就是本次控制量和上次控制量的差值。增量式PID是一种对控制量的增量进行PID控制的一种控制算法。

    公式:
    在这里插入图片描述

    (说明:Kp->P,Ki->I,Kd->D,e数组->error数组,
    e[n]->本次差值,e[n-1]->上次差值,e[n-2]->上上次差值)

    举个例子,增量式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-2*error_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)+I*error+D*(error-2*error_pre+error_pre_pre));
       //注意上面的加号,加号是增量式PID的体现。我们对增量(即右边的式子)进行PID控制。
       error_pre_pre=error_pre;
       error_pre=error;
    }
    

    当函数运行第一次的时候,输出的pwm为:
    在这里插入图片描述

    电机给了一个反转的力,小车前进受到了阻力,于是可以很快的停下来了。

    增量式PID的优缺点:
    优:
    ①算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;
    ②计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;
    ③手动—自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。
    缺:需要对控制量进行记忆。

    -2.位置式PID

    与增量式不同,位置式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)(P*error+D*(error-error_pre);   //红色部分表示这是位置式PID控制
    

    ———————————————— 版权声明:本文为CSDN博主「浪在冰城」的原创文章(有修改)
    原文链接:https://blog.csdn.net/Valieli/article/details/53453489

    利用整定参数来选择PID控制规律

    1. 如果不让积分参与控制,则可以把积分时间TI设定为无限大。但积分项还是不可能为零,这是因为有还初期的Minitial 的存在
    2. 如果不让微分参与控制,则可以把微分时间TD设为零
    3. 如果不让比例参与控制,但需要积分或积分、微分参与控制,则可以把增益设为零。在增益为零的情况下,CPU在计算积分项和微分项的时候,会把增益置为1.0

    展开全文
  • 主要讲述了改进PID算法智能车控制上的应用 实现了智能车的有效控制
  • 飞思卡尔智能车----模糊PID算法通俗讲

    万次阅读 多人点赞 2018-02-02 11:14:15
    在讲解模糊PID前,我们先要了解PID控制器的原理(本文主要介绍模糊PID的运用,对PID控制器的原理不做详细介绍)。PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分...

     在讲解模糊PID前,我们先要了解PID控制器的原理(本文主要介绍模糊PID的运用,对PID控制器的原理不做详细介绍)。PID控制器(比例-积分-微分控制器)是一个在工业控制应用中常见的反馈回路部件,由比例单元P、积分单元I和微分单元D组成。PID控制的基础是比例控制;积分控制可消除稳态误差,但可能增加超调;微分控制可加快大惯性系统响应速度以及减弱超调趋势。

     

    1.1传统PID控制

     

     

     

     传统PID控制器自出现以来,凭借其结构简单、稳定性好、工作可靠、调整方便等优点成为工业控制主要技术。当被控对象的结构和参数具有一定的不确定性,无法对其建立精确的模型时,采用PID控制技术尤为方便。PID控制原理简单、易于实现,但是其参数整定异常麻烦。对于小车的速度控制系统而言,由于其为时变非线性系统不同时刻需要选用不同的PID参数,采用传统的PID控制器,很难使整个运行过程具有较好的运行效果。

     

    1.2模糊PID控制

     

     模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。模糊PID控制包括模糊化,确定模糊规则,解模糊等组成部分。小车通过传感器采集赛道信息,确定当前距赛道中线的偏差E以及当前偏差和上次偏差的变化ec,根据给定的模糊规则进行模糊推理,最后对模糊参数进行解模糊,输出PID控制参数。

     

     

     

    2.1模糊化

     

     模糊控制器主要由三个模块组成:模糊化,模糊推理,清晰化。具体如下图所示。而我们将一步步讲解如何将模糊PID算法运用到智能车上。(最好用笔一步步自己写一遍!!!)

     

     

     

     

     首先我们的智能车会采集到赛道的相关数据,例如摄像头车,其采集到的数据经过算法处理之后会得到与中线的偏差E,以及当前偏差和上次偏差的变化(差值)EC两个值(即此算法为2维输入,同理也可以是1维和3维,但2维更适合智能车)。例如此时车偏离中线的距离为150,而上一时刻偏离中线的距离为120,则E为150,EC为150 - 120 = 30。

     其次我们要对这两个值进行模糊化。这里我们对E进行举例。摄像头车采集回来的E是有范围的,即与中线的偏差是在一个区间内可行的。在这里我们假设该区间为-240到240,即小车偏离中线的最大距离为240,正负即为左右。再假设中线偏差变化率的可行区间为-40到+40。

     

            接着我们要对这两个值进行模糊化。我现在将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进行模糊化

     

    2.2 模糊推理

           对于采集回来的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 )(看图)。

     

     

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

           在这里我们先证明一个条件,将这四个隶属度加起来,刚好等于1。这是因为

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

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

     

     

    因此,我们知道了输出值为ZO的隶属度和为 a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ,输出值为NS的隶属度为 ( 1 - a ) *  b 。

     

    2.3 清晰化

           对于输出值,我们同样采用给予隶属度的办法。例如,我们把输出值假设为[1000,1400](即舵机的摆角值范围)的区间同样划分为八个部分,即7个隶属值NB,NM,NS,ZO,PS,PM,PB。根据上一步所得出的结论,我们就可以用隶属度乘以相应的隶属值算出输出值的解,即 (a * b + a * ( 1 - b ) + ( 1 - a ) * ( 1 - b ) ) * ZO   +    ( 1 - a ) *  b * NS。到此为止,整个模糊过程就结束了。

         

    3 模糊PID

          我们已经知道了整个模糊的过程,但上述的过程还不够完美。因为我们的输出值只有一个输出,并没有实现PID。因此我们可以先对E和EC进行模糊化,然后分别对kp和ki和kd(PID的三个参数)进行求解,再套入公式。

     

     

         一般的我们也可以只用kp,kd,不用ki。而模糊规则表一般的论文已经基本给出。因此带入算法之后我们的难度也只是在于调节kp,kd,和适当调节规则表。当然调节的难度会大于普通的PID,因为还要定kp,kd的输出范围,调得不好可能效果并没有普通的PID好。

     

    4. 部分解释

         4.1对于部分论文所说的重心法解模糊,其实就是上述方法。公式如下。

     

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

     

     

     

     

    展开全文
  • PID算法或模糊控制算法几乎为所有参赛队伍所采用的背景下,提出了“最优曲率法”,并使用与之配合的“贪婪路径规划”算法。该小车在复杂赛道上的平均速度达3.3 m/s,其控制算法设计对智能车设计有借鉴意义。
  • 基于视觉的智能车模糊PID控制算法 ,基于freescale公司的16位HCS12单片机设计一种智能车系统。系统摄像头采集路径信息,通过单片机 的模糊推理机在线整定PID参数,使小车能按照任意给定的黑色引导线平稳地寻迹。
  • 数字PID 控制算法充分利用计算机的逻辑判断 和运算功能,使PID 控制更加灵活,实现一些复杂的控制算法,以满足各种生产过程的要求。本文档介绍了数字 PID 控制的原理,并通过在智能小车上的 实际应用体现了该控制...
  • 前馈-改进PID算法 智能车控制 经典算法的应用

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 286
精华内容 114
关键字:

智能车pid算法