LabVIEW藍(lán)牙控制樂高六足機(jī)器人
圖1 LabVIEW藍(lán)牙控制樂高六足機(jī)器人
一、前言
上篇文章《Arduino與LEGO結(jié)合的六足機(jī)器人》中,講解了使用32路舵機(jī)控制板的方法,該板自帶了一款舵機(jī)控制軟件,我用該軟件控制著六足機(jī)器人的12個mini舵機(jī)做動作,通過“示教”法一步步地確定了前、后、左、右4個動作組,然后把動作序列文件下載到機(jī)器人身上舵機(jī)控制板的存儲卡中,并在線運(yùn)行,測試機(jī)器人的運(yùn)行是否符合預(yù)期。
《Arduino與LEGO結(jié)合的六足機(jī)器人》文章的網(wǎng)址:http://www.eefocus.com/zhang700309/blog/13-03/291894_b2e9f.html。
在這篇文章中,我用LabVIEW軟件設(shè)計(jì)了一個六足機(jī)器人的人機(jī)控制界面,設(shè)置5個互動按鈕。界面設(shè)計(jì)目的是,當(dāng)按鈕按下時,會把一行字符串命令通過藍(lán)牙串口,無線發(fā)送到舵機(jī)控制板,執(zhí)行事先下載到其存儲卡中的前后左右及停止動作序列文件,讓機(jī)器人“活”起來。
視頻網(wǎng)址:
http://www.tudou.com/v/y1tv6wvvR40/&rpid=96368873&resourceId=96368873_04_05_99/v.swf。
二、32路舵機(jī)控制板硬件設(shè)置和上下位機(jī)藍(lán)牙聯(lián)機(jī)
控制這個機(jī)器人12個mini舵機(jī)的是DFRobot公司出品的USB SSC32舵機(jī)控制板,該控制板的各端口分布和功能說明圖如下。
圖2 DFRobot公司的32路舵機(jī)控制板端口分布和功能說明
六足機(jī)器人左側(cè)6個舵機(jī)的輸出端子分別插接在控制板的1到6舵機(jī)通道,而右側(cè)6個舵機(jī)插接在17到22舵機(jī)通道??刂瓢宓耐ㄐ挪ㄌ芈?,我設(shè)置為115200b/s,通過圖2所示“7撥碼開關(guān)”來設(shè)置,把兩個撥碼開關(guān)都撥到ON端即可。
圖2中標(biāo)號為1、8、10和12的端口都可以供電,1號和10號端口供電給邏輯部分,8號和12號端口供電給舵機(jī)部分。由于機(jī)器人的電控僅用一塊7.4V、900ma的鋰聚合物電池供電,所以邏輯部分和舵機(jī)部分共用電源,于是“11 VL和VS1連通跳線”帽要插上,同時“2 USB供電選擇跳線”帽不插上,斷開,不采用電腦USB供電。
舵機(jī)控制板與PC機(jī)的通信采用藍(lán)牙模式,在控制板的“16數(shù)傳接口”上插入藍(lán)牙模塊,藍(lán)牙模塊也要設(shè)置為波特率為115200b/s,并采用從機(jī)通信模式。在PC機(jī)的USB插座上插入藍(lán)牙適配器,利用了IVT藍(lán)牙管理軟件進(jìn)行上下位機(jī)的聯(lián)機(jī)。這次用的筆記本電腦安裝了win7操作系統(tǒng),我發(fā)現(xiàn)低版本的IVT藍(lán)牙驅(qū)動管理軟件,連接失敗,采用高版本V6.4版,成功了。操作生成的串口號為COM6。PC機(jī)藍(lán)牙管理軟件IVT_BlueSoleilv6.4(win7),請下載:http://115.com/file/beuhmkdf。
PC機(jī)與下位機(jī)的藍(lán)牙聯(lián)機(jī)過程,可以參看我的另一篇文章的后半部分內(nèi)容。網(wǎng)址:http://www.eefocus.com/zhang700309/blog/12-09/286479_a1c80.html。
圖3 IVT軟件的上下位機(jī)藍(lán)牙通信連接
三、六足機(jī)器人的LabVIEW人機(jī)界面的前面板設(shè)計(jì)
LabVIEW程序由前面板和框圖程序組成,前面板是人機(jī)交互的界面,界面上有用戶輸入和顯示輸出兩類控件;框圖程序則是用戶編制的程序源代碼,以定義和控制在前面板上的控件輸入和輸出功能。
圖4 LabVIEW前面板
在前面板中,有藍(lán)牙串口號和波特率設(shè)置輸入欄,有“退出程序”的按鈕,還用界面設(shè)計(jì)的核心控件,前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止按鈕。這些按鈕的“機(jī)械動作”,要通過右鍵快捷菜單,來設(shè)置為窄脈沖觸發(fā)模式,如下圖所示。
圖5 LabVIEW前面板的按鈕模式設(shè)置
點(diǎn)擊圖5中右鍵快捷菜單中的“高級→自定義”選項(xiàng),可以設(shè)計(jì)“按鈕”控件的圖形,我所設(shè)計(jì)的是“箭頭”圖示的按鈕控件,關(guān)于前面板自定義控件和框圖程序事件結(jié)構(gòu)的應(yīng)用方法,早期我曾經(jīng)錄制過視頻教程,不妨看看。
視頻網(wǎng)址:http://www.tudou.com/v/TZYs2eJ-1vo/&rpid=96368873&resourceId=96368873_04_05_99/v.swf。
可以通過鼠標(biāo)點(diǎn)擊按鈕來控制機(jī)器人,也可以把這些按鈕與鍵盤上的快捷鍵關(guān)聯(lián)起來,通過鍵盤來控制機(jī)器人。點(diǎn)選圖5中的快捷菜單中的“高級→快捷鍵”選項(xiàng)。出現(xiàn)圖6快捷鍵設(shè)置對話框。
圖6 快捷鍵設(shè)置對話框
例如,“左轉(zhuǎn)”按鈕的快捷鍵對話框中“切換”選擇欄,我選擇“Page Down”鍵,前面板中的“左轉(zhuǎn)”按鈕與鍵盤的“Page Down”鍵綁定在一起,這樣按動鍵盤的按鍵與鼠標(biāo)點(diǎn)擊按鈕控件的效果就一樣了。
四、六足機(jī)器人的LabVIEW人機(jī)界面的框圖程序編制
前后左右及停止控件按下時,會立即反饋到后臺程序,即LabVIEW框圖程序,這個程序會把字符串命令,通過無線串口下達(dá)給32路舵機(jī)控制板,進(jìn)而控制機(jī)器人12個舵機(jī)動作。這次LabVIEW程序編制有兩個要點(diǎn):1、如何把字符串命令通過LabVIEW的VISA串口VI(子函數(shù)),寫入到舵機(jī)控制板的存儲卡;2、如何應(yīng)用“事件結(jié)構(gòu)”工具,把前面板的按鈕觸發(fā)事件與相應(yīng)的字符串命令下達(dá)關(guān)聯(lián)起來。(所有圖片雙擊后,都可以放大看!)
圖7 LabVIEW的框圖程序
圖7的圖形化編程設(shè)計(jì)是采用NI_VISA串口Serial函數(shù)來訪問和控制串口的。VISA中的Serial函數(shù)庫里包含VISA 配置串口、VISA 寫入、VISA 讀取、VISA 關(guān)閉等子函數(shù)。這些子函數(shù)的提取路徑是:函數(shù)庫→儀器I/O→串口,本設(shè)計(jì)用到的三個VISA串口VI是:VISA串口配置VI VISA Configure Serial Port、VISA寫入VI VISA Write、和VISA 關(guān)閉VI VISA Close。值得注意的是,您必須要安裝了VISA串口驅(qū)動程序,這些VI才會起作用。
VISA串口配置函數(shù)的作用是完成串口參數(shù)的初始化設(shè)置,包括了串口號,波特率,奇偶校驗(yàn)、數(shù)據(jù)比特、是否啟用終止符等。
VISA關(guān)閉函數(shù)VISA Close的作用是當(dāng)程序停止之前,必須要把使用的串口號設(shè)備關(guān)閉,若不關(guān)閉,之后的其他程序就不能使用該設(shè)備。
VISA寫入函數(shù)有三個輸入端子,中間的輸入端子是寫入緩沖區(qū)入口,寫入緩沖區(qū)支持的數(shù)據(jù)格式是字符串。
那么到底什么樣的字符串命令可以控制舵機(jī)控制板的存儲卡中各動作組的動作序列文件?請先看看DF-USBSSC32控制板使用說明書。
說明書網(wǎng)址:http://wiki.dfrobot.com.cn/index.php?title=USB%E7%89%8832%E8%B7%AF%E8%88%B5%E6%9C%BA%E6%8E%A7%E5%88%B6%E6%9D%BF(SKU:DRI0005)。
從說明書中,我學(xué)習(xí)到,如果要執(zhí)行動作組0的文件,字符串命令是:PL 0 SQ 0
我把機(jī)器人前進(jìn)、后退、左轉(zhuǎn)和右轉(zhuǎn)分成了4個動作組, “前進(jìn)”動作組編號設(shè)為0,其它3個動作組的編號分別設(shè)置為1、2、3。
從圖7可以看出,在前面板中按下“前進(jìn)”按鈕,會執(zhí)行“[1] 前進(jìn) 值改變”事件分支,把字符串PL 0 SQ 0用“連接字符串”VI與回車符
談完字符串命令串口通信的問題,再來談?wù)勈录Y(jié)構(gòu)的應(yīng)用方法。
事件結(jié)構(gòu)是一個功能非常強(qiáng)大的編程工具,什么是事件呢?事件幾乎可以是LabVIEW中“發(fā)生”的任何事情,例如,按下前面板布爾控件;數(shù)值控件值改變;鼠標(biāo)光標(biāo)進(jìn)入程序窗口等。為啥需要事件結(jié)構(gòu),如果沒有它的話,例如,為了檢測用戶是否按下按鈕,就不得不在While循環(huán)中周期性地“輪詢”按鈕的值。使用它,就不需要“輪詢”,因?yàn)長abVIEW程序會“知道”事件何時發(fā)生。軟件的事件結(jié)構(gòu)很像硬件的中斷機(jī)制。
在框圖程序界面的空白處右擊鼠標(biāo),就會出現(xiàn)函數(shù)庫面板,接著在“編輯”→“結(jié)構(gòu)”子面板里,找到“事件結(jié)構(gòu)”模塊,把它拖到程序編輯界面,再拉大模塊方框,就可以建立一個初始事件結(jié)構(gòu)。如8所示為事件結(jié)構(gòu)的提取方法。
圖8 事件結(jié)構(gòu)的提取方法
事件結(jié)構(gòu)總是放在一個While循環(huán)結(jié)構(gòu)中,如圖7所示。為了可以連續(xù)處理事件,需要用While循環(huán)來一直執(zhí)行事件結(jié)構(gòu)。如果沒有While循環(huán)結(jié)構(gòu),事件結(jié)構(gòu)只能處理一次事件,就會退出程序。另外在程序中只能放置一個事件結(jié)構(gòu),如果想在程序中處理幾種不同的事件,可以在單個事件結(jié)構(gòu)中創(chuàng)建多個分支幀。
圖9 添加事件分支
在事件結(jié)構(gòu)上右擊鼠標(biāo),出現(xiàn)快捷菜單,選擇“添加事件分支…”,隨之會出現(xiàn)“編輯事件”對話框,如圖10所示。
圖10 編輯事件
如果希望在“前進(jìn)”按鈕事件后,添加“后退”按鈕事件,可以在圖10里,找到“后退”事件源,選擇事件觸發(fā)條件是“值改變”。對于前面板中的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止按鈕,我分別添加了對應(yīng)的事件分支幀,在各分支幀里,把相應(yīng)的字符串命令下達(dá)給下位機(jī),32路舵機(jī)控制板。
值得注意的是,要退出一個包含事件結(jié)構(gòu)的While循環(huán),必須把退出按鈕放在事件結(jié)構(gòu)中,如圖11所示,還要為退出按鈕配置專門的“值改變”事件分支幀。如果退出按鈕放在事件結(jié)構(gòu)外,事件結(jié)構(gòu)將一直等待,無法退出程序運(yùn)行。
圖11 停止帶事件結(jié)構(gòu)的While循環(huán)的正確方法
LabV