馬騰達(dá)
(中國民航大學(xué) 電子信息與自動(dòng)化學(xué)院,天津 300300)
在傳統(tǒng)的飛機(jī)飛控系統(tǒng)教學(xué)中,通常采用Matlab等軟件對飛行控制律進(jìn)行仿真,以曲線形式顯示飛機(jī)的姿態(tài)、舵面等數(shù)據(jù),這種演示方式直觀性不強(qiáng),學(xué)生的學(xué)習(xí)難度較大。在現(xiàn)代教學(xué)中,虛擬仿真作為一種直觀有效的教學(xué)手段,能夠使用更少的資金投入,使學(xué)生們獲得更加真實(shí)的教學(xué)體驗(yàn)[1]。文獻(xiàn)[2-4]分別基于不同的虛擬平臺(tái)對航跡回放展開了研究。本項(xiàng)目利用虛擬仿真技術(shù),基于P3D平臺(tái),設(shè)計(jì)了飛機(jī)飛行航跡數(shù)據(jù)回放演示程序。本程序能夠在P3D虛擬場景中將飛行航跡數(shù)據(jù)利用虛擬飛機(jī)進(jìn)行展示,即時(shí)生成飛機(jī)運(yùn)動(dòng)軌跡,反映飛機(jī)的飛行特性,能夠?qū)⒔虒W(xué)中需要說明的各種概念以真實(shí)形象的三維場景表現(xiàn)出來,大大降低了學(xué)生的抽象思維難度,增加了學(xué)生的學(xué)習(xí)興趣。
P3D(Prepar3D)是由洛克希德·馬丁公司推出的一款飛行模擬軟件,其目標(biāo)是針對教育、培訓(xùn)機(jī)構(gòu)以及軍方定制的模擬軟件。P3D提供了SDK,能夠進(jìn)行二次開發(fā),將P3D內(nèi)的數(shù)據(jù)與外部進(jìn)行交互,P3D虛擬場景如圖1所示。
圖1 P3D虛擬場景
為了控制P3D平臺(tái)中虛擬飛機(jī)的運(yùn)動(dòng)狀態(tài),采用Qt軟件平臺(tái),開發(fā)了與P3D平臺(tái)的數(shù)據(jù)接口,并封裝為數(shù)據(jù)控制類。數(shù)據(jù)控制類的結(jié)構(gòu)如圖2所示。類中提供了initSend()、endSend()和SendCommand()幾種函數(shù)。其中initSend()函數(shù)能夠?qū)崿F(xiàn)連接P3D平臺(tái)的功能,end-Send()函數(shù)能夠?qū)崿F(xiàn)斷開P3D的功能,而SendCommand函數(shù)能夠?qū)⒖刂泼顐鬏斨罰3D中,進(jìn)而驅(qū)動(dòng)虛擬飛機(jī)按照命令進(jìn)行運(yùn)動(dòng)。
圖2 數(shù)據(jù)控制類的結(jié)構(gòu)
在基本的飛行航跡數(shù)據(jù)回放中,需要用到姿態(tài)和位置兩種信息,主要包括高度、空速、俯仰角、橫滾角、航向角、經(jīng)度、緯度等參數(shù),為了更好地體現(xiàn)飛行效果,還包括對起落架、副翼、升降舵、方向舵等參數(shù)的控制。數(shù)據(jù)控制類中的SendCommand()函數(shù),能夠?qū)@些參數(shù)進(jìn)行控制,驅(qū)動(dòng)虛擬飛機(jī)按照指定參數(shù)運(yùn)動(dòng)。
1.總體結(jié)構(gòu)。飛行航跡數(shù)據(jù)回放演示程序是在Qt開發(fā)環(huán)境下進(jìn)行設(shè)計(jì)的。Qt是一個(gè)跨平臺(tái)應(yīng)用程序和UI開發(fā)框架[5,6],程序總體結(jié)構(gòu)如圖3所示。
圖3 程序的總體結(jié)構(gòu)
(1)P3D驅(qū)動(dòng)模塊。首先要將設(shè)計(jì)的程序連接到P3D模擬飛行系統(tǒng),采用數(shù)據(jù)控制類實(shí)現(xiàn)該功能。在程序界面上設(shè)置兩個(gè)按鈕,分別為“連接P3D”“斷開P3D”。為了判斷程序是否連接成功,在界面上有一個(gè)連接信號(hào)指示燈。在與P3D連接成功后,用戶選擇飛行航跡數(shù)據(jù)文件,從文件中得到有效的飛行航跡數(shù)據(jù)后,在后臺(tái)進(jìn)行數(shù)據(jù)處理程序,對數(shù)據(jù)進(jìn)行分析讀取,并通過數(shù)據(jù)控制類中的SendCommand () 函數(shù)傳輸?shù)絇3D中。
(2)回放控制模塊。完成飛機(jī)的飛行回放過程需要知道飛機(jī)的位置和姿態(tài)信息。獲取飛行航跡數(shù)據(jù)后,以一定頻率輸出數(shù)據(jù),飛機(jī)即可再現(xiàn)飛行過程,同時(shí)控制飛機(jī)的舵面進(jìn)行顯示。在程序中,對飛行回放有開始、暫停、快進(jìn)、慢放、停止、重新回放六種功能。要實(shí)現(xiàn)飛行數(shù)據(jù)的定時(shí)傳輸,采用定時(shí)器對傳輸周期進(jìn)行設(shè)定,而快進(jìn)慢放功能的實(shí)現(xiàn)也通過定時(shí)器進(jìn)行設(shè)置。當(dāng)定時(shí)器的頻率變快,回放過程就將加快,當(dāng)定時(shí)器的頻率減慢,回放過程就變慢。在對回放進(jìn)行開始暫停功能時(shí),則是對定時(shí)器調(diào)用啟動(dòng)和停止函數(shù)。
(3)航跡顯示模塊。當(dāng)飛機(jī)在飛行航跡回放過程中,用戶需要觀察飛機(jī)當(dāng)前的飛行狀態(tài)。航跡顯示模塊將飛機(jī)的位置、姿態(tài)、舵面信息通過列表的方式進(jìn)行顯示。為了能夠完整地觀察整個(gè)飛行過程,航跡顯示模塊還具有曲線顯示功能,以曲線圖表的形式展示高度、速度、姿態(tài)、舵面等信息。
(4)進(jìn)度條模塊。為了方便用戶掌握飛行回放進(jìn)度,在程序界面中設(shè)計(jì)一個(gè)進(jìn)度條。飛行進(jìn)度條在讀取一次飛行數(shù)據(jù)后前進(jìn)一小格,它的最大值即為飛行數(shù)據(jù)的總組數(shù)。拖動(dòng)進(jìn)度條會(huì)將讀取數(shù)據(jù)的組值設(shè)定為釋放后進(jìn)度條的值,從而實(shí)現(xiàn)回放時(shí)的時(shí)間跳躍功能。
(5)飛行計(jì)時(shí)模塊。程序界面中有一計(jì)時(shí)器,記錄了飛行回放的累計(jì)時(shí)間。計(jì)時(shí)器每讀取一次飛行數(shù)據(jù)就進(jìn)行一次計(jì)時(shí),以實(shí)現(xiàn)對飛行時(shí)間的記錄。因?yàn)槭菍?shù)據(jù)組的計(jì)算得出的飛行時(shí)間,所以通過進(jìn)度條改變回放時(shí)間點(diǎn)時(shí),不會(huì)影響飛行累計(jì)時(shí)間的計(jì)算。
2.工作流程。飛行航跡數(shù)據(jù)回放演示程序的工作流程如圖4所示。實(shí)現(xiàn)飛行航跡數(shù)據(jù)回放功能需要同時(shí)運(yùn)行P3D模擬飛行軟件。程序之間的交互調(diào)用數(shù)據(jù)控制類中的相關(guān)函數(shù),實(shí)現(xiàn)控制P3D中虛擬飛機(jī)的運(yùn)動(dòng)狀態(tài)。
圖4 程序運(yùn)行的總體流程
首先與P3D進(jìn)行連接,然后判斷程序與P3D連接是否成功,連接成功界面右端的指示燈會(huì)由紅色變?yōu)榫G色,然后選擇飛行航跡數(shù)據(jù)。對數(shù)據(jù)進(jìn)行解析后,開始回放,控制P3D平臺(tái)中的虛擬飛機(jī)按飛行航跡數(shù)據(jù)回放演示飛行過程。如果P3D未連接成功或未選擇文件就點(diǎn)擊開始回放按鈕,程序?qū)棾龃翱谔崾?。在開始回放后,有暫停、快進(jìn)、慢放、重新開始的功能操作,方便對飛行回放的觀察。停止回放會(huì)回到未選擇文件的狀態(tài),并初始化界面所有部件。在回放結(jié)束時(shí),會(huì)彈出窗口提示回放完成,程序回到初始選擇文件時(shí)的狀態(tài)。界面中還有實(shí)時(shí)顯示飛行參數(shù)的表格以及曲線圖表,方便對飛行情況進(jìn)行分析。界面的最下方的進(jìn)度條可查看飛行回放的進(jìn)度情況。
選取某一飛行航跡,使用設(shè)計(jì)的飛機(jī)飛行航跡數(shù)據(jù)回放演示程序打開,軟件運(yùn)行效果如圖5所示。
圖5 軟件運(yùn)行效果
設(shè)計(jì)的程序能夠讀取飛行航跡數(shù)據(jù),并將整個(gè)飛行航跡以曲線的形式進(jìn)行演示,能夠驅(qū)動(dòng)P3D平臺(tái)的虛擬飛機(jī)按照指定的方式進(jìn)行運(yùn)動(dòng),完成了設(shè)計(jì)的功能。
開發(fā)的飛機(jī)飛行航跡數(shù)據(jù)回放演示程序,除了能夠應(yīng)用于教學(xué),也可作為虛擬飛機(jī)運(yùn)動(dòng)學(xué)仿真測試平臺(tái),用于飛行操縱系統(tǒng)、自動(dòng)飛行控制系統(tǒng)設(shè)計(jì)等項(xiàng)目的開發(fā),具有較好的應(yīng)用前景。