APP下载

双感光探头实现复杂路况巡线的程序实例探究

2019-09-10傅文昊张悦

高考·下 2019年2期
关键词:程序设计

傅文昊 张悦

摘 要:在高中创新活动中,为完成机器人复杂路线寻迹,通常使用三个或以上多感光探头。我们在仅有两个探头的情况下,通过巧妙的程序设计,完成了复杂路线循迹,并就出现的多個复杂路况问题进行了针对性算法设计,做到了创新。

关键词:高中创新;机器人巡线;复杂路线;双感光探头;程序设计

一、问题背景

在2018年暑假举行的宁港台三地青少年科技交流活动中,举行了一次科创机器人大赛,内容为自主设计机器人巡线,并在自制编钟上敲奏一首乐曲。其中机器人巡线问题较为复杂。本次图纸为定量+变量1+变量2。定量、变量1、变量2实物分别为三张独立的写真纸,根据抽签结果,临时将两个变量摆放于定量底图的写真纸上,变量1将在定量的A、B场地随机出现,变量2则在定量的C、D场地随机出现。起点位于图的最右侧一条竖线中点右侧,终点位于图的最左侧一条横线中点。

大赛要求机器人尺寸不超过50CM立方,我们小组制作的机器人实际尺寸约为30CM立方。

通常,在出现这种复杂路线图的情况下,会用3个或3个以上感光探头进行同时检测,通过调整各个感光探头之间的距离,将所有不同的岔道口的特征都覆盖到,然后根据不同的特征对机器人发出指令。然而,我校的机器人小组只有两个感光探头,只能通过程序设计来实现。

在实验中,我们以如图所示的其中一种,变量1出现在D场地,变量2出现在A场合,对此进行分析。

二、关于程序的初步设想

思路如下:主探头GrayA负责引路,副探头GrayB检测是否为岔路口;同时加入计次变量Ci,GrayB每检测到一次黑线,则认为经过一个岔路口,同时Ci+1;预估所经过的每一个岔路口的情况,根据Ci的数值,以一定角度转弯。最终到达终点。根据地图,预计期间一共经过8个岔路口,下文分别用岔路1-岔路8来表示。

第一次伪代码算法如下:

Ci=0

循环,时间间隔0.2秒

IfCi=8then向后1圈,停止所有电机

else

GrayA=True,跟随该轨迹走

IfGaryB=TrueThenCi=Ci+1

IfCi=2then右拐90度

IfCi=3then左拐225度

IfCi=4then左拐45度

IfCi=5then右拐45度

IfCi=6then右拐135度

IfCi=7then左拐90度

Endif

三、程序烧录被机器人执行后产生的问题与解决过程

理论上完全可行的程序在烧录后出现了数个问题,经过大家的讨论,我们将其现象与解决过程例如入如下:

问题1现象:在岔路3处,发生转弯动作完成后,严重偏离主路线。

原因探究:我们发现,由于机器人转弯半径较大,在现有程序指令下,无法避免偏离问题。

问题解决:将GrayB在岔路3处第一次探测到的黑线(对角线)抛弃,继续前行,在该处探测到的第二次黑线(上边线)记录为有效数值,指示左转弯,这样就较好地解决了上述问题。

程序实现:GrayB第一次探测到的黑线记录为Ci=N,无指令;

ifCi=N+1,then左拐225度

问题2现象:Ci变量在某些岔路口写入的数值与预期不符(GrayB探测判断的实际岔路超过预期数量),例如,第一次在经过岔路2之后,我们预期Ci=2,但是实际上Ci=3。

原因探究:在达到岔路2时,GrayB扫过一根竖线,Ci=2,转弯;较大的身躯在转动时,GrayB又扫到一根横线,记录为Ci=3,因此,虽然只经过一个岔路口,但是GrayB实际经过两根黑线。值得提出的是,后来我们在实验过程中发现,在转弯动作发生过程中GrayB探测到的黑线不被记录到Ci中。

问题解决:我们通过调整GrayB与GrayA的距离解决了这个问题,缩短距离,使得GrayB的第二次探测黑线被抛弃。

程序实现:程序不变。

问题3现象:行程的后半段遭遇了最难解决的问题。非常意外的,每次在到达岔路5时,机器人就出现了动作紊乱。

原因探究:我们设置了Ci变量在机器人的小显示屏上实时输出。观察发现,每次到达岔路5时,Ci的值瞬间增加,进退间,Ci变化记录的数值与预期严重不符(GrayB探测判断的实际岔路远远超过预期数量),且数额每次都不定!变化范围检测到了13-26,导致机器人无法按照Ci的数值执行相应指令。再经过仔细研究,我们发现,问题出在了这里各条边之间的距离上。由于该路口机器人的尺寸有超出最下侧边界,且这个路口动作大,且GrayA也在反复探测调整线路,因此GrayB会多次在该区域微动多次来回探测到黑线;且变量1图纸与定量底图的重合边界上,GrayB在扫过两张图组合的复杂岔路时,将会把它视为两种不同的黑色路径,甚至在探测过程中,因为光线的变化,而出现不同的Ci变化。

经过讨论,我们决定,在经过复杂路口之后,将Ci赋值为一个大数值,即GrayB在该路口肯定达不到的数值,掩盖掉了这个矛盾。同理,在经过岔路6时,我们遇到同样问题,同样处理。

程序实现:在经过岔路5的时候,做这样的语句调整(在经过岔路4之后,Ci=6)

IfCi=7then左拐45度,Ci=50

IfCi=51then右拐135度

四、最终算法呈现

经过多次测试之后,最终我们用如下算法实现了功能,在仅有两个感光探头的情况下,准确地完成了这个复杂线路的循迹功能。伪代码如下:

Ci=0

循环,时间间隔0.2秒

IfCi=52then向后1圈,停止所有电机

else

GrayA=True,跟随该轨迹走

IfGaryB=TrueThenCi=Ci+1

IfCi=2then右拐90度

IfCi=4then左拐225度

IfCi=5then左拐45度

IfCi=7then左拐45度,Ci=50

IfCi=51then右拐135度

Endif

五、探究心得

在这次参加宁港台青少年科创大赛的高中机器人队伍中,我们学校成立时间比较短,与南京市的几家名校相比,设备比较简陋。诚然,在设备先进的情况下,机器人的设计与制作会更简单。但是,在我们设备有限的情况下,队友们能够另辟蹊径,通过程序设计来完成一样的功能,我们觉得非常开心,这才是编程的乐趣,创新的意义。

猜你喜欢

程序设计
基于SolidWorks和VBA的电机阶梯轴建模程序设计
高职Java程序设计课程体系建设思考
基于Visual Studio Code的C语言程序设计实践教学探索
从细节入手,谈PLC程序设计技巧
基于LabVIEW的车载充电机控制程序设计
浅谈基于C语言的计算机软件程序设计
高职高专院校C语言程序设计教学改革探索
OBE理念下基于Greenfoot的Java程序设计课程教学改革
模块化程序设计在一体化检定平台中的应用
PLC梯形图程序设计技巧及应用