吳偉超
摘要:隨著虛擬仿真技術(shù)的發(fā)展,虛擬機(jī)器人已走進(jìn)了中小學(xué)課堂,給信息技術(shù)教學(xué)注入了新的活力。本文以智能快車虛擬機(jī)器人為例,簡述了如何應(yīng)用子程序高效地完成任務(wù)。
關(guān)鍵詞:子程序 虛擬機(jī)器人 智能快車
在2009年中小學(xué)電腦競賽中,廣州市增加了“3D仿真虛擬機(jī)器人”比賽項(xiàng)目。2010年,廣東省教育廳將虛擬機(jī)器人項(xiàng)目作為中小學(xué)電腦機(jī)器人競賽活動項(xiàng)目。近幾年,筆者輔導(dǎo)學(xué)生參加競賽,取得了不錯的成績。接下來,筆者以智能快遞虛擬機(jī)器人為例,結(jié)合小學(xué)生的特點(diǎn),簡述了如何應(yīng)用子程序高效地完成任務(wù)。
一、子程序的含義
在程序設(shè)計(jì)和編寫過程中,不同位置需使用一段完全相同的程序,而為了節(jié)約內(nèi)存,避免多次出現(xiàn)同一段程序,人們將這段程序?qū)懗瑟?dú)立的程序片段,隨意調(diào)用這段程序,執(zhí)行完這段相同程序再返回原主程序繼續(xù)運(yùn)行,這樣獨(dú)立的程序段就稱為子程序,而調(diào)用子程序的程序則稱為主程序。由此可見,子程序的引入大大簡化了程序結(jié)構(gòu),增加了程序的可讀性,避免了重復(fù)性工作,縮短了整個程序。
在虛擬機(jī)器人程序設(shè)計(jì)中,由于經(jīng)常用到一些重復(fù)的功能,這些功能相同的程序編成相同的代碼,所以子程序思想可以運(yùn)用到虛擬機(jī)器人程序設(shè)計(jì)中。在調(diào)用子程序時,我們要注意一個問題,即參數(shù)傳送問題。在調(diào)用子程序時,主程序應(yīng)先把有關(guān)參數(shù)放到某些約定的位置,當(dāng)子程序運(yùn)行時,我們可以從約定位置得到這些參數(shù)。另外,在虛擬機(jī)器人程序設(shè)計(jì)調(diào)用子程序時,我們要注意按規(guī)定的格式,在主程序中不能漏掉參數(shù),否則程序就會出錯,不能執(zhí)行。
二、智能快車虛擬機(jī)器人競賽任務(wù)分析
在智能快車綜合任務(wù)分析中,對如何定義子程序,筆者與學(xué)生進(jìn)行了模塊的可視化編程,結(jié)合易時代3D仿真虛擬機(jī)器人軟件的任務(wù)地圖,把任務(wù)分解成可讓機(jī)器人完成直行、轉(zhuǎn)彎、避障、巡線、通過十字路口及收取快遞等子任務(wù)。下面,筆者以直行與轉(zhuǎn)彎為例,分別展示不同類型的子程序的結(jié)構(gòu)和調(diào)用方法:第一,直行結(jié)構(gòu)(讓機(jī)器人直行1秒),如圖1所示;第二,轉(zhuǎn)彎結(jié)構(gòu)(讓機(jī)器人以一定的速度、角度進(jìn)行轉(zhuǎn)彎,在轉(zhuǎn)彎過程中用應(yīng)用指南針檢測地圖的角度,到達(dá)指定角度時直行出彎),如圖2所示。
從這兩個子程序的功能上不難看出,直行子程序運(yùn)行的結(jié)果是單一的,轉(zhuǎn)彎子程序運(yùn)行的結(jié)果會根據(jù)指定的不同角度達(dá)到不同的目的。通過參數(shù)的應(yīng)用,讓原來同一段的程序更加靈活多變,進(jìn)而簡化、優(yōu)化程序,所以我們要根據(jù)子程序的功能構(gòu)建子程序。如果功能是單一的,子程序就不需要參數(shù),否則我們要根據(jù)情況增加對應(yīng)的參數(shù)。
三、應(yīng)用子程序注意的問題
使用易時代3D仿真虛擬機(jī)器人軟件定義子程序的過程中,我們要注意以下問題:首先,要確定子程序的命名,其命名不能使用與軟件內(nèi)部命令重復(fù)的單詞。如要實(shí)現(xiàn)停車3秒的功能,子程序不能用“Stop”進(jìn)行命名,否則會與內(nèi)部命令發(fā)生沖突,導(dǎo)致編譯失敗。其次,只能在新建時定義子程序的參數(shù),所以在定義子程序前,我們要考慮好參數(shù)的問題。最后,我們必須清楚子程序的從屬關(guān)系。在多年的輔導(dǎo)中,筆者了解到學(xué)生在編寫子程序的過程中,一般會出現(xiàn)如圖3、圖4、圖5的情況:
圖3是建立主程序“109”后定義一個子程序“GO”直行,學(xué)生一般不會出現(xiàn)什么問題。圖4是建立主程序“109”后定義一個子程序“GO”直行,馬上再定義另一個子程序“L”左轉(zhuǎn),學(xué)生很容易出現(xiàn)子程序的從屬關(guān)系混亂。本來,“GO”和“L”都應(yīng)該是“109”的子程序,因?yàn)檐浖镄陆ǖ淖映绦颉癓”是當(dāng)前窗口程序的子程序,如果剛才是編寫“GO”這個子程序,現(xiàn)在新建的子程序“L”就變成了“GO”的子程序。由于從屬關(guān)系的錯誤,子程序“L”就不會在主程序“109”里出現(xiàn)。圖5里的從屬關(guān)系就更加復(fù)雜了。為此,在定義子程序的過程中,教師應(yīng)要求學(xué)生定義完一個子程序,必須保存、關(guān)閉,然后再定義另一個子程序,以保證子程序跟主程序的正確從屬關(guān)系。不僅如此,每定義一個子程序,學(xué)生都應(yīng)在主程序中引用并進(jìn)行編譯,如果有誤,只要檢驗(yàn)最新定義的子程序即可,從而快速有效地校正程序。
四、應(yīng)用子程序?qū)嵗治?/p>
下面,筆者以2017年廣州市賽小學(xué)智能快遞地圖為例(如圖6所示),說說如何應(yīng)用子程序快速、高效完成任務(wù)。
第一,任務(wù)分析。圖中有快遞8件,根據(jù)布局可設(shè)計(jì)以下三種方案:方案一,成功收取快遞①~⑥,并送達(dá)終點(diǎn),可以得12000分+時間分;方案二,在方案①的基礎(chǔ)上增加收取余下的⑦⑧兩個快遞,全部收取并送終點(diǎn)可以得到16000分+時間分;方案三,備用方案,當(dāng)實(shí)行方案二因時間不夠未能完成任務(wù)時,在方案一的基礎(chǔ)上增加收?、咭粋€快遞,若成功,則得14000分+時間分。根據(jù)三個方案做出流程草圖,在編寫流程圖時,教師需要標(biāo)注子程序參數(shù)的參考數(shù)值(如表1所示)。另外,地圖中沒有障礙物,可以不用定義避障的子程序。
第二,根據(jù)分析,首先快速建立機(jī)器人模型,傳感器配備光電傳感器、遠(yuǎn)紅外傳感器、指南針,然后在桌面建立主程序,定義直行、左轉(zhuǎn)、右轉(zhuǎn)、巡線、抓取快遞等5個子程序。其中,直行和巡線不需要預(yù)設(shè)參數(shù),左轉(zhuǎn)、右轉(zhuǎn)和抓取快遞都設(shè)置了一個參數(shù)。在定義子程序時,我們要注意根據(jù)任務(wù),把相同作用的程序(動作)劃分為一個個子程序,尤其在劃分的時候要考慮可執(zhí)行性強(qiáng)、兼容性強(qiáng)等特點(diǎn),這樣子程序應(yīng)用起來才快捷方便。
第三,根據(jù)方案一的流程圖進(jìn)行主程序的編程。由于應(yīng)用子程序進(jìn)行編程的流程是線性的,所以第一步要巡線行走,引用巡線的子程序;第二步需要左轉(zhuǎn)彎,引用左轉(zhuǎn)彎的子程序……(如表1所示)
在編寫程序的過程中,教師應(yīng)要求學(xué)生每完成一個子程序的引用時,都要畫“√”進(jìn)行記錄,以免錯漏。通過對照流程圖,一步一步應(yīng)用已有的子程序進(jìn)行編程,便于學(xué)生理解和運(yùn)用。
第四,方案的檢驗(yàn)與優(yōu)化。已經(jīng)編寫好的程序經(jīng)過編譯就可以在仿真處進(jìn)行驗(yàn)證,由于易時代3D仿真虛擬機(jī)器人軟件引入了物理引擎和隨機(jī)參數(shù),所以仿真的結(jié)果會有微小的變化。又因?yàn)槲锢硪娴膽T性作用,在優(yōu)化程序的時候必須按順序修改,不可以更改后面參數(shù)再修改前面的參數(shù)。這樣一來,在慣性的作用下,后面的參數(shù)可能就無效了。在仿真檢驗(yàn)中,方案一順利通過后,教師可要求學(xué)生做好備份,然后用方案一的拷貝文件修改成方案二,如果成功,就以方案二做備份后進(jìn)行最后優(yōu)化并上交;如果方案二因時間不足,學(xué)生可以利用方案一進(jìn)行備份,嘗試修改成方案三,修改成功,則以方案三備份優(yōu)化并上交;如果方案二和方案三都無法完成,那至少保證有方案一可以上交得分。
五、結(jié)語
在程序的編寫過程中,子程序的引入大大簡化了程序結(jié)構(gòu),增加了程序的可讀性,避免了重復(fù)性工作,縮短了整個程序,并增強(qiáng)了程序的可移植性。一些常用的運(yùn)算程序?qū)懗勺映绦蛐问?,可以隨時引用、參考。因?yàn)樽映绦虻膽?yīng)用,學(xué)生可以從程序的順序結(jié)構(gòu)、分支結(jié)構(gòu)、重復(fù)結(jié)構(gòu)等復(fù)雜結(jié)構(gòu)的思維方式回歸到只有順序結(jié)構(gòu)的線性思維方式,方便學(xué)生學(xué)習(xí)和理解,從而有效提高任務(wù)的完成度。但是,子程序的應(yīng)用也有不足的地方,如定義了的子程序功能單一,雖然參數(shù)的預(yù)設(shè)可以優(yōu)化這方面的短板,但如果參數(shù)過多,在引用時也容易出現(xiàn)錯漏。
參考文獻(xiàn):
[1]張嘉志,王同聚.讓機(jī)器人走近學(xué)生——3D仿真虛擬機(jī)器人:普及機(jī)器人教育的新途徑[J].中小學(xué)信息技術(shù)教育,2010,(6).
[2]龍麗嫦.虛擬機(jī)器人:讓信息技術(shù)教育更豐盈[J].中國現(xiàn)代教育裝備,2012,(18).
(作者單位:廣州市南沙區(qū)金隆小學(xué))