APP下载

基于web技术的探空火箭试验任务可视化设计

2014-09-03张慧明姜秀杰陈志敏

电子设计工程 2014年11期
关键词:探空火箭字段插件

张慧明,姜秀杰,陈志敏

(1.中国科学院 空间科学与应用研究中心,北京 100190;2.中国科学院大学 北京 100049)

基于web技术的探空火箭试验任务可视化设计

张慧明1,2,姜秀杰1,陈志敏1

(1.中国科学院 空间科学与应用研究中心,北京 100190;2.中国科学院大学 北京 100049)

为了帮助科研人员理解探空火箭试验任务中获取的抽象数据,直观地了解火箭的飞行状况,本文利用SketchUP创建火箭模型,采用Google Earth浏览器插件作为开发平台,利用Google Earth API驱动火箭模型,直观生动地表达了火箭的姿态、弹道数据。系统采用B/S架构,利用WebSocket前端技术实现了遥测站到web页面的数据传输,解决了传统实时web应用网络实际利用率低下的问题。实验结果表明系统开发部署的成本较低,系统构建的火箭发射场景更为逼真,再现火箭飞行状态的准确性和实时性较好。

探空火箭;可视化;弹道;姿态

探空火箭是一种在近地空间进行探测和科学试验的火箭,其飞行高度介于探空气球与卫星之间,是临近空间40~300 km唯一的、其他飞行器所不能及的实地探测手段[1]。以探空火箭作为载体而开展的各项空间环境原位探测任务对帮助人们理解临近空间大气环境有重要意义。

可视化(Visualization in Scientific Computing,VISC )是90年代计算机应用的一个重要领域,它以图形、图像来描述物理现象,可理解为处理计算或实测数据的一种方法[2]。可视化在航天领域中的运用已经非常广泛。火箭下传的抽象数据阅读困难,难以被人接受和理解,并且难以识别数据中的粗大点,使用可视化技术将它们表达成3维模型则更加直观逼真[3]。可视化系统可以帮助地面人员准确地了解火箭的飞行状态,对航天任务的顺利实施有重要意义。

传统构建探空火箭任务可视化系统的方法从底层OpenGL和Direct3D等图形接口着手搭建系统[4]。这种开发方式的一个很大的缺点是程序员需要关注大量计算机图形学的细节问题,不能专注于航天任务本身。利用专业的可视化仿真平台进行开发能显著减少重复劳动。这些平台主要有:AGI的SKT、NASA的WorldWind和Google Earth。这些平台功能强大,他们为程序员提供了二次开发的接口,对程序员屏蔽底层图形实现细节从而使程序员更加专注于航天任务本身。但是STK对我国禁运,其内置的安全模块使得二次开发需要对STK进行破解,尽管破解可能实现,在部署环节依然需要STK安全模块的许可,这意味着需要在部署的计算机上重新安装并破解STK,这给软件的部署和维护带来很大的麻烦。WorldWind虽然是开源的,但也不可避免的继承了开源软件的一些缺点:如用户体验关心不够,系统非黑箱所带来的开发维护成本高。总的来说以上两种开发方式采用C/S模型,用一种强类型的静态语言开发,如java、C#等,虽然功能强大,但是研制周期较长而且部署和更新较困难。而可视化的需求是丰富多变的,这就需要使用一种更方便快捷的方式开来开发可视化系统。

Google Earth浏览器插件不但提供覆盖全球的卫星图像、地图、地形、3D建筑而且具备良好的用户体验和高效的渲染引擎。Google Earth JavaScript API提供了功能完备二次开发能力[5-6]。JavaScript作为一种弱类型的动态语言其灵活性可以更好的适应每次航天任务的需求更改,同时高效的Chrome V8 JavaScrpt引擎使得javacript脚本语言在执行效率可以媲美编译型语言。

在这样的背景下本文利用Google Earth 浏览器插件这一免费的开发平台实现网页的三维场景实时渲染。系统采用B/S架构,将数据的显示和数据的处理分离,期望得到更好的可扩展性。系统的设计目标是具备web应用在部署和更新方面的优势,又具备客户端应用在交互性和高性能的方面的优势。

1 系统总体设计

为了和已有的遥测系统兼容,可视化系统采用B/S架构,主要分为web前端和websocket服务器,websocket服务器接收预处理服务器传来的火箭下行数据,对数据进行解码和重采样后存入发送缓存。Web页面和模型文件等资源都存储在http资源服务器中,用户向资源服务器请求页面,页面加载完成后向websocket服务器注册并请求火箭数据,这样设计的优点是将数据的显示和数据的处理分离,服务器负责所有CPU密集型的计算任务,客户端负责数据表现方式。

websocket服务器是系统的核心。它不但保持与后端数据源的通信,接收并处理原始数据,而且向所有注册的前端用户广播处理后的数据。在文中预处理服务器和各个遥测站属于现有系统,其余部分是扩展的系统。各级系统的网络关系图如图1所示。

图1 系统网络结构Fig.1 Systems network architecture

WebSocket 协议是实时的关键。WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。所以WebSocket有“Web TCP”之称。传统的轮询或是Comet 技术本质上是不断查询客户端数据是否更新。WebSocket 连接本质上就是一个 TCP 连接,所以在数据传输的稳定性和数据传输量的大小方面,和轮询以及 Comet 技术比较,具有很大的性能优势。Websocket.org 网站对传统的轮询方式和 WebSocket 调用方式作了一个详细的测试和比较,将一个简单的 Web 应用分别用轮询方式和 WebSocket方式来实现,测试结果图如图2所示。

不难发现对于相同的应用只有websocket占用较小的网络带宽,这在向许多客户端发送数据时可以节省大量的网络资源从而降低数据传输的延迟。

图2 轮询和 WebSocket 实现方式的性能对比图Fig.2 Performance comparison chart of WebSocket and Polling

2 前端系统设计

2.1 前端系统初始化

前端系统初始化的步骤分为:1)用户向资源服务器请求前端页面,2)页面加载完毕后初始化Google Earth(GE)插件,3)初始化网络控制器和场景渲染控制器。系统初始化序列图如图3所示。前端初始化完成后进入就绪状态,准备接收数据。

图3 系统初始化序列图Fig.3 System Initialization Sequence Diagram

页面执行google.load("earth","1")会加载google命名空间,利用该命名空间中的earth对象的createInstance()方法即可在指定DIV标签处创建google earth 插件实例。插件创建完毕后首先加载模型文件,加载完毕后利用GE.getFeatures().appendChild()方法将模型加入到场景图中。随后初始化网络控制器(NetManage)和渲染控制器(Player)。NetManage管理接收缓存,Player读取接收缓存内的数据并驱动google earth场景。这两部分的初始化和运行逻辑在2.2和2.3节单独说明。

2.2 前端数据接收

在NetManage的初始化过程中要先和服务器进行信息配置。流程图如图4所示。前端和服务器建立websocket连接后首先向服务器发送(CONFIGURABLE)请求配置标志,服务器在接到该请求后回送数据采样频率,数据格式等配置信息。如果客户端能理解这些信息那么根据这些信息对Player和缓冲区进行设置并向服务器发送准备接收(ACCEPTABLE)标志,表示已经准备就绪可以开始发送数据。服务器会在收到ACCEPTABLE标记后将其加入广播组中并开始发送数据。前端配置和接收流程如图4所示。

图4 NetManage运行流程图Fig.4 Flowchart of NetManage

NetManage封装了Websocket API。Websocket API的接口十分简单,用'ws://'+ip+':'+port+'/'字符串作为构造函数的参数,然后只需要覆盖WebSocket对象的onopen、onmessage、onerror、onclose 4个函数即可。服务器返回的配置信息的格式为:采样频率,数据包总字段数,字段1名称,字段2名称,……,字段N名称。客户端在接收到配置信息后就知道以后传来的数据包内的字段的相对位置,这样就可以很轻松的提取数据包中的各个字段数据了。

网络控制器在配置完成后即进入监听状态,当有新数据到达时先提取数据再加入接收缓存队列的末尾,队列的每一项数据是这样一个5元组:[时间码,[火箭经纬度],[火箭姿态],事件标志位,附加信息]。

2.3 三维场景渲染

渲染控制器周期性的从接收缓存队列的头部取数据,用这些数据更新火箭的经纬度和姿态角。更新的周期和配置阶段接收到的数据采样频率一致,这样可以保证场景和数据的一致性。例如配置阶段获得的数据采样频率是40 Hz那么设置更新函数的执行频率也为40 Hz。更新函数流程图如图5所示。可以看出函数周期性地尝试更新火箭的当前弹道和姿态,如果没有数据可供更新,则保持原有的弹道姿态数值。最后利用google.earth.addEventListener()函数将更新提交给场景。方法是将提交函数注册到freamend事件中,google eartth引擎会在每帧动画绘制完成后调用该函数。在这个函数中将火箭的最新状态提交给场景图,并控制摄像机视角跟随火箭移动。

3 服务器端系统设计

Websocket服务器采用Eclipse RCP框架实现,利用OSGI的插件机制可以方便地对服务器功能进行扩充。用JavaWebSocket开源库实现websocket服务器功能,底层http协议到websocket协议的转换工作已经由WebSocketServer类完成。只要覆盖WebSocketServer类的onOpen(),onMessage(),onError(),onClose()函数来实现所需功能即可。

图5 更新火箭飞行状态流程图Fig.5 Flowchart of updating rocket flight status

服务器运行需要2个缓冲区和3个线程:发送缓冲区和接收缓冲区;发送线程、接收线程和处理线程。接收线程在接收到火箭下传数据后存入接收缓冲区。后台处理线程专门从接收缓存取数据、解码、封装成前端接收格式然后存入发送缓存中。发送线程从发送缓冲区中取数据向前端发送,发送流程图如图6所示,当没有客户端时发送线程会阻塞直到新客户加入才会被唤醒,当发送缓存没有数据可用时也会阻塞直到有新的可用数据才会被唤醒。缓冲区采用同步队列BlockingQueue实现。作为接收端,服务器接收来自遥测站的数据格式符合CCSDS标准。作为发送端,发送的数据格式是要符合配置阶段双方约定好的字段顺序,各个字段用逗号分隔,方便前端对字段的提取。

火箭下传数据的采样频率是根据设备需求制定的,往往不适合可视化。例如姿态仪的原始采样频率是200 Hz,但是前端没有能力也没有必要每秒渲染200帧,考虑到人眼对每秒24帧的渲染速度就无明显卡顿现象,所以可以在服务端对原始数据进行重采样,挑选适量且具有代表性的数据进行发送,这样既减少了网络负载也减少了前端内存消耗。对于弹道和姿态这样的数据来说一般不会有较大的突变,重采样算法重视转折点和拐点,滤除多余的数据。一般下采样到40 Hz频率即可满足可视化需求。这样既减少了数据传输量也保证了显示质量。

图6 发送线程流程图Fig.6 Flow chart of dispatch thread

4 结 论

系统采用MVC[7]设计思想将数据的处理和数据的显示分离开来,提高了系统的扩展性和可维护性。利用Google Earth插件作为开发平台,降低了开发成本,丰富了用户体验。利用websocket技术提高了网络利用率和数据传输效率。实际的演示结果表明系统在重现火箭弹道和姿态有较好的准确性和可靠性。

[1] 姜秀杰,刘波,于世强,等.探空火箭的发展现状与趋势[J].科技导报,2009,27(23):101-110.

JIANG Xiu-jie,LIU Bo,YU Shi-qiang,et al.Development status and trend of sounding rocket[J].Science & Technology Review,2009,27(23):101-110.

[2] 刘维,韩潮.基于Open Inventor的航天可视化系统[J].计算机仿真,2006,23(11):23-27.

LIU Wei,HAN Chao.A visual aerospace simulation system based on open inventor[J].Computer Simulation,2006,23(11):23-27.

[3] 胡厚连.浅谈空间可视化的发展与应用[J].测绘与空间地理信息,2005,28(2):79-80.HU Hou-lian Realization and application of spatial visualization[J].Geomatics & Spatial Information Technology 2005,28(2):79-80.

[4] 李婷婷,刘成,姜秀杰,等.探空火箭可视化设计[J].计算机仿真,2013,30(6):46-51.

LI Ting-ting,LIU Cheng,JIANG Xiu-jie,et al.Visualization design for sounding rocket task based on direct 3D[J].Computer Simulation,2013,30(6):46-51.

[5] 唐勇,刘昌中,吴宏刚.基于Google Earth 的三维航迹监视及六自由度飞行仿真[J].计算机应用,2009,29(12):3385-3387.

TANG Yong,LIU Chang-zhong,WU Hong-gang.3D flight track and 6-DOF flight simulation based on Google Earth[J].Computer Application,2009,29(12):3385-3387.

[6] 江宽,龚小鹏.Google API开发详解:Google Maps 与Google Earth双剑合璧[M ].北京:电子工业出版社,2008.

[7] 王俊芳,李隐峰,王池.基于MVC模式的ThinkPHP框架研究[J].电子科技,2014(4):151-153,158.

WANG Jun-fang,LI Yin-feng,WANG Chi.Research of ThinkPHP frame based on MVC model[J].Electronic Science and Technology,2014(4):151-153,158.

A design for sounding rocket visualization system based on web technology

ZHANG Hui-ming1,2,JIANG Xiu-jie1,CHENG Zhi-ming1
(1.Center for Space Science and Applied Research,Chinese Academy of Sciences,Beijing 100190,China;2.Graduate University of Chinese Academy of Sciences,Beijing 100049,China)

In order to assist Researchers understand the abstract data acquired from the sounding rocket task and know about the flight situation,we model rocket by SketchUP and control the rocket model by Google Earth API.System intuitively expressed rocket ballistic trajectory and attitude in flight.We use WebSocket to transmission data between telemetry station and web page,solved the low network utilization problems of traditional web application.The experimental results show that system development and deployment has a lower cost.System reappear flight situation of sounding has better accuracy and timeliness with a more realistic scenario.

sounding rocket;visualization;ballistic trajectory;attitude

TN91

A

1674-6236(2014)11-0141-04

2014-03-27 稿件编号:201403300

国家高技术研究发展计划资助(Y28021A220)

张慧明(1989—),男,浙江衢州人,硕士研究生。研究方向:计算机可视化与人工智能。

猜你喜欢

探空火箭字段插件
图书馆中文图书编目外包数据质量控制分析
自编插件完善App Inventor与乐高机器人通信
探空火箭在临近空间气象保障中的应用研究
基于jQUerY的自定义插件开发
不该被遗忘的老港——中国第一枚探空火箭升起的地方
中国探空火箭首获电离层顶原位探测数据
钱学森与探空火箭
基于Revit MEP的插件制作探讨
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述