傅文昊 張悅
摘 要:在高中創(chuàng)新活動(dòng)中,為完成機(jī)器人復(fù)雜路線尋跡,通常使用三個(gè)或以上多感光探頭。我們?cè)趦H有兩個(gè)探頭的情況下,通過巧妙的程序設(shè)計(jì),完成了復(fù)雜路線循跡,并就出現(xiàn)的多個(gè)復(fù)雜路況問題進(jìn)行了針對(duì)性算法設(shè)計(jì),做到了創(chuàng)新。
關(guān)鍵詞:高中創(chuàng)新;機(jī)器人巡線;復(fù)雜路線;雙感光探頭;程序設(shè)計(jì)
一、問題背景
在2018年暑假舉行的寧港臺(tái)三地青少年科技交流活動(dòng)中,舉行了一次科創(chuàng)機(jī)器人大賽,內(nèi)容為自主設(shè)計(jì)機(jī)器人巡線,并在自制編鐘上敲奏一首樂曲。其中機(jī)器人巡線問題較為復(fù)雜。本次圖紙為定量+變量1+變量2。定量、變量1、變量2實(shí)物分別為三張獨(dú)立的寫真紙,根據(jù)抽簽結(jié)果,臨時(shí)將兩個(gè)變量擺放于定量底圖的寫真紙上,變量1將在定量的A、B場(chǎng)地隨機(jī)出現(xiàn),變量2則在定量的C、D場(chǎng)地隨機(jī)出現(xiàn)。起點(diǎn)位于圖的最右側(cè)一條豎線中點(diǎn)右側(cè),終點(diǎn)位于圖的最左側(cè)一條橫線中點(diǎn)。
大賽要求機(jī)器人尺寸不超過50CM立方,我們小組制作的機(jī)器人實(shí)際尺寸約為30CM立方。
通常,在出現(xiàn)這種復(fù)雜路線圖的情況下,會(huì)用3個(gè)或3個(gè)以上感光探頭進(jìn)行同時(shí)檢測(cè),通過調(diào)整各個(gè)感光探頭之間的距離,將所有不同的岔道口的特征都覆蓋到,然后根據(jù)不同的特征對(duì)機(jī)器人發(fā)出指令。然而,我校的機(jī)器人小組只有兩個(gè)感光探頭,只能通過程序設(shè)計(jì)來(lái)實(shí)現(xiàn)。
在實(shí)驗(yàn)中,我們以如圖所示的其中一種,變量1出現(xiàn)在D場(chǎng)地,變量2出現(xiàn)在A場(chǎng)合,對(duì)此進(jìn)行分析。
二、關(guān)于程序的初步設(shè)想
思路如下:主探頭GrayA負(fù)責(zé)引路,副探頭GrayB檢測(cè)是否為岔路口;同時(shí)加入計(jì)次變量Ci,GrayB每檢測(cè)到一次黑線,則認(rèn)為經(jīng)過一個(gè)岔路口,同時(shí)Ci+1;預(yù)估所經(jīng)過的每一個(gè)岔路口的情況,根據(jù)Ci的數(shù)值,以一定角度轉(zhuǎn)彎。最終到達(dá)終點(diǎn)。根據(jù)地圖,預(yù)計(jì)期間一共經(jīng)過8個(gè)岔路口,下文分別用岔路1-岔路8來(lái)表示。
第一次偽代碼算法如下:
Ci=0
循環(huán),時(shí)間間隔0.2秒
IfCi=8then向后1圈,停止所有電機(jī)
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
三、程序燒錄被機(jī)器人執(zhí)行后產(chǎn)生的問題與解決過程
理論上完全可行的程序在燒錄后出現(xiàn)了數(shù)個(gè)問題,經(jīng)過大家的討論,我們將其現(xiàn)象與解決過程例如入如下:
問題1現(xiàn)象:在岔路3處,發(fā)生轉(zhuǎn)彎動(dòng)作完成后,嚴(yán)重偏離主路線。
原因探究:我們發(fā)現(xiàn),由于機(jī)器人轉(zhuǎn)彎半徑較大,在現(xiàn)有程序指令下,無(wú)法避免偏離問題。
問題解決:將GrayB在岔路3處第一次探測(cè)到的黑線(對(duì)角線)拋棄,繼續(xù)前行,在該處探測(cè)到的第二次黑線(上邊線)記錄為有效數(shù)值,指示左轉(zhuǎn)彎,這樣就較好地解決了上述問題。
程序?qū)崿F(xiàn):GrayB第一次探測(cè)到的黑線記錄為Ci=N,無(wú)指令;
ifCi=N+1,then左拐225度
問題2現(xiàn)象:Ci變量在某些岔路口寫入的數(shù)值與預(yù)期不符(GrayB探測(cè)判斷的實(shí)際岔路超過預(yù)期數(shù)量),例如,第一次在經(jīng)過岔路2之后,我們預(yù)期Ci=2,但是實(shí)際上Ci=3。
原因探究:在達(dá)到岔路2時(shí),GrayB掃過一根豎線,Ci=2,轉(zhuǎn)彎;較大的身軀在轉(zhuǎn)動(dòng)時(shí),GrayB又掃到一根橫線,記錄為Ci=3,因此,雖然只經(jīng)過一個(gè)岔路口,但是GrayB實(shí)際經(jīng)過兩根黑線。值得提出的是,后來(lái)我們?cè)趯?shí)驗(yàn)過程中發(fā)現(xiàn),在轉(zhuǎn)彎動(dòng)作發(fā)生過程中GrayB探測(cè)到的黑線不被記錄到Ci中。
問題解決:我們通過調(diào)整GrayB與GrayA的距離解決了這個(gè)問題,縮短距離,使得GrayB的第二次探測(cè)黑線被拋棄。
程序?qū)崿F(xiàn):程序不變。
問題3現(xiàn)象:行程的后半段遭遇了最難解決的問題。非常意外的,每次在到達(dá)岔路5時(shí),機(jī)器人就出現(xiàn)了動(dòng)作紊亂。
原因探究:我們?cè)O(shè)置了Ci變量在機(jī)器人的小顯示屏上實(shí)時(shí)輸出。觀察發(fā)現(xiàn),每次到達(dá)岔路5時(shí),Ci的值瞬間增加,進(jìn)退間,Ci變化記錄的數(shù)值與預(yù)期嚴(yán)重不符(GrayB探測(cè)判斷的實(shí)際岔路遠(yuǎn)遠(yuǎn)超過預(yù)期數(shù)量),且數(shù)額每次都不定!變化范圍檢測(cè)到了13-26,導(dǎo)致機(jī)器人無(wú)法按照Ci的數(shù)值執(zhí)行相應(yīng)指令。再經(jīng)過仔細(xì)研究,我們發(fā)現(xiàn),問題出在了這里各條邊之間的距離上。由于該路口機(jī)器人的尺寸有超出最下側(cè)邊界,且這個(gè)路口動(dòng)作大,且GrayA也在反復(fù)探測(cè)調(diào)整線路,因此GrayB會(huì)多次在該區(qū)域微動(dòng)多次來(lái)回探測(cè)到黑線;且變量1圖紙與定量底圖的重合邊界上,GrayB在掃過兩張圖組合的復(fù)雜岔路時(shí),將會(huì)把它視為兩種不同的黑色路徑,甚至在探測(cè)過程中,因?yàn)楣饩€的變化,而出現(xiàn)不同的Ci變化。
經(jīng)過討論,我們決定,在經(jīng)過復(fù)雜路口之后,將Ci賦值為一個(gè)大數(shù)值,即GrayB在該路口肯定達(dá)不到的數(shù)值,掩蓋掉了這個(gè)矛盾。同理,在經(jīng)過岔路6時(shí),我們遇到同樣問題,同樣處理。
程序?qū)崿F(xiàn):在經(jīng)過岔路5的時(shí)候,做這樣的語(yǔ)句調(diào)整(在經(jīng)過岔路4之后,Ci=6)
IfCi=7then左拐45度,Ci=50
IfCi=51then右拐135度
四、最終算法呈現(xiàn)
經(jīng)過多次測(cè)試之后,最終我們用如下算法實(shí)現(xiàn)了功能,在僅有兩個(gè)感光探頭的情況下,準(zhǔn)確地完成了這個(gè)復(fù)雜線路的循跡功能。偽代碼如下:
Ci=0
循環(huán),時(shí)間間隔0.2秒
IfCi=52then向后1圈,停止所有電機(jī)
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
五、探究心得
在這次參加寧港臺(tái)青少年科創(chuàng)大賽的高中機(jī)器人隊(duì)伍中,我們學(xué)校成立時(shí)間比較短,與南京市的幾家名校相比,設(shè)備比較簡(jiǎn)陋。誠(chéng)然,在設(shè)備先進(jìn)的情況下,機(jī)器人的設(shè)計(jì)與制作會(huì)更簡(jiǎn)單。但是,在我們?cè)O(shè)備有限的情況下,隊(duì)友們能夠另辟蹊徑,通過程序設(shè)計(jì)來(lái)完成一樣的功能,我們覺得非常開心,這才是編程的樂趣,創(chuàng)新的意義。