近年來隨著社會經濟的飛速發展,公路交通的復雜性和擁擠度與日俱增,現有的交通運輸管理與服務手段已不能適應交通運輸的需求,這已成為長期以來困擾發展中國家和發達國家的問題。因此,車載導航應運而生,在一些發達國家,車載導航已成為大眾生活的輔助品。但是在中國由于技術、資金以及成本等原因,我國的車載導航市場還是處于發展初期。車載導航系統是集中應用了自動定位技術、地理信息系統與數據庫技術、計算機技術、無線通信技術的高科技綜合系統。目前國內市場上的車載終端技術不夠完備,市場化程度低,真正達到消費者要求的并不多見。隨著對導航系統信息服務能力要求的進一步提高、終端硬件成本的不斷下降以及操作系統的不斷升級,選擇一款易于開發、維護和升級,并且兼容性強的操作系統來支撐終端硬件系統的運行就顯得異常重要。
由嵌入式Linux和Java虛擬機構成的Android操作系統,為嵌入式移動設備帶來全新的開放系統解決方案。本文在眾多的操作系統中選擇 Android作為車載導航的系統終端軟件,因為Android是開源的操作系統,有利于開發人員理解平臺框架,降低移動終端設備的價格,同時也便于軟件的開發、維護和升級。
1 Android操作系統介紹
Google公司于2007年11月發布的Android操作系統,是一款建立在Linux操作系統2.6版本內核之上的手機操作系統平臺。 Google公司是這樣定義Android操作系統的,它是首個專門為移動終端打造的真正意義上的開源且系統完整的移動平臺,而且不存在不同設備上的兼容性問題。
Android平臺由操作系統、中間件、用戶界面和應用軟件組成。Linux內核層用來提供系統的底層服務,位于硬件和其他軟件層之間,采用 YAFFS2文件系統。Android運行庫包含一組核心庫和Dalvik虛擬機,Android提供豐富的類庫支持且大部分為開源代碼,如采用嵌入式數據庫SQLite。應用框架層為Android開發人員提供了訪問框架應用程序接口的全部權限,采用結構化設計簡化了組件之間的重用。在應用程序層,Android本身附帶了一些核心的應用程序,大大簡化了Android應用程序的開發。
因此,利用Android操作系統作為車載導航終端的應用平臺,由于操作系統與軟件免費,導航終端更便宜;同一平臺克服格式問題,功能更多元化;使用者決定功能,比個人電腦更人性化、更貼近消費者。
2 系統框架設計
本系統是一款以三星公司的S3C6410處理器為核心的嵌入式開發板,先開發Bootloader引導程序,接著在此基礎上移植Linux內核,然后制作Android文件系統;在移植好Android操作系統后,進行車載導航功能的開發,任務集中在通過GPS實時獲取路徑,使用地圖匹配算法校正定位模塊的定位誤差,采用最短路徑導航規劃算法進行導航,通過語音提示實現路徑的引導,并且通過電子地圖配合Android系統軟件的API接口,同時它還具有不斷升級的地圖庫,并能按照用戶的需求進行各種信息查詢,真正實現一個體積小、耗電少、成本低并且人機界面友好的嵌入式操作系統平臺。系統框架圖如圖1所示。
圖1 系統框架圖
利用Android操作系統在ARM硬件平臺上實現車載導航終端各功能模塊的整合,配合相應的串口驅動、液晶屏驅動等完成指定的功能,如對接收到的數據進行處理,計算所在位置的經度、緯度、海拔、速度和時間等,并且采用地圖匹配算法進行定位誤差校正,自主導航路徑規劃采用Dijkstra算法,實現最短路徑導航。GPS系統具有全天候、全球覆蓋、三維定速、定時、高精度、快速、省時、高效率、應用廣泛、多功能等特點,因此可廣泛應用于陸地、海洋以及航空航天等。電子地圖的使用,直觀地將豐富的城市地圖、全國的公路網圖、加油站、便利商店、政府機關、餐館、醫院、停車場等信息同步地在LCD液晶顯示屏上顯示出來,方便中高端使用人員進行查詢參考。
3 車載定位導航系統軟件設計
在車載導航系統軟件設計過程中,利用了Android軟件平臺的5大功能模塊,分別為Android應用程序層、應用框架層、普通函數庫、 Java程序運行環境和Linux內核層。在應用程序層利用Android的各種組件API接口開發了針對車載導航的GPS、電子地圖的Java應用程序,并在內核層提供了相應串口以及液晶屏等其他的底層驅動。
3.1 GPS定位模塊軟件設計
Android操作系統支持GPS APILBS,可以通過集成GPS芯片或外接GPS設備來接收衛星信號,通過GPS全球定位系統中至少3顆衛星和原子鐘來獲取當前設備的坐標數據。對于定位功能而言,穩定性好是重中之重,而Android實現了這一點。Android提供了許多定位相關的類以及相關的函數,使得開發人員可以靈活應用。使用位置信息管理類LocationManager進行GPS定位,使用Criteria類來實現自定義定位功能。當然在設計的導航系統中,我們希望所實現的 GPS設備盡可能省電,定位盡可能精確,并且需要獲取運動物體的速度。因此,設置的Criteria對象如下所示:
Criteria mCriteria=new Criteria();
mCriteria.setAccuracy(Criteria.ACCURACY_FINE); /*經緯度是否精確提供*/
mCriteria.setAltitudeRequired(false); /*是否提供高度信息*/
mCriteria.setBearingRequired(false); /*是否提供航向信息*/
mCriteria.setCostAllowed(true); /*費用*/
mCriteria.setPowerRequirement(Criteria.POWER_LOW); /* 設置低電量參數*/
mCriteria.setSpeedRequired(true); /* 是否獲取當前物體的速度*/
接著將Criteria的參數傳遞給LocationManager對象。然后啟動GPS定位功能,LocationManager對象就開始通過自身的函數來獲取經緯度和其他一些數據。其獲取數據的方法如下所示:
① 對于經緯度,getLatitude()返回維度數據,getLongitude()返回經度數據;
?、?對于方向,hasBearing()判斷是否有方向數據,而getBearing()則以度為單位返回其值;
?、?對于海拔高度,hasAltitude()判斷是否有海拔數據,而getAltitude下則以m為單位返回海拔數據;
?、?對于速度,hasSpeed()判斷是否有速度值,而getSpeed()則以m/s為單位返回速度值。
?、?最后,LocationManager對象返回的數據及時地更新在電子地圖上,并且隨著物體和時間位置的變化,開發者可以利用LocationManager,使用定位監聽器LocationListener根據時間和物體移動距離進行數據更新。
評論