吳震宇, 方 敏, 丁 康
(合肥工業(yè)大學(xué) 電氣與自動(dòng)化工程學(xué)院,安徽 合肥 230009)
倒立擺系統(tǒng)是一種非最小相位系統(tǒng),它具有非線性、多變量和不穩(wěn)定的特點(diǎn),因而成為控制理論教學(xué)和科研的典型對(duì)象[1]。隨著計(jì)算機(jī)技術(shù)的發(fā)展,虛擬現(xiàn)實(shí)技術(shù)被大量地運(yùn)用到生產(chǎn)實(shí)踐中,也為科學(xué)研究提供了一種新的途徑。LabVIEW是當(dāng)前流行的一種圖形化編程語言,其自帶三維圖形工具箱能夠建立或?qū)肴S模型,并能控制三維模型。將LabVIEW與三維模型相結(jié)合,充分利用了三維帶來的可視化和動(dòng)態(tài)的交互性等特點(diǎn),可應(yīng)用于硬件在環(huán)中的仿真分析,也可通過三維模型顯示某遠(yuǎn)程控制平臺(tái)的實(shí)時(shí)狀態(tài),使設(shè)計(jì)、仿真過程直觀形象。本文使用LabVIEW和其中的三維圖形工具箱,設(shè)計(jì)了一個(gè)倒立擺虛擬模型仿真系統(tǒng),可以在該系統(tǒng)中完成設(shè)計(jì)和仿真,并形象、直觀地展示倒立擺的運(yùn)動(dòng)過程。
直線倒立擺是由電機(jī)、同步帶、小車和擺桿組成,電機(jī)通過同步帶帶動(dòng)小車在軌道上來回運(yùn)動(dòng)來保持?jǐn)[桿始終處于豎直向上平衡位置。直線倒立擺按擺桿數(shù)量的不同,可分為一級(jí)、二級(jí)、三級(jí)倒立擺等。本文以直線二級(jí)倒立擺為研究對(duì)象,在建模時(shí)忽略了空氣阻力和各種摩擦,并認(rèn)為擺桿為剛體[2]。(1)式和(2)式中的θ1與θ2分別是擺桿1和擺桿2偏離垂直向上位置的角度;F是作用在系統(tǒng)上的外力;x是小車離開初始位置的距離。
倒立擺實(shí)物的各項(xiàng)參數(shù)值如下:小車質(zhì)量M=1.32kg;擺桿1的質(zhì)量m1=0.04kg;擺桿1轉(zhuǎn)動(dòng)中心到質(zhì)心的距離l1=0.09m;擺桿2的質(zhì)量m2=0.132kg;擺桿2轉(zhuǎn)動(dòng)中心到質(zhì)心的距離l2=0.27m;m3=0.208kg。
根據(jù)上述參數(shù),推導(dǎo)出的倒立擺狀態(tài)空間表達(dá)式為:
控制信號(hào)U為作用在小車上的加速度,反映了作用在小車上力F的大小。
倒立擺三維場景是利用虛擬現(xiàn)實(shí)技術(shù)建立的。虛擬現(xiàn)實(shí)技術(shù)(Virtual Reality)是20世紀(jì)90年代發(fā)展起來的一個(gè)新的研究領(lǐng)域,用計(jì)算機(jī)圖形構(gòu)成三維空間,可比較真實(shí)地描述物體的運(yùn)動(dòng)特點(diǎn)[3]。
要進(jìn)行倒立擺的虛擬三維仿真,首先要在LabVIEW中建立其三維模型。三維模型既可以利用LabVIEW自帶的三維圖形工具箱建立,也可以使用其它的專業(yè)建模軟件建立后再導(dǎo)入LabVIEW。
在LabVIEW 8.2以后的版本中自帶了三維圖片控件工具箱,可以利用其中的控件繪制一些三維圖形,如長方體、圓柱體、錐體等,這種方法多用于繪制較為簡單的三維場景。對(duì)于復(fù)雜物體的建模,LabVIEW提供了另外一種方法:從外部文件中導(dǎo)入制作好的三維模型,即先使用專業(yè)的三維建模軟件如3DMAX、SolidWorks等建立復(fù)雜物體的三維模型,再將該模型導(dǎo)入LabVIEW,并可以在導(dǎo)入模型的基礎(chǔ)上添加三維物體,進(jìn)一步豐富虛擬場景。目前,LabVIEW支持3種格式的三維文件導(dǎo)入,分別是VRML(Virtual Reality Modeling Language)、STL(Stereo Lithography)和ASE(ASCII Scene Export)。
在本文中,用SolidWorks制作好不含擺桿的倒立擺三維模型,其文件格式為VRML,再使用LabVIEW三維圖片控件工具箱里的“加載VRML文件.vi”導(dǎo)入。VRML為虛擬現(xiàn)實(shí)建模語言,是近年來興起的一種新型用于三維建模和渲染的圖形描述語言,與HTML一樣,均為ASCII文本格式的描述性語言,文件類型擴(kuò)展名為.wrl或.wrz[4]
在LabVIEW中,顯示二維曲線的控件功能非常完善,例如“波形圖”控件,可以設(shè)定緩存數(shù)據(jù)值、曲線圖的更新模式,也可根據(jù)數(shù)據(jù)范圍自動(dòng)調(diào)整曲線圖坐標(biāo)上下限。但是LabVIEW的三維顯示控件目前還不具備如此強(qiáng)大的功能,為了實(shí)現(xiàn)三維圖形不斷更新,就必須用新數(shù)據(jù)代替舊的數(shù)據(jù),一般可使用LabVIEW中的反饋節(jié)點(diǎn)來完成,但會(huì)使整個(gè)程序框圖可讀性較差,增加了設(shè)計(jì)難度。為解決這個(gè)問題,可使用While循環(huán)或For循環(huán)的移位寄存器功能[5]。在While循環(huán)上單擊右鍵,選擇“添加移位寄存器”,即可使用移位寄存器將值從上一個(gè)循環(huán)傳遞到下一個(gè)循環(huán)。
對(duì)于較復(fù)雜的三維仿真系統(tǒng),建立VI的分層結(jié)構(gòu),以降低程序設(shè)計(jì)的復(fù)雜性,加快開發(fā)的過程[6]。本文構(gòu)造了3層VI結(jié)構(gòu),如圖1所示。
(1)仿真程序VI。完成仿真參數(shù)的設(shè)定、倒立擺模型的建立,并向模型控制VI發(fā)送狀態(tài)數(shù)據(jù),其包含仿真循環(huán)、控制系統(tǒng)數(shù)學(xué)模型以及模型控制VI。
(2)模型控制VI。提供數(shù)據(jù)接口,顯示虛擬場景并將接收的狀態(tài)數(shù)據(jù)用于控制小車的位置和擺桿角度。
(3)模型構(gòu)建VI。實(shí)現(xiàn)模型文件的導(dǎo)入和模型部件運(yùn)動(dòng)節(jié)點(diǎn)約束關(guān)系的設(shè)置,這是由三維圖形工具箱的基本控件實(shí)現(xiàn)的。?
圖1 VI間的層次結(jié)構(gòu)圖
在制作三維模型時(shí),組成模型的部件都有一個(gè)名稱可方便地對(duì)各部件分別操作。在LabVIEW中使用“查找對(duì)象.vi”獲取三維場景對(duì)象,然后通過變形控件對(duì)這些對(duì)象進(jìn)行控制,實(shí)現(xiàn)三維動(dòng)畫。本文利用“查找對(duì)象.vi”將倒立擺的小車、一級(jí)擺和二級(jí)擺3個(gè)對(duì)象進(jìn)行分別處理,擺體能夠根據(jù)計(jì)算出的位置信號(hào)在軌道上水平移動(dòng),2個(gè)擺桿能根據(jù)模型算出的角度繞軸轉(zhuǎn)動(dòng)相應(yīng)的角度。
建立的倒立擺模型能根據(jù)輸入接口上的數(shù)據(jù)改變小車的位置和2個(gè)擺桿的角度,在視覺上表現(xiàn)為小車模型左右的移動(dòng),擺桿模型繞著轉(zhuǎn)軸轉(zhuǎn)動(dòng),這些都是對(duì)三維模型進(jìn)行變換后得到的效果。
變換是指根據(jù)某種數(shù)學(xué)規(guī)則改變?nèi)S場景中對(duì)象的方向或外觀,LabVIEW中的變換VI可改變?nèi)S場景中對(duì)象的大小、方向和位置。常用變換有以下3種[7]。
(1)平移。將三維對(duì)象平移到三維場景中的一個(gè)新位置,對(duì)象平移的方向和大小用一個(gè)向量表示,作為“平移對(duì)象.vi”的參數(shù)。本文中對(duì)小車位置的變換采用了“平移對(duì)象.vi”。
(2)旋轉(zhuǎn)。以給定的旋轉(zhuǎn)軸和旋轉(zhuǎn)角作為“旋轉(zhuǎn)對(duì)象.vi”的參數(shù),三維對(duì)象繞軸轉(zhuǎn)一個(gè)角度。本文中對(duì)擺桿角度的變換使用“旋轉(zhuǎn)對(duì)象.vi”。
(3)縮放。按照三維場景的x、y和z坐標(biāo)的比例因子縮放三維場景中對(duì)象的的大小。
上述各變換又包括絕對(duì)變換和相對(duì)變換。例如,“設(shè)置平移.vi”用于三維對(duì)象的絕對(duì)平移,“平移對(duì)象.vi”則用于相對(duì)地平移一個(gè)三維對(duì)象。
在LabVIEW中,對(duì)三維場景的變換都要通過“調(diào)用節(jié)點(diǎn).vi”獲取場景對(duì)象,再用于變換操作,從而控制場景中的物體。
圖2所示是創(chuàng)建擺桿三維模型的程序,通過“創(chuàng)建柱面.vi”建立三維擺桿模型,由于擺桿的默認(rèn)初始位置是垂直于屏幕的,要對(duì)其進(jìn)行修改才能符合模型要求。為此通過“設(shè)置旋轉(zhuǎn).vi”將擺桿繞x軸旋轉(zhuǎn)90°,再用“設(shè)置平移.vi”將擺桿移動(dòng)到小車的位置,使之符合物理模型的實(shí)際情況。為了在之后能調(diào)用擺桿的三維場景,需要將創(chuàng)建好的擺桿1模型加入一個(gè)名為“pendulum1”(擺桿1)的空白場景對(duì)象中。在使用時(shí),只需調(diào)用“pendulum1”場景即可。
圖2 創(chuàng)建擺桿1的三維模型
對(duì)于2級(jí)倒立擺三維模型,如何在模型中反 映2個(gè)擺桿之間相互轉(zhuǎn)動(dòng)的關(guān)系是另一個(gè)問題,一級(jí)擺桿可繞小車上的連接軸轉(zhuǎn)動(dòng),二級(jí)擺桿繞其與一級(jí)擺桿的連接軸轉(zhuǎn)動(dòng)。本文通過設(shè)置三維場景之間的層次關(guān)系來解決這一問題,將三維場景中某一對(duì)象添加為另一對(duì)象的父對(duì)象,則子對(duì)象會(huì)繼承對(duì)父對(duì)象做得任何變換。子對(duì)象也可以是層次結(jié)構(gòu)中更低對(duì)象的父對(duì)象,在較大的三維場景中使用對(duì)象關(guān)系可提高編程效率,也可用于設(shè)置相對(duì)運(yùn)動(dòng)的三維場景。
本文采用LabVIEW中的調(diào)用節(jié)點(diǎn),調(diào)用三維場景中的“對(duì)象:添加對(duì)象”方法,將二級(jí)擺桿作為一級(jí)擺桿添加對(duì)象作為的子對(duì)象,一級(jí)擺桿作為子對(duì)象添加到小車模型上,這樣對(duì)小車模型的平移變換同時(shí)會(huì)應(yīng)用到擺桿系統(tǒng)上,對(duì)一級(jí)擺桿的旋轉(zhuǎn)變換也會(huì)作用于二級(jí)擺桿上,而對(duì)二級(jí)擺桿的旋轉(zhuǎn)變換僅作用于該模型。
倒立擺的狀態(tài)方程為:
其中,系統(tǒng)狀態(tài)X=[xθ1θ2x′θ1′θ2′]T,物理含義分別為小車的位移、一級(jí)和二級(jí)擺與豎直方向的夾角、小車速度、一級(jí)和二級(jí)擺桿的角速度。設(shè)小車初始位置為0,一級(jí)和二級(jí)擺在豎直位置(即平衡位置)的角度為0;系統(tǒng)輸出Y=[x θ1θ2]T;U為LQR控制器的輸出。R=[000 000]T是希望的狀態(tài),E為狀態(tài)誤差。
確定最優(yōu)控制器u(t)=Ke(t),使得目標(biāo)函數(shù)J=∫∞0(XTQX+UTRU)dt達(dá)到最小值,其中反饋陣K=[k1k2k3k4k5k6]。當(dāng)?shù)沽[最終穩(wěn)定運(yùn)行時(shí),狀態(tài)變量X應(yīng)趨于零[8]。
在LabVIEW提供的控制設(shè)計(jì)與仿真模塊中提供了多種控制算法程序,為設(shè)計(jì)控制器提供了極大的便利。
在圖3所示的程序框圖中,cd-Linear Quadratic Regulator.vi通過連接至其輸入接線端的系統(tǒng)數(shù)學(xué)模型和Q、R自動(dòng)計(jì)算出反饋陣K,并將數(shù)據(jù)通過輸出接線端送至其他VI節(jié)點(diǎn)。用戶只需提供必須的數(shù)據(jù)而不用編寫任何計(jì)算代碼,大大降低了開發(fā)難度。
LabVIEW的控制設(shè)計(jì)與仿真模塊提供了包括狀態(tài)空間在內(nèi)的各種常用形式的系統(tǒng)數(shù)學(xué)模型,能夠方便地使用這些模型進(jìn)行仿真測(cè)試。圖4所示為倒立擺控制系統(tǒng)程序框圖。
圖3 倒立擺LQR控制參數(shù)的計(jì)算
圖4 倒立擺控制系統(tǒng)程序框圖
黑色方框?yàn)榭刂品抡嫜h(huán),該循環(huán)作用類似于Matlab中的Simulink,其中的程序按照設(shè)定的步長進(jìn)行仿真運(yùn)算。
圖中圓圈處為狀態(tài)空間VI,在每個(gè)仿真循環(huán)內(nèi)其根據(jù)倒立擺數(shù)學(xué)模型和本次循環(huán)中控制器的輸出來確定狀態(tài)量的輸出,同時(shí)狀態(tài)量與給定之間誤差作為下次循環(huán)控制器的輸入,并將小車位移、一級(jí)擺的角度和二級(jí)擺的角度送至3D動(dòng)畫顯示VI和繪制曲線VI。
3D動(dòng)畫顯示VI在首次運(yùn)行時(shí)使用“查找對(duì)象.vi”將倒立擺3D模型中小車和擺桿部件提取出來,之后每次運(yùn)行都會(huì)按照模型輸出的狀態(tài)量分別對(duì)模型中的小車和擺桿進(jìn)行平移和旋轉(zhuǎn),并將變換后的3D場景對(duì)象顯示在前面板上。每次循環(huán)時(shí)都會(huì)更新小車位置和擺桿角度,當(dāng)循環(huán)速度足夠快時(shí),3D模型就出現(xiàn)動(dòng)態(tài)效果。
LabVIEW能夠使用其中的顯示控件,輕松地設(shè)計(jì)出豐富的人機(jī)交互界面。本文使用Lab-VIEW設(shè)計(jì)的直線二級(jí)倒立擺LQR控制系統(tǒng)的用戶界面,如圖5所示。圖5左下部分為操作區(qū),可通過2個(gè)選項(xiàng)卡輸入?yún)?shù)。在“二級(jí)倒立擺模型”選擇卡中,可以修改二級(jí)倒立擺的狀態(tài)空間參數(shù)來仿真不同的倒立擺模型。在“控制器參數(shù)”選項(xiàng)卡中,用戶可輸入不同的權(quán)矩陣Q和R來驗(yàn)證哪組參數(shù)效果最佳。拖動(dòng)“設(shè)定小車位置”的水平滑動(dòng)桿可以改變小車在軌道上的位置。
圖5右下部分為實(shí)時(shí)曲線圖,該曲線圖顯示了小車的位置、2個(gè)擺桿角度的變化曲線。
圖5上半部分為二級(jí)倒立擺三維模型的顯示區(qū),三維模型中的小車和擺桿依據(jù)系統(tǒng)運(yùn)行狀態(tài)數(shù)據(jù),產(chǎn)生相應(yīng)的位移和轉(zhuǎn)動(dòng),實(shí)現(xiàn)動(dòng)畫的效果,并可用鼠標(biāo)轉(zhuǎn)動(dòng)三維模型,可以實(shí)現(xiàn)多方位、多角度的觀測(cè)。
圖5 線性二級(jí)倒立擺三維仿真程序前面板
LabVIEW是一個(gè)理想的控制原型開發(fā)、分析設(shè)計(jì)和測(cè)試控制算法的平臺(tái),作為原型開發(fā)的一個(gè)部分,3D仿真能夠?qū)⒖刂葡到y(tǒng)的狀態(tài)和控制器算法的效果以可見的方式顯示出來。
本文通過LabVIEW中的三維模型控件建立倒立擺的虛擬場景,在倒立擺控制系統(tǒng)的仿真信號(hào)與虛擬場景之間建立數(shù)據(jù)連接。仿真過程中不僅可以看到可視化的虛擬模型,還可以對(duì)對(duì)象進(jìn)行操作控制。比起僅有仿真曲線圖的環(huán)境,虛擬倒立擺仿真提供了一個(gè)較為逼真的三維視圖,并且可以多方向多角度地觀察擺桿的擺動(dòng)以及小車的整個(gè)移動(dòng)過程,為倒立擺仿真提供了一個(gè)新的可視化平臺(tái)。
[1]叢 爽,李澤湘.實(shí)用運(yùn)動(dòng)控制技術(shù)[M].北京:電子工業(yè)出版社,2006:241-242.
[2]固高科技有限公司.倒立擺與自動(dòng)控制原理實(shí)驗(yàn)[EB/OL].[2005-24-30].http://www.googoltech.com.cn.
[3]侯 俊,過學(xué)迅.虛擬現(xiàn)實(shí)技術(shù)在電動(dòng)車測(cè)試中的應(yīng)用[J].現(xiàn)代制造技術(shù)與裝備,2008(1):48-49.
[4]徐 林,高 巍,邱聯(lián)奎.基于VRML的倒立擺三維仿真[J].計(jì)算技術(shù)與自動(dòng)化,2009,28(3):24-26.
[5]阮奇楨.我和LabVIEW:一個(gè)NI工程師的十年編程經(jīng)驗(yàn)[M].北京:北京航空航天大學(xué)出版社,2009:95-96.
[6]楊文鉑,尤一鳴.LabVIEW在模型車無線測(cè)控系統(tǒng)中的應(yīng)用[J].天津工業(yè)大學(xué)學(xué)報(bào),2007,26(6):42-44.
[7]美國國家儀器公司.LabVIEW 幫助[EB/OL].[2011-01-02].http://www.ni.com.
[8]胡壽松.自動(dòng)控制原理[M].第4版.北京:科學(xué)出版社,2001:516-519.