pid个人简述
前言
有用过智能小车或者机械臂或者机器人都知道,真正的理论控制中pid绝对有重要的地位,而pid pid是啥,表面意思上就
P(proportion比例) I(Integral积分) D(differential calculus微分)
我们暂时只需要记住这三样的英文,因为小编,,,,咳咳
一、三样基础
此基础全部基于我们目标值跟我们所处值作阐述:“所谓 PID 控制,就是对系统偏差进行比例、积分以及微分的控制。PID 是闭环控制,因此需要有传感器测量我们需要控制的参数,并且反馈到我们的控制计算当中,并且参与控制。PID 由 3 个单元组成,分别是比例(Proportion)单元、积分(Integral)单元、微分(Differential)单元。通过对这三个单元的处理计算输出给执行器,达到减小偏差最终实现收敛的过程"这段话是借鉴,但是实际过程中,我都是实际靠感觉调参,
1、P(proportion比例) 是什么?
比例比较简单,在我们高中都有学过,就是斜率,就比如说我们的目标值现在是在(1,1),而我们的所处值是(0,0),那很明显,我们的斜率就是1即为我们的比例就是P
2、I(Integral积分) 是什么?
我们高数有学过,在我们周围规则图像大致面积等于x * y
,但是像一些不规则就只能通过积分来求,但是在某种意义上,就是将不规则“切割”成可通用计算的规则图形,这就是积分,就好比速度跟时间,y轴为速度,x轴为时间,但是速度忽慢忽快,为了求位移,就是一个积分的过程,在某单位时间跨度切割,就可以大概得出一个常规四边形,不断加起来就是此部分面积
3、D(differential calculus微分)是什么?
微分在数学中的定义:由函数B=f(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。微分是函数改变量的线性主要部分。微积分的基本概念之一。大概可以理解单位变化时间内两 y` 的差值
二、术语与代码
最大超调量:是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;
----打个比方,我们用舵机进行位置定位,从a点出发,预计到达b点,假如因为某些因素到达了c点,那超调量就是c-b
上升时间: 是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;
静差: 是被控量的稳定值与给定值之差,一般用于衡量系统的准确性;
1.pid实例
假如我们单片机的分频值为0,重装载值7199
入口参数:编码器测量位置信息,目标位置
/**************************************************************************
函数功能:位置式PID控制器
入口参数:编码器测量位置信息,目标位置
返回 值:电机PWM
根据位置式离散PID公式
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差
e(k-1)代表上一次的偏差
∑e(k)代表e(k)以及之前的偏差的累积和;其中k为1,2,,k;
pwm代表输出
**************************************************************************/
int Position_PID (int position,int target)
{
static float Bias,Pwm,Integral_bias,Last_Bias;
Bias=target-position; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
if(Integral_bias>3000)Integral_bias=3000;
if(Integral_bias<-3000)Integral_bias=-3000;
Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); //位置式PID控制器
Last_Bias=Bias; //保存上一次偏差
return Pwm; //增量输出
}
Bias----------------------------此次偏差
Integral_bias-----------------累计偏差
Last_Bias --------------------上次偏差
我们可以根据
Pwm=Position_KP * Bias+Position_KI * Integral_bias+Position_KD * (Bias-Last_Bias);
1.P比例
我们先看 Position_KP * Bias,Position_KP 部分。这部分我们可以理解成一元线性函数y=a * bias
,也是我们pid绝大多数场景最重要,反应最快的部分,也是造成超调的原因,比如我们烧水,我们单位时间加热系数P为1.2,时间为单位time,但是我们希望温度为10,那么他time1就会先到达1.2 * (10-0)=12
, 这时候超调3,time2的时候是0.9*(10-12)=-1.8
,
2.I积分
Position_KI*Integral_bias:
3.D微分
我们之前说过D可以看出变化率的大小变化,那我们这次减去上次的偏差在某种程度上体现了单位时间内
Position_KD * (Bias-Last_Bias):
我们上面说到了超调1即为8,但是我们假设让他自行冷却,当他冷却到6.9时候,他又加热,6.9+2,又变成了8.9,这样永远处于动荡的过程中,假如我们加入微分,其震荡会变小,我们之前说过,微分就是两单位时间内,y的差值的的差值,打个比方,我们假设实在p点到达了6值,那我们距离7值的的偏差为1,当我们加热到q点8.9时,我们的偏差为1.9,
2.读入数据
代码如下(示例):
data = pd.read_csv(
'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
该处使用的url网络请求的数据。
总结
提示:这里对文章进行总结:
文章来源:https://www.toymoban.com/news/detail-633189.html
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。文章来源地址https://www.toymoban.com/news/detail-633189.html
到了这里,关于简述pid的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!