傅文昊 張悅
摘 要:在高中創新活動中,為完成機器人復雜路線尋跡,通常使用三個或以上多感光探頭。我們在僅有兩個探頭的情況下,通過巧妙的程序設計,完成了復雜路線循跡,并就出現的多個復雜路況問題進行了針對性算法設計,做到了創新。
關鍵詞:高中創新;機器人巡線;復雜路線;雙感光探頭;程序設計
一、問題背景
在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
五、探究心得
在這次參加寧港臺青少年科創大賽的高中機器人隊伍中,我們學校成立時間比較短,與南京市的幾家名校相比,設備比較簡陋。誠然,在設備先進的情況下,機器人的設計與制作會更簡單。但是,在我們設備有限的情況下,隊友們能夠另辟蹊徑,通過程序設計來完成一樣的功能,我們覺得非常開心,這才是編程的樂趣,創新的意義。