華中師范大學(xué)計(jì)算機(jī)學(xué)院 莊章璐 彭 熙 黃世亮 許思慧 艾 晶
NAO機(jī)器人是一款由軟銀(Softbank)公司研發(fā)并生產(chǎn)的雙足類人機(jī)器人。它擁有25個(gè)自由度,以及包括超聲波、慣性、壓力等多種傳感器,同時(shí)也有著討人喜歡的外觀。該機(jī)器人可在Windows、Mac、Linux操作系統(tǒng)下運(yùn)行,可用C++、Python、MATLAB等語言進(jìn)行編程與操作[1]。在世界范圍內(nèi),已有50多個(gè)國家的550多所高校和實(shí)驗(yàn)室購買此款機(jī)器人作為研究工具[2]。NAO機(jī)器人是在學(xué)術(shù)研究領(lǐng)域運(yùn)用最廣泛的類人機(jī)器人之一。近年來,很多高校在機(jī)器人教學(xué)改革中取得了一些成果[3],利用NAO機(jī)器人進(jìn)行教學(xué)是一個(gè)很好的選擇[8]。使用NAO機(jī)器人教學(xué)可以使教學(xué)過程更加生動(dòng)有趣,更能激發(fā)學(xué)生的想象力、培養(yǎng)學(xué)生的動(dòng)手能力[7]。本文以數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)為課堂案例進(jìn)行教學(xué)實(shí)踐,將傳統(tǒng)與創(chuàng)新相結(jié)合,實(shí)踐教學(xué)設(shè)計(jì)貫徹趣味性、實(shí)用性、系統(tǒng)性的原則[4]。
本系統(tǒng)綜合利用C++與C#的交互實(shí)現(xiàn)軟件的各個(gè)功能。本校數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)采用的是C語言,NAO機(jī)器人官方提供的SDK為C++語言,C++語言兼容C語言,故本系統(tǒng)采用C++語言作為主要編程語言。此外,系統(tǒng)使用Microsoft Visual Studio中的C#語言進(jìn)行軟件界面的設(shè)計(jì),C#是由C和C++衍生出來的面向?qū)ο蟮木幊陶Z言[5],在繼承C和C++強(qiáng)大功能的同時(shí)去掉了它們的一些復(fù)雜特性[9]。
本系統(tǒng)可供學(xué)生學(xué)習(xí)《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》以及教師了解學(xué)生的學(xué)習(xí)情況,系統(tǒng)的功能結(jié)構(gòu)如圖1所示。系統(tǒng)包括四個(gè)模塊:(1)登錄模塊,賬號(hào)分為學(xué)生、教師兩個(gè)身份;(2)信息查詢模塊,教師登錄后可查詢學(xué)生信息以及學(xué)生的學(xué)習(xí)情況;(3)學(xué)習(xí)功能模塊,包括體驗(yàn)學(xué)習(xí)、基礎(chǔ)測試和進(jìn)階測試三個(gè)功能;(4)機(jī)器人交互模塊,在相應(yīng)界面輸入IP地址可連接機(jī)器人,學(xué)生學(xué)習(xí)時(shí)輸入不同的數(shù)據(jù),機(jī)器人做出相應(yīng)的反應(yīng)。該系統(tǒng)可用于課堂上的編程教學(xué),使用機(jī)器人來講解程序;老師可以使用該系統(tǒng)查看學(xué)生的學(xué)習(xí)情況;學(xué)生也可以通過該系統(tǒng)與機(jī)器人進(jìn)行代碼上的交流。
圖1 系統(tǒng)功能結(jié)構(gòu)
2.2.1登錄模塊設(shè)計(jì)
在初次進(jìn)入軟件登錄界面時(shí),用戶點(diǎn)擊“注冊”按鈕填寫相關(guān)信息進(jìn)行注冊,用戶身份分為學(xué)生和教師兩種,這兩種身份賬號(hào)登錄后進(jìn)入的界面以及實(shí)現(xiàn)的功能不同。例如,學(xué)生用戶登錄后可進(jìn)行自主學(xué)習(xí),教師用戶登錄后可查詢學(xué)生信息及學(xué)習(xí)情況。注冊后,每次登錄時(shí)通過將相應(yīng)用戶名、密碼與數(shù)據(jù)庫中信息相匹配,匹配成功則進(jìn)入系統(tǒng)。
圖2 學(xué)生體驗(yàn)主界面
2.2.2信息查詢模塊設(shè)計(jì)
教師登錄系統(tǒng)后,通過輸入學(xué)生的姓名或?qū)I(yè)名稱,進(jìn)而查看學(xué)生們近期的學(xué)習(xí)情況及相應(yīng)學(xué)生的詳細(xì)信息;同樣,教師也可以通過為教師界面預(yù)留的接口進(jìn)入學(xué)生界面進(jìn)一步體驗(yàn)。學(xué)生體驗(yàn)主界面如圖2所示。
2.2.3學(xué)習(xí)功能模塊設(shè)計(jì)
學(xué)習(xí)模式分為體驗(yàn)學(xué)習(xí)、基礎(chǔ)測試、進(jìn)階測試三個(gè)模塊,在每一個(gè)模塊下又有一些相應(yīng)的具體實(shí)例。學(xué)習(xí)模式框架如圖3所示。
圖3 學(xué)習(xí)模式框架
體驗(yàn)學(xué)習(xí)的主要功能是讓學(xué)生體驗(yàn)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)算法,深入理解數(shù)據(jù)結(jié)構(gòu)課程的教學(xué)內(nèi)容。它以體驗(yàn)為目的,讓學(xué)生自行輸入數(shù)據(jù),機(jī)器人進(jìn)行播報(bào)結(jié)果并進(jìn)行相應(yīng)講解?;A(chǔ)測試是通過給定的算法代碼描述和輸入的數(shù)據(jù),學(xué)生填寫輸出結(jié)果,機(jī)器人對(duì)學(xué)生輸入的答案進(jìn)行判斷,并給出肯定或否定的結(jié)論。進(jìn)階測試是給定輸入、輸出及部分代碼,學(xué)生對(duì)空缺的關(guān)鍵代碼進(jìn)行填空,NAO機(jī)器人同樣會(huì)對(duì)學(xué)生填入的信息進(jìn)行判斷并在肢體上或語言上做出相應(yīng)的反應(yīng)。
2.2.4機(jī)器人交互模塊設(shè)計(jì)
學(xué)生登錄后,即可通過局域網(wǎng)連接機(jī)器人并進(jìn)行相應(yīng)的《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》學(xué)習(xí)。機(jī)器人連接成功后,用戶可以調(diào)節(jié)機(jī)器人說話的音量大小,實(shí)現(xiàn)在學(xué)習(xí)過程中與機(jī)器人進(jìn)行交互。
圖4 機(jī)器人交互過程流程圖
機(jī)器人交互過程流程如圖4所示。機(jī)器人交互控制主要基于NAO機(jī)器人自身的NAOqi操作系統(tǒng)所提供的C++ SDK進(jìn)行二次開發(fā)。因?yàn)镹AOqi系統(tǒng)涉及多語言開發(fā),所以在二次開發(fā)的過程中需要使用qibuild、cmake等工具進(jìn)行交叉編譯。PC端發(fā)送的代碼在NAOqi系統(tǒng)中交叉編譯成功后,即可調(diào)用C++ SDK API接口中的相應(yīng)方法控制機(jī)器人的對(duì)應(yīng)模塊。
在使用系統(tǒng)的主要學(xué)習(xí)功能時(shí),學(xué)生登錄后,輸入實(shí)驗(yàn)數(shù)據(jù),C#調(diào)用C++程序編譯后的動(dòng)態(tài)鏈接庫中相應(yīng)的dll文件[12],運(yùn)行代碼得到結(jié)果,再將結(jié)果發(fā)送給機(jī)器人[10]。NAO機(jī)器人經(jīng)過交叉編譯調(diào)用相關(guān)方法后,語音播報(bào)結(jié)果,完成實(shí)驗(yàn)。除此之外,系統(tǒng)利用MySQL數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),C#代碼實(shí)現(xiàn)數(shù)據(jù)庫的基本功能,從而實(shí)現(xiàn)軟件中登錄、注冊、查詢等操作。系統(tǒng)所涉及的主要數(shù)據(jù)流如圖5所示。
圖5 系統(tǒng)數(shù)據(jù)流動(dòng)圖
系統(tǒng)利用NAOqi操作系統(tǒng)中的C++ SDK提供的API接口進(jìn)行機(jī)器人控制。以控制機(jī)器人說話為例,采取調(diào)用NAOqi_C++_SDK中ALAnimatedSpeechProxy類中say方法來實(shí)現(xiàn)。關(guān)鍵代碼如下:
因?yàn)榇撕瘮?shù)只是作為外部函數(shù)使用[13],所以以extern進(jìn)行修飾并將其編譯為dll動(dòng)態(tài)鏈接,然后在主程序中添加生成的dll位置進(jìn)行使用[11]。調(diào)用時(shí)的關(guān)鍵代碼如下:
系統(tǒng)設(shè)計(jì)完成后,在實(shí)驗(yàn)教學(xué)中進(jìn)行了測試。將NAO機(jī)器人應(yīng)用于《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》課堂,這是一個(gè)全新的嘗試。以“冒泡排序”為例,體驗(yàn)學(xué)習(xí)為新課學(xué)習(xí)階段,學(xué)生輸入任意常規(guī)數(shù)據(jù),機(jī)器人報(bào)出結(jié)果,點(diǎn)擊“講解”,機(jī)器人會(huì)講解代碼實(shí)現(xiàn)過程。基礎(chǔ)測試為復(fù)習(xí)鞏固階段,對(duì)應(yīng)題型“程序分析題”,根據(jù)代碼和輸入填寫結(jié)果,檢測學(xué)生是否讀懂代碼。進(jìn)階測試為提高學(xué)習(xí)階段,對(duì)應(yīng)題型“程序填空題”,將已有代碼補(bǔ)寫完整實(shí)現(xiàn)其功能,培養(yǎng)學(xué)生編程能力。
以“體驗(yàn)學(xué)習(xí)”功能為例,實(shí)驗(yàn)過程如圖6所示。學(xué)生輸入用戶名及密碼登錄系統(tǒng)即進(jìn)入主界面,點(diǎn)擊“連接”圖標(biāo),輸入IP地址連接機(jī)器人。連接機(jī)器人成功后,點(diǎn)擊“模式”圖標(biāo),選擇“體驗(yàn)學(xué)習(xí)”功能,再選中“冒泡排序”實(shí)例,進(jìn)入功能子界面。在指定位置輸入數(shù)據(jù),如圖7所示。點(diǎn)擊“確定”后,系統(tǒng)運(yùn)行代碼,將結(jié)果傳輸給機(jī)器人,機(jī)器人播報(bào)結(jié)果。如圖8所示,系統(tǒng)界面上也相應(yīng)地顯示實(shí)驗(yàn)結(jié)果。
圖6 實(shí)驗(yàn)過程流程圖
圖7 學(xué)生輸入數(shù)據(jù)
圖8 代碼運(yùn)行后結(jié)果
NAO機(jī)器人是一款人形智能機(jī)器人,有著討人喜歡的外形,具備有一定水平的人工智能,能夠與人親切互動(dòng)。本文綜合利用C++與C#語言,設(shè)計(jì)并實(shí)現(xiàn)了《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》教學(xué)輔助系統(tǒng)。該系統(tǒng)充分發(fā)揮NAO機(jī)器人的特點(diǎn),讓學(xué)生利用已學(xué)的數(shù)據(jù)結(jié)構(gòu)知識(shí)控制機(jī)器人的模塊,將學(xué)生感到比較枯燥的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)變得有趣起來,提高了學(xué)生對(duì)數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)的感性認(rèn)識(shí),加深其對(duì)數(shù)據(jù)結(jié)構(gòu)知識(shí)的理解,增強(qiáng)了編程實(shí)驗(yàn)對(duì)學(xué)生的吸引力[6]。使用本系統(tǒng),不僅學(xué)生能享受更加豐富有趣的課堂教學(xué),教師也能利用NAO機(jī)器人作為教學(xué)工具。該系統(tǒng)在實(shí)際教學(xué)中已投入應(yīng)用,取得了較好的教學(xué)效果。
[1]Robotics Banks[EBOL].https://www.ald.softbankrobotics.com/en/robots/nao.
[2]Nao 機(jī)器人-百度百科[EBOL].https://baike.baidu.com/item/NAO/18025769.
[3]王振,張星.NAO機(jī)器人平臺(tái)的創(chuàng)新實(shí)驗(yàn)設(shè)計(jì)與實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,2016,35(12):156-159.
[4]王韋偉,鞏雪潔.基于機(jī)器人的實(shí)踐教學(xué)改革[J].中國教育技術(shù)裝備,2017,16(92):55-57.
[5]C#-百度百科[EBOL].https://baike.baidu.com/item/c%23/195147?fr=aladdin.
[6]張仁彥,劉孟茹,孔凡超,等.基于Python的Nao機(jī)器人實(shí)驗(yàn)系統(tǒng)設(shè)計(jì)[J].中國現(xiàn)代教育裝備,2017(257):4-6.
[7]王曉軍,王宇嘉,陳劍雪,等.NAO機(jī)器人在《運(yùn)動(dòng)控制概論》實(shí)驗(yàn)教學(xué)中的應(yīng)用[J].課程教育研究,2015,10(上旬刊):210.
[8]劉小峰,周旭,汪建明,等.大學(xué)生創(chuàng)新技能培養(yǎng)的NAO機(jī)器人交互平臺(tái)[J].實(shí)驗(yàn)室研究與探索,2016,35(3):147-151.
[9]王欣,黎峰.新型的面向?qū)ο蟮木幊陶Z言——C#[J].計(jì)算機(jī)工程與技術(shù),2004,25(6):929-931.
[10]趙旸.多媒體教學(xué)平臺(tái)與C#程序設(shè)計(jì)[J].中國科教創(chuàng)新導(dǎo)刊,2011(4):93-94.
[11]李偉.C#調(diào)用VC++動(dòng)態(tài)鏈接庫的研究[J].測控技術(shù),2013,3(25):105-108.
[12]彭四偉,蔣尚秀.一種用C++動(dòng)態(tài)擴(kuò)展C#程序的方法[J].微計(jì)算機(jī)信息,2010,26(4-3):15-18.
[13]彭召意,趙菁菁.C++中類的構(gòu)造函數(shù)探究和使用[J].企業(yè)科技與發(fā)展,2016,(420):50-53.