【中学生创客.虚拟机器人】5.1汽车总动员-赛车抢分
第一节 赛车抢分
一、任务初探
同学们一定都玩过赛车游戏吧?在赛车游戏中,往往途中会遇到各种得分物,获得这些物体后,有的能给自己加上一定的分数,有的能给自己的赛车加速,有的能给对手的赛车造成伤害。那么,如果我们来设计一辆赛车,想在跑道上行驶过程中获取得分物,需要如何构建我们的小车呢?程序又该怎么编写才能达到我们的目标?
5-1-1 任务示意图
本节课中,我们机器人小车的任务是,沿着赛道上一段指定的路线行驶,并且尽可能地获取路上遇见的得分物,如图 5-1-1。我们可以将这个任务分割为两个小任务,一是沿着赛道行走,二是准确地得到一路上的得分物。由于赛道两边有围栏,因此沿着赛道行走的任务可以用一近一远两个障碍传感器对围栏的探测来完成;而获取得分物,则可以通过两个红外探测器来确定得分物的方向,接着朝着正确的方向行走即可获取得分物。
二、知识汲取
在本节课中,我们将学习如何使用两个红外探测器来确定得分物体的位置,从而获取得分物体。
(一)什么是红外探测器?
红外探测器是一种用来检测红外线辐射的强度的传感器,如图 5-1-2。红外探测器可以将红外线信号的强度转化为一个具体的数字,距离红外信号源越近,数值越大。
在机器人活动中,红外探测器往往用来检测带有红外辐射的物体。比如本次任务
中,当红外探测器的值大于 200 的时候,说明红外信号相对较强,可以视作检测到了得分物体。
三、实践验证
(一)搭建机器人
这里我们的小车与之前的不同之处在于,我们安装了两个障碍传感器与两个红外探测器。为了避免障碍传感器与红外传感器互相干扰,我们可以用长方体的安装块将它们固定在距离较远的地方。由于得分物有一定的高度,所以我们可以将红外探测器装在稍微高些的地方,并且左右对称,分别命名为红外探测器_左与红外探测器_右。至于障碍传感器的位置,如果选择靠右行驶
(你也可以选择靠左行驶),那么就需要将两个障碍传感器装在小车靠右的位置,用来检测小车与右边围栏的距离。将最右边的障碍传感器命名为障碍传感器_远,另一只命名为障碍传感器_近。安装完成后,与前面的章节一样,我们需要设置障碍传感器与红外探测器的属性以及直
流电机的端口。我们将障碍传感器右近与右远分别设置为 42、43 号数字端口,并设置其检测距离为 450;将红外探测器左、右分别设置为 50、51 号数字端口;将左边两个直流电机的端口设置为 1、2,右边两个直流电机端口设置为 3、4。最后将机器人小车以“机器人_汽车总动员_5_1”为文件名进行保存。
(二)设计程序
1.任务动作分析并绘制流程图
根据前面我们对这次任务的分析,可以将本次任务分为靠右行驶与获取得分物体两个部分,如图 5-1-4。那么,我们的程序中,就可以先编写这两个部分的子程序,然后根据红外探测器的值来判断应该调用哪个子程序。当任意一个红外探测器的值大于 200 时,说明探测到了得分物体,此时就可以调用“获取得分物体”子程序;而如果两个红外探测器的值都小于 200 时,说明附近没有得分物体,那么就调用“靠右行驶”子程序。我们核心的程序思路即可如图所示,使用条件循环模块一直判断红外探测器是否检测到得分物体,如果检测到得分物体就调用“获取得分物体”子程序,否则就调用“靠右行驶”子程序。
2.程序编写
在前面的课程中,我们已经学过了子程序的编程。这里我们可以把靠右行驶与获取得分物体两个模块做成两个子程序,通过条件判断模块检查两个红外探测器是否探测到得分物体,从而决定应该调用哪个子程序模块。我们首先按照流程图将主程序编写完成,如图 5-1-5。程序的参考值如表 5-1-1 所示。
5-1-5 主程序
表 5-1-1 判断模块利用红外探测器判断是否遇见得分物体
序号 |
功能模块 |
参考值 |
1 |
判断条件为左红外探测器或右 红外探测器的值 |
大于 200 |
2 |
左红外探测器或右红外探测器 的值大于 200 |
调用获取得分物体子程序 |
3 |
左红外探测器与右红外探测器 的值都不大于 200 |
调用靠右行驶子程序 |
接下来,要编写两个子程序。首先是获取得分物体的子程序,如图 5-1-6,程序的参考值如表 5-1-2、表 5-1-3 所示。
。这里我们通过查看两个红外探测器测得值的差来判断得分物体的位置:
若左红外与右红外的差值大于 20,说明左红外与得分物体的距离远远大于右红外, 得分物体在小车左侧,于是小车应该左转;
若左红外与右红外的差值小于 20,且右红外与左红外的差值大于 20,说明右红外与得分物体的距离远远大于左红外,得分物体在小车右侧,小车右转;
若左红外与右红外的差值小于 20,且右红外与左红外的差值小于 20,说明左右红外到得分物体的距离差不多,推断得分物体就在小车正前方,于是小车应该直走。
表 5-1-2 第一个判断模块利用红外探测器判断得分物体是否在左前方
序号 |
功能模块 |
参考值 |
1 |
判断条件为左红外探测器与右 红外探测器测得值的差 |
大于 20 |
2 |
差值大于 20 |
机器人小车左转 |
3 |
差值小于 20 |
进入下一个判断模块 |
表 5-1-3 第二个判断模块利用红外探测器判断得分物体是否在右前方
序号 |
功能模块 |
参考值 |
1 |
判断条件为右红外探测器与左红外探测器测得值的差 |
大于 20 |
2 |
差值大于 20 |
机器人小车右转 |
3 |
差值小于 20 |
机器人小车笔直前进 |
接下来,我们还有一个靠右行驶的子程序。其实我们在第三章第一节中已经学过如何利用两个障碍传感器来实现小车的靠边行驶,只是当时我们还多了一个用来检测前方障碍的障碍传感器。那么,这里的靠右行驶子程序,只需要去掉第三个多余的传感器,其余的可以参考之前的程序。
最后将程序以“机器人_汽车总动员_5_1”为文件名进行保存。
(三)进入仿真
接下来,我们进入最后的仿真阶段,打开任务场景、机器人与程序后,进入仿真界面, 同学们就可以验收刚刚的成果了。仿真的过程中,你们可能会发现,小车并不能将路上出现的得分物体全部获取。那是因为红外探测器的探测范围是有限制的,小车并不能探测到道路上的所有范围。如果得分物体恰好处于红外探测器的探测范围之外,那么小车在前进过程中很容易遗漏这个得分物体。同学们完成任务后,若有多余的时间,可以对这个问题展开深入的探究,想想怎么修改机器人结构或者是修改机器人的控制程序,才能获得全部的得分物体。
四、课后提升
1.尝试在现有机器人的基础上进行改进,使得机器人可以探测到道路范围内任意位置的得分物体。(比如,增加两个红外探测器的距离,增加一个红外探测器,等。)
2.这里的得分物体会不断发射红外线,所以我们可以用红外探测器检测到。如果现在得分物体不会发射红外线了,只是一个形状大小相同的蓝色得分物体,想想应该用什么办法使小车能够获取得分物体。
<< 上一篇
下一篇 >>
网友留言(0 条)