美章网 资料文库 探空火箭可视化设计范文

探空火箭可视化设计范文

本站小编为你精心准备了探空火箭可视化设计参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

探空火箭可视化设计

《电子设计工程杂志》2014年第十一期

1系统总体设计

为了和已有的遥测系统兼容,可视化系统采用B/S架构,主要分为web前端和websocket服务器,websocket服务器接收预处理服务器传来的火箭下行数据,对数据进行解码和重采样后存入发送缓存。Web页面和模型文件等资源都存储在http资源服务器中,用户向资源服务器请求页面,页面加载完成后向websocket服务器注册并请求火箭数据,这样设计的优点是将数据的显示和数据的处理分离,服务器负责所有CPU密集型的计算任务,客户端负责数据表现方式。websocket服务器是系统的核心。它不但保持与后端数据源的通信,接收并处理原始数据,而且向所有注册的前端用户广播处理后的数据。在文中预处理服务器和各个遥测站属于现有系统,其余部分是扩展的系统。各级系统的网络关系图如图1所示。WebSocket协议是实时的关键。WebSocket设计出来的目的就是要取代轮询和Comet技术,使客户端浏览器具备像C/S架构下桌面系统的实时通讯能力。所以WebSocket有“WebTCP”之称。传统的轮询或是Comet技术本质上是不断查询客户端数据是否更新。WebSocket连接本质上就是一个TCP连接,所以在数据传输的稳定性和数据传输量的大小方面,和轮询以及Comet技术比较,具有很大的性能优势。网站对传统的轮询方式和WebSocket调用方式作了一个详细的测试和比较,将一个简单的Web应用分别用轮询方式和WebSocket方式来实现,测试结果图如图2所示。不难发现对于相同的应用只有websocket占用较小的网络带宽,这在向许多客户端发送数据时可以节省大量的网络资源从而降低数据传输的延迟。

2前端系统设计

2.1前端系统初始化前端系统初始化的步骤分为:1)用户向资源服务器请求前端页面,2)页面加载完毕后初始化GoogleEarth(GE)插件,3)初始化网络控制器和场景渲染控制器。系统初始化序列图如图3所示。前端初始化完成后进入就绪状态,准备接收数据。页面执行google.load("earth","1")会加载google命名空间,利用该命名空间中的earth对象的createInstance()方法即可在指定DIV标签处创建googleearth插件实例。插件创建完毕后首先加载模型文件,加载完毕后利用GE.getFeatures().appendChild()方法将模型加入到场景图中。随后初始化网络控制器(NetManage)和渲染控制器(Player)。NetManage管理接收缓存,Player读取接收缓存内的数据并驱动googleearth场景。这两部分的初始化和运行逻辑在2.2和2.3节单独说明。

2.2前端数据接收在NetManage的初始化过程中要先和服务器进行信息配置。流程图如图4所示。前端和服务器建立websocket连接后首先向服务器发送(CONFIGURABLE)请求配置标志,服务器在接到该请求后回送数据采样频率,数据格式等配置信息。如果客户端能理解这些信息那么根据这些信息对Player和缓冲区进行设置并向服务器发送准备接收(ACCEPTABLE)标志,表示已经准备就绪可以开始发送数据。服务器会在收到ACCEPTABLE标记后将其加入广播组中并开始发送数据。前端配置和接收流程如图4所示。NetManage封装了WebsocketAPI。WebsocketAPI的接口十分简单,用''''ws://''''+ip+'''':''''+port+''''/''''字符串作为构造函数的参数,然后只需要覆盖WebSocket对象的onopen、onmessage、onerror、onclose4个函数即可。服务器返回的配置信息的格式为:采样频率,数据包总字段数,字段1名称,字段2名称,……,字段N名称。客户端在接收到配置信息后就知道以后传来的数据包内的字段的相对位置,这样就可以很轻松的提取数据包中的各个字段数据了。网络控制器在配置完成后即进入监听状态,当有新数据到达时先提取数据再加入接收缓存队列的末尾,队列的每一项数据是这样一个5元组:[时间码,[火箭经纬度],[火箭姿态],事件标志位,附加信息]。

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

3服务器端系统设计

Websocket服务器采用EclipseRCP框架实现,利用OSGI的插件机制可以方便地对服务器功能进行扩充。用JavaWebSocket开源库实现websocket服务器功能,底层http议到websocket协议的转换工作已经由WebSocketServer类完成。只要覆盖WebSocketServer类的onOpen(),onMessage(),onError(),onClose()函数来实现所需功能即可。服务器运行需要2个缓冲区和3个线程:发送缓冲区和接收缓冲区;发送线程、接收线程和处理线程。接收线程在接收到火箭下传数据后存入接收缓冲区。后台处理线程专门从接收缓存取数据、解码、封装成前端接收格式然后存入发送缓存中。发送线程从发送缓冲区中取数据向前端发送,发送流程图如图6所示,当没有客户端时发送线程会阻塞直到新客户加入才会被唤醒,当发送缓存没有数据可用时也会阻塞直到有新的可用数据才会被唤醒。缓冲区采用同步队列BlockingQueue实现。作为接收端,服务器接收来自遥测站的数据格式符合CCSDS标准。作为发送端,发送的数据格式是要符合配置阶段双方约定好的字段顺序,各个字段用逗号分隔,方便前端对字段的提取。火箭下传数据的采样频率是根据设备需求制定的,往往不适合可视化。例如姿态仪的原始采样频率是200Hz,但是前端没有能力也没有必要每秒渲染200帧,考虑到人眼对每秒24帧的渲染速度就无明显卡顿现象,所以可以在服务端对原始数据进行重采样,挑选适量且具有代表性的数据进行发送,这样既减少了网络负载也减少了前端内存消耗。对于弹道和姿态这样的数据来说一般不会有较大的突变,重采样算法重视转折点和拐点,滤除多余的数据。一般下采样到40Hz频率即可满足可视化需求。这样既减少了数据传输量也保证了显示质量。

4结论

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

作者:张慧明姜秀杰陈志敏单位:中国科学院空间科学与应用研究中心中国科学院大学