友情提示:380元/半年,儿童学编程,就上码丁实验室。
如果需要学习本阶段课程,建议先学习本号内《基础硬件篇和基础编程篇》。
学习本篇请下载 LEGO Mindstorms 教育版软件
上一节课写完后,收到很多朋友的问题。统一的说法都是,之前也看过一些教程,也看过一些别人的程序,但都理解不了。
然后归结到没学过高数,或者没学过编程上。
其实不然,经过交流后,我发现,大家共同的问题,其实是“方向性”的。
理解方向出现偏差,自然会造成后续理解不了的最终结果啦!
PID巡线,也叫比例巡线。
我们其实在网上也能搜到一些跟PID巡线有关的教程或者程序。
但这些程序编写方法上,其实是有本质区别的。
核心,就在“比例”这两个字上。
所有巡线最终都基于电机的“动作”上,这个明确吗?
换言之,无论你怎么编写和处理数据,最终都要落地在动作的参数上,去完成你最终的目的。对不对?
我们会发现,关于“动作”,在之前的课程中,我就给大家分析过,有两种移动模块。
一种叫做“移动转向”
一种叫做“移动槽”
具体的区别请看我之前的课程去了解一下。
这边总结一下:
移动转向,最大的特点是,可以输入转向参数,来完成直行、转向要求。
移动槽,最大的特点是,可以分别控制两个电机的功率,从而完成各种直行、转向要求。
那你有么有发现?
转向参数本身就可以用“比例”直接控制。
两个电机之间的功率差,也可以用比例来控制。
你以前看到的比例巡线,到底是控制转向比例?还是控制电机功率差比例?
这是两种不同的PID控制法。
所以我们学东西不能学死,对吧,要动脑子啊!(话糙点,请别见怪。)
我知道要讲PID巡线,其实挺麻烦的。要解释很多东西,所以这注定不是一、两节课可以讲完的。而且我的理解也不一定全对,毕竟我不是正统理工科人。
但至少这个程序是我用的比较熟悉的,算是给大家的经验分享吧。
当然,无论你是用哪种方法实现PID巡线,其实归根结底,都是在控制电机速度差。
只是移动转向模块,自己本身可以通过脚本去控制一部分误差,所以用起来可能会更方便,但效果没有移动槽好。
我们继续回到PID的讲解。
为了方便大家理解,那么我们先讲看着简单些的。
用“移动转向”模块实现的PID巡线。
P,(proportion的首字母),意思就是比例。
这个比例指的是什么?
这个比例指的是,输入和输出量之间的比例关系。
输入,在我们现在的这个话题下,当然就是指颜色传感器提供的值。
输出,指的就是电机的转向值,注意不是功率值!
使用移动转向模块的巡线,我们控制的是移动转向模块的转向功能。控制速度有啥用?在这个模块下,很多时候,功率是一个常量,对不对?
颜色传感器提供的光线反射值和由“移动转向”模块提供的可输入的转向值,它们两者的取值范围是不同的。当然,就需要用一个特殊的比例系数去控制啦。
我们把它起名字叫Kp吧。
起这个名字是有道理的。K在数学公式中一般作为系数的代号,而用X、Y这种代表各种变量。比如:y=kx+b,k是常数且不等于0,b是常数,这里面k就叫做比例系数。我们初高中学的代数,函数都会遇到。
(虽然老丁读书的时候是文科生,初高中数学极差无比,但陈曦老师你会不会现在很欣慰?)
我们再设置一个参数,叫做E(起这个名字是因为,Execution value 执行值)
这个值顾名思义,我们最终会直接用作执行转向的数据。
先把这两个变量给创建出来。
我们在编程中,使用一个正确的名字,是非常好的习惯,这有利于整理自己、或者学生的思路。
这两个数据将会构成整个PID巡线的根本。也就是负责提供转向数据!
在任何PID控制原理的程序或者技术中。P是无可取代的地位。
原因很简单,你要炒一碗蛋炒饭,什么材料,火候,盐放多少,都可以理解为是参数吧。但最重要的是啥?
是要“炒”这个动作啊。
你光有一堆食材和炒菜技术,但不炒,有啥用?
就像你天天在上数学课,题目不做,有啥用?
看老丁的课,不动手研究,不点赞,有啥用?
P、I、D是有独立作用的三个部分,我们在比例控制技术(PID)的原理下,可以根据实际需求来搭配使用。
可以只使用比例控制(也就是P),也可以PI、PD,最后PID。
但无论怎么样,都要有P,对吧?
不然你后面整了一堆参数,有啥用?
总结下:
变量E是最终的计算值,用来控制转向。
变量Kp是比例系数,用来计算出E。调整Kp,就可以让E的值更加稳定。
明白了?
那么如何编写呢?很简单。
在PID巡线的场景中,跟我们单色感巡线一样。无非就是这三类情况。如图:
颜色传感器探测到的反射值,从左到右逐渐降低。
而动作的要求也是,左边右转,中间直行,右边左转。
我们假设一下理想化状态,中间直行的那个数据是50好了,左边是100,右边就是0。
(这个现实操作时需要自己测量一下实际情况)
那么当E的值是0的时候,我们需要直行。(即,上图的中间,反射值是50,那么如果要直行,则由E提供的转向值就是0)
这部分程序就可以用差值公式(减法),直接写出来。
这样一来,你的P就完成了。
今天先到这里吧,大家消化一下。
你可以先试试看直接运行这个程序,调整Kp的值,感受下是一个什么情况?
下次我们继续。可以拍照留言,跟我交流。