崔淑慧, 閆文民, 武彥偉, 王目凱, 王兆凱
(1. 北京航天控制儀器研究所, 北京 100039;2. 中國(guó)特種設(shè)備檢測(cè)研究院, 北京 100026)
平臺(tái)式慣性導(dǎo)航系統(tǒng)利用內(nèi)部框架建立起隔離載體角運(yùn)動(dòng)的物理平臺(tái), 進(jìn)而建立一個(gè)與載體角運(yùn)動(dòng)無(wú)關(guān)的導(dǎo)航坐標(biāo)系, 為加速度和姿態(tài)角的測(cè)量提供坐標(biāo)基準(zhǔn)。 平臺(tái)內(nèi)部框架狀態(tài)是保證平臺(tái)式慣導(dǎo)系統(tǒng)導(dǎo)航與制導(dǎo)精度的基礎(chǔ), 因此框架轉(zhuǎn)動(dòng)狀態(tài)是測(cè)試人員關(guān)注的重點(diǎn)。 然而平臺(tái)內(nèi)部結(jié)構(gòu)復(fù)雜, 整機(jī)封閉測(cè)試與培訓(xùn)過(guò)程中, 內(nèi)部框架轉(zhuǎn)動(dòng)情況及相對(duì)位置僅能通過(guò)框架角信息進(jìn)行想象, 缺乏直觀性, 導(dǎo)致現(xiàn)場(chǎng)討論不便, 對(duì)現(xiàn)場(chǎng)排故和培訓(xùn)效果造成一定影響。
視景仿真技術(shù)可以形象、 直觀、 實(shí)時(shí)地模擬空間物體的運(yùn)動(dòng), 被廣泛應(yīng)用于機(jī)器人跟蹤與模擬訓(xùn)練、 導(dǎo)彈閉環(huán)校射、 船舶航行等領(lǐng)域。 開放式圖形庫(kù)(Open Graphics Library, OpenGL) 具有強(qiáng)大的底層繪圖功能且開發(fā)的應(yīng)用程序可移植性強(qiáng),Qt 內(nèi)部封裝OpenGL 模塊可快速構(gòu)建應(yīng)用程序, 因此Qt/OpenGL 被廣泛應(yīng)用于可視化平臺(tái)的開發(fā)。王曉輝等[1]基于自主研制的HAJIF 系統(tǒng)開發(fā)了一種專用有限元軟件GUI 模塊, 該模塊利用Qt 技術(shù)的信號(hào)槽機(jī)制實(shí)現(xiàn)數(shù)據(jù)的高效率通信, 提高人機(jī)交互效率, 同時(shí)利用OpenGL 圖形展示功能將有HAJIF 限元分析過(guò)程可視化。 楊義波等[2]利用Qt/OpenGL 開發(fā)了針對(duì)挖掘機(jī)的三維模型可視化軟件, 通過(guò)建立動(dòng)力學(xué)模型結(jié)合測(cè)量設(shè)備, 獲取各部件間運(yùn)動(dòng)狀態(tài)及末端姿態(tài), 并基于分層控制實(shí)現(xiàn)了挖掘機(jī)運(yùn)動(dòng)的實(shí)時(shí)展示。 馮志強(qiáng)等[3]利用Qt/OpenGL 技術(shù)開發(fā)了具有友好用戶界面的自主CAE平臺(tái), 實(shí)現(xiàn)了跨系統(tǒng)用戶界面顯示及多系統(tǒng)間數(shù)據(jù)共享。 賈康等[4]針對(duì)螺旋特征加工問(wèn)題, 提出了一種基于OpenGL 可視化編程的將空間幾何問(wèn)題映射于圖像空間的求解方法。 XIONG 等[5]利用人機(jī)交互方法基于Qt 框架設(shè)計(jì)了一套跨平臺(tái)與可視化的地質(zhì)模型軟件, 基于OpenGL 將3D 模型實(shí)時(shí)顯示,該軟件適用于石油、 燃?xì)庖约暗V石資源開采。ALLWRIGHT 等[6]針對(duì)多機(jī)器人構(gòu)建硬件昂貴且耗時(shí)的情況, 利用Qt/OpenGL 并基于硬件測(cè)試數(shù)據(jù)實(shí)現(xiàn)了多機(jī)器人運(yùn)動(dòng)的可視化。 HU 等[7]針對(duì)機(jī)床加工和數(shù)字化制造車間管理無(wú)法連接的問(wèn)題, 用Qt/OpenGL 設(shè)計(jì)了基于現(xiàn)場(chǎng)環(huán)境采集的可視化三維模型顯示終端監(jiān)控系統(tǒng), 可實(shí)時(shí)顯示模型動(dòng)作和動(dòng)態(tài)數(shù)據(jù)。 可見, Qt/OpenGL 技術(shù)可以實(shí)現(xiàn)多種工程機(jī)械運(yùn)動(dòng)的可視化, 但是慣性平臺(tái)內(nèi)部框架運(yùn)動(dòng)特性和測(cè)試環(huán)境與上述研究有所不同, 同時(shí)其可視化系統(tǒng)的相關(guān)開發(fā)尚未見報(bào)道。
因此, 為增強(qiáng)平臺(tái)測(cè)試與培訓(xùn)過(guò)程中高效、舒適的人機(jī)交互功能, 提高平臺(tái)調(diào)試、 排故過(guò)程中的交流效率, 基于Qt/OpenGL 開發(fā)了慣性平臺(tái)內(nèi)部運(yùn)動(dòng)部件三維視景仿真系統(tǒng)。 探索三維視景仿真技術(shù)在平臺(tái)系統(tǒng)中的應(yīng)用方法, 研究平臺(tái)數(shù)字模型與硬件的接口調(diào)試技術(shù)以及模型高效的實(shí)時(shí)/離線驅(qū)動(dòng)技術(shù), 具有重要的科學(xué)與應(yīng)用價(jià)值。
平臺(tái)式慣導(dǎo)系統(tǒng)框架是隔離平臺(tái)與載體角運(yùn)動(dòng)和保證慣性空間穩(wěn)定的關(guān)鍵部件, 三軸慣性平臺(tái)內(nèi)部框架結(jié)構(gòu)如圖1 所示。 如圖1(a)[8]所示, 整個(gè)框架通過(guò)外環(huán)架的軸端組件固定于基座上, 內(nèi)環(huán)架通過(guò)軸端組件固定于外環(huán)架上, 其軸線與外環(huán)架軸線正交; 臺(tái)體也通過(guò)軸端組件固定于內(nèi)環(huán)架上, 臺(tái)體軸線與另外兩個(gè)框架軸線正交; 三個(gè)軸端電機(jī)協(xié)同作用, 將臺(tái)體穩(wěn)定在慣性空間。 通常臺(tái)體上安裝三個(gè)正交方向的加速度計(jì)和三個(gè)正交方向的陀螺儀, 分別測(cè)量載體在三個(gè)正交方向的加速度和角加速度, 進(jìn)而通過(guò)解算獲取載體位置信息。 平臺(tái)內(nèi)部各框架轉(zhuǎn)動(dòng)相互耦合, 各框架位置狀態(tài)難以直接描述。 平臺(tái)內(nèi)部框架實(shí)物圖如圖1(b)[9]所示, 可見慣性平臺(tái)內(nèi)部各儀表和電氣線路較多且結(jié)構(gòu)復(fù)雜。

圖1 慣性平臺(tái)內(nèi)部框架結(jié)構(gòu)Fig.1 Internal frame structure of the inertial platform
為更好地描述慣性平臺(tái)內(nèi)部框架的位置和運(yùn)動(dòng)狀態(tài), 建立如圖2 所示的坐標(biāo)系。 框架中心為原點(diǎn)O, 慣性坐標(biāo)系O-XYZ各坐標(biāo)軸方向設(shè)置如下:靜止零位狀態(tài)下, 臺(tái)體軸線為X軸, 內(nèi)環(huán)架軸線為Y軸, 外環(huán)架軸線為Z軸。 設(shè)置隨動(dòng)坐標(biāo)系OX1Y1Z1固連于臺(tái)體上, 以臺(tái)體中心為坐標(biāo)原點(diǎn),以臺(tái)體軸線為坐標(biāo)系的X1軸。 設(shè)置隨動(dòng)坐標(biāo)系OX2Y2Z2固連于內(nèi)環(huán)架上, 以內(nèi)環(huán)架軸線為坐標(biāo)系的Y2軸。 設(shè)置隨動(dòng)坐標(biāo)系O-X3Y3Z3固連于外環(huán)架, 以外環(huán)架軸線為坐標(biāo)系的Z3軸。 各坐標(biāo)系軸線的正向均指向軸端電機(jī), 各框架轉(zhuǎn)動(dòng)的正向符合右手定則, 各框架轉(zhuǎn)角范圍為[0°,360°]。

圖2 框架坐標(biāo)系Fig.2 Coordinate systems of the frames
由慣性平臺(tái)結(jié)構(gòu)與工作特性可知, 外環(huán)架的轉(zhuǎn)動(dòng)會(huì)依次對(duì)內(nèi)部框架運(yùn)動(dòng)產(chǎn)生影響。 外環(huán)架轉(zhuǎn)動(dòng)帶動(dòng)內(nèi)環(huán)架和臺(tái)體轉(zhuǎn)動(dòng), 內(nèi)環(huán)架轉(zhuǎn)動(dòng)帶動(dòng)臺(tái)體轉(zhuǎn)動(dòng), 而反之內(nèi)環(huán)架轉(zhuǎn)動(dòng)不影響外環(huán)架位置, 臺(tái)體轉(zhuǎn)動(dòng)不影響內(nèi)環(huán)架與外環(huán)架位置。 各框架的運(yùn)動(dòng)規(guī)律可用旋轉(zhuǎn)矩陣變換描述, 外環(huán)架繞Z3軸轉(zhuǎn)動(dòng)θ3角度后, 其上的點(diǎn)在O-XYZ坐標(biāo)系中的位置為
內(nèi)環(huán)架繞Y2軸轉(zhuǎn)動(dòng)θ2角度后, 其上的點(diǎn)在OXYZ坐標(biāo)系中的位置為
臺(tái)體軸繞X1軸轉(zhuǎn)動(dòng)θ1角度后, 其上的點(diǎn)在OXYZ坐標(biāo)系中的位置為
慣性平臺(tái)數(shù)字模型離線/在線驅(qū)動(dòng)技術(shù)的實(shí)現(xiàn)主要包括三個(gè)方面: 三維數(shù)字樣機(jī)顯示和運(yùn)動(dòng)環(huán)境搭建、 樣機(jī)內(nèi)部框架準(zhǔn)確高效驅(qū)動(dòng)方法以及三維模擬環(huán)境與實(shí)際慣性平臺(tái)接口技術(shù)。 主要實(shí)現(xiàn)途徑為: 首先, 基于三維CAD 軟件Creo 建立模型參數(shù)和計(jì)算機(jī)圖形學(xué)理論, 利用OpenGL 圖形庫(kù)函數(shù)搭建三維數(shù)字樣機(jī)的顯示和運(yùn)動(dòng)特性環(huán)境; 在此基礎(chǔ)上, 將復(fù)雜平臺(tái)結(jié)構(gòu)進(jìn)行輕量化處理, 并采用OpenGL 雙緩沖機(jī)制的方式實(shí)現(xiàn)平臺(tái)內(nèi)部框架轉(zhuǎn)動(dòng)的實(shí)時(shí)驅(qū)動(dòng); 然后, 研究數(shù)據(jù)傳輸機(jī)制和模型驅(qū)動(dòng)方法, 實(shí)現(xiàn)三維數(shù)字樣機(jī)與實(shí)際平臺(tái)接口技術(shù); 最后, 完成軟件與硬件的連接、 數(shù)據(jù)信號(hào)的采集與處理以及數(shù)據(jù)的實(shí)時(shí)傳輸, 進(jìn)而驅(qū)動(dòng)三維模型運(yùn)動(dòng)與顯示。
數(shù)字樣機(jī)顯示與運(yùn)動(dòng)環(huán)境搭建的技術(shù)途徑如圖3 所示。 首先通過(guò)三維CAD 軟件(以Creo 為例)對(duì)慣性平臺(tái)進(jìn)行結(jié)構(gòu)設(shè)計(jì), 建立平臺(tái)的三維模型。通過(guò)模型數(shù)據(jù)創(chuàng)建Creo 模型與OpenGL 的接口, 基于OpenGL 對(duì)3D 平臺(tái)模型進(jìn)行重繪。 利用計(jì)算機(jī)圖形學(xué)的變換關(guān)系, 實(shí)現(xiàn)模型框架的轉(zhuǎn)動(dòng)及動(dòng)畫顯示。

圖3 三維模型可視化環(huán)境搭建途徑Fig.3 Approach to building a 3D model visualization environment
利用Creo 三維軟件建立慣性平臺(tái)三維CAD 模型, 模型主要包括外環(huán)架、 內(nèi)環(huán)架、 臺(tái)體等轉(zhuǎn)動(dòng)部件以及平臺(tái)基座。 OpenGL 中無(wú)描述復(fù)雜形體的函數(shù), 只能通過(guò)點(diǎn)、 線、 多邊形等基本圖形元素來(lái)建立物體模型, 因此將Creo 中創(chuàng)建的模型分別導(dǎo)出為OBJ 格式文件及其對(duì)應(yīng)MTL 文件: OBJ 文件會(huì)以三角形單元信息保存模型結(jié)構(gòu)信息, 如圖4所示; MTL 文件保存模型的材質(zhì)信息。 其中, OBJ文件存儲(chǔ)的每行數(shù)據(jù)以v、 vn、 vt、 f 等字母開頭,分別表示節(jié)點(diǎn)坐標(biāo)、 法向向量、 uv 貼圖坐標(biāo)以及組成三角頂點(diǎn)的節(jié)點(diǎn)編號(hào); MTL 文件中模型的材質(zhì)信息以“Kd” 開頭。 通過(guò)不同數(shù)據(jù)格式即可定義數(shù)據(jù)載入函數(shù), 實(shí)現(xiàn)模型數(shù)據(jù)的讀取。

圖4 箱體模型網(wǎng)格劃分Fig.4 Meshing of the box
Qt 對(duì)OpenGL 進(jìn)行了多層封裝, 環(huán)境模型的搭建采用Qt 開發(fā)平臺(tái)自帶的OpenGL 實(shí)現(xiàn)。 在Open-GL 中, 需要將三維模型所在的局部空間經(jīng)過(guò)一系列坐標(biāo)變換轉(zhuǎn)換到屏幕空間進(jìn)行顯示, 此過(guò)程的數(shù)學(xué)表達(dá)式如下
具體過(guò)程如圖5 所示: 三維模型原始坐標(biāo)數(shù)據(jù)Vlocal通過(guò)左乘模型矩陣Mmodel將原始數(shù)據(jù)轉(zhuǎn)換到世界坐標(biāo)系下, 通常采用函數(shù)void QMatrix4x4∷rotate(float angle, const QVector3D &vector)創(chuàng)建模型矩陣Mmodel, 變量vector 為模型旋轉(zhuǎn)軸, angle 為模型旋轉(zhuǎn)角度; 然后左乘以視圖矩陣Mview進(jìn)一步將數(shù)據(jù)轉(zhuǎn)換到觀察坐標(biāo)系下, 視圖矩陣由函數(shù)void QMatrix4x4∷lookAt(const QVector3D &eye, const QVector3D ¢er, const QVector3D &up)創(chuàng)建, 參數(shù)依次為照相機(jī)所在位置向量、 模型中心位置向量以及自定義的up 向量, 參數(shù)一和參數(shù)三的叉乘為觀察坐標(biāo)系的Y向; 最后通過(guò)投影矩陣Mprojection變換到OpenGL 裁剪坐標(biāo)系下, 進(jìn)而在屏幕坐標(biāo)系下正常顯示模型, 投影變換采用正射投影函數(shù)void QMatrix4x4∷ortho(float left, float right, float bottom,float top, float nearPlane, float farPlane)構(gòu)造, 前兩個(gè)參數(shù)定義了平截頭體的左右坐標(biāo), 第三、 第四個(gè)參數(shù)定義了平截頭體的底部和上部, 最后兩個(gè)參數(shù)定義了近平面和遠(yuǎn)平面的距離。 此外, 還需設(shè)置光照條件將三維物體映射到二維屏幕上。

圖5 OpenGL 中模型顯示坐標(biāo)變換過(guò)程Fig.5 Coordinate translation process of model display in OpenGL
創(chuàng)建繼承自O(shè)penGL 原有QOpenGLWidget 和QOpenGLExtraFunctions 類的子類MyOpenGLWidget,在其構(gòu)造函數(shù)explicit MyOpenGLWidget()中調(diào)用自定義函數(shù)bool loadObj2()和bool loadMTL(), 載入三維模型與材質(zhì)文件節(jié)點(diǎn)數(shù)據(jù), 然后通過(guò)重載以下三個(gè)函數(shù)實(shí)現(xiàn)模型的繪制:
void initializeGL() / /OpenGL 進(jìn)行初始化函數(shù)
void resizeGL(int w, int h) / /3D 模型視圖窗口設(shè)置
void paintGL() / /渲染環(huán)境及模型繪制
在void initializeGL()函數(shù)中進(jìn)行OpenGL 三維建模環(huán)境初始化: 首先在初始化函數(shù)中創(chuàng)建并綁定頂點(diǎn)數(shù)組對(duì)象VAO 和頂點(diǎn)緩沖對(duì)象VBO; 其次通過(guò)Shader 類的構(gòu)造函數(shù)實(shí)現(xiàn)著色器的創(chuàng)建并添加頂點(diǎn)和片段著色器; 然后在void resizeGL()函數(shù)中對(duì)OpenGL 視圖窗口進(jìn)行設(shè)置, 設(shè)置窗口尺寸及模型正射投影; 最后在void paintGL() 函數(shù)中對(duì)模型環(huán)境進(jìn)行渲染并繪圖, 函數(shù)邏輯流程如圖6所示。

圖6 void paintGL()函數(shù)流程圖Fig.6 Flowchart of void paintGL()
慣性平臺(tái)在線測(cè)試過(guò)程的數(shù)據(jù)采樣周期短(只有幾個(gè)毫秒), 而正常的可視化動(dòng)畫刷新頻率較低。 為盡可能跟隨硬件數(shù)據(jù)采集頻率, 通過(guò)對(duì)平臺(tái)系統(tǒng)內(nèi)部復(fù)雜結(jié)構(gòu)進(jìn)行輕量化處理來(lái)增加動(dòng)畫刷新頻率。 利用OpenGL 對(duì)三維平臺(tái)模型進(jìn)行重構(gòu), 將平臺(tái)非重要部件進(jìn)行線條化或點(diǎn)化輕量處理, 同時(shí)將基座、 框架、 臺(tái)體及臺(tái)體上儀表作三角形面片簡(jiǎn)化顯示處理。 針對(duì)平臺(tái)內(nèi)部結(jié)構(gòu)復(fù)雜、幾何數(shù)據(jù)較多的特征, 通過(guò)采用點(diǎn)線顯示的方式來(lái)展示模型的主要運(yùn)動(dòng)部件及其運(yùn)動(dòng)特性。 完整的平臺(tái)結(jié)構(gòu)包含各種緊固件、 電路板以及多種階梯面、 階梯孔等, 這類結(jié)構(gòu)的建模數(shù)據(jù)較多, 但對(duì)觀察內(nèi)部框架的運(yùn)動(dòng)無(wú)影響, 這類結(jié)構(gòu)可以忽略。 然而, 為保證內(nèi)部結(jié)構(gòu)的真實(shí)性, 需將部件的整體結(jié)構(gòu)留存。
在模型輕量化的基礎(chǔ)上, 通過(guò)OpenGL 雙緩沖機(jī)制實(shí)現(xiàn)實(shí)時(shí)高速的動(dòng)畫顯示。 在動(dòng)畫高頻刷新時(shí), 雙緩沖技術(shù)保證了每一幀的完整展示, 通過(guò)提供兩個(gè)完整的緩存硬件或軟件, 使畫圖和顯示在兩個(gè)緩存中分別完成, 每畫完一幀交換2 個(gè)緩存指針。 實(shí)現(xiàn)方法為: 在OpenGL 的glutInitDisplay-Mode(glut_double|glut_single)中設(shè)置glut_double 來(lái)標(biāo)識(shí)雙緩沖, glutSwapBuffers() 繪制完成后提交“畫板”。 在最新的OpenGL 圖形庫(kù)中, 該機(jī)制可自動(dòng)實(shí)行。
OpenGL 中模型運(yùn)動(dòng)的實(shí)現(xiàn)依靠坐標(biāo)的變換,通過(guò)定時(shí)器不斷刷新屏幕來(lái)實(shí)現(xiàn)模型位置的更新,進(jìn)而實(shí)現(xiàn)各框架轉(zhuǎn)動(dòng)動(dòng)畫。 設(shè)置定時(shí)器刷新周期為4 ms, 利用槽函數(shù)進(jìn)行響應(yīng), 重復(fù)更新模型,實(shí)現(xiàn)流程偽代碼如下:

框架運(yùn)動(dòng)的動(dòng)畫實(shí)現(xiàn)流程如圖7 所示。

圖7 框架運(yùn)動(dòng)動(dòng)畫實(shí)現(xiàn)流程圖Fig.7 Flowchart of implementation for frame motion animation
三維模擬環(huán)境與實(shí)際平臺(tái)接口主要是測(cè)試數(shù)據(jù)的傳輸, 三維模型運(yùn)動(dòng)特性數(shù)據(jù)(主要包括框架轉(zhuǎn)動(dòng)速度、 轉(zhuǎn)動(dòng)角度、 轉(zhuǎn)動(dòng)方向等參數(shù))通過(guò)外部輸入, 然后將讀取的數(shù)據(jù)賦值給程序內(nèi)部的動(dòng)畫驅(qū)動(dòng)參數(shù)來(lái)驅(qū)動(dòng)模型運(yùn)動(dòng)。 外部輸入方式可以為離線數(shù)據(jù)或?qū)崟r(shí)數(shù)據(jù)。 離線數(shù)據(jù)的輸入可以通過(guò)Qt/OpenGL 的數(shù)據(jù)讀取功能直接讀取已保存的數(shù)據(jù)文件實(shí)現(xiàn)。 實(shí)時(shí)數(shù)據(jù)的讀取方式有兩種: 1)讀取實(shí)時(shí)保存的數(shù)據(jù)文件。 該方法的優(yōu)點(diǎn)是只需對(duì)數(shù)據(jù)文件進(jìn)行相關(guān)的篩選與讀取操作, 不受硬件通信協(xié)議的限制, 通用性強(qiáng); 缺點(diǎn)是需不斷地刷新數(shù)據(jù)文件, 讀取效率較低。 2)直接讀取串口數(shù)據(jù)。 該方法的優(yōu)點(diǎn)是讀取效率高, 但是受通信協(xié)議的影響, 若通信協(xié)議改變, 需重新設(shè)定串口讀取方式,同時(shí)需要測(cè)試過(guò)程預(yù)留串口。
為更好地兼容原平臺(tái)測(cè)試軟件, 實(shí)時(shí)數(shù)據(jù)采用第一種方式進(jìn)行數(shù)據(jù)讀取。 該讀取方式需要根據(jù)現(xiàn)行的數(shù)據(jù)保存方式進(jìn)行設(shè)定, 原測(cè)試軟件對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)采集和保存, 數(shù)據(jù)保存過(guò)程中會(huì)隨機(jī)切換到新文件中進(jìn)行保存, 這就要求數(shù)據(jù)讀取方式能夠?qū)崟r(shí)跟隨最新文件的最新數(shù)據(jù), 讀取方式如圖8 所示, 具體流程如下:

圖8 實(shí)時(shí)測(cè)試數(shù)據(jù)讀取方式流程圖Fig.8 Flowchart of reading method for real-time test data
步驟1: 通過(guò)槽函數(shù)SLOT(showFileContents())觸發(fā)定時(shí)器;
步驟2: 進(jìn)入槽函數(shù)程序, 判斷目前是否有打開的文件, 若否則刷新文件目錄, 選擇最新文件并打開, 若是則轉(zhuǎn)步驟4;
步驟3: 判斷已選擇的文件是否讀取過(guò), 若是則進(jìn)行下一步, 若否則記錄該文件編號(hào), 刷新文件內(nèi)容, 然后轉(zhuǎn)步驟5;
步驟4: 刷新文件內(nèi)容, 并判斷現(xiàn)讀取的文件是否與之前讀取的文件長(zhǎng)度相同, 若是則轉(zhuǎn)步驟7, 若否則進(jìn)行一下步;
步驟5: 讀取最新文件保存的最新數(shù)據(jù)并在窗口中顯示讀取的數(shù)據(jù)內(nèi)容, 同時(shí)驅(qū)動(dòng)三維模型內(nèi)部框架轉(zhuǎn)動(dòng);
步驟6: 判斷所有文件是否讀取完畢, 若否則轉(zhuǎn)回步驟1, 若是則進(jìn)行下一步;
步驟7: 關(guān)閉定時(shí)器, 結(jié)束測(cè)試。
基于上述技術(shù)開發(fā)了慣性平臺(tái)三維可視化測(cè)試與示教系統(tǒng), 系統(tǒng)操作界面如圖9 所示, 該系統(tǒng)主要包括工具欄模塊、 數(shù)據(jù)顯示模塊以及動(dòng)畫仿真(模型可視化)模塊。

圖9 系統(tǒng)操作界面示意圖Fig.9 Diagram of system operation interface
工具欄模塊包括平臺(tái)視圖、 部件顯示、 數(shù)據(jù)處理和動(dòng)畫演示等。 平臺(tái)視圖功能為實(shí)現(xiàn)平臺(tái)數(shù)字模型的視圖調(diào)整, 以方便觀察; 部件顯示主要包括基座隱藏/顯示、 外環(huán)隱藏/顯示、 內(nèi)環(huán)隱藏/顯示、 臺(tái)體隱藏/顯示以及全部隱藏/顯示功能;數(shù)據(jù)處理主要實(shí)現(xiàn)歷程數(shù)據(jù)的圖表展示; 演示功能主要實(shí)現(xiàn)離線情況下數(shù)字模型的動(dòng)畫演示。
數(shù)據(jù)顯示模塊主要包括實(shí)時(shí)數(shù)據(jù)、 歷程數(shù)據(jù)以及歷程數(shù)據(jù)的圖表顯示。 實(shí)時(shí)數(shù)據(jù)主要顯示三維模型外環(huán)架、 內(nèi)環(huán)架與臺(tái)體的當(dāng)前轉(zhuǎn)動(dòng)角度,歷程數(shù)據(jù)主要顯示從開始時(shí)刻到當(dāng)前時(shí)刻外環(huán)架、內(nèi)環(huán)架與臺(tái)體的轉(zhuǎn)動(dòng)角度, 圖表數(shù)據(jù)主要顯示從開始時(shí)刻到當(dāng)前時(shí)刻三者轉(zhuǎn)動(dòng)角度的變化趨勢(shì)。
動(dòng)畫仿真模塊包括數(shù)字模型顯示、 測(cè)試過(guò)程操作、 回放示教過(guò)程操作。 數(shù)字模型顯示主要實(shí)現(xiàn)測(cè)試與回放過(guò)程中各框架的轉(zhuǎn)動(dòng)動(dòng)畫演示, 通過(guò)鼠標(biāo)可以操作模型的旋轉(zhuǎn), 鼠標(biāo)滾輪實(shí)現(xiàn)模型縮放; 測(cè)試過(guò)程操作主要通過(guò)按鈕控件實(shí)現(xiàn)開始測(cè)試、 暫停測(cè)試與停止測(cè)試操作; 回放示教過(guò)程操作主要實(shí)現(xiàn)讀取保存的框架轉(zhuǎn)動(dòng)歷史數(shù)據(jù), 然后驅(qū)動(dòng)模型進(jìn)行動(dòng)畫演示。
在軟件開發(fā)階段, 以某三軸慣性平臺(tái)結(jié)構(gòu)為例進(jìn)行系統(tǒng)開發(fā)。 為驗(yàn)證前文的可視化環(huán)境、 數(shù)字模型高效驅(qū)動(dòng)方法以及所開發(fā)測(cè)試系統(tǒng)的實(shí)用性, 分別針對(duì)離線的培訓(xùn)示教與測(cè)試回放功能以及在線測(cè)試過(guò)程功能進(jìn)行驗(yàn)證。
離線測(cè)試功能的驗(yàn)證主要通過(guò)三種方法: 1)在實(shí)時(shí)數(shù)據(jù)處手動(dòng)輸入各框架轉(zhuǎn)角, 通過(guò)調(diào)整框架按鈕實(shí)現(xiàn)框架的轉(zhuǎn)動(dòng); 對(duì)外環(huán)架、 內(nèi)環(huán)架和臺(tái)體分別輸入90°, 觀察框架轉(zhuǎn)動(dòng)與輸入一致。2)通過(guò)點(diǎn)擊工具欄的“動(dòng)畫演示/動(dòng)畫停止” 按鈕, 實(shí)現(xiàn)內(nèi)部框架的轉(zhuǎn)動(dòng)動(dòng)畫。 動(dòng)畫正常演示,隨機(jī)停止演示時(shí)三框架轉(zhuǎn)角均為235°, 實(shí)時(shí)數(shù)據(jù)顯示欄的角度與框架轉(zhuǎn)角一致, 如圖10 所示。3)通過(guò)系統(tǒng)的回放示教功能, 即對(duì)在線測(cè)試數(shù)據(jù)進(jìn)行回放, 顯示界面如圖9 所示, 歷程數(shù)據(jù)顯示與模型動(dòng)畫運(yùn)動(dòng)一致。 因此, 三種操作均實(shí)現(xiàn)了模型運(yùn)動(dòng)狀態(tài)的可視化, 驗(yàn)證了仿真環(huán)境的正確性。

圖10 離線驗(yàn)證Fig.10 Verification of offline test
在線測(cè)試驗(yàn)證在開放式三軸框架試驗(yàn)臺(tái)上進(jìn)行, 需將數(shù)字樣機(jī)與試驗(yàn)臺(tái)相連, 實(shí)現(xiàn)途徑如圖11 所示。 通過(guò)三個(gè)框架的姿態(tài)角傳感器獲取各框架轉(zhuǎn)角數(shù)據(jù), 傳感器通過(guò)線纜與信號(hào)采集設(shè)備相連, 將測(cè)得的轉(zhuǎn)角數(shù)據(jù)傳輸給工控機(jī)的平臺(tái)測(cè)試軟件進(jìn)行數(shù)據(jù)處理, 并實(shí)時(shí)保存于特定文件夾下。 通過(guò)實(shí)時(shí)讀取保存的轉(zhuǎn)角數(shù)據(jù)并驅(qū)動(dòng)框架轉(zhuǎn)動(dòng), 即可觀察測(cè)試過(guò)程中內(nèi)部框架的轉(zhuǎn)動(dòng)狀態(tài)。姿態(tài)角傳感器的采樣周期設(shè)置為5 ms。 如圖12 所示, 測(cè)試過(guò)程中, 通過(guò)對(duì)比傳感器采集數(shù)據(jù)與可視化測(cè)試系統(tǒng)讀取數(shù)據(jù), 可以發(fā)現(xiàn)可視化測(cè)試系統(tǒng)可實(shí)時(shí)讀取試驗(yàn)臺(tái)框架轉(zhuǎn)角信息, 且動(dòng)畫正常展示, 驗(yàn)證了該系統(tǒng)在線測(cè)試的實(shí)用性與高效性。該系統(tǒng)已成功應(yīng)用于測(cè)試部門對(duì)某平臺(tái)的測(cè)試與人員培訓(xùn)過(guò)程, 提高了測(cè)試與培訓(xùn)人員的排故與交流效率。

圖11 系統(tǒng)在線測(cè)試應(yīng)用驗(yàn)證Fig.11 Application verification of system online test

圖12 數(shù)據(jù)對(duì)比示意圖Fig.12 Diagram of data comparison
針對(duì)慣性平臺(tái)整機(jī)測(cè)試過(guò)程中內(nèi)部框架結(jié)構(gòu)復(fù)雜及其運(yùn)動(dòng)狀態(tài)的不可觀測(cè)性, 基于Qt/OpenGL開發(fā)了一套慣性平臺(tái)三維可視化在線測(cè)試與示教系統(tǒng)。 通過(guò)三維CAD 軟件對(duì)慣性平臺(tái)進(jìn)行建模并提取模型結(jié)構(gòu)關(guān)鍵信息, 然后運(yùn)用Qt/OpenGL 進(jìn)行框架運(yùn)動(dòng)特性及模型可視化編程, 實(shí)現(xiàn)框架運(yùn)動(dòng)展示功能。 主要結(jié)論如下:
1)實(shí)現(xiàn)了OpenGL 與三維CAD 建模軟件接口,基于Qt/OpenGL 搭建了慣性平臺(tái)三維數(shù)字樣機(jī)顯示與運(yùn)動(dòng)環(huán)境, 明確了數(shù)字樣機(jī)的繪制及驅(qū)動(dòng)方法;
2)研究了數(shù)字模型高效驅(qū)動(dòng)方法, 采用數(shù)字模型輕量化與OpenGL 雙緩沖機(jī)制保證了模型的高效驅(qū)動(dòng);
3)提出了在線讀取最新保存數(shù)據(jù)的方法, 突破了平臺(tái)數(shù)字樣機(jī)與試驗(yàn)臺(tái)在線測(cè)試接口技術(shù), 實(shí)現(xiàn)了數(shù)字模型對(duì)物理平臺(tái)運(yùn)動(dòng)的實(shí)時(shí)跟隨;
4)開發(fā)了慣性平臺(tái)三維可視化在線測(cè)試與示教系統(tǒng), 通過(guò)離線與在線測(cè)試驗(yàn)證了方法的可行性以及系統(tǒng)的實(shí)用性, 實(shí)現(xiàn)了平臺(tái)內(nèi)部框架運(yùn)動(dòng)狀態(tài)的可視化。