陳繼峰 陳莉君
(1.北京信達探索者科技有限公司 北京 100043)(2.西安郵電大學 西安 710121)
雷達在以前作為軍用設備小范圍使用,隨著科技的發(fā)展和市場的開拓,當前被應用于很多場合,特別是民用行業(yè),比如船用雷達、氣象雷達。雷達終端軟件系統(tǒng)[1]作為雷達系統(tǒng)中一個重要的系統(tǒng),其作用是將雷達探測的數(shù)據(jù)友好地呈現(xiàn)給用戶,并且?guī)椭脩艨戽I方便的操控雷達。隨著技術和應用的發(fā)展,雷達終端不再是傳統(tǒng)的平面位置顯示器(PPI[2],Plan Position Indicator),雷達靠熒光物質(zhì)的余輝效應將原始回波信號顯示在屏幕上。目前的雷達終端不僅僅顯示雷達的原始回波信號,經(jīng)過DSP處理的一次點跡和目標航跡信息[3],某些場景還融合了電子地圖,AIS(Automatic Identification System)數(shù)據(jù)等其他類型的數(shù)據(jù)。
當前國內(nèi)外很多雷達終端基于X86平臺實現(xiàn),因為其有強大的處理能力,Windows平臺提供了完善的圖形開發(fā)工具(MFC和DirectDraw[4]),所以終端軟件提供的功能完善,圖形界面美觀,操作方便。以日本船用雷達為代表的小型雷達采用了便攜式的終端設備,但是其圖形界面比較落后,類似于字符界面,功能單一,圖形顯示簡陋,操作不便。目前基于ARM平臺的雷達終端正在迅速發(fā)展,使得雷達終端更加便攜,但是在ARM平臺上開發(fā)雷達終端軟件卻比較困難,主要原因在于ARM平臺相比X86平臺圖形庫支持有限,開發(fā)難度大。基于此本文著重研究了在ARM平臺上開發(fā)雷達終端圖像顯示的方法,使用此方法可以快速地開發(fā)雷達終端軟件。
目前雷達終端要顯示的數(shù)據(jù)一般包括原始回波數(shù)據(jù),一次點跡數(shù)據(jù)[2],目標航跡數(shù)據(jù)[2]。其中原始回波數(shù)據(jù)是雷達收到的物體電磁波信號的強度,每一次回波數(shù)據(jù)由一個方位信息和上千個距離維的采樣點數(shù)據(jù)構(gòu)成,將這些數(shù)據(jù)通過顏色(灰階)在屏幕上進行展示,便可以清晰地看出雷達探測的物體圖像。一次點跡數(shù)據(jù)由方位數(shù)據(jù)和距離數(shù)據(jù)組成,現(xiàn)代雷達可以探測到上萬個目標點跡,通過在屏幕上繪制點進行展示。目標航跡數(shù)據(jù)是雷達DSP處理模塊經(jīng)過運算得到的數(shù)據(jù),描述了目標的大小,方位,距離,速度,航向,歷史軌跡等信息,需要繪制目標的歷史軌跡和當前位置。除此之外,終端軟件需要顯示地圖數(shù)據(jù),雷達位置變化時,地圖數(shù)據(jù)需要實時刷新。AIS數(shù)據(jù)作為船用雷達領域,將AIS接收的船舶信息融合到雷達終端進行顯示。總之雷達終端的特點是顯示的數(shù)據(jù)量大,各種圖像數(shù)據(jù)差異化大,各種圖形數(shù)據(jù)需要疊加顯示。
目前在Windows平臺上的解決方案是采用DirectDraw圖形接口,DirectDraw提供了頁面的接口[5],可以將圖形數(shù)據(jù)繪制到頁面,再將頁面進行顯示,對于雷達的多種數(shù)據(jù)類型可以實現(xiàn)多個頁面,每個頁面繪制不同的數(shù)據(jù),實現(xiàn)起來難度不大,目前大多存在的不足是將數(shù)據(jù)處理、繪制方法在頁面中進行了實現(xiàn),當需要增加一種類型的數(shù)據(jù)時,需要增加一種頁面,并且實現(xiàn)這個頁面的數(shù)據(jù)處理和繪制方法,沒有將頁面顯示和數(shù)據(jù)處理,繪制實現(xiàn)分離,耦合度高。
而在ARM平臺下,使用的是嵌入式Linux系統(tǒng),相對于Windows系統(tǒng)開發(fā)難度更高。在嵌入式平臺目前有幾種實現(xiàn)方案,一種是處理簡單的圖形顯示需求的終端軟件,使用GTK、MiniGUI等圖形庫開發(fā),這種圖形庫僅支持了傳統(tǒng)的二維圖形繪制接口,開發(fā)者需要將所有的雷達圖形數(shù)據(jù),繪制在窗口上,目前這種方案僅能處理視頻和目標點圖像,其他圖像數(shù)據(jù)很難再疊加顯示。另外一種是基于Qt平臺[6]開發(fā)的,可以實現(xiàn)較為復雜的圖形顯示需求,目前應用較多。
Qt是類MFC的面向?qū)ο蟮腃++開發(fā)包,是一種跨平臺的開發(fā)工具。Qt的Graphics View框架使用 MVC模式[7],適合對大量2D圖元的管理。Graphics View[8]框架中包括3個主要的類:QGraphicsScene、QGraphicsView 和 QGraphcsItem,分別是場景、視圖和圖元。場景是QGraphicsItem對象的容器。QGraphics View是視圖窗口部件,它使場景的內(nèi)容可視化,QGraphicsItem是圖元基類,描述各種圖形元素。但目前的實現(xiàn)方案是通過QGraphicsItem去創(chuàng)建各種雷達圖形,包括目標點,歷史軌跡,視頻區(qū)域等,這樣一來QGraphicsScene管理的圖元數(shù)量巨大,導致資源占用大,效率不高,需要依賴OpenGL[9]等硬件加速來提升效率,并且巨量的圖元融合在一起,給后期擴展帶來了極大的不便。

圖1 雷達場景
基于QT的多圖層顯示方案解決了傳統(tǒng)方法的不足,此方案基于Graphics View框架,但并沒有用圖元代表雷達場景中的圖形單元,而是用其表示了圖層[10],圖層作為一種抽象的圖形單元,不代表具體的雷達圖形,圖層是雷達圖形單元的一種載體,需要顯示的數(shù)據(jù)通過圖層提供的接口傳到這個載體上即可。
雷達場景中包括多個圖層,如圖2,每個圖層顯示同一類型的數(shù)據(jù),雷達場景僅需要將這些圖層顯示即可,而不用關心圖層上具體的圖形數(shù)據(jù)是什么樣的。
在多圖層顯示設計中將圖形繪制和圖層顯示進行剝離,圖層沒有涉及到具體圖形數(shù)據(jù)的繪制,多個圖層,也僅僅是生成多個實例而已,在后期增加圖形類型時,也只需要增加一個實例,每種類型的圖形繪制單獨實現(xiàn)。
雷達圖層圖元:基于QGraphcsItem實現(xiàn)雷達圖層,雷達圖層抽象出來僅僅是為了給雷達數(shù)據(jù)提供一種顯示接口,通過QImage作為圖形數(shù)據(jù)的載體傳入[11],QImage中的圖形對圖層透明,QImage中的圖形數(shù)據(jù)圖層并不關心,圖層只需要去刷新其中的圖形數(shù)據(jù)即可。

圖2 多圖層顯示示意圖
class RadarSurfaceGraphicsItem:public QGraphicsItem
{Q_OBJECT
public:
explicit RadarSurfaceGraphicsItem(QImage*image);
void SetSurfaceDisplay(bool enable);
void RefreshDisplay();
private:
QImage*imageSurface;
bool m_flagDisplay;
};
圖形繪制:圖形繪制作為具體的雷達數(shù)據(jù)的繪制接口[12],這種接口對外提供了需要顯示的圖形數(shù)據(jù),通過GetDrawSurfaceImage()接口對外提供圖形數(shù)據(jù)(QImage),只需將此QImage設置到相應的圖層接口即可完成展示。結(jié)合雷達場景需要實現(xiàn)如下幾種圖形的繪制方法:回波繪制、一次點跡繪制、目標繪制、航跡繪制等,實現(xiàn)類圖如圖3,具體的繪制方法不再這里贅述,根據(jù)應用需求具體實現(xiàn)。

圖3 圖形實現(xiàn)
在雷達終端需要增加一種圖形數(shù)據(jù)時,僅需要繼承CDrawSurfaceBase類,實現(xiàn)這種圖形的繪制方法。例如增加雷達回波圖形,如下,增加一個新的類CDrawVideoSurcase。
CDrawVideoSurcase *pDrawVideoSurface = new CDrawVideoSurface();
QImage*pImage=pDrawVideoSurface->GetDrawSurfaceImage();
RadarSurfaceGraphicsItem radarSurfaceVideo=Radar-SurfaceGraphicsItem(pImage);
//加入到場景
scene->addItem(radarSurfaceVideo);
本文分析了雷達圖形顯示的難點,在Qt圖形框架下,設計和實現(xiàn)了一個新的圖形顯示方法,解決了在ARM平臺下開發(fā)雷達終端軟件困難的情況。新的方法使得圖形顯示和數(shù)據(jù)處理繪制實現(xiàn)了解耦,實驗表明,使用了多圖層的設計方法使得圖形管理更加方便,擴展性強,實現(xiàn)簡單,為雷達終端軟件提供了圖形顯示基礎。