郝 朝,藥紅紅,山 壽
(中國飛行試驗研究院,陜西 西安 710089)
基于OSG的飛行器實時監控軟件設計
郝 朝,藥紅紅,山 壽
(中國飛行試驗研究院,陜西 西安 710089)
在飛行試驗中,飛行器實時監控是保障飛行安全和提高工作效率的一個關鍵環節。為了直觀地實時監控飛行器的位置姿態和工作狀態,保證飛行器試飛安全,提出了基于OSG(Open Scene Graph)技術的飛行器三維實時監控軟件設計方案。軟件采用C++語言設計,讀取飛行器的部件模型構建三維可視化飛行場景,通過TCP/IP協議與服務器完成數據交互,實時驅動飛行場景中模型運動,設計獨立線程響應鍵盤和鼠標操作,采用場景漫游和模型選取技術,通過三維模型運動與數字顯示相結合的方式,更加可視化地監控飛行器的飛行過程。利用模塊化和多線程的設計思路,提高了軟件的執行效率和可擴展性。目前該軟件已成功應用到多個型號任務試飛中。實際應用效果表明,該監控軟件具有良好的實時性、準確性、可靠性和人機交互功能,能夠滿足飛行器實時監控系統的要求。
OSG;飛行器;實時監控;多線程;人機交互
隨著航天航空技術的飛速發展,對飛行器的監控要求也越來越高。在飛行試驗中,飛行器實時監控是保障飛行安全和提高工作效率的一個關鍵環節,要求實時查看飛行器的位置姿態信息和設備的工作狀態。一旦實時監控軟件顯示有影響飛行安全的故障,試飛工程師就能及時提醒飛行監控指揮員,并告知飛行員具體系統的故障以及應對故障的措施[1],因此要求實時監控軟件數據直觀且能準確呈現。目前,實時監控軟件一般都是通過數字或者二維圖表的形式來展示,無法形象生動地向監控人員呈現飛行器的狀態[2-3]。
為了可視化地表現飛行器的飛行過程,提出了基于OSG的三維實時監控軟件設計方案。基于開源的OSG三維渲染系統構建三維可視化飛行場景,實時接收服務器數據刷新飛行場景中的三維模型,實現對飛行器飛行狀態的實時監控。
該軟件已經應用到多個型號任務試飛中,有效保證試飛安全監控。
OSG是一款開源、高效的三維渲染系統,是一個開源的場景圖形管理開發庫,主要為圖形圖像應用程序的開發提供場景管理和圖形渲染優化功能[4]。OSG采用可移植的C++作為開發語言,使得其具有良好的跨平臺性[5],實現了對OpenGL底層渲染API的封裝,功能豐富并易于使用。目前OSG在視景仿真、虛擬現實、科學計算可視化等方面都具有非常廣泛的應用[6-10]。
飛行器實時監控軟件運行流程如圖1所示。

圖1 軟件運行流程圖
為了方便軟件功能的更新、維護與拓展,在設計過程中采用模塊化的思想。軟件由數據交互模塊、場景渲染模塊和事件響應模塊組成,各個模塊功能通過設計獨立的線程[11-12]來完成。系統軟件設計的結構圖如圖2所示。

圖2 軟件結構圖
3.1 模型讀取
OSG提供文件的讀寫插件將模型讀入到模型節點中。
osg::Node*pNodeModel=osgDB::readNodeFile(chrModelName);
飛行器的軌跡通過OSG內置的POLYGON圖元和LINE_LOOP圖元實現。
3.2 模型運動與場景漫游
三維虛擬場景中的漫游能夠讓使用者從不同角度立體地觀察場景中的物體,從而提高了交互的品質。指定觀察者位置和觀察方向,OSG核心庫能在每一幀都計算視場內出現的物體,自動完成圖形的拾取和裁剪并渲染輸出到屏幕上。因此,實現場景漫游的核心在于控制觀察者所在的位置和方向。
觀測者位置可以通過直角坐標和球坐標指定,設置攝像機朝向球心可保持觀察對象始終在視野內。球坐標系(0.0,0.0,CameraDistance)轉換到直角坐標系為:
vViewPointPosition=osg::Vec3(0,-CameraDistance,0);
vViewDirection=osg::Vec3(osg::PI_2,0,0);
當需要觀測者跟隨某一實體運動時,需要獲取實體位置并疊加在攝像機的位置向量上。也可以同時獲取實體姿態,通過矩陣變換將觀測者與實體綁定。
三維演示飛行中飛行器的位置和姿態、設備的工作狀態隨時間發生變化,OSG應根據這些變化驅動場景中實體的變化。對于位置和姿態的變化,由OSG坐標轉換矩陣[4]實現,步驟如下:
(1)在實體對象節點的坐標轉換矩陣上設置回調函數:
pMatrixTransform→setUpdateCallback(this);
(2)設置回調函數后,在節點的虛函數中對節點坐標轉換矩陣進行處理:
voidDeviceWithAction::operator()(osg::Node* node,osg::NodeVisitor* nv);
(3)建立運動回調類:
osg::MatrixTransform *pTransformMatrix=dynamic_cast
(4)根據實體的新位置對此節點進行平移變換:
osg::Matrix mTranslate,mRotate;
mTranslate.makeTranslate(this→vPosition);
(5)根據實體的新姿態對此節點進行旋轉變換:
mRotate.makeRotate(this→vAttitude._v[0],osg::Vec3(1,0,0),this→vAttitude._v[1],osg::Vec3(0,1,0),this→vAttitude._v[2],osg::Vec3(0,0,1));
(6)刷新此節點的坐標轉換矩陣,實體將運動到指定位置和姿態。
pTransformMatrix→setMatrix(mRotate*(this→mFixMatrix)*mTranslate);
traverse(node,nv);
3.3 鍵盤鼠標交互
鍵盤鼠標交互采用事件處理機制來實現,添加一個switch語句來判別事件類型,用到的事件類型有KEYDOWN、LEFT_MOUSE_BUTTON等。KEYDOWN事件類型是指鍵盤上某鍵按下產生的事件。KEYDOWN通過getKey函數判斷是哪個鍵產生的事件。其中,字母和數字按鍵的getKey函數返回值為對應字母和數字的ASCII碼。LEFT_MOUSE_BUTTON事件類型是指鼠標左鍵按下產生的事件,主要實現模型選取來進行更多操作。OSG并不直接支持選中,但其提供的相交計算功能能夠實現模型的選中操作。步驟如下:
(1)定義一條射向屏幕內部的射線:
osgUtil::LineSegmentIntersector::Intersections sections;
(2)計算場景中與此條射線相交的實體交集:
pCurrentViewer→computeIntersections(CenterX,CenterY,sections);
交集是C++中的容器對象,它的每一個元素都保存了與射線相交節點的節點路徑,也即是從根節點到此節點的父—子節點樹分支。
(3)使用迭代器取出節點路徑:
osgUtil::LineSegmentIntersector::Intersections::iterator itr=sections.begin();
osg::NodePathnodePath=itr →nodePath;
(4)獲取節點路徑上每一個節點,通過名稱比對確定具體節點。
3.4 HUD文字顯示
OSG支持平視顯示器(Head Up Display,HUD)的文字顯示。HUD主要用來顯示飛行器的位置和姿態等信息。HUD不會因攝像機的漫游而變化。步驟如下:
(1)創建攝像機節點:
osg::Camera* cam=new osg::CameraNode;
(2)設置相機節點的投影矩陣和渲染順序:
cam→setProjectionMatrix(osg::Matrix::ortho2D(0,1 024,0,768));
cam→setReferenceFrame(osg::Transform::ABSOLUTE_RF);
cam→setRenderOrder(osg::CameraNode::POST_RENDER);
(3)創建Text對象以輸出文字:
osg::Geode* pGeode=new osg::Geode();
osgText::Text *pText=new osgText::Text;
pGeode→addDrawable(pText);
(4)將文字節點加入攝像機中:
cam→addChild(pGeode);
3.5 數據交互
數據交互示意圖如圖3所示。數據交互采用連接可靠的TCP協議[13-14]建立兩個網絡連接,其中一個是發送套接字,負責向服務器發送參數名數組,發送成功后關閉該套接字。另一個是接收套接字,服務器接收到參數名后挑選出對應的數據并重新組包,通過該套接字實時接收服務器數據,解析完成后驅動相應模型的運動。

圖3 數據交互示意圖
飛行器三維實時監控軟件運行結果如圖4所示,可以直觀地顯示出飛行器當前位置姿態信息、太陽帆板的運動情況和推力器的工作情況等,整個場景渲染效果逼真。
通過實際應用發現,該軟件實時監控數據準確、運行穩定可靠。

圖4 軟件運行結果
為了保證飛行器試飛安全,可視化地實時監控飛行過程,設計了基于OSG的飛行器三維實時監控軟件。基于開源的OSG三維渲染系統,構建三維可視化飛行場景,采用多線程并發機制和模塊化設計思想,提高了軟件的可靠性和維護性,實時接收服務器數據驅動飛行場景中三維模型運動,對運動場景進行刷新,實現對飛行器運動過程的實時監控。該軟件已經應用于多個型號任務的試飛實時監控中,實際應用效果表明,該軟件具有穩定可靠、人機界面友好等特點,滿足了實時監控要求。
[1] 張芹芹,劉 丹.基于LabVIEW的某航電系統監控軟件設計[J].中國科技信息,2014(20):128-129.
[2] 房 瑾,覃 燕,穆永河.通用試飛參數顯示儀的設計與實現[J].電子設計工程,2014,22(9):35-37.
[3] 劉嫚婷,尚麗娜,張芹芹.飛行試驗通用動態監控軟件的設計與實現[J].中國科技信息,2013(18):92-93.
[4] 肖 鵬,劉更代,徐明亮.OpenSceneGraph三維渲染引擎編程指南[M].北京:清華大學出版社,2009.
[5] Martz P.Open scene graph quick start guide[M].Louisville:Skew Matrix Software LLC,2007.
[6] Dias M S,D'Alpuim J,Caetano P.Galactica,a digital planetarium for immersive virtual reality settings[J].International Journal of Creative Interfaces and Computer Graphics,2016,7(1):19-39.
[7] 姚 崇.無人機飛行仿真系統關鍵技術研究[D].哈爾濱:哈爾濱工業大學,2014.
[8] 何坤金,張莉軍,李 強,等.基于OSG的航道船舶三維可視化信息管理系統[J].計算機與現代化,2015(11):89-92.
[9] 伍中聯,孫 卡,王新春,等.校園三維可視化仿真系統的設計與實現[J].計算機與現代化,2013(2):76-79.
[10] 郭 佳.基于OSG的飛行仿真系統視景平臺的研究與開發[D].沈陽:沈陽航空工業學院,2009.
[11] 郝文化.Windows多線程編程技術與實例[M].北京:中國水利水電出版社,2005.
[12] Courbin P,Lupu I,Goossens J.Scheduling of hard real-time multi-phase multi-thread (MPMT) periodic tasks[J].Real-Time Systems,2013,49(2):239-266.
[13] 羅莉琴,詹祖橋.Windows網絡編程[M].北京:人民郵電出版社,2011.
[14] Youm B J,Park J.TCP/IP protocol over IEEE-1394 network for real-time control applications[C]//IFAC.[s.l.]:IEEE,2005:38-40.
Design of Aircraft Real-time Monitoring Software Based on OSG
HAO Zhao,YAO Hong-hong,SHAN Shou
(Chinese Flight Test Establishment,Xi’an 710089,China)
Aircraft real-time monitoring is a key to guarantee the flight safety and improve the work efficiency in flight test.In order to monitor the position attitude and working condition in real-time of the aircraft intuitively and ensure the safety of the aircraft flight test,the program of 3D real-time monitoring software of aircraft based on OSG (Open Scene Graph) is proposed.The software is designed using C++ language.3D visualization flight scene is constructed by reading aircraft models.The real-time receiving server data drives the motion of the models in the flight scene through the TCP/IP protocol.The keyboard and mouse operation is responsed by a separate thread.The technology of scene roaming and model selection is used and the mode of 3d model movement combined with digital display is applied to monitor the flight more visually.Using the design idea of modularization and multithreading improves the implementing efficiency and extendibility.Now the software has been successfully applied to plenty of type of tasks test.The actual practice shows that the monitoring software has good performance of real-time,accuracy,reliability and interactive and so on,and it can meet the requirements of aircraft real-time monitoring system.
OSG;aircraft;real-time monitoring;multi-thread;human-computer interaction
2016-06-17
2016-09-22
時間:2017-03-07
國防基礎科研計劃重點項目(A0520132031)
郝 朝(1990-),男,助理工程師,碩士,研究方向為飛行試驗軟件開發和數據處理。
http://kns.cnki.net/kcms/detail/61.1450.TP.20170307.0922.088.html
TP311.1
A
1673-629X(2017)04-0021-04
10.3969/j.issn.1673-629X.2017.04.005