衛(wèi)小偉
(1.陜西交通職業(yè)技術學院 陜西 西安 710021;2.長安大學 電子與控制學院,陜西 西安 710064)
我國GPS車輛導航系統(tǒng)受國內汽車工業(yè)發(fā)展現(xiàn)狀、電子地圖配套限制等諸多綜合因素制約,仍處于初始發(fā)展階段。在功能上,大部分GPS車輛導航系統(tǒng)還只有車輛跟蹤、數(shù)字地圖查詢、路徑簡單規(guī)劃等基本功能。本文對嵌入式車載導航信息系統(tǒng)體系結構進行研究,給出一個完整系統(tǒng)結構,并重點討論導航電子地圖的實現(xiàn)方法。
車載導航信息系統(tǒng)借助于定位、地理信息處理和通信等技術,通過處理車輛狀態(tài)數(shù)據(jù),配合地理信息系統(tǒng)和導航數(shù)據(jù)庫處理信息,并與服務中心交流信息交流,可提供定位、電子地圖、路徑規(guī)劃和引導、信息查詢、歷史行駛狀態(tài)詳細記錄、通信等功能[1]。圖1為該導航信息系統(tǒng)功能各模塊關系。
圖1 導航信息系統(tǒng)功能模塊
圖1中,定位系統(tǒng)包括定位模塊和地圖匹配模塊,可得到系統(tǒng)的實時姿態(tài)數(shù)據(jù),如經度、緯度、高度、速度、運動方向等;數(shù)字地圖數(shù)據(jù)庫包含預先定義好存儲格式的數(shù)字地圖信息,提供計算機處理與地圖有關信息,如辨別場所、公路等級、交通規(guī)則和旅行信息等;路徑規(guī)劃和路徑引導模塊功能是根據(jù)地圖數(shù)據(jù)庫模塊所提供的地圖數(shù)據(jù),加上從無線通訊網(wǎng)絡收到的實時交通信息,按照某個指標(如最小時間或者最小旅行代價)幫助用戶在行駛前或運行中規(guī)劃路線;人機接口允許用戶與定位和導航計算機及裝置進行人機交互;無線通訊模塊進一步改進系統(tǒng)性能并增加系統(tǒng)功能。
傳統(tǒng)的導航信息系統(tǒng)主要有2種實現(xiàn)方法:基于單片機的簡易導航系統(tǒng)和基于移動PC的導航系統(tǒng)。前者結構簡單,價格便宜,但功能有限,僅僅實現(xiàn)定位、簡易位置指示以及簡單通訊功能;而后者以PC操作系統(tǒng)為軟件平臺,應用專業(yè)軟件包或自主開發(fā)軟件包,配以相應外圍模塊(如定位、通訊等)能夠實現(xiàn)導航所有復雜功能,但價格高,且難以適應車載環(huán)境。因此,采用嵌入式系統(tǒng)作為現(xiàn)代車載導航系統(tǒng)的運行平臺是必然選擇[2]。
選用PCM-5820作為嵌入式車載信息系統(tǒng)的硬件平臺,Windows CE作為嵌入式系統(tǒng)的操作系統(tǒng)平臺。PCM-5820完全滿足系統(tǒng)在存儲容量、處理速度、通信接口、功耗、體積等方面的要求。Windows CE具有方便定制、移植簡單、實時性強、可靠性高、體積小等優(yōu)點,且具有與PC操作系統(tǒng)一致界面風格和操作方式,實現(xiàn)豐富的API,便于開發(fā)。基于以上平臺,圖2給出嵌入式車載導航系統(tǒng)的軟件結構。
該系統(tǒng)的定位模塊和無線通訊模塊需借助相應裝置,導航信息系統(tǒng)直接收發(fā)這些裝置數(shù)據(jù),處理后為系統(tǒng)所用;路徑規(guī)劃和路線引導模塊功能的實現(xiàn)算法研究已相當深入,這里不再贅述。而對于導航電子地圖模塊[3],為便于功能實現(xiàn)和后期擴展,按其功能分為矢量圖形系統(tǒng)和導航數(shù)據(jù)庫系統(tǒng),前者是按特定要求顯示矢量圖形,后者是存儲和管理圖形元素的幾何數(shù)據(jù)(如坐標等)、屬性數(shù)據(jù)(如道路等級等)以及其他相關數(shù)據(jù)(如交通信息等)。
圖2 嵌入式車載導航系統(tǒng)的軟件結構
分析地圖發(fā)現(xiàn),地圖矢量化后矢量圖形的元素類型有:點(Point)、線(Line)、連續(xù)折線(Polyline)、區(qū)域(Region)、弧線(Arc)、文本(Text)、矩形(Rectangle)、圓角矩形(Rounded Rectangle)、橢圓(Ellipse)、圓(Circle)、符號(Symbol)等 11 個類型。導航電子地圖中,符號只用于顯示,而且類型有限,該系統(tǒng)采用柵格方式在矢量圖形上透明顯示。其余10種圖形元素并非獨立分類,比如,元素點可用其他若干個元素組合表達;矩形元素(在嵌入式C++中有直接函數(shù)支持)實質是一個特殊區(qū)域。
考慮以上每個對象類都有如線型、顏色等的公共數(shù)據(jù),可抽象一個基類。本文共建立了15對象類及結構:基類Class CDraw、 線類 Class Cline:public CDraw、 多線類 Class CPline :public CDraw、區(qū)域類 Class CArea:public CDraw、橢圓弧類Class CEarc:public CDraw、圓類偽代碼描述Class CCircle:public CDraw、矩形類 Class Crectangle:public CDraw、圓角矩形類 Class CroundedRectangle:public CDraw、 橢圓類 Class CEllipse:public CDraw、文本類 Class CText:public CDraw、符號類 Class CSymbol:public CDraw、繪制矢量圖形參數(shù)類 Class CgraphPara、圖層屬性結構typedef struct、當前畫面屬性結構typedef struct、導航目標屬性結構typedef struct。
車載導航電子地圖一般采用小液晶顯示屏顯示。為了實現(xiàn)導航,顯示的畫面內容應盡可能簡單明了,所以矢量圖形將數(shù)據(jù)分層組織,在圖形元素的基類中設有表示元素所處圖層的信息。除了將元素分類為不同的顯示圖層,簡化顯示內容,基類還可設置該元素是否顯示標志位,這樣可提高顯示速度,節(jié)省資源。例如,在同一圖層元素,如果有些元素不在當前顯示窗口,可以不進行與顯示有關的后臺操作(坐標變換等)。DPtoVP和VPtoDP方法是實際坐標(地理坐標)和圖形坐標相轉換。通過矢量化得到的圖形元素的位置數(shù)據(jù)一般是某種坐標系下的坐標值,而本系統(tǒng)用戶可見的顯示坐標范圍為從(0,0)至(640,480),所以需進行坐標變換。 每個圖形元素都需Draw(繪制)方法,但不同元素的繪制方法各不相同,為了方便Draw方法使用,在基類中將Draw定義為純虛函數(shù),在子類中重載時再具體賦以不同繪制內容。
嵌入式車載導航系統(tǒng)硬件平臺一般采用低功耗設計,運算能力有限。但導航電子地圖顯示畫面往往含有大量圖形元素,圖形顯示一次需花費大量時間。如果采用每次全部繪制所有電子地圖內容并直接輸出到畫面,則會導致畫面刷新慢和重繪閃爍明顯。因此需優(yōu)化矢量圖形的繪制方法。
2.2.1 提高圖形的顯示速度
一般繪圖方法是繪制所有圖形元素,而這樣嚴重影響繪圖速度。為了加快繪圖速度,在顯示一個圖形元素前,先判斷該圖形元素是否在當前視圖屏幕中,如果不在,則無需繪制,從而節(jié)省繪制時間[4]。而判斷一個圖形元素是否在當前視圖屏幕,需計算判斷圖形元素與當前視圖屏幕矩形是否相交,但此方法需大量計算,影響顯示速度。采用的判斷圖形元素是否需要繪制的方法應允許不太嚴密,但要計算簡單。在每次重繪圖形元素前,首先判斷元素是否顯示,并只繪制所需部分。這樣就大大加快繪圖速度,并能滿足導航電子地圖系統(tǒng)顯示要求。
2.2.2 解決畫面閃爍問題[5]
窗口圖形繪制包括:上次繪制、本次擦除、本次重繪。其中本次擦除操作是必須的。如果重繪時未清除原來繪制圖形,將導致新圖形和原圖形相疊加。而在新圖形繪制出前,在極短時間內屏幕顯示一個空的矩形區(qū)域,圖形重繪完成后,窗口顯示區(qū)才開始有內容顯示。所以擦除屏幕會出現(xiàn)閃爍,這與圖形復雜程度無關。采用雙緩存機制解決重繪閃爍。雙緩存就是在內存中新開辟一個緩沖區(qū),原來的顯示緩沖區(qū)作為前臺緩沖區(qū),新開辟的緩沖區(qū)作為后臺緩沖區(qū)。如圖3所示,繪圖時先把輸出內容寫入后臺緩沖區(qū),繪圖完成后再把屏幕的當前顯示緩沖區(qū)切換到這個包含新內容的緩沖區(qū)。一旦把屏幕顯示緩沖指向后臺緩沖區(qū),下一幀的輸出內容就可寫入原緩沖區(qū),再通過屏幕顯示。因為是非常規(guī)整的內存拷貝,所以前后臺的緩沖區(qū)切換速度非???,幾乎看不到圖形的擦除過程。因此使用雙緩沖區(qū)取代單緩沖區(qū)可成功隱藏繪圖過程,避免閃爍。
圖3 雙緩存技術解決重繪閃爍
所謂數(shù)據(jù)庫即格式化(結構化)的文件,用戶完全可自行設計所需格式文件,并提供操作函數(shù)。這里使用.dbf文件格式。因為該格式被眾多數(shù)據(jù)庫管理系統(tǒng)接受,處理方便。這樣實現(xiàn)的數(shù)據(jù)管理系統(tǒng)是一種平面文件數(shù)據(jù)庫。這種數(shù)據(jù)庫系統(tǒng)實現(xiàn)簡單經濟,開發(fā)周期短,但速度較慢。實踐表明,車載導航系統(tǒng)采用這種方法完全可以滿足要求[7]。
本文使用16進制閱讀工具hex32.exe分析dbf文件結構。經分析dbf文件具有以下特征:文件由文件結構說明區(qū)和文件數(shù)據(jù)區(qū)構成;文件的結束標志為1AH。文件數(shù)據(jù)區(qū)存放記錄 (類似表格的一行),每條記錄是等長的;每條記錄以20H開始,按字段順序存放,沒有字段分隔符,也沒有記錄終止符;若刪除該記錄,則記錄的第1個字節(jié)標記為2AH。文件結構說明區(qū)包括數(shù)據(jù)庫參數(shù)區(qū)和記錄結構區(qū)。文件的前32個字節(jié)為數(shù)據(jù)庫參數(shù)區(qū)。記錄結構區(qū)包括各個字段參數(shù),其中每個字段占32個字節(jié)。本系統(tǒng)基本表的組織形式與dbf文件組織形式相同。
數(shù)據(jù)庫管理系統(tǒng)實現(xiàn)的主要函數(shù)與普通關系數(shù)據(jù)庫接口類似,選擇使用必要的函數(shù)可以實現(xiàn)車載導航所需的基本操作。實現(xiàn)通用數(shù)據(jù)庫所支持的全部操作,系統(tǒng)具備較豐富的操作功能。用戶還可開發(fā)實現(xiàn)特定功能的其他操作,作為系統(tǒng)擴展。
針對嵌入式車載導航信息系統(tǒng)體系結構進行研究,并重點討論導航電子地圖的實現(xiàn)。利用GIS組件實現(xiàn)導航電子地圖和導航數(shù)據(jù)庫的傳統(tǒng)方發(fā)法,以EVC(嵌入式VC)為開發(fā)工具,設計了電子地圖矢量圖形系統(tǒng),并自主設計能滿足車載導航需要的基于文件系統(tǒng)的導航數(shù)據(jù)庫管理系統(tǒng)。實踐表明,本文建立的導航電子地圖系統(tǒng)具有較強的靈活性和可擴展性,能方便移植于不同的軟硬件平臺,運行可靠,適合嵌入式系統(tǒng)應用,有一定的應用和推廣價值。
[1]張 可.車載導航系統(tǒng)關鍵技術研究[D].北京:北京工業(yè)大學,2001.
[2]楊殿閣.三大平臺構建車載導航系統(tǒng)[J].中國電子報,2004,16(3):32-36.
[3]胡明偉.無線定位技術應用于實時交通信息采集研究[J].深圳大學學報:理工版,2007,24(3):246-251.
[4]陳建春.Visual C++開發(fā)GIS系統(tǒng):開發(fā)實例剖析[M].北京:電子工業(yè)出版社,2000.
[5]張仁忠.利用MFC實現(xiàn)雙緩存機制改善圖形的顯示效果[J].應用科技,2005,1(2):65-70.
[6]馬 潮,詹衛(wèi)前,耿德根.ATmega8原理及應用手冊[M].北京:清華大學出版社,2003.
[7]HiMARK Technology.RX3650 low power GPS receiver IC[M].Taiwan:HiMARK Technology Inc,2003.