近年來(lái)隨著社會(huì)經(jīng)濟(jì)的飛速發(fā)展,公路交通的復(fù)雜性和擁擠度與日俱增,現(xiàn)有的交通運(yùn)輸管理與服務(wù)手段已不能適應(yīng)交通運(yùn)輸?shù)男枨螅@已成為長(zhǎng)期以來(lái)困擾發(fā)展中國(guó)家和發(fā)達(dá)國(guó)家的問(wèn)題。因此,車載導(dǎo)航應(yīng)運(yùn)而生,在一些發(fā)達(dá)國(guó)家,車載導(dǎo)航已成為大眾生活的輔助品。但是在中國(guó)由于技術(shù)、資金以及成本等原因,我國(guó)的車載導(dǎo)航市場(chǎng)還是處于發(fā)展初期。車載導(dǎo)航系統(tǒng)是集中應(yīng)用了自動(dòng)定位技術(shù)、地理信息系統(tǒng)與數(shù)據(jù)庫(kù)技術(shù)、計(jì)算機(jī)技術(shù)、無(wú)線通信技術(shù)的高科技綜合系統(tǒng)。目前國(guó)內(nèi)市場(chǎng)上的車載終端技術(shù)不夠完備,市場(chǎng)化程度低,真正達(dá)到消費(fèi)者要求的并不多見。隨著對(duì)導(dǎo)航系統(tǒng)信息服務(wù)能力要求的進(jìn)一步提高、終端硬件成本的不斷下降以及操作系統(tǒng)的不斷升級(jí),選擇一款易于開發(fā)、維護(hù)和升級(jí),并且兼容性強(qiáng)的操作系統(tǒng)來(lái)支撐終端硬件系統(tǒng)的運(yùn)行就顯得異常重要。
由嵌入式Linux和Java虛擬機(jī)構(gòu)成的Android操作系統(tǒng),為嵌入式移動(dòng)設(shè)備帶來(lái)全新的開放系統(tǒng)解決方案。本文在眾多的操作系統(tǒng)中選擇 Android作為車載導(dǎo)航的系統(tǒng)終端軟件,因?yàn)锳ndroid是開源的操作系統(tǒng),有利于開發(fā)人員理解平臺(tái)框架,降低移動(dòng)終端設(shè)備的價(jià)格,同時(shí)也便于軟件的開發(fā)、維護(hù)和升級(jí)。
1 Android操作系統(tǒng)介紹
Google公司于2007年11月發(fā)布的Android操作系統(tǒng),是一款建立在Linux操作系統(tǒng)2.6版本內(nèi)核之上的手機(jī)操作系統(tǒng)平臺(tái)。 Google公司是這樣定義Android操作系統(tǒng)的,它是首個(gè)專門為移動(dòng)終端打造的真正意義上的開源且系統(tǒng)完整的移動(dòng)平臺(tái),而且不存在不同設(shè)備上的兼容性問(wèn)題。
Android平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。Linux內(nèi)核層用來(lái)提供系統(tǒng)的底層服務(wù),位于硬件和其他軟件層之間,采用 YAFFS2文件系統(tǒng)。Android運(yùn)行庫(kù)包含一組核心庫(kù)和Dalvik虛擬機(jī),Android提供豐富的類庫(kù)支持且大部分為開源代碼,如采用嵌入式數(shù)據(jù)庫(kù)SQLite。應(yīng)用框架層為Android開發(fā)人員提供了訪問(wèn)框架應(yīng)用程序接口的全部權(quán)限,采用結(jié)構(gòu)化設(shè)計(jì)簡(jiǎn)化了組件之間的重用。在應(yīng)用程序?qū)樱珹ndroid本身附帶了一些核心的應(yīng)用程序,大大簡(jiǎn)化了Android應(yīng)用程序的開發(fā)。
因此,利用Android操作系統(tǒng)作為車載導(dǎo)航終端的應(yīng)用平臺(tái),由于操作系統(tǒng)與軟件免費(fèi),導(dǎo)航終端更便宜;同一平臺(tái)克服格式問(wèn)題,功能更多元化;使用者決定功能,比個(gè)人電腦更人性化、更貼近消費(fèi)者。
2 系統(tǒng)框架設(shè)計(jì)
本系統(tǒng)是一款以三星公司的S3C6410處理器為核心的嵌入式開發(fā)板,先開發(fā)Bootloader引導(dǎo)程序,接著在此基礎(chǔ)上移植Linux內(nèi)核,然后制作Android文件系統(tǒng);在移植好Android操作系統(tǒng)后,進(jìn)行車載導(dǎo)航功能的開發(fā),任務(wù)集中在通過(guò)GPS實(shí)時(shí)獲取路徑,使用地圖匹配算法校正定位模塊的定位誤差,采用最短路徑導(dǎo)航規(guī)劃算法進(jìn)行導(dǎo)航,通過(guò)語(yǔ)音提示實(shí)現(xiàn)路徑的引導(dǎo),并且通過(guò)電子地圖配合Android系統(tǒng)軟件的API接口,同時(shí)它還具有不斷升級(jí)的地圖庫(kù),并能按照用戶的需求進(jìn)行各種信息查詢,真正實(shí)現(xiàn)一個(gè)體積小、耗電少、成本低并且人機(jī)界面友好的嵌入式操作系統(tǒng)平臺(tái)。系統(tǒng)框架圖如圖1所示。

圖1 系統(tǒng)框架圖
利用Android操作系統(tǒng)在ARM硬件平臺(tái)上實(shí)現(xiàn)車載導(dǎo)航終端各功能模塊的整合,配合相應(yīng)的串口驅(qū)動(dòng)、液晶屏驅(qū)動(dòng)等完成指定的功能,如對(duì)接收到的數(shù)據(jù)進(jìn)行處理,計(jì)算所在位置的經(jīng)度、緯度、海拔、速度和時(shí)間等,并且采用地圖匹配算法進(jìn)行定位誤差校正,自主導(dǎo)航路徑規(guī)劃采用Dijkstra算法,實(shí)現(xiàn)最短路徑導(dǎo)航。GPS系統(tǒng)具有全天候、全球覆蓋、三維定速、定時(shí)、高精度、快速、省時(shí)、高效率、應(yīng)用廣泛、多功能等特點(diǎn),因此可廣泛應(yīng)用于陸地、海洋以及航空航天等。電子地圖的使用,直觀地將豐富的城市地圖、全國(guó)的公路網(wǎng)圖、加油站、便利商店、政府機(jī)關(guān)、餐館、醫(yī)院、停車場(chǎng)等信息同步地在LCD液晶顯示屏上顯示出來(lái),方便中高端使用人員進(jìn)行查詢參考。
3 車載定位導(dǎo)航系統(tǒng)軟件設(shè)計(jì)
在車載導(dǎo)航系統(tǒng)軟件設(shè)計(jì)過(guò)程中,利用了Android軟件平臺(tái)的5大功能模塊,分別為Android應(yīng)用程序?qū)印?yīng)用框架層、普通函數(shù)庫(kù)、 Java程序運(yùn)行環(huán)境和Linux內(nèi)核層。在應(yīng)用程序?qū)永肁ndroid的各種組件API接口開發(fā)了針對(duì)車載導(dǎo)航的GPS、電子地圖的Java應(yīng)用程序,并在內(nèi)核層提供了相應(yīng)串口以及液晶屏等其他的底層驅(qū)動(dòng)。
3.1 GPS定位模塊軟件設(shè)計(jì)
Android操作系統(tǒng)支持GPS APILBS,可以通過(guò)集成GPS芯片或外接GPS設(shè)備來(lái)接收衛(wèi)星信號(hào),通過(guò)GPS全球定位系統(tǒng)中至少3顆衛(wèi)星和原子鐘來(lái)獲取當(dāng)前設(shè)備的坐標(biāo)數(shù)據(jù)。對(duì)于定位功能而言,穩(wěn)定性好是重中之重,而Android實(shí)現(xiàn)了這一點(diǎn)。Android提供了許多定位相關(guān)的類以及相關(guān)的函數(shù),使得開發(fā)人員可以靈活應(yīng)用。使用位置信息管理類LocationManager進(jìn)行GPS定位,使用Criteria類來(lái)實(shí)現(xiàn)自定義定位功能。當(dāng)然在設(shè)計(jì)的導(dǎo)航系統(tǒng)中,我們希望所實(shí)現(xiàn)的 GPS設(shè)備盡可能省電,定位盡可能精確,并且需要獲取運(yùn)動(dòng)物體的速度。因此,設(shè)置的Criteria對(duì)象如下所示:
Criteria mCriteria=new Criteria();
mCriteria.setAccuracy(Criteria.ACCURACY_FINE); /*經(jīng)緯度是否精確提供*/
mCriteria.setAltitudeRequired(false); /*是否提供高度信息*/
mCriteria.setBearingRequired(false); /*是否提供航向信息*/
mCriteria.setCostAllowed(true); /*費(fèi)用*/
mCriteria.setPowerRequirement(Criteria.POWER_LOW); /* 設(shè)置低電量參數(shù)*/
mCriteria.setSpeedRequired(true); /* 是否獲取當(dāng)前物體的速度*/
接著將Criteria的參數(shù)傳遞給LocationManager對(duì)象。然后啟動(dòng)GPS定位功能,LocationManager對(duì)象就開始通過(guò)自身的函數(shù)來(lái)獲取經(jīng)緯度和其他一些數(shù)據(jù)。其獲取數(shù)據(jù)的方法如下所示:
① 對(duì)于經(jīng)緯度,getLatitude()返回維度數(shù)據(jù),getLongitude()返回經(jīng)度數(shù)據(jù);
② 對(duì)于方向,hasBearing()判斷是否有方向數(shù)據(jù),而getBearing()則以度為單位返回其值;
?、?對(duì)于海拔高度,hasAltitude()判斷是否有海拔數(shù)據(jù),而getAltitude下則以m為單位返回海拔數(shù)據(jù);
?、?對(duì)于速度,hasSpeed()判斷是否有速度值,而getSpeed()則以m/s為單位返回速度值。
?、?最后,LocationManager對(duì)象返回的數(shù)據(jù)及時(shí)地更新在電子地圖上,并且隨著物體和時(shí)間位置的變化,開發(fā)者可以利用LocationManager,使用定位監(jiān)聽器LocationListener根據(jù)時(shí)間和物體移動(dòng)距離進(jìn)行數(shù)據(jù)更新。
電子發(fā)燒友App















評(píng)論