APP下载

基于OSG的飞行器实时监控软件设计

2017-05-02药红红

计算机技术与发展 2017年4期
关键词:飞行器姿态可视化

郝 朝,药红红,山 寿

(中国飞行试验研究院,陕西 西安 710089)

基于OSG的飞行器实时监控软件设计

郝 朝,药红红,山 寿

(中国飞行试验研究院,陕西 西安 710089)

在飞行试验中,飞行器实时监控是保障飞行安全和提高工作效率的一个关键环节。为了直观地实时监控飞行器的位置姿态和工作状态,保证飞行器试飞安全,提出了基于OSG(Open Scene Graph)技术的飞行器三维实时监控软件设计方案。软件采用C++语言设计,读取飞行器的部件模型构建三维可视化飞行场景,通过TCP/IP协议与服务器完成数据交互,实时驱动飞行场景中模型运动,设计独立线程响应键盘和鼠标操作,采用场景漫游和模型选取技术,通过三维模型运动与数字显示相结合的方式,更加可视化地监控飞行器的飞行过程。利用模块化和多线程的设计思路,提高了软件的执行效率和可扩展性。目前该软件已成功应用到多个型号任务试飞中。实际应用效果表明,该监控软件具有良好的实时性、准确性、可靠性和人机交互功能,能够满足飞行器实时监控系统的要求。

OSG;飞行器;实时监控;多线程;人机交互

0 引 言

随着航天航空技术的飞速发展,对飞行器的监控要求也越来越高。在飞行试验中,飞行器实时监控是保障飞行安全和提高工作效率的一个关键环节,要求实时查看飞行器的位置姿态信息和设备的工作状态。一旦实时监控软件显示有影响飞行安全的故障,试飞工程师就能及时提醒飞行监控指挥员,并告知飞行员具体系统的故障以及应对故障的措施[1],因此要求实时监控软件数据直观且能准确呈现。目前,实时监控软件一般都是通过数字或者二维图表的形式来展示,无法形象生动地向监控人员呈现飞行器的状态[2-3]。

为了可视化地表现飞行器的飞行过程,提出了基于OSG的三维实时监控软件设计方案。基于开源的OSG三维渲染系统构建三维可视化飞行场景,实时接收服务器数据刷新飞行场景中的三维模型,实现对飞行器飞行状态的实时监控。

该软件已经应用到多个型号任务试飞中,有效保证试飞安全监控。

1 OSG简介

OSG是一款开源、高效的三维渲染系统,是一个开源的场景图形管理开发库,主要为图形图像应用程序的开发提供场景管理和图形渲染优化功能[4]。OSG采用可移植的C++作为开发语言,使得其具有良好的跨平台性[5],实现了对OpenGL底层渲染API的封装,功能丰富并易于使用。目前OSG在视景仿真、虚拟现实、科学计算可视化等方面都具有非常广泛的应用[6-10]。

2 软件设计

飞行器实时监控软件运行流程如图1所示。

图1 软件运行流程图

为了方便软件功能的更新、维护与拓展,在设计过程中采用模块化的思想。软件由数据交互模块、场景渲染模块和事件响应模块组成,各个模块功能通过设计独立的线程[11-12]来完成。系统软件设计的结构图如图2所示。

图2 软件结构图

3 软件实现

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(node);

(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所示,可以直观地显示出飞行器当前位置姿态信息、太阳帆板的运动情况和推力器的工作情况等,整个场景渲染效果逼真。

通过实际应用发现,该软件实时监控数据准确、运行稳定可靠。

图4 软件运行结果

5 结束语

为了保证飞行器试飞安全,可视化地实时监控飞行过程,设计了基于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

猜你喜欢

飞行器姿态可视化
基于CiteSpace的足三里穴研究可视化分析
自然资源可视化决策系统
高超声速飞行器
思维可视化
自然资源可视化决策系统
攀爬的姿态
全新一代宋的新姿态
复杂飞行器的容错控制
另一种姿态
神秘的飞行器