基于Labview用于微軟XBOX電玩手柄遙控樂高機器人
XBOX 360是世界最大的電腦軟件公司微軟所開發(fā)的第二代家用視頻游戲軟硬件系統(tǒng),其中的電玩手柄是一種USB接口的人機輸入設備,而Labview軟件里有讀取人機輸入設備數(shù)據(jù)的功能組件,所以可以方便地讀取手柄數(shù)據(jù)到Labview軟件里進行處理。
XBOX手柄上有2個X、Y軸向搖桿,它的每個軸向搖桿能控制各自的X軸和Y軸坐標,當操作軸向搖桿時,由LabVIEW的輸入數(shù)據(jù)采集模塊(LabVIEW的程序模塊稱為VI)模數(shù)轉(zhuǎn)換產(chǎn)生的軸向坐標數(shù)據(jù)也發(fā)生相應變化。電玩手柄把軸向搖桿的坐標分為65536個刻度,搖桿的一個軸的正負方向剛好各是32768個刻度。操縱輸入設備,可以產(chǎn)生從-32768到32768連續(xù)變化的數(shù)字,這種設備習慣上稱為模擬量設備,或者說這種搖桿稱為模擬搖桿。XBOX手柄上表面有兩個顯而易見的X、Y軸向搖桿,另外還有2個模擬量推桿在手柄的前端面上,它可以控制Z軸的正負坐標。XBOX手柄一共可以控制5個軸向坐標,一個模擬搖桿控制X、Y兩個軸,兩個搖桿就控制4個軸,2個模擬量推桿控制1個軸,一共5個軸。
值得注意的是:XBOX電玩手柄上表面的兩個搖桿,若不搖動它,而是按下它,兩個搖桿就變成了兩個數(shù)位按鍵。所謂數(shù)位按鍵,就是按下按鍵,產(chǎn)生的值為“true”,松開按鍵,則值為“false”,手柄上還有其它8個數(shù)位按鍵。除了數(shù)位按鍵,還有一個POV視角單元,包括4個方向按鍵,按下這4個按鍵,會分別產(chǎn)生0、90、180、270數(shù)字。
看圖1所示電玩手柄,可以看到2個X、Y軸向搖桿,2個Z軸推桿,10個數(shù)位按鍵和4個方向按鍵。
圖1 微軟XBOX 360電玩手柄的輸入部件指示圖
要把操縱微軟XBOX手柄的搖桿、推桿和按鍵所產(chǎn)生的信息以數(shù)字的形式讀到PC機的LabVIEW軟件中進行處理,需用到4個VI,它們是“查詢輸入設備”VI、“初始化操縱桿”VI、“輸入設備采集”VI和“關(guān)閉輸入設備”VI。如何找到這些VI,首先打開“框圖程序”界面,在界面工作頁面空白處,點擊鼠標右鍵,出現(xiàn)“函數(shù)”庫面板,接著點擊“互連接口”圖標,在隨之出現(xiàn)的“互連接口”面板里,再點擊“輸入設備控制”圖標,就出現(xiàn)了“輸入設備控制”子面板,在這個子面板中可以找到這4個與手柄數(shù)據(jù)采集相關(guān)的VI。如圖2。
圖2 四個與電玩手柄數(shù)據(jù)采集相關(guān)的LabVIEW軟件VI
下面是XBOX手柄的LabVIEW數(shù)據(jù)采集程序。
圖3 XBOX手柄的LabVIEW數(shù)據(jù)采集程序
圖3所示LabVIEW程序中應用了一個平鋪式順序結(jié)構(gòu),它具有兩個幀,每個幀分別包含一個while循環(huán)結(jié)構(gòu)。平鋪式順序結(jié)構(gòu)的幀按照從左至右的順序執(zhí)行。第一個幀里的while循環(huán)采用了一個“查詢輸入設備”VI,查詢出目前正在使用的手柄輸入設備索引號,如果電腦上插入了鼠標和鍵盤,那么再連接電玩手柄,電玩手柄的設備索引號就為2。
在順序結(jié)構(gòu)的第二幀里,把查詢出的索引號數(shù)字填入“初始化操縱桿”VI的設備索引端子,然后就可以通過while結(jié)構(gòu)里的“輸入設備采集”VI,獲得手柄的5個軸的坐標,10個數(shù)位按鍵的布爾值和4個方向按鍵的角度值,并以簇數(shù)據(jù)類型顯示在前面板上。在前面板上按下“STOP”按鍵,結(jié)束while循環(huán),執(zhí)行“關(guān)閉輸入設備”VI。
圖4 XBOX電玩手柄的LabVIEW前面板
圖4是XBOX手柄的LabVIEW數(shù)據(jù)采集程序前面板,用于人機交流。從前面板看到,只有把設備索引切換到2時,手柄的信息才能看到,模擬搖桿和推桿的軸總數(shù)是5,按鍵總數(shù)是10,視角POV單元數(shù)是1,設備名稱是Controller。把手柄的左搖桿向Y軸正上方推到極限位置,按下“B”數(shù)位按鍵,同時再按下POV單元的右向按鍵,在前面板實時顯示的手柄輸入信息是:左搖桿Y axis值為-32768,button 2按鍵值為true,POV方向值為90(在圖4用圓圈進行了標注)。
LabVIEW軟件采集到XBOX電玩手柄的操控數(shù)據(jù),然后對這些數(shù)據(jù)進行提取和代數(shù)運算,產(chǎn)生的控制數(shù)據(jù)通過藍牙無線通信傳遞給NXT機器人上的控制器,驅(qū)動NXT電機,使機器人執(zhí)行指定動作。
2 XBOX手柄遙控樂高NXT機器人的LabVIEW程序設計
完整程序請下載(labview2010版):
XBOX_NXTcar.zip
本文通過機械手小車抓取球形物體的任務,來介紹通過LabVIEW程序,XBOX手柄遙控NXT機器人的方法。該任務是:用手指向前或者向后撥動左搖桿,小車會前進或后退,若左搖桿向前撥動的同時,按下“B”按鍵,小車右向行駛,按下“X”按鍵,小車左向行駛。當小車上的機械手接近球形物體時,按下右搖桿按鈕,機械手抓取物體,然后遙控小車把物體搬運到其它指定位置,再按下左搖桿按鈕,機械手松開物體,完成任務。
實驗實景圖如下:
圖5 實驗全景圖
完成上述任務的LabVIEW程序如下圖所示:
圖6 XBOX手柄遙控樂高NXT機器人程序
程序中用到三個有關(guān)NXT機器人的VI,首先是“Specify NXT”VI,該VI指定了NXT控制器的名稱以及Labview與NXT機器人的通訊方式。“Steering On”VI用于控制小車兩驅(qū)動輪上的NXT電機,這兩個NXT電機連線在NXT控制器B、C電機端子上。通過賦值給“Steering On”VI的“Power”端口,決定小車的行駛速度,賦值給“Steering”端口,決定小車轉(zhuǎn)向的程度?!癙olyMotor”VI用于驅(qū)動單個電機,這個電機連線在控制器的A端子上,控制機械手抓取或松開物體。
上圖程序中“輸入設備采集”VI采用“按名稱解除簇捆綁”函數(shù)把左搖桿“Y axis”模擬數(shù)據(jù)從“軸向信息”簇里提取出來。由于XBOX手柄的模擬搖桿將軸向分成65536個刻度,所以搖桿的正負向剛好是32768個刻度,除以327.68之后就可對應電機功率值的范圍為-100~100,又由于小車如果速度太快,不方便遙控它來定位其機械手到球形物體,于是“Y axis”數(shù)據(jù)還需再除以3,以較小的功率值范圍提供給“Steering On”VI的“Power”端口。(本文所說的功率值是針對NXT電機的功率程度值,100表示小車正方向滿功率行使,0表示小車停止。-100表示小車負方向滿功率行使。)
從“按鍵信息”簇里提取四個按鍵信息,“button 2”指示的是“B”按鍵,“button 3”指示的是“X”按鍵,“button9”指示的是左搖桿按鍵,“button10”指示的是右搖桿按鍵。通過一個條件選擇結(jié)構(gòu)來判斷,當按下“B”按鍵,就把數(shù)值60賦給“Steering On”VI的“Steering”端口,小車右向行駛,當按下“X”按鍵,賦值-60,小車左向行駛,若兩按鍵松開,賦值0,小車直行。程序中另一個條件判斷結(jié)構(gòu),用來選擇給 “PolyMotor”VI的端口賦值不同的參數(shù),當按下右搖桿按鍵,A端子的電機驅(qū)動機械手抓取物體,當按下左搖桿按鍵,則機械手松開物體。
整個程序包裹在一個循環(huán)結(jié)構(gòu)里面,每100ms時間,程序循環(huán)執(zhí)行一次,直到按下軟件菜單里的“中止執(zhí)行”圖標,程序強行結(jié)束。
LabVIEW與NXT控制器有兩種執(zhí)行模式,一種是在線模式,另一種是離線模式。在線模式下,程序邏輯在PC機上運行,并通過USB或藍牙發(fā)控制命令給NXT控制器,控制器僅是命令的執(zhí)行者,程序并沒有下載到控制器里。而離線模式下,需要下載程序到NXT控制器,然后在控制器里運行程序,不需要PC機干預。
程序界面的左下角有個“在線模式與離線模式切換”選項,右擊選項,出現(xiàn)快捷菜單,從中選擇在線模式或離線模式。選擇“主應用程序?qū)嵗?選項,則處于在線模式,選擇“NXT [Bluetooth]”,則處于離線模式。
不管是在線模式和離線模式,必須首先建立起LabVIEW軟件與NXT控制器的通信連接。插入藍牙適配器到PC機USB插槽,windows XP操作系統(tǒng)的右下邊任務欄會出現(xiàn)藍牙圖標,點擊這個圖標,出現(xiàn)windows自帶的藍牙程序窗口,通過該程序添加藍牙設備,然后選擇下圖的“查找NXT…”選項,建立起LabVIEW軟件與NXT控制器的通信連接。
圖7 藍牙通信建立和在線控制模式的選擇
由于NXT控制器的運算速度和內(nèi)存空間有限,LabVIEW的許多VI并不支持離線模式,所以XBOX手柄通過LabVIEW軟件遙控NXT機器人是采取在線控制模式。
樂高NXT機器人套件是由丹麥樂高公司和美國麻省理工學院的媒體實驗室以及國家儀器公司(NI)等共同開發(fā)的一種可編程機器人積木套件。自1998年上市以來,便受到國外教育和科研機構(gòu)的廣泛關(guān)注, 樂高NXT套件已經(jīng)被全球25000個以上的機構(gòu)采用,應用于教學、科研和工業(yè)產(chǎn)品原型開發(fā)。這個套件將模型搭建與機器人編程有效地結(jié)合,使用戶可以設計和制造自己的機器人,套件自帶的軟件是NXT-G軟件,它是以國家儀器公司的LabVIEW軟件為核心架構(gòu)的,NXT-G軟件界面簡單易懂,但要進行復雜功能的程序開發(fā),還需采用更高階的開發(fā)平臺,如NI公司的LabVIEW或微軟的MSRDS。NI公司已在2009年推出LabVIEW的LEGO MINDSTORMS NXT組件,用戶現(xiàn)在可以在LabVIEW軟件平臺上,開發(fā)及實現(xiàn)功能更強及更完整的NXT機器人程序。本文就是借助安裝了LEGO MINDSTORMS NXT組件的LabVIEW軟件,實現(xiàn)了微軟XBOX電玩手柄遙控NXT機器人。