李潤成
摘要:樂高MINDSTORMS EV3機器人產品被廣泛用于開展STEAM和創客教育,然而該產品的電子模塊數量相對較少,目前雖有教育者制作新的電子模塊,但因為沒有對應的程序模塊,難以用于教學。因此,本文首先介紹了EV3編程軟件和開發軟件,然后剖析程序模塊的組成內容,最后對每一要素給出具體實現方法。
關鍵詞:樂高;EV3;程序模塊;創客教育
中圖分類號:G40-057 文獻標識碼:B 論文編號:1674-2117(2018)20-0073-04
前言
樂高的MINDSTORMS EV3機器人自2013年上市后大受歡迎,其采用官方提供的直觀的圖形化編程語言,大大降低了使用者的門檻。EV3機器人相對DFRobot、Makeblock等其他機器人教育產品而言,其成熟的積木搭建系統能輕松制作各種復雜機械結構,然而它的傳感器等電子模塊種類少,不利于更全面的教學應用。筆者通過剖析MINDSTORMS EV3編程軟件程序模塊研究其內容,總結出該軟件程序模塊的開發制作方法,希望能為廣大教育工作者針對EV3機器人定制的電子硬件模塊進行程序模塊開發提供借鑒。
MINDSTORMS EV3軟件簡介
MINDSTORMS EV3軟件是圖形化的編程環境,包含EV3機器人程序需要的所有工具,該軟件基于National Instruments的WebUI Builder開發,軟件界面如圖1所示。EV3軟件中含有多類程序模塊,這些模塊有的是控制電機的,有的是采集傳感器數據的,還有一些是有其他用途的。編程的過程就是在屏幕上拖拽模塊,把它們相互連接起來,再更改模塊的設置。[1]該軟件還具有很好的擴展性,提供了程序模塊導入工具,通過該工具可以管理程序模塊和導入模塊。軟件中的每一個圖形模塊內部有對應的VIX文件,下載運行程序時,程序模塊先轉化成內部的VIX文件再運行。
MINDSTORMS EV3 DEVELOPER軟件簡介
MINDSTORMS EV3 DEVELOPER是樂高專門為MINDSTORMS EV3開發者進行軟件模塊開發而提供的開發環境。MINDSTORMS EV3 DEVELOPER相對MINDSTORMS EV3具有更多高級功能,如程序模塊內部的VIX文件編輯和制作。VIX文件采用圖形編程語言完成,把各個圖形塊按照邏輯連接起來實現各種運算和功能。
MINDSTORMS EV3程序模塊剖析
EV3程序模塊導入到軟件前是以文件形式存在的,文件后綴為.ev3b,把后綴改為.zip解壓后得到根目錄文件夾,文件夾內包含help、images、VIs、strings四個子文件夾和blocks.xml文件。help文件夾存放各國語言命名的文件夾和對應的HTML文件,用于在軟件查看幫助時顯示不同語言的幫助內容。Images文件夾存放程序模塊各種模式和在不同區域顯示的圖像文件。strings文件夾內有各國語言命名的文件夾和對應的blocks.xml文件,該文件用于定義用戶操作程序模塊時查看模塊的上下文幫助及模塊上的文字說明。VIs文件夾存放程序模塊不同模式下對應的VIX文件,即模塊對應的程序內容。根目錄blocks.xml用于定義程序模塊的內部名稱、程序模塊的參數屬性、模塊不同模式的顯示圖片內容以及各模塊對應的VIX文件。
MINDSTORMS EV3程序模塊制作
對于一個新的程序模塊,help文件夾內的幫助內容并不是必須的,它不影響程序模塊的正常使用功能,本文僅對根目錄blocks.xml文件,images、VIs、strings文件夾內容進行介紹。
1.根目錄blocks.xml
根目錄blocks.xml定義了模塊的類別(執行器類、傳感器類等)、模塊的功能模式以及不同模式對應的VIX程序文件。模塊根據功能不同分為測量模式、比較模式等,具體什么功能模式由開發者自己定義。該文件還定義了不同模式下的顯示圖像和VIX中的參數的類型、范圍等。以一個新開發的觸摸開關程序模塊為例,該模塊的根目錄blocks.xml內容如圖2所示。
(1)EditorDefinitions根元素。該元素是MINDSTORM EV3程序模塊根目錄blocks.xml文件的規范,文件必須含有該元素作為開頭。
(2)PolyGroups和PolyGroup元素。PolyGroups元素定義程序模塊組的內容。ModuleName屬性定義程序模塊組名稱,ModuleVersion屬性定義程序模塊組版本。PolyGroups元素內可以包含多個PolyGroup元素,每個PolyGroup對應一個程序模塊,若有多個新的程序模塊同時創建,可以把它們都放在一個PolyGroups定義。若block.xml文件內容有嚴重錯誤則在使用模塊導入向導工具導入時無法顯示任何內容。PolyGroup元素設定每個程序模塊的內容。Name屬性用于定義程序模塊組下的單個程序模塊名稱,該名稱可以和PolyGroups的ModuleName屬性不一致。BlockFamily屬性定義模塊屬于傳感器類、執行器類或其他類別。定義屬性時應根據模塊的功能選擇不同的類別,程序模塊會出現在對應類別選擇面板中。
(3)Parameter元素。該元素用于設定程序模塊不同模式下VIX文件公共參數的屬性,屬性包含其數據類型、默認值、數據范圍和方向等。本文例子中的觸摸開關模塊有三個公共參數,分別為Port、State和Result。Port對應的CompilerDirectives、Direction、DefaultValue屬性分別定義了端口是輸入口、方向為輸入以及默認值是1.3。State參數對應的Identification、Direction、DataType屬性分別定義了該參數顯示的圖像、數據方向為輸出以及類型為布爾型,其設定效果如圖3所示。Result參數的定義方法和前兩個參數一樣。
(4)Hardware元素。該部分內容只適用于傳感器功能的程序模塊,其他類別的程序模塊不需要該部分內容。EV3PlotColor元素為軟件數據記錄模式下線條的顯示顏色。EV3AutoID元素用于軟件對傳感器種類的識別,第三方開發的傳感器模塊可以使用-1和官方的傳感器進行區分,由于舉例的觸摸開關模塊為傳感器,因此Direction元素指定方向為輸入。DefaultPort元素確定模塊拖拽到編程界面時的默認端口,1.3表示為3號端口。
(5)Block元素。該元素用于定義程序模塊每個模式對應的VIX文件、模式特有的參數和在一些參數改變時顯示的圖像。對于一個傳感器模塊,通??梢栽O定為三種模式,即測量模式、比較模式和更改模式,對于每個模式最重要的內容就是內部的VIX文件。
(6)Mode元素。該元素定義程序塊模式,注意該模式名稱與images文件夾中對應的模式顯示圖像關聯,否則對應模式的圖像以及模塊的上下文幫助不顯示。Reference Type屬性定義VIX使用的函數庫,對于第三方程序模塊函數庫為“VIlib”,Name屬性選擇對應模式的VIX。ParameterReference元素列出VIX使用的實際參數名稱,這些參數必須已經在PolyGroup中進行了定義。PalttteInfo元素設定默認模式和模塊在選擇面板中的位置,含有該內容的模式會成為默認模式,即程序模塊拖拽到界面時顯示的模式。Weight屬性確定模塊出現在選擇面板從左到右的位置。BlockInterface元素內容可設為Measure、Compare、Change三者之一,設定值與模塊的模式對應一致。HardwareModeInfo元素定義傳感器在數據記錄模式下的內容。Name屬性設定為所需名稱,ID屬性標記傳感器的類型,如果傳感器模塊為數字型的,可設為0,Range為數據范圍,數字型傳感器設為0,1。Unit為單位,數字型傳感器無單位,設為空。上述為測量模式的Block元素內容介紹,另外的比較和更改模式的定義方法和測量模式一樣,只是它們不需定義HardwareModeInfo元素的相關內容。
2.images文件夾
Images文件夾存放程序模塊的圖像文件,以新建的觸摸開關模塊為例,其圖像文件如圖4所示。對于新程序模塊,需要設定其在選擇面板、編程面板和在端口查看硬件列表的顯示圖像。圖像的名稱要根據程序模塊的模式,以及所在面板按照一定命名方式設置,否則圖像不能顯示。
(1)選擇面板圖像。命名方式為PolyGroup_
(2)編程面板圖像。命名方式為PolyGroup_
(3)程序模塊模式圖像。命名方式為PolyGroup_
(4)端口查看硬件圖像。命名方式為PolyGroup_
3.VIs文件夾
VIs文件夾存放程序模塊不同模式下的VIX文件。VIs目錄中有PBR和NXT兩個文件夾,一般只需在PBR文件夾中放入VIX文件即可,NXT文件夾可為空。觸摸開關程序模塊測量模式、比較模式和更改模式三種模式的VIX文件分別為TouchSValue.vix、TouchSCompare.vix和TouchSChange.vix。雙擊程序模塊便進入程序模塊的VIX編輯界面。VIX文件的制作通過圖形編程語言完成,該語言和LabVIEW使用的圖形化編程語言一樣。測量模式TouchSValue.vix內容如圖5所示。PBrickConvertInput和PBrickInputRead為軟件內部庫函數,直接調用即可,軟件自帶的庫函數都會以帶問號的圖形塊顯示。
4.strings文件夾
Strings文件夾中放有不同國家語言文件夾,其中有對應的blocks.xml文件,該blocks.xml與根目錄的blocks.xml非同一文件,該文件主要提供程序模塊的可見名稱、上下文幫助和幫助URL,簡體中文的blocks.xml應放在命名為zh-Hans的文件夾。以新創建的觸摸開關程序模塊為例,其內容如圖6所示。該文件內容主要對PolyGroups、PolyGroup、Parameter和Block這四元素進行設定。注意此處Parameter和Block的內容是分別對多個程序模塊的參數和多個模式進行定義,它們的設定方法都相同,因此僅對其中一個Parameter元素和Block元素進行介紹。
(1)EditorStrings根元素。與根目錄blocks.xml文件相似,該元素是MINDSTORM EV3程序模塊strings中block.xml開發的規范格式,文件必須含有該元素作為開頭。
(2)PolyGroups元素。ModuleName屬性要與根目錄的blocks.xml中的PolyGroups ModuleName屬性一致,否則兩個block.xml文件內容無法關聯,程序模塊文字內容無法顯示。
(3)PolyGroup元素。Name屬性也需與根目錄的blocks.xml中的PolyGroup元素Name屬性一致,DisplayName和DisplayNamePrefix均設為顯示的名稱。
(4)Parameter元素。該部分定義參數的顯示名稱和描述,Name屬性設為參數名,DisplayName為參數顯示的文字,Description為參數的描述內容,設定不同參數時只需修改對應的文字內容。
(5)Block元素。該元素的Mode屬性要和根目錄的blocks.xml中的Mode屬性一致,DisplayName為模式顯示的文字,Description為模式的描述,對于不同模式,只需修改對應的文字描述內容。
結語
MINDSTORMS EV3機器人是一款優秀的教育產品,其直觀易用的編程軟件界面和成熟的積木結構搭建體系深受大家喜愛,但是它的局限性在于電子模塊數量不足和對應程序模塊缺乏。廣大教育工作者可弘揚創客精神,開發新的電子硬件模塊以及相應的程序模塊,進一步發掘它的潛力和豐富它的教學內容,使學生創作出具有更多新功能的EV3機器人。
參考文獻:
[1](美)Terry Griffin.樂高機器人EV3程序設計藝術[M].韋皓文,等,譯.北京:人民郵電出版社,2016.
[2]潘一佩.面向教育機器人的圖形化編程模塊設計及優化[D].廣州:華南理工大學,2017.