溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng)

發(fā)布時(shí)間:2021-06-28 15:21:49 來源:億速云 閱讀:879 作者:Leah 欄目:移動(dòng)開發(fā)

這篇文章給大家介紹Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng),內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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)的,它是***專門為移動(dòng)終端打造的真正 意義上的開源且系統(tǒng)完整的移動(dòng)平臺(tái),而且不存在不同設(shè)備上的兼容性問題。

Android平臺(tái)由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成。Linux 內(nèi)核層用來提供系統(tǒng)的底層服務(wù),位于硬件和其他軟件層之間,采用YAFFS2文件系統(tǒng)。Android運(yùn)行庫包含一組核心庫和Dalvik虛擬 機(jī),Android提供豐富的類庫支持且大部分為開源代碼,如采用嵌入式數(shù)據(jù)庫SQLite。應(yīng)用框架層為Android開發(fā)人員提供了訪問框架應(yīng)用程序 接口的全部權(quán)限,采用結(jié)構(gòu)化設(shè)計(jì)簡化了組件之間的重用。在應(yīng)用程序?qū)樱珹ndroid本身附帶了一些核心的應(yīng)用程序,大大簡化了Android應(yīng)用程序的 開發(fā)。

因此,利用Android操作系統(tǒng)作為車載導(dǎo)航終端的應(yīng)用平臺(tái),由于操作系統(tǒng)與軟件免費(fèi),導(dǎo)航終端更便宜;同一平臺(tái)克服格式問題,功能更多元化;使用者決定功能,比個(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ù)集中在通過GPS實(shí)時(shí)獲取路徑,使用地圖匹配算法校正定位模塊的定位誤差,采用最短路徑導(dǎo)航規(guī)劃算法進(jìn)行導(dǎo)航,通過語音提示實(shí)現(xiàn)路徑的引 導(dǎo),并且通過電子地圖配合Android系統(tǒng)軟件的API接口,同時(shí)它還具有不斷升級的地圖庫,并能按照用戶的需求進(jìn)行各種信息查詢,真正實(shí)現(xiàn)一個(gè)體積 小、耗電少、成本低并且人機(jī)界面友好的嵌入式操作系統(tǒng)平臺(tái)。系統(tǒng)框架圖如圖1所示。

Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng)

圖1 系統(tǒng)框架圖

利用Android操作系統(tǒng)在ARM硬件平臺(tái)上實(shí)現(xiàn)車載導(dǎo)航終端各功能模塊的 整合,配合相應(yīng)的串口驅(qū)動(dòng)、液晶屏驅(qū)動(dòng)等完成指定的功能,如對接收到的數(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)用于陸地、海洋以及航空航天等。電子地圖的使用,直觀地將豐富的城市地圖、全國的公路網(wǎng)圖、加油站、便 利商店、政府機(jī)關(guān)、餐館、醫(yī)院、停車場等信息同步地在LCD液晶顯示屏上顯示出來,方便中高端使用人員進(jìn)行查詢參考。

3 車載定位導(dǎo)航系統(tǒng)軟件設(shè)計(jì)

在車載導(dǎo)航系統(tǒng)軟件設(shè)計(jì)過程中,利用了Android軟件平臺(tái)的5大功能模 塊,分別為Android應(yīng)用程序?qū)?、?yīng)用框架層、普通函數(shù)庫、Java程序運(yùn)行環(huán)境和Linux內(nèi)核層。在應(yīng)用程序?qū)永肁ndroid的各種組件 API接口開發(fā)了針對車載導(dǎo)航的GPS、電子地圖的Java應(yīng)用程序,并在內(nèi)核層提供了相應(yīng)串口以及液晶屏等其他的底層驅(qū)動(dòng)。

3.1 GPS定位模塊軟件設(shè)計(jì)

Android操作系統(tǒng)支持GPS  APILBS,可以通過集成GPS芯片或外接GPS設(shè)備來接收衛(wèi)星信號(hào),通過GPS全球定位系統(tǒng)中至少3顆衛(wèi)星和原子鐘來獲取當(dāng)前設(shè)備的坐標(biāo)數(shù)據(jù)。對于定 位功能而言,穩(wěn)定性好是重中之重,而Android實(shí)現(xiàn)了這一點(diǎn)。Android提供了許多定位相關(guān)的類以及相關(guān)的函數(shù),使得開發(fā)人員可以靈活應(yīng)用。使用 位置信息管理類LocationManager進(jìn)行GPS定位,使用Criteria類來實(shí)現(xiàn)自定義定位功能。當(dāng)然在設(shè)計(jì)的導(dǎo)航系統(tǒng)中,我們希望所實(shí)現(xiàn)的 GPS設(shè)備盡可能省電,定位盡可能精確,并且需要獲取運(yùn)動(dòng)物體的速度。因此,設(shè)置的Criteria對象如下所示:

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對象。然后啟動(dòng)GPS定位功能,LocationManager對象就開始通過自身的函數(shù)來獲取經(jīng)緯度和其他一些數(shù)據(jù)。其獲取數(shù)據(jù)的方法如下所示:
① 對于經(jīng)緯度,getLatitude()返回維度數(shù)據(jù),getLongitude()返回經(jīng)度數(shù)據(jù);
② 對于方向,hasBearing()判斷是否有方向數(shù)據(jù),而getBearing()則以度為單位返回其值;
③ 對于海拔高度,hasAltitude()判斷是否有海拔數(shù)據(jù),而getAltitude下則以m為單位返回海拔數(shù)據(jù);
④ 對于速度,hasSpeed()判斷是否有速度值,而getSpeed()則以m/s為單位返回速度值。
⑤ ***,LocationManager對象返回的數(shù)據(jù)及時(shí)地更新在電子地圖上,并且隨著物體和時(shí)間位置的變化,開發(fā)者可以利用LocationManager,使用定位監(jiān)聽器LocationListener根據(jù)時(shí)間和物體移動(dòng)距離進(jìn)行數(shù)據(jù)更新。

3.2 地圖匹配算法設(shè)計(jì)

地圖匹配以某個(gè)車輛位置點(diǎn)或某段車行軌跡曲線作為待匹配樣本,以該點(diǎn)或該軌跡 曲線附近的所有道路上的位置點(diǎn)或道路曲線作為模板,通過待匹配樣本或模板間的匹配,選擇相似度***的匹配樣本或模板作為匹配結(jié)果。***根據(jù)匹配結(jié)果校正定 位模塊的定位誤差。車載導(dǎo)航系統(tǒng)中將車輛定位顯示在電子地圖上時(shí),應(yīng)該根據(jù)車輛的行駛方向,將車輛定位顯示于某一道路上。但是,由于各種誤差(主要是定位 技術(shù)的誤差),電子地圖上顯示的車輛會(huì)偏離實(shí)際的道路,失去其導(dǎo)航的功能;而地圖匹配這一軟件技術(shù)能校正定位技術(shù)的誤差,使車輛位置準(zhǔn)確地顯示在電子地圖 上。

可用來判斷車輛當(dāng)前可能在哪條路段上行駛的信息主要有3個(gè):當(dāng)前車輛定位點(diǎn)距 候選路段的投影距離、車輛當(dāng)前行駛方向與候選路段方向的夾角以及候選路段與前一匹配路段的幾何拓?fù)潢P(guān)系。一般來講,投影距離和方向夾角越小的候選路段成為 匹配路段的可能性越大,反之亦然。此外,與前一匹配路段相同或拓?fù)湎噙B的候選路段成為匹配路段的可能性大,其余的可能性小。車輛在行駛的過程中,把GPS 原始定位點(diǎn)向各待匹配路段作投影,可計(jì)算GPS原始定位點(diǎn)與待匹配路段之間的最短距離ri(i=1,…,n);另外車輛行駛方向與各待匹配路段之間的夾角 θi(i=1,…,n)也可以得到,進(jìn)而計(jì)算各待匹配路段的匹配值λi(i=1,…,n)。

地圖匹配算法在進(jìn)行匹配時(shí)的步驟如下:
① 通過特征提取把所有的待匹配路段分析、描述,提取出相應(yīng)的匹配因子。

Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng)

圖2 距離與夾角示意圖

② 計(jì)算定位點(diǎn)P到各個(gè)待匹配路段的最短距離。距離與夾角示意圖如圖2所示。其中r1、r2為要求的最短距離;α1、α2為所求夾角。根據(jù)匹配規(guī)則,依次計(jì)算定點(diǎn)P到各個(gè)待匹配路段的匹配值。
③ 把匹配值中最小的路段作為最終匹配路段,并把在此路段上距離原始定位點(diǎn)最近的點(diǎn)作為最終匹配點(diǎn)。

3.3 電子地圖顯示模塊設(shè)計(jì)

利用Android平臺(tái)開發(fā)導(dǎo)航地圖過程中,主要采用Android提供的 MapView和MapActivity兩個(gè)類實(shí)現(xiàn)。其中MapView是一個(gè)展示地圖的視圖,它可以獲取鍵盤事件來支持地圖的移動(dòng)和縮放功能,地圖可以 以不同的形式來顯示,如街景模式、衛(wèi)星模式等,通過setSatellite(boolean)  、setTraffic(boolean)和setStreetView(boolean)  方法,同時(shí)也支持多層Overlay的使用??梢栽诘貓D上畫坐標(biāo)、寫地名、畫圖片等。

MapView只能通過MapActivity來建立,因?yàn)镸apView需要在后臺(tái)使用文件系統(tǒng)和網(wǎng)絡(luò)。所有這些線程需要在Activity的生命周期中被控制。

如何利用電子地圖功能將GPS模塊定位得到的經(jīng)緯度信息在地圖上顯示出來呢? 地球上的任何一個(gè)地點(diǎn)都可以利用經(jīng)緯度來表示。在Android的類庫中,Point類代表了一個(gè)地點(diǎn)的經(jīng)緯度,函數(shù)格式為:Pointment(int  latitudeE6,int longitudeE6)。E6是微度,即度數(shù)乘以1000  000。如果要指定地圖地點(diǎn),須傳遞一個(gè)Point類到地圖中。然后調(diào)用setMapLocationCenter方法將地圖移動(dòng)到合適的位置,***調(diào)用 MapController對象的animateTo方法將該坐標(biāo)位置設(shè)置為地圖的中心點(diǎn)。在實(shí)際應(yīng)用中,可以使用zoomTo(int)縮放到需要的級 別,同時(shí)利用mapView.toggleSatellite()和mapView.toggleTraffic()來獲得衛(wèi)星圖和路況圖。

3.4 最短導(dǎo)航路徑規(guī)劃算法設(shè)計(jì)

求解最短路徑問題的算法中,Dijkstra算法是國內(nèi)外公認(rèn)的比較成功的算法,該算法通用性強(qiáng),而且編程實(shí)現(xiàn)簡單,是目前理論上比較完善、應(yīng)用最廣泛的最短路徑分析算法。Dijkstra算法按路徑長度的遞增次序,逐條產(chǎn)生最短路徑。

Dijkstra算法的基本思想是:設(shè)從頂點(diǎn)V0出發(fā),搜索從它到其他頂點(diǎn)的 最短路徑。把有向圖中的頂點(diǎn)集V分為兩個(gè)集合,已求出最短路徑的頂點(diǎn)集合S,尚未確定最短路徑的頂點(diǎn)集合V-S(定義為T);按最短路徑長度遞增的順序逐 個(gè)把集合T中的頂點(diǎn)加到集合S中,直到和出發(fā)點(diǎn)V0有路徑相通的所有頂點(diǎn)都包含在集合S中。在整個(gè)過程中,V0到集合S中各頂點(diǎn)的最短路徑長度都不大于 V0到集合T中的任意頂點(diǎn)的最短路徑長度。

設(shè)帶權(quán)有向圖G={V,E},V={V0,V1,&hellip;,Vn-1},用帶權(quán)的鄰 接矩陣Arcs表示圖G;Arcs[i][j]表示弧<Vi,Vj>上的權(quán)值,S表示已求得的從V0出發(fā)的最短路徑終點(diǎn)的集合;向量D的每個(gè) 分量D[i]表示當(dāng)前求得的從始點(diǎn)V0到每個(gè)終點(diǎn)Vi的最短路徑的長度,算法描述如下:
① 初始化集合S、向量D。S={V0},D[i]=Arcs[0][i](i=0,1,&hellip;,n-1)。
② 選擇Vj,使得D[j]=min{D[i]|Vi&isin;V-S},S=S&cup;{Vi}。
③ 修改從V0出發(fā)到集合V-S上任意節(jié)點(diǎn)Vk的最短路徑長度。若D[k]>D[j]+Arcs[j][k],則修改D[k]為D[k]=D[j]+Arcs[j][k]。
④ 重復(fù)②、③操作n-1次,即可求得從V0到其余各頂點(diǎn)Vi的最短路徑長度。
Dijkstra算法的時(shí)間復(fù)雜度是O(n2)。
在實(shí)際應(yīng)用中往往只需要搜素從某一源點(diǎn)到某一或某幾個(gè)特定終點(diǎn)的最短路徑,用Dijkstra算法求解,此問題與求源點(diǎn)到其余各頂點(diǎn)的最短路徑的時(shí)間復(fù)雜度相同,也為O(n2)。

4 性能測試分析

基于Android操作系統(tǒng)和ARM微處理器進(jìn)行設(shè)計(jì)的車載導(dǎo)航系統(tǒng),利用 Android通用框架和與設(shè)備無關(guān)的應(yīng)用程序開發(fā)平臺(tái),實(shí)現(xiàn)了車載導(dǎo)航的軟件總體架構(gòu)。圖3為車輛定位顯示的應(yīng)用程序窗口。截圖所示范圍為廈門軟件園附 近,箭頭為汽車所在位置。在實(shí)現(xiàn)的導(dǎo)航設(shè)備中,對導(dǎo)航設(shè)備的定位精度、電子地圖顯示速度以及在最短路徑導(dǎo)航規(guī)劃所需的時(shí)間進(jìn)行性能測試。

Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng)

圖3 車輛定位顯示的應(yīng)用程序窗口

(1) 定位精度測試

現(xiàn)在國內(nèi)民用較好的產(chǎn)品的導(dǎo)航定位精度基本控制在5~10 m,不太好的設(shè)備可能達(dá)到幾十米甚至幾百米,本次設(shè)計(jì)的導(dǎo)航終端經(jīng)測試,定位精度約為7 m。

(2) 電子地圖顯示時(shí)間測試

當(dāng)導(dǎo)航設(shè)備接收到GPS數(shù)據(jù)后,如果使用本地電子地圖顯示當(dāng)前位置的時(shí)間為1 s之內(nèi);如果連網(wǎng)下載電子地圖,顯示當(dāng)前位置的時(shí)間為3 s之內(nèi)。

(3) 最短路徑導(dǎo)航路徑規(guī)劃距離測試

通過最短路徑規(guī)劃后,測出從廈門到福州的最短路徑是261 km,如果是普通的大路優(yōu)先算法則是292 km;接著測試從廈門到北京的最短路徑距離為2 106 km,如果是普通的大路優(yōu)先算法,距離則是2 312 km。

關(guān)于Android中怎么實(shí)現(xiàn)一個(gè)車載導(dǎo)航系統(tǒng)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI