陳力威, 朱 凡, 劉 希, 楊 楠
(空軍工程大學工程學院,西安 710038)
現(xiàn)代飛機,尤其是戰(zhàn)斗機,為了完成預定的任務和改善飛機的飛行品質(zhì),都在飛機上安裝各種類型的飛行控制系統(tǒng)。飛機的動力學特性因為其所安裝的飛控系統(tǒng)可能會發(fā)生徹底的改變,因此在飛行仿真時必須要考慮到飛控系統(tǒng)的動力學特性[1]。同時,提高仿真系統(tǒng)的通用性、執(zhí)行效率、仿真建模易行性和系統(tǒng)可擴展性也具有重要意義。本文按照并行計算模型的思想[2]設計了仿真平臺框架。首先從總體上設計了飛控系統(tǒng)的并行仿真結(jié)構(gòu),然后再將飛控系統(tǒng)分成發(fā)動機推力、升降舵、副翼和方向舵4個并行通道。這樣可以充分利用多核處理器的優(yōu)勢,大大提高了仿真效率,經(jīng)檢驗,仿真解算速度可以達到實時仿真的要求。最后利用視景仿真軟件VegaPrime實現(xiàn)戰(zhàn)場環(huán)境三維顯示,并將其應用于飛機在預定航路飛行的實時顯示過程中。
依據(jù)提高運行效率和易于維護、擴展的原則,設計平臺系統(tǒng)的總體框架結(jié)構(gòu)如圖1所示。
該平臺主要包括飛行動力學仿真類、視景仿真類和Matlab后臺服務3個部分。由圖可見,應用多核編程技術(shù),可以并行同步執(zhí)行整個系統(tǒng)的仿真解算。本文通過OpenMP并行編程方法實現(xiàn)了飛行動力學系統(tǒng)和飛控系統(tǒng)的并行解算。
對于任何飛機來說,六自由度飛行動力學方程及飛行方位角、氣動角、過載等飛行狀態(tài)信息的解算都是相同的,為公共屬性部分。而飛機氣動力和力矩的解算、物理參數(shù)因機型而異,為私有屬性部分。因此在共有屬性和私有屬性之間建立標準化接口,易于擴展各種機型模型。如圖1所示,灰色標識的模塊為公共屬性部分,白色標識的模塊為私有屬性部分。
圖1 仿真平臺總體框架Fig.1 Framework of simulation platform
本文借鑒RTW實時仿真的單步推進機理建立飛行動力學通用仿真類框架。該類不包含發(fā)動機模型,只接收發(fā)動機推力和力矩。我們將發(fā)動機模型納入飛行控制系統(tǒng),這也是基于綜合飛行控制系統(tǒng)的考慮。本文將氣動參數(shù)的解算部分設計成該類的成員函數(shù),解算得到氣動力和力矩。因此只需要一個類就實現(xiàn)了飛行動力學系統(tǒng)模型的構(gòu)建,這樣就便于采用內(nèi)存共享的方式實現(xiàn)模塊間的通信。從而克服了傳統(tǒng)通用飛行動力學類庫模塊因劃分過細而導致接口復雜的問題,提高了仿真效率。用戶只要按照接口標準,添加具體機型的氣動力、力矩解算的成員函數(shù),就可以很方便地擴展并實現(xiàn)各種機型的動力學解算。
飛行控制部分一般是復雜的高階系統(tǒng),且沒有統(tǒng)一的格式。為了方便用戶搭建或加載各種控制器,本文將飛行控制系統(tǒng)在Simulink中實現(xiàn),利用其良好的可視化建模環(huán)境,方便了各種控制器的搭建或?qū)搿=柚鶰atlab并行計算工具箱的SPMD多線程并行計算方法在4個Matlab工作間并行解算飛控系統(tǒng)的發(fā)動機推力、升降舵、副翼和方向舵4個通道。
本文將OpenGL直接引入VegaPrime中,通過添加不同格式數(shù)字地圖的讀取成員函數(shù),將數(shù)字地圖轉(zhuǎn)變成內(nèi)部標準的地圖格式存儲,再在此基礎上執(zhí)行各種操作,最后將真實場景在屏幕上顯示。
飛行控制系統(tǒng)可視化仿真平臺的軟件部分主要包括:飛控系統(tǒng)仿真設計、靜態(tài)航跡規(guī)劃、動態(tài)航跡規(guī)劃、OpenMP工作分區(qū)編碼和SPMD多工作間并行解算方法等部分。靜態(tài)航跡規(guī)劃是指在預先已知突防地區(qū)地形地貌的基礎上規(guī)劃好的突防航跡,而動態(tài)航跡規(guī)劃是指在突防過程中突然出現(xiàn)一個威脅目標(如高炮、雷達車等),實時地調(diào)整突防航跡。另外還包括了飛機的動力學模型、控制臺軟件、視景軟件和操縱系統(tǒng)軟件等,這些是構(gòu)成仿真平臺的基礎軟件模塊,但不是本文的研究重點,將不再贅述。
本文動力學仿真模型是單步推進的,完全可以用定時器驅(qū)動進行實時仿真。然而Simulink模型無法通過命令行來實現(xiàn)單步仿真。盡管通過Simulink命令行可以執(zhí)行指定時間段的仿真,但仿真實際上還是從零時刻開始的,只是僅輸出指定時間段的仿真結(jié)果。如果僅通過指定仿真時間段來仿真,每推進一步都要從頭開始,這顯然無法滿足實時仿真的需要。由于Simulink命令行仿真能返回系統(tǒng)的內(nèi)部狀態(tài),所以本文通過記錄控制系統(tǒng)每次仿真結(jié)束時的內(nèi)部狀態(tài)作為下一次仿真的初始狀態(tài),將每次仿真的起始時刻都設為零,結(jié)束時刻和仿真步長都設為單步仿真推進步長,從而實現(xiàn)了Simulink仿真模型的單步推進。這樣就完全可以使用定時器驅(qū)動控制器單步仿真,從而實現(xiàn)了整個系統(tǒng)的同步并行閉環(huán)仿真。以升降舵通道為例,單步推進Simulink仿真模型的偽代碼如下:
近年來,研究用于航跡規(guī)劃的人工智能方法較多,其中包括無信息和有信息搜索算法、遺傳算法[3]、粒子群算法[4]、神經(jīng)網(wǎng)絡算法[5]等。但后幾種方法的計算原理一般復雜且計算量比較大,目前僅限于理論的研究。目前,研究人員對A*算法進行了很多改進。文獻[6]采用一種稱為稀疏A*搜索(SAS)的技術(shù)進行航跡規(guī)劃,該算法結(jié)合路徑約束有效地削減了搜索空間;文獻[7]的LPA*(Lifelong Planning A*)是一種遞增式搜索的A*算法;文獻[8]提出了一種結(jié)合飛行器簡化運動方程的A*算法。這些方法均在一定程度上提高了搜索效率。但通過改進算法流程和優(yōu)化算法的數(shù)據(jù)結(jié)構(gòu),挖掘算法潛力,來用于工程實現(xiàn)的研究卻并不多見。
2.2.1 改進 A*算法
設計了新的數(shù)據(jù)結(jié)構(gòu)來管理OPEN表和CLOSED表,大大提高了A*系列算法的搜索效率。將A*算法中的OPEN表映射到CLOSED表中,設計了嵌套二叉樹來管理CLOSED表,一方面提高了重復節(jié)點的查找效率,另一方面解決了A*系列算法并行搜索時維護CLOSED時存在的數(shù)據(jù)訪問沖突問題,使得算法更加適用于并行多核編程。提出最小二叉樹的方式管理OPEN表,克服了采用傳統(tǒng)鏈表排序耗時,二叉堆數(shù)組容量有上界的缺點。
二叉樹是一種很好的排序和索引應用模式。因為在建立二叉樹的同時數(shù)據(jù)已經(jīng)過初步的比較判斷并依照二叉樹的建立規(guī)則存放。規(guī)則如下:
1)第一個輸入的數(shù)據(jù)作為此二叉樹的樹根;
2)其后的數(shù)據(jù)以回溯的方式與樹根進行比較,小于樹根的放置于左子樹,大于樹根的放置于右子樹。
從上面的規(guī)則可以知道,左子樹內(nèi)的值一定小于樹根,右子樹內(nèi)的值一定大于樹根。因此在索引的時候只要從樹根往下依次比較,比樹根值小往左子樹查找,反之則往右子樹查找。這樣的索引方式比順序遍歷查找的效率要高很多。
2.2.2 嵌套二叉樹的CLOSED表
因為航路節(jié)點可以用(x,y,φ)來唯一標識,所以建立如圖2所示的三層嵌套二叉樹。頂層樹以φ的大小為依據(jù)建立,記為φ_Tree。φ_Tree的每個單元內(nèi)嵌一個以x大小為依據(jù)建立的子樹x_Tree。x_Tree每個單元再內(nèi)嵌一個以y大小為依據(jù)建立的子樹y_Tree。
圖2 CLOSED表結(jié)構(gòu)圖Fig.2 The structure graphics of CLOSED table
這樣在查找某待擴展節(jié)點是否是重復節(jié)點的時候,首先根據(jù)節(jié)點φ值索引φ_Tree,如果φ_Tree中存在對應φ的單元,再依據(jù)節(jié)點的x值,索引該單元內(nèi)嵌的x_Tree,同理,再索引y_Tree直到找到節(jié)點或無法找到返回。這樣,通過有序的嵌套二叉樹管理,大大提高了索引效率。
在并行計算中,3個方向同時擴展時,擴展節(jié)點的當前航向φ顯然是不同的。因此,只要在初始化時建立所有方向的φ_Tree,并將其內(nèi)嵌的x_Tree置空,這樣在同時壓入3個方向的新的節(jié)點時,不會存在數(shù)據(jù)競爭和訪問沖突。這樣就可以免去并行計算的互斥鎖機制,充分發(fā)揮并行計算的效能。
2.2.3 最小二叉樹的OPEN表
OPEN表可以采用以節(jié)點當前代價值g的大小為依據(jù)建立二叉樹,并在二叉樹內(nèi)設置一個指向最左子樹的指針Pleftest。由二叉樹的基本思想,最左子樹節(jié)點的代價值最小,即為最優(yōu)待擴展節(jié)點。因此在每一次壓入新的節(jié)點和彈出最左子樹的節(jié)點作為最優(yōu)待擴展節(jié)點時,只要維護Pleftest,保證其始終指向最左子樹,即指向具有最小代價值g的節(jié)點,在索引最佳擴展節(jié)點的時候,通過Pleftest就可以直接索引到最佳待擴展節(jié)點。以這種方式維護OPEN表,解決了傳統(tǒng)的數(shù)組最小二叉堆方式維護OPEN表容量有界和單向鏈表索引效率低下的缺點。雖然這樣仍然沒有解決并行計算訪問OPEN表數(shù)據(jù)時的沖突和競爭問題,但是經(jīng)過實際檢驗,并行計算時同時操縱OPEN表的機會很少,采用互鎖機制解決訪問沖突的問題,基本不會影響搜索速度。
2.2.4 仿真算例
實驗使用10800×14400的真實數(shù)字地圖和模擬生成的威脅數(shù)據(jù)。本文在配置處理器為英特爾酷睿4核處理器 Q6600、主頻2.4 GHz、內(nèi)存2 G的 Windows操作系統(tǒng)的計算機上進行仿真。規(guī)劃算法在Visual Studio 2008編程環(huán)境下采用OpenMP多線程編程技術(shù)實現(xiàn)。在如表1所示仿真參數(shù)下,威脅信息如圖,分別用普通稀疏A*算法和本文提出的改進算法進行規(guī)劃仿真搜索,不考慮后續(xù)航路優(yōu)化和刪減,得到了如圖3所示的規(guī)劃結(jié)果,其耗時對比見表2。
圖3 靜態(tài)航跡規(guī)劃Fig.3 Static flight path planning
由仿真結(jié)果可知,改進A*算法的流程和數(shù)據(jù)結(jié)構(gòu)后搜索效率提高了8~10倍。并行搜索時相對搜索效率更高。
表1 仿真參數(shù)Table 1 Simulation parameter
表2 搜索耗時對比Table 2 The comparison of searching time
動態(tài)航跡優(yōu)化就是飛機在任務執(zhí)行階段,以參考飛行航線為基準,根據(jù)實時威脅,動態(tài)計算飛行航跡,修正參考航線,實現(xiàn)威脅的有效回避[9]。本文使用電荷法來處理突發(fā)威脅:飛行器探測到新的威脅信息后,如果發(fā)現(xiàn)還沒有進入該威脅工作區(qū)間,則及早地改變參考航線;如果發(fā)現(xiàn)已經(jīng)進入該威脅范圍之中,規(guī)劃的航跡要能夠使飛行器最快撤離危險區(qū)。采用電荷法處理突發(fā)威脅的思想來源于庫侖定律,即同性電荷之間相互排斥。結(jié)合飛行器的飛行性能約束條件,確定下一航路點的位置,從而滿足飛行過程中的安全要求。利用電荷法處理突發(fā)情況有以下兩種典型情況:
1)飛行器探測到威脅時尚未進入該威脅的工作區(qū)間,并且有足夠的時間和距離使得飛行器能夠平穩(wěn)地回避威脅,由于飛行器距離威脅區(qū)還有一定的距離,進行實時航跡規(guī)劃以改變參考航線,回避該威脅;
2)飛行器探測到威脅時已經(jīng)進入該威脅的工作區(qū)間,或者由于時間短或距離近使得飛行器無法及時調(diào)整飛離威脅。此時需要通過調(diào)節(jié)規(guī)劃控制量來限定軌跡樹的生成方向:根據(jù)父節(jié)點來選定相應的控制量,使生成的下一節(jié)點盡量遠離威脅區(qū)域[10];并對生成的新節(jié)點,判斷其位置是否已經(jīng)遠離威脅區(qū)域;一旦飛出威脅區(qū)域,則改用第一種處理方法生成新的節(jié)點,替換原有參考航跡節(jié)點。動態(tài)規(guī)劃航跡的三維圖形如圖4所示。
應該指出的是,在靜態(tài)和動態(tài)航跡規(guī)劃中,利用上述方法生成的只是水平參考航線。在應用中還需根據(jù)地形狀況和飛行器機動性能限制,利用地形跟隨技術(shù)中比較成熟的TF算法產(chǎn)生垂直航跡 。當然,為了飛行安全,還需在生成的垂直航跡基礎上加上安全間隙高度。
圖4 動態(tài)航跡規(guī)劃Fig.4 Dynamic flight path planning
OpenMP是一種面向共享內(nèi)存以及分布式共享內(nèi)存的多處理器多線程并行編程語言,由一些具有國際影響力的大規(guī)模軟件和硬件廠商共同定義的標準。由于Microsoft VisualStudio.Net2008已經(jīng)支持OpenMP的編程,這給我們帶來了很大的方便。下面是本文工作分區(qū)的偽代碼實現(xiàn)。
Matlab并行計算工具箱提供了SPMD并行計算工具,它可以先將Matlab初始化成多個工作間,在不同的工作間執(zhí)行不同的任務,然后將結(jié)果返回到主工作間中。具體到本文,我們將Matlab區(qū)分成4個工作間,分別解算飛控系統(tǒng)的發(fā)動機推力、升降舵、副翼和方向舵4個通道。其偽代碼為
該平臺可以在二維數(shù)字地圖上用鼠標指定飛行初始位置和航路,如圖5所示。
圖5 二維航路指定Fig.5 Two-dimensional path designation
實現(xiàn)導航仿真飛行。運行,開始仿真,點擊平臺主界面的三維動畫顯示按鈕可以看到飛機實時飛行狀態(tài)三維視景顯示,如圖6所示。
圖6 三維動畫顯示Fig.6 Three-dimensional animation display
該平臺Matlab后臺Simulink控制器模型可以按照接口標準,直接搭建或加載。由于控制器較為復雜,本文對各控制模態(tài)進行了封裝,其中縱向俯仰姿態(tài)保持控制模態(tài)界面,如圖7所示。
圖7 縱向俯仰姿態(tài)保持控制模態(tài)Fig.7 The remain pitch elevator of control mode
根據(jù)變量約定,可以在Matlab命令行窗口用畫圖命令方便畫出各種飛行仿真曲線圖。以等高飛行控制為例,如圖8所示為高度、速度、迎角和側(cè)滑角隨時間變化的曲線。
圖8 仿真結(jié)果曲線Fig.8 The simulation result
本文根據(jù)多核編程的思想設計了飛行控制系統(tǒng)仿真平臺框架;借鑒RTW單步仿真推進的仿真機理,設計了通用飛行動力學解算類框架;通過Matlab引擎,實現(xiàn)了飛控系統(tǒng)Simulink環(huán)境可視化建模及其與C++編程實現(xiàn)的飛行動力學仿真的同步通信;該平臺通過三維視景仿真、數(shù)字和曲線的方式顯示仿真結(jié)果,便于科學研究和理論分析。使用者可以很方便地在該平臺上進行功能擴展和仿真分析。使用戶更加直觀地了解飛機在預定航路上的飛行情況,協(xié)助完成飛行方案的設計、驗證、論證、篩選和確定。本仿真平臺已經(jīng)實現(xiàn)了“Beaver”多模態(tài)自動駕駛儀的實時仿真驗證。在以后的研究中,將進一步考慮加入各種干擾,以及數(shù)字地圖紋理渲染技術(shù),增強戰(zhàn)場環(huán)境真實感。
[1]商重陽,劉艷.基于面向?qū)ο蠹夹g(shù)的飛行控制系統(tǒng)仿真框架[J].系統(tǒng)仿真學報,2006,18(2):472-474.
[2]許立軍,鮮勇,楊其,等.基于A*算法的多線程并行航跡規(guī)劃方法研究[J].電光與控制,2009,16(9):33-36.
[3]何珮,屈香菊.應用自適應遺傳算法進行參考航跡規(guī)劃[J].航空學報,2003,24(6):499-502.
[4]唐強,王建元,朱志強,等.基于粒子群優(yōu)化的三維突防航跡規(guī)劃仿真研究[J].系統(tǒng)仿真學報,2004,16(9):2033-2036.
[5]YANG S X.System,Man,and Cybernetics[C]//IEEE Internatronal Conference,2002:515-520.
[6]SZCZERBA R J,GALKOWSKI P,GLICKTEIN I S,et al.Robust algorithm for real-time route planning[J].IEEE Transactions on Aerospace and Electronic System,2000,36(3):869-878.
[7]KOENIG S,LIKHCHEV M,F(xiàn)URCY D.Lifelong planning A*[J].Artificial Intelligence,2004,155(3):93-146.
[8]李季,孫秀霞.基于改進A-star算法的無人機航跡規(guī)劃算法研究[J].兵工學報,2008,29(7):788-792.
[9]歐杰,曹祺,劉超.低空突防可視化仿真平臺開發(fā)[J].計算機測量與控制,2010,18(7):1572-1575.
[10]ASSEO S J.Terrain following terrain avoidance path optimization using the method of steepest descent[C]//NAECON,1988(3):1128-1136.