李昌明 李東年* 趙正旭 宋立強 姜 鵬 孫才紅
1(青島理工大學機械與汽車工程學院 山東 青島 266520) 2(中國科學院國家天文臺 北京 100012)
2016年,500米口徑球面射電望遠鏡(Five-hundred-meter Aperture Spherical Telescope,FAST)落成啟用,FAST是由著名天文學家南仁東在1994年提出構想,中國科學院國家天文臺歷經22年建設,具有我國自主知識產權、世界最大單口徑、最靈敏的射電望遠鏡[1]。FAST的反射面口徑達到了500米,反射面接收面積25萬平方米(相當于30個足球場),利用柔性索網支撐反射面,索網下面連接可以伸長運動的促動器,可實時根據促動器的伸縮牽引索網生成拋物面。FAST望遠鏡的工作頻率在70 MHz到3 GHz,分辨率2.9′,指向精度可達8”,相比美國Arecibo 300 m天文望遠鏡,FAST創造性地使用了可變反射面設計,其4 450塊反射面單元都可以在促動器的伸縮下運動,實時地生成一個拋物面進行射電信號接收,其反射面積是美國Arecibo望遠鏡的2.5倍,綜合性能是美國Arecibo望遠鏡的10倍[2]。FAST基地為天文望遠鏡接收豐富的射電信號提供了良好的基礎條件,但是FAST場景的可視化卻十分困難,4 450塊反射面單元,2 225個促動器等一系列零部件的工作情況無法直觀地顯現在工作人員面前,而虛擬現實可視化技術可以通過場景仿真解決這一問題。
虛擬可視化技術源自1962年全景仿真機的出現,其具有交互性、沉浸性、想象性的特點[3]。在虛擬場景中,通過操作器控制漫游視角,可以到達三維空間的任意坐標。同時可以通過鼠標與鍵盤的控制,實現對場景的交互控制,達到理想的可視化需求。近年來,虛擬現實技術廣泛用于航天科技和軍事場景模擬,以仿真度高、可交互性強等優點被廣泛認可。三維可視化是虛擬現實技術的重要分支[4],通過計算機圖形學技術創建輔助人們理解復雜場景的視覺圖形,通過融合多種數據,將復雜場景的工作狀態在界面顯示,或者說,三維可視化本身就是一個數據整合然后進行展示與交互控制的平臺。任雨柔等[5]應用虛擬可視化技術使用Unity3D引擎,對現代有軌電車進行路口場景仿真,為有軌電車司機提供一個學習平臺。李忠坡[6]利用Vega Prime仿真平臺模擬各種海洋場景,實現了平臺供應船海上作業三維視景仿真的開發設計與效果展示。
OpenSceneGraph(OSG)圖形系統使用工業標準的 OpenGL作為底層渲染API,用C++語言編寫,它以性能較高、拓展性與移植性強、可跨平臺等優點被廣泛應用于虛擬仿真、游戲動畫、三維可視化等領域[7-8]。OSG憑借其優良特性尤其適合可視化仿真系統的開發,并且OSG具有跨平臺性,可以在Windows、Linux等系統下運行。OSG作為一款圖形渲染機制較為完備的圖形渲染引擎,其涵蓋了許多優秀的功能特性,圖形的顯示表現為一系列幀的渲染,渲染過程包含場景更新、揀選和繪制、每一次渲染這三個過程都會被執行。文戈[9]利用OSG與Qt開發了用于溝道土地整治的可視化技術,為溝道流域區域的整治規劃提供輔助性的決策支持。倪梓軒等[10]借助Eclipse為中介將OSG引擎移植到Android Studio 2.2.3平臺中,為 OSG 在移動平臺的整體移植提供了實踐參考。劉楚斌等[11]利用OSG對火箭飛行進行仿真,為火箭跟蹤仿真訓練系統的研制提供技術支撐。郭靖[12]采用OSG渲染引擎對航天器發射、衛星在軌飛行和衛星變軌運動場景進行可視化,對空間飛行器運行狀況監測、新航天器發射任務完成有著重要意義。
Qt是一個面向對象的C++類庫,其具有面向對象編程語言的所有優點,因其友好的用戶界面與快速的交互相應,自問世以被許多程序人員廣泛使用,并且Qt提供了許多標準應用程序編程接口(Application programming interface,API)來兼容第三方庫[13]。隨著Qt的發展與OSG在各行業的廣泛應用,OSG強大的圖形渲染能力和Qt提供的人機交互平臺為解決各種復雜場景可視化問題和開發三維可視化平臺提供了一個新的思路[14]。
本文采用開源跨平臺三維仿真引擎OSG進行模型加載和視景仿真程序的開發,采用開源跨平臺圖形界面庫Qt進行軟件程序界面的開發,基于osgQt庫在Qt Application項目中實現了osgviewer視口和Qt主窗口的整合,開發了FAST大場景漫游系統,如圖1所示。

圖1 FAST可視化效果圖
FAST作為最大單口徑射電望遠鏡,其反射面用于匯聚射電信號,FAST的反射面由4 450個反射面單元組成,每塊反射面單元安裝在索網制定位置,索網包括6 670根主索、2 225個主索節點和2 225根下拉索。下拉索的一端位于索網索節點下方,另一端連接促動器,促動器通過伸縮來改變索節點的位置從而改變反射面的形狀,形成反射拋物面,并使反射拋物面對準天體目標,然后再通過卷揚機控制六根鋼索的收放,以拖動30噸的饋源艙到達拋物面焦點位置,FAST饋源艙將射電信號進行聚焦,研究人員對聚焦的射電信號進行分析,完成對天體目標的探測[15]。圖2所示為FAST索網結構圖。

圖2 FAST索網結構圖
本文利用OSG與Qt對FAST場景可視化系統進行開發,通過OSG圖形對FAST三維場景進行顯示的同時,利用Qt的信號槽機制來對OSG進行交互控制,實現了可視化的交互性與沉浸性。FAST可視化系統提供一種更加直觀、快速的動態監測方案,為FAST基地的觀測工作提供輔助性的決策支持。
FAST基地場景內的模型包括地形、圈梁、反射面、索網及下拉索、饋源支撐塔等,對照圖紙利用建模軟件(如Solidworks、Proe、犀牛等)進行三維建模,然后轉化成指定格式,導入3D max賦予模型材質并按照圖紙完成布局。對于有運動需求的零部件(比如促動器),在三維建模軟件中建模完成后導入multigen creator添加dof運動節點,在osg程序中采用finddofnode程序可對dof節點進行搜索并進行運動控制。在饋源倉與反射面節點之上分別增加一個transform節點,在OSG中通過osg::Transform節點類來實現模型的位置變換。
本文根據坐標數據在可視化場景下對大量重復性的模型進行自動化布局,采用OSG的MatrixTransform進行位置變換,將指定的模型通過平移旋轉安裝在指定位置。osg::MatrixTransform是一個變換節點,它會將其所有子節點進行坐標變換,變換的依據就是它自身的數據成員Matrix,比如當進行旋轉變換時用osg::Matrix::rotate(osg::inDegrees(n),0.0f, 0.0f, 1.0f) 通過構造一個旋轉變換矩陣可以實現目標模型圍繞Z軸進行n度旋轉。osg::Matrix::rotate是Matrix類的靜態函數,在osg::Matrix::rotate(osg::InDegrees(n), 0.0f, 0.0f, 1.0f) 中一共有4個參數,第一個參數是角度,后三個參數是旋轉的向量坐標值。當進行平移操作時,通過osg::Matrix::translate即可實現沿任意軸的位移變換。
2 225個促動器需要在三維空間中安裝在指定的位置,如果按照人工方式進行手動布局,須在3D max安裝好每一個促動器,工作量極大,且人工安裝的精度也很難滿足精準的位置要求。在FAST可視化系統開發過程中,促動器的安裝采用程序化自動布局,首先在三維軟件中繪制促動器模型,然后導入Multigen creator為促動器添加dof節點。根據索網的主索節點與下拉索的節點三維坐標,建立本地txt文本,在程序中通過for循環加載促動器模型并讀取本地txt文本的2 225組三維坐標。將下拉索起始坐標和終點坐標兩個坐標點做差即可求得兩點之間的空間向量,利用MatrixTransform的旋轉變換矩陣對空間向量進行旋轉從而使促動器軸向與下拉索同向,然后利用MatrixTransform平移變換矩陣將促動器模型的原點平移到對應的下拉索的終點坐標,一個促動器即可安裝完畢。循環2 225次后,將每一個促動器按指定的位置安裝完畢,在安裝同時為每一個促動器進行編號,2 225個促動器各自對應自己的ID,便于以后的監視管理與操作。圖3為安裝促動器的For循環流程圖,圖4為通過此方法安裝促動器的效果圖。采用自動化安裝布局,僅需要建造一個促動器模型,通過程序讀入該模型,循環將其安裝在對應的位置即可,該方法適合三維可視化場景中大量的重復性的模型的布局。

圖3 安裝促動器For循環流程圖

圖4 促動器安裝效果圖
每一個小反射面單元邊長為1米左右,100個小反射面單元組成一個大的面板子單元,反射面下面索網的索節點連接一個可以伸縮運動的促動器,促動器通過伸縮運動牽引索網,使反射面生成一個用于匯聚射電信號的拋物面。
FAST的反射面隨著探測目標的改變而發生改變,系統通過控制每一個促動器的拉伸量,從而改變反射拋物面的形狀。本文系統中促動器的伸長數據實時寫入服務器A的Redis數據庫,客戶端B通過服務器A的IP訪問其數據庫,通過get key value命令從數據庫調取其所需數據,每一個促動器根據其ID連接對應數據。通過采用OSG的更新回調,使促動器的伸長量動態變化。由于Redis的數據是存在內存中的,所以存寫速度非??欤梢员苊鈹祿鎸懚鸬目梢暬訒r顯示[16]。在仿真系統中FAST工作流程如圖5所示。

圖5 仿真系統中促動器工作流程
三維場景可視化最基本同時也最重要的就是保證場景的真實感與逼真性,在真實的場景中,會存在不同天氣的交迭,在虛擬場景中為了增加真實性,也需要不同的天氣效果。在OSG的雨雪天氣可以通過粒子特效進行實現,通過osgParticle庫生成粒子系統節點,用于模擬各種天氣或則自然現象效果[17],通過Qt的菜單按鈕來切換不同的天氣效果。在程序中可以通過控制粒子的顏色與透明度來改變雨雪天氣,同時可以通過風速來控制雨雪的漂移。圖6為FAST三維場景雪天效果圖。

圖6 雪天場景效果圖
本文仿真系統在Windows 10操作系統下利用VS2013編譯器,使用版本號為3.4的OSG與版本號為5.5的Qt進行系統開發。電腦處理器為Intel core i3-6100,內存為4 GB,顯卡為Nvidia GeForce GT720。在實驗前將所渲染好的模型及坐標點放入程序的子目錄下,生成程序并進行調試。本文系統需要根據坐標點對2 225個促動器進行自動布局,實驗發現促動器模型的面片精度和材質對系統的運行效率產生很大影響。為更好地驗證材質渲染及面片精度對可視場景運行效率的影響,分別導出兩種不同精度的促動器模型分別對其分別進行材質與RGB顏色渲染后,之后依次導入程序進行調試,記錄運行數據。其中一號促動器模型(如圖7(a)所示)為根據圖紙一比一繪制并導出的高精度三維模型,附加真實材質;二號促動器(如圖7(b)所示)為根據圖紙一比一繪制的并導出的高精度三維模型,未附加真實材質,采用RGB顏色渲染;三號促動器(如圖7(c)所示)為降低面片精度的三維模型,附加真實材質;四號促動器(如圖7(d)所示)為降低面片精度三維模型,未附加真實材質,采用RGB顏色渲染。

圖7 四種促動器模型
表1所示為各促動器模型在可視化場景中的運行數據,可以看出,在可視化場景中,2 225個促動器的渲染需要消耗大量的運算量,當系統采用一號促動器模型時,幀率降低到5.64 FPS,同時占用內存達到92%,每一幀的揀選過程耗費時間高達101.28 ms,繪制過程耗費時間30.21 ms,運行情況極為不流暢。當系統采用二號促動器模型,幀率與占用內存情況并沒有明顯改善。當系統采用三號促動器模型時,幀率明顯提升為46.35 FPS,占用內存降低為81%,每一幀的場景更新耗費時間0.01 ms,揀選耗費時間10.08 ms,繪制耗費時間9.02 ms,相比一號促動器模型及二號促動器模型,運行情況已經有了明顯的改善。當系統采用四號促動器模型時,相比三號促動器幀率并沒有明顯提升,但是在每一幀的揀選與繪制時間降低到1.68 ms與3.98 ms,雖然在每一幀揀選與繪制的時間有所降低,但是影響可視化流暢度最大的因素是幀率,同時附加真實材質的促動器逼真度要遠遠好于RGB渲染的促動器。三號促動器為通過Solidworks導出的降低面片精度的三維模型,相比面片精度精細的三維模型其尺寸公差與角度公差更大,雖然面片精度略有降低,但是促動器的繪制精度為毫米級,在一定程度上降低面片精度后的模型在一定的視場范圍內仍具有較好的演示效果,同時通過對比發現三號促動器的可視化效果較為理想,故本文系統選用三號促動器為演示模型。

表1 可視化場景中加載促動器的運行數據
在服務器A上運行Redis數據庫服務器,當顯示數據庫已經運行并可以接受端口的連接后,利用set key value命令將促動器的數據寫入到Redis數據庫中,每一個鍵值對對應一個促動器拉伸數據。在客戶端B上運行可視化程序,在程序中通過服務器A的IP訪問其Redis數據庫,利用get key value命令獲取相應數據來確定促動器拉伸量,促動器的dof節點根據獲取的數據,利用更新回調實現促動器的動態運動。促動器的初始狀態如圖8(a)所示,當點擊促動器的動態演示,查看促動器的演示效果,如圖8(b)所示,促動器已經根據Redis數據庫伸長了指定數據的位移量。

圖8 促動器初始狀態與拉伸效果
本文通過OSG與Qt的結合,對FAST三維可視化系統進行了開發,將FAST三維場景實時顯示在可視界面。該系統通過對促動器模型進行自動化布局,在提高安裝布局精度的基礎上又節省了勞動力,同時使用Redis數據庫驅動促動器進行伸縮運動,為場景的監視工作提供了良好的條件。但是,真實的場景存在無法預測的故障卻不能實時顯示在可視界面中,未來工作將通過對各種情況的預測與OSG程序接口的編寫來完善此不足。