zoukankan      html  css  js  c++  java
  • 四轴飞行器1.5 各种PID对比分析及选择

    原创文章,欢迎转载,转载请注明出处

          这篇文章主要介绍我对PID的理解,以及选择PID算法的过程。

    一 PID的理解和学习过程

    二 飞控的PID效果

    先上个飞控PID的响应的视频:介绍在后面

    地址:http://v.youku.com/v_show/id_XNzYxMTI1NzA4.html

    一 PID的理解和学习过程

          什么是PID呢?查维基百科可以知道:

      PID是以它的三种纠正算法而命名的。这三种算法都是用加法调整被控制的数值,其输入为误差值(设定值减去测量值后的结果)或是由误差值衍生的信号。这三种算法是[1]

    1. 比例- 来控制当前,误差值和一个正值的常数P(表示比例)相乘。P只是在控制器的输出和系统的误差成比例的时候成立。比如说,一个电热器的控制器的比例尺范围是10°C,它的预定值是20°C。那么它在10°C的时候会输出100%,在15°C的时候会输出50%,在19°C的时候输出10%,注意在误差是0的时候,控制器的输出也是0。
    2. 积分 - 来控制过去,将误差值过去一段时间和(误差和)乘以一个正值的常数II从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会震荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。通过加上一个负的平均误差比例值,平均的系统误差值就会总是减少。所以,最终这个PID回路系统会在预定值稳定下来。
    3. 微分 - 来控制将来,计算误差的一阶导,并和一个正值的常数D相乘。这个导数的控制会对系统的改变作出反应。导数的结果越大,那么控制系统就对输出结果作出更快速的反应。这个D参数也是PID被称为可预测的控制器的原因。D参数对减少控制器短期的改变很有帮助。一些实际中的速度缓慢的系统可以不需要D参数。

        经典PID就如上所诉,计算机运算的时候是使用的离散公式,因此引申出来了位置式和增量式PID。。

       位置式PID的公式为: 

       增量式的公式为:     

       PID算法有个弊端,调节出来的P I D三个参数是针对固定的模型的。

       想象以下,我们手去拿手机的过程,根据PID的参数可以理解为,在手机距离我们远的时候,我们使用的力量就大一些,而当近的时候力就小一些,当PID三个参数调节的很好的时候,这个过程可以很顺利的完成,什么叫超调呢?就是假如P给定的太大,那就是说我们手用的力就会大些,等手机到拿到胸口了,因为之前用力过大,速度太大,导致停不下来,就会触碰到身体,这就是超调了。再想想下,还是用之前那手机的时候调节好的PID参数,这次是拿一块金砖,会有怎样的结果?没错,拿不动,根据值钱的P,在距离乘P的力量下,是不够拿动金装的,这个时候好像只能靠I参数的积分来解决问题了,不过这并不是好的办法,而且效果是非常不理想的,积分需要不少时间来增加这个力量。。

      说到积分,我们说说为什么不试用增量式的PID。在实验中,我们试用专家PID的参数,在给定的采样时间里面(后面有图)它可以工作的很好,但是当我们把采样时间增加10倍以后,系统会正当,我的理解就是在规则2中使用了增量式PID,然后系统给的模型惯性可能比较大,我们采样间隔很短的情况下,增量会比较大,所以会导致输出过大,从而震荡。

      继续说上面我们手拿手机的问题,想想我们自己拿东西的时候到底是怎么操作的。。。我们不可能会拿手机了而拿不动金砖吧,额。。要是这样我也没什么可说的了。。具体看后面图4后面的解释。

      专家PID可以参考百度文库的:http://wenku.baidu.com/view/77c113260722192e4536f6dd.html

      先把图放上来,后面再解释。所有图的PID三个参数都是一样的,系统模型(传递函数)也是相同的。

     图1和图2如下:

                                                图1

                                                    图2

    图1和图2唯一的区别就是图2的采样时间是图1的10倍,为什么专家PID会出现震荡,前面已经说过了。。

    针对图1我们来说说各个PID我们都进行了怎样的更改。

         专家PID表现的相当好,具体可以参看上面给的网址中的内容。经典PID和改进的PID的区别。。首先我们希望尽快达到目标值,超调越少约好并且可以任意时刻都不发散,都是收敛的一个控制系统,I是不利于提前达到目标值的,所以我们将PID进行比例和积分分离,例如可以在距离误差大于80%输出1.5倍的P,然后60%1.3倍P等,当误差小于30%或者什么数值的时候采用0.8倍的P,然后在误差下于5%甚至更小的时候再假如积分环节,同时在误差大于60%的时候使用D,让系统更快接近目标值,从图1中的曲线中可以看到效果还是不错的。根据上面的图形,不管怎么样,采样时间控制好我们还是希望使用专家PID的,因为他的效果更好。。可是,我们看看下面的图,当目标数值是动态的,需要系统跟踪的时候,我们看看特闷的表现:

    图3:

                    图3

    可以看到专家PID发生了震荡。。。。问题也处在规则2和规则3上。。。

    我们将规则2和规则3进行修改后,专家PID也可以很好的跟踪上了如图4,如下:

            图4

     图4和图3中专家PID的区别在于我们对规则2的修改,在规则2中,我们判断了目标数值的变化,如果没变化,我们不采用增量的方式,否则采用增量的方式就可以解决上诉跟踪震荡的问题。。不过暂时还不敢拿到飞控上实验。。我们打算还是先用传统PID,然后用比例积分分离和分段比例控制

    再回到我们手拿手机的问题,想想我们是怎样又可以拿手机又可以拿金砖的?首先我们肯定不是根据距离通过比例来控制力量的?那是什么?没错,那就是速度。。拿过来的速度。。。我们希望拿过来的时候保持匀速拿过来,速度不够我们就大点力,速度快了我们就小点力。。没错吧。。更细分点,就是远的时候我们希望拿过来的速度快点,近了我希望它慢点。。综合起来我们的算法应该怎样呢,方法可以描述如下:

    让P能够自动变换,想法是通过误差的变化速率来调整P,变化速率达到我设定的数值我就让P保持,然后不够就增加P。。这个通过变化速率控制P同时根据误差的大小来调整他的作用权值。。比例 积分 分开。。后期才开积分。。为什么希望让P可以自动变换呢?是这样的,对于一架已经调好PID的四轴飞行器,如果你外挂了什么物品上去,导致飞机重心不在中间,那么之前调好的PID将不再适用,轻则导致飞机飞的过程中控制会一边灵活一边笨重,重则飞机直接往一边偏。炸机的节奏。。在高空如果碰到稍微i强一点的侧风的时候,也会。。。。。。。。。但是如果可以根据误差变化速度来动态调节PID的参数,那这些问题都将不是问题。。。

    效果如下图所示:

    我们可以看到P的增加,然后效果并没有想象的好,这个指示一个思路,现在是先要简单暴力的把飞机做出来。。我们后期可以再想办法解决这个问题。。不过我们请教了猞猁大神,他高速我,这个东西调好了,可以很快达到稳定,但是容易像专家PID一样,在跟踪或者一有扰动的情况下会震动,然后发散。。。不过确实有这样的PID控制器,这个想法的最终形态就是Gain-Scheduled PID ,中文好像叫做模糊PID控制。。。估计有机会,要一直弄到模糊PID控制为止了。。路还很长哈。。

    二 飞控的PID效果

    上图蓝色的为PID的输出,红色为实际数值。绿色为目标值,后面好像之所以偏离中间目标值点的原因是I积分的作用。。。

  • 相关阅读:
    数据库连接池实现
    Linux array_vpnc
    MVC小结
    Linux和Windows下 classpath 的差异
    无法删除DLL文件解决方法(转)
    电信工程管理方法
    常用设计思想
    MAX262使用说明
    基于FPGA的FIR滤波器(草稿)
    数字存储示波器(草稿)
  • 原文地址:https://www.cnblogs.com/adfjhg/p/3933790.html
Copyright © 2011-2022 走看看