赞
踩
笔者从接触控制到现在,已经四年半的时间了。这四年半,笔者做了至少有七个控制项目了,有的一个项目要用多个PID。比如在制作平衡车的时候要能让车“站起来”就需要直立环PID,要控制车速就需要再直立环的基础上叠加一个速度环PID。
这里提一嘴,制作平衡车就用到了PID的两大类型:位置型和增量型。并且在进行姿态解算的时候会用到卡尔曼滤波算法。这样如果完成并且弄明白了平衡车控制,就连怎么使用卡尔曼滤波算法都学会了。卡尔曼滤波算法可是将人类送上月球的一个伟大算法。做完之后,其他的一些简单控制也都可以做了。所以十分建议去研究一下,做一下平衡车。
好了,说回正题。笔者这几年在技术上接触最多的就是PID控制算法,所以对齿有十分多的思考和总结。在此总结出来,希望能帮到大家。
本文适合于正在学习PID控制算法的人和对PID控制算法了解不深的人,看完这篇文章,你的内心会把PID和实际结合起来。在遇到项目的时候,相信就可以分析出来某个控制适不适合用PID做,以及用增量型或位置型哪种PID去做。注意,本文基本不涉及PID算法的数学推导,只让你会用,想学理论请移步其他优质博文。
如果把控制比作大河,那么PID就只是这条大河的一条支流。笔者给正在学习控制的同学一条忠告,不要认为学完PID就可以解决大部分问题就放弃学习其他的了。在一些大型项目上,比如现在流行的自动驾驶技术,光有PID是远远不够的,如果想在控制领域深耕下去,请继续结合实践学习。笔者所知的就有模糊控制、模糊PID、自整定PID等内容。
想象一下,某天你出去逛街了,突然发现你芳心暗许的校花同学在你的正前方,你会做什么?有些害羞的金针菇可能会说了,我赶快捂着脸跑开,正面撞上太尴尬了。不,这样是不行的,你要以最快的速度到达她身边,然后去打招呼才行。好的,现在假设你用走直线的方式尽可能快去到她身边,你想一下会怎么做。
你会判断一下距离校花还有多远,如果距离远的话,你就跑的快一点,如果距离近的话就跑的慢一点。
这就是一个PID控制,准确的说,只使用了P这个参数!!!
听笔者细细讲来。把你的大脑想象成处理器,眼睛想象成距离传感器,双腿想象成小车。你的大脑想要快速的去校花面前打招呼,接收到了眼睛传过来的距离误差信息,大脑根据这个误差判断出你需要跑的速度。你的眼睛不断把距离信息传给大脑,大脑不断的判断并控制双腿的速度,距离越近(误差越小),速度就越慢,直至误差等于0,速度也降为了0.这就是一个完美的控制过程。
现在再想象一个场景,下午五点,你悠哉游哉的下班了,这天天气很好,你骑车小电驴在下班路上的湖边吹风,想把小电驴控制到一个慢慢的速度,你会怎么做?
你会拧动电车的油门把手,如果觉得速度快了就拧的小一点,如果发现速度慢了就拧的大一点,直到电车达到一个合适的速度,这个时候保持电车的把手不动或者再随着车速的变化去微调油门,这样电车就能载着你慢慢的走在湖边,湖边的风吹动了你的裙摆,再看着夕阳,还不惬意!!!
上述调节油门让电车达到一个合适的速度,就是一个典型的增量型PID算法,只是依然是由你来感知速度,然后调节速度的。请听我细细讲来,某个时候电车的实际速度和你的理想速度不同,你感觉到了这一速度误差,然后大脑做出判断,要改变速度,就在原先的油门大小基础上再拧动油门,让电车达到合适的速度。如果速度误差大,拧动的幅度就大,速度误差小,拧动的幅度就小。
好,讲到这里,大家可以回去在看看和女神打招呼的例子,看一下增量型和位置型的算法有什么不同之处。聪明的金针菇回去看了一眼说,圆哥,你骗我们啊,哪有什么不同,都是根据误差对速度进行调节。
听我仔细讲来,从表面上来看,两者的不同主要体现在最后的控制上。位置型PID算法,当误差等于0的时候,那么速度也直接为0了。而增量型PID控制算法,当误差等于0的时候,还会持续的输出一个量,让产品保持稳定。用上面的例子来看,当你到女神旁边(误差为0),如果女神不踹你一脚,那你就停下来了(速度为0)。而你把电车控制到一个合适的速度之后,还是要给着油门,否则电车就会慢慢的停下来。
从逻辑上看,位置型PID算法是一个正逻辑,即误差越小,输出就越小。这样的逻辑比较接近于咱们的生活。而增量型PID算法就反过来了,由于值在一直累加,误差越小,输出反而越大。增量型的逻辑可能有点难理解,可以想一下电车速度从零加到某个速度的过程,刚开始油门最小,慢慢的加油门启动,如果速度没达到就要继续的加油门,当达到这个速度的时候,误差为0了,油门也最大了。
一般来说,位置型和增量型对应各自要解决的问题,但是某些特殊的控制系统,单用位置型和位置型都不能很好的解决问题甚至无法解决问题。笔者这几年,位置型PID算法的项目,增量型PID算法的项目还有两者混合的项目都做过,如果大家有兴趣请点赞收藏再加评论区留言,如果想看的比较多,我再把之前的项目写一下,看看笔者是怎么分析的。
上述PID的公式是位置式的,对误差进行比例运算,积分运算和微分运算,最后叠加。增量型和位置型的区别在于,增量式要把上一次的输出记录下来,加上这一次的PID计算结果,才是最终输出。两者的比例,积分,微分运算对控制效果的影响是相似的,下面我以位置型为例来说明这三种运算对最终结果的影响。
想象一下,如果让你用开关的方式去控制一个小车距离墙35公分,你会怎么做呢?距离墙45公分的时候开启小车,小车往前走,当到达35公分的时候,关闭小车。开启小车后小车的速度不变,如果速度给的小的话,小车到达35公分所用的时间太长。如果速度给的大的话,达到35公分后由于惯性的原因小车关闭后不会立即停下来。好像两难无解了。但是如果控制方式是不仅仅的开关,而是变成:得到小车距墙的距离,减去35公分的err,再用err去乘一个比例系数P,这样如果距离大的话,输出的值就大,相应的速度就快,当距离小的时候,相应的输出值也小,这样就可以让电机在接近35公分处时具有很小的速度从而停下来。
再想象一下上一个加了P后的例子,理想状态下,在接近终点时,P*err得到的值小,电机就会输出小的转速,从而小车速度很慢。但是在现实中,如果给的电压低于某个值的话,电机是不转的,这样就会导致小车在距离终点还有一段距离的时候停下来。这个时候I的作用就体现出来了。把每一次的err值都记录下来,进行累加,得到sum_err。想一下,以现在传感器的采样频率,每秒能进行50次采样甚至更多,这样每秒就可以累加50次。所以在P不起作用之后,sum_err会继续不断的进行累加,在很短的时间内就可以达到一个较大的值,让电机再次运行起来。
大家想一下,P运算和I运算就完美了吗?P来控制输出量的大小,I来解决可能出现的稳态误差问题,似乎已经解决了所有问题。理想情况下在参数调节的很好的情况下,确实挺完美的。但是现实情况往往更加复杂多变。举个例子,你在小车(小车重10KG)载重10KG的时候进行速度控制,得到一组P,I的参数,可以让小车稳定快速的达到某一个速度。但是如果把载重变为0,电机的负荷变小,小车的速度变化就会加快。这个时候就很容易产生超调甚至失控的情况,这是及其危险的。这个时候,微分的作用就体现出来了。如果小车的速度变化加快,小车速度和时间的曲线斜率会变陡,所以D会变大,注意D这一项是负值。所以整体的输出会变小,抑制了曲线变陡。同样的,当继续增加载重也会有类似的负反馈现象。
先写这么多吧,累的不行了。请大家留言指正文中的错误,还可以留言自己的疑问,笔者会回复的。请大家多多点赞收藏。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。