薛清平,李衛(wèi)紅
(平頂山市科技進(jìn)修學(xué)校 河南 平頂山 467000)
NXT-G、RoboLab 2.9都是樂高公司提供的樂高 LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)的圖形化的編程工具,除此以 外 , 還 有 Bricx Command Center、RobotC、NI LabVIEW Toolkit、leJOS NXJ、pbLua等第三方提供的編程工具。隨著2010年教育部與樂高集團(tuán)合作的“技術(shù)教育創(chuàng)新人才培養(yǎng)計(jì)劃”項(xiàng)目的開展,樂高LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)在各地中小學(xué)的推廣速度也將加快[1],服務(wù)于此,有必要對樂高LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)的相關(guān)問題尤其是二次開發(fā)問題做進(jìn)一步深入探討、研究。
作為一個(gè)開放式的擴(kuò)展平臺,樂高集團(tuán)提供了進(jìn)行樂高LEGO MINDSTORMS NXT系統(tǒng)二次開發(fā)所需要的LEGO MINDSTORMS NXT Hardware Developer Kit[2]、LEGO MINDSTORMS NXT Direct Commands[3]、LEGO MINDSTORMS NXT Bluetooth Developer Kit[4]、LEGO MINDSTORMS NXT Communication protocol[5]、Mobile Application Software[6]以 及 作為二次開發(fā)不可或缺的SDK文件FantomSDK[7]的非常詳盡的資料。
FantomSDK支持C++及NI Labview開發(fā)環(huán)境,可運(yùn)行于Windows或MAC系統(tǒng)。樂高LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)可通過USB或藍(lán)牙兩種方式與PC系統(tǒng)進(jìn)行連接、通信,對 USB方式,LEGO提供的驅(qū)動程序Fantom.sys與NXT設(shè)備直接通信;對藍(lán)牙方式,則是把NXT設(shè)備映射到一個(gè)COM端口,然后通過Win32文件訪問端口進(jìn)行通信。USB和藍(lán)牙兩種連接、通信方式,均得到FantomSDK的支持。
FantomSDK提供了Fantom的頭文件、Labview的vi支持庫以及基本封裝類型的使用幫助。iNXTIterator對象用于遍歷注冊到系統(tǒng)上的 NXT設(shè)備,獲得iNXT對象,iFileIterator對象、iModuleIterator對象用于獲得NXT設(shè)備的文件、模塊信息。
NXTIterator對象用于搜索注冊到系統(tǒng)上的 NXT設(shè)備,獲得iNXT對象。createNXTIterator方法產(chǎn)生一個(gè)NXT實(shí)例,使用后,通過destroy方法進(jìn)行釋放。createNXTIterator(ViBoolean,ViUInt32,tStatus)方法中 ViBoolean 參數(shù)為 true,則搜索通過USB、藍(lán)牙連接的所有NXT設(shè)備。若ViBoolean參數(shù)為false,則僅搜索通過USB連接的NXT設(shè)備。獲取NXT設(shè)備的具體C++代碼如下:
編譯、運(yùn)行后,如果成功搜索到系統(tǒng)上的 NXT設(shè)備,通過 getDeviceInfo獲 得 NXT 設(shè) 備 名 稱 (name), 通 過getFirmwareVersion獲得系統(tǒng)的通訊協(xié)議版本(protocolVersion)、固 件版 本 (firmwareVersion)、Flash 剩 余空間(availableFlash)信息。
將 ViBoolean參 數(shù) 設(shè) 置 為 true, 通 過 nxtPtr->getDeviceInfo方法獲取藍(lán)牙連接NXT設(shè)備的6位16進(jìn)制bluetoothAddress藍(lán)牙設(shè)備地址。
NXT 的固件系統(tǒng)(Firmware),包含輸入(Input module)、輸 出 (Output module)、 顯 示 (Display module)、 聲 音 (Sound module)、按鈕(Button module)等模塊,用于對各種外設(shè)提供支持。搜索到NXT設(shè)備后,通過iModuleIterator對象遍歷相應(yīng)的模塊。createModuleIterator方法產(chǎn)生一個(gè)實(shí)例,通過destroyModuleIterator方法進(jìn)行釋放。列表顯示NXT設(shè)備的模塊信息的具體C++代碼如下:
編譯、運(yùn)行后,遍歷相應(yīng)的模塊,通過 getName(name)獲取模塊的名稱,通過getModuleID獲取模塊編號,通過getModuleSize獲取模塊大小,通過getModuleIOMapSize獲取模塊映射的I/O地址空間。
NXT系統(tǒng)包含.sys(系統(tǒng)文件)、.rxe(系統(tǒng)可執(zhí)行文件,類似exe文件)、.rpg(NXT Program模塊產(chǎn)生的程序文件)、.ric(圖片 文 件 )、.rso (聲 音 文 件 )、.rtm (Try Me 模塊 文 件 ),iFileIterator對象用于遍歷 NXT設(shè)備上的文件。createFileIterator方法產(chǎn)生一個(gè)實(shí)例,通過destroyFileIterator方法進(jìn)行釋放。列表顯示NXT設(shè)備的文件信息的具體C++代碼如下:
編譯、運(yùn)行后,列表顯示相應(yīng)NXT設(shè)備上的文件。通過getName(name)獲取文件的名稱,通過getSize獲取文件大小,通過getAvailableSize獲取可用文件空間。
借助樂高LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)的SDK文件FantomSDK,除可連接NXT設(shè)備,進(jìn)行模塊及文件的查看、刪除、讀寫操作外,還可結(jié)合Appendix 1-LEGO MINDSTORMS NXT Communication protocol.pdf、Appendix 2-LEGO MINDSTORMS NXT Directcommands.pdf、LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf等LEGO MINDSTORMS NXT Bluetooth Developer Kit文件,通過nxtPtr->sendDirectCommand方法,對NXT設(shè)備的傳感器、馬達(dá)等輸入輸出設(shè)備及聲音文件進(jìn)行控制,實(shí)現(xiàn)NXT-G、RoboLab能夠完成的全部任務(wù)。運(yùn)行d.rxe程序,播放r.rso聲音文件的C++代碼如下:
利用樂高LEGO MINDSTORMS NXT機(jī)器人系統(tǒng)的SDK文件 FantomSDK,借助 C++編程,結(jié)合 LEGO MINDSTORMS NXT Bluetooth Developer Kit文件, 代替 NXT-G、RoboLab 軟件,完成NXT設(shè)備的全部控制任務(wù),為青少年、科技教師運(yùn)用樂高NXT機(jī)器人系統(tǒng)進(jìn)行科技創(chuàng)新提供幫助與支持。
[1]李衛(wèi)紅.基于B/S的樂高NXT中文固件系統(tǒng)的研究及實(shí)現(xiàn)[J].價(jià)值工程,2011(4):146-147.
LI Wei-hong.Research and implement of chinese firmware of LEGO NXT system based on B/S[J].Value Engineering,2011(4):146-147.
[2]The LEGO Group.LEGO MINDSTORMS NXT Hardware DeveloperKit.pdf[EB/OL].(2006-07-24)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[3]The LEGO Group.LEGO MINDSTORMS NXT Direct Commands.pdf.[EB/OL]. (2006 -07 -26)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[4]The LEGO Group.LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf.[EB/OL].(2006-07-24)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[5]The LEGO Group.Appendix 1-LEGO MINDSTORMS NXT Communication protocol.pdf.[EB/OL].(2006-11-02)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[6]The LEGO Group.LEGO MINDSTORMS NXT Mobile Application.pdf.[EB/OL].(2006 -11 -02)http://mindstorms.lego.com/en-us/support/files/default.aspx.
[7]The LEGO Group.LEGO MINDSTORMS NXT FantomSDK[EB/OL].(2006-07-21)http://mindstorms.lego.com/en-us/support/files/default.aspx.