1 引言 車載電子設(shè)備在技術(shù)水平上的不斷提高已經(jīng)成為現(xiàn)代汽車發(fā)展的重要標(biāo)志之一,而車載導(dǎo)航設(shè)備是其中重要組成部分。它要將數(shù)據(jù)通訊系統(tǒng),影音娛樂系統(tǒng),定位系統(tǒng),電子控制系統(tǒng)實(shí)時(shí)顯示出來,讓用戶得到充分的駕駛信息,以ARM 及嵌入式操作系統(tǒng)為技術(shù)核心,為車輛駕駛者提供安全行駛所必需的路況、地理信息的車載導(dǎo)航系統(tǒng)目前正在全世界得到越來越廣泛的應(yīng)用,大大提高了用戶駕駛體驗(yàn)與車輛運(yùn)行的安全性。 但目前市場上的車載導(dǎo)航系統(tǒng)多使用 WinCE 作為操作系統(tǒng),不僅軟件使用價(jià)格昂貴,而且對硬件要求較高,運(yùn)行速度偏慢。本文提出并設(shè)計(jì)了一種基于GPS 和GPRS,使用嵌入式32 位處理器和嵌入式Linux 的車載導(dǎo)航系統(tǒng)。該系統(tǒng)采用S3C2440A:32 位ARM920T內(nèi)核處理器,外部擴(kuò)展GPS 接收模塊及GPRS 通訊模塊,顯示部分采用SAMSUNG 4.3 寸480×272 分辨率寬屏TFT 真彩液晶。底層采用嵌入式Linux 操作系統(tǒng),具有源碼開放、易移植、模塊化、資源豐富的優(yōu)勢。圖形用戶界面(GUI)采用Qt/Embedded 軟件進(jìn)行開發(fā)。本文著重從 GPS 與GPRS 數(shù)據(jù)接收與發(fā)送, 嵌入式Linux 總體架構(gòu),多線程技術(shù)在Qt中應(yīng)用等方面進(jìn)行論述。 2 系統(tǒng)總體結(jié)構(gòu)及軟件開發(fā)平臺 系統(tǒng)整體結(jié)構(gòu)如圖1 所示,本系統(tǒng)采用SAMSUNG 公司的S3C2440A 嵌入式處理器,標(biāo)稱工作頻率:400MHz;CPU 內(nèi)置STN/CSTN/TFT LCD 控制器,支持1024ⅹ768 分辨率以下的各種液晶;以太網(wǎng)控制器;1 通道5 線制串口,2 通道3 線制串口,CAN 接口,SPI接口,RTC實(shí)時(shí)時(shí)鐘等;通過RS232 外接GPS接收儀及GPRS模塊; 系統(tǒng)外擴(kuò)64NB SDRAM,用于操作系統(tǒng)內(nèi)存空間,存放動(dòng)態(tài)數(shù)據(jù)和運(yùn)行程序; 系統(tǒng)外擴(kuò)64MB Flash 空間,用于存放Linux 內(nèi)核,文件系統(tǒng),應(yīng)用程序和用戶數(shù)據(jù)。 圖1 系統(tǒng)結(jié)構(gòu) 系統(tǒng)軟件基于嵌入式Linux 操作系統(tǒng),并選擇Qt/Embedded 作為圖形用戶界面(GUI)開發(fā)環(huán)境。Qt 是Trolltech 公司推出的跨平臺的應(yīng)用程序框架,Qt/Embedded 是Qt 面向嵌入式應(yīng)用的版本,一次編寫,隨處編譯。 Qt 特有的信號/槽(singal /slot)機(jī)制,加強(qiáng)了對象間通信的靈活性;通過裁剪去掉無關(guān)模塊可以調(diào)整庫文件的大小,適合嵌入式系統(tǒng)使用;在QT 中支持OpenGL 接口和矢量圖形格式SVG. 能充分滿足導(dǎo)航系統(tǒng)繪圖需要。系統(tǒng)從GPS實(shí)時(shí)獲取車輛位置(包括經(jīng)緯度與時(shí)間等)和運(yùn)行信息(包括車速與方向等),在電子地圖上顯示相關(guān)導(dǎo)航信息,用戶通過觸摸屏操作,提供地圖漫游、地圖查詢和道路信息管理等功能。 3 GPS/GPRS 系統(tǒng)的組成原理及構(gòu)成 (1) GPS 定位基本原理 GPS 的定位原理實(shí)質(zhì)上就是測量學(xué)的空間測距定位,利用在平均20200km 高度均勻分布在6 個(gè)軌道的24 顆衛(wèi)星,發(fā)射測距信號碼和載波,用戶通過接收機(jī)接收這些信號測量衛(wèi)星至接收機(jī)之距,通過一系列方程演算,便可知地面定位坐標(biāo)。用戶測得的到衛(wèi)星的距離稱為“偽距”,它不是用戶到衛(wèi)星的真正距離,其中還包括衛(wèi)星時(shí)鐘的偏差,用戶時(shí)鐘的偏差信號,傳播延遲引起的測距誤差等,因此在至少收到三顆衛(wèi)星后,即可計(jì)算出平面坐標(biāo)(經(jīng)緯度)值,收到四顆則可在計(jì)算出方程值,這就是GPS 的基本定位原理。 圖 2 GPS 定位原理圖 程式中各個(gè)參數(shù)意義如下: x,y,z 為待測點(diǎn)坐標(biāo)的空間直角坐標(biāo)。x i 、y i 、z i (i=1, 2, 3, 4)分別為4 顆衛(wèi)星在t 時(shí)刻的空間直角坐標(biāo),可由衛(wèi)星導(dǎo)航電文求得。Vti (i=1, 2, 3, 4)分別為4 顆衛(wèi)星的衛(wèi)星鐘的鐘差,由衛(wèi)星星歷提供。Vt0為接收機(jī)的鐘差。由以上方程即可解算出待測點(diǎn)的坐標(biāo) x,y,z 和接收機(jī)的鐘差Vt0。 (2) GPRS 網(wǎng)絡(luò)結(jié)構(gòu)及傳輸原理 GPRS 是在原有的GSM 網(wǎng)絡(luò)中增加了兩個(gè)節(jié)點(diǎn):SGSN(Serving GPRS SupportNode,服務(wù)GPRS 節(jié)點(diǎn))和GGSN(Gateway GPRS SupportNode,網(wǎng)關(guān)GPRS 節(jié)點(diǎn)),SGSN 的主要作用就是記錄車輛的當(dāng)前位置信息,并在車輛和GGSN 之間完成移動(dòng)分組數(shù)據(jù)的發(fā)送和接收,GGSN 主要是起網(wǎng)關(guān)作用,它可以和許多不同的數(shù)據(jù)網(wǎng)絡(luò)連接。GGSN 提供了GPRS 網(wǎng)絡(luò)與Internet 的接口,而SGSN 負(fù)責(zé)聯(lián)系移動(dòng)終端和GGSN,應(yīng)此,一個(gè)完整的GPRS 通訊過程就是車載終端發(fā)出的數(shù)據(jù)先傳至BSS(Base Station System 基站系統(tǒng)),經(jīng)由GPRS 網(wǎng)絡(luò)傳至GGSN,通過GGSN 接入Internet,在Internet 上依靠TCP 協(xié)議傳給上位機(jī),終端接收數(shù)據(jù)的流程則與此相反,GPRS 數(shù)據(jù)收發(fā)在網(wǎng)絡(luò)層使用TCP/IP 協(xié)議。 4 系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn) (1) 系統(tǒng)軟件結(jié)構(gòu) 主要由以下模塊組成:用戶界面顯示模塊、GPRS 通訊模塊、GPS 定位模塊、地圖匹配模塊、路徑規(guī)劃模塊、電子地圖模塊、底層通訊模塊等。 圖3 系統(tǒng)軟件結(jié)構(gòu)總體框圖 用戶界面顯示模塊:用戶與車載導(dǎo)航系統(tǒng)交互的平臺,通過調(diào)用其它模塊起到信息交互的作用;GPRS 通訊模塊:將用戶駕駛信息及車況信息實(shí)時(shí)傳送至遠(yuǎn)程監(jiān)控端,不僅起到記錄車況的作用,而且還能防盜;GPS 定位模塊:實(shí)時(shí)接收衛(wèi)星定位數(shù)據(jù),包括經(jīng)緯度,時(shí)間,海拔,即時(shí)速度等;地圖匹配模塊:根據(jù)GPS 定位獲得的數(shù)據(jù),與系統(tǒng)中存儲的地圖信息進(jìn)行匹配,獲得車輛周圍的地理信息,為用戶提供參照;路徑規(guī)劃模塊:用戶輸入起始坐標(biāo)和終點(diǎn)坐標(biāo),系統(tǒng)自動(dòng)計(jì)算最近道路,從而起到車輛導(dǎo)航的作用;底層通訊模塊:通過CAN 總線及232 總線,獲取車輛各種信息,從而在用戶顯示界面上顯示出來。 (2) Linux 在S3C2440 上的移植 嵌入式 Linux 管理整個(gè)導(dǎo)航系統(tǒng)的硬件設(shè)備并對所有程序進(jìn)行調(diào)度,是軟件系統(tǒng)的核心。由于Linux 是面向PC 機(jī)的操作系統(tǒng),將其用于嵌入式領(lǐng)域,需要進(jìn)行移植,它一般包括啟動(dòng)加載代碼(Bootloader)的移植、內(nèi)核移植、驅(qū)動(dòng)程序的編寫、文件系統(tǒng)的構(gòu)建等。將 U-boot 源代碼在ADS 環(huán)境下進(jìn)行編譯,將編譯成功的二進(jìn)制代碼燒寫到開發(fā)板所帶Flash 上,然后在上電啟動(dòng)。Bootloader 首先完成硬件設(shè)備的初始化,然后設(shè)置Linux 內(nèi)核的啟動(dòng)參數(shù),最后調(diào)用Liuux 內(nèi)核,直接跳轉(zhuǎn)到Linux 內(nèi)核的第一條指令處。從 Linux 的方式看待設(shè)備可區(qū)分為3 種基本設(shè)備類型:字符設(shè)備,塊設(shè)備,或者網(wǎng)絡(luò)設(shè)備。車載導(dǎo)航系統(tǒng)設(shè)備驅(qū)動(dòng)程序由以下三個(gè)部分組成: (1)自動(dòng)配置和初始化子程序。初始化子程序首先運(yùn)行,負(fù)責(zé)檢測硬件設(shè)備是否存在和能否正常運(yùn)行; (2)中斷服務(wù)子程序。由嵌入式Liuux 系統(tǒng)來接收硬件中斷,再通過系統(tǒng)來調(diào)用中斷服務(wù)子程序; (3)服務(wù)于I/O 請求的子程序。對I/O 設(shè)備進(jìn)行存取。將編寫好的設(shè)備驅(qū)動(dòng)編譯到內(nèi)核中,在系統(tǒng)啟動(dòng)時(shí)和內(nèi)核一起啟動(dòng)。 文件系統(tǒng)構(gòu)成了 Linux 系統(tǒng)上所有數(shù)據(jù)的基礎(chǔ)。經(jīng)過比較,系統(tǒng)設(shè)計(jì)時(shí)決定使用Cramfs文件系統(tǒng),當(dāng)訪問文件時(shí),Cramfs 文件系統(tǒng)自動(dòng)的將要訪問的文件解壓到RAM 中,會盡可能給實(shí)際執(zhí)行的應(yīng)用程序保留RAM 空間,而且可以為運(yùn)行時(shí)解壓縮挪出額外的CPU 周期。使用mkcramfs 命令生成cramfs 鏡像文件,再將其下載到系統(tǒng)中去,Linux 啟動(dòng)時(shí)自動(dòng)加載根文件系統(tǒng),完成系統(tǒng)的啟動(dòng)。 (3)多線程技術(shù)在Qt 中的應(yīng)用 在具有圖形用戶界面的 Qt 應(yīng)用程序中,主線程由GUI 線程充當(dāng),它同時(shí)擁有一個(gè)或多個(gè)非GUI 線程作為工作線程來處理其它耗時(shí)操作,例如不斷更新的車輛方向、速度,地圖的匹配等。這樣,即使在負(fù)載很重的情況下,應(yīng)用程序也可以保證圖形用戶界面的響應(yīng)。依賴 Qt 提供的多線程技術(shù),使得該導(dǎo)航系統(tǒng)中的多數(shù)據(jù)交互成為可能,GUI 線程在調(diào)用了exec()函數(shù)后,要么等待一個(gè)事件,要么處理一個(gè)事件,每一個(gè)線程都可以有自己的事件循環(huán),如圖4所示,起始線程通過QcoreApplication::exec()啟動(dòng)事件循環(huán),其他非GUI 線程通過Qthread::exec()啟動(dòng)各自的事件循環(huán)。 圖 4 Qt 線程事件模型 5 結(jié)論 本文作者的創(chuàng)新點(diǎn): (1)將嵌入式Liuux 操作系統(tǒng)用于車載導(dǎo)航系統(tǒng),是對傳統(tǒng)的車輛導(dǎo)航系統(tǒng)的重大改進(jìn),成本大幅降低,同時(shí)利用Linux 系統(tǒng)的多線程技術(shù),可以解決系統(tǒng)中多個(gè)任務(wù)并行處理的問題,保障了系統(tǒng)的穩(wěn)定性、可靠性,提高了系統(tǒng)的運(yùn)行速度。 (2)顯示系統(tǒng)采用Qt/Embeded 軟件進(jìn)行用戶顯示界面設(shè)計(jì),一次編寫,隨處編譯,方便移植到各種不同的平臺,只需重新編譯即可,使用開源版節(jié)約大量軟件授權(quán)費(fèi)用,這些都是傳統(tǒng)WinCE 程序所不能比擬的。 (3)目前本系統(tǒng)已經(jīng)裝載在車上試運(yùn)行,實(shí)踐證明本系統(tǒng)能實(shí)時(shí)顯示車輛當(dāng)前運(yùn)行狀況,快速響應(yīng)用戶操作,為駕駛者提供良好的導(dǎo)航信息。 |