新聞中心

        EEPW首頁 > 汽車電子 > 設(shè)計應(yīng)用 > 基于GPS的公交車自動報站系統(tǒng)的設(shè)計

        基于GPS的公交車自動報站系統(tǒng)的設(shè)計

        作者: 時間:2017-06-07 來源:網(wǎng)絡(luò) 收藏

        目前城市公交系統(tǒng)飛速發(fā)展,且已基本都是無人售票,報站也由原來的售票員報站改為由司機手動控制報站。但是由于公交司機既要開車,又要兼顧手動按鍵報站,所以時常出現(xiàn)誤報、漏報等現(xiàn)象,不能滿足公交系統(tǒng)的要求;另外,由于司機開車時為報站分散精力,也對公交的安全運行埋下了隱患。應(yīng)用自動報站系統(tǒng)即可以節(jié)省員工開支,增強公司效益,又可以利用報站器播報標準的普通話站名,使各城市更利于交流和發(fā)展。

        衛(wèi)星定位語音報站系統(tǒng)具有高、語音自動播報等特點。目前市場上已有基于的公交車自動報站系統(tǒng)的試用,但這些系統(tǒng)都是基于各種單片機為處理芯片的。

        車載設(shè)備安裝于公交車上,其工作環(huán)境比較惡劣,因此對設(shè)備的結(jié)構(gòu)也有一定的要求,本系統(tǒng)采用工作穩(wěn)定可靠、抗干擾能力強的ARM9處理器。嵌入式系統(tǒng)固化于存儲器中,其可靠性高、成本低、體積小、功耗低。鑒于此,本研究設(shè)計了一種基于的嵌入式公交車自動報站系統(tǒng),可以實現(xiàn)公交車到達站點后的實時報站,預(yù)報下一站的信息,播放語音、視頻等信息,結(jié)合LCD進行報站顯示,讓乘客可以更方便地了解周邊信息,也可以降低司機的勞動強度。

        1 GPS技術(shù)概述

        全球定位系統(tǒng)GPS(Global Positioning System)是美國從20世紀70年代開始研制,歷時20年,耗資200億美元,具有海、陸、空全方位實時三維導(dǎo)航與定位能力的新一代高精度衛(wèi)星導(dǎo)航與定位系統(tǒng)。GPS定位的基本原理是根據(jù)高速運動的衛(wèi)星瞬間位置作為已知的起算數(shù)據(jù),采用空間距離后方交會的方法,確定待測點的位置。假設(shè)t時刻在地面待測點上安置GPS接收機,可以測定GPS信號到達接收機的時間?駐t,再加上接收機所接收到的衛(wèi)星星歷等其他數(shù)據(jù)可以確定以下4個方程式,如圖 1 所示。



        2 GPS通信的NMEA0183協(xié)議

        通常GPS模塊支持兩種格式:二進制消息格式和NMEA-0183 ASCII消息格式。前者的通信協(xié)議為9 600 b/s、無校驗、8 bit數(shù)據(jù)位、1 bit停止位;后者的通信協(xié)議為4 800 b/s、無校驗、8 bit數(shù)據(jù)位、1 bit停止位。由于NMEA-0183 ASCII格式直觀、易于識別及應(yīng)用, 因此本設(shè)備采用ASCII格式。目前GPS廠商遵循NMEA0183協(xié)議提供串行通信接口,串行通信參數(shù)為:波特率=4 800 b/s,數(shù)據(jù)位=8 bit,停止位=1 bit,無奇偶校驗。

        本文引用地址:http://www.104case.com/article/201706/350710.htm

        GPS與系統(tǒng)通信時,通過串口發(fā)送數(shù)據(jù)。系統(tǒng)接收到的GPS數(shù)據(jù)主要由幀頭、幀尾和幀內(nèi)數(shù)據(jù)組成。根據(jù)數(shù)據(jù)幀的不同, 幀頭也不相同, 主要有 GPGGA、 GPGSA、GPGSV以及 GPRMC等。各類數(shù)據(jù)幀分別包含了不同的信息。
        由于幀內(nèi)各數(shù)據(jù)段由逗號分割, 因此在處理緩存數(shù)據(jù)時通過搜尋ASCII 碼“ ”來判斷是否是幀頭。在對幀頭的類別進行識別后, 再通過對所經(jīng)歷逗號個數(shù)的計數(shù)判斷出當前正在處理的是哪一種定位導(dǎo)航參數(shù), 并做出相應(yīng)處理。
        如果與衛(wèi)星的通信正常,則可以接收到的數(shù)據(jù)格式如下:

        GPRMC,204700,A,3403.868,N,11709.432,W,001.9,336.9,170698,013.6,E*6E

        數(shù)據(jù)說明如下:

        GPRMC:代表 GPS 推薦的最短數(shù)據(jù);204700:UTC_TIME 24h制的標準時間,按照h/min/s的格式;
        A:A或者V,A表示數(shù)據(jù)OK,V表示一個警告;
        3403.868:LAT緯度值,精確到小數(shù)點前4位,后3位;
        N:LAT_DIR N表示北緯,S表示南緯;
        11709.432:LON經(jīng)度值,精確到小數(shù)點前5位,后3位;
        W:LON_DIR W表示西經(jīng),E表示東經(jīng);
        下面是一個接收不到衛(wèi)星信號的例子:
        GPRMC,204149,V,…,170698,*3A

        3 報站系統(tǒng)模塊設(shè)計

        3.1 GPS數(shù)據(jù)解析模塊

        在接收進程receive中收到“n”之后,表示收到一條完整的信息。在gps_parse子程序中實現(xiàn)GPRMC格式數(shù)據(jù)的解析,show_gps子程序中實現(xiàn)數(shù)據(jù)的顯示。

        從GPS原始采集的數(shù)據(jù)可以解析出年月日、時間、狀態(tài)、緯度經(jīng)度以及高度等信息,然后可以通過GPS的報站程序,按照設(shè)定的格式,只要條件滿足就執(zhí)行報站程序及數(shù)據(jù)的顯示。

        3.2 串口通信的設(shè)計

        打開串口:打開串口是通過標準的文件打開函數(shù)來實現(xiàn)的。

        串口設(shè)置:最基本的設(shè)置串口包括波特率設(shè)置、校驗位和停止位設(shè)置。串口的設(shè)置主要是設(shè)置struct termios結(jié)構(gòu)體的各成員值,關(guān)于該結(jié)構(gòu)體的定義可以查看/arm2410s/kernel-2410s/include/asm/termios.h文件。

        讀寫串口:設(shè)置好串口之后,讀寫串口很容易,把串口當作文件讀寫就可以了。

        讀取串口數(shù)據(jù):使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實際串口收到的字符數(shù)。可以使用操作文件的函數(shù)來實現(xiàn)異步讀取,如fcntl,或者select等操作。

        關(guān)閉串口:關(guān)閉串口就是關(guān)閉文件。

        3.3 語音報站的設(shè)計

        語音報站是基于GPS的自動報站系統(tǒng)的核心部分,只有實現(xiàn)了語音報站,整個系統(tǒng)才算完成。實驗箱中的音頻驅(qū)動程序和視頻驅(qū)動程序都是一個獨立的程序,要想在GPS的自動報站程序中使用音頻驅(qū)動程序?qū)崿F(xiàn)語音報站,就必須用一個函數(shù)來實現(xiàn)程序的調(diào)用。System函數(shù)就有這樣的功能。System函數(shù)已經(jīng)被收錄在標準C庫中,可以直接調(diào)用。

        語音報站程序主要是通過system函數(shù)調(diào)用音頻驅(qū)動程序來實現(xiàn)的。如果采集信號的狀態(tài)為“A”,就可以進行數(shù)據(jù)的對比,如果在站點范圍內(nèi)就用system函數(shù)調(diào)用一段語音,如果出了站點范圍就調(diào)用另外一段語音。站點具體的經(jīng)度和緯度可以用數(shù)組來定義,這樣可以方便修改,也更加直觀、簡單。站點的范圍通過一個方框限定,經(jīng)度和緯度在站點的100 m范圍內(nèi)。站點的范圍也可以用一個圓來限定,即到站點的距離小于d的范圍,兩個站點間的距離可以用公式計算。

        3.4 多線程的應(yīng)用

        多線程程序作為一種多任務(wù)、并發(fā)的工作方式,有以下的優(yōu)點:(1)提高應(yīng)用程序響應(yīng);(2)使多CPU系統(tǒng)更加有效;(3)改善程序結(jié)構(gòu)。LIBC中的pthread庫提供了大量的API函數(shù),為用戶編寫應(yīng)用程序提供支持。在本程序的代碼中大量使用了線程函數(shù),如pthread_create(線程創(chuàng)建函數(shù))、pthread_join(等待一個線程的結(jié)束)pthread_exit(一個線程的結(jié)束)等。

        4 系統(tǒng)總體設(shè)計及調(diào)試

        4.1 系統(tǒng)總體設(shè)計

        系統(tǒng)的軟件部分主要是GPS數(shù)據(jù)的解析和報站子程序的設(shè)計。目前軍用GPS接收機的已經(jīng)達到1 m,但是民用GPS定位系統(tǒng)只有10 m~20 m,而實際的公交車報站的精度只要在150 m范圍內(nèi)就可以,所以本次設(shè)計中的站點范圍為100 m,完全可以達到設(shè)計的要求。如果是中小城市的話可以將定位的精度進行適當?shù)恼{(diào)整。
        由于GPS采集信號的周期是每1 s采一次,而實際上公交車站點之間的距離較遠,且報站的時間需提前一點,1 s進行一次數(shù)據(jù)對比比較麻煩,每隔5 s進行一次數(shù)據(jù)對比就可以了,所以程序中將數(shù)據(jù)對比的周期改成了5 s一次。公交車上還可以采用車輪計速的方法,每次車輪轉(zhuǎn)夠一定的圈數(shù)就進行一次數(shù)據(jù)比對,這樣可以防止公交車到站停車后繼續(xù)執(zhí)行報站程序。

        采集到的信號狀態(tài)為“A”時,執(zhí)行相應(yīng)的報站程序,但是有時候會出現(xiàn)信號不好的情況,這時就要提醒司機臨時將自動報站改成原來的手動報站,以防止乘客下錯站。

        系統(tǒng)的軟件流程圖如圖2所示。

        GPS公交自動報站系統(tǒng)包含硬件和軟件兩部分。硬件以ARM9S3c2410x處理器為核心, 配置存儲器、I/O設(shè)備、通信模塊等必要的外設(shè);軟件以嵌入式Linux操作系統(tǒng)為核心,提供應(yīng)用編程接口API。嵌入式系統(tǒng)中,軟件和硬件緊密配合,協(xié)調(diào)工作,共同完成系統(tǒng)預(yù)定的功能。自動報站的硬件原理圖如圖3所示。

        系統(tǒng)軟件部分在Linux操作系統(tǒng)中用C語言編程實現(xiàn),將各模塊的程序整合到一起,配置好開發(fā)環(huán)境,進入GPS的目錄,用vi命令將代碼進行編輯,然后編譯、在minicom下運行,就可以看到結(jié)果是否正確。

        4.2 系統(tǒng)調(diào)試

        檢查跳線:確定試驗平臺擴展槽上方JP1102/JP1103跳線位于2、3之間,跳線位為EXPORT;確定GPS/GPRS模塊的JP201/JP202跳線位于模塊外側(cè)GPS端。

        接入設(shè)備:關(guān)閉2410-S平臺,將GPS天線連接到GPS/GPRS模塊上,天線接收端置放在能良好接收室外信號的地方,將模塊插入2410-S擴展插槽。

        然后運行程序,即可得到實驗結(jié)果。

        本研究根據(jù)公交車報站的實際需要,設(shè)計并實現(xiàn)了基于GPS的公交車自動報站系統(tǒng)。該系統(tǒng)利用嵌入式實驗設(shè)備實現(xiàn)了公交車的自動報站,具有性能高、能耗低、體積小、播報準確的特點,便于在實際運行的公交車上使用;采用先進的衛(wèi)星定位技術(shù)與語音播放技術(shù)相結(jié)合的方式,徹底改變了傳統(tǒng)公交車語音報站器由司機手控的方式,進站、出站自動播報站名及服務(wù)用語,準確、及時,完全不需要人工介入。實驗結(jié)果表明,該系統(tǒng)可以用于GPS信號的采集和自動報站,但采集到的數(shù)據(jù)與真實值之間有一定的誤差,并且有時由于樹木、高樓的遮擋會導(dǎo)致有些路段接收GPS信號效果不佳。因此,采用數(shù)學方法(差分技術(shù))消除數(shù)據(jù)間的誤差,利用其他輔助定位系統(tǒng)與GPS 定位相結(jié)合進行定位來提高定位數(shù)據(jù)的精度,將是下一步研究的主要方向。



        關(guān)鍵詞: 定位精度 GPS 軟件升級

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阿巴嘎旗| 玛纳斯县| 上蔡县| 盐城市| 杨浦区| 肥东县| 鹤庆县| 临海市| 日喀则市| 刚察县| 晋州市| 鄂托克前旗| 南江县| 台东县| 康平县| 逊克县| 黑河市| 呼伦贝尔市| 连州市| 莱西市| 镇江市| 曲麻莱县| 手游| 安龙县| 微山县| 正定县| 浠水县| 苏尼特左旗| 温宿县| 阜阳市| 宾阳县| 额济纳旗| 宜宾县| 东港市| 徐闻县| 罗江县| 翁牛特旗| 泰宁县| 周宁县| 江阴市| 东山县|