<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM-Linux平臺下GPS信號的采集與處理研究

ARM-Linux平臺下GPS信號的采集與處理研究

作者: 時(shí)間:2011-08-25 來(lái)源:網(wǎng)絡(luò ) 收藏

定位和導航是很多便攜移動(dòng)設備以及汽車(chē)電子設備的重要功能之一,所以在上述設備中得到了廣泛的應用?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/ARM-Linux">ARM-Linux的嵌人式平臺以其開(kāi)放性、安全性、健壯性和穩定性越來(lái)越成為各種便攜設備和車(chē)載導航設備的主要開(kāi)發(fā)平臺。如何實(shí)現模塊和嵌人式平臺之間的通信成了實(shí)現系統定位導航的基礎。

本文主要研究模塊與平臺之間采用異步串行傳送方式進(jìn)行數據傳送的問(wèn)題,利用多線(xiàn)程編程技術(shù)實(shí)現GPS信號采集與處理,并介紹了一種WGS坐標向地方坐標的轉換方法。與GPS通信可選的協(xié)議有很多種,目前普遍采用的是NMEA-0183通信協(xié)議。

1 NMEA-0183通信協(xié)議

NMEA-0183協(xié)議[1]是為了在不同的GPS導航設備中建立統一的海事無(wú)線(xiàn)電技術(shù)委員會(huì )(BTCM)標準,由美國國家海洋電子協(xié)會(huì )NMEA(National Marine Electronics Association)制定的通信協(xié)議,其中規定了海用和陸用GPS接收設備輸出的定位位置數據、時(shí)間、衛星狀態(tài)、接收機狀態(tài)等信息。除NMEA-0183協(xié)議之外,還有差分用的RTCMSC-104格式,各個(gè)廠(chǎng)商互不兼容的二進(jìn)制格式等,但以NMEA-0183使用最廣泛。為實(shí)現ARM-LINUX平臺與GPS之間的通信,應清楚協(xié)議規定的GPS輸出的數據格式和報文。NMEA-0183規定的格式如下:
波特率:4 800 b/s
數據位:8 bit
奇偶校驗:無(wú)
開(kāi)始位:1 bit
停止位:1 bit
報文格式:報文的語(yǔ)句串(十進(jìn)制ASCII碼)格式全部信息如圖1。

圖1中具體內容:$為串頭,表示串開(kāi)始;GP為交談識別符。XXX為語(yǔ)句名,NMEA規定的常用語(yǔ)句有以下6種:GGA,衛星定位信息;GLL,地理位置-經(jīng)度和緯度;GSA,GNSS DOP偏差信息,說(shuō)明衛星定位的信號的優(yōu)劣情況;GSV,GNSS天空范圍內的衛星;RMC,最基本的GNSS信息,指能夠達到定位目的的基本信息等語(yǔ)句。ddd為數據字段,字母或數字,“,”為域分隔符;*表示串尾;hh表示$與*之間所有字符代碼的校驗和;為回車(chē)控制符;為換行控制符。

本文引用地址:http://dyxdggzs.com/article/257839.htm

在實(shí)際的GPS應用中,并不會(huì )用到NMEA的全部信息,而是根據具體的需要,從中選取有用的信息,忽略其余的信息內容。下面以GPRMC語(yǔ)句為例來(lái)介紹。該語(yǔ)句包含時(shí)間、日期、方位、速度和磁偏角等信息,基本上可以滿(mǎn)足一般的導航需求。GPRMC語(yǔ)句的結構為:$GPRMC,1>,2>,3>,4>,5>,6>,7>,8>,9>,10>,11>,*hh。

數據區說(shuō)明如下:

(1)UTC時(shí)間,hhmmss.sss(時(shí)分秒.毫秒)格式;
(2)定位狀態(tài),A=有效定位,V=無(wú)效定位;
(3)緯度ddmm.mmmm (度分)格式(前面的0也將被傳輸);
(4)緯度半球N(北半球)或S(南半球);
(5)經(jīng)度dddmm.mmmm(度分)格式(前面的0也將被傳輸);
(6)經(jīng)度半球E(東經(jīng))或W(西經(jīng));
(7)地面速率(000.0~999.9節,前面的0也將被傳輸);
(8)地面航向(000.0~359.9度,以真北為參考基準,前面的0也將被傳輸);
(9)UTC日期,ddmmyy(日月年)格式;
(10)磁偏角(000.0~180.0度,前面的0也將被傳輸);
(11)磁偏角方向,E(東)或W(西)。

2 目標平臺

本文中使用的是以SAMSUNG公司的ARM9系列中的16/32位RISC處理器S3C2410A芯片為核心的目標平臺。S3C2410A包含一個(gè)16/32位的RISC(ARM920T)CPU內核、獨立的16 KB的指令和16 KB數據緩存(cache)、用于虛擬內存管理的MMU單元、LCD控制器(STNTFT)、非線(xiàn)性(NAND)Flash、系統管理器(包括片選邏輯控制和SDRAM控制器)及3個(gè)通道的異步串口(UART)。目標板資源包括S3C2410的微處理器,主頻200 MHz;16 MB的Flash;64 MB的SDRAM;RS-232C UART接口;LCD液晶顯示屏。

在目標板上選配的GPS模塊是HIMARK公司的GPS模塊,此模塊是符合民用標準的GPS接收器,信號接收性能好,功耗較小,整體工作比較穩定。整體硬件設計框圖如圖2所示。


3 交叉編譯環(huán)境的建立

基于嵌入式Linux操作系統的應用開(kāi)發(fā)模式通常都是宿主機+目標機[2]。目標機用于運行操作系統和系統應用軟件,而目標板所用到的操作系統的內核編譯、應用程序的開(kāi)發(fā)和調試則需要通過(guò)宿主機(資源豐富處理能力強的PC)來(lái)完成,稱(chēng)之為交叉編譯。雙方之間一般通過(guò)串口、并口或以太網(wǎng)接口建立連接關(guān)系。

(1)配置minicom:在宿主機Redhat Linux 9.0的X windows界面下新建終端,在終端命令提示符后輸入minicom-s,回車(chē),然后按照提示設置波特率115200,8位數據,1位停止位,無(wú)流控,保存退出。

(2)TFTP服務(wù)的配置:在終端中運行setup->system service->tftp增加TFTP服務(wù),并去掉ipchains和iptables 兩項,然后在Firewall configuration,選中no firewall,保存退出,執行service xinetd restart啟動(dòng)TFTP服務(wù)。

(3)NFS服務(wù)器的配置:在終端中運行setup->system service->NFS,增加NFS服務(wù),然后編輯文件exports,添加與目標機共享的目錄,并設置目標機對目錄的訪(fǎng)問(wèn)權限,重新啟動(dòng)NFS服務(wù)。

(4)Linux內核移植:通過(guò)并口,宿主機向目標開(kāi)發(fā)板的Flash燒寫(xiě)引導程序ppcboot,燒寫(xiě)完畢后通過(guò)TFTP服務(wù)把經(jīng)過(guò)裁剪的Linux內核鏡像文件以及根文件系統下載到目標板的RAM中,然后由ppcboot完成內核及根文件系統從內存到Flash的燒寫(xiě)。最后需要在宿主機安裝主編譯器Arm-linux-gcc,用來(lái)交叉編譯應用程序。

4 GPS信號的采集和處理

為實(shí)現ARM-Linux平臺下GPS信號的采集與處理,涉及到Linux下串口編程技術(shù),首先給出Linux串口通信的原理,然后利用多線(xiàn)程編程技術(shù)來(lái)完成GPS數據采集與NMEA數據格式的解析,因解析后得到的GPS定位坐標屬于WGS84坐標,需轉換到相應的54、80坐標或地方坐標供用戶(hù)標圖定位所用,因此介紹了一種坐標轉換方法。

4.1 GPS數據采集與處理

大多數GPS接收機與各種處理器平臺進(jìn)行數據交換時(shí),都采用異步串行傳送方式,提供一個(gè)符合RS-232C電氣標準的數據接口。

在Linux操作系統中,所有設備以設備文件的形式存儲在目錄/dev/下,串口設備文件為/dev/ttyS*,在Linux中,若要設置串口的參數,如改變串口的波特率、字符大小等,可通過(guò)POSIX標準終端接口[3],該接口被稱(chēng)為termios,在系統頭文件中定義。它包括一個(gè)數據結構和一系列操縱這些數據結構的函數組成。有關(guān)串口的所有參數配置都保存在接口termios的結構struct termios中,該結構定義如下:
struct termios
{
tcflag_t c_iflag; /*輸人模式標志*/
tcflag_t c_oflag; /*輸出模式標志*/
tcflag_t c_cflag; /*控制模式標志*/
tcflag_t c_lflag; /*本地模式標志*/
cc_t c_cc[NCCS];/*特殊控制字符*/
}

其中的c_iflag成員是用來(lái)控制輸入處理選項的,它影響到終端驅動(dòng)程序將輸入發(fā)送給程序前是否對其進(jìn)行處理,及怎樣對其進(jìn)行處理。c_oflag成員是用來(lái)控制輸出數據的處理,并決定在發(fā)送輸出數據到顯示屏和其他輸出設備之前,終端驅動(dòng)程序是否以及如何來(lái)處理它們。c_cflag用于存放各種決定終端設備硬件特性的控制標志,如串口的波特率、奇偶校驗、停止位、數據位等。存放在c_lflag 中的本地模式標志用來(lái)操縱串口如何處理輸入字符,比如是否將輸入字符顯示到顯示屏上,一般可通過(guò)此成員來(lái)設置串口為正規模式或是非正規模式。c_cc數組成員用來(lái)定義支持的特殊控制字符以及一些timeout參數。

除了上面的這個(gè)包含串口參數配置的數據結構之外,termios中還包含許多控制串口特性的函數。其中重要的幾個(gè)函數如:tegetattr( )、tesetattr( )、cfsetispeed( )、cfsetospeed( )、tcflush( )。tegetattr( )用來(lái)初始化一個(gè)termios數據結構,之后可使用其他的函數來(lái)操縱由tegetattr( )返回的數據結構。完成這些操作后,使用tesetattr( )來(lái)更新串口的設置。cfsetispeed( )用來(lái)設置串口的輸入速度。cfsetospeed( )用來(lái)設置串口的輸出速度。tcflush( )用來(lái)清除所有隊列在串口的輸入與輸出。

在Linux下采用多線(xiàn)程編程技術(shù)可大大節省系統的開(kāi)銷(xiāo),方便各線(xiàn)程之間通信,提高應用程序的響應,改善程序結構,從而可以提高嵌入式系統的性能。本文就是利用Linux下多線(xiàn)程編程來(lái)實(shí)現GPS數據的采集和處理,在GPS模塊的初始化GPS_Initial函數中創(chuàng )建接收線(xiàn)程GPS_Thread_Port_Svc,在接收線(xiàn)程中調用GPS信息語(yǔ)句的解析函數GPS_Parse_Data(buf_GPS,gps_data),進(jìn)一步調用語(yǔ)句字符串解析函數
GPS_Parse_Data_Line(char*str_gprs_data_line,GPS_DATA_TYPE*GPS_DATA)。在GPS語(yǔ)句的處理過(guò)程中,需對所讀取的語(yǔ)句進(jìn)行鑒別區分,只選取其中要用的信息進(jìn)行處理而忽略其余的信息,這就要根據NMEA-0183協(xié)議中規定的語(yǔ)句格式來(lái)進(jìn)行解析。圖3給出了GPS數據處理流程。

下面是程序實(shí)現的關(guān)鍵函數部分代碼。
/*包含必要的頭文件*/
#include
#include
#include
#include
#include
#include
#include
int GPS_Initial(int n_tty_no)
{
int ret_tty=-1;
int ret_thread=-1;
ret_tty=OpenComPort(n_tty_no,9600,8,“1”,‘N’);/*打開(kāi)串口,并設置通信屬性,如波特率,數據位,有無(wú)奇偶校驗,停止位等*/
ret_thread=pthread_create(pthr_id,NULL,GPS_
Thread_Port_Svc,NULL);/*創(chuàng )建接收線(xiàn)程*/

}
void*GPS_Thread_Port_Svc(void*pData)
{/*接收線(xiàn)程函數*/
unsigned char buf_GPS[256];
int ret_rd_com;
while(1) {
bzero(buf_GPS,sizeof(buf_GPS));
ret_rd_com=ReadComPort((void*)buf_GPS,
sizeof(buf_GPS));/*讀串口,接收數據*/
GPS_Parse_Data(buf_GPS,gps_data);
/*調用解析語(yǔ)句函數,*/
…}
在GPS_Parse_Data(buf_GPS,gps_data)函數中每接收一個(gè)GPS語(yǔ)句,調用一次字符串解析函數。
GPS_Parse_Data_Line(char*str_gprs_data_line,GPS_DATA_TYPE*GPS_DATA){
char*temptr;
temptr=str_gprs_data_line;
/*字符串賦給臨時(shí)指針,然后對其解析*/
if(strncmp(temptr,RMC_DATA_L,strlen(RMC_DATA_L))==0) {/*解析RMC語(yǔ)句串*/
startchar(temptr,',');
temptr=temptr+strlen(temptr)+12;
/*$GPRMC,HHMMSS.SSS*/
GPS_DATA->Time.Flag=temptr[0];
temptr=temptr+27;
/*A,DDMM.MMMM,N,DDDMM.MMMM,E*/
…}

以上只是GPS信息處理的部分代碼。經(jīng)過(guò)交叉編譯調試下載至目標平臺上,運行后可得到本地地理位置信息。實(shí)驗所得數據為:時(shí)間10:28:35;緯度:北緯30°46’;經(jīng)度:東經(jīng)103°57’。用戶(hù)也可以根據需要選擇提取GPS的其他語(yǔ)句,只需編寫(xiě)解析相應語(yǔ)句字符串的代碼即可。

4.2 GPS坐標的轉換

上述所得的結果屬于WGS84坐標,而在工程上實(shí)用的大多是國家坐標系,因此GPS數據采集結果的使用就存在與國家坐標系間的坐標轉換問(wèn)題。一般要通過(guò)兩步轉換:首先將上述實(shí)測經(jīng)緯度坐標即WGS84大地坐標(L,B)轉換為對應于WGS84橢球的高斯平面坐標(X84,Y84),然后再經(jīng)過(guò)平面坐標轉換,將高斯平面坐標(X84,Y84)強制附合到本地高斯平面坐標系統[4]。

(1)高斯投影換算

將GPS采集所得出的大地坐標(L,B)轉換為高斯平面坐標(X84,Y84)。有關(guān)的推導過(guò)程較復雜,本文只給出結果:

由上述原理利用EXCEL就可以算出對應的高斯平面坐標。

(2)平面坐標轉換

平面坐標轉換的目的就是將高斯投影換算得出平面坐標(X84,Y84)轉換為當地國家坐標系的平面坐標。下面介紹一種平均轉軸相似轉換法,以轉換為北京54坐標系下的平面坐標(X54,Y54)為例,說(shuō)明該方法實(shí)現過(guò)程。
首先,根據公共點(diǎn)分別在WGS84和北京54系中的高斯平面坐標,求出該點(diǎn)在兩個(gè)坐標系中同一邊的方位角之差?駐?琢和長(cháng)度比例系數?資,然后按下式計算任一點(diǎn)在北京54系中的平面坐標。

  
將得到的X54,Y54坐標可應用于GIS系統標圖,實(shí)現導航定位。

GPS信息的獲取是設計的首要環(huán)節,本文有針對性的研究了ARM-Linux平臺與GPS接收模塊之間的串行通信?;贜MEA-0183通信協(xié)議,在Linux下通過(guò)多線(xiàn)程編程實(shí)現了GPS基本定位信息的采集與處理,所得數據滿(mǎn)足精度要求,為或GIS系統提供了數據基礎。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 導航定位系統 ARM-Linux GPS

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>