施 斌,王 華,伍輝華,姚宇婕,楊 洋
(中國衛(wèi)星海上測控部,江陰 214431)
目前,航天領(lǐng)域的各類三維仿真軟件仍然較依賴于國外成熟商用組件(如STK[1,2]),或者依賴于X86架構(gòu)的硬件平臺(tái),無法完全滿足“自主可控”要求.“自主可控”就是要依靠自身研發(fā)設(shè)計(jì),全面掌握產(chǎn)品核心技術(shù),實(shí)現(xiàn)信息系統(tǒng)從硬件到軟件的自主研發(fā)、生產(chǎn)、升級、維護(hù)的全程可控.目前,國內(nèi)已經(jīng)開展了很多基于OSG或OSGEARTH的跨平臺(tái)研究和應(yīng)用,主要應(yīng)用于虛擬校園漫游、城市三維場景、空戰(zhàn)模擬場景、戰(zhàn)場態(tài)勢等方面[3-9],在航天三維仿真領(lǐng)域應(yīng)用[10-13]不多,在全國產(chǎn)化平臺(tái)(國產(chǎn)CPU板卡和國產(chǎn)操作系統(tǒng))上經(jīng)過可靠性和性能驗(yàn)證的更是空白.
本文嘗試針對全國產(chǎn)化平臺(tái)進(jìn)行航天三維仿真軟件的設(shè)計(jì)和實(shí)現(xiàn),以解決在全國產(chǎn)化平臺(tái)上進(jìn)行三維仿真的可靠性和渲染效率問題.
在CPU領(lǐng)域,目前較主流、成熟的國產(chǎn)化CPU是飛騰和龍芯.飛騰CPU采用ARM指令集,目前主推的是FT1500A芯片,龍芯CPU采用RISC指令集,目前主推的是龍芯3A3000芯片,主頻均達(dá)到1.5 GHz.國產(chǎn)化CPU芯片與X86芯片(主頻大多在2.8 GHz以上)相比,主頻相對落后,使用體驗(yàn)上存在明顯差距,特別是在軟件編譯、圖形繪制等計(jì)算量大的任務(wù)中更為明顯.在顯卡領(lǐng)域,目前尚未推出成熟的國產(chǎn)化顯卡產(chǎn)品,暫時(shí)仍依賴國外顯卡.在操作系統(tǒng)領(lǐng)域,目前已出現(xiàn)了中標(biāo)麒麟、銀河麒麟、深度Linux等多種國產(chǎn)操作系統(tǒng),已經(jīng)具備較強(qiáng)的替代能力,但在運(yùn)行穩(wěn)定性、性能等方面存在短板.
OSG是一個(gè)開源的場景圖形管理開發(fā)庫,為圖形圖像應(yīng)用程序的開發(fā)提供場景管理和圖像渲染優(yōu)化功能[14].OSG具備跨平臺(tái)特性,可以在大部分CPU上編譯通過,可以運(yùn)行于Windows、Linux等大多數(shù)操作系統(tǒng),具備線程安全性.
OSGEARTH是一個(gè)基于OSG的開源跨平臺(tái)類庫,提供了一個(gè)地理空間SDK和地形引擎,可以從數(shù)據(jù)源構(gòu)建可視化地形模型和影像,方便快速構(gòu)建基于三維數(shù)字地球的各類應(yīng)用,在各領(lǐng)域已有廣泛應(yīng)用.
航天三維仿真軟件的系統(tǒng)架構(gòu)如圖1所示,底層是麒麟國產(chǎn)操作系統(tǒng),第二層的Qt提供基本界面功能支持,第三層的OSG提供三維仿真基礎(chǔ)框架和功能,第四層的OSGEARTH提供三維數(shù)字地球相關(guān)的應(yīng)用接口,頂層是三維仿真軟件.三維仿真軟件主要包括了場景資源初始化加載、三維場景管理、關(guān)鍵事件與視點(diǎn)控制、仿真動(dòng)畫控制、粒子系統(tǒng)控制、數(shù)據(jù)驅(qū)動(dòng)、彈道數(shù)據(jù)篩選、彈道外推、地球自轉(zhuǎn)及軌道推算、測站自動(dòng)跟蹤、多屏切換、場景配置等主要功能模塊.
關(guān)鍵流程如下:軟件初始化時(shí)基于OSGEARTH加載地球影像和高程數(shù)據(jù)從而構(gòu)建三維數(shù)字地球場景,然后通過網(wǎng)絡(luò)接收彈道、關(guān)鍵事件等各類任務(wù)數(shù)據(jù),彈道數(shù)據(jù)經(jīng)過篩選、插值處理后驅(qū)動(dòng)飛行器位置變化,關(guān)鍵事件數(shù)據(jù)通過事件機(jī)制觸發(fā)相應(yīng)動(dòng)畫播放,各模塊協(xié)同實(shí)現(xiàn)飛行器三維仿真.
在三維數(shù)字地球的構(gòu)建過程中,涉及到地球的影像和高程數(shù)據(jù)的組織.軟件通過OSGEARTH自動(dòng)加載指定位置的影像和高程數(shù)據(jù),疊加渲染在地球表面.考慮到影像和高程數(shù)據(jù)量大,非常消耗軟硬件系統(tǒng)資源,而全國產(chǎn)化平臺(tái)的性能一般,因此必須對影像和高程數(shù)據(jù)的加載進(jìn)行優(yōu)化.
圖1 軟件系統(tǒng)架構(gòu)圖
對于影像數(shù)據(jù),地圖影像數(shù)據(jù)量很大,10級全球地圖影像大約需要15 GB,而道路標(biāo)注影像數(shù)據(jù)相對較小.考慮到高精度影像數(shù)據(jù)不但占用空間,在進(jìn)行三維場景渲染時(shí)也非常耗費(fèi)資源,影響渲染效率.因此,軟件采用分區(qū)域分層方式加載不同精度影像數(shù)據(jù),共分三層:底層采用中等精度級別(如10級)的全球地圖影像,中間層采用較高精度級別(如16級)的全球道路標(biāo)注影像,上層采用較高精度級別的各發(fā)射場區(qū)域地圖影像(如11-16級).當(dāng)在火箭起飛離地面較近、可視地域較小時(shí)調(diào)用發(fā)射場區(qū)域的高精度數(shù)據(jù),當(dāng)火箭或飛行器遠(yuǎn)離地面、可視地域較大時(shí)調(diào)用全球低精度數(shù)據(jù),而道路標(biāo)注層數(shù)據(jù)量不大,采用全球高精度數(shù)據(jù).
對于高程數(shù)據(jù),同樣存在數(shù)據(jù)量大的問題,但簡單地通過上述方式加載高程數(shù)據(jù)無法避免出現(xiàn)較明顯的“地形斷裂”現(xiàn)象.因此,軟件僅在中國區(qū)域加載了一層中等精度級別(如10級)的高程數(shù)據(jù),其他區(qū)域未使用高程數(shù)據(jù).當(dāng)火箭起飛至進(jìn)入大氣層前,恰在中國區(qū)域范圍內(nèi),此時(shí)距離地面較近,加載中等精度地形,當(dāng)火箭進(jìn)入大氣層后,此時(shí)距離地面較遠(yuǎn),高空俯瞰對地形的關(guān)注程度降低,沒有加載地形基本不影響整體演示效果.
通過差異化的加載策略,在不同場景切換時(shí),影像和地形不會(huì)出現(xiàn)明顯突變現(xiàn)象,最大限度地減少了實(shí)時(shí)渲染的數(shù)據(jù)量,有效提升了渲染效率,保證了流暢的仿真效果.
OSG中存在場景樹的概念,這棵樹是一棵由Node(節(jié)點(diǎn))組成的樹,反映了場景的空間結(jié)構(gòu)和可繪制對象的狀態(tài).場景樹結(jié)構(gòu)的頂部是一個(gè)根節(jié)點(diǎn),從根節(jié)點(diǎn)向下延伸,各級樹枝上的Group節(jié)點(diǎn)(組節(jié)點(diǎn))包含了幾何信息和用于控制其外觀的渲染狀態(tài)信息,底層的Geode節(jié)點(diǎn)(葉節(jié)點(diǎn))包含了場景中物體的實(shí)際幾何信息[15].通過建立場景樹,OSG可以高效地渲染對應(yīng)的三維場景.
根據(jù)場景樹的定義,構(gòu)建出整個(gè)三維仿真場景對應(yīng)的場景樹結(jié)構(gòu),如圖2所示.
圖2 三維場景組織圖
頂層的rootNode是整個(gè)場景的根節(jié)點(diǎn),第二層的earthNode表示整個(gè)地球節(jié)點(diǎn),所有具體的場景節(jié)點(diǎn)都隸屬于該節(jié)點(diǎn)控制,第三層的earthPATNode是地球慣性系旋轉(zhuǎn)節(jié)點(diǎn),可以控制地球自轉(zhuǎn),其下屬所有節(jié)點(diǎn)均隨著該節(jié)點(diǎn)的旋轉(zhuǎn)變化而進(jìn)行相應(yīng)的相對變化,第三層有3個(gè)分支:左側(cè)的skyNode及其下各級節(jié)點(diǎn)是通過OSGEARTH加載外部的影像和高程數(shù)據(jù)后自動(dòng)創(chuàng)建的,描述了天空和地球地形;中間的earthGroup是包含了各種附屬于地表模型的組節(jié)點(diǎn),第四層的3個(gè)節(jié)點(diǎn)分別代表測站、星下點(diǎn)軌跡和發(fā)射塔架,第五層及以下均是各類測站、星下點(diǎn)軌跡和發(fā)射塔架的具體組成節(jié)點(diǎn);右側(cè)的rktRootNode是火箭的根節(jié)點(diǎn),第四層的rktLocalMT是火箭局部位移節(jié)點(diǎn),用于完成火箭整體模型加載后從模型坐標(biāo)系到真實(shí)火箭坐標(biāo)系的轉(zhuǎn)換,其下各級節(jié)點(diǎn)是火箭的各級部件和載荷的分層節(jié)點(diǎn),centerMTNode是火箭中心位置節(jié)點(diǎn),用于在火箭部件分離后火箭中心位置的調(diào)整,其下的節(jié)點(diǎn)是火箭軌跡線葉節(jié)點(diǎn).
某級節(jié)點(diǎn)的旋轉(zhuǎn)平移就可以改變對應(yīng)仿真對象的位置姿態(tài),增加和刪除某個(gè)節(jié)點(diǎn)就可以顯示和隱藏相應(yīng)仿真對象.在運(yùn)行時(shí),OSG將會(huì)按照以上的場景樹結(jié)構(gòu)逐層裁剪、渲染三維場景,通過合理、靈活地組織、調(diào)整場景樹,即可高效地完成場景的渲染,有效提升在全國產(chǎn)化平臺(tái)上的渲染效果.
通過網(wǎng)絡(luò)接收以驅(qū)動(dòng)飛行器模型的彈道數(shù)據(jù)可能存在非正常數(shù)據(jù)(主要是相對飛行時(shí)出現(xiàn)跳動(dòng)),因此在后端彈道數(shù)據(jù)插值處理前應(yīng)先進(jìn)行相應(yīng)的篩選,避免不必要的計(jì)算處理,有效提升飛行器仿真流暢程度.
整體流程只要滿足網(wǎng)收啟動(dòng)的條件就循環(huán)執(zhí)行.內(nèi)部基本流程如下:首先,如果沒有新數(shù)據(jù)到達(dá)或?yàn)榉菑椀李悢?shù)據(jù),則結(jié)束本輪處理,否則繼續(xù)根據(jù)彈道數(shù)據(jù)和起飛時(shí)間計(jì)算當(dāng)前彈道飛行時(shí)間rt,獲取本地飛行時(shí)間lft(每秒自動(dòng)計(jì)算當(dāng)前本地時(shí)間與起飛時(shí)間之間的差值),并獲取上一幀彈道數(shù)據(jù)的飛行時(shí)間rt0;然后,判斷rt和rt0的大小,如果rt小于rt0,則數(shù)據(jù)非法,結(jié)束本輪處理,否則繼續(xù)判斷rt和lft的絕對誤差,如果誤差超過閾值Threshold,則數(shù)據(jù)非法,結(jié)束本輪處理,否則數(shù)據(jù)合法,繼續(xù)完成彈道數(shù)據(jù)插值處理并更新數(shù)據(jù)引擎驅(qū)動(dòng)模型的位置變化,轉(zhuǎn)入下一輪處理.整體流程如圖3所示.
在飛行器飛行過程中存在滑行段的過程,即一段時(shí)間沒有彈道數(shù)據(jù)更新,或者突發(fā)的鏈路故障導(dǎo)致沒有彈道數(shù)據(jù)更新,但飛行器模型的位置卻不能中斷更新,因此需要設(shè)計(jì)自動(dòng)啟停的彈道外推控制機(jī)制,根據(jù)當(dāng)前速度和位置矢量預(yù)測飛行器的位置和速度,保證飛行器位置連續(xù)更新.
軟件中設(shè)計(jì)了彈道計(jì)數(shù)監(jiān)視器DDMonitor和彈道外推驅(qū)動(dòng)器PredictDriver,彈道計(jì)數(shù)監(jiān)視器用于監(jiān)視接收的彈道數(shù)據(jù)的計(jì)數(shù)并產(chǎn)生啟動(dòng)和停止信號,彈道外推驅(qū)動(dòng)器用于實(shí)際控制彈道外推的啟動(dòng)和停止,這兩個(gè)類都是線程類,主體函數(shù)Run函數(shù)在各自的線程中執(zhí)行.當(dāng)DDMonitor每隔固定時(shí)間進(jìn)行輪詢,如果判定進(jìn)入滑行段則向PredictDriver發(fā)送DDStop信號,PredictDriver啟動(dòng)彈道外推,如果判定退出滑行段則向PredictDriver發(fā)送DDRecover信號,PredictDriver停止彈道外推.
彈道計(jì)數(shù)監(jiān)視器DDMonitor的輪詢控制流程如圖4所示,其中tSinceLast表示距離上次收到有效彈道后輪詢的次數(shù),isHXD表示滑行段標(biāo)志(true為滑行段,false為非滑行段),isStart表示線程運(yùn)行標(biāo)志,lastCount表示上次收到的有效彈道計(jì)數(shù)值,maxSpan表示判定進(jìn)入滑行段的最大輪詢次數(shù).
圖3 彈道篩選流程圖
在飛行器仿真過程中,需要顯示各測站到目標(biāo)飛行器的跟蹤狀態(tài).當(dāng)目標(biāo)飛行器相對于測站出地平,即仰角大于等于0度,測站開始跟蹤,顯示跟蹤線,當(dāng)目標(biāo)飛行器相對于測站入地平,即仰角小于0度,測站停止跟蹤,隱藏跟蹤線.
基于目標(biāo)跟蹤的原理[16],通過OSG中節(jié)點(diǎn)更新回調(diào)機(jī)制實(shí)現(xiàn)測站自動(dòng)跟蹤.某個(gè)測站到目標(biāo)飛行器的跟蹤線通過跟蹤線場景節(jié)點(diǎn)對象lineNode定義,lineNode節(jié)點(diǎn)注冊一個(gè)節(jié)點(diǎn)回調(diào)對象TTCNodeCallback.測站自動(dòng)跟蹤的流程是這樣的:當(dāng)渲染整個(gè)三維場景的場景圖且遍歷至lineNode節(jié)點(diǎn)時(shí),會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)并傳入該測站的地理位置信息和飛行器目標(biāo)節(jié)點(diǎn)對象targetNode,根據(jù)targetNode獲取當(dāng)前時(shí)刻目標(biāo)的地理位置信息,從而計(jì)算出該測站到目標(biāo)節(jié)點(diǎn)的仰角E.如果E<0,則清理lineNode的顯示緩存,隱藏跟蹤線,否則用測站和目標(biāo)的位置信息更新lineNode的頂點(diǎn)信息,刷新lineNode的顯示緩存,從而顯示跟蹤線.
圖4 彈道計(jì)數(shù)監(jiān)視器輪詢控制流程圖
在航天器分離后,需要根據(jù)軌道根數(shù)推算航天器飛行軌跡并展示.基于地慣坐標(biāo)系的軌跡能形成趨于閉合的大橢圓軌跡,符合航天器在軌態(tài)勢顯示的需要.
OSGEARTH中的世界坐標(biāo)系是按照地固坐標(biāo)系定義的,原點(diǎn)在地球中心,x軸向右(指向本初子午面),y軸指向屏幕里,z軸(地軸)向上.在該坐標(biāo)系下地球是靜止的,而地慣坐標(biāo)系下地球是自轉(zhuǎn)的.因此需要實(shí)現(xiàn)坐標(biāo)系的轉(zhuǎn)換和地球的自轉(zhuǎn).
首先,進(jìn)行坐標(biāo)系轉(zhuǎn)換.采用瞬時(shí)真赤道地心系(一種地慣坐標(biāo)系)定義場景的坐標(biāo)系統(tǒng),而地固坐標(biāo)系與它的差別即地球自轉(zhuǎn)角——格林尼治恒星時(shí)S0[17].因此,在系統(tǒng)初始化時(shí)根據(jù)當(dāng)時(shí)時(shí)刻計(jì)算S0,讓地球繞z軸旋轉(zhuǎn)S0角度,完成地球初始位置的設(shè)定.
然后,實(shí)現(xiàn)地球的自轉(zhuǎn).在場景樹中,地球是其中的一級節(jié)點(diǎn),利用OSG中節(jié)點(diǎn)更新回調(diào)機(jī)制控制地球節(jié)點(diǎn)進(jìn)行連續(xù)角度的旋轉(zhuǎn)變化,從而實(shí)現(xiàn)地球的自轉(zhuǎn)效果.地球節(jié)點(diǎn)注冊一個(gè)節(jié)點(diǎn)回調(diào)對象EarthRotate Callback,當(dāng)渲染整個(gè)三維場景的場景圖且遍歷至地球節(jié)點(diǎn)時(shí),會(huì)自動(dòng)調(diào)用回調(diào)函數(shù)并傳入地球節(jié)點(diǎn)對象,回調(diào)函數(shù)的流程如圖5所示,其中t0表示當(dāng)前時(shí)刻值,lastT表示上一次回調(diào)時(shí)刻值,dt表示本次回調(diào)與上次回調(diào)的時(shí)間間隔,Span表示更新地球旋轉(zhuǎn)的時(shí)間間隔(例如,按照1秒24幀的刷新頻率,Span就設(shè)置為1/24秒),EarthRotSpeed表示地球自轉(zhuǎn)角速度常量(7.292e-5 rad/s),deltaZaw表示dt時(shí)間間隔對應(yīng)的地球自轉(zhuǎn)角度.
圖5 地球自轉(zhuǎn)回調(diào)函數(shù)流程圖
實(shí)際應(yīng)用中,三維仿真窗口常需投影到外部設(shè)備(如超長超寬屏幕)進(jìn)行全屏演示,這種需求往往通過分別部署于兩個(gè)平臺(tái)的控制端和顯示端軟件進(jìn)行通信來實(shí)現(xiàn).軟件利用支持多屏輸出顯示的顯卡和Qt中QDesktopWidget多屏顯示[18]技術(shù)實(shí)現(xiàn)了同一軟件在同一平臺(tái)上進(jìn)行多屏擴(kuò)展顯示與切換控制的效果,降低了軟件結(jié)構(gòu)的復(fù)雜性,避免了對網(wǎng)絡(luò)通信的依賴,有效提升了在全國產(chǎn)化平臺(tái)環(huán)境下切換控制的可靠性.
以擴(kuò)展3屏顯示為例說明.在多屏顯示環(huán)境的系統(tǒng)中,應(yīng)用程序所在屏幕默認(rèn)為主屏幕(screen 0),其他屏幕都是擴(kuò)展屏幕(screen 1,screen 2,…),主屏幕的左下角屏幕坐標(biāo)為(p.x,p.y).整個(gè)擴(kuò)展顯示區(qū)域橫跨了3個(gè)擴(kuò)展屏幕,其左下角坐標(biāo)為(p.x+p.width,p.y),寬度e1.width+e2.width+e3.width,高度為p.height,其中p、e1、e2、e3分別表示主屏幕和3個(gè)擴(kuò)展屏幕,width表示屏幕的寬度,height表示屏幕的高度,如圖6所示.
圖6 多屏顯示區(qū)域的定義
在切換擴(kuò)展顯示時(shí),首先按照上述定義擴(kuò)展顯示區(qū)域?qū)ο骵xtWinGeometry,設(shè)置其寬度和高度;然后,將軟件界面中的仿真演示窗口部件對象viewerWidget設(shè)置為擴(kuò)展窗口extendWindow的中央窗口部件,將extendWindow的顯示區(qū)域設(shè)置為extWinGeometry,設(shè)置extendWindow為無邊框顯示模式;最后,更新顯示extendWindow即可實(shí)現(xiàn)擴(kuò)展3屏效果.這樣,主屏幕顯示軟件的控制界面,擴(kuò)展的3屏顯示仿真演示窗口.
在研發(fā)機(jī)房部署仿真驗(yàn)證環(huán)境,包括兩臺(tái)工作站,一臺(tái)是國產(chǎn)化工作站(飛騰1500A、16 GB內(nèi)存、1 TB硬盤、AMD RX570獨(dú)顯、銀河麒麟操作系統(tǒng)4.0.2),部署航天三維仿真軟件,一臺(tái)部署數(shù)據(jù)仿真重演軟件及數(shù)據(jù)處理軟件.仿真重演軟件加載仿真數(shù)據(jù)發(fā)送到數(shù)據(jù)處理軟件經(jīng)處理后,模擬任務(wù)網(wǎng)絡(luò)環(huán)境向三維仿真軟件發(fā)送數(shù)據(jù),驗(yàn)證三維仿真的可靠性和渲染效率.
仿真重演軟件以100幀/s的幀頻發(fā)送數(shù)據(jù),三維仿真軟件接收、仿真渲染均正常.飛行器三維仿真全過程中,仿真環(huán)境逼真、飛行器位置和姿態(tài)調(diào)整流暢,實(shí)時(shí)監(jiān)測結(jié)果如圖7所示,實(shí)時(shí)采集的三維渲染性能統(tǒng)計(jì)結(jié)果如表1所示.
圖7 三維仿真渲染效率實(shí)時(shí)監(jiān)測結(jié)果
表1 實(shí)時(shí)采集的三維渲染性能統(tǒng)計(jì)
根據(jù)實(shí)時(shí)渲染性能統(tǒng)計(jì),在繪制幾何體和三角形數(shù)量較大的情況下,平均渲染幀率不低于24 fps,能夠較好滿足三維仿真的需求.
測站跟蹤、模型動(dòng)畫、地慣坐標(biāo)系下軌跡效果如圖8至10所示.
圖8 測站跟蹤
圖9 火箭助推器分離動(dòng)畫
本文基于OSGEARTH設(shè)計(jì)和實(shí)現(xiàn)了一款國產(chǎn)航天三維仿真軟件,通過地球影像和高程數(shù)據(jù)的差異化加載、場景樹的優(yōu)化構(gòu)建、彈道數(shù)據(jù)篩選等設(shè)計(jì)策略,解決了在全國產(chǎn)化平臺(tái)上進(jìn)行三維仿真的可靠性和渲染效率問題,并通過仿真實(shí)驗(yàn)進(jìn)行了驗(yàn)證.
圖10 空間目標(biāo)在地慣坐標(biāo)系下的軌跡
下一步的研究方向:
(1)進(jìn)一步研究大規(guī)模地形組織和渲染效率的優(yōu)化問題,使得軟件加載更大范圍、更高精度的地形成為可能;
(2)在現(xiàn)有軟件基礎(chǔ)上,進(jìn)一步實(shí)現(xiàn)可視化任務(wù)完成情況快速評估功能,并拓展至空間態(tài)勢感知領(lǐng)域.