鞠 震,廉東本
1(中國科學院大學,北京 100049)
2(中國科學院 沈陽計算技術(shù)研究所,沈陽 110168)
態(tài)勢是時間和空間中的環(huán)境以及事件,首先在軍事領(lǐng)域被提出.在20世紀80年代,美國空軍提出了態(tài)勢感知的概念,90年代態(tài)勢感知的概念開始普及.態(tài)勢感知包含感知,理解和預測三層含義.態(tài)勢顯示就是將態(tài)勢感知的內(nèi)容顯示出來.態(tài)勢可視化系統(tǒng)是戰(zhàn)場仿真系統(tǒng)的重要組成部分,可以為決策、分析和訓練人員提供豐富的作戰(zhàn)過程信息,是觀測戰(zhàn)場對象的有效手段,是戰(zhàn)場仿真系統(tǒng)控制和反饋的重要依據(jù).如今除軍事領(lǐng)域外,態(tài)勢可視化系統(tǒng)已經(jīng)應用在消防、救災、網(wǎng)絡(luò)安全等諸多領(lǐng)域.
最初的態(tài)勢可視化系統(tǒng)都是在HLA 體系下構(gòu)建的,與仿真聯(lián)邦綁定,一方面使得態(tài)勢可視化系統(tǒng)可以在HLA 體系內(nèi)復用,另一方面也限制了態(tài)勢可視化系統(tǒng)在其他領(lǐng)域的靈活運用[1].隨著GIS 和三維引擎技術(shù)的發(fā)展,基于GIS 和三維引擎的態(tài)勢可視化系統(tǒng)也變得越來越多,GIS 和三維引擎逐漸成為態(tài)勢可視化的通用技術(shù).王賽君等研究了基于GIS 的態(tài)勢可視化系統(tǒng)的關(guān)鍵技術(shù)[2].江波等研究了基于Unity 的態(tài)勢可視化系統(tǒng)的關(guān)鍵技術(shù)[3].基于GIS 的態(tài)勢可視化系統(tǒng)是二維態(tài)勢可視化系統(tǒng),具有宏觀性好,整體性強的優(yōu)點.基于Unity 的態(tài)勢可視化系統(tǒng)是三維態(tài)勢可視化系統(tǒng),具有場景真實,顯示直觀的優(yōu)點.顯然,如果一個態(tài)勢可視化系統(tǒng)要同時具備以上兩種優(yōu)點,則需要系統(tǒng)既有二維顯示部分,又有三維顯示部分.如果二維與三維顯示部分零散地加入到態(tài)勢可視化系統(tǒng)中,則會面臨系統(tǒng)的二三維顯示內(nèi)容難以互相對應,認知不協(xié)調(diào)的問題.當前的主流二三維聯(lián)動可視化系統(tǒng)研究集中于擴展某一平臺的功能,即單獨的使用G I S 或Unity 完成二三維聯(lián)動顯示,而不涉及GIS 和Unity 的跨平臺聯(lián)動.這種方案的優(yōu)點是系統(tǒng)構(gòu)建簡單,可以依賴平臺內(nèi)部的聯(lián)動機制,缺點是使用GIS 進行三維顯示和使用Unity 進行二維顯示在功能和擴展性上都要受到限制.
本文結(jié)合了基于GIS 的二維顯示技術(shù)和基于Unity 的三維顯示技術(shù),將二三維顯示功能集成到一個態(tài)勢可視化系統(tǒng)之中,同時研究了跨平臺的二三維顯示部分的聯(lián)動機制,使得分別基于GIS 和Unity 的二三維顯示部分可以聯(lián)動,即二維和三維顯示部分顯示的態(tài)勢一致.本文設(shè)計并實現(xiàn)了一個二三維聯(lián)動的態(tài)勢可視化系統(tǒng),將系統(tǒng)整合到戰(zhàn)場仿真系統(tǒng)中.經(jīng)測試,系統(tǒng)能夠完成態(tài)勢顯示任務,系統(tǒng)同時具備了宏觀性好和顯示直觀的優(yōu)點.
目前已有的態(tài)勢可視化系統(tǒng)中,二維顯示部分的主流技術(shù)是GIS,三維顯示部分的主流技術(shù)是Unity.對于二三維聯(lián)動的態(tài)勢可視化系統(tǒng)的研究則集中于擴展某一平臺的功能,即單獨使用GIS 或Unity 完成二三維顯示,不涉及跨平臺的聯(lián)動.本文的二三維顯示部分參考和集成了現(xiàn)有的主流技術(shù),聯(lián)動部分的技術(shù)則涉及坐標變換、消息中間件、實體二三維模型管理、AAR 存檔等技術(shù).
GIS(地理信息系統(tǒng))是結(jié)合了地理學與地圖學,用于輸入、存儲、查詢、分析和顯示地理數(shù)據(jù)的計算機系統(tǒng).在科學調(diào)查、資源管理、財產(chǎn)管理、發(fā)展規(guī)劃、繪圖和路線規(guī)劃等領(lǐng)域已經(jīng)得到了廣泛的應用.本文采用GIS 作為二維顯示部分的技術(shù)平臺.
市面上有多家公司開發(fā)的多種GIS 套件,應用最廣泛的是美國Esri 公司的ArcGIS 和中國超圖公司的SuperMap.SuperMap 是超圖集團打造的專業(yè)的地理信息系統(tǒng)產(chǎn)品系列,包括云GIS 服務器、在線GIS 平臺、邊緣GIS 服務器、組件GIS、桌面GIS、Web 端GIS、移動GIS 等.本文使用了其中的桌面GIS 制作地圖,用了云GIS 服務器作為后臺提供地圖服務,用了Web 端GIS 作為二維顯示客戶端的插件加載和顯示地圖.
Unity 是一款跨平臺的三維引擎,由丹麥Unity 公司開發(fā),支持包括Linux、Windows、Android 在內(nèi)的27 個平臺.它最初被應用在游戲領(lǐng)域,而今也被廣泛的應用于虛擬仿真、汽車、建筑、電影動漫等諸多領(lǐng)域.隨著越來越多的工業(yè)項目選用了它,Unity 已經(jīng)把自己定義為交互式內(nèi)容創(chuàng)作引擎.Unity 是一個整合了編輯器、編譯器的完整三維引擎,開發(fā)語言是C#.Unity 還支持地形編輯、腳本控制、網(wǎng)絡(luò)功能、物理仿真等特性.本文使用Unity 開發(fā)系統(tǒng)的三維顯示客戶端.
地球是三維空間中的球體,而地圖是二維空間中的平面,所以需要找到一種方法,能夠?qū)⑷S的球體映射到一個二維的平面上.在GIS 系統(tǒng)中常用的映射方式是墨卡托投影.墨卡托投影的原理是將地球近似的看作一個球體,用一個與地球同直徑的圓柱沿自轉(zhuǎn)軸方向套住地球.當一條從地心出發(fā)的直線穿過地表與圓柱表面相交,則直線與地表相交的點,在圓柱上的投影,就是直線與圓柱表面的交點,之后將圓柱展開就得到了一個平面,如圖1所示.
圖1 墨卡托投影示意圖
墨卡托投影在高緯度時失真較大,根據(jù)國際航道測量組織的規(guī)定,墨卡托投影的適用范圍在南北緯80 度之下的地區(qū)[4].對于南北緯70 度之上的在高緯度地區(qū),可以采用極方位立體投影[4,5].本文研究的態(tài)勢可視化系統(tǒng)是某戰(zhàn)場仿真系統(tǒng)的一個子系統(tǒng),該戰(zhàn)場仿真系統(tǒng)的仿真范圍的最高緯度不超過60 度,同時考慮到我國國土的緯度范圍在北緯3 到54 度之間,所以本文采用了墨卡托投影[6].由于本文系統(tǒng)不涉及高緯度地圖投影,所以應用范圍局限在中低緯度地區(qū),即南北緯70 度之間.
從戰(zhàn)場仿真系統(tǒng)發(fā)送給態(tài)勢可視化系統(tǒng)的實體坐標是基于經(jīng)緯度的WGS48 坐標,所以要經(jīng)過變化,得到在墨卡托投影的二維地圖中的坐標[7].坐標變換公式如下:
其中,λ 是地球經(jīng)線(λ0是地球的中央經(jīng)線),φ 是地球緯線,x和y為經(jīng)過變換后的在墨卡托投影的地圖中的坐標.從墨卡托投影坐標變換為WGS48 坐標是以上變換的逆變換,坐標變換公式如下:
消息中間件是為了簡化應用程序的通信、輸入輸出的開發(fā)而設(shè)計的一種軟件基礎(chǔ)設(shè)施.消息中間件具有低耦合、可靠投遞、廣播、流量控制、最終一致等功能,已經(jīng)成為程序間通信的核心手段[8].常見的消息中間件有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、RocketMQ 等.
其中ActiveMQ 是由Apache 推出的開源的、高性能、易伸縮、多協(xié)議、支持集群、可插拔、消息持久化的消息中間件;RabbitMQ 是由erlang 開發(fā)的AMPQ 的開源實現(xiàn)之一;ZeroMQ 本質(zhì)上是一個可嵌入網(wǎng)絡(luò)通訊庫的、輕量的、快速的消息隊列;Kafka 發(fā)源于LinkedIn,后來成為Apache 項目,是一個快速的、可擴展的、高吞吐、可容錯的分布式發(fā)布訂閱消息系統(tǒng);RocketMQ 由MetaQ 演進而來,是阿里開源的消息中間件,應用在淘寶項目中.
以上消息中間件中ActiveMQ、RabbitMQ、Kafka、RocketMQ 等消息中間件功能強大,支持協(xié)議全面,復雜度也更高,適用于大型系統(tǒng).ZeroMQ 靈活快速,但功能過于簡單.本文選用了Nsq 消息中間件.Nsq 是由golang 開發(fā)的輕量級消息中間件,具有性能高、支持動態(tài)擴展、能消除單點故障等優(yōu)點.Nsq 的架構(gòu)如圖2.
圖2 Nsq 架構(gòu)示意圖
Nsq 的工作過程是,客戶端通過http 向nsqlookupd查詢可用的nsqd 地址,然后與nsqd 建立連接.nsqd 負責維護話題和頻道,實現(xiàn)以下功能:
1) 話題是接收外部消息的單位,外部消息源推送消息給話題,話題將消息推送給它之下的每一個頻道.頻道將消息推送給它之下的消費者,如果有復數(shù)個消費者則隨機選擇一個.
2) 如果話題下不存在頻道,則話題會將消息緩存到隊列中.如果頻道下不存在消費者,則頻道會將消息緩存到隊列中.話題和頻道都擁有獨立的緩存隊列.
3) 保證緩存隊列中的消息至少會被消費一次,即使nsqd 退出,也會將隊列中的消息存到磁盤上,當nsqd 再次運行時保證消息被消費.
4) Nsq 可以限定資源占用,通過配置nsqd 中每個話題和頻道在內(nèi)存中緩存的消息數(shù)量,可以限制內(nèi)存占用,一旦超出,消息將被緩存到磁盤中.
Nsq 的工作流程如圖3所示.
圖3 Nsq 工作流程示意圖
二維和三維顯示部分是聯(lián)動的,所以場景中的實體需要有二維和三維兩種模型,并且一一對應.基于單一平臺的二三維聯(lián)動顯示系統(tǒng)中主要采用兩種實現(xiàn)方式[9,10].一種方式是將模型統(tǒng)一存儲為二維格式,在二維顯示子系統(tǒng)中直接加載二維模型,在三維顯示子系統(tǒng)中先對二維模型進行升維運算,得到三維模型再加載[9].也可以存儲三維模型,在二維顯示部分中通過對三維模型進行降維運算,得到二維模型[10].這種方式在存儲上一致性好,模型維度統(tǒng)一,只需要存儲在一個存儲系統(tǒng)中,修改方便,但需要客戶端對模型進行實時處理.另一種方式是將二維和三維顯示部分的模型分開存儲,同一個實體的模型分為二維和三維兩部分,分別存儲在兩個存儲系統(tǒng)中[11].這種存儲方式提高了客戶端加載模型的速度,但是提高了系統(tǒng)中存儲部分和其他部分的耦合度,不利于系統(tǒng)維護和升級.本文結(jié)合了以上兩種方式,提出了一種新的實體模型存儲方案,如圖4所示.
圖4 數(shù)據(jù)庫API 網(wǎng)關(guān)結(jié)構(gòu)示意圖
以實體為單位將模型在文件系統(tǒng)中的路徑存儲在關(guān)系數(shù)據(jù)庫中,實體的模型分為二維和三維兩種存儲在文件系統(tǒng)中,API 網(wǎng)關(guān)對外提供穩(wěn)定的服務.外部訪問者只能連接到API 網(wǎng)關(guān),而不能連接到數(shù)據(jù)庫或文件系統(tǒng).外部訪問者向API 網(wǎng)關(guān)提供實體名稱并表明需要二維或三維模型,API 網(wǎng)關(guān)訪問數(shù)據(jù)庫得到對應模型的路徑,到路徑取得模型發(fā)送給對應的外部訪問者.
二三維模型管理的模型訪問算法描述如下:
算法1.二三維模型訪問算法1) 外部訪問者向數(shù)據(jù)庫API 網(wǎng)關(guān)提出訪問模型的需求,需求中描述模型的名字以及模型類型是二維還是三維的.2) 數(shù)據(jù)庫API 網(wǎng)關(guān)根據(jù)模型名和模型類型查詢關(guān)系數(shù)據(jù)庫,得到模型在文件系統(tǒng)中的存儲位置.3) 如果對應模型名和類型的存儲位置記錄存在,數(shù)據(jù)庫API 網(wǎng)關(guān)從文件系統(tǒng)中對應位置取得模型,返回給外部調(diào)用者.4) 如果存儲位置記錄不存在返回錯誤提示“模型不存在”給外部調(diào)用者.
二三維模型管理的模型存儲算法描述如下:
算法2.二三維模型存儲算法1) 外部訪問者向數(shù)據(jù)庫API 網(wǎng)關(guān)提出存儲模型的需求,需求中描述模型的名字以及模型的類型是二維還是三維的.2) 數(shù)據(jù)庫API 網(wǎng)關(guān)根據(jù)模型名和模型類型查詢關(guān)系數(shù)據(jù)庫,得到模型在文件系統(tǒng)中的存儲位置.3) 如果對應模型名和類型的存儲位置記錄存在,數(shù)據(jù)庫API 網(wǎng)關(guān)刪除對應位置的模型,向外部調(diào)用者發(fā)送存儲準備完成信號,外部訪問者將模型傳送給數(shù)據(jù)庫API 網(wǎng)關(guān),數(shù)據(jù)庫API 網(wǎng)關(guān)將模型存儲在對應位置.4) 如果存儲位置記錄不存在,數(shù)據(jù)庫API 網(wǎng)關(guān)根據(jù)模型名和模型類型進行哈希運算,得到存儲模型文件的路徑,在關(guān)系數(shù)據(jù)庫中新建模型名,模型類型和對應的存儲目錄記錄.5) 返回第3 步.
模型文件是非結(jié)構(gòu)化數(shù)據(jù),通常存儲非結(jié)構(gòu)化數(shù)據(jù)的方法是將數(shù)據(jù)以二進制的方式存儲到關(guān)系數(shù)據(jù)庫.然而關(guān)系數(shù)據(jù)庫在存儲大段二進制數(shù)據(jù)時負載過大,效率并不高.Hadoop 是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),被設(shè)計用來解決大數(shù)據(jù)的存儲和運算,也面臨存儲大量文件的問題,為解決這個問題Hadoop 開發(fā)了分布式文件存儲系統(tǒng)HDFS[12].本文參考了HDFS 的設(shè)計思想,用哈希路徑存儲文件,將模型文件存儲在文件系統(tǒng)中,將文件的路徑存儲到關(guān)系數(shù)據(jù)庫.但與HDFS 不同,本文的數(shù)據(jù)量在GB 級,因此沒有采用分布式架構(gòu).
本文采用單臺服務器作為數(shù)據(jù)庫和文件系統(tǒng)服務器,雖然與集群式服務器相比,單臺服務器數(shù)據(jù)庫的讀寫性能和網(wǎng)絡(luò)帶寬可能成為系統(tǒng)瓶頸,但方便數(shù)據(jù)的統(tǒng)一管理和維護.而且戰(zhàn)場仿真系統(tǒng)對存儲部分的性能要求不高,經(jīng)測試,采用單臺服務器可以滿足負載.
AAR(After Action Review)存檔技術(shù)起源于美國陸軍軍事行動后的過程化分析,是輔助用戶量化信息,進行定性分析的工具[13].AAR 系統(tǒng)包括數(shù)據(jù)收集,數(shù)據(jù)分析/篩選,數(shù)據(jù)反饋三個部分.態(tài)勢可視化系統(tǒng)是戰(zhàn)場仿真系統(tǒng)的子系統(tǒng),AAR 存檔系統(tǒng)是態(tài)勢可視化系統(tǒng)的組成部分之一.AAR 存檔系統(tǒng)能夠獲得戰(zhàn)場仿真系統(tǒng)運行時產(chǎn)生的過程數(shù)據(jù),然后過濾和按照時間順序存儲這些數(shù)據(jù),其中一些關(guān)鍵數(shù)據(jù)作為關(guān)鍵幀,需要加上時間戳.
本文使用AAR 存檔系統(tǒng)對戰(zhàn)場仿真系統(tǒng)的仿真過程進行記錄.當需要回放仿真過程時,AAR 存檔系統(tǒng)將存儲的數(shù)據(jù)按照順序發(fā)送給態(tài)勢可視化系統(tǒng),進行戰(zhàn)場仿真的回放.
系統(tǒng)主要由瀏覽器、Unity 客戶端、SuperMap iServer、數(shù)據(jù)庫API 網(wǎng)關(guān)、ARP 存檔系統(tǒng)、消息中間件、關(guān)系數(shù)據(jù)庫和文件系統(tǒng)等七個模塊組成,模塊之間通過以太網(wǎng)連接.整體架構(gòu)如圖5所示.
圖5 系統(tǒng)架構(gòu)示意圖
1) 瀏覽器:瀏覽器是二維顯示部分的客戶端,從SuperMap iServer 讀取地圖,從數(shù)據(jù)庫API 網(wǎng)關(guān)得到實體的二維模型,從消息中間件得到仿真過程數(shù)據(jù),最終將仿真信息顯示出來.用戶在二維客戶端發(fā)出的指令也發(fā)送給消息中間件.
2) Unity 客戶端:Unity 客戶端是三維顯示部分的客戶端,地圖和地形數(shù)據(jù)存儲在本地,從消息中間件得到想定數(shù)據(jù)和仿真過程數(shù)據(jù),從數(shù)據(jù)庫API 網(wǎng)關(guān)得到實體的三維模型,最終將仿真信息顯示出來.用戶發(fā)出的指令同樣發(fā)送給消息中間件.
3) SuperMap iServer:SuperMap iServer 為二維顯示部分的客戶端提供地圖服務,將地圖以瓦片的形式存儲在關(guān)系數(shù)據(jù)庫中,當客戶端訪問地圖的時候根據(jù)不同比例尺取出不同分辨率的瓦片地圖.
4) 數(shù)據(jù)庫API 網(wǎng)關(guān):數(shù)據(jù)庫API 網(wǎng)關(guān)對實體的二維和三維模型進行統(tǒng)一管理.數(shù)據(jù)庫API 網(wǎng)關(guān)屏蔽了外界對數(shù)據(jù)庫和文件系統(tǒng)的直接訪問,提供一套穩(wěn)定的,包含讀取和存儲功能的服務接口.讀取模型時,外部訪問者通過接口描述需要的實體模型,包括實體名稱和模型類型,數(shù)據(jù)庫API 網(wǎng)關(guān)則將對應的模型返回給外部訪問者.存儲模型時,外部訪問者同樣描述實體模型,并提交具體模型.數(shù)據(jù)庫API 網(wǎng)關(guān)自動完成存儲任務.
5) AAR 存檔系統(tǒng):AAR 存檔系統(tǒng)的功能是仿真進行時記錄仿真過程以及仿真結(jié)束時進行回放,有兩種工作模式.第一種模式是戰(zhàn)場仿真系統(tǒng)進行仿真時,AAR 存檔系統(tǒng)從消息中間件得到仿真的過程數(shù)據(jù),記錄下整個仿真過程存到關(guān)系數(shù)據(jù)庫中.第二種模式是仿真結(jié)束后,AAR 存檔系統(tǒng)按照順序?qū)⒂涗浀姆抡孢^程數(shù)據(jù)重新發(fā)送給消息中間件,由消息中間件轉(zhuǎn)發(fā)給二維和三維顯示部分,重現(xiàn)仿真過程.
6) 消息中間件:消息中間件負責在不同部分之間傳遞消息.在仿真進行時主要有兩大功能,第一種是從戰(zhàn)場仿真系統(tǒng)得到仿真過程數(shù)據(jù),轉(zhuǎn)發(fā)給AAR 存檔系統(tǒng)和二三維顯示部分.第二種是接收從二三維顯示部分傳來的用戶指令,轉(zhuǎn)發(fā)給包括二三維顯示部分在內(nèi)的所有其他部分,以保證二維和三維顯示部分聯(lián)動.在仿真回放時,則只接收AAR 存檔系統(tǒng)傳來的消息轉(zhuǎn)發(fā)給二三維顯示部分.
7) 關(guān)系數(shù)據(jù)庫和文件系統(tǒng):關(guān)系數(shù)據(jù)庫和文件服務器提供數(shù)據(jù)庫服務和負責文件的存儲.其中文件系統(tǒng)受限于單個目錄的最大文件數(shù),所以在存儲文件時需要劃分子目錄,用文件名進行哈希運算,根據(jù)哈希值將文件存儲在不同的子目錄中.
態(tài)勢可視化系統(tǒng)是戰(zhàn)場仿真系統(tǒng)的一個子系統(tǒng),戰(zhàn)場仿真系統(tǒng)會實時的將仿真過程數(shù)據(jù)發(fā)送到態(tài)勢可視化子系統(tǒng).態(tài)勢可視化系統(tǒng)首先根據(jù)想定初始化態(tài)勢,然后根據(jù)仿真過程數(shù)據(jù)實時改變和顯示當前態(tài)勢,同時也存儲仿真過程數(shù)據(jù).態(tài)勢可視化系統(tǒng)中二維和三維顯示部分保持聯(lián)動,即顯示的態(tài)勢一致,在二維或三維顯示部分中都可以發(fā)出指令給戰(zhàn)場仿真系統(tǒng).仿真結(jié)束后可以回放戰(zhàn)場仿真的過程.
經(jīng)測試,態(tài)勢可視化子系統(tǒng)滿足戰(zhàn)場仿真系統(tǒng)的可視化要求,能夠?qū)崟r顯示戰(zhàn)場態(tài)勢,以及將用戶指令反饋到戰(zhàn)場仿真系統(tǒng).顯示的態(tài)勢與戰(zhàn)場仿真系統(tǒng)的態(tài)勢一致,且二維和三維顯示部分顯示的態(tài)勢一致,即二三維是聯(lián)動的.二維和三維顯示部分測試結(jié)果如圖6和圖7所示.
圖6 二維顯示部分測試圖
圖7 三維顯示部分測試圖
二三維聯(lián)動的態(tài)勢可視化系統(tǒng)同時具有二維顯示的宏觀性好和三維顯示的顯示直觀等優(yōu)點.本文研究了二維顯示技術(shù)、三維顯示技術(shù)、坐標變換、消息中間件、實體二三維模型管理和AAR 存檔等關(guān)鍵技術(shù),設(shè)計并實現(xiàn)了一種二三維聯(lián)動的態(tài)勢可視化系統(tǒng).該系統(tǒng)二維和三維顯示部分之間通過消息中間件聯(lián)動.實體的二三維模型由數(shù)據(jù)庫API 網(wǎng)關(guān)統(tǒng)一管理,WGS48經(jīng)緯度坐標和墨卡托投影坐標經(jīng)由公式互相轉(zhuǎn)換.系統(tǒng)通過AAR 存檔系統(tǒng)實現(xiàn)仿真過程的記錄和回放.
隨著顯示技術(shù)的進步,未來的態(tài)勢可視化不局限于二維和三維顯示,還可能加入虛擬現(xiàn)實和增強現(xiàn)實顯示的部分.隨著戰(zhàn)爭復雜性的升級,戰(zhàn)爭類型和戰(zhàn)爭領(lǐng)域也會擴張,比如網(wǎng)絡(luò)戰(zhàn),輿論戰(zhàn),經(jīng)濟戰(zhàn).在未來態(tài)勢可視化系統(tǒng)的設(shè)計和實現(xiàn)中也要適應和支持新的戰(zhàn)爭類型和領(lǐng)域.