郝 朝,藥紅紅,山 壽
(中國飛行試驗研究院,陜西 西安 710089)
基于OSG的飛行器實時監(jiān)控軟件設(shè)計
郝 朝,藥紅紅,山 壽
(中國飛行試驗研究院,陜西 西安 710089)
在飛行試驗中,飛行器實時監(jiān)控是保障飛行安全和提高工作效率的一個關(guān)鍵環(huán)節(jié)。為了直觀地實時監(jiān)控飛行器的位置姿態(tài)和工作狀態(tài),保證飛行器試飛安全,提出了基于OSG(Open Scene Graph)技術(shù)的飛行器三維實時監(jiān)控軟件設(shè)計方案。軟件采用C++語言設(shè)計,讀取飛行器的部件模型構(gòu)建三維可視化飛行場景,通過TCP/IP協(xié)議與服務(wù)器完成數(shù)據(jù)交互,實時驅(qū)動飛行場景中模型運動,設(shè)計獨立線程響應(yīng)鍵盤和鼠標操作,采用場景漫游和模型選取技術(shù),通過三維模型運動與數(shù)字顯示相結(jié)合的方式,更加可視化地監(jiān)控飛行器的飛行過程。利用模塊化和多線程的設(shè)計思路,提高了軟件的執(zhí)行效率和可擴展性。目前該軟件已成功應(yīng)用到多個型號任務(wù)試飛中。實際應(yīng)用效果表明,該監(jiān)控軟件具有良好的實時性、準確性、可靠性和人機交互功能,能夠滿足飛行器實時監(jiān)控系統(tǒng)的要求。
OSG;飛行器;實時監(jiān)控;多線程;人機交互
隨著航天航空技術(shù)的飛速發(fā)展,對飛行器的監(jiān)控要求也越來越高。在飛行試驗中,飛行器實時監(jiān)控是保障飛行安全和提高工作效率的一個關(guān)鍵環(huán)節(jié),要求實時查看飛行器的位置姿態(tài)信息和設(shè)備的工作狀態(tài)。一旦實時監(jiān)控軟件顯示有影響飛行安全的故障,試飛工程師就能及時提醒飛行監(jiān)控指揮員,并告知飛行員具體系統(tǒng)的故障以及應(yīng)對故障的措施[1],因此要求實時監(jiān)控軟件數(shù)據(jù)直觀且能準確呈現(xiàn)。目前,實時監(jiān)控軟件一般都是通過數(shù)字或者二維圖表的形式來展示,無法形象生動地向監(jiān)控人員呈現(xiàn)飛行器的狀態(tài)[2-3]。
為了可視化地表現(xiàn)飛行器的飛行過程,提出了基于OSG的三維實時監(jiān)控軟件設(shè)計方案。基于開源的OSG三維渲染系統(tǒng)構(gòu)建三維可視化飛行場景,實時接收服務(wù)器數(shù)據(jù)刷新飛行場景中的三維模型,實現(xiàn)對飛行器飛行狀態(tài)的實時監(jiān)控。
該軟件已經(jīng)應(yīng)用到多個型號任務(wù)試飛中,有效保證試飛安全監(jiān)控。
OSG是一款開源、高效的三維渲染系統(tǒng),是一個開源的場景圖形管理開發(fā)庫,主要為圖形圖像應(yīng)用程序的開發(fā)提供場景管理和圖形渲染優(yōu)化功能[4]。OSG采用可移植的C++作為開發(fā)語言,使得其具有良好的跨平臺性[5],實現(xiàn)了對OpenGL底層渲染API的封裝,功能豐富并易于使用。目前OSG在視景仿真、虛擬現(xiàn)實、科學計算可視化等方面都具有非常廣泛的應(yīng)用[6-10]。
飛行器實時監(jiān)控軟件運行流程如圖1所示。
圖1 軟件運行流程圖
為了方便軟件功能的更新、維護與拓展,在設(shè)計過程中采用模塊化的思想。軟件由數(shù)據(jù)交互模塊、場景渲染模塊和事件響應(yīng)模塊組成,各個模塊功能通過設(shè)計獨立的線程[11-12]來完成。系統(tǒng)軟件設(shè)計的結(jié)構(gòu)圖如圖2所示。
圖2 軟件結(jié)構(gòu)圖
3.1 模型讀取
OSG提供文件的讀寫插件將模型讀入到模型節(jié)點中。
osg::Node*pNodeModel=osgDB::readNodeFile(chrModelName);
飛行器的軌跡通過OSG內(nèi)置的POLYGON圖元和LINE_LOOP圖元實現(xiàn)。
3.2 模型運動與場景漫游
三維虛擬場景中的漫游能夠讓使用者從不同角度立體地觀察場景中的物體,從而提高了交互的品質(zhì)。指定觀察者位置和觀察方向,OSG核心庫能在每一幀都計算視場內(nèi)出現(xiàn)的物體,自動完成圖形的拾取和裁剪并渲染輸出到屏幕上。因此,實現(xiàn)場景漫游的核心在于控制觀察者所在的位置和方向。
觀測者位置可以通過直角坐標和球坐標指定,設(shè)置攝像機朝向球心可保持觀察對象始終在視野內(nèi)。球坐標系(0.0,0.0,CameraDistance)轉(zhuǎn)換到直角坐標系為:
vViewPointPosition=osg::Vec3(0,-CameraDistance,0);
vViewDirection=osg::Vec3(osg::PI_2,0,0);
當需要觀測者跟隨某一實體運動時,需要獲取實體位置并疊加在攝像機的位置向量上。也可以同時獲取實體姿態(tài),通過矩陣變換將觀測者與實體綁定。
三維演示飛行中飛行器的位置和姿態(tài)、設(shè)備的工作狀態(tài)隨時間發(fā)生變化,OSG應(yīng)根據(jù)這些變化驅(qū)動場景中實體的變化。對于位置和姿態(tài)的變化,由OSG坐標轉(zhuǎn)換矩陣[4]實現(xiàn),步驟如下:
(1)在實體對象節(jié)點的坐標轉(zhuǎn)換矩陣上設(shè)置回調(diào)函數(shù):
pMatrixTransform→setUpdateCallback(this);
(2)設(shè)置回調(diào)函數(shù)后,在節(jié)點的虛函數(shù)中對節(jié)點坐標轉(zhuǎn)換矩陣進行處理:
voidDeviceWithAction::operator()(osg::Node* node,osg::NodeVisitor* nv);
(3)建立運動回調(diào)類:
osg::MatrixTransform *pTransformMatrix=dynamic_cast
(4)根據(jù)實體的新位置對此節(jié)點進行平移變換:
osg::Matrix mTranslate,mRotate;
mTranslate.makeTranslate(this→vPosition);
(5)根據(jù)實體的新姿態(tài)對此節(jié)點進行旋轉(zhuǎn)變換:
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)刷新此節(jié)點的坐標轉(zhuǎn)換矩陣,實體將運動到指定位置和姿態(tài)。
pTransformMatrix→setMatrix(mRotate*(this→mFixMatrix)*mTranslate);
traverse(node,nv);
3.3 鍵盤鼠標交互
鍵盤鼠標交互采用事件處理機制來實現(xiàn),添加一個switch語句來判別事件類型,用到的事件類型有KEYDOWN、LEFT_MOUSE_BUTTON等。KEYDOWN事件類型是指鍵盤上某鍵按下產(chǎn)生的事件。KEYDOWN通過getKey函數(shù)判斷是哪個鍵產(chǎn)生的事件。其中,字母和數(shù)字按鍵的getKey函數(shù)返回值為對應(yīng)字母和數(shù)字的ASCII碼。LEFT_MOUSE_BUTTON事件類型是指鼠標左鍵按下產(chǎn)生的事件,主要實現(xiàn)模型選取來進行更多操作。OSG并不直接支持選中,但其提供的相交計算功能能夠?qū)崿F(xiàn)模型的選中操作。步驟如下:
(1)定義一條射向屏幕內(nèi)部的射線:
osgUtil::LineSegmentIntersector::Intersections sections;
(2)計算場景中與此條射線相交的實體交集:
pCurrentViewer→computeIntersections(CenterX,CenterY,sections);
交集是C++中的容器對象,它的每一個元素都保存了與射線相交節(jié)點的節(jié)點路徑,也即是從根節(jié)點到此節(jié)點的父—子節(jié)點樹分支。
(3)使用迭代器取出節(jié)點路徑:
osgUtil::LineSegmentIntersector::Intersections::iterator itr=sections.begin();
osg::NodePathnodePath=itr →nodePath;
(4)獲取節(jié)點路徑上每一個節(jié)點,通過名稱比對確定具體節(jié)點。
3.4 HUD文字顯示
OSG支持平視顯示器(Head Up Display,HUD)的文字顯示。HUD主要用來顯示飛行器的位置和姿態(tài)等信息。HUD不會因攝像機的漫游而變化。步驟如下:
(1)創(chuàng)建攝像機節(jié)點:
osg::Camera* cam=new osg::CameraNode;
(2)設(shè)置相機節(jié)點的投影矩陣和渲染順序:
cam→setProjectionMatrix(osg::Matrix::ortho2D(0,1 024,0,768));
cam→setReferenceFrame(osg::Transform::ABSOLUTE_RF);
cam→setRenderOrder(osg::CameraNode::POST_RENDER);
(3)創(chuàng)建Text對象以輸出文字:
osg::Geode* pGeode=new osg::Geode();
osgText::Text *pText=new osgText::Text;
pGeode→addDrawable(pText);
(4)將文字節(jié)點加入攝像機中:
cam→addChild(pGeode);
3.5 數(shù)據(jù)交互
數(shù)據(jù)交互示意圖如圖3所示。數(shù)據(jù)交互采用連接可靠的TCP協(xié)議[13-14]建立兩個網(wǎng)絡(luò)連接,其中一個是發(fā)送套接字,負責向服務(wù)器發(fā)送參數(shù)名數(shù)組,發(fā)送成功后關(guān)閉該套接字。另一個是接收套接字,服務(wù)器接收到參數(shù)名后挑選出對應(yīng)的數(shù)據(jù)并重新組包,通過該套接字實時接收服務(wù)器數(shù)據(jù),解析完成后驅(qū)動相應(yīng)模型的運動。
圖3 數(shù)據(jù)交互示意圖
飛行器三維實時監(jiān)控軟件運行結(jié)果如圖4所示,可以直觀地顯示出飛行器當前位置姿態(tài)信息、太陽帆板的運動情況和推力器的工作情況等,整個場景渲染效果逼真。
通過實際應(yīng)用發(fā)現(xiàn),該軟件實時監(jiān)控數(shù)據(jù)準確、運行穩(wěn)定可靠。
圖4 軟件運行結(jié)果
為了保證飛行器試飛安全,可視化地實時監(jiān)控飛行過程,設(shè)計了基于OSG的飛行器三維實時監(jiān)控軟件?;陂_源的OSG三維渲染系統(tǒng),構(gòu)建三維可視化飛行場景,采用多線程并發(fā)機制和模塊化設(shè)計思想,提高了軟件的可靠性和維護性,實時接收服務(wù)器數(shù)據(jù)驅(qū)動飛行場景中三維模型運動,對運動場景進行刷新,實現(xiàn)對飛行器運動過程的實時監(jiān)控。該軟件已經(jīng)應(yīng)用于多個型號任務(wù)的試飛實時監(jiān)控中,實際應(yīng)用效果表明,該軟件具有穩(wěn)定可靠、人機界面友好等特點,滿足了實時監(jiān)控要求。
[1] 張芹芹,劉 丹.基于LabVIEW的某航電系統(tǒng)監(jiān)控軟件設(shè)計[J].中國科技信息,2014(20):128-129.
[2] 房 瑾,覃 燕,穆永河.通用試飛參數(shù)顯示儀的設(shè)計與實現(xiàn)[J].電子設(shè)計工程,2014,22(9):35-37.
[3] 劉嫚婷,尚麗娜,張芹芹.飛行試驗通用動態(tài)監(jiān)控軟件的設(shè)計與實現(xiàn)[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] 姚 崇.無人機飛行仿真系統(tǒng)關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學,2014.
[8] 何坤金,張莉軍,李 強,等.基于OSG的航道船舶三維可視化信息管理系統(tǒng)[J].計算機與現(xiàn)代化,2015(11):89-92.
[9] 伍中聯(lián),孫 卡,王新春,等.校園三維可視化仿真系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與現(xiàn)代化,2013(2):76-79.
[10] 郭 佳.基于OSG的飛行仿真系統(tǒng)視景平臺的研究與開發(fā)[D].沈陽:沈陽航空工業(yè)學院,2009.
[11] 郝文化.Windows多線程編程技術(shù)與實例[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網(wǎng)絡(luò)編程[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
國防基礎(chǔ)科研計劃重點項目(A0520132031)
郝 朝(1990-),男,助理工程師,碩士,研究方向為飛行試驗軟件開發(fā)和數(shù)據(jù)處理。
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