【中学生创客.虚拟机器人】3.3盘山小路
第三节 盘山小路
机器人惊险的穿过了悬浮桥,现在它来到了一个丁字形路口,从图 3-3-1 上分析,往右转,是一条断头路;往左转,是一条盘山小路。小路环绕着山体向上,宝藏就在一定高度的山上等着我们呢。那我们是要左转还是右转呢?那当然是左转上山咯。
图 3-3-1
一、任务初探
机器人过了悬浮桥后,初始朝向就不是很确定了。有时候朝向左边,有时候朝向右边, 还有时候大致朝着中间。机器人的朝向是随机出现的,并且在我们运行仿真前,我们也不知道机器人的初始朝向。而且,在运行仿真复位时,机器人的初始朝向也会随机变化,如图3-3-2 所示:
图 3-3-2
这个任务要求机器人从起始点出发,到达丁字路口时,要左转进入盘山小道。盘山小道非常狭窄,一边是高大的山体,一边是光滑的护栏。机器人在上山的过程中,会在某个地方出现一个提示,告诉我们宝藏的海拔高度,这个海拔高度是固定的,但是在第一次运行虚拟仿真前,我们并不知道这个高度值。机器人在上山过程中,当达到这个海拔高度时,机器人就要停下来。
同学们,那我们有什么办法,不管它的初始朝向是怎么样的,都能让机器人转向左边路口呢?
二、知识汲取
(一)指南针传感器
指南针传感器用来获取方向,它上面有一个“N”(北方) 的标志,返回值为该标志与场景的正北(+Z 轴)方向的夹角, 返回值为 0~359 度,精度为 1 度。使用是需要水平安装,且指
针面朝上,否则可能无法正常工作。外形图如图 3-3-3 所示。
图 3-3-3 指南针传感器
(二)海拔高度计
海拔高度计返回传感器相对海平面的垂直距离,返回值为整形。仿真场景的海平面是 Y 轴坐标为 0 的 XZ 平面,海拔高度计的位置高于海平面时返回正值,低于海平面时返回负值。外形图如图 3-3-4 所示。
图 3-3-4 海拔高度计
三、实践验证
(一)任务分析
因为机器人的初始方向不确定,所以机器人在到达丁字路口时,我们也不知道机器人要转多少角度,这样用时间法来转到左边路口就变得不可行了。但是,我们可以先想办法,让机器人在一开始运行后,就转到一个固定的角度。这就要请出指南针传感器了。任务中设定, 机器人的正前方方向为 90 度,左边正方向为 0 度,右边正方向为 180 度。所以,当机器人
的朝向小于 90 度时,我们让机器人右转,一直转到朝向 90 度;当机器人的朝向大于 90 度
时,我们让机器人左转,一直转到朝向 90 度。但这里有个问题,机器人在刚转到 90 度值时, 理论上机器人应该停止转动,但在实际情况时,机器人在转动时会有惯性,它很难精确在
90 度方向停止,很有可能大于或小于 90 度。这样,机器人可能会一直在调整方向。所以我们可以设置一个 80~100 度的缓冲区,只要机器人的朝向转到这个区间,机器人的方向就算调整好了。因为机器人的起始点与丁字路口的距离很短,所以这点角度误差还是可以接受的。
机器人的起始点与丁字路口的距离很短,虽然我们可以给机器人前面装一个障碍传感器,让它检测正前方的山体后再开始转下左边路口,但这样显得小题大做了。我们可以用最简单的时间法,让机器人走到丁字路口,再左转一定的时间,让机器人转向左边路口。
进入左边路口后,机器人就要上山了。宝藏的海拔高度一开始并不知道,所以我们还需要先写个程序让机器人上山,我们可以实现设置一个临时高度值,在机器人上山的过程中, 出现宝藏的海拔高度提示值后再结束仿真运行,编辑程序,把得到的值写入程序中。
机器人该如何上山呢?在前面机器人走迷宫的课中,我们学习了利用障碍传感器沿着墙壁走的方法。在这里,上山的路非常狭窄,只比机器人本身宽一点点,如果利用障碍传感器沿着墙壁走的方法,程序会很难调试,即使能前进,速度可能也会非常慢。那干脆我们抛掉障碍传感器,给机器人的左右两边装上导轮,机器人就一个劲的向前冲吧。
(二)搭建机器人
进入搭建机器人平台,我们还是可以先从模版里拖出一个初始机器人,初始机器人包括了基本的主机和马达。
安装指南针传感器和测量海拔高度。我们需要海拔高度计。这两种传感器都在传感器面板中,安装的时候要注意,把指南针上的 N 标志跟机器人主机的默认正前方保持一致。端口设置为 32。海拔高度计可以安装在机器人的后半部分,端口设置为 33。
导轮的作用就是保证当机器人前部撞到墙时,机器人不会卡死,而是在电机的作用力下,可以继续贴着墙壁前行。所以导轮可以选择直径小一点、摩擦力小一点的轮子,我们这里选择直径为 3,厚度为 1 的轮子。如图 3-3-6 所示。轮子需要用电机固定,但此电机仅仅用来固
定轮子,并充当转轴。所以,电机并不需要给它连上任何接口。电机如图 3-3-7 所示。我们
还需要给机器人添加一些安装块,用来固定电机。安装参考图如图 3-3-8 所示:
图 3-3-8 安装参考图
2.检查一下四个马达的端口号,确认左边马达端口为 1 号和 2 号,设置为“反转电机”,
右边马达端口号为 3 号和 4 号。另存该机器人名称为“机器人_魔幻寻宝_3_3”。
(三)设计程序
1.任务动作分析并绘制流程图
机器人在出发时,我们就要调整机器人的角度,让机器人调整到 80 至 100 度的区间内。
当机器人初始朝向小于 80 度角时,让机器人左转,直到大于或等于 80 度角;当机器人
初始朝向大于 100 度角时,让机器人右转,直到小于或等于 100 度角。再接下去让机器人直行到路口,左转。后面的两个动作我们都用延时法,可能要经过几次调试,才能完成的比较好。这段流程图如图 3-3-9 所示。
图 3-3-9 调整角度
转向左边路口后,机器人就要开始沿着盘山小路往上冲了,这里,我们主要是要判断机器人是否到达指定的海拔高度了,到达这个高度就要停止往前。流程图如图3-3-10 所示。
只是这个指定的海拔高度需要机器人运行仿真后才可以知道,所以我们可以先用某个大一点的海拔高度值代替,等知道具体值后再修改程序。
图 3-3-10 检测海拔高度计
2.程序编写
在离线主界面中点击【编写程序】进入程序编辑窗口,单击【新建】按钮新建程序,选择机器人为“机器人_魔幻寻宝_3_3”。
机器人刚运行时调整方向程序可分成两个判断区域,如图 3-3-11 所示。程序的参考值
如表 3-3-1 所示。
图 3-3-11 调整方向
表 3-3-1 第一个判断模块利用“指南针传感器”判断方向是否小于 80 度
序号 |
功能模块 |
参考值 |
1 |
判断条件为指南针传感器 |
32 端口,值小于 80 |
2 |
当值为小于 80 时 |
直流电机向右偏转运行(具体值请自行调试) |
3 |
当值为大于 80 时 |
进入第二个判断模块 |
表 3-3-1 第二个判断模块利用“指南针传感器”判断方向是否大于 100 度
序号 |
功能模块 |
参考值 |
1 |
判断条件为指南针传感器 |
32 端口,值大于 100 |
2 |
当值为大于 100 时 |
直流电机向左偏转运行(具体值请自行调试) |
3 |
当值小于 100 时 |
跳出循环,方向调整完毕 |
机器人调整方向后直行一小段时间,再左转差不多 90 度左右,都用时间法即可。
机器人在盘山小道上前进的程序可参考如下图:程序比较简单, 只是一开始海拔的值要用个大点的数值代替, 待运行过程中出现宝藏
图 3-3-12 机器人爬山
的高度提示后再返回程序修改即可。程序可参考图 3-3-12。
最后将程序以“机器人_魔幻寻宝_3_3”为文件名保存起来。
(四)进入仿真
单击【开始仿真】并选择【新建仿真】,并以此选择任务、机器人、程序,并输入仿真包文件名,以便下次可以快速的打开这个项目,最后单击【保存进入】按钮进入到仿真界面。
机器人在冲上一段距离后,就出现了宝藏的海拔高度提示,停止仿真运行并修改程序即可。不过假如你到了指定的海拔高度还继续往前冲的话,任务可是算失败的哦。
四、课后提升
1.在调整机器人初始朝向时,同学们可以尝试缩小调整的角度区间,看自己最多能缩小到多小的区间。
2.大家可以试着调整机器人上山的速度,看机器人可以用多少的速度绕着盘山小道到达指定海拔高度的位置。
<< 上一篇
下一篇 >>
网友留言(0 条)