PID算法学习笔记

PID是闭环控制(有反馈调节的控制)的一种,也是应用最为广泛的一种

例如:要控制无人机悬停的高度,我们能够控制的是无人机螺旋桨的旋转速度,旋转速度越快,螺旋桨产生的升力越大,如果用开环控制,很难让无人机飞行到指定的高度,因为无人机会同时受到重力、空气的扰动以及阻力等各种不确定的因素。假设无人机安装了传感器,能够感知当前飞行的高度,则能够计算出当前高度到目标高度的误差,误差值越大,我们给无人机提供的升力越大。这里可以把升力和误差值表示成一个线性关系,比如升力F=0.01×误差值,我们可以用这个公式来控制无人机飞行的高度。

这个算法即为PID中的P(proportional比例)算法,表示的是升力F和误差error的比例关系,中间的常量0.01,我们称之为Kp,Kp越大,升力和误差的比例就越大,控制系统的响应速度也更快,无人机可以更快的靠近目标同时我们看到无人机在接近目标高度时,产生的震荡也越严重。

控制比例:快

为了解决系统震荡的问题,我们可以通过PID中的D(derivative倒数/微分)算法,对应的参数叫Kd。d(error)/dt=v,D算法能够对无人机的速度做出响应,当无人机速度过快时,D算法会抵消掉一部分由P算法计算出来的升力,从而减缓系统的震荡。微分控制就是通过当前时刻与前一时刻误差量的差值赌未来做出预测,差值为正,人为误差在逐渐变大,需要加大可控制强度,使误差降下来;如果差值为负,控制强度可以小一点,让目标平稳缓和的到达指定值。加入微分控制后,系统超调量得到有效控制。

变化率:稳

无论我们怎么调整Kp和Kd的值,这个误差都永远不会被消除成0。只要误差存在,无人机的升力也一定存在,但是在无人机接近于目标高度时,这个升力会最终和重力和向下的阻力平衡,此时无人机就不会再继续上升了,称为稳态误差。为了解决这个问题,我们需要累积这个误差值(对过去所有的误差求和,在离散的情况下,就是做累加),也就是说如果长时间误差得不到修正的话,我们就需要给无人机提供更大的升力,迫使无人机上升,这就是PID中的I(integral积分)算法,I会对误差进行累积,从而提供更大的升力。加入Ki以后,无人机会慢慢朝目标高度靠拢,这个误差最终会被消除成0

累积变化量:准,给输出一个补偿的信号,消除余差

下面给出javascrip写的无人及模拟程序

实际使用中,我们可以直接使用开源的库

动画演示

控制环节分别由比例、积分、微分调节构成,这三个环节在控制过程中相互配合,共同对输入输出之间的误差进行调控

PID控制器(调节器)

相关推荐
MartinYeung51 小时前
[论文学习]隐私保护联邦特徵选择与差分隐私的的工程实践框架
学习
qeen871 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
m0_736034851 小时前
存储基础和虚拟化
笔记
Flandern11112 小时前
Pull Requests(PR)
学习·github·pr
nashane3 小时前
HarmonyOS 6学习:JsCrash“闪退”法医指南——从FaultLog堆栈还原崩溃现场的终极手册
学习·华为·harmonyos
for_ever_love__3 小时前
UI学习:UICollectionView瀑布流
学习·ui·ios·objective-c·cocoa
AOwhisky3 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
_李小白3 小时前
【android opencv学习笔记】Day 32:直线检测之霍夫变换
android·opencv·学习
华山沦贱4 小时前
open62541 V1.5.4版对C++ Builder支持的bug
笔记
稷下元歌5 小时前
七天学会plc 加机器视觉完整笔记:S7-1200 数据类型、存储区与寻址方式(I/Q/M/DB 详解)。
网络·数据库·笔记