薛清平,李衛紅
(平頂山市科技進修學校 河南 平頂山 467000)
NXT-G、RoboLab 2.9都是樂高公司提供的樂高 LEGO MINDSTORMS NXT機器人系統的圖形化的編程工具,除此以 外 , 還 有 Bricx Command Center、RobotC、NI LabVIEW Toolkit、leJOS NXJ、pbLua等第三方提供的編程工具。隨著2010年教育部與樂高集團合作的“技術教育創新人才培養計劃”項目的開展,樂高LEGO MINDSTORMS NXT機器人系統在各地中小學的推廣速度也將加快[1],服務于此,有必要對樂高LEGO MINDSTORMS NXT機器人系統的相關問題尤其是二次開發問題做進一步深入探討、研究。
作為一個開放式的擴展平臺,樂高集團提供了進行樂高LEGO MINDSTORMS NXT系統二次開發所需要的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]以 及 作為二次開發不可或缺的SDK文件FantomSDK[7]的非常詳盡的資料。
FantomSDK支持C++及NI Labview開發環境,可運行于Windows或MAC系統。樂高LEGO MINDSTORMS NXT機器人系統可通過USB或藍牙兩種方式與PC系統進行連接、通信,對 USB方式,LEGO提供的驅動程序Fantom.sys與NXT設備直接通信;對藍牙方式,則是把NXT設備映射到一個COM端口,然后通過Win32文件訪問端口進行通信。USB和藍牙兩種連接、通信方式,均得到FantomSDK的支持。
FantomSDK提供了Fantom的頭文件、Labview的vi支持庫以及基本封裝類型的使用幫助。iNXTIterator對象用于遍歷注冊到系統上的 NXT設備,獲得iNXT對象,iFileIterator對象、iModuleIterator對象用于獲得NXT設備的文件、模塊信息。
NXTIterator對象用于搜索注冊到系統上的 NXT設備,獲得iNXT對象。createNXTIterator方法產生一個NXT實例,使用后,通過destroy方法進行釋放。createNXTIterator(ViBoolean,ViUInt32,tStatus)方法中 ViBoolean 參數為 true,則搜索通過USB、藍牙連接的所有NXT設備。若ViBoolean參數為false,則僅搜索通過USB連接的NXT設備。獲取NXT設備的具體C++代碼如下:


編譯、運行后,如果成功搜索到系統上的 NXT設備,通過 getDeviceInfo獲 得 NXT 設 備 名 稱 (name), 通 過getFirmwareVersion獲得系統的通訊協議版本(protocolVersion)、固 件版 本 (firmwareVersion)、Flash 剩 余空間(availableFlash)信息。
將 ViBoolean參 數 設 置 為 true, 通 過 nxtPtr->getDeviceInfo方法獲取藍牙連接NXT設備的6位16進制bluetoothAddress藍牙設備地址。
NXT 的固件系統(Firmware),包含輸入(Input module)、輸 出 (Output module)、 顯 示 (Display module)、 聲 音 (Sound module)、按鈕(Button module)等模塊,用于對各種外設提供支持。搜索到NXT設備后,通過iModuleIterator對象遍歷相應的模塊。createModuleIterator方法產生一個實例,通過destroyModuleIterator方法進行釋放。列表顯示NXT設備的模塊信息的具體C++代碼如下:


編譯、運行后,遍歷相應的模塊,通過 getName(name)獲取模塊的名稱,通過getModuleID獲取模塊編號,通過getModuleSize獲取模塊大小,通過getModuleIOMapSize獲取模塊映射的I/O地址空間。
NXT系統包含.sys(系統文件)、.rxe(系統可執行文件,類似exe文件)、.rpg(NXT Program模塊產生的程序文件)、.ric(圖片 文 件 )、.rso (聲 音 文 件 )、.rtm (Try Me 模塊 文 件 ),iFileIterator對象用于遍歷 NXT設備上的文件。createFileIterator方法產生一個實例,通過destroyFileIterator方法進行釋放。列表顯示NXT設備的文件信息的具體C++代碼如下:


編譯、運行后,列表顯示相應NXT設備上的文件。通過getName(name)獲取文件的名稱,通過getSize獲取文件大小,通過getAvailableSize獲取可用文件空間。
借助樂高LEGO MINDSTORMS NXT機器人系統的SDK文件FantomSDK,除可連接NXT設備,進行模塊及文件的查看、刪除、讀寫操作外,還可結合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設備的傳感器、馬達等輸入輸出設備及聲音文件進行控制,實現NXT-G、RoboLab能夠完成的全部任務。運行d.rxe程序,播放r.rso聲音文件的C++代碼如下:

利用樂高LEGO MINDSTORMS NXT機器人系統的SDK文件 FantomSDK,借助 C++編程,結合 LEGO MINDSTORMS NXT Bluetooth Developer Kit文件, 代替 NXT-G、RoboLab 軟件,完成NXT設備的全部控制任務,為青少年、科技教師運用樂高NXT機器人系統進行科技創新提供幫助與支持。
[1]李衛紅.基于B/S的樂高NXT中文固件系統的研究及實現[J].價值工程,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.