友情提示:380元/半年,儿童学编程,就上码丁实验室。
如果需要学习本阶段课程,建议先学习本号内《基础硬件篇和基础编程篇》。
学习本篇请下载 LEGO Mindstorms 教育版软件
大家久等了,我们继续说PID巡线。
再次说明一点,其实PID的控制,是应用在很多很多方面的,而不是乐高机器人巡线。所以,当我们学习一样东西,处于“身在此山中”的感觉时,有时候会很难理解。
上周我们说了P是什么。这周我们说 I 。
I 积分(integral的首字母)
完了,没学过高数的可能已经崩溃。
我们会发现,很多朋友即便是拿到了现成的PID程序,也不知道该怎么来调节参数。
别急,我们先来理解一下。
PID控制是基于反馈而成立的一种根据时长自动调节误差的控制方法。
我们需要完成的最主要的人工工作,就是基于“经验”来调整参数。
说白了,用眼睛看,用脑子想,然后根据实际情况调节到一个合适的位置
选择用移动转向模块的程序编法,是为了给大家解释的清楚一些。
因为移动转向模块本身内置PID控制电机速度差实现转向控制,所以,我们利用它,就可以先不考虑“时间常数”的问题。
这边我们把概念重新正规化一下。
上周我们的内容为了方便大家的理解,所以我们把E解释为“行动”。这节课开始,我们让它的概念回到正规的解释:
E也就是误差,error。
因为P是一切的基础,没有P,其他参数的存在将毫无意义,
如果我们把PID当做是一个公司的工作分工,那么它就是老板,它控制的是大方向!
老板一般会设置一个赚钱的指标,对吧。
那么E就是当前赚到的钱和指标的差距,也就是误差。
这个误差决定了工作强度的分配。对吧。
没钱,当然要快点赚,加班加点加任务;
有钱了,大家可以休息休息。
当然,这个例子不适合讲,因为一般老板只会制定指标,但不会限制超额完成指标……
换个角度,生活中,我们会去游泳,游泳池的水需要过滤更新,以前有是人工控制水泵,现在很多高级的泳池都是电脑控制水位,这就是个PID的应用。
假设我们有个缸,缸里面的水位有规定的限度,达到水位线是一个完美状态的话。
P要做的事情就是,误差很大的时候,加快放水,水龙头开足。
然后随着越来越接近水位线,逐渐减速放水,最终到达水位线,然后停止。
这个时候P=Kp*E,Kp不等于0,是正比例的。
所以,增大Kp,可以让误差越大时,水量更大,也就加快的装水的速度。反之则是减小。
所以,在调节Kp的时候,我们就可以理解为:
增大比例系数一般会加快系统响应。
(也就是对误差的反应速度越快。)
用机器人移动的行为,举个例子,当你要左转解决一个角度误差,误差为60度,那么直接转60度,肯定比每次转30度转2次的响应速度快,是不是?当然,动作幅度也会加大。
这个理解了吧?!
那么继续回到缸的例子里面。
如果这个缸一边蓄水一边放水呢?
貌似小学奥数老有这种无聊的题目,在我看来,总结为“浪费水资源”问题。
首先,P可以解决我们的基本问题。
如果Kp调整的到位,那么其实P就已经可以完成控制放水的功能了,对吧。
现在杀出个程咬金,我们把它叫作C吧。这家伙出来“搞事情”!
(Chengyaojin,职业,肉盾、战士)
这个时候,P=Kp*E-C(C是放水的量,是个常量,以固定速度放水)
这家伙严重影响了P老板的大事。
如果P老板不作调整按照原来的情况放水,那么离目标水位永远会差一个C。
其实这个C是有个名字的,叫作“静差”,也就是一个稳定的误差。
这个可以理解吗?不理解的给我留言……
那么这个时候,PID的“I”就登场了。
要帮P老板解决这个问题,也很容易。
我们弄个再弄个水龙头,叫作 I,让 I = C 不就可以了?
(机智如我,其实是更严重的浪费……)
两个水龙头一起放水,P老板解决大方向,I解决这个程咬金C。
P还是管P的事情,这样这个公式就变成了。
P=Kp*E + I - C。
让 I = C 的话,公式就又变回了 P = Kp*E。
这样P老板又可以安心“处理大事”了。
这就是所谓的:
积分环节可以消除系统静差。
I = C = Ki*E,Ki是 I 的系数
所以,PI 的控制,我们可以先写出来了吧。
PI = Kp*E + Ki*E
要不要那么简单?!
调整Ki的数据,可以帮助P解决静差。
巡线里面的静差在哪里?
在实践中用眼睛看一下转弯角度和反应速度你就知道了。
所以,我们程序可以这样做。
(这个程序是在上个星期程序的 P 基础上再加入 I 的部分来完成的,放大看!)
由于这种静差其实是很小的,所以Ki的取值,用0.05这种数据来上下一点点调整,就会有很明显的效果!
千万别上手就来个1、2这种值!数据大了,你只会看到EV3在原地打转~
但是,这个程序有问题!
我们下周继续说!哈哈哈哈。请先理解上面哦!最好是动手试试看。