GPS定位及通信协议解析
1.簡介
上圖為某公司的GPS定位模塊,自己在使用其進行GPS定位過程中學習到的知識分享給大家。
主要參數如下
◆半雙工 UART(3.3V_TTL 電平)/RS232/IIC/CAN 接口輸出,更快速的應用;
◆采用 KDS 0.5PPM 高精度 TCXO;
◆豐富的數據輸出速率:115200bps(默認) [可選: 9600/38400];
◆輸出語句:NMEA 0183 V3.0/UBX 協議;
◆支持可調的數據刷新率:1Hz-10Hz;
◆自主研發設計天線振子,保證相位中心與幾何中心重合,將天線對測量誤差的影響 降低到最小; ◆支持選配 A-GPS 服務、地磁傳感器、壓力傳感器;
◆GPS、BD、GLONASS 混合引擎可選;
◆采用無鉛工藝制造,符合 RoHS 標準。
它支持兩種協議:
NMEA 0183 通用協議 和 UBX通信協議
?
2. NMEA 0183 協議
NMEA 0183 是美國國家海洋電子協會(National Marine Electronics Association)為海用電子設備制定的標準格式。目前業已成了 GPS 導航設備統一的 RTCM(Radio Technical Commission for Maritime services)標準協議。NMEA0183 協議采用 ASCII 碼來傳遞 GPS 定位信息,我們稱之為幀。幀格式形如:
$aaccc,ddd,ddd,?,ddd*hh(CR)(LF)
1. “$”:幀命令起始位
2. “aaccc”:地址域,前兩位為識別符(aa),后三位為語句名(ccc)
3. “ddd,ddd”:數據內容
4. “*”:校驗和前綴(也可以作為語句數據結束的標志)
5. “hh”:校驗和(check sum),$與*之間所有字符 ASCII 碼的校驗和(各字 節做異或運算,得到校驗和后,再轉換 16 進制格式的 ASCII 字符)
6. “(CR)(LF)”:幀結束,回車和換行符
主要命令:
序號 命令 說明 最大幀長(Byte)
1 $GPRMC 推薦定位信息 70
2 $GPGGA GPS 定位信息 72
3 $GPVTG 地面速度信息 34
4 $RHXZ 地磁信息 24
5 $GPGSA 當前衛星信息 65
6 $GPGSV 可見衛星數 210
7 $GPGLL 大地坐標信息
指令解析:
1.$GPRMC(推薦定位信息,Recommended Minimum Specific GPS/Transit Data) $GPRMC 語句的基本格式如下: $GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1)UTC 時間,hhmmss(時分秒)
(2)定位狀態,A=有效定位,V=無效定位
(3)緯度 ddmm.mmmmm 度分)
(4)緯度半球 N(北半球)或 S(南半球)
(5)經度 dddmm.mmmmm 度分)
(6)經度半球 E(東經)或 W(西經)
(7)地面速率(000.0~999.9 節)
(8)地面航向(000.0~359.9 度,以真北方為參考基準)
(9)UTC 日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0 度,前導位數不足則補 0)
(11)磁偏角方向,E(東)或 W(西) (12)模式指示(A=自主定位,D=差分,R=RTK,E=估算,N=數據無效) 舉例如下: $GPRMC,084103.00,A,2233.395441,N,11356.556656,E,0.035,,220618,,,A*7A
?
2.$GPGGA(GPS 定位信息,Global Positioning System Fix Data) $GPGGA 語句的基本格式如下(其中 M 指單位 M,下同): $GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)( LF)
(1)UTC 時間,格式為 hhmmss.ss;
(2)緯度,格式為 ddmm.mmmmmm 度分格式);
(3)緯度半球,N 或 S(北緯或南緯);
(4)經度,格式為 dddmm.mmmmmm 度分格式);
(5)經度半球,E 或 W(東經或西經);
(6)GPS 狀態,0=未定位,1=非差分定位,2=差分定位;
(7)正在使用的用于定位的衛星數量(00~12)
(8)HDOP 水平精確度因子(0.5~99.9)
(9)海拔高度(-9999.9 到 9999.9 米)
(10)大地水準面高度(-9999.9 到 9999.9 米)
(11)差分時間(從最近一次接收到差分信號開始的秒數,非差分定位,此項為 空)
(12)差分參考基站標號(0000 到 1023,首位 0 也將傳送,非差分定位,此項為 空) 舉例如下: $GPGGA,070343.90,2236.360900,N,11352.021690,E,1,04,68.82,-72.83,M,- 1.00,M,,*68
3.$GPVTG(地面速度信息,Track Made Good and Ground Speed) $GPVTG 語句的基本格式如下: $GPVTG,(1),T,(2),M,(3),N,(4),K,(5)*hh(CR)(LF)
(1)以真北為參考基準的地面航向(000~359 度,前面的 0 也將被傳輸)
(2)以磁北為參考基準的地面航向(000~359 度,前面的 0 也將被傳輸)
(3)地面速率(000.0~999.9 節,前面的 0 也將被傳輸)
(4)地面速率(0000.0~1851.8 公里/小時,前面的 0 也將被傳輸)
(5)模式指示(A=自主定位,D=差分,E=估算,N=數據無效) 舉例如下: $GPVTG,,T,,M,0.106,N,0.196,K,A*2A
?
4.$RHXZ(地磁傳感器信息) $RHXZ 語句的基本格式如下: $RHXZ,(1),(2),(3) *hh(CR)(LF)
(1)地磁傳感器 X 軸的 16 進制值(高位在前,如 0057 表示 0x0057,范圍 0000~FFFF,前面的 0 也將被傳輸)
(2)地磁傳感器 Y 軸的 16 進制值(高位在前,如 FE6E 表示 0xFE6E,范圍 0000~FFFF,前面的 0 也將被傳輸)
(3)地磁傳感器 Z 軸的 16 進制值(高位在前,如 0210 表示 0x0210,范圍 0000~FFFF,前面的 0 也將被傳輸) 舉例如下: $RHXZ,0057,FE6E,0210*45
?
5.$GPGSA(當前衛星信息) $GPGSA 語句的基本格式如下: $GPGSA,(1),(2),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(4),(5 ),(6)*hh(CR)(LF)
(1)模式,M = 手動,A = 自動。
(2)定位類型,1=未定位,2=2D 定位,3=3D 定位。
(3)正在用于定位的衛星號(01~32)
(4)PDOP 綜合位置精度因子(0.5-99.9)
(5)HDOP 水平精度因子 1(0.5-99.9)
(6)VDOP 垂直精度因子(0.5-99.9) 舉例如下: $GPGSA,A,3,26,02,05,29,15,21,,,,,,,2.45,1.49,1.94*0E
?
6.$GPGSV(可見衛星數,GPS Satellites in View) $GPGSV 語句的基本格式如下: $GPGSV,(1),(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF)
(1)GSV 語句總數。
(2)本句 GSV 的編號。
(3)可見衛星的總數(00~12,前面的 0 也將被傳輸)。
(4)衛星編號(01~32,前面的 0 也將被傳輸)。
(5)衛星仰角(00~90 度,前面的 0 也將被傳輸)。
(6)衛星方位角(000~359 度,前面的 0 也將被傳輸)
(7)信噪比(00~99dB,沒有跟蹤到衛星時為空)。
注:每條 GSV 語句最多包括四顆衛星的信息,其他衛星的信息將在下一條 $GPGSV 語句中輸出。
舉例如下: $GPGSV,3,1,12,02,39,117,25,04,02,127,,05,40,036,24,08,10,052,*7E $GPGSV,3,2,12,09,35,133,,10,01,073,,15,72,240,22,18,05,274,*7B $GPGSV,3,3,12,21,10,316,31,24,16,176,,26,65,035,42,29,46,277,18*7A
?
7.$GPGLL(定位地理信息,Geographic Position) $GPGLL 語句的基本格式如下: $GPGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF)
(1)緯度 ddmm.mmmmm(度分)
(2)緯度半球 N(北半球)或 S(南半球)
(3)經度 dddmm.mmmmm(度分)
(4)經度半球 E(東經)或 W(西經)
(5)UTC 時間:hhmmss(時分秒
(6)定位狀態,A=有效定位,V=無效定位
(7)模式指示(A=自主定位,D=差分,E=估算,N=數據無效)
舉例如下: $GPGLL,2308.28715,N,11322.09875,E,023543.00,A,A*6A
?
3. NMEA0183 協議校驗參考程序
unsigned char Calc_GPS_Sum( const char* Buffer ) { unsigned char i, j, k, sum; sum = 0; for ( i = 1; i < 255; i++ ) //i 從 1 開始是閃過$開始符 { if ( ( Buffer[i] != '*' ) && ( Buffer[i] != 0x00 ) ) //判斷結束符 { sum ^= Buffer[i];//GPS 校驗和算法為 XOR } else { break; } } j = Buffer[i + 1];//取結束符后兩位字符 k = Buffer[i + 2]; if ( isalpha( j ) ) //判斷字符是否為英文字母,為英文字母時返回非零值,否則返回零 { if ( isupper( j ) ) //判斷字符為大寫英文字母時,返回非零值,否則返回零 { j -= 0x37;//強制轉換為 16 進制 } else { j -= 0x57;//強制轉換為 16 進制 } } else { if ( ( j >= 0x30 ) && ( j <= 0x39 ) ) { j -= 0x30;//強制轉換為 16 進制 } } if ( isalpha( k ) ) //判斷字符是否為英文字母,為英文字母時返回非零值,否則返回零 { if ( isupper( k ) ) //判斷字符為大寫英文字母時,返回非零值,否則返回零 { k -= 0x37;//強制轉換為 16 進制 } else { k -= 0x57;//強制轉換為 16 進制 } } else { if ( ( k >= 0x30 ) && ( k <= 0x39 ) ) { k -= 0x30;//強制轉換為 16 進制 } } j = ( j << 4 ) + k; //強制合并為 16 進制 // gps_sum = j; if ( sum == j ) { return Valid; //校驗和正常 } else { return Invalid; //校驗和錯誤 } }?
4.GPS模塊測試軟件
gps模塊可以使用u-center測試軟件來測試,可以支持串口和網口兩種方式。
也可以使用SSCOM串口來采集GPS數據保存到文件使用
5.相關軟件下載
數字地球軟件下載地址:https://download.csdn.net/download/xipengbozai/19774250
GPS測試軟件下載地址:https://download.csdn.net/download/xipengbozai/19774233
GPS數據轉換工具:https://download.csdn.net/download/xipengbozai/19774213
?
附圖(數字地球截軟件截圖)
總結
以上是生活随笔為你收集整理的GPS定位及通信协议解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讨厌的任意门事件,删了会出系统提示:安装
- 下一篇: GridView的DataFormatS