徐 源, 沈建新(南京航空航天大學(xué) 機(jī)電學(xué)院, 南京 210016)
基于OpenGL的翼身調(diào)姿對(duì)接仿真系統(tǒng)開發(fā)①
徐 源, 沈建新
(南京航空航天大學(xué) 機(jī)電學(xué)院, 南京 210016)
針對(duì)一種由三軸定位器構(gòu)成的飛機(jī)翼身調(diào)姿對(duì)接系統(tǒng), 闡述其調(diào)姿對(duì)接流程, 通過機(jī)身、機(jī)翼軌跡規(guī)劃及其相應(yīng)的定位器運(yùn)動(dòng)學(xué)逆解, 實(shí)現(xiàn)其調(diào)姿算法. 采用面向?qū)ο蠹夹g(shù), 在Visual Studio 2010環(huán)境下利用OpenGL(Open Graphic Library)圖形庫函數(shù)開發(fā)翼身調(diào)姿對(duì)接仿真軟件, 結(jié)合定位器運(yùn)動(dòng)學(xué)方程和翼身軌跡規(guī)劃實(shí)現(xiàn)整個(gè)模型在軟件界面中的動(dòng)態(tài)仿真, 仿真結(jié)果能夠直觀反映機(jī)身或機(jī)翼位姿及其動(dòng)態(tài)過程, 驗(yàn)證了翼身調(diào)姿對(duì)接算法的正確性.
軌跡規(guī)劃; 運(yùn)動(dòng)學(xué)逆解; OpenGL; 運(yùn)動(dòng)學(xué)仿真
飛機(jī)翼身調(diào)姿對(duì)接是飛機(jī)總裝的重要組成部分,傳統(tǒng)的裝配方式是利用固定工裝型架定位和人工對(duì)接裝配相結(jié)合的方法, 但其裝配效率低、人工操作困難等缺點(diǎn)已難以適應(yīng)現(xiàn)代飛機(jī)裝配的要求. 不斷提高飛機(jī)裝配柔性化、數(shù)字化、自動(dòng)化的水平已成為飛機(jī)裝配技術(shù)發(fā)展的必然趨勢[1,2].
在飛機(jī)裝配的前期準(zhǔn)備中, 運(yùn)動(dòng)仿真發(fā)揮著至關(guān)重要的作用. 三維環(huán)境中, 借助三維數(shù)字化模型, 采用三維裝配指令規(guī)劃方法, 即可實(shí)現(xiàn)裝配仿真. 提前模擬翼身調(diào)姿對(duì)接過程, 能夠及時(shí)發(fā)現(xiàn)運(yùn)動(dòng)中可能出現(xiàn)的問題, 為優(yōu)化調(diào)姿對(duì)接運(yùn)動(dòng)軌跡、指導(dǎo)工作人員操作提供平臺(tái)[3-5].
對(duì)于飛機(jī)翼身調(diào)姿對(duì)接仿真, 目前通常采用兩種方法, ①使用UG、Pro/E、SolidWorks、CATIA等三維軟件進(jìn)行三維建模和運(yùn)動(dòng)仿真. 但其只能實(shí)現(xiàn)簡單的機(jī)構(gòu)仿真, 難以實(shí)現(xiàn)調(diào)姿對(duì)接過程中飛機(jī)部件在不同姿態(tài)下的調(diào)整, 也無法按照相應(yīng)的軌跡規(guī)劃進(jìn)行仿真.②對(duì)上述三維軟件進(jìn)行二次開發(fā), 雖然三維數(shù)據(jù)是統(tǒng)一的, 不需要進(jìn)行模型的轉(zhuǎn)換, 但必須依賴原有軟件的功能, 不能獨(dú)立運(yùn)行[6-9].
OpenGL是一種強(qiáng)大的圖形編程接口, 具有很好的三維建模能力, 不存在上述問題的限制[10]. 因此為了更直觀的模擬飛機(jī)翼身調(diào)姿對(duì)接現(xiàn)場, 通過嵌入正逆運(yùn)動(dòng)學(xué)、軌跡規(guī)劃等算法, 開發(fā)基于OpenGL和MFC的翼身調(diào)姿對(duì)接虛擬仿真實(shí)驗(yàn)平臺(tái). 運(yùn)用計(jì)算機(jī)圖形學(xué)和虛擬現(xiàn)實(shí)技術(shù), 將整個(gè)平臺(tái)的三維數(shù)據(jù)及調(diào)姿對(duì)接數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的場景和運(yùn)動(dòng), 最終實(shí)現(xiàn)飛機(jī)翼身調(diào)姿對(duì)接三維可視化仿真.
1.1 基于MFC的OpenGL應(yīng)用程序框架
OpenGL是一個(gè)跨編程語言的三維圖形軟件庫,具有較好的兼容性, 可在不同平臺(tái)的操作系統(tǒng)間進(jìn)行移植[11]. 其本質(zhì)為底層圖形庫, 并不提供大量的實(shí)體圖元, 因此無法直接建立場景. 但是通過編寫的轉(zhuǎn)換讀取程序, 可將Pro/E、CATIA等軟件設(shè)計(jì)的模型轉(zhuǎn)換為OpenGL可繪制的頂點(diǎn)數(shù)組, 從而實(shí)現(xiàn)三維模型的讀取和顯示. 翼身調(diào)姿對(duì)接仿真軟件是在Windows系統(tǒng)下開發(fā)的, 但只通過OpenGL并不能實(shí)現(xiàn)可視化的界面管理. MFC是微軟基礎(chǔ)類庫, 以C++類的方式封裝了Windows API, 其中包含很多Windows控件和組件的封裝類[12]. 借助MFC圖形用戶界面的應(yīng)用程序框架, 可以快速完成仿真系統(tǒng)界面的設(shè)計(jì), 提高仿真軟件開發(fā)的效率.
1.2 調(diào)姿對(duì)接系統(tǒng)流程
翼身調(diào)姿對(duì)接包括四個(gè)階段, 分別是: ①機(jī)身調(diào)姿; ②左機(jī)翼調(diào)姿; ③右機(jī)翼調(diào)姿; ④翼身對(duì)合. 機(jī)身調(diào)姿是通過獲取機(jī)身初始位姿和目標(biāo)位姿實(shí)現(xiàn)機(jī)身軌跡的解算, 根據(jù)解算結(jié)果逆解出定位器各軸的驅(qū)動(dòng)量,最終完成機(jī)身調(diào)姿. 左機(jī)翼調(diào)姿和右機(jī)翼調(diào)姿與機(jī)身調(diào)姿類似, 通過軌跡解算和逆解定位器各軸驅(qū)動(dòng)量,實(shí)現(xiàn)機(jī)翼調(diào)姿. 翼身對(duì)合則是在完成機(jī)身和機(jī)翼調(diào)姿后, 機(jī)身固定不動(dòng), 機(jī)翼沿著對(duì)接方向平移, 從而實(shí)現(xiàn)機(jī)翼與機(jī)身的對(duì)合.
無論在哪一個(gè)階段, 都可以將調(diào)姿對(duì)接過程抽象為剛體位姿的調(diào)整問題, 即利用調(diào)姿對(duì)接算法, 最終實(shí)現(xiàn)機(jī)身或機(jī)翼從初始位置到目標(biāo)位置的調(diào)整. 整個(gè)調(diào)整過程的系統(tǒng)圖如圖1所示.
圖1 翼身調(diào)姿對(duì)接系統(tǒng)圖
2.1 定位器運(yùn)動(dòng)學(xué)逆解
機(jī)身與機(jī)翼調(diào)姿機(jī)構(gòu)類似, 均由三個(gè)三軸定位器及其相應(yīng)部件組成, 三個(gè)三軸定位器的基座固定在地面上, 機(jī)身、機(jī)翼則通過吸附在其表面的工藝接頭與定位器鉸接相連, 機(jī)身或機(jī)翼為調(diào)姿對(duì)接運(yùn)動(dòng)平臺(tái).調(diào)姿機(jī)構(gòu)的運(yùn)動(dòng)學(xué)結(jié)構(gòu)簡圖如圖2所示. 其中Ni( i=1,2,3) 為第i個(gè)定位器, 三個(gè)定位器采用3-2-1自由度的方式安排[13], 即N1為三驅(qū)動(dòng)定位器, N2為兩驅(qū)動(dòng)定位器, N3為一驅(qū)動(dòng)定位器.
由于三軸定位器接頭處固接在機(jī)身或機(jī)翼上, 其工藝接頭在機(jī)身或機(jī)翼局部坐標(biāo)系下的位置固定, 定位器的6個(gè)驅(qū)動(dòng)量為工藝接頭在全局坐標(biāo)系下的變化值. 為了獲得機(jī)身、機(jī)翼局局部坐標(biāo)系中工藝接頭在全局坐標(biāo)系下的坐標(biāo), 可以通過坐標(biāo)系原點(diǎn)之間的平移變換和坐標(biāo)系軸的旋轉(zhuǎn)變換來實(shí)現(xiàn).
圖2 調(diào)姿平臺(tái)運(yùn)動(dòng)學(xué)結(jié)構(gòu)簡圖
設(shè)Om為全局坐標(biāo)系, On為機(jī)身或機(jī)翼局部坐標(biāo)系, 局部坐標(biāo)系可由測量調(diào)姿基準(zhǔn)點(diǎn)來確定[14],為第i個(gè)定位器的工藝接頭在全局坐標(biāo)系下的坐標(biāo)值,為第i個(gè)定位器工藝接頭在機(jī)身機(jī)翼局部坐標(biāo)系下的坐標(biāo)值,P為兩坐標(biāo)系原點(diǎn)的差值.
對(duì)于平移變換, 只需要加上坐標(biāo)系原點(diǎn)間的差值即可; 對(duì)于旋轉(zhuǎn)變換, 按照旋轉(zhuǎn)軸旋轉(zhuǎn)先后順序的不同, 可以分為繞X-Y-Z、X-Z-Y、Y-X-Z、Y-Z-X、Z-X-Y、Z-Y-X六種方式, 并且每次旋轉(zhuǎn)都是繞轉(zhuǎn)動(dòng)后的新的軸進(jìn)行變換, 每個(gè)旋轉(zhuǎn)矩陣從左往右乘, 相乘的順序與轉(zhuǎn)動(dòng)的次序相同[15]. 六種方式對(duì)變化結(jié)果并無影響,只是在旋轉(zhuǎn)矩陣的公式上有所不同. 這里采用Z-Y-X歐拉角的順序來描述調(diào)姿部件的旋轉(zhuǎn)變換.
假設(shè)mO和nO重合, 首先將nO繞nz旋轉(zhuǎn)α角度,再繞ny旋轉(zhuǎn)β角度, 最后繞nx旋轉(zhuǎn)γ角度, 可得mO.
即得出旋轉(zhuǎn)變化矩陣為:
式子中c表示cos, s表示sin. 則工藝接頭球心處在全局坐標(biāo)系下的坐標(biāo)為:
第i個(gè)三軸定位器在x,y,z方向的位移表達(dá)式為:
其中eix=(1 0 0)T, eiy=(0 1 0)T, eiz=(001)T,通過上述確定調(diào)姿位姿后, 即可求出各個(gè)驅(qū)動(dòng)位移的理論表達(dá)式.
2.2 五次多項(xiàng)式軌跡規(guī)劃
軌跡規(guī)劃主要是利用多項(xiàng)式、拋物線、樣條線以及不同曲線結(jié)合進(jìn)行規(guī)劃. 在實(shí)際工程中, 常采用三次多項(xiàng)式進(jìn)行軌跡規(guī)劃[16], 能夠得到光滑的位移和速度曲線, 但并不能得到較光滑的加速度曲線. 對(duì)于機(jī)身、機(jī)翼體積質(zhì)量較大的物體, 調(diào)姿過程應(yīng)注重其運(yùn)動(dòng)的平穩(wěn)性, 三次多項(xiàng)式并不能滿足其平穩(wěn)性的要求.通過增加多項(xiàng)式次數(shù)可以提高運(yùn)動(dòng)軌跡的平穩(wěn)性, 能夠得到光滑的加速度曲線, 因此采用五次多項(xiàng)式的方法對(duì)翼身調(diào)姿對(duì)接進(jìn)行軌跡規(guī)劃.
由上一節(jié)坐標(biāo)系變換可知, 對(duì)于機(jī)身或機(jī)翼空間位姿描述, 可由6個(gè)參數(shù)決定, 對(duì)應(yīng)的是機(jī)身、機(jī)翼局部坐標(biāo)系相對(duì)于用于全局坐標(biāo)系的3個(gè)平移量和3個(gè)旋轉(zhuǎn)量p( x, y, z,γ, β ,α) , 通過完成6個(gè)參數(shù)的變化,即可實(shí)現(xiàn)翼身調(diào)姿對(duì)接每個(gè)階段的調(diào)整.
對(duì)于上述6個(gè)位姿參數(shù), 每個(gè)參數(shù)的變化均按照五次多項(xiàng)式樣條進(jìn)行擬合, 五次多項(xiàng)式函數(shù)中共有6個(gè)未知數(shù), 對(duì)其分別進(jìn)行一階導(dǎo)、二階導(dǎo)的求解, 可得到機(jī)身和機(jī)翼調(diào)姿過程中速度、加速度關(guān)于時(shí)間t的函數(shù):
以任意一個(gè)位姿參數(shù)為例. 初始位姿時(shí)間和目標(biāo)位姿時(shí)間為0、T, 對(duì)應(yīng)的角變化或位移為l0和lT, 這些值均已知, 且滿足條件:
對(duì)于多項(xiàng)式的起點(diǎn)和終點(diǎn), 還需滿足二階連續(xù)的要求, 即起點(diǎn)和終點(diǎn)的速度及加速度要滿足條件:
在實(shí)際的工程實(shí)踐中, 調(diào)姿對(duì)接的初始速度和到達(dá)目標(biāo)位姿的終止速度都應(yīng)為0. 另外, 為了使得調(diào)姿運(yùn)動(dòng)光滑連續(xù), 還應(yīng)滿足每個(gè)階段的初始加速度和到達(dá)目標(biāo)位姿的終止加速度為0. 將式(7)、(8)中的六個(gè)條件代入公式(4)、(5)、(6), 聯(lián)立即可以解出五次多項(xiàng)式的六個(gè)系數(shù), 得出軌跡方程為:
3.1 軟件設(shè)計(jì)步驟
首先利用Visual Studio 2010 中MFC模塊建立單文檔應(yīng)用程序, 并加載OpenGL庫中相應(yīng)的.dll文件、.lib文件和.h文件, 完成工程項(xiàng)目的基本設(shè)置[17].
其次利用OpenGL庫函數(shù)完成三維圖形應(yīng)用環(huán)境的初始化. 通過調(diào)用MFC中Picture類, 加載相應(yīng)控件,實(shí)現(xiàn)可視化界面的顯示.
在OpenGL中完成機(jī)身、機(jī)翼和定位器模型的繪制較為復(fù)雜, 可以利用三維軟件CATIA設(shè)計(jì)相關(guān)的模型, 再轉(zhuǎn)換為OBJ 3D模型文件格式. 通過編寫函數(shù)glmReadOBJ()和LoadModelsFromFiles()實(shí)現(xiàn)OBJ格式模型的讀入和顯示. 由于定位器接頭相對(duì)于機(jī)身或者機(jī)翼的位置固定, 在程序中通過添加幾何約束關(guān)系來實(shí)現(xiàn)各個(gè)部件有規(guī)律的運(yùn)動(dòng).
為了實(shí)現(xiàn)翼身對(duì)接仿真各個(gè)角度及各個(gè)位置的觀察, 通過在仿真軟件中添加Button按鈕和鼠標(biāo)響應(yīng),實(shí)現(xiàn)可視化仿真中調(diào)姿對(duì)接環(huán)境的平移和旋轉(zhuǎn).
3.2 雙緩沖技術(shù)
為了能夠連續(xù)動(dòng)態(tài)的顯示整個(gè)翼身調(diào)姿對(duì)接過程,整個(gè)Picture繪圖控件會(huì)不斷的通過清除背景和重新繪制而刷新, 但這會(huì)造成仿真界面的閃爍, 利用雙緩沖技術(shù)可以解決這一問題.
建立SwapBuffers()雙緩沖區(qū)(前臺(tái)緩沖區(qū)和后臺(tái)緩沖區(qū))[18], 前臺(tái)緩沖區(qū)用來顯示, 后臺(tái)緩沖區(qū)則在內(nèi)存中, 每當(dāng)調(diào)姿對(duì)接出現(xiàn)變化時(shí), 先將幾何圖形的變換操作在后臺(tái)緩沖區(qū)進(jìn)行, 再將進(jìn)行的結(jié)果復(fù)制到前臺(tái)緩沖區(qū)屏幕上, 完成顯示. 讓使用者看到的是每一幀的調(diào)姿對(duì)接場景, 而不是調(diào)姿對(duì)接場景的繪制過程,從而避免刷新而導(dǎo)致畫面閃爍的問題.
3.3 軟件界面效果
仿真軟件包含四個(gè)階段的調(diào)姿對(duì)接部分, 每個(gè)階段還包含數(shù)據(jù)的存儲(chǔ)和導(dǎo)入. 部分仿真軟件效果圖如圖3所示.
圖3 調(diào)姿仿真軟件界面效果圖
3.4 軌跡分析
由于機(jī)身調(diào)姿與機(jī)翼調(diào)姿類似, 軌跡分析以右機(jī)翼調(diào)姿和翼身對(duì)合為例, 假設(shè)對(duì)應(yīng)的右機(jī)翼的初始位姿為(-540,1350,-200,, 目標(biāo)位姿為(-500,1300,-50,0,0,0). 調(diào)姿時(shí)間共25s, 其中右機(jī)翼旋轉(zhuǎn)調(diào)姿時(shí)間為10s, 右機(jī)翼位置調(diào)整時(shí)間為5s, 翼身對(duì)合時(shí)間為10s, 且每次調(diào)姿過程都利用五次多項(xiàng)式進(jìn)行插值計(jì)算, 則可獲得右機(jī)翼上一點(diǎn)的運(yùn)動(dòng)軌跡如圖4所示. 此軌跡是一條光滑連續(xù)的空間曲線, 滿足平穩(wěn)性的要求. 同時(shí)根據(jù)上述定位器驅(qū)動(dòng)軸逆解, 求出相應(yīng)的驅(qū)動(dòng)量, 如圖5所示. 從位移圖中可以看出,在0~15s的時(shí)間內(nèi), (a)~(f)為右機(jī)翼的調(diào)姿與位置調(diào)整;在15~25s時(shí)間, (a)為翼身對(duì)合調(diào)整, 其余(b)~(f)驅(qū)動(dòng)位移量位未發(fā)生變化. 結(jié)果表明, 六個(gè)驅(qū)動(dòng)軸接頭處的節(jié)點(diǎn)位移軌跡是連續(xù)的, 且運(yùn)動(dòng)位移量均在各軸的行程范圍之內(nèi).
圖4 飛機(jī)部件上一點(diǎn)軌跡圖
圖5 定位器驅(qū)動(dòng)軸位移軌跡曲線
仿真系統(tǒng)成功的利用MFC和OpenGL建立應(yīng)用程序框架, 并借助三軸定位器模型和飛機(jī)部件模型搭建了翼身調(diào)姿對(duì)接仿真系統(tǒng), 采用五次多項(xiàng)式的軌跡規(guī)劃方法實(shí)現(xiàn)翼身調(diào)姿對(duì)接的平穩(wěn)運(yùn)動(dòng). 三維仿真系統(tǒng)能夠?qū)崟r(shí)動(dòng)態(tài)顯示調(diào)姿對(duì)接的運(yùn)動(dòng)狀況, 運(yùn)行可靠,從結(jié)果看仿真達(dá)到了預(yù)期效果, 為實(shí)際翼身調(diào)姿對(duì)接提供指導(dǎo)依據(jù).
1 鄒冀華,劉志存,范玉青,等.大型飛機(jī)部件數(shù)字化對(duì)接裝配技術(shù)研究.計(jì)算機(jī)集成制造系統(tǒng),2007,13(7):1367–1373.
2 王仲奇,楊元.飛機(jī)裝配的數(shù)字化與智能化.航空制造技術(shù),2016,(5):36–41.
3 王瑞利,丁慶增.基于OpenGL的3-RSS/S并聯(lián)機(jī)器人動(dòng)態(tài)仿真.精密制造與自動(dòng)化,2015,(3):37–39.
4 劉春,張洪瑞,史紅祥等.裝配仿真技術(shù)及其在飛機(jī)裝配中的應(yīng)用.航空制造技術(shù),2015,485(15):10–13.
5 李惠,張林鍹,肖田元,等.基于仿真控制的飛機(jī)大部件對(duì)接原型系統(tǒng)研究.航空制造技術(shù),2013,(22):90–94.
6 陳琳,戴駿,馮俊杰,等.基于OpenGL的多機(jī)器人仿真環(huán)境.組合機(jī)床與自動(dòng)化加工技術(shù),2014,(9):10–13.
7 謝瑩瑩,鮑凱,馬曉光,等.基于DELMIA二次開發(fā)的轉(zhuǎn)向架三維裝配仿真系統(tǒng)的開發(fā).機(jī)械制造,2015,53(4):55–57.
8 屈力剛,苑俊超,白金蘭,等.前機(jī)身裝配平臺(tái)定位單元離線軌跡生成.機(jī)床與液壓,2014,(22):33–35,49.
9 付兵,胡飛飛,等.基于OpenGL的多機(jī)器人仿真實(shí)驗(yàn)平臺(tái)研究及實(shí)現(xiàn).組合機(jī)床與自動(dòng)化加工技術(shù),2016,(1): 20–23.
10閆林林,徐方,賈凱,等.Delta機(jī)器人運(yùn)動(dòng)控制及圖形軌跡的動(dòng)態(tài)仿真.計(jì)算機(jī)工程與設(shè)計(jì),2015,(8):2196–2200.
11 Richhard S. Wright, Lipchak B, Haemel N. 張琪,付飛,譯.OpenGL 超級(jí)寶典.北京:人民郵電出版社,2010.
12 祁若龍,周維佳,劉金國等.VC平臺(tái)下機(jī)器人虛擬運(yùn)動(dòng)控制及3D運(yùn)動(dòng)仿真的有效實(shí)現(xiàn)方法.機(jī)器人,2013,35(5): 594–599.
13 黃翔,李瀧杲,陳磊,等.民用飛機(jī)大部件數(shù)字化對(duì)接關(guān)鍵技術(shù).航空制造技術(shù),2010,(3):54–56.
14 董一巍,李曉琳,趙奇,等.大型飛機(jī)研制中的若干數(shù)字化智能裝配技術(shù).航空制造技術(shù),2016,(1):58–63.
15 姬金祖,束長勇,黃沛霖等.歐拉角在飛行航跡仿真中的應(yīng)用.南京航空航天大學(xué)學(xué)報(bào),2014,46(2):218–224.
16 樂英,岳艷波.六自由度機(jī)器人運(yùn)動(dòng)學(xué)仿真及軌跡規(guī)劃.組合機(jī)床與自動(dòng)化加工技術(shù),2016,4:89–92.
17 和克智,任鵬剛,許秦蓉,等.OpenGL編程技術(shù)詳解.北京:化學(xué)工業(yè)出版社,2010.
18 葉舸,田兆鋒,閆楚良等.基于OpenGL的飛機(jī)飛行實(shí)測數(shù)據(jù)可視化研究.航空學(xué)報(bào),2011,32(6):1050–1057.
Development of Wing-Fuselage Adjustment-Docking Simulation System Based on OpenGL
XU Yuan, SHENG Jian-Xin
(College of Mechanical and Electrical Engineering, Nanjing University of Aeronautics & Astronautics, Nanjing 210016, China)
For a kind of system of aircraft wing-fuselage adjustment-docking which is composed of 3-axis positioners, this paper introduces the process of adjustment-docking, achieves adjustment-docking algorithm by planning trajectory of the wing-fuselage and solving the equation of inverse kinematic. The simulation software of wing-fuselage adjustment-docking is developed by using of object oriented technology and OpenGL library in environment of Visual Studio 2010. The dynamic simulation of the whole models in the software interface is accomplished by combining the kinematic equation of the positioner and the trajectory planning of the wing-fuselage. Results of simulation can be used to display the position and dynamic process of the wing and fuselage. It proves the correctness of adjustment-docking algorithm.
trajectory planning; inverse kinematic; OpenGL; kinematics simulation
航空科學(xué)基金(2013ZE52067)
2016-07-24;收到修改稿時(shí)間:2016-08-29
10.15888/j.cnki.csa.005702