本帖最后由 小竹砸 于 2018-2-10 15:42 编辑
看了很多PID控制器的帖子,自己也试着去做了一个,首先看看效果视频
视频如果打不开,可以打开链接:http://v.youku.com/v_show/id_XMzM4ODAzMzU1Mg==.html
一、什么是PID控制器
百度百科: 工业生产过程中,对于生产装置的温度、压力、流量、液位等工艺变量常常要求维持在一定的数值上,或按一定的规律变化,以满足生产工艺的要求。PID控制器是根据PID控制原理对整个控制系统进行偏差调节,从而使被控变量的实际值与工艺要求的预定值一致。不同的控制规律适用于不同的生产过程,必须合理选择相应的控制规律,否则PID控制器将达不到预期的控制效果。 PID控制器(Proportion Integration Differentiation.比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp, Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。 简单点说,PID控制器可以将某一参数,维持稳定,适用于基本线性和动态特性不随时间变化的系统中。
二、黑线附近的灰度变化是否线性
下面以黑色胶带轨迹、原木桌面巡线环境为例,进行验证
(一)黑线附近灰度值采集
删除test文件(方便重复测试),车体以3的功率直行4秒,每0.08秒采集一次传感器灰度值并存在文件中。(程序运行前保证车身垂直于黑线,且距离黑线一定距离)
运行程序后,打开程序块内存浏览器
找到对应的test.rtf文件
选中上传并将文件扩展名改为xls(表格)
打开表格→选中数据→插入→折线图
黑线附近灰度值变化情况:OA段,传感器红色光圈未接触黑线;AB段,传感器红色光圈慢慢进入黑线范围;BC段,传感器红色光圈完全处于黑线中;CD段,传感器红色光圈慢慢离开黑线范围。
AB段为接近是一条直线段,因此可以得出:传感器红色光圈慢慢进入黑线范围的过程中,灰度值随距离线性变化。
三、PID控制器原理分析及程序讲解(一)P控制器——比例控制
黑线附近的灰度值随着距离线性改变,因此可以根据传感器检测到的灰度值与目标灰度值的差值控制车体转弯的幅度。 转向度=kp*(灰度值-目标值)
定义比例因子kp、直行功率Ep、目标灰度值huidu,将传感器灰度值减去目标灰度值乘以比例因子kp的积作为转向度。 (比例因子一般为小于1的数,因为传感器灰度值与目标灰度值的差值一般比较大,直接作为转向度,车体摆动幅度很大)
使用了P控制器的巡线程序,拥有较快的响应速度,在直线和小角度的拐弯部分会有很好的巡线效果,在有较大角度拐弯的情况下容易飞线,这时候需要调大比例因子或者调小直行功率(提升响应速度,延长响应时间),但是这样调整之后,直线部分的巡线摆动幅度会变大,直行速度会变小。为了能同时应对直线和转弯的巡线任务,需要加入微分控制器。
(二)PD控制器——比例、微分控制
微分的大小取决于单位时间内灰度值变化的幅度,直线部分灰度变化小,基本无影响,转弯部分灰度值变化大,微分控制器可以加大车体的转向度。 定义灰度值与目标值之间的差值为误差error,前一个误差为lasterror, 数学定义上的微分为单位时间里的改变量,因此, 微分=(error-lasterror)/时间 为了加大转弯时的调整幅度,微分项还需要乘以一个参数,与时间的倒数合并记为kd,转向度=kp*(灰度值-目标值)+kd*(error-lasterror)
比例微分控制的优势在于能够很快应对突变,但是经过转弯之后车体会有一定程度的震荡,即灰度值与目标灰度值会有一个比较稳定的差值,这个差值PD控制器无法自动消除,为了消除稳态误差,需要使用积分控制器。
(三)PID控制器——比例、积分、微分控制
数学定义上的积分定义为函数图像与坐标轴围起来部分的面积(坐标轴上方为正,下放为负)即误差的累计(积分=积分+误差),为了消除大的振荡(对应一个大的积分值)对后续巡线效果的影响,将积分定义为:积分=0.5*积分+误差。由于每次差生的误差都是比较大的数值,积分也就比较大,因此积分项(记为变量jf)一般乘以一个很小的系数ki后再加入到转向度中,即: jf=0.5jf+error(等号表示赋值) 转向度=kp*(灰度值-目标值)+kd*(error-lasterror)+ki*jf
积分项:
整体程序图为:
四、参数调整
(一)参数整定口诀 具体如下: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积分时间往下降 曲线波动周期长,积分时间再加长 曲线振荡频率快,先把微分降下来 动差大来波动慢。微分时间应加长 理想曲线两个波,前高后低4比1 一看二调多分析,调节质量不会低
(二)个人习惯 先调整比例系数kp(1以内,每次变化0.1),再调整微分系数kd(每次增加2到3,直至车体在转弯部分能够很快调整并且直线部分没有大幅度摆动),最后调整积分系数ki(由于积分项数值较大,一般从0.01起调,每次变化0.01,直至车体无明显摆动为止)
|