李庭貴
(1.瀘州職業(yè)技術(shù)學(xué)院,四川 瀘州 646005;2.四川省瀘州市工程機(jī)械智能優(yōu)化設(shè)計(jì)重點(diǎn)實(shí)驗(yàn)室,四川 瀘州 646005)
車 載 導(dǎo) 航 系 統(tǒng)[1-3](Vehicle and Navigation System,簡(jiǎn)稱VNS)通過(guò)將定位技術(shù)、地理信息系統(tǒng)、通訊技術(shù)以及嵌入式計(jì)算機(jī)技術(shù)結(jié)合在一起,為汽車用戶提供導(dǎo)航、地理信息及其他服務(wù)。所謂車載導(dǎo)航[4],就 是 在 應(yīng) 用GIS(Geographic Information System,地理信息系統(tǒng))技術(shù)構(gòu)造的路網(wǎng)數(shù)字化地圖的基礎(chǔ)上,運(yùn)用GPS[5](Global Position System,全球定位系統(tǒng))、DR(Dead Reckoning,推算定位)等定位技術(shù)進(jìn)行車輛定位,確定最優(yōu)行駛路線,為出行者提供動(dòng)態(tài)的或?qū)崟r(shí)的最優(yōu)出行路線信息,并在出行過(guò)程中對(duì)駕駛員適時(shí)地做出路線指引。本文主要討論嵌入式車載導(dǎo)航系統(tǒng)應(yīng)用軟件的設(shè)計(jì)和具體實(shí)現(xiàn)[6-8]。
相對(duì)于Windows環(huán)境下的應(yīng)用程序開發(fā),嵌入式系統(tǒng)軟件開發(fā)有著很多的不同。在嵌入式開發(fā)過(guò)程中有宿主機(jī)和目標(biāo)機(jī)的角色之分:宿主機(jī)是執(zhí)行編譯、鏈接、定址過(guò)程的計(jì)算機(jī);目標(biāo)機(jī)是指運(yùn)行嵌入式軟件的硬件平臺(tái)。把應(yīng)用程序轉(zhuǎn)換成可以在目標(biāo)機(jī)SB-810C上運(yùn)行的二進(jìn)制代碼這一過(guò)程包含4個(gè)步驟:編譯、鏈接與定址、移植、調(diào)試,如圖1所示。
編譯過(guò)程由Embedded Visual C++交叉編譯器實(shí)現(xiàn),在PC機(jī)上用Embedded Visual C++4.0編輯好應(yīng)用程序后,進(jìn)行交叉編譯,在編譯中進(jìn)行如下設(shè)置:
設(shè)備類型:STANDARDSDK(利用Platform Builder創(chuàng)建的SDK,它為平臺(tái)上其他應(yīng)用程序的開發(fā)提供支持)。
CPU類型:Win32(WCE X86)Debug。
運(yùn)行環(huán)境:STANDARDSDK Emulator。
圖1 嵌入式導(dǎo)航應(yīng)用軟件的開發(fā)流程
編譯過(guò)程產(chǎn)生的所有目標(biāo)文件被鏈接成一個(gè)目標(biāo)文件,稱為鏈接過(guò)程。定址過(guò)程會(huì)將物理存儲(chǔ)器地址指定給目標(biāo)文件的每個(gè)相對(duì)偏移處,該過(guò)程生成的文件就是可以在嵌入式平臺(tái)SB-810C上執(zhí)行的二進(jìn)制文件。
由于在Windows CE系統(tǒng)下運(yùn)行的程序不僅與設(shè)備類型有關(guān),還與具體的CPU類型有關(guān),不同的CPU類型,需要不同的編譯代碼,因此在編碼和調(diào)試過(guò)程中,應(yīng)注意選擇對(duì)應(yīng)的設(shè)備類型、CPU類型和運(yùn)行環(huán)境。經(jīng)過(guò)交叉編譯后,將生成的可執(zhí)行文件、執(zhí)行程序所依賴的庫(kù)函數(shù)SeRSFC50.lib以及地圖數(shù)據(jù)通過(guò)串行口或者以太網(wǎng)口下載到目標(biāo)板SB-810C上,即可調(diào)試運(yùn)行。
嵌入式開發(fā)過(guò)程中另一個(gè)重要步驟是調(diào)試目標(biāo)機(jī)上的應(yīng)用程序。嵌入式調(diào)試采用交叉調(diào)試器,一般采用宿主機(jī)-目標(biāo)機(jī)的調(diào)試方式,它們之間由串行口線或以太網(wǎng)或JTAG口或BDM(Background Debug Mode,背景調(diào)試模式)線相連。交叉調(diào)試有任務(wù)級(jí)、源碼級(jí)和匯編級(jí)的調(diào)試。
調(diào)試時(shí)需將宿主機(jī)PC上的應(yīng)用程序和操作系統(tǒng)內(nèi)核NK.bin下載到目標(biāo)機(jī)SB-810C的RAM中或DOC中。目標(biāo)監(jiān)控器是調(diào)試器對(duì)目標(biāo)機(jī)上運(yùn)行的應(yīng)用程序進(jìn)行控制的代理(Debugger Agent),它事先被固化在目標(biāo)機(jī)的Flash、ROM中,當(dāng)目標(biāo)機(jī)上電后自動(dòng)啟動(dòng),并等待宿主機(jī)方調(diào)試器發(fā)來(lái)的命令,配合調(diào)試器完成應(yīng)用程序的下載、運(yùn)行和基本的調(diào)試功能,將調(diào)試信息返回給宿主機(jī)。
根據(jù)系統(tǒng)需求分析,運(yùn)用“軟件工程”的思想,將車載導(dǎo)航應(yīng)用軟件劃分為幾個(gè)基本功能模塊,如圖2所示。
圖2 車載導(dǎo)航系統(tǒng)軟件功能模塊結(jié)構(gòu)圖
在課題中,利用Embedded Visual C++和eSuperMap軟件開發(fā)工具完成了電子地圖的操作(包括地圖放大、縮小、漫游、圖層控制等基本功能)以及路徑優(yōu)化、數(shù)據(jù)查詢、車輛定位顯示等多種功能。開發(fā)工程具體步驟如下:
(1)啟動(dòng)Embedded Visual C++,創(chuàng)建一個(gè)新工程MyeSuperMap。
(2)配置開發(fā)環(huán)境:① 設(shè)置頭文件搜索路徑;②設(shè)置庫(kù)文件搜索路徑;③ 設(shè)置連接MFC庫(kù)方式;④在StdAfx.h中包含eSuperMap 5.0類庫(kù)頭文件。
(3)添加工作空間、地圖窗口實(shí)例:① 在“CMyeSuperMapApp.h”中 定 義 變 量; ② 在“CMyeSuperMapView”中定義成員變量。
(4)設(shè)置菜單項(xiàng)并生成消息響應(yīng)函數(shù)。
(5)實(shí)現(xiàn)消息映射函數(shù)。
(6)交叉編譯、鏈接、調(diào)試程序,生成可執(zhí)行程序。
(7)下載程序所依賴的庫(kù)和數(shù)據(jù)到目標(biāo)設(shè)備中,運(yùn)行程序。
圖形顯示功能模塊不但提供了地圖放大、縮小、漫游以及查看全圖、鳥瞰圖等圖形顯示的基本功能,而且還可以任意角度地旋轉(zhuǎn)地圖,以不同角度查看地圖,同時(shí)可以查看前視圖和后視圖。打開并操作地圖的過(guò)程如圖3所示。
圖3 打開并操作電子地圖的過(guò)程
空間分析是管理和應(yīng)用數(shù)據(jù)的一個(gè)重要組成部分,通過(guò)距離和面積量算,可方便了解點(diǎn)間的距離、路程的長(zhǎng)短和區(qū)域的面積大小??臻g分析模塊還實(shí)現(xiàn)了最短路徑分析,只需在地圖上點(diǎn)擊選擇起點(diǎn)和終點(diǎn),系統(tǒng)會(huì)自動(dòng)突出顯示這兩點(diǎn)間的最短路徑。專題圖是分析同類對(duì)象最有效的途徑,系統(tǒng)通過(guò)多種專題圖制作,以可視化、直觀的方式表現(xiàn)分析結(jié)果。
3.2.1 計(jì)算長(zhǎng)度和面積
eSuperMap內(nèi)部的長(zhǎng)度和面積也是以內(nèi)部單位來(lái)存儲(chǔ)的,與實(shí)際相比存在一個(gè)轉(zhuǎn)換關(guān)系。
在非經(jīng)緯度坐標(biāo)系中,坐標(biāo)單位是以0.1mm來(lái)存儲(chǔ)的,計(jì)算的結(jié)果當(dāng)然也是以0.1mm(長(zhǎng)度,如圓的周長(zhǎng))或者0.1mm*0.1mm(面積,如圓的面積)來(lái)存儲(chǔ),故實(shí)際的長(zhǎng)度應(yīng)該是L實(shí)=L圖/(nUnits*dRadio),對(duì)于面積相應(yīng)地也變?yōu)椋篠實(shí)=S圖/(nUnits*dRadio)2。
對(duì)于經(jīng)緯度坐標(biāo)系而言,坐標(biāo)單位是以1/1 000s來(lái)存儲(chǔ)的,但是計(jì)算的長(zhǎng)度和面積單位不是秒或秒*秒,在CSePJSysInfo中有一個(gè)變量nDistUnits表示坐標(biāo)系統(tǒng)采用的距離單位。故實(shí)際的長(zhǎng)度應(yīng)該是L實(shí)=L圖/(nDistUnits*dRadio),對(duì)于面積相應(yīng)地也變?yōu)椋篠實(shí)=S圖/(nDistUnits*dRadio)2。
3.2.2 路徑分析
在車載導(dǎo)航系統(tǒng)中,推薦最優(yōu)路徑是不可缺少的關(guān)鍵功能,這里給出了幾種最優(yōu)路徑推薦方案(如出行距離最短路徑、出行時(shí)間最短路徑、出行費(fèi)用最省路徑、綜合費(fèi)用最低路徑以及基于實(shí)時(shí)交通狀況的動(dòng)態(tài)時(shí)間最短路徑)和它們的實(shí)現(xiàn)結(jié)果。
路徑分析是對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析,包括進(jìn)行最短路徑分析,以及擴(kuò)展的網(wǎng)絡(luò)分析如最短時(shí)間分析等。eSuperMap路徑分析功能主要采用CSePathAnalyse對(duì)象,調(diào)用CSePathAnalyse的Analyse方法,根據(jù)起始節(jié)點(diǎn)數(shù)組(arrNodeIDs),生成一個(gè)弧段數(shù)組(nArcIDs),并把這個(gè)弧段數(shù)組顯示出來(lái)。
系統(tǒng)把圖形數(shù)據(jù)及其屬性數(shù)據(jù)、地圖數(shù)據(jù)整合到一個(gè)PMF文件中,邏輯結(jié)構(gòu)清晰,不依賴于任何數(shù)據(jù)庫(kù)技術(shù),可移植性強(qiáng),實(shí)現(xiàn)了空間數(shù)據(jù)與屬性數(shù)據(jù)的一體化管理,具有強(qiáng)大的圖文互查能力。系統(tǒng)查詢包括注記查詢、點(diǎn)或?qū)ο缶彌_查詢等,并且把查詢的結(jié)果突出顯示在地圖上。
查詢是系統(tǒng)的重要功能,查詢的方式分為點(diǎn)擊圖查詢屬性和根據(jù)一定的屬性查詢。(矢量)數(shù)據(jù)集、記錄集和選擇集之間的關(guān)系非常密切。空間查詢的結(jié)果也通常會(huì)以高亮的方式以選中的狀態(tài)突出地顯示出來(lái),以便進(jìn)行下一步的操作。
系統(tǒng)可以載入PMF(Portable Map File)文件和遙感圖像,接收GPS定位信息,并可輸入定位點(diǎn)的相關(guān)信息,編輯對(duì)象屬性等。系統(tǒng)輸出主要是將采集的數(shù)據(jù)轉(zhuǎn)換為新的地圖對(duì)象或新的圖層保存,同時(shí)通過(guò)eSuperMap的桌面工具及其他地理信息系統(tǒng)軟件轉(zhuǎn)換為可以為多種桌面地理信息系統(tǒng)軟件所利用的文件格式,實(shí)現(xiàn)數(shù)據(jù)的重復(fù)利用。
GPS定位導(dǎo)航的基本思路如下:①指定起點(diǎn)和終點(diǎn),使用CSePathAnalyst∷Analyse()方法進(jìn)行路徑分析,假設(shè)得到路徑A;②如果是模擬導(dǎo)航,則需要通過(guò)CSeGeoLine∷ResampleEquidistantly()方法將路徑A等距重采樣,并將結(jié)果坐標(biāo)點(diǎn)串保存在一個(gè)數(shù)組B中;如果是實(shí)際導(dǎo)航,需要打開GPS設(shè)備端口;③實(shí)現(xiàn)導(dǎo)航的方法主要由CSePathNavigator提供,使用之前需要通過(guò)Init()方法初始化;④調(diào)用CSePathNavigator∷MakePath()方法在路徑A上生成控制點(diǎn);⑤以上是準(zhǔn)備工作,準(zhǔn)備完畢后,則調(diào)用SetTimer(),讓Timer定時(shí)去讀取需要定位的點(diǎn)坐標(biāo),在此步驟中,對(duì)于模擬導(dǎo)航和實(shí)際導(dǎo)航會(huì)有所區(qū)別,如果是模擬導(dǎo)航,則依次從數(shù)組B中讀取點(diǎn)的坐標(biāo);如果是實(shí)際導(dǎo)航,則從GPS設(shè)備端口讀取當(dāng)前位置的坐標(biāo);⑥導(dǎo)航,首先需要判斷Timer讀取點(diǎn)的有效性,可通過(guò)CSePathNavigator∷IsValid()判斷,如果有效,則調(diào)用CSePathNavigator∷Navigate()方法進(jìn)行糾偏,并獲取其返回值,不同的返回值給出不同的語(yǔ)音或者文字提示。
運(yùn)用Embedded Visual C++和eSuperMap軟件平臺(tái)開發(fā)應(yīng)用程序,實(shí)現(xiàn)了車載導(dǎo)航系統(tǒng)電子地圖的基本操作、路徑優(yōu)化和路徑引導(dǎo)等功能,并將應(yīng)用程序調(diào)試、移植、下載到硬件平臺(tái)SB-810C上,完成了車載導(dǎo)航系統(tǒng)軟件平臺(tái)的設(shè)計(jì)和具體實(shí)現(xiàn)。對(duì)ITS交通誘導(dǎo)系統(tǒng)、出行者信息服務(wù)系統(tǒng)等與車輛運(yùn)輸和管理相關(guān)的領(lǐng)域具有一定的參考價(jià)值。
[1]高超.車載導(dǎo)航系統(tǒng)的研究及其軟件設(shè)計(jì)[D].哈爾濱:哈爾濱工程大學(xué),2004:10-38.
[2]陳明杰.車載定位導(dǎo)航系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工程大學(xué),2002:10-14,36-44.
[3]張可.車輛導(dǎo)航系統(tǒng)關(guān)鍵技術(shù)研究[D].北京:北京工業(yè)大學(xué),2001:6-7,29-43,115-148.
[4]張其善,吳今培,楊東凱.智能車輛定位導(dǎo)航系統(tǒng)及應(yīng)用[M].北京:科學(xué)出版社,2002.
[5]鄧銘輝.基于GPS的車輛自主導(dǎo)航系統(tǒng)的研究[D].哈爾濱:哈爾濱工程大學(xué),2002:1-8.
[6]潘愛(ài)民,王國(guó)印.Visual C++技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2002.
[7]侯俊杰.深入淺出MFC[M].第2版.武漢:華中科技大學(xué)出版社,2002.
[8]劉刀桂,孟繁晶.Visual C++實(shí)踐與提高——數(shù)據(jù)庫(kù)篇[M].北京:中國(guó)鐵道出版社,2001.