浅谈 PID 控制算法
PID 控制算法概念
在我们的生活中可能大家都没有听说过 PID 控制算法,但它可以说是无处不在,小到空调的温度控制、无人机的精准悬停、机器人运作系统,大到飞机和火箭的飞行姿态控制都有 PID 的身影。
PID 控制算法,即比例-积分-微分(Proportional-Integral-Derivative)控制算法,是一种广泛应用于各种自动控制系统中的反馈控制算法。PID 控制器通过计算控制误差的三种成分 —— 比例(P)、积分(I)和微分(D)来调节系统输出,使得系统的输出达到目标值。
PID 控制算法的运行步骤
1 比例控制(P 部分)
这是 PID 中的最简单基本比例控制算法。这个环节产生的分力是:
2 微分控制(D 部分)
从上面我们可以看出来在不断加水的过程中是会产生震荡的,那想要阻止震荡就只能用微分控制了。微分环节也会计算出一个分力,计算方法是:
因此如果在刚刚的基础上加入微分产生的分力,就会产生一个阻尼效果,水位会仿佛始终受到一个阻力,因此上下摆动的幅度会逐渐减小,最终收敛到目标位置上。
3 积分控制(I 部分)
但现在,我们更希望在水位有一些外部干扰时也能实现上面的效果,比如我们在水桶上有一个洞,这样就要使用积分控制了,它的计算方法是:
加入积分作用,我们的 PID 就能完美实现在有恒力干扰的情况下对水位的控制了
公式
经上面分析可得知:
PID 控制算法扩展
PI 算法
公式:
特点:\ PI 控制结合了比例控制和积分控制两个部分。比例控制部分用于减小误差,而积分控制部分则用于消除稳态误差,提高系统的稳态精度。
优缺点:
- 优点:能够消除稳态误差,提高系统的稳态精度,且结构简单、调整方便,具有较强的抗干扰能力。
- 缺点:相对于完整的 PID 控制器,PI 控制在动态性能上可能略逊一筹。
PD 算法
公式:
特点:\ PD 控制体现了微分和比例的性质,而没有积分控制。微分控制通过预测误差变化的趋势,使系统具有超前控制作用,从而增强系统的稳定性和减少最大偏差及余差。
优缺点:
- 优点:响应速度快、稳定性好,能够减少超调。
- 缺点:在面对需要消除稳态误差的场合时,其效果可能不如 PI 或 PID 控制。
PID 控制算法代码实现
#include<bits/stdc++.h>
using namespace std;
double tl=0.0; //目标追踪位置
double nl=0.0; //目标当前位置
float kp,ki,kd;
int main(){
double ep=0; //kp误差
double ei=0; //ki误差
double ed=0; //kd误差
double edp=0; //表示e(k-1),上一次的kp误差,用于计算kd误差
cout<<"请输入目标追踪值"<<endl;
cin>>tl;
cout<<"请输入kp"<<endl;
cin>>kp;
cout<<"请输入ki"<<endl;
cin>>ki;
cout<<"请输入kd"<<endl;
cin>>kd;
edp=tl-nl;//整个系统第一次计算kd时、 e(k)-e(k-1)。
while(nl!=tl){
ep=tl-nl;
ei+=ep;
ed=ep-edp;
edp=ep;
nl+=kp*ep+ki*ei+kd*ed;
cout<<"当前位置为:"<<nl<<"当前的误差为"<<tl-nl<<endl;
}
}
参考资料
https://blog.csdn.net/name_longming/article/details/115093338
https://www.bilibili.com/video/BV1et4y1i7Gm/
https://blog.csdn.net/ah_yl/article/details/88793274