本站小編為你精心準備了探空火箭可視化設計參考范文,愿這些范文能點燃您思維的火花,激發您的寫作靈感。歡迎深入閱讀并收藏。
《電子設計工程雜志》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技術提高了網絡利用率和數據傳輸效率。實際的演示結果表明系統在重現火箭彈道和姿態有較好的準確性和可靠性。
作者:張慧明姜秀杰陳志敏單位:中國科學院空間科學與應用研究中心中國科學院大學