传统pid本质上时微分方程,p通过误差调节信号变化幅度,i加强P,也就是误差在系统中的作用,以增加精度,d通过上一次的误差差分得到信号的变化趋势,并抑制该趋势,该方法对非线性系统有很好的控制效果。
其公式可为
控制器输出
F ( t ) = P ∗ e r r o r ( t ) + I ∗ ∑ i = 0 t e r r o r ( i ) + D ∗ ( e r r o r ( t ) − e r r o r ( t − 1 ) ) F(t)=P*error(t)+ I*\sum_{i=0}^terror(i)+D*(error(t)-error(t-1)) F(t)=P∗error(t)+I∗i=0∑terror(i)+D∗(error(t)−error(t−1))
以上例子为四轴飞行器串级PID,串级PID个人理解上的本质是在单级PID上加强控制。
以某篇博文中以伺服电机为例,伺服电机自带一层电流环PID,其完全由伺服电机内部控制。
而我们的外部PID,比如输出PWM控制该伺服电机,属于偏外层的PID,在该系统中成为速度环。
最外层是PID是位置环,需要根据实际情况总结。
最后将三者控制量相加得到最终的控制量(具体情况需要具体考虑),越多的环需要越多的计算。
模糊,就如笔者对于前面所述的PID讲解的PID甚为模糊(虽然在这里不是什么好词)。
模糊控制的含义就是最接近人体感知的控制,图像处理中的滤波可以称作一种模糊化的处理,而深度学习中的卷积神经网络也是对数据进行了一层模糊化处理,从而进行分析其中的特征,(模仿人对图像的认识)。
可以总结为下图
笔者曾经写过一种自美名曰为“动态PID”的PID方法。因为当时的情况下系统随时间变化,所以在当时起到了挺好的作用,但是这让笔者认识到了一个道理,对于时变非线性系统不同时刻需要选用不同的PID参数,因此我们模糊PID控制,即利用模糊逻辑并根据一定的模糊规则对PID的参数进行实时的优化,以克服传统PID参数无法实时调整PID参数的缺点。
模糊控制的输入依然是我们熟悉的error(t)与error(t-1),步骤可分为
模糊化,模糊推理,解模糊三个步骤,现在我们将从模糊化说起
模糊化分为一下步骤
1.建立论域,例如定义为{-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6}。
2.函数量化,通过某量化函数将变量量化,接上例,论域为(-6,6),变量为e与ec,其中e为误差,ec为误差变化量,即e(t)-e(t-1),量化函数为线性函数,因为ec最大值最小值可为e的一倍,所以有两倍的(max-min)。
f ( e ) = 6 ∗ e M A X ( e ) − M I N ( e ) f(e)=\frac{6*e}{MAX(e)-MIN(e)} f(e)=MAX(e)−MIN(e)6∗e
f ( e c ) = 6 ∗ e 2 ∗ ( M A X ( e ) − M I N ( e ) ) f(ec)=\frac{6*e}{2*(MAX(e)-MIN(e))} f(ec)=2∗(MAX(e)−MIN(e))6∗e
3.确定隶属度函数,例为三角隶属度函数。
即到两词义(分割值)的距离大小。
可设计模糊规则表如下
此表需要我们自己定制。
通过我们得到的描述例如正大,正小等词义来找到我们需要的词义。
从而得到PID参数变化值这一目的,但这不是最后的步骤。
我们之前的隶属度函数在这里起到了用处,通过我们的计算隶属度的结果实际上得到的是我们的输入值到两个词义的靠近程度,如果说,把区间分为词义,也就是负大NB,负中NM,负小NS等描述词的是第一层模糊的话,我们把通过描述隶属度,也就是描述我们的输入到这些相邻词义的距离则可以称为第二层模糊,如果我们的相邻词义具体值分别为4,6,而我们计算出来的隶属值为4.2的话,对于程度4的隶属度便为(6-4.2)/(6-4),反之可算出到6的隶属度。
我们所谓的解模糊,便是通过这些模糊隶属度推理出清晰的值。
V 0 = ∑ i = 0 ∞ ( M i ∗ F i ) ∑ i = 0 ∞ M i V_0=\frac{\sum_{i=0}^\infty (M_i*F_i)}{\sum_{i=0}^\infty M_i} V0=∑i=0∞Mi∑i=0∞(Mi∗Fi)
其中M为隶属度,F为量化值。
最后通过
K ( n ) = K + Δ K ∗ α K(n)=K+\Delta K*\alpha K(n)=K+ΔK∗α
α是权值,K的变化值即为V。
通过该公式可分别求出KP,KI,KD。
图载至https://blog.csdn.net/foxclever/article/details/83932107。