友情提示:380元/半年,儿童学编程,就上码丁实验室。
如果需要学习本阶段课程,建议先学习本号内《基础硬件篇和基础编程篇》。
学习本篇请下载 LEGO Mindstorms 教育版软件
上周的课程可以说是一个说明。
双色感由两个色感探测值之间的差,来控制两个电机的转速差。可以叫差值巡线,也可以叫差速巡线。
很多朋友问我一个问题,移动槽和移动转向模块有什么区别?
两个移动模块的区别
从本质上来说,两个模块非常相似,都是可以达到同时控制两个电机转动的目的。
但移动转向模块内嵌了一个“脚本”,关于脚本是什么东西,我在之前基础编程课程里面有过一些说明。大家可以去看一下。
这个脚本在我们使用模块的时候是看不到的,在它的代码层面。这是用来控制两个电机转动的实际速度误差的。
简单说,就是在设定完转动的要求后,当发现一个电机的转速比另一个快了或者慢了,就以设定的具体项为标准,自动加快一点或减慢一点,补充电机的转速误差,使两个电机的速度保持稳定,从而让运行结果不出大误差。
我们都知道,通常我们会使用两个电机分别带动两个轮子的转动,而两个轮子不同的转速变化使得我们的移动方式发生了各种改变。
移动转向模块中的脚本,可以在两个电机转动时,通过电机反馈的转动情况,来计算和调整其中的误差,以使得真正的移动效果更佳稳定。
当我们需要使用直线前进、后退的时候,因为电机和电机之间有误差,使用这个模块,可以让“直线”行为变得更稳定。同理,“弧线”也是一样。
所以在这些情况下,使用移动转向模块是非常合适的。
而移动槽模块,其本质是独立控制。但它可以实现一个电机顺时针,一个电机逆时针的反向转动,以完成旋转等等动作。俗称“坦克式移动”。
说这些原因,其实我是想说明,移动,其本质就是控制电机。通过控制两个电机之间的速度差和转动方向,我们可以实现各种动作。而巡线的本质也一样。
即,通过外部条件数据,控制两个电机带动的轮子速度差,来完成巡线动作。
了解完动作之后,那么我们更多的想法就是处理数据了。
前面两周,无论是我们通过动作特点来完成的单色感摆动巡线、通过数据差来控制速度差的双色感差值(差速)巡线。
根本上的区别,是处理数据的方式决定的。
这就需要我们对各种情况下的数据处理有自己的分析和理解。
那么现在进一步看一下差速巡线这个题目,在很多情况下,光是会巡线程序了,没用。
实际任务场地,不太会简单到只要套上个程序就能完成任务的地步。
So,举个例子,像我们碰到下面这个场地。
中间有线段缺失的部分,同时要求在终点停下。
这个时候,在中间段和重点,差速会失效。原因是两个传感器相减得出的值,在两边都是白色,和两边都是黑色时是相同的。
按照之前的程序,两边值相减等于零的话,机器会始终保持直线前进。
那么这个时候,该怎么办?
往往很多“死记硬背”的学生,这时候就碰到大困难了。
其实我们只需要根据要求,补充条件就可以了。
通过观察,会发现,中间的线段断开,本身对程序没有影响。机器两遍传感器的数据仍然保持相等,所以机器会直行,直到再次碰到黑线。
问题是在终点。两边纯白和纯黑,差值都是0。我们当然无法通过这一个条件来实现程序停止的控制要求。
之前有在课程中说过,我们要善于利用变量的创建和读取,来简化程序步骤,使得程序更加干净。
所以,我们把色感的差值,创建为变量,独立出来,作为一个数据。
而用另一个主循环,控制具体的动作要求。
因为终点是两边黑线的情况,所以我们可以把这个条件合并在控制动作的主循环内,以完成循环结束的要求。
这样一来,
整个程序的数据获取和处理,是一个循环。
动作的开始、停止要求,也是一个独立的循环。
我们就可以完成这个需求。可以看一下下面这个视频,来调整一下自己的实际数据参数,让程序变得更稳定。
(视频来源于网络)
下一周,我们可以讲一下比较“高深”的,PID巡线法。