郭鐵錚, 鄭亦峰, 陳 巍, 陳國軍, 鄧君卓, 范曉陽
(南京工程學(xué)院 工業(yè)中心,南京 211167)
平衡板球系統(tǒng)是一個基于視覺的兩自由度非線性機(jī)電系統(tǒng),是控制原理研究的典型對象。目前不少控制理論課程已使用板球系統(tǒng)作為實(shí)驗(yàn)教學(xué)平臺,對于幫助學(xué)生理解和掌握經(jīng)典控制理論、現(xiàn)代控制理論及運(yùn)動控制等知識起到了重要促進(jìn)作用[1]。但當(dāng)前的實(shí)驗(yàn)教學(xué)過程中存在著設(shè)備短缺、時間受限等問題,學(xué)生無法在有限的時間內(nèi)完成機(jī)電系統(tǒng)使用、控制算法設(shè)計(jì)及驗(yàn)證等內(nèi)容[2],尤其是需要自主設(shè)計(jì)算法的高階部分,往往時間和實(shí)驗(yàn)平臺無法同時滿足??紤]到虛擬平臺不受時間、空間的限制,具有成本低廉、反復(fù)演練等優(yōu)點(diǎn),并能將算法設(shè)計(jì)等內(nèi)容前移至仿真平臺,實(shí)現(xiàn)“理論學(xué)習(xí)-仿真設(shè)計(jì)-實(shí)物驗(yàn)證”的虛實(shí)結(jié)合教學(xué)方式,是解決上述問題的重要途徑。不同于Matlab等傳統(tǒng)仿真平臺[3],Unity仿真系統(tǒng)以3D虛擬交互方式可以直觀地展現(xiàn)板球系統(tǒng)的工作原理。
本文以控制原理實(shí)驗(yàn)課程為研究對象,利用Unity3D軟件建設(shè)新型板球系統(tǒng)虛擬仿真平臺,并以此為基礎(chǔ),設(shè)計(jì)虛實(shí)結(jié)合的板球系統(tǒng)實(shí)驗(yàn)教學(xué)方案。通過虛擬平臺仿真和實(shí)物平臺驗(yàn)證相結(jié)合的教學(xué)方法,提高實(shí)驗(yàn)教學(xué)效果,改善課程教學(xué)質(zhì)量,對于培養(yǎng)學(xué)生掌握控制理論相關(guān)課程內(nèi)容具有重要促進(jìn)意義。
平衡板球系統(tǒng)是一個不穩(wěn)定的開環(huán)系統(tǒng),目標(biāo)是將自由滾動的球保持在特定位置或強(qiáng)制其沿方形板上特定的軌跡運(yùn)動[4]。板球系統(tǒng)的示意圖如圖1所示,方形板由萬向節(jié)固定在設(shè)備中心,可圍繞兩個水平軸旋轉(zhuǎn)。視覺傳感器(OV攝像頭)布置在方形板上方,用于捕獲球的圖像與位置(xb,yb),并將其發(fā)送至控制器,處理后產(chǎn)生相應(yīng)的驅(qū)動信號Ux、Uy[5]。兩個步進(jìn)電動機(jī)接收到驅(qū)動信號后,傾斜方形板以實(shí)現(xiàn)球的運(yùn)動控制,如圖2所示。球的運(yùn)動速度由方形板的斜率和球的慣性矩決定。
圖1 實(shí)驗(yàn)臺示意圖
圖2 視覺系統(tǒng)組成
為了克服步進(jìn)電動機(jī)中偶爾出現(xiàn)的失步現(xiàn)象,通過測量電動機(jī)旋轉(zhuǎn)角度,并推導(dǎo)旋轉(zhuǎn)角度與方形板旋轉(zhuǎn)角最終位置之間的幾何關(guān)系來獲取板的位置。電動機(jī)通過特殊設(shè)計(jì)的L形連桿與方形板相連,電動機(jī)旋轉(zhuǎn)角度與方形板傾斜角度的關(guān)系參見圖3所示的空間連桿機(jī)構(gòu)示意圖。L形連桿的每側(cè)都有平行四邊形連桿機(jī)構(gòu),其中L1和L2為垂直連桿機(jī)構(gòu),L3和L4為水平連桿機(jī)構(gòu)。對于微小運(yùn)動來說,由于平行四邊形連桿機(jī)構(gòu)運(yùn)動學(xué)約束作用[6],該機(jī)械結(jié)構(gòu)的設(shè)計(jì)可確保兩個方形板傾斜角(φx和φy)和相應(yīng)的電動機(jī)旋轉(zhuǎn)角度(θm1和θm2)相等。
圖3 板球系統(tǒng)空間連桿機(jī)構(gòu)示意圖
由于首次接觸控制原理課程的學(xué)生較難理解復(fù)雜的板球系統(tǒng)數(shù)學(xué)建模過程,對板球系統(tǒng)進(jìn)行了建模簡化,以便初學(xué)者快速掌握其原理和要領(lǐng)。
基本假設(shè):
(1) 球與板之間沒有打滑現(xiàn)象;
(2) 該系統(tǒng)的自由度是有限的;
(3) 忽略球繞其垂直軸的旋轉(zhuǎn);
(4) 忽略球與板之間的滾動摩擦;
(5) 假設(shè)板在其平衡范圍內(nèi)有很小的運(yùn)動以確保板的傾斜角度大致等于電動機(jī)旋轉(zhuǎn)角度;
(6) 方形板的x-z和y-z平面完全對稱[7]。
根據(jù)以上條件可得出,在4個變量中,板和L形連桿機(jī)構(gòu)具有兩個自由度,與系統(tǒng)的輸入(θm1、θm2、φx和φy)相符。因此,存在以下兩個運(yùn)動學(xué)約束方程,將電動機(jī)旋轉(zhuǎn)角度(θm1、θm2)與板傾斜角度(φx、φy)相關(guān)聯(lián)。
(H1cosφx-H1cosθm1)2+
(1)
(H2sinθm2-H2sinφycosφx+V2)2+(H2cosφy-
(2)
從非線性方程(1)和(2)中可以看出,方形板傾斜角(φx和φy)和相應(yīng)的電動機(jī)旋轉(zhuǎn)角度(θm1和θm2)相關(guān)[8]。因此,可以將式(1)和(2)中的表達(dá)式簡化為如下的線性關(guān)系:
φx=θm1,φy=θm2
(3)
球位置和方形板傾斜角度之間的關(guān)系可用歐拉-拉格朗日方程表示:
(4)
板球系統(tǒng)的4個變量中,2個變量描述球在板上的運(yùn)動,另外2個變量描述方形板的傾斜度。坐標(biāo)xb和yb描述了球的位置,φx和φy描述了方形板的傾斜角,并表示如下:
q1=xb,q2=yb,q3=φx,q4=φy
球的動能Ekb可由轉(zhuǎn)動與平動兩個動能表示:
(5)
式中,m為球的質(zhì)量,球慣性Ib表示為
(6)
則方形板的動能Ekp與球位置(xb,yb)的關(guān)系表示為:
(7)
板球系統(tǒng)的總動能為:
Ek=Ekb+Ekp
(8)
系統(tǒng)勢能由球位置和方形板傾斜角表示為:
Ep=mg(xbsinφx+ybsinφy)
(9)
由此可以得到非線性微分方程,并經(jīng)過推導(dǎo)得到歐拉方程特解
mgxbsinφx=0
(10)
mgybsinφy=0
(11)
(12)
(13)
式(10)和(11)描述了球在方形板上的運(yùn)動,證明球在運(yùn)動時的加速度取決于方形板傾斜的角度和角速度。式(12)和(13)說明了外部驅(qū)動力、球的位置和速度對方形板傾斜動力學(xué)的影響。
式(10)和(12)中特定術(shù)語的解釋如表1所示。
表1 特定術(shù)語解釋
虛擬仿真系統(tǒng)是一種實(shí)現(xiàn)軟、硬件一體化的系統(tǒng),其中Unity3D具有功能模塊化、開發(fā)效率高、畫面質(zhì)量優(yōu)、兼容性好、交互性強(qiáng)等優(yōu)點(diǎn)[9]。本文根據(jù)實(shí)際需求,最終確定了基于Unity3D技術(shù)的虛擬仿真方案。該方案設(shè)計(jì)出的系統(tǒng)實(shí)現(xiàn)了一個高沉浸性與交互性的虛擬仿真環(huán)境,后期與硬件設(shè)備調(diào)試結(jié)合,為學(xué)生提供了一套完整的控制系統(tǒng)實(shí)驗(yàn)教學(xué)體系。
為幫助學(xué)生對平衡板球系統(tǒng)有更直觀的認(rèn)識和理解,在Unity3D中建立了板球系統(tǒng)模型,著力于詳細(xì)展現(xiàn)真實(shí)操作中的各個細(xì)節(jié),使學(xué)生在虛擬實(shí)驗(yàn)過程中提高創(chuàng)新思維,為后續(xù)的實(shí)際實(shí)驗(yàn)操作打下堅(jiān)實(shí)基礎(chǔ)。具體建模內(nèi)容如下:
(1) 方形板。如圖4(a)所示,方形板主體部分由渲染層(黑色表面)、物理碰撞箱(用于物理運(yùn)算)和觸發(fā)器碰撞箱(用于球離開板的檢測)組成。3個部分在此處作為一個整體的板,并保持相對靜止。
(2) 標(biāo)記點(diǎn)。如圖4(b)所示,標(biāo)記點(diǎn)由渲染層(黑底白圈)和觸發(fā)器碰撞箱(白圈區(qū)域,用于球進(jìn)出標(biāo)記點(diǎn)檢測)組成,在方形板區(qū)域均勻分布9個,與方形板保持相對靜止,球在接觸碰撞箱邊緣時會觸發(fā)相應(yīng)事件。
(3) 球。如圖4(c)所示,球模型由渲染層和物理碰撞箱構(gòu)成,同時帶有剛體屬性,該屬性使得Unity物理引擎可對它施加重力,并進(jìn)行慣性運(yùn)算。
(4) 攝像機(jī)。攝像機(jī)用于設(shè)定Unity中的渲染視角。場景中存在3個攝像機(jī),1個保持在球的正上方,1個保持在板的正上方,還有1個可根據(jù)需要使用鼠標(biāo)縮放和移動。2個跟隨相機(jī)使用平行透視(無近大遠(yuǎn)小關(guān)系),1個可移動的主攝像機(jī)使用焦點(diǎn)透視。
(5) 物理模擬設(shè)定。上述模擬中,所有表面摩擦系數(shù)均設(shè)定為0,接觸面摩擦系數(shù)采用最小值,即取兩接觸面中摩擦系數(shù)較小的作為接觸區(qū)域摩擦系數(shù)。在運(yùn)動中,空氣阻力不計(jì),球質(zhì)量設(shè)定為1 g。方形板、攝像機(jī)沒有被附加剛體屬性,不計(jì)質(zhì)量,因此可以任意速度、加速度移動。
基于Unity3D軟件構(gòu)建板球系統(tǒng)元素的模型,在模型中添加物理碰撞箱用于設(shè)置與檢測碰撞。而后編寫腳本,通過腳本指令獲取對象之間的實(shí)時反饋。系統(tǒng)總體框架設(shè)計(jì)完成后,進(jìn)一步探索研究所需關(guān)鍵技術(shù):碰撞檢測、控制程序設(shè)計(jì)、腳本設(shè)計(jì)等。最后通過調(diào)試,并打包發(fā)布。圖5所示為系統(tǒng)開發(fā)流程。
圖5 系統(tǒng)開發(fā)流程
人機(jī)交互界面設(shè)計(jì)和板球系統(tǒng)仿真程序由C#編寫,控制程序通過調(diào)用軟件開發(fā)工具包(Software Development Kit,SDK)相關(guān)函數(shù)來對Unity中場景進(jìn)行控制和檢測??刂瞥绦蚩色@取球坐標(biāo)和方形板在x、y軸轉(zhuǎn)動角度,并可設(shè)定方形板轉(zhuǎn)動角度。球可觸發(fā)以下相應(yīng)事件:球靠近時接觸白圈、球完全進(jìn)入白圈、球離開時接觸白圈、球完全離開白圈、球離開板范圍等。仿真平臺相關(guān)代碼已上傳至github平臺。
Unity場景和腳本:
https://github.com/developer-ken/BallSim
SDK控制程序端:
https://github.com/developer-ken/BallSim-SDK
仿真系統(tǒng)跨進(jìn)程通信如圖6所示,使用用戶數(shù)據(jù)包協(xié)議(User Datagram Protocol,UDP)進(jìn)行跨進(jìn)程通信[10]。在Unity中編寫的腳本監(jiān)聽一個固定的本地端口,并等待數(shù)據(jù)包傳入。SDK端嵌入在控制程序中,監(jiān)聽另一個本地端口,并發(fā)送Ping包通知Unity端已啟動,Unity端腳本收到Ping包后記錄發(fā)送者端口號用于后續(xù)通信,并開始以60 F/s,的速度將當(dāng)前球坐標(biāo)、板角度發(fā)送至SDK端。SDK端在需要時將希望設(shè)定的板角度發(fā)送給Unity端的腳本,對應(yīng)腳本通過調(diào)用Unity引擎的相關(guān)資源修改角度。
圖6 跨進(jìn)程通信示意圖
結(jié)合實(shí)際教學(xué)情況,進(jìn)行虛實(shí)結(jié)合的板球系統(tǒng)實(shí)驗(yàn)課程方案總體設(shè)計(jì),并細(xì)化各部分內(nèi)容,形成一套完整的板球系統(tǒng)實(shí)驗(yàn)教學(xué)體系。教學(xué)方案分為實(shí)驗(yàn)準(zhǔn)備工作、虛擬仿真實(shí)驗(yàn)和實(shí)物調(diào)試考核3個階段,具體內(nèi)容如圖7所示。
圖7 板球系統(tǒng)實(shí)驗(yàn)教學(xué)方案
通過實(shí)驗(yàn)課程設(shè)計(jì),實(shí)現(xiàn)如下教學(xué)目標(biāo):① 鞏固控制系統(tǒng)理論知識;② 掌握C#語言編程方法;③ 通過運(yùn)用仿真軟件掌握板球機(jī)構(gòu)控制原理與控制算法;④ 熟練OpenCV基本操作,掌握OpenCV的圖像處理方法、特征提取與描述;⑤ 在板球?qū)嵨锎罱ㄖ绣憻拰W(xué)生實(shí)操能力。
在進(jìn)行板球系統(tǒng)實(shí)驗(yàn)教學(xué)前,教師在控制原理課程中完成相關(guān)理論知識、控制算法、板球機(jī)構(gòu)及原理、仿真軟件操作流程等理論講授工作,并準(zhǔn)備方形板、小球、OV攝像頭、步進(jìn)電動機(jī)等實(shí)驗(yàn)器材。其中,方形板上均勻分布9個圓形區(qū)域,從左上角起按順序編為1~9號區(qū)域[11]。
學(xué)生下載Unity3D軟件,根據(jù)教師提供的資料包運(yùn)行板球系統(tǒng)虛擬仿真平臺的程序代碼,熟悉仿真平臺的操作流程,調(diào)試并修改代碼以實(shí)現(xiàn)球位選擇、板角傾斜、球的靜止與運(yùn)動等相關(guān)操作。教師根據(jù)學(xué)生的實(shí)際情況,布置板球平衡仿真實(shí)驗(yàn)的基本要求與高階要求(見表2)。
表2 仿真實(shí)驗(yàn)要求
在調(diào)試的過程中,學(xué)生可以運(yùn)用相關(guān)算法(如PID算法、模糊控制等)實(shí)現(xiàn)小球的運(yùn)動和穩(wěn)定控制。仿真平臺可以為學(xué)生提供球坐標(biāo)、方形板旋轉(zhuǎn)角度和x、y軸方向的誤差等信息,在學(xué)生實(shí)驗(yàn)中統(tǒng)計(jì)的小球多個位置信息如表3所示。此外,學(xué)生還可以實(shí)時觀測小球的運(yùn)動情況,圖8所示為仿真過程中球接觸碰撞箱觸發(fā)相應(yīng)事件時,標(biāo)記點(diǎn)邊緣會變?yōu)辄S色。
表3 小球位置信息
在仿真實(shí)驗(yàn)過程中,學(xué)生還可以理解并改進(jìn)控制算法,為控制算法在實(shí)物調(diào)試中的應(yīng)用打下基礎(chǔ)。例如,加入一個新的偏差值定義public float Err_last_last,可以使球更快速穩(wěn)定地到達(dá)目標(biāo)點(diǎn),效果如圖9所示。改進(jìn)后算法小球在4次振蕩后約4.3 s到達(dá)目標(biāo)點(diǎn),改進(jìn)前算法小球在多次振蕩后仍處于發(fā)散狀態(tài)。
圖8 板球系統(tǒng)仿真實(shí)驗(yàn)過程
圖9 算法改進(jìn)效果圖
仿真實(shí)驗(yàn)后,學(xué)生分組進(jìn)行實(shí)物實(shí)操考核。實(shí)物實(shí)操分為板球結(jié)構(gòu)搭建、OpenCV球識別和板球運(yùn)動控制3部分,其中球位的識別與確定是實(shí)現(xiàn)板球平衡的關(guān)鍵。主要步驟為:
(1) RGB轉(zhuǎn)灰度。多通道轉(zhuǎn)單通道,取各通道值的平均值作為該像素單通道的值[12]。
(2) 閾值二值化?;叶葓D轉(zhuǎn)二值圖,設(shè)定合適閾值,大于閾值的記作1,否則記作0。
(3) 邊緣查找。二值圖轉(zhuǎn)輪廓點(diǎn)集,獲取一個二維數(shù)組,其中第一維代表不相連的路徑,第二維代表路徑中的點(diǎn)[13]。
(4) 圓形擬合。對4個角定位點(diǎn)進(jìn)行查找,求出形狀輪廓的非旋轉(zhuǎn)最小外切矩形,以其長寬平均值的1/2作為圓的半徑,掃描形狀輪廓上的點(diǎn),判斷偏離擬合圓的程度,以此計(jì)算一個圖形是圓形的概率。該最小非旋轉(zhuǎn)外切矩形的中心即為擬合圓的圓心。
(5) 計(jì)算。通過線性代數(shù)計(jì)算出一個正好可以同時將4個角定位點(diǎn)移動到4個參考位置的矩陣。
(6) RGB圖變形。使用變形矩陣對原RGB圖進(jìn)行變形,即對圖像矩陣每個坐標(biāo)進(jìn)行處理[14]。
(7) RGB圖二值化。對變形后的RGB圖進(jìn)行二值化[15],為RGB 3個通道各自設(shè)定范圍,在范圍內(nèi)的像素記為1,否則記為0,通過選擇合適的范圍,視野內(nèi)將只有識別目標(biāo)1個亮斑。
(8) 小球識別。獲取畫面中亮斑的坐標(biāo),計(jì)算亮斑的可旋轉(zhuǎn)最小外切矩形,其中心坐標(biāo)記為球坐標(biāo)[16]。最終效果如圖10所示。
(a) 小球識別與標(biāo)記效果
小球識別步驟完成后,學(xué)生可將仿真實(shí)驗(yàn)中調(diào)試的控制算法應(yīng)用于實(shí)物驗(yàn)證。區(qū)別于仿真實(shí)驗(yàn),在板球控制算法實(shí)際驗(yàn)證過程中,會遇到算法適應(yīng)性問題。例如,仿真實(shí)驗(yàn)時板傾斜角度可在短時間內(nèi)發(fā)生較大變化,而在現(xiàn)實(shí)中步進(jìn)電動機(jī)是無法實(shí)現(xiàn)的,且板傾斜角度過大會導(dǎo)致球因慣性滾出方形板。因此,學(xué)生可以在程序中加入板傾斜角度限制代碼,防止板傾斜角度過大的現(xiàn)象發(fā)生。核心代碼如下:
Angle=kp*Err+ki*Integral+kd*(Err-Err_last);
If(Angle>10)
Angle=10f;
if(Angle<-10)
Angle=-10f;
Err_last=Err;
Err_last_last=Err_last;
本文以控制理論實(shí)驗(yàn)課程為研究對象,采用虛擬仿真技術(shù)與板球?qū)嶒?yàn)平臺相結(jié)合的方法,在Unity仿真系統(tǒng)中展現(xiàn)板球系統(tǒng)的結(jié)構(gòu)、原理和操作,并進(jìn)行虛實(shí)結(jié)合的實(shí)驗(yàn)建設(shè)與教學(xué)研究。學(xué)生在實(shí)驗(yàn)過程中不僅能掌握平衡板球控制原理,理解書本學(xué)習(xí)的控制算法,還可以了解機(jī)器視覺等前沿技術(shù),并熟練掌握C#、python等程序語言的編寫,實(shí)現(xiàn)相關(guān)理論知識的傳遞、內(nèi)化、鞏固與拓展,從而彌補(bǔ)傳統(tǒng)仿真軟件與教學(xué)模式的缺陷和不足,調(diào)動學(xué)生參與課程學(xué)習(xí)的積極性和主動性,對控制原理課程建設(shè)與教學(xué)改革具有一定的促進(jìn)作用。