李強(qiáng)
● 野外生存賽項(xiàng)概述
野外生存自2012年開(kāi)始成為NOC活動(dòng)賽項(xiàng),參加人數(shù)逐年增加。2014年參加人數(shù)更是達(dá)到了180人,占參加決賽學(xué)生人數(shù)的五分之一。其算法難度更是對(duì)參賽學(xué)生的極大考驗(yàn),不但要求學(xué)生在兩個(gè)小時(shí)內(nèi)完成機(jī)器人搭建、程序編寫(xiě)、完成仿真任務(wù),更是要求師生發(fā)揮集體智慧在賽前做好各種應(yīng)變。每次正式比賽中會(huì)存在一些變化的元素,但變化只有進(jìn)入賽場(chǎng)才被告知,這使得整個(gè)比賽充滿著不確定性,學(xué)生的實(shí)力可以充分得到驗(yàn)證:對(duì)算法一定是深刻理解并掌握,死板照抄根本不可行。正是這樣的變化可能,要求師生在賽前對(duì)算法的通用性及易用性做較為深入的研究和準(zhǔn)備?;仡櫲陙?lái)成績(jī)較為突出的隊(duì)伍,無(wú)一不是學(xué)生參與研究過(guò)程,甚至學(xué)生遠(yuǎn)超過(guò)教師的現(xiàn)象也時(shí)有發(fā)生。這一現(xiàn)象無(wú)疑是非常喜人的。比較突出的事例是:第一季時(shí),淄博一對(duì)父子為了不泄露其真實(shí)的算法設(shè)計(jì),連續(xù)一周內(nèi)瘋狂研究,最終探索出另外一套算法,并以全市第四的成績(jī)拿到全國(guó)出線權(quán)。當(dāng)其把真實(shí)算法思路公布于眾時(shí),我有種驚為天人的感覺(jué)。
● 野外生存賽項(xiàng)思路算法分析
三年來(lái),野外生存的場(chǎng)景任務(wù)年年推陳出新,難度年年增加,任務(wù)特色鮮明、趨近現(xiàn)實(shí)?,F(xiàn)在,我們以探索水源為例,分析其思路算法。
1.競(jìng)賽目標(biāo)
基于虛擬的野外生存網(wǎng)絡(luò)環(huán)境,參賽選手通過(guò)編程來(lái)智能操控機(jī)器人完成各種生存挑戰(zhàn),考核選手對(duì)編程語(yǔ)言理論知識(shí)的掌握與應(yīng)用能力,既培訓(xùn)選手對(duì)機(jī)器人知識(shí)的學(xué)習(xí)興趣,又促進(jìn)了其對(duì)野外生存技巧的了解,以及在復(fù)雜環(huán)境下快速的判斷能力、理性的冒險(xiǎn)精神。
2.競(jìng)賽任務(wù)
機(jī)器人由起始區(qū)出發(fā),經(jīng)不同路線尋找到水源,任務(wù)成功完成。
3.變化的元素
(1)機(jī)器人起始區(qū)的位置和朝向可能會(huì)發(fā)生變化(起始區(qū)出發(fā)的兩條線路中反向延長(zhǎng)某一條作為出發(fā)區(qū))。
(2)機(jī)器人行進(jìn)路線上標(biāo)志塊的位置可能發(fā)生變化(紅色標(biāo)志塊不一定就在護(hù)欄部分的入口和出口)。
(3)機(jī)器人行進(jìn)路線上可能會(huì)增設(shè)一些障礙(增設(shè)類似石頭類的障礙,干擾機(jī)器人正常行走)。
(4)三類路線的形狀可能會(huì)發(fā)生變化(可能會(huì)變成S型或者急轉(zhuǎn)彎類型的路線)。
4.基本算法思路
(1)如圖1所示,當(dāng)機(jī)器人行進(jìn)至1位置時(shí),打開(kāi)套索滑下,然后進(jìn)入水潭?;K索路線的算法思路是走最簡(jiǎn)單的路,拿最多的分。其中,藍(lán)色區(qū)域可以被灰度傳感器檢測(cè)到,當(dāng)檢測(cè)到達(dá)藍(lán)色區(qū)域時(shí),機(jī)器人直流電機(jī)停止,伺服電機(jī)打開(kāi)滑索。當(dāng)滑索扣緊時(shí),機(jī)器人重心升高離地,依靠重力滑下繩索,直接越過(guò)下方斷橋,同時(shí)獲取周邊得分物。當(dāng)海拔高度差小于高度差或計(jì)時(shí)大于4秒時(shí)(車身晃動(dòng),防止海拔高度誤測(cè)過(guò)早掉落),伺服電機(jī)回收,機(jī)器人自然掉落地面,直達(dá)水源。
(2)過(guò)木板橋路線的算法思路是把木板推倒搭橋。
①利用指南針傳感器在起點(diǎn)處左轉(zhuǎn)至270度(代碼略)。
②利用左手法則,使機(jī)器人一直沿左側(cè)墻壁行走的代碼如下所示。
public static void zuoshou () //定義左手法則算法
{
if ((GetObst(32) == 1)) // GetObst(32)為障礙傳感器_左近
{
youchasu(); //向右 差速轉(zhuǎn)彎
}
else
{
if ((GetObst(33) == 0)) //GetObst(33)為障礙傳感器_左遠(yuǎn)
{
ZuoChaSu(); //向左 差速轉(zhuǎn)彎
}
else
{
ZhiHang(); //直行
}
}
}
③for循環(huán)3次走完3個(gè)紅色塊。
while ((GetGray(34) != 76)) 和 while ((GetGray(34) == 76))
//利用不等于走到紅色塊處,利用等于走出紅色區(qū)域
④慢速延時(shí)推木板搭橋。
sd = 7; //定義直流電機(jī)速度為7
ZhiHang(); //直行
Sleep(500); //延時(shí)500ms
StopAllMotor();//停止所有電機(jī)動(dòng)作
(3)過(guò)懸空橋路線的算法思路是繞山體跑,至懸空橋處,模擬火車軌道自動(dòng)變向。
①沿用過(guò)木板橋算法直至懸空橋處。
②懸空橋過(guò)法:一是依靠程序,二是模擬火車軌道自動(dòng)變向。
當(dāng)我第一次把模擬火車軌道自動(dòng)變向的思路提出來(lái)后,得到了熱烈的反響,從實(shí)際使用來(lái)看,效果非常好。
③路線雖然增長(zhǎng)了,但算法結(jié)構(gòu)并沒(méi)有增加很多,同時(shí)可以得到更多的加分。
5.綜合思路
(1)木板橋處,利用伸桿橫掃所有得分。
算法的難點(diǎn)是:
①伸桿什么時(shí)候展開(kāi)?
②以怎樣的角度展開(kāi)?
③如何展開(kāi)?(不能影響機(jī)器人正常的行進(jìn))
解決辦法是:
A.伸桿的展開(kāi)以最近紅色區(qū)域?yàn)槎ㄎ换鶞?zhǔn)(如圖2)。
不管機(jī)器人什么時(shí)候到達(dá),只要知道機(jī)器人什么時(shí)候離開(kāi)。
while ((GetGray(34) == 76)) //當(dāng)機(jī)器人離開(kāi)紅色區(qū)域時(shí),退出循環(huán)。
從機(jī)器人離開(kāi)紅色區(qū)域時(shí),便開(kāi)始計(jì)時(shí)算法。算法設(shè)計(jì)可以設(shè)計(jì)為計(jì)時(shí)控制(但由于機(jī)器人下坡時(shí)并不穩(wěn)定,所以計(jì)時(shí)控制并不能較好地把握時(shí)機(jī))。更好的辦法是采用“海拔高度傳感器+指南針傳感器”雙控制。海拔高度傳感器可以精確探測(cè)是否已經(jīng)下坡,而根據(jù)環(huán)繞山體跑的電機(jī)設(shè)置,指南針傳感器可以準(zhǔn)確定位其位置。在極坐標(biāo)點(diǎn)(r,θ)時(shí),r的值可以被電機(jī)的定值速度差唯一設(shè)定,而θ角由指南針傳感器測(cè)得。
B.展開(kāi)的角度采用漸進(jìn)叉形柵格慢速展開(kāi),類似于日常生活中的叉型拉閘門。需要注意的是,每個(gè)頂點(diǎn)伺服電機(jī)正負(fù)展開(kāi),一側(cè)正向則其頂端另一側(cè)為反向。
C.展開(kāi)的方式是先給速度差固定的電機(jī)設(shè)置,然后給固定時(shí)間的伺服電機(jī)設(shè)置。在伸桿打開(kāi)的這段時(shí)間內(nèi),機(jī)器人按照一定的轉(zhuǎn)彎半徑做繞山體轉(zhuǎn)動(dòng),轉(zhuǎn)動(dòng)時(shí)間由伺服電機(jī)打開(kāi)的時(shí)間決定。
(2)木板橋處,利用伸桿推倒木板橋豎向橫掃所有得分。此處皆為伺服電機(jī)的動(dòng)作設(shè)計(jì),故略。
(3)懸空橋處,機(jī)器人前行過(guò)程中伸展手臂做運(yùn)動(dòng)的分(如圖3)。
● 綜述
在該任務(wù)場(chǎng)景中,共有三條基本路線,五個(gè)“較難得分物”,總分455分。多任務(wù)性、多選擇性所帶來(lái)的抉擇不同,必然導(dǎo)致最后得分的不同。走一條路線的同時(shí)能否獲得其他路線的物品?怎么走才能獲得更多的任務(wù)物品?吊橋可以過(guò)去也可以不過(guò)去,如何設(shè)計(jì)?多任務(wù)性和多選擇性的任務(wù)場(chǎng)景設(shè)計(jì),要求教師和學(xué)生們的思路必須一再突破,機(jī)器人行走路線的選擇趨向同時(shí)完成多個(gè)任務(wù)。在完成了一條路線得分的同時(shí),又完成了第二條路線的得分,但是能不能再同時(shí)獲取第三條路線的得分?即便是拿到了三條路線的任務(wù)物品,能不能將所有的得分物都拿到?這就是多任務(wù)、多選擇性的野外生存的魅力!多任務(wù)、多選擇性場(chǎng)景任務(wù)原則的確立,使其在整整一年的比賽準(zhǔn)備期間都充滿著競(jìng)爭(zhēng),分?jǐn)?shù)一再刷新、不斷刷新。野外生存成為NOC活動(dòng)中競(jìng)爭(zhēng)最激烈的項(xiàng)目,究其原因就在于此。endprint