羅瓊
(中航工業(yè)直升機(jī)設(shè)計(jì)研究所無(wú)人機(jī)部 江西省景德鎮(zhèn)市 333001)
為了實(shí)時(shí)監(jiān)控?zé)o人直升機(jī)任務(wù)過(guò)程中的飛行狀態(tài),地面站飛行監(jiān)控軟件需要具備實(shí)時(shí)顯示下傳的無(wú)人直升機(jī)飛行參數(shù)、飛行模態(tài)和機(jī)載設(shè)備工作參數(shù)等信息,并且發(fā)送無(wú)人直升機(jī)飛行控制指令的功能。對(duì)于無(wú)人直升機(jī)來(lái)說(shuō),其任務(wù)過(guò)程中需要實(shí)時(shí)監(jiān)控的狀態(tài)參數(shù)數(shù)量龐大,運(yùn)用圖形化仿真技術(shù),能夠把復(fù)雜的數(shù)據(jù)變成直觀的儀表圖像顯示。GL Studio[1]作為一款專業(yè)的儀表仿真軟件[2]~[4],且以C++/OpenGL為底層,具有豐富的外部程序接口,能夠創(chuàng)建實(shí)現(xiàn)進(jìn)程間通信的人機(jī)交互界面,具有建模難度低、開發(fā)周期短等特點(diǎn)。本文利用QT搭建無(wú)人直升機(jī)地面站[5][6]飛行監(jiān)控軟件運(yùn)行框架,加載GL Studio編制的虛擬儀表模塊,且基于UDP通信原理,實(shí)現(xiàn)軟件對(duì)外通信[7]。
無(wú)人直升機(jī)飛行監(jiān)控軟件采用QT Creator和GL Studio進(jìn)行設(shè)計(jì)與開發(fā)。軟件采用模塊化設(shè)計(jì),具有良好的復(fù)用性和擴(kuò)展性。軟件架構(gòu)如圖1所示。軟件包含界面顯示、數(shù)據(jù)解析、多線程網(wǎng)絡(luò)通信和XML協(xié)議讀取等四個(gè)軟件模塊。
其中界面顯示中的主頁(yè)面虛擬儀表部分主要由GL Studio進(jìn)行開發(fā),其余參數(shù)顯示和通信設(shè)置、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)回放、協(xié)議設(shè)置等子頁(yè)面由QT Creator開發(fā)。
軟件中的虛擬儀表模塊主要用于顯示無(wú)人直升機(jī)飛行姿態(tài)、發(fā)動(dòng)機(jī)狀態(tài)和飛行控制系統(tǒng)狀態(tài)等需使用圖像形式顯示的參數(shù),由GL Studio開發(fā),以動(dòng)態(tài)鏈接庫(kù)形式被QT開發(fā)的主程序調(diào)用。
圖1:基于GL Studio的飛行監(jiān)控軟件架構(gòu)圖
圖2:基于GL Studio的監(jiān)控界面開發(fā)步驟流程圖
圖3:監(jiān)控界面功能控件設(shè)計(jì)圖
GL Studio是由美國(guó)DISTI公司開發(fā),目前世界上最先進(jìn)的面向?qū)ο蟮慕缑骈_發(fā)工具之一,用于創(chuàng)建實(shí)時(shí)的、三維的、照片級(jí)的交互圖形界面,有效率高及使用簡(jiǎn)便的特點(diǎn)。其使用的是面向?qū)ο蟮姆椒ǎ茏詣?dòng)生成高質(zhì)量的代碼,具有OpenGL的渲染技術(shù)。GL Studio在Windows下的編譯環(huán)境為Microsoft Visual Studio,在其安裝過(guò)程中將自動(dòng)檢測(cè)Visual Studio的版本并匹配相應(yīng)的工程創(chuàng)建向?qū)?。因此本文采用GL Studio在Visual Studio 2010環(huán)境下進(jìn)行開發(fā),具體分為以下幾個(gè)步驟,流程圖如圖2所示。
(1)利用Visual Studio 2010創(chuàng)建GL Studio工程,在工程目錄下會(huì)存在一個(gè)GL Studio (*.gls)文件,可以在這個(gè)文件中進(jìn)行界面編制;
(2)根據(jù)需求設(shè)計(jì)界面整體布局;
(3)針對(duì)涉及的顯示參數(shù)制作需要使用的貼圖紋理及功能元件;
(4)將當(dāng)前制作的圖形及功能元件轉(zhuǎn)換成C++源代碼,并添加通信代碼;
(5)測(cè)試與集成。
利用Visual Studio 2010開發(fā)工具創(chuàng)建一個(gè)GL Studio工程。在繪制界面之前需要對(duì)整個(gè).gls文件的一些屬性進(jìn)行設(shè)置,如定義界面窗口的名稱、生成代碼的類名及代碼文件的路徑等。
根據(jù)需求,操作人員在地面需要監(jiān)測(cè)無(wú)人直升機(jī)的飛行姿態(tài)、發(fā)動(dòng)機(jī)狀態(tài)、無(wú)人直升機(jī)的位置信息和飛行控制系統(tǒng)運(yùn)行狀態(tài)等。飛行姿態(tài)所涉及的參數(shù)有俯仰角、滾轉(zhuǎn)角、航向角、高度、速度等,這些參數(shù)可用虛擬地平儀顯示。發(fā)動(dòng)機(jī)狀態(tài)相關(guān)的參數(shù)有發(fā)動(dòng)機(jī)轉(zhuǎn)速、旋翼轉(zhuǎn)速、發(fā)動(dòng)機(jī)開車停車狀態(tài)、壓力、溫度等,這些參數(shù)可以用虛擬發(fā)動(dòng)機(jī)儀表、溫度計(jì)和壓力計(jì)顯示。無(wú)人直升機(jī)位置信息可以使用簡(jiǎn)易地圖或者表示與地面站相對(duì)位置的圖形示意上顯示。飛行控制系統(tǒng)運(yùn)行狀態(tài)主要為一些參數(shù)狀態(tài),可以使用狀態(tài)切換控件和數(shù)值顯示控件表示。
因此將監(jiān)控界面劃分為飛行姿態(tài)區(qū)域、發(fā)動(dòng)機(jī)狀態(tài)區(qū)域、位置信息區(qū)域和飛控系統(tǒng)參數(shù)區(qū)域四個(gè)部分。
首先制作功能元件的貼圖紋理,添加貼圖紋理是提高功能元件直觀真實(shí)的有效方法。貼圖紋理有兩種制作方法,一種是利用Photoshop等常用的圖形編輯軟件制作,還有一種是利用GL Studio自帶的圖形渲染技術(shù)進(jìn)行繪制。由于本文監(jiān)控界面中涉及的顯示參數(shù)比較簡(jiǎn)單常見(jiàn),因此采用第二種方法繪制貼圖紋理。其次命名對(duì)象,即對(duì)貼有紋理或需要接收數(shù)據(jù)等重要圖元命以恰當(dāng)?shù)拿?,以便更方便的管理、分組、查找和編輯。最后添加相應(yīng)的功能,為實(shí)現(xiàn)虛擬儀表的功能,即能夠?qū)⑹盏降臄?shù)據(jù)實(shí)時(shí)地、動(dòng)態(tài)地在界面上顯示和響應(yīng),如發(fā)動(dòng)機(jī)指針的旋轉(zhuǎn)、參數(shù)的顯示、高度表的移動(dòng)、壓力計(jì)的伸縮等功能,則需要在代碼編輯區(qū)中編寫實(shí)現(xiàn)各個(gè)部分響應(yīng)的代碼。利用GL Studio提供的諸如實(shí)現(xiàn)圖元移動(dòng)、旋轉(zhuǎn)、比例縮放、閃爍、切換及文本輸出等API函數(shù),可有效實(shí)現(xiàn)以上功能。本文監(jiān)控界面中制作的主要功能元件如下,效果圖如圖3所示。
2.2.1 地平儀
地平儀主要顯示無(wú)人直升機(jī)的俯仰角、滾轉(zhuǎn)角和航向等參數(shù)。利用函數(shù)DynamicTranslate (float x,float y,float z,bool relative=false)控制俯仰角刻度的移動(dòng);函數(shù)DynamicRotate (float x,float y,float z) 可以控制地平儀圖元以及航向角圖元的旋轉(zhuǎn)。
2.2.2 高度表和速度表
高度表和速度表的原理相同,都是通過(guò)使用函數(shù)DynamicTranslate (float x,float y,float z,bool relative=false)控制刻度的上下移動(dòng),并在移動(dòng)超出刻度表長(zhǎng)度范圍時(shí)利用String()函數(shù)改變刻度表上的數(shù)值,以此顯示更大范圍的數(shù)據(jù)。
2.2.3 發(fā)動(dòng)機(jī)儀表盤
發(fā)動(dòng)機(jī)儀表盤顯示的是發(fā)動(dòng)機(jī)的轉(zhuǎn)速,通過(guò)使用函數(shù)DynamicRotate (float x,float y,float z)來(lái)控制發(fā)動(dòng)機(jī)儀表盤指針的旋轉(zhuǎn)。
2.2.4 壓力計(jì)
壓力計(jì)的原理同發(fā)動(dòng)機(jī)儀表盤,壓力計(jì)下的數(shù)值顯示是通過(guò)String()函數(shù)來(lái)實(shí)現(xiàn)的。
2.2.5 溫度計(jì)
通過(guò)使用函數(shù)DynamicScale(float x,float y,float z)來(lái)控制溫度計(jì)圖元的按比例伸縮,并通過(guò)函數(shù)DynamicTranslate (float x,float y,float z,bool relative=false)移動(dòng)伸縮后的圖元到正確位置。溫度計(jì)上數(shù)值的顯示原理同壓力計(jì)。
GL Studio的代碼生成器能夠?qū)?dāng)前制作的界面轉(zhuǎn)換成高質(zhì)量的C++源代碼。將生成的源代碼添加到GL Studio工程中,并且編譯執(zhí)行。若需要修改可重復(fù)功能元件設(shè)計(jì)、添加和生成代碼以及編譯執(zhí)行的步驟。最終編譯執(zhí)行后得到一個(gè)以.dll為后綴的動(dòng)態(tài)鏈接庫(kù)文件。如圖4所示。
圖4:監(jiān)控界面執(zhí)行圖
在包括虛擬儀表模塊在內(nèi)的軟件模塊設(shè)計(jì)完成后,使用QT Creator進(jìn)行軟件集成框架開發(fā),完成軟件數(shù)據(jù)交互和硬件適配。根據(jù)前期的需求和接口設(shè)計(jì),本飛行監(jiān)控軟件采用UDP組播的形式進(jìn)行外部數(shù)據(jù)交互。硬件適配則是根據(jù)軟件運(yùn)行的硬件環(huán)境,選擇對(duì)應(yīng)的運(yùn)行支撐庫(kù)進(jìn)行添加。
飛行監(jiān)控軟件應(yīng)用于無(wú)人直升機(jī)地面站人機(jī)交互席位上。在軟件首次使用前,根據(jù)實(shí)際的使用情況設(shè)置好通信參數(shù)和協(xié)議版本。在經(jīng)過(guò)以上配置后,軟件在運(yùn)行過(guò)程中將自動(dòng)開啟對(duì)應(yīng)的數(shù)據(jù)接收線程,以及讀取對(duì)應(yīng)的協(xié)議文件,以適應(yīng)當(dāng)前型號(hào)的使用要求。在軟件實(shí)際使用過(guò)程中,接收站內(nèi)轉(zhuǎn)發(fā)的無(wú)人直升機(jī)下傳數(shù)據(jù),并將其解析顯示在軟件界面上,如圖5所示。經(jīng)模擬驗(yàn)證,本軟件運(yùn)行穩(wěn)定,能夠?qū)o(wú)人直升機(jī)下行遙測(cè)數(shù)據(jù)進(jìn)行實(shí)時(shí)解析和顯示。
圖5:飛行監(jiān)控軟件-監(jiān)測(cè)部分
本文詳細(xì)介紹了基于GL Studio的無(wú)人直升機(jī)地面站飛行監(jiān)控軟件的編制過(guò)程。用本文方法編制的監(jiān)控軟件,經(jīng)模擬無(wú)人直升機(jī)下傳數(shù)據(jù)驗(yàn)證,該類監(jiān)控軟件能夠?qū)崟r(shí)監(jiān)控并動(dòng)態(tài)顯示無(wú)人直升機(jī)的各種參數(shù),具有直觀、方便使用等特點(diǎn),為無(wú)人直升機(jī)的飛行提供了一定的幫助。今后可以從提高監(jiān)控界面的開發(fā)效率及其通用性的角度,將功能元件模塊化,達(dá)到進(jìn)行簡(jiǎn)單的組裝就可編譯集成的效果。