乐高机器人PID算法巡线对微积分的应用

网友投稿 2019-12-02 12:02

《高等数学》在大学中属于挂科率非常高的一门课,其中的微积分更是大多数理科科目的基础。因此,学好微积分非常重要。可是由于没有高考的压力,很多学生上大学后就开始放松,而微积分又比较抽象,学习起来感觉很枯燥,这就导致了很多大学生对后续的专业课失去了信心。笔者认为,如果能激起学生学习的兴趣,把理论和实践结合起来,那么学微积分的时候就会更加主动,理解起来也比较容易。

为了解决上述问题,笔者研发了一套《机器人单光感巡线》的课程,由浅入深的引入微积分的概念。上课内容的衔接模拟设计产品的过程,为了优化巡线效率而不断优化程序算法,进而理解为什么需要用到微积分,课程内容只要有初中基础即可,内容如下。

1.二段法

巡线的原理是利用颜色传感器,通过发光二极管的光照到地面后反射回来的光值不同,判断机器人的位置。假设黑白的光值分别为0和100,黑白中间的光值——阈值就是50。【差值】=当前光值-阈值。如图一,差值正数(白色)就右前,反之(黑色)左前,机器人会沿着黑线的边缘行进。转向的范围是-100到100。转向的绝对值越大机器人越接近原地转弯,反之越接近直走。

https://cdn.china-scratch.com/timg/191204/120241E19-0.jpghttps://cdn.china-scratch.com/timg/191204/120242FY-1.jpg

                                         图一

二段法程序如图二所示,转向分别为-30和30。

https://cdn.china-scratch.com/timg/191204/1202424009-2.jpg

图二

2.三段法

      二段法有一个缺点,直线部分的时候机器人还要不停地摇摆,效率太低。三段法就是在机器人判断黑白的基础上加入了一个“新的颜色”——灰色。当机器人检测的光值是30~70那段区域(灰色),说明机器人身体是正的,需要直走,转向与差值之间的关系如图三所示。

https://cdn.china-scratch.com/timg/191204/1202425V1-3.jpghttps://cdn.china-scratch.com/timg/191204/1202423956-4.jpg

 图三

三段法程序如图四所示。

https://cdn.china-scratch.com/timg/191204/1202424W6-5.jpg

图四

3.比例算法

三段法的缺点是机器人摆动幅度太大,为了解决这个问题,我们需要让机器人距离边缘越近的时候转向越小,距离边缘越远就转向越大(例如分成左急转、左转、直走、右转、右急转五段)。段数越多转向分的越细,也就是说没偏就直走,机器人越偏离轨道越需要加大转向 。转向(比例)=差值×比例参数(相当于“无数”段法)。转向与差值成正比(如图五所示), 比例参数越大,直线越倾斜,巡线时的灵敏度也就越高。太灵敏转弯快,但直线慢;不灵敏转弯容易跨线,但直线很快。

https://cdn.china-scratch.com/timg/191204/120243K92-6.jpg

图五

比例法程序如图六所示

https://cdn.china-scratch.com/timg/191204/1202436260-7.jpg

图六

4.PID算法

比例算法有一个很大的缺陷,就是无法在提高速度的同时保证直线和急弯的巡线都很精确 ,为了更好地解决这个问题我们可以加入积分的思想。如果机器人遇到急弯,随着时间的累计就能突破转向的极限,实现快速转弯。不仅如此,适当的积分还可以减小摆动幅度,假设比例部分相同,加上积分部分后同样的位置可比单纯比例算法获得更大的转向。

转向=比例部分+积分部分+微分部分 

积分部分=积分(∑(单位时间×差值))×积分参数

实际上差值随着时间的变化并不规律,如图七所示。积分可以看做是计算曲线和横坐标围成的面积,我们可以把面积无限细分,分成无数个长方形,长方形的宽就是无限细分后的单位时间,长方形的高就是当前时间对应的差值,最后对这些长方形进行求和就可以得到总面积(积分部分)。程序中由于单位时间和积分参数都是常量,为了简化程序,我们输入的积分参数实际上是单位时间和积分参数的乘积。

https://cdn.china-scratch.com/timg/191204/1202434345-8.jpg

图七

在实际巡线过程中,机器人做出的判断和马达输出是有时间差的,因此比例巡线经常会出现延迟。为了解决这个问题引入微分思想。微分部分=微分(差值—上一个差值)×微分参数。如果把上图曲线无限细分,曲线可以看成是由无数个直线组成的。微分可以看成是某一瞬间差值的变化量,我们把其中的这些的直线左端点看做上一个单位时间的差值,中间点是现在的差值,右端点是下一个单位时间的差值,这样一来我们就可以把转向变化的趋势看做是相同的。例如现在差值是3,上一个差值是2,那么我们可以预测下一个差值是4。也就是说,如果忽略积分,微分参数和比例参数都为1,那么会得出转向=差值+微分=3+(3-2)=4,这样让机器人提前调整转向,就可以实现精确巡线的作用。

程序如图八所示(PID=E*KP+I*KI+D*KD)

转向=差值×比例参数+积分×积分参数+微分×微分参数

https://cdn.china-scratch.com/timg/191204/1202434256-9.jpghttps://cdn.china-scratch.com/timg/191204/1202432N6-10.jpg

图八

总而言之,积分(无限求和)累计差值,可以提高急转弯的效率,微分(无限细分)可以让机器人提前做出调整更精确的巡线.微积分的共同作用是减小摆动幅度。

PS:PID算法调整参数是一件非常耗时的工作,我的习惯是先确定功率,然后是比例参数的调整(参考范围0.3~1.2,注意不能跨线和离线)和微分参数的调整(参考范围4~10,功率大就需要增加),最后根据急弯的角度判断积分参数(参考范围0.0005~0.002,急弯部分容易离线可适当降低功率)

https://cdn.china-scratch.com/timg/191204/1202445549-11.jpg

长按二维码关注更多机器人教育技术信息

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com