云 超,李小民,鄭宗貴,劉 品
(1.解放軍軍械工程學(xué)院無人機工程系,河北 石家莊 050003;2.第二炮兵研究院,北京 100085;3.西安軍代局駐203所軍代室,陜西 西安 710065)
無人機(Unmanned Aerial Vehicles)是一種由動力驅(qū)動、機上無人駕駛、可重復(fù)使用的航空器[1]。飛行模擬訓(xùn)練器具有節(jié)能、經(jīng)濟、安全、不受場地和氣象條件的限制、縮短訓(xùn)練周期、提高訓(xùn)練效率并且可以節(jié)省大量的經(jīng)費等突出優(yōu)點,尤其是一些真實飛機難以實現(xiàn)的危險訓(xùn)練科目以及不易處理的飛行故障,在飛行模擬器中均可實現(xiàn)[2]。無人機已經(jīng)廣泛地應(yīng)用于各種軍事行動并已經(jīng)裝備部隊,為減少平時訓(xùn)練時頻繁實飛裝備帶來的風(fēng)險和不必要的損失,可以采用飛行仿真系統(tǒng)(飛行模擬訓(xùn)練器)替代真實裝備進行訓(xùn)練,飛行仿真系統(tǒng)的逼真度直接影響模擬訓(xùn)練的效果。
飛行仿真軟件作為整個飛行仿真系統(tǒng)的核心部分,其設(shè)計優(yōu)劣直接影響到仿真系統(tǒng)的模擬真實程度。飛行仿真軟件主要涉及數(shù)學(xué)建模和軟件編程的工作。目前,傳統(tǒng)的飛行仿真軟件的開發(fā)方法在很大程度上已不能適應(yīng)于復(fù)雜軟件系統(tǒng)的開發(fā),從而難以使軟件的質(zhì)量到以保證。為解決傳統(tǒng)面向過程的飛行仿真軟件在開發(fā)過程中面臨的開發(fā)效率低、可重復(fù)利用率差、可維護性不高等缺點,需要將新的開發(fā)方法引入到飛行仿真軟件的開發(fā)過程中[2-3]。
飛行仿真系統(tǒng)由多個子系統(tǒng)組成。各個子系統(tǒng)之間還存在著復(fù)雜的關(guān)聯(lián)關(guān)系。因此,構(gòu)建一個合理、高效的仿真平臺顯得更為重要。傳統(tǒng)的面向過程的飛行仿真軟件的開發(fā)則缺少統(tǒng)一的標(biāo)準(zhǔn),開發(fā)仿真軟件和使用仿真軟件的不是相同的人,即一部分人開發(fā)飛行仿真軟件提供給另一部分人使用。由于飛行仿真系統(tǒng)在硬件、軟件和接口上的差別,需要仿真開發(fā)人員從頭去消化理解源程序,并依據(jù)新的需求與環(huán)境重新設(shè)計仿真軟件,這樣會耗費大量的精力和時間。因此,需要采用新方法、新手段研究飛行仿真系統(tǒng)的組成結(jié)構(gòu)與關(guān)聯(lián)關(guān)系,為飛行仿真軟件的開發(fā)和實現(xiàn)提供技術(shù)支撐。
傳統(tǒng)飛行仿真軟件的開發(fā)都是采用面向過程的匯編語言、Fortran語言和C語言,仿真軟件主要運行在專用的計算機上,這些軟件雖然簡練,但其維護性和可擴展性缺很差。隨著飛機系統(tǒng)的復(fù)雜度越來越高,飛行仿真軟件的復(fù)雜度也越來越高。例如,一臺D級的模擬訓(xùn)練器其內(nèi)部的軟件代碼就有幾百萬行,傳統(tǒng)的軟件開發(fā)方法編寫這樣的軟件已變得越來越困難。要解決此問題,就需要對飛行仿真軟件的構(gòu)造及實現(xiàn)方法進行深入的研究。
FlightGear是開放源代碼的飛行仿真游戲,它為飛行仿真軟件提供了先進的飛行模擬框架。Eric F.Sorton等人[4]使用FlightGear進行無人機的研究;LaSRS++[5-6]采用C++開發(fā)的面向?qū)ο蟮娘w行仿真框架,但由于其源代碼不對外公開,所以無法進行研究和借鑒。JSBSim[7]是FlightGear內(nèi)部的動力學(xué)仿真模塊,它本身也可以單獨運行。JSBSim是由Jon Berndt進行維護并通過互聯(lián)網(wǎng)向全世界分發(fā)。
面向?qū)ο蠹夹g(shù)是當(dāng)今飛行仿真軟件開發(fā)領(lǐng)域中最引人注意的研究方向之一,面向?qū)ο蠹夹g(shù)是當(dāng)前開發(fā)大型、復(fù)雜軟件的主流技術(shù),隨著應(yīng)用的廣泛和深入,其也在不斷地完善。面向?qū)ο蠼_\用人類習(xí)慣的思維方式、認(rèn)知方法對復(fù)雜系統(tǒng)進行面向?qū)ο蟮姆治龊湍K化的分解,識別出問題域內(nèi)的實體,提取它們之間的關(guān)系,建立問題域的精確、可理解的描述模型,從而達到復(fù)雜問題簡單化、大型系統(tǒng)精細(xì)化的目的。
面向?qū)ο蠼?梢园芽陀^世界的實體以及實體彼此間的關(guān)系映射為封裝了自己的靜態(tài)特征和動態(tài)行為的對象集合以及對象之間的關(guān)系集合,使用規(guī)定的一組運行規(guī)律和行為準(zhǔn)則實現(xiàn)對象狀態(tài)的動態(tài)改變,通過不同對象之間的交互協(xié)作從而實現(xiàn)模擬系統(tǒng)的所有功能。面向?qū)ο蠹夹g(shù)與應(yīng)用框架技術(shù)為大型、復(fù)雜系統(tǒng)的分析與建模提供了可靠的技術(shù)支持和有效的工具支撐。它能夠為某一特定領(lǐng)域提供基本功能的一組類,應(yīng)用系統(tǒng)通過對這組類的使用、修改和擴充,從而達到框架重用的目的。
應(yīng)用框架技術(shù)是為某一特定領(lǐng)域提供基本功能的一組類,應(yīng)用系統(tǒng)通過對這組類的使用、修改和擴充達到應(yīng)用框架的重用。應(yīng)用框架技術(shù)是以面向?qū)ο蠹夹g(shù)為基礎(chǔ),它是以軟件復(fù)用為核心,用一組抽象類及其之間的相互作用關(guān)系來表達應(yīng)用軟件的體系結(jié)構(gòu)的新型框架復(fù)用技術(shù)。應(yīng)用框架是對某一特定應(yīng)用領(lǐng)域的應(yīng)用系統(tǒng)的整體或部分的可重用設(shè)計,它給出了描述應(yīng)用系統(tǒng)在總體構(gòu)造上公共或相似的功能,進而在具體的應(yīng)用中依據(jù)實際需求進行功能定制或擴展。應(yīng)用框架是一個能夠被開發(fā)人員實例化的系統(tǒng)構(gòu)架。基于框架的系統(tǒng)開發(fā),不僅可以充分利用已有的資源和經(jīng)驗,縮短開發(fā)周期,提高開發(fā)質(zhì)量,而且能夠保證系統(tǒng)體系結(jié)構(gòu)的統(tǒng)一、穩(wěn)定、清晰,便于理解,擴展方便、易于維護,這正是大型、復(fù)雜系統(tǒng)開發(fā)過程中需要重點解決的問題。面向?qū)ο髴?yīng)用框架采用面向?qū)ο蟮娘L(fēng)格規(guī)定應(yīng)用軟件的體系結(jié)構(gòu)。
飛行模擬訓(xùn)練系統(tǒng)(也稱飛行仿真系統(tǒng))是一個復(fù)雜的仿真系統(tǒng),它通常包含大量的數(shù)學(xué)模型,仿真模型必須能盡可能反應(yīng)系統(tǒng)的本質(zhì)特性,即反應(yīng)飛行器飛行運動的本質(zhì)特性,在此基礎(chǔ)上再考慮系統(tǒng)的完備性。所以飛行仿真系統(tǒng)中完備的仿真模型不可能一步建立,它應(yīng)該是一個不斷改進與深入的過程。這就要求模型的可重配置、可變更。使用程序語言表達數(shù)學(xué)模型并實現(xiàn)仿真功能是仿真系統(tǒng)實現(xiàn)的關(guān)鍵。以往模擬訓(xùn)練系統(tǒng)中的仿真軟件一般都是面向過程的,這對仿真軟件的開發(fā)和維護提出了更高的要求。在具體建模時,應(yīng)采用條理清晰的模塊化、層次化的設(shè)計方法。合理的劃分系統(tǒng)的組成模塊,分別進行建模。同時還應(yīng)建立共性的通用模型,并為各個子系統(tǒng)調(diào)用。
飛行仿真系統(tǒng)包含飛行器系統(tǒng)模型和機載設(shè)備仿真模型,這些系統(tǒng)模型必須在實時仿真環(huán)境下運行,因此被統(tǒng)稱為實時仿真模型。實時仿真模型是模擬訓(xùn)練系統(tǒng)的核心,它的設(shè)計優(yōu)劣直接決定著整個實時仿真系統(tǒng)的性能,實時飛行仿真軟件的構(gòu)建重點研究兩方面的內(nèi)容:一方面是仿真模型類屬結(jié)構(gòu)的設(shè)計,類層次結(jié)構(gòu)的合理化是實時仿真系統(tǒng)能否具有重用性、擴展性的關(guān)鍵;另一方面是仿真模型的運行機制,合理的運行機制能夠有效的組織管理使整個仿真系統(tǒng)實時、高效的運行[8-9]。
面向?qū)ο蠹夹g(shù)具有抽象、封裝、繼承和多態(tài)等特點,因而可以使面向?qū)ο蠹夹g(shù)開發(fā)的仿真軟件具有更優(yōu)良的模塊化、可重用性、靈活性和可維護性等。整個系統(tǒng)在飛行仿真軟件設(shè)計采用面向?qū)ο蟮哪K化、層次化的思想,利用C++語言中類的封裝性將每個功能模塊封裝成一個類,各個類在的實現(xiàn)形式如圖1所示。將每個模塊需要保護的功能函數(shù)和變量聲明為內(nèi)部函數(shù)和變量,將輸入輸出端口函數(shù)聲名為公共函數(shù),作為和其他類通信的端口。
它包含的主要模塊類:運動方程模塊(CFlyDynFunc);動力系統(tǒng)模塊(或稱發(fā)動機系統(tǒng)模塊)(CUAVEngine);氣動力/力矩系數(shù)模塊:該模塊包括六個類,阻力系數(shù)類(CplaneCx)、升力系數(shù)類(CPlaneCy)、側(cè)力系數(shù)類(CPlaneCz)、橫滾力矩系數(shù)類(CPlaneMx)、偏航力矩系數(shù)類(CPlaneMy)和俯仰力矩系數(shù)類(CPlaneMz);質(zhì)量和轉(zhuǎn)動慣量模塊類 (CUAVMandI);標(biāo) 準(zhǔn) 大 氣 模 塊 類 (CstandardAir)。
圖1 無人機仿真軟件中各個模型類Fig.1 Model type of UAV simulation software
無人機飛行仿真軟件中包含許多仿真模型,每個模型又是由位于不同等級和層次的多個類組成,通過眾多類對象的實例化,并有條理的組織、管理各個仿真模型實時有序的運行是實時飛行仿真有序、協(xié)調(diào)運行的重要保證。
通過一個高度的抽象類CUAVModel為仿真系統(tǒng)提供統(tǒng)一的運行框架,采用不同層次和等級的派生類對象過程中,首先進行CUAVModel的初始化,由其提供的重載構(gòu)造函數(shù)來完成。由于組成每個仿真模型的整體類負(fù)責(zé)各個模型(子系統(tǒng))之間通訊的輸入接口,在模型運行前要完成其輸入接口變量的更新,因此在實例化整體類對象的同時調(diào)用CUAVModel的標(biāo)準(zhǔn)構(gòu)造函數(shù)來記錄整體類對象所對應(yīng)仿真模型的輸入函數(shù)地址,通過抽象類CUAV Model提供的鏈表操作PushIntoLinkedList(CUAVModel*)為每個整體類對象動態(tài)的分配存儲空間,每個仿真模型的整體類對象均作為鏈表中的一個結(jié)點,共同維護著抽象類CUAVModel的靜態(tài)數(shù)據(jù)成員——指向鏈?zhǔn)椎闹羔榤_pRoot和指向鏈尾的指針m_pTail,并通過指向下一對象的指針m_pNext將各個整體類對象鏈接起來,仿真軟件中類對象的鏈表結(jié)構(gòu)如圖2所示。
組成每個仿真模型的部件類被封裝在整體類中,部件類對象作為整體類的成員對象,需要在整體類對象構(gòu)建的同時完成部件類對象的實例化,部件類對象實例化前調(diào)用CUAVModel的默認(rèn)構(gòu)造函數(shù)進行抽象類的初始化。當(dāng)由CUAVModel派生的整體類和部件類都被實例化之后,就實現(xiàn)了各個仿真模型的串聯(lián),然后使用遞歸或循環(huán)方式控制仿真模型按順序執(zhí)行。
圖2 無人機仿真軟件整體類對象鏈表結(jié)構(gòu)Fig.2 Construction of UAV simalation softwave whole objectclass list
CUAVModel提供了各個系統(tǒng)仿真模型的運行框架,其派生類按照統(tǒng)一的框架各自獨立封裝,派生類之間通過接口交互,這樣使得仿真模型呈現(xiàn)出高內(nèi)聚、低耦合的特征。CUAVModel采用鏈表記錄各個仿真模型的地址,這種方法不僅能夠有效的對各個仿真模型進行調(diào)度、管理,而且增加了整個仿真系統(tǒng)的靈活性,新開發(fā)的仿真模型模塊可以很方便的鏈接到鏈表中并以相同的方式組織、調(diào)用和運行。
飛行仿真軟件是通過系統(tǒng)仿真模型的程序語言實現(xiàn)的,系統(tǒng)仿真模型是建立在對系統(tǒng)進行正確、合理分析的基礎(chǔ)之上的。首先需要對實際系統(tǒng)特征進行清楚的描述,即識別、抽象、組織、表示系統(tǒng)相關(guān)信息,確定系統(tǒng)的基本組成以及它們之間的關(guān)系,進而建立層次化、模塊化的對象模型。根據(jù)面向?qū)ο蟮慕T瓌t,采用先整體后局部的建模路線,構(gòu)建了無人機飛行仿真模型,并且定制了仿真模型的運行框架,最后通過運行飛行仿真模型的實時程序來實現(xiàn)無人機系統(tǒng)的運行機理與數(shù)據(jù)流程。
通過對無人機飛行仿真系統(tǒng)自上而下的分析,可以描述出不同粒度的子系統(tǒng)的特點和功能,使無人機飛行仿真系統(tǒng)的面向?qū)ο竽P途邆淞四K化、層次化和精細(xì)化等特征,并可以成為擴展對象的模型庫,即能夠隨著應(yīng)用的不同構(gòu)建不同粒度的仿真模型,無人機飛行仿真系統(tǒng)主要對象的層次結(jié)構(gòu)如圖3所示。
無人機飛行仿真系統(tǒng)按照功能部件和模型等級進行分解,其主要部件包括三部分:飛行環(huán)境模型、無人機飛機系統(tǒng)模型和任務(wù)設(shè)備半物理仿真模型。飛行環(huán)境的實時變化影響無人機飛機系統(tǒng)的飛行姿態(tài),而無人機飛機系統(tǒng)則能夠?qū)崟r控制任務(wù)設(shè)備半物理仿真模型(機載任務(wù)設(shè)備)。在仿真系統(tǒng)模型中,層次越高的類對象(無人機飛行仿真系統(tǒng)類對象)具有的職責(zé)性越強,它可以負(fù)責(zé)較低層次對象的組織和管理,層位越低的對象具有的功能性越強,即完成具體功能模塊的解算。無人機飛機系統(tǒng)模型模塊是仿真系統(tǒng)的核心部分,它主要包括:飛控計算機模型、動力系統(tǒng)模型、運動方程模型、機載傳感器模型、機載數(shù)據(jù)鏈模型等。每個部件模型都被封裝成具有各自特征、而且能完成特定功能的類,每個子系統(tǒng)都可以被映射成反映本系統(tǒng)特征的對象模型。
圖3 無人機仿真系統(tǒng)層次結(jié)構(gòu)圖Fig.3 Construction block diagrana of USA simulation system
為了方便無人機飛行仿真軟調(diào)試工作,系統(tǒng)設(shè)計初期在Visual C++環(huán)境下編寫了用戶操作界面,通過前臺界面的控制輸入達到人機交互的目的,啟動主機可以進入無人機模擬訓(xùn)練系統(tǒng)設(shè)置面,如圖4所示。
圖4 系統(tǒng)初始化界面圖Fig.4 Interface of system initialization
在實際的無人機模擬訓(xùn)練系統(tǒng)中,這部分是由實裝的無人機地面測控站代替,但用戶操作界面卻是開發(fā)調(diào)試階段重要的組成分,該用戶界面主要完成的功能:模擬飛行之前,進行無人機系統(tǒng)初始化設(shè)置(主要完成飛機機型選擇和起飛前的參數(shù)設(shè)置),飛行仿真軟件主要負(fù)責(zé)完成的任務(wù):人機界面的交互、對整個系統(tǒng)的管理與功能設(shè)定等。
設(shè)置仿真時間為90s,無人機初始速度(Airspeed)為23m/s、初始俯仰角為0°。設(shè)置其速度(Airspeed)的穩(wěn)定值為25m/s、俯仰角(θ)穩(wěn)定值為1.7°。圖5記錄了飛機空速變化曲線,圖6記錄了飛機俯仰角變化曲線。
圖5 空速仿真曲線圖Fig.5 Airspeed simulation curve
在無人機飛行過程中加入了風(fēng)干擾作用,即在空速和俯仰角控制率回路加入了隨機的風(fēng)干擾向量W[x,y,z],圖5和圖6中的上面仿真圖中W[x,y,z]=[0,0,0]m/s,而下面仿真圖中W[x,y,z]=[10,-10,0]m/s,加入風(fēng)干擾因素能夠再現(xiàn)復(fù)雜的空中環(huán)境,對無人機地面操控手的訓(xùn)練提供了相對真實的空中環(huán)境。
從典型參數(shù)的輸出曲線圖可以看出,在風(fēng)干擾的環(huán)境下,無人機出現(xiàn)了不穩(wěn)定現(xiàn)象(即飛行參數(shù)上下振動頻率加快),這與無人機實際飛行狀況非常接近。從仿真結(jié)果來看,基于面向?qū)ο笈c應(yīng)用框架技術(shù)所開發(fā)的某型無人機飛行仿真軟件能夠滿足系統(tǒng)的設(shè)計目標(biāo),且整個系統(tǒng)軟件運行穩(wěn)定。
圖6 俯仰角仿真曲線圖Fig.6 Elevation angle simulation curve
本文針對無人機飛行仿真軟件的開發(fā)設(shè)計進行了研究,提出了基于面向?qū)ο蠛蛻?yīng)用框架技術(shù)的無人機飛行仿真軟件開發(fā)方法。通過研究無人機系統(tǒng)的功能模塊、層次結(jié)構(gòu)和運行機制,提出了基于面向?qū)ο蠛蛻?yīng)用框架技術(shù)的三層框架體系的無人機飛行仿真軟件的開發(fā)方法,采用該方法開發(fā)了實例無人機飛行仿真軟件,仿真結(jié)果表明:面向?qū)ο蠹夹g(shù)開發(fā)的程序的靈活性和可維護性,更加便于分析、設(shè)計和理解;應(yīng)用框架能夠為特定領(lǐng)域提供軟件運行的基本類,并通過對這組類的使用、修改和擴充達到對應(yīng)用框架的重用的目的。
[1]吳漢平.無人機系統(tǒng)導(dǎo)論[M].北京:電子工業(yè)出版社,2003.
[2]張京,李飛躍,鄭顯舉,等.面向?qū)ο筌浖こ膛cUML[M].北京:人民郵電出版社,2008
[3]盧瀟,孫璐,劉娟,等.軟件工程[M].北京:北方交通大學(xué)出版社,2005.
[4]Eric F Sorton,Sonny Hammaker.Simulated Flight Testing of an Autonomous Unmanned Aerial Vehicle Using Flight Gear[R].Arlington,Virginia:AIAA US:2005.
[5]Michael M Madden.Examining Reuse in LaSRS+ +Based Projects[C]//AIAA Modeling and Simulation Technologies Conference and Exhibit.Montreal,Canada:AIAA,2001:2001-4119.
[6]Sean Kenney P.Rapid Prototyping of An aircraft Model in an Object oriented Simulation[R].US:Systems Devel-opment Branch NASA Langley Research Center,2001.
[7]Jon S Berndt.JSBSim:An Open Source Flight Dynamics Model in C++[C]//Rhode Island[C]//AIAA Modeling and Simulation Technologies Conference and Exhibit.US:AIAA,2004:4923.
[8]李英軍,呂建,王宏琳.面向?qū)ο髴?yīng)用框架在油氣勘探領(lǐng)域的應(yīng)用研究[J].軟件學(xué)報,1999,10(4):349-354.
[9]徐魯兵.面向?qū)ο蠛娇瞻l(fā)動機性能仿真系統(tǒng)設(shè)計與實現(xiàn)[D].西安:西北工業(yè)大學(xué),2007.
[10]周文祥.航空發(fā)動機及控制系統(tǒng)建模與面向?qū)ο蟮姆抡嫜芯浚跠].南京:南京航空航天大學(xué),2006.