李强
● 野外生存赛项概述
野外生存自2012年开始成为NOC活动赛项,参加人数逐年增加。2014年参加人数更是达到了180人,占参加决赛学生人数的五分之一。其算法难度更是对参赛学生的极大考验,不但要求学生在两个小时内完成机器人搭建、程序编写、完成仿真任务,更是要求师生发挥集体智慧在赛前做好各种应变。每次正式比赛中会存在一些变化的元素,但变化只有进入赛场才被告知,这使得整个比赛充满着不确定性,学生的实力可以充分得到验证:对算法一定是深刻理解并掌握,死板照抄根本不可行。正是这样的变化可能,要求师生在赛前对算法的通用性及易用性做较为深入的研究和准备。回顾三年来成绩较为突出的队伍,无一不是学生参与研究过程,甚至学生远超过教师的现象也时有发生。这一现象无疑是非常喜人的。比较突出的事例是:第一季时,淄博一对父子为了不泄露其真实的算法设计,连续一周内疯狂研究,最终探索出另外一套算法,并以全市第四的成绩拿到全国出线权。当其把真实算法思路公布于众时,我有种惊为天人的感觉。
● 野外生存赛项思路算法分析
三年来,野外生存的场景任务年年推陈出新,难度年年增加,任务特色鲜明、趋近现实。现在,我们以探索水源为例,分析其思路算法。
1.竞赛目标
基于虚拟的野外生存网络环境,参赛选手通过编程来智能操控机器人完成各种生存挑战,考核选手对编程语言理论知识的掌握与应用能力,既培训选手对机器人知识的学习兴趣,又促进了其对野外生存技巧的了解,以及在复杂环境下快速的判断能力、理性的冒险精神。
2.竞赛任务
机器人由起始区出发,经不同路线寻找到水源,任务成功完成。
3.变化的元素
(1)机器人起始区的位置和朝向可能会发生变化(起始区出发的两条线路中反向延长某一条作为出发区)。
(2)机器人行进路线上标志块的位置可能发生变化(红色标志块不一定就在护栏部分的入口和出口)。
(3)机器人行进路线上可能会增设一些障碍(增设类似石头类的障碍,干扰机器人正常行走)。
(4)三类路线的形状可能会发生变化(可能会变成S型或者急转弯类型的路线)。
4.基本算法思路
(1)如图1所示,当机器人行进至1位置时,打开套索滑下,然后进入水潭。滑绳索路线的算法思路是走最简单的路,拿最多的分。其中,蓝色区域可以被灰度传感器检测到,当检测到达蓝色区域时,机器人直流电机停止,伺服电机打开滑索。当滑索扣紧时,机器人重心升高离地,依靠重力滑下绳索,直接越过下方断桥,同时获取周边得分物。当海拔高度差小于高度差或计时大于4秒时(车身晃动,防止海拔高度误测过早掉落),伺服电机回收,机器人自然掉落地面,直达水源。
(2)过木板桥路线的算法思路是把木板推倒搭桥。
①利用指南针传感器在起点处左转至270度(代码略)。
②利用左手法则,使机器人一直沿左侧墙壁行走的代码如下所示。
public static void zuoshou () //定义左手法则算法
{
if ((GetObst(32) == 1)) // GetObst(32)为障碍传感器_左近
{
youchasu(); //向右 差速转弯
}
else
{
if ((GetObst(33) == 0)) //GetObst(33)为障碍传感器_左远
{
ZuoChaSu(); //向左 差速转弯
}
else
{
ZhiHang(); //直行
}
}
}
③for循环3次走完3个红色块。
while ((GetGray(34) != 76)) 和 while ((GetGray(34) == 76))
//利用不等于走到红色块处,利用等于走出红色区域
④慢速延时推木板搭桥。
sd = 7; //定义直流电机速度为7
ZhiHang(); //直行
Sleep(500); //延时500ms
StopAllMotor();//停止所有电机动作
(3)过悬空桥路线的算法思路是绕山体跑,至悬空桥处,模拟火车轨道自动变向。
①沿用过木板桥算法直至悬空桥处。
②悬空桥过法:一是依靠程序,二是模拟火车轨道自动变向。
当我第一次把模拟火车轨道自动变向的思路提出来后,得到了热烈的反响,从实际使用来看,效果非常好。
③路线虽然增长了,但算法结构并没有增加很多,同时可以得到更多的加分。
5.综合思路
(1)木板桥处,利用伸杆横扫所有得分。
算法的难点是:
①伸杆什么时候展开?
②以怎样的角度展开?
③如何展开?(不能影响机器人正常的行进)
解决办法是:
A.伸杆的展开以最近红色区域为定位基准(如图2)。
不管机器人什么时候到达,只要知道机器人什么时候离开。
while ((GetGray(34) == 76)) //当机器人离开红色区域时,退出循环。
从机器人离开红色区域时,便开始计时算法。算法设计可以设计为计时控制(但由于机器人下坡时并不稳定,所以计时控制并不能较好地把握时机)。更好的办法是采用“海拔高度传感器+指南针传感器”双控制。海拔高度传感器可以精确探测是否已经下坡,而根据环绕山体跑的电机设置,指南针传感器可以准确定位其位置。在极坐标点(r,θ)时,r的值可以被电机的定值速度差唯一设定,而θ角由指南针传感器测得。
B.展开的角度采用渐进叉形栅格慢速展开,类似于日常生活中的叉型拉闸门。需要注意的是,每个顶点伺服电机正负展开,一侧正向则其顶端另一侧为反向。
C.展开的方式是先给速度差固定的电机设置,然后给固定时间的伺服电机设置。在伸杆打开的这段时间内,机器人按照一定的转弯半径做绕山体转动,转动时间由伺服电机打开的时间决定。
(2)木板桥处,利用伸杆推倒木板桥竖向横扫所有得分。此处皆为伺服电机的动作设计,故略。
(3)悬空桥处,机器人前行过程中伸展手臂做运动的分(如图3)。
● 综述
在该任务场景中,共有三条基本路线,五个“较难得分物”,总分455分。多任务性、多选择性所带来的抉择不同,必然导致最后得分的不同。走一条路线的同时能否获得其他路线的物品?怎么走才能获得更多的任务物品?吊桥可以过去也可以不过去,如何设计?多任务性和多选择性的任务场景设计,要求教师和学生们的思路必须一再突破,机器人行走路线的选择趋向同时完成多个任务。在完成了一条路线得分的同时,又完成了第二条路线的得分,但是能不能再同时获取第三条路线的得分?即便是拿到了三条路线的任务物品,能不能将所有的得分物都拿到?这就是多任务、多选择性的野外生存的魅力!多任务、多选择性场景任务原则的确立,使其在整整一年的比赛准备期间都充满着竞争,分数一再刷新、不断刷新。野外生存成为NOC活动中竞争最激烈的项目,究其原因就在于此。endprint