【中学生创客.虚拟机器人】3.4胜利在望
第四节 胜利在望
机器人绕过了狭长的盘山小路,来到了宝物所在的一个平台上。宝物就在机器人的正前方,闪着璀璨的光芒,似乎在对你说,快来取我吧!别急,要拿到宝物还有最后一关。
一、任务初探
如图 3-4-1 所示,宝物被三个大小不同的正方形包围着,这三个正方形的中心点是同一个地方,也是宝物的所在位置。但是这个中心点的位置是不固定的,每次开始仿真时随机出现,但保证是在机器人起始位置的正前方。宝物看得到,却摸不着,机器人可以穿过宝物而不被挡住,也没办法用障碍传感器检测到宝物。
任务要求机器人从起始点出发,沿着起始方向直行,在进入宝物所在位置时,停止三秒钟,任务则宣告完成。
同学们,在这种情况下,我们还能不能用时间控制法来拿到宝物呢。
图 3-4-1 任务场景图
二、知识汲取
(一)变量
1.变量的值在程序运行时可以有所变化,可以根据需要多次赋值。变量在使用之前需要声明。在该图形化编程语言中,变量可分为四种类型,分别是“int 整型”、“float 浮点型”、“string 字符串”、“bool 逻辑”。图 3-4-2 为“int 整型”变量声明图标。
2.变量根据作用范围,可分为全局变量和局部变量。全局变量可以在整个程序中被访问调用修改。局部变量只能在定义它的程序段里被访问调用修改。在同个作用域中不能使用相同的变量名。每个变量声明容器可以声明四个变量,如果超过四个,则可以用多个变量声明容器。图 3-4-3 为全局变量声明容器。
3.变量可以在程序中被赋值。赋值时,值的类型应与该变量声明时的数据类型一致, 或者是可以相互转化的数据类型。赋值时,既可以是一个具体的数值,也可以是一个表达式。 如果一个变量声明为 int 整型变量,则赋予它的值也需要是一个 int 整型数值。
4.变量可以在它的作用域中被引用。如果要引用变量,那就需要有一个引用变量图标。
三、实践验证
(一)任务分析
因为每次仿真运行时机器人与宝物的距离是不定的,所以该任务不能用最简单的时间控制法,而且宝物无法用红外障碍传感器检测到。但是包围宝物的三个正方形的边框色为红色, 且有一定的宽度,那我们可以用灰度传感器检测红色边框线,当检测到第三根线时,即进入最小的正方形内,也就到达了宝物的位置。
(二)搭建机器人
进入搭建机器人平台,我们可以先打开上节课中搭建好的机器人。给该机器人前部添加一个灰度传感器。搭建方法不再累述,灰度端口号设为 31,参考图如图 3-4-6 所示。另存该机器人名称为“机器人_魔幻寻宝_3_4”。
(三)设计程序
1.任务动作分析并绘制流程图
机器人在出发后就要检测经过红色边框线的次数,如果少于三次,那么就要检测是否遇到红色边框线,每遇到一次就给次数加 1,并且要保证机器人经过一条红色边框线只加一次。否则机器人直行。如果机器人经过红色边框线的次数为 3 次,则机器人停止前进,任务结束。
2.程序编写
在离线主界面中点击【编写程序】进入程序编辑窗口,单击【新建】按钮新建程序,选择机器人为“机器人_魔幻寻宝_3_4”。
编写程序时,要先测出灰度传感器在红色边框线的值。为了方便起见,在规则中限定除红色边框线外的所有地方的灰度值都为 0,因此,可以取红色边框值的一半来作为判断值。程序主要由一个条件循环模块和条件判断模块组成,如图 3-4-8 所示。程序的参考值如表
表 3-4-1 条件循环模块利用变量判断前方到达宝物所在位置
序号 |
功能模块 |
参考值 |
1 |
循环条件为判断穿过红色边框 的次数 |
次数小于 3 |
2 |
次数小于 3 |
进入条件判断模块 |
3 |
次数不小于 3 |
直流电机停止并延时 3 秒 |
表 3-4-1 条件判断模块利用灰度传感器判断穿过红色边框线次数
序号 |
功能模块 |
参考值 |
1 |
判断条件为灰度传感器是否检 测到红色边框 |
灰度大于 20 |
2 |
如果检测到红色边框线 |
次数加 1,并且让直流电机前进一点,保证 机器人越过该条红色边框线((具体值请自行调试) |
3 |
没有检测到红色边框线 |
直流电机前进(具体值请自行调试) |
(四)进入仿真
单击【开始仿真】并选择【新建仿真】,并以此选择任务、机器人、程序,并输入仿真包文件名,最后单击【保存进入】按钮进入到仿真界面。
如果机器人穿过宝物后不停下来,任务可是算失败的哦。当然,机器人只要数对了边框线,经过努力,一定能完成任务。
四、课后提升
在前面的练习中,我们使用了“while 循环”模块。如果事先知道循环次数的情况下, 我们也可以使用“for 次数循环”模块。请同学们自己研究一下“for 次数循环”模块,修改程序,看是否能成功的完成任务。<< 上一篇
下一篇 >>
网友留言(0 条)