施明健,王大勇,鄭文軒,任 斌,王延祥,4,王宏倫?
(1. 沈陽(yáng)飛機(jī)設(shè)計(jì)研究所,遼寧 沈陽(yáng) 110035;2. 北京航空航天大學(xué)自動(dòng)化科學(xué)與電氣工程學(xué)院,北京 100191;3. 北京航空航天大學(xué)飛行器控制一體化技術(shù)重點(diǎn)實(shí)驗(yàn)室,北京 100191;4. 北京航空航天大學(xué)未來(lái)空天技術(shù)學(xué)院/高等理工學(xué)院,北京 100191)
空中加油(Aerial Refueling)是利用加油機(jī)在空中為飛行中的其他飛行器補(bǔ)充燃料的技術(shù),是增大飛行器作戰(zhàn)半徑和滯空時(shí)間,提高載彈量,解決起飛重量與飛行性能間矛盾的重要手段[1]。近幾十年,隨著無(wú)人系統(tǒng)技術(shù)的不斷發(fā)展,無(wú)人機(jī)被逐步應(yīng)用于軍事領(lǐng)域和民用領(lǐng)域。在上述背景下,無(wú)人機(jī)空中加/受油的需求也在日益增加。傳統(tǒng)空中加油技術(shù)雖然為無(wú)人機(jī)空中加油提供了一定的技術(shù)支持,但又不完全適用于無(wú)人機(jī)空中加油問(wèn)題。相較于有飛行員參與的傳統(tǒng)空中加油,自主空中加油的無(wú)人化特點(diǎn)要求必須設(shè)計(jì)受油機(jī)的精確對(duì)接控制律,從而使得受油機(jī)具備與加油機(jī)完成自主對(duì)接的能力。因此,針對(duì)無(wú)人機(jī)空中加油問(wèn)題,自主空中加油(Automated Aerial Refueling,AAR)技術(shù)得到了專門研究[2-7]。
在自主空中加油技術(shù)的研究過(guò)程中,地面仿真試驗(yàn)是進(jìn)行技術(shù)驗(yàn)證的重要途徑,在驗(yàn)證技術(shù)路線可行性,保證任務(wù)安全性,提高任務(wù)成功率等方面起著不可忽視的作用。一般而言,仿真條件越符合實(shí)際情況,仿真結(jié)果的可參考性就越強(qiáng)。但自主空中加油系統(tǒng)的組成十分復(fù)雜,包括六自由度、非線性、變質(zhì)量的加/受油機(jī)系統(tǒng);柔性的加油軟管-錐套組合體;由加油機(jī)尾流、受油機(jī)前擾波和大氣紊流組成的復(fù)雜氣流干擾系統(tǒng)等[8]。在如此復(fù)雜的系統(tǒng)組成下,一方面,單一計(jì)算機(jī)系統(tǒng)對(duì)自主空中加油技術(shù)進(jìn)行單線程仿真時(shí)很難達(dá)到實(shí)時(shí)仿真;另一方面,單一計(jì)算機(jī)系統(tǒng)也難以逼真模擬自主空中加油任務(wù)中加、受油機(jī)之間以及飛行控制器與飛機(jī)之間的通信。而通過(guò)分布式仿真(Distributed Simulation)技術(shù),一方面可以實(shí)現(xiàn)并行實(shí)時(shí)計(jì)算;另一方面,按照實(shí)際物理系統(tǒng)劃分各仿真節(jié)點(diǎn)則更加接近真實(shí)系統(tǒng),且能將系統(tǒng)之間的通信納入仿真過(guò)程,亦能為接入半物理仿真以及其他系統(tǒng)留出可擴(kuò)展空間。針對(duì)分布式仿真的需求,國(guó)際上先后發(fā)展出了DIS(Distributed Interactive Simulation)、ALSP(Aggregation Level Simulation Protocol)以及HLA(High Level Architecture)三個(gè)標(biāo)準(zhǔn)[9]。漢諾威大學(xué)的ACOSAR項(xiàng)目組也研發(fā)了自己的DCP(Distributed Co-Simulation Protocol)協(xié)議并將其開源[10-11],開源界也有一些諸如coral的分布式仿真框架。但這些標(biāo)準(zhǔn)和框架有一個(gè)共同的特點(diǎn):定義了充足的可擴(kuò)展的協(xié)議功能和接口,導(dǎo)致整體邏輯復(fù)雜,實(shí)現(xiàn)困難,并且有很多的功能對(duì)于小型項(xiàng)目來(lái)說(shuō)是用不到的。因此,有許多人員選擇基于TCP(Transmission Control Protocol,傳輸控制協(xié)議)或者ZeroMQ等輕量級(jí)框架開發(fā)簡(jiǎn)單的分布式仿真系統(tǒng)[12-13],并根據(jù)項(xiàng)目的具體需求定制系統(tǒng)功能。
本文在對(duì)自主空中加油技術(shù)研究的基礎(chǔ)上,基于目前行業(yè)內(nèi)對(duì)空中加油技術(shù)地面實(shí)時(shí)仿真系統(tǒng)的需求,基于ZeroMQ和C++/Qt開發(fā)了一套無(wú)人自主空中加油分布式仿真系統(tǒng)。本系統(tǒng)能夠?qū)崿F(xiàn)對(duì)自主空中加油過(guò)程的實(shí)時(shí)仿真,并具有良好的人機(jī)交互界面。
分布式仿真系統(tǒng)的核心部分是通信網(wǎng)絡(luò)。對(duì)于網(wǎng)絡(luò)通信,目前絕大多數(shù)網(wǎng)絡(luò)都基于TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)際協(xié)議)構(gòu)建,其中包括TCP、UDP(User Datagram Protocol,用戶數(shù)據(jù)包協(xié)議)、FTP(File Transfer Protocol,文件傳輸協(xié)議)等多個(gè)協(xié)議。對(duì)于傳輸仿真數(shù)據(jù)的需求,可以使用各類網(wǎng)絡(luò)通信中間件實(shí)現(xiàn),包括ActiveMQ、RabbitMQ、ZeroMQ、Kafka等。本文利用ZeroMQ進(jìn)行通信網(wǎng)絡(luò)的構(gòu)建,接下來(lái)對(duì)ZeroMQ的特點(diǎn)做簡(jiǎn)單介紹。
ZeroMQ是一種消息隊(duì)列中間件,它具有很多適用于分布式系統(tǒng)架構(gòu)的特點(diǎn)[14]:
1)簡(jiǎn)單
ZeroMQ將底層的Socket、多線程、緩沖區(qū)等內(nèi)容封裝起來(lái),提供了更高層面的API,且從初始化到發(fā)送消息也僅需要數(shù)行代碼,遠(yuǎn)低于繁雜的原生Socket接口。
2)多種消息模式
ZeroMQ支持請(qǐng)求回應(yīng)、發(fā)布訂閱、管道以及獨(dú)占對(duì)共4種消息模式,它們之間還能組合出更多的模式以實(shí)現(xiàn)從一對(duì)一到多對(duì)多的通信模式。
3)高性能
ZeroMQ的協(xié)議簡(jiǎn)單,且性能遠(yuǎn)超ActiveMQ等同類軟件。
4)無(wú)須消息服務(wù)器
ActiveMQ等同類軟件需要有獨(dú)立的消息服務(wù)器以實(shí)現(xiàn)消息的持久化存儲(chǔ),保證即使在處理節(jié)點(diǎn)離線的情況下也能將消息緩存等待節(jié)點(diǎn)上線后處理。而仿真環(huán)境的數(shù)據(jù)都是實(shí)時(shí)產(chǎn)生并消耗的,不需要中間存儲(chǔ)。
5)通信數(shù)據(jù)原子化
原子化的含義是,通過(guò)ZeroMQ發(fā)送的一組數(shù)據(jù),要么完全沒有收到,要么收到完整的數(shù)據(jù)包。也就是說(shuō)ZeroMQ會(huì)自動(dòng)處理并保證接收到完整的數(shù)據(jù)而無(wú)須再手動(dòng)拆包拼包。再結(jié)合基于TCP的通信以及局域網(wǎng)穩(wěn)定的環(huán)境,可以認(rèn)為ZeroMQ能夠提供穩(wěn)定可靠的數(shù)據(jù)傳輸。
為了實(shí)現(xiàn)分布式仿真,本文設(shè)計(jì)兩類節(jié)點(diǎn)——管理節(jié)點(diǎn)和仿真節(jié)點(diǎn),以及兩種話題——指令話題和數(shù)據(jù)話題。
管理節(jié)點(diǎn)負(fù)責(zé)統(tǒng)籌管理各仿真節(jié)點(diǎn),提供節(jié)點(diǎn)注冊(cè)、仿真管理等功能;而仿真節(jié)點(diǎn)則專注于實(shí)現(xiàn)仿真工作,在管理節(jié)點(diǎn)的指令下執(zhí)行仿真動(dòng)作,并收發(fā)仿真數(shù)據(jù)。
其中,管理節(jié)點(diǎn)可發(fā)布指令話題,用于發(fā)布各類指令,各仿真節(jié)點(diǎn)通過(guò)訂閱該話題來(lái)接收相應(yīng)指令。仿真節(jié)點(diǎn)也可發(fā)布指令話題,用于發(fā)布對(duì)管理節(jié)點(diǎn)指令的回復(fù)消息,管理節(jié)點(diǎn)通過(guò)訂閱該話題來(lái)接收回復(fù)消息。
此外,各個(gè)仿真節(jié)點(diǎn)還能夠發(fā)布自己所產(chǎn)生的數(shù)據(jù)話題,需要使用對(duì)應(yīng)數(shù)據(jù)的節(jié)點(diǎn)來(lái)訂閱該數(shù)據(jù)話題,實(shí)現(xiàn)節(jié)點(diǎn)間的數(shù)據(jù)流動(dòng)。對(duì)于數(shù)據(jù)話題,需要進(jìn)一步明確話題的名稱、話題的發(fā)布者以及話題所在的端口。
程序框架如圖1所示。圖中箭頭表示發(fā)布或訂閱的話題,而虛線框的“若干仿真數(shù)據(jù)話題”是為了便于理解和繪圖設(shè)置的,實(shí)際上并不存在一個(gè)“話題的集合”,而是由每個(gè)仿真節(jié)點(diǎn)分別發(fā)布了若干話題,再根據(jù)自己所需訂閱了若干話題。
對(duì)于仿真節(jié)點(diǎn)和管理節(jié)點(diǎn)之間傳輸?shù)闹噶顢?shù)據(jù),本文還定義了一定的數(shù)據(jù)幀格式以方便數(shù)據(jù)的傳輸處理,數(shù)據(jù)幀格式如圖2所示。其中節(jié)點(diǎn)編號(hào)為各個(gè)仿真節(jié)點(diǎn)的編號(hào);指令代碼為預(yù)定義的一系列指令;數(shù)據(jù)長(zhǎng)度標(biāo)識(shí)了后續(xù)的附加數(shù)據(jù)的字節(jié)數(shù);附加數(shù)據(jù)則包含了指令的詳細(xì)內(nèi)容,例如,初始化時(shí)會(huì)包含所有節(jié)點(diǎn)的相關(guān)信息。而對(duì)于仿真節(jié)點(diǎn)之間傳送的仿真數(shù)據(jù),則直接以原始數(shù)據(jù)發(fā)布,不再添加額外的幀頭。
同時(shí),分布式仿真程序中還預(yù)定義了一系列指令,包括初始化、注冊(cè)、開始仿真、推進(jìn)仿真、暫停、結(jié)束等,而上述定義的指令幀格式也為后續(xù)擴(kuò)展指令保留了充足的擴(kuò)展空間。
管理節(jié)點(diǎn)是仿真網(wǎng)絡(luò)的核心節(jié)點(diǎn),主要負(fù)責(zé)管理注冊(cè)節(jié)點(diǎn)信息,發(fā)送指令等。管理節(jié)點(diǎn)對(duì)外部提供的功能接口包括:設(shè)置指令接收、發(fā)送端口;獲取仿真節(jié)點(diǎn)信息列表;獲取仿真數(shù)據(jù)話題信息列表;設(shè)置仿真時(shí)長(zhǎng)和仿真步長(zhǎng);設(shè)置錄制與回放;設(shè)置仿真速度;初始化仿真;開始、暫停、停止、單步推進(jìn)仿真;節(jié)點(diǎn)初始化、注冊(cè)、仿真推進(jìn)和發(fā)生錯(cuò)誤等事件的回調(diào)函數(shù)等。
管理節(jié)點(diǎn)的運(yùn)行邏輯框圖如圖3所示。
圖3 管理節(jié)點(diǎn)程序邏輯框圖Fig.3 Logical block diagram of management node program
管理節(jié)點(diǎn)啟動(dòng)后,等待仿真節(jié)點(diǎn)發(fā)送注冊(cè)消息,待所有節(jié)點(diǎn)注冊(cè)完畢后可手動(dòng)進(jìn)行初始化操作。在啟動(dòng)仿真后,管理節(jié)點(diǎn)將啟動(dòng)一個(gè)周期為1 ms的定時(shí)器,循環(huán)檢查當(dāng)前時(shí)間是否到達(dá)了仿真時(shí)間,再檢查各個(gè)節(jié)點(diǎn)完成情況,都滿足條件后發(fā)出下一步仿真的指令。
仿真節(jié)點(diǎn)是用于實(shí)現(xiàn)仿真程序的節(jié)點(diǎn),主要負(fù)責(zé)在管理節(jié)點(diǎn)的指令驅(qū)動(dòng)下完成仿真動(dòng)作。仿真節(jié)點(diǎn)主要提供的功能接口有:設(shè)置指令發(fā)送、接收端口及管理節(jié)點(diǎn)IP用于連接到管理節(jié)點(diǎn);設(shè)置本節(jié)點(diǎn)IP及數(shù)據(jù)話題起始端口,用于仿真節(jié)點(diǎn)之間的仿真數(shù)據(jù)話題的相互連接;添加仿真數(shù)據(jù)話題;設(shè)置仿真初始化、推進(jìn)、后退、結(jié)束等仿真操作的回調(diào)函數(shù)。
仿真節(jié)點(diǎn)相比管理節(jié)點(diǎn)所需的設(shè)置和接口要少很多,只需要提供用于連接管理節(jié)點(diǎn)和仿真節(jié)點(diǎn)之間互聯(lián)的信息即可,此外,還需要設(shè)置仿真相關(guān)的數(shù)據(jù)話題和回調(diào)函數(shù)用于仿真的各階段調(diào)用。仿真節(jié)點(diǎn)運(yùn)行的邏輯框圖如圖4所示。
圖4 仿真節(jié)點(diǎn)程序邏輯框圖Fig.4 Logic block diagram of simulation node program
通過(guò)上述流程框圖不難看出,仿真節(jié)點(diǎn)的主體邏輯與接收各類消息密切相關(guān)。與管理節(jié)點(diǎn)類似,仿真節(jié)點(diǎn)也使用一個(gè)子線程處理所有消息的接收,包括來(lái)自管理節(jié)點(diǎn)的指令和來(lái)自其他仿真節(jié)點(diǎn)的仿真數(shù)據(jù)。在有數(shù)據(jù)到來(lái)時(shí),將根據(jù)數(shù)據(jù)類型分別處理管理節(jié)點(diǎn)指令或者是更新仿真數(shù)據(jù),如果是仿真指令則會(huì)調(diào)用對(duì)應(yīng)的仿真函數(shù),并在結(jié)束后將自己產(chǎn)生的仿真數(shù)據(jù)廣播出去。
同時(shí),仿真節(jié)點(diǎn)還實(shí)現(xiàn)了錄制和回放功能。如果管理節(jié)點(diǎn)選擇了錄制本次仿真,仿真節(jié)點(diǎn)會(huì)自動(dòng)將本節(jié)點(diǎn)每步仿真產(chǎn)生的數(shù)據(jù)以二進(jìn)制數(shù)據(jù)文件的形式保存在硬盤上;而如果管理節(jié)點(diǎn)選擇了回放仿真,仿真節(jié)點(diǎn)會(huì)加載對(duì)應(yīng)的錄制文件,并在每步仿真時(shí)讀取對(duì)應(yīng)的數(shù)據(jù)。
需要注意的是,各仿真函數(shù)的調(diào)用處于子線程中,考慮到用戶可能會(huì)在其他線程對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步處理操作,就需要對(duì)仿真數(shù)據(jù)做相應(yīng)的處理以避免沖突。對(duì)于本節(jié)點(diǎn)發(fā)布的數(shù)據(jù),在調(diào)用仿真函數(shù)結(jié)束后立刻將其廣播發(fā)布出去即可;而對(duì)于要接收的數(shù)據(jù),需要額外建立緩沖區(qū),在接收到數(shù)據(jù)時(shí)先保存至緩沖區(qū),在調(diào)用仿真函數(shù)之前再將其更新至用戶數(shù)據(jù)區(qū)。
每個(gè)仿真節(jié)點(diǎn)都會(huì)產(chǎn)生一定的仿真數(shù)據(jù),也會(huì)需要讀取若干其他節(jié)點(diǎn)產(chǎn)生的數(shù)據(jù),各仿真節(jié)點(diǎn)之間會(huì)形成復(fù)雜的數(shù)據(jù)依賴關(guān)系。對(duì)于每個(gè)仿真數(shù)據(jù)話題,需要明確其由哪個(gè)節(jié)點(diǎn)產(chǎn)生,包括該節(jié)點(diǎn)的IP、發(fā)布話題的端口號(hào),這些信息會(huì)在節(jié)點(diǎn)注冊(cè)時(shí)發(fā)送給管理節(jié)點(diǎn),再在初始化時(shí)由管理節(jié)點(diǎn)廣播給所有節(jié)點(diǎn)。各仿真節(jié)點(diǎn)收到初始化信息后,就可以根據(jù)自身需要對(duì)所需的數(shù)據(jù)話題建立監(jiān)聽鏈接。
用戶在對(duì)某個(gè)仿真節(jié)點(diǎn)創(chuàng)建仿真數(shù)據(jù)話題時(shí),需要明確數(shù)據(jù)名稱即話題名稱、數(shù)據(jù)的容量、該節(jié)點(diǎn)是發(fā)布還是讀取該數(shù)據(jù),其余參數(shù)由程序自動(dòng)確定。
在前文所述作為底層的通信網(wǎng)絡(luò)基礎(chǔ)上,本節(jié)將介紹本文中開發(fā)的仿真管理節(jié)點(diǎn)及各個(gè)仿真節(jié)點(diǎn)的應(yīng)用程序。
各仿真節(jié)點(diǎn)不僅要完成數(shù)字仿真工作,還需要提供一定的人機(jī)接口進(jìn)行仿真設(shè)置、指令輸入、查看仿真數(shù)據(jù)等,因此還需要構(gòu)建用戶圖形界面(Graphical User Interface,GUI),以提供良好的交互體驗(yàn)??紤]到仿真通信網(wǎng)絡(luò)使用C++編寫,本文選擇了同樣基于C++的Qt框架。
仿真管理節(jié)點(diǎn)主要負(fù)責(zé)整個(gè)仿真過(guò)程的配置與調(diào)度管理,它對(duì)用戶來(lái)講相當(dāng)于控制臺(tái),可以很好地控制整個(gè)仿真的過(guò)程。管理節(jié)點(diǎn)掌握著仿真時(shí)鐘,仿真運(yùn)行后,每隔一個(gè)仿真周期,管理節(jié)點(diǎn)會(huì)向各仿真應(yīng)用節(jié)點(diǎn)發(fā)送仿真推進(jìn)指令,各仿真應(yīng)用節(jié)點(diǎn)接收到仿真推進(jìn)指令后,分別調(diào)用各自的仿真過(guò)程函數(shù),完成一個(gè)周期的仿真,并交互必要的仿真數(shù)據(jù)。管理節(jié)點(diǎn)程序界面如圖5所示。
圖5 管理節(jié)點(diǎn)程序界面Fig.5 Management node program interface
圖5中展示了有兩個(gè)測(cè)試仿真節(jié)點(diǎn)時(shí)的管理節(jié)點(diǎn)界面。其中上方工具欄中的按鈕依次為搜索節(jié)點(diǎn)、初始化、開始仿真、暫停仿真、終止仿真、仿真加速、仿真減速和仿真設(shè)置。這些按鈕通過(guò)Qt中的QPushButton類實(shí)現(xiàn),在程序中通過(guò)Qt的信號(hào)/槽機(jī)制將按鈕事件連接到管理節(jié)點(diǎn)類對(duì)應(yīng)的功能代碼中。仿真設(shè)置按鈕則連接到仿真設(shè)置窗口的打開動(dòng)作上。
中間區(qū)域?yàn)楣?jié)點(diǎn)信息展示區(qū),以樹狀圖的形式展示各個(gè)節(jié)點(diǎn)的信息,包括節(jié)點(diǎn)名稱、IP、端口、初始化狀態(tài)和當(dāng)前步數(shù),以及節(jié)點(diǎn)中包含的仿真數(shù)據(jù)話題的名稱、IP和端口以及所有權(quán)信息。這部分展示內(nèi)容使用Qt的QTreeWidget樹狀圖控件實(shí)現(xiàn),同時(shí)向管理節(jié)點(diǎn)類注冊(cè)了節(jié)點(diǎn)信息更新的回調(diào)函數(shù),在節(jié)點(diǎn)注冊(cè)、節(jié)點(diǎn)仿真推進(jìn)等情況下會(huì)調(diào)用該函數(shù),并在函數(shù)中根據(jù)相關(guān)信息更新圖表。
最下方顯示了當(dāng)前仿真相關(guān)信息,包括:
1)仿真步長(zhǎng):每推進(jìn)一步需要的時(shí)間,也是仿真程序中的離散步長(zhǎng);
2)仿真速度:仿真時(shí)間與真實(shí)時(shí)間的比例,100%即為實(shí)時(shí)仿真;
3)仿真類型:包括仿真若干秒的定時(shí)長(zhǎng)仿真和不設(shè)時(shí)長(zhǎng)的自由仿真兩種;
4)仿真狀態(tài):當(dāng)前整個(gè)系統(tǒng)的狀態(tài),包括等待注冊(cè)、初始化中、仿真中、暫停中、仿真結(jié)束等;
5)仿真時(shí)間:仿真程序內(nèi)部的時(shí)間;
6)實(shí)際速度:當(dāng)前仿真推進(jìn)的速度與真實(shí)時(shí)間的比例,100%為實(shí)時(shí)仿真;
7)仿真狀態(tài)進(jìn)度條:如果仿真類型為定時(shí)長(zhǎng)仿真,則會(huì)顯示一個(gè)不斷推進(jìn)的進(jìn)度,自由仿真則會(huì)顯示不斷滾動(dòng)的忙碌進(jìn)度條;
8)錄制重播狀態(tài):即當(dāng)前仿真進(jìn)程是否啟用了錄制或者重播功能。
2.2.1 仿真節(jié)點(diǎn)GUI界面
仿真節(jié)點(diǎn)的基本界面,包括文字顯示、輸入框、選擇框、按鈕等都可以直接使用Qt的GUI工具搭建,但仍有一些界面無(wú)法用Qt的基本控件實(shí)現(xiàn),因此,本文引入一些第三方控件來(lái)實(shí)現(xiàn)仿真節(jié)點(diǎn)GUI界面的搭建。
仿真過(guò)程中會(huì)產(chǎn)生大量的仿真數(shù)據(jù),需要實(shí)時(shí)展示以供監(jiān)控狀態(tài)、觀察數(shù)據(jù)。Qwt(Qt Widgets for Technical Applications)是一個(gè)基于Qt框架開發(fā)的用于科學(xué)應(yīng)用的控件庫(kù)[15],包含了各類圖表、按鈕、旋鈕等控件,效率極高,能夠滿足本文的實(shí)時(shí)顯示仿真數(shù)據(jù)的需求。
對(duì)于飛行姿態(tài)數(shù)據(jù),如果仍以折線圖或者數(shù)字形式顯示則不夠直觀。本文中采用名為QFlightInstrument的飛行儀表盤控件展示飛行姿態(tài),如圖6所示,左側(cè)為空速,右側(cè)為高度和升降速率,下方為航向,中間則可綜合顯示俯仰、滾轉(zhuǎn)、側(cè)滑等角度。
圖6 飛行儀表盤控件Fig.6 Flight instrument panel control
同樣的,飛行軌跡如果直接以數(shù)字或者曲線表示也不夠直觀,因此,本文將地圖嵌入程序中,利用地圖的JavaScript API接口,并結(jié)合Qt的QWebChannel模塊實(shí)現(xiàn)C++與JavaScript程序的相互調(diào)用,將飛機(jī)坐標(biāo)以相對(duì)地圖上某一固定點(diǎn)的位置的形式顯示在地圖上,同時(shí)可以顯示實(shí)時(shí)飛行軌跡、預(yù)定航線、障礙物等信息。航跡地圖示例如圖7所示。
圖7 航跡地圖示意圖Fig.7 Schematic diagram of track map
2.2.2 仿真節(jié)點(diǎn)
在前文所述的仿真通信網(wǎng)絡(luò)、仿真節(jié)點(diǎn)GUI界面構(gòu)建的基礎(chǔ)上,本節(jié)將展示本文中構(gòu)建的分布式仿真系統(tǒng)的仿真節(jié)點(diǎn)。根據(jù)實(shí)際系統(tǒng)物理意義和計(jì)算量,本文將整個(gè)仿真系統(tǒng)分為以下幾個(gè)節(jié)點(diǎn):受油機(jī)數(shù)字飛機(jī)節(jié)點(diǎn)、指揮控制節(jié)點(diǎn)、飛行控制節(jié)點(diǎn)、風(fēng)擾節(jié)點(diǎn)、軟管錐套節(jié)點(diǎn)和錐套數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)。
以仿真20 s為例,管理節(jié)點(diǎn)及各仿真節(jié)點(diǎn)的運(yùn)行界面如下所示,其中管理節(jié)點(diǎn)為圖8,可以看到其中列出了各個(gè)節(jié)點(diǎn)的名稱、步數(shù)以及包含的數(shù)據(jù)話題信息。
圖8 仿真過(guò)程中的管理節(jié)點(diǎn)Fig.8 Management nodes in the simulation process
各個(gè)仿真節(jié)點(diǎn)如圖9—圖14所示,分別利用前述編程工具實(shí)現(xiàn)了GUI界面,展示了對(duì)應(yīng)的仿真數(shù)據(jù)。
圖9 數(shù)字飛機(jī)節(jié)點(diǎn)Fig.9 Digital aircraft node
圖10 指揮控制節(jié)點(diǎn)Fig.10 Command and control node
圖11 飛行控制節(jié)點(diǎn)Fig.11 Flight control node
圖12 風(fēng)擾節(jié)點(diǎn)Fig.12 Wind disturbance node
圖13 軟管錐套節(jié)點(diǎn)Fig.13 Hose-Drogue assembly node
圖14 錐套數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)Fig.14 Drogue data transfer node
數(shù)字飛機(jī)節(jié)點(diǎn)可接收飛行控制系統(tǒng)產(chǎn)生的控制指令以及風(fēng)擾節(jié)點(diǎn)產(chǎn)生的大氣紊流和加油機(jī)尾流數(shù)據(jù)。通過(guò)對(duì)考慮了風(fēng)擾、參數(shù)攝動(dòng)以及燃油質(zhì)量變化的六自由度非線性剛體飛機(jī)模型進(jìn)行計(jì)算得到飛行狀態(tài)。此外,受油機(jī)的數(shù)字飛機(jī)部分還包括受油插頭模型、接收飛機(jī)重心位置和姿態(tài)信息、產(chǎn)生受油插頭的位置信息。圖9展示了數(shù)字飛機(jī)節(jié)點(diǎn)的程序界面,用于顯示加/受油機(jī)的各狀態(tài)量。界面左側(cè)區(qū)域是狀態(tài)選擇區(qū)域,用戶可選擇需要顯示的狀態(tài)量,界面右側(cè)區(qū)域?yàn)闋顟B(tài)顯示區(qū)域,可以將被選擇的狀態(tài)量的變化曲線顯示出來(lái)。
指揮控制節(jié)點(diǎn)以可視化控件實(shí)時(shí)監(jiān)控飛機(jī)的飛行軌跡以及重要飛行狀態(tài),程序界面如圖10所示。指揮控制節(jié)點(diǎn)的左側(cè)區(qū)域是地圖,用于顯示飛機(jī)的位置及軌跡,右上方區(qū)域?yàn)轱w行儀表盤。同時(shí),由于儀表盤分辨率較低,界面右下方以數(shù)字形式將飛機(jī)重要參數(shù)顯示出來(lái)。
飛行控制節(jié)點(diǎn)的功能是根據(jù)飛行狀態(tài)和環(huán)境參數(shù)等信息計(jì)算對(duì)飛機(jī)的控制指令。以受油機(jī)為例,對(duì)接控制系統(tǒng)接收錐套位置信息和數(shù)字飛機(jī)節(jié)點(diǎn)產(chǎn)生的飛行狀態(tài)信息,通過(guò)設(shè)計(jì)好的控制律產(chǎn)生控制指令。飛行控制節(jié)點(diǎn)程序界面如圖11所示。
風(fēng)擾節(jié)點(diǎn)負(fù)責(zé)計(jì)算產(chǎn)生大氣紊流、受油機(jī)前擾波和加油機(jī)尾流等氣流擾動(dòng)參數(shù),其程序界面如圖12所示。
加油機(jī)軟管錐套節(jié)點(diǎn)負(fù)責(zé)計(jì)算加油機(jī)飛行狀態(tài)以及受加油機(jī)牽引和氣流擾動(dòng)作用的加油軟管-錐套組合體的運(yùn)動(dòng)狀態(tài)。加油軟管錐套節(jié)點(diǎn)的程序界面如圖13所示,加油機(jī)和加油錐套的各項(xiàng)數(shù)據(jù)以曲線形式表示出來(lái)。
錐套數(shù)據(jù)中轉(zhuǎn)節(jié)點(diǎn)用于在對(duì)接段的半物理仿真中與錐套的半物理仿真設(shè)備對(duì)接,將仿真的錐套數(shù)據(jù)發(fā)送給控制錐套運(yùn)動(dòng)的機(jī)械臂,并將機(jī)器視覺識(shí)別的錐套位置信息接收并反饋給仿真系統(tǒng)??梢栽诔绦蛑星袚Q是否接入半物理仿真系統(tǒng),接入時(shí)錐套數(shù)據(jù)為視覺識(shí)別數(shù)據(jù),否則為仿真數(shù)據(jù)。
本文基于ZeroMQ和C++/Qt開發(fā)了自主空中加油技術(shù)分布式仿真系統(tǒng)。該系統(tǒng)能夠?qū)?fù)雜的自主空中加油系統(tǒng)進(jìn)行實(shí)時(shí)仿真,并方便接入半物理仿真設(shè)備,對(duì)驗(yàn)證空中加油控制方法有重要作用。