胥寶新
摘? ?要:2016年,中國全面啟動ADS-B建設(shè)工程,預(yù)計在全國部署308個ADS-B地面站設(shè)備及多級的ADS-B數(shù)據(jù)處理中心。2017年,隨著地面站建設(shè)的逐漸展開,二級數(shù)據(jù)中心的建設(shè)也已正式招標完成。ADS-B技術(shù)將衛(wèi)星導(dǎo)航、通信技術(shù)、機載設(shè)備以及地面設(shè)備等先進技術(shù)結(jié)合,提供了更加安全、高效的空中交通監(jiān)視手段,能有效提高管制員和飛行員的運行態(tài)勢與感知能力,擴大監(jiān)視覆蓋范圍,提高空中交通安全水平、空域容量與運行效率。文章從ADS-B二級數(shù)據(jù)中心建設(shè)中的大批量、高頻率的目標跟蹤顯示方面,論述簡單的技術(shù)實現(xiàn)。
關(guān)鍵詞:廣播式自動相關(guān)監(jiān)視;二級數(shù)據(jù)中心;目標跟蹤
廣播式自動相關(guān)監(jiān)視(Automatic Dependent Surveillance-Broadcast,ADS-B)二級數(shù)據(jù)中心系統(tǒng)中的目標跟蹤顯示是基于Qt的圖形視圖框架(Graphics View Framework)實現(xiàn)的,提供了支持大量自定義的二維圖形對象交互管理器,提供基于圖像對象的方式實現(xiàn)model-view的編程模式。本文將不重點介紹圖形視圖框架的具體應(yīng)用和實現(xiàn),而對在該框架下實現(xiàn)高頻率、大批量目標刷新方面的解決方案進行簡要介紹。
1? ? ADS-B二級數(shù)據(jù)中心系統(tǒng)
ADS-B二級數(shù)據(jù)中心系統(tǒng)建設(shè)的指標是在每0.5 s周期內(nèi),同時更新5 000~8 000批目標,且時延不能大于0.5 s。因ADS-B二級數(shù)據(jù)中心系統(tǒng)的特殊性,前端顯示需同時支持3~5種數(shù)據(jù)格式的解析,相當于在0.5 s內(nèi),前端顯示需完成消息接收、格式判定、格式解析和目標繪制等工作。項目實際應(yīng)用效果如圖1所示。
2? ? 設(shè)計思路介紹
系統(tǒng)充分利用計算機多核并發(fā)計算的優(yōu)勢,采用多線程并發(fā)計算和多線程異步刷新技術(shù)進行整體的架構(gòu)設(shè)計,數(shù)據(jù)處理和圖形渲染在不同線程下進行處理,并利用部分GPU計算能力。
2.1? 多線程并發(fā)計算
采用多線程并發(fā)計算主要是為了解決高頻率、大批量的消息解析問題。在程序設(shè)計中,消息接收和信息分類解析部分采用該模式,多線程并發(fā)計算流程如圖2所示。
采用多線程同時從不同端口獲取目標信息,在信息接收和信息分揀線程池中,將各類型的ADS-B數(shù)據(jù)分類推送到目標信息解析線程池。數(shù)據(jù)接收池和解析池進行獨立設(shè)計,利用共享的緩沖區(qū)以避免網(wǎng)絡(luò)消息擁堵而導(dǎo)致信息丟失的情況。在消息接收線程池的實現(xiàn)中,采用環(huán)形緩沖區(qū)以減少系統(tǒng)分配堆內(nèi)存加鎖開銷和用戶態(tài)/核心態(tài)切換的開銷,進一步提升處理效率。
2.2? 多線程異步刷新
若系統(tǒng)采用同步刷新,即每收到一條目標信息,即通知場景去進行該目標更新(包括位置和其他下行的數(shù)據(jù)信息),當目標數(shù)量在5 000批時,即每0.5 s通知場景渲染5 000次,目前一般顯示渲染設(shè)備都無法滿足如此高頻率的刷新渲染。
為解決同步刷新的刷新渲染難題,本系統(tǒng)采用異步刷新技術(shù),即在目標解析線程中進行數(shù)據(jù)準備,不主動發(fā)送渲染請求。由視圖/場景進行統(tǒng)一的目標刷新需求管理,集中判定是否有重新渲染需求,減少單位時間內(nèi)重復(fù)渲染的次數(shù),大大降低渲染頻率,提升系統(tǒng)性能。
3? ? 異步刷新實現(xiàn)流程介紹
要實現(xiàn)目標的異步刷新,需進行存儲空間準備、目標信息解析(數(shù)據(jù)準備)、目標圖形對象創(chuàng)建、定時刷新渲染等幾大步驟。
3.1? 存儲空間準備
系統(tǒng)采用環(huán)形緩沖區(qū)(Ring Buffer)來進行航跡信息的存儲:(1)為了減少內(nèi)存動態(tài)分配的開銷和消費某一數(shù)據(jù)后其余數(shù)據(jù)搬移的開銷。(2)為了線程間數(shù)據(jù)傳遞和共享訪問的安全。環(huán)形緩沖區(qū)示意如圖3所示。
環(huán)形緩沖區(qū)實現(xiàn)通過哈希方式,在保證了數(shù)據(jù)訪問的快速性和安全性外,同時,兼顧了數(shù)據(jù)獲取的靈活性。
系統(tǒng)根據(jù)指標要求,預(yù)先申請足夠、非連續(xù)的內(nèi)存空間,并通過空閑和占用兩個地址管理隊列來進行內(nèi)存使用情況的管理。在數(shù)據(jù)準備階段,申請的內(nèi)存空間地址全部由空閑地址管理隊列來進行管理。隨著運行逐步將地址由空閑遷移到占用,同時,也會有占用的重新歸到空閑隊列。
3.2? 目標信息解析
在接收到ADS-B下傳的目標信息時,在線程中對目標數(shù)據(jù)項進行解析,提取目標的關(guān)鍵要素:監(jiān)視源唯一標識和航跡號,組成哈希表的key值,在占用隊列中去檢索該目標是否已經(jīng)存在。
若是新目標,則從空閑隊列中挑選一個內(nèi)存塊進行數(shù)據(jù)存儲,并將該內(nèi)存結(jié)構(gòu)從空閑隊列中轉(zhuǎn)移到占用隊列中進行管理。因主進程中只會根據(jù)已創(chuàng)建的圖像目標對象的變化來識別是否需要重新渲染。在新出現(xiàn)目標時,由處理線程發(fā)送異步的目標創(chuàng)建信號,通知到場景去新建一個航跡目標的圖形對象。目標創(chuàng)建的異步信號通知和槽響應(yīng)示意如圖4所示。
當目標在預(yù)定的時間未再接收到任何更新消息,則自動從占用隊列中移除,首指針鏈接到空閑隊列,并清除該目標指向的內(nèi)存地址。
3.3? 目標圖形對象創(chuàng)建
在接收到新建目標圖形對象請求時,根據(jù)請求中的具體數(shù)據(jù)信息,創(chuàng)建圖形目標對象,并根據(jù)目標顯示區(qū)域進行局部渲染,如圖5所示。
3.4? 定時刷新渲染
在場景框架中,根據(jù)當前的目標圖形對象(Graphics Object),定時檢查目標是否有關(guān)鍵數(shù)據(jù)項的變更,再決定是否重新渲染。若圖形對象對應(yīng)的內(nèi)存數(shù)據(jù)塊已被移到空閑隊列進行管理,則自動釋放對應(yīng)的目標圖形對象,并重新渲染對應(yīng)的區(qū)域。
在ADS-B二級數(shù)據(jù)中心系統(tǒng)中,采用該種處理模式,有效解決了在項目初期,在高頻率、大批量信息流情況下,人機界面中遇到的操作延遲、消息堵塞及刷新不及時等問題。
4? ? 結(jié)語
本文簡要介紹了ADS-B二級數(shù)據(jù)處理中心系統(tǒng)大批量目標顯示中應(yīng)用到的相關(guān)技術(shù),分析了多線程并發(fā)處理和異步刷新的實現(xiàn)流程。
[參考文獻]
[1]成潔,盧紫毅.Linux窗口程序設(shè)計:Qt4精彩實例分析[M].北京:清華大學出版社,2008.
[2]布蘭切特,薩默菲爾德.JASMIN B,MARK S.C++GUI Qt4編程[M].閆鋒欣,曾泉人,張志強,譯.北京:電子工業(yè)出版社,2013.