NEMA協議的由來
NMEA協議是為了在不同的GPS(全球定位系統)導航設備中建立統一的BTCM(海事無線電技術委員會)標准,由美國國家海洋電子協會(NMEA-The National Marine Electronics Associa-tion)制定的一套通訊協議。GPS接收機根據NMEA-0183協議的標准規范,將位置、速度等信息通過串口傳送到PC機、PDA等設備。
NMEA-0183協議是GPS接收機應當遵守的標准協議,也是目前GPS接收機上使用最廣泛的協議,大多數常見的GPS接收機、GPS數據處理軟件、導航軟件都遵守或者至少兼容這個協議。
不過,也有少數廠商的設備使用自行約定的協議比如GARMIN的GPS設備(部分GARMIN設備也可以輸出兼容NMEA-0183協議的數據)。軟件方面,我們熟知的Google Earth目前也不支持NMEA-0183協議,但Google Earth已經聲明會盡快實現對NMEA-0183協議的兼容。呵呵,除非你確實強壯到可以和工業標准分庭抗禮,否則你就得服從工業標准。
NMEA-0183協議定義的語句非常多,但是常用的或者說兼容性最廣的語句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等。下面給出這些常用NMEA-0183語句的字段定義解釋。
$GPGGA
例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,語句ID,表明該語句為Global Positioning System Fix Data(GGA)GPS定位信息
字段1:UTC 時間,hhmmss.sss,時分秒格式
字段2:緯度ddmm.mmmm,度分格式(前導位數不足則補0)
字段3:緯度N(北緯)或S(南緯)
字段4:經度dddmm.mmmm,度分格式(前導位數不足則補0)
字段5:經度E(東經)或W(西經)
字段6:GPS狀態,0=未定位,1=非差分定位,2=差分定位,3=無效PPS,6=正在估算
字段7:正在使用的衛星數量(00 - 12)(前導位數不足則補0)
字段8:HDOP水平精度因子(0.5 - 99.9)
字段9:海拔高度(-9999.9 - 99999.9)
字段10:地球橢球面相對大地水准面的高度
字段11:差分時間(從最近一次接收到差分信號開始的秒數,如果不是差分定位將為空)
字段12:差分站ID號0000 - 1023(前導位數不足則補0,如果不是差分定位將為空)
字段13:校驗值
$GPGSA
例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
字段0:$GPGSA,語句ID,表明該語句為GPS DOP and Active Satellites(GSA)當前衛星信息
字段1:定位模式,A=自動手動2D/3D,M=手動2D/3D
字段2:定位類型,1=未定位,2=2D定位,3=3D定位
字段3:PRN碼(偽隨機噪聲碼),第1信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段4:PRN碼(偽隨機噪聲碼),第2信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段5:PRN碼(偽隨機噪聲碼),第3信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段6:PRN碼(偽隨機噪聲碼),第4信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段7:PRN碼(偽隨機噪聲碼),第5信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段8:PRN碼(偽隨機噪聲碼),第6信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段9:PRN碼(偽隨機噪聲碼),第7信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段10:PRN碼(偽隨機噪聲碼),第8信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段11:PRN碼(偽隨機噪聲碼),第9信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段12:PRN碼(偽隨機噪聲碼),第10信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段13:PRN碼(偽隨機噪聲碼),第11信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段14:PRN碼(偽隨機噪聲碼),第12信道正在使用的衛星PRN碼編號(00)(前導位數不足則補0)
字段15:PDOP綜合位置精度因子(0.5 - 99.9)
字段16:HDOP水平精度因子(0.5 - 99.9)
字段17:VDOP垂直精度因子(0.5 - 99.9)
字段18:校驗值
$GPGSV
例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
字段0:$GPGSV,語句ID,表明該語句為GPS Satellites in View(GSV)可見衛星信息
字段1:本次GSV語句的總數目(1 - 3)
字段2:本條GSV語句是本次GSV語句的第幾條(1 - 3)
字段3:當前可見衛星總數(00 - 12)(前導位數不足則補0)
字段4:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段5:衛星仰角(00 - 90)度(前導位數不足則補0)
字段6:衛星方位角(00 - 359)度(前導位數不足則補0)
字段7:信噪比(00-99)dbHz
字段8:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段9:衛星仰角(00 - 90)度(前導位數不足則補0)
字段10:衛星方位角(00 - 359)度(前導位數不足則補0)
字段11:信噪比(00-99)dbHz
字段12:PRN 碼(偽隨機噪聲碼)(01 - 32)(前導位數不足則補0)
字段13:衛星仰角(00 - 90)度(前導位數不足則補0)
字段14:衛星方位角(00 - 359)度(前導位數不足則補0)
字段15:信噪比(00-99)dbHz
字段16:校驗值
NMEA0183標准語句另一種表達方式詳解
1、 Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC時間,hhmmss(時分秒)格式
<2> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<3> 緯度半球N(北半球)或S(南半球)
<4> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<5> 經度半球E(東經)或W(西經)
<6> GPS狀態:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的衛星數量(00~12)(前面的0也將被傳輸)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球橢球面相對大地水准面的高度
<11> 差分時間(從最近一次接收到差分信號開始的秒數,如果不是差分定位將為空)
<12> 差分站ID號0000~1023(前面的0也將被傳輸,如果不是差分定位將為空)
2、 GPS DOP and Active Satellites(GSA)當前衛星信息
$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> PRN碼(偽隨機噪聲碼),正在用於解算位置的衛星號(01~32,前面的0也將被傳輸)。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
3、 GPS Satellites in View(GSV)可見衛星信息
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh<CR><LF>
<1> GSV語句的總數
<2> 本句GSV的編號
<3> 可見衛星的總數(00~12,前面的0也將被傳輸)
<4> PRN碼(偽隨機噪聲碼)(01~32,前面的0也將被傳輸)
<5> 衛星仰角(00~90度,前面的0也將被傳輸)
<6> 衛星方位角(000~359度,前面的0也將被傳輸)
<7> 信噪比(00~99dB,沒有跟蹤到衛星時為空,前面的0也將被傳輸)
注:<4>,<5>,<6>,<7>信息將按照每顆衛星進行循環顯示,每條GSV語句最多可以顯示4顆衛星的信息。其他衛星信息將在下一序列的NMEA0183語句中輸出。
4、 Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<1> UTC時間,hhmmss(時分秒)格式
<2> 定位狀態,A=有效定位,V=無效定位
<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<4> 緯度半球N(北半球)或S(南半球)
<5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<6> 經度半球E(東經)或W(西經)
<7> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<8> 地面航向(000.0~359.9度,以真北為參考基准,前面的0也將被傳輸)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
<11> 磁偏角方向,E(東)或W(西)
<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
5、 Track Made Good and Ground Speed(VTG)地面速度信息
$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> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
6、 Geographic Position(GLL)定位地理信息
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF>
<1> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<2> 緯度半球N(北半球)或S(南半球)
<3> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<4> 經度半球E(東經)或W(西經)
<5> UTC時間,hhmmss(時分秒)格式
<6> 定位狀態,A=有效定位,V=無效定位
<7> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
二、 GARMIN定義的語句
7、 Estimated Error Information(PGRME)估計誤差信息
$PGRME,<1>,M,<2>,M,<3>,M*hh<CR><LF>
<1> HPE(水平估計誤差),0.0~999.9米
<2> VPE(垂直估計誤差),0.0~999.9米
<3> EPE(位置估計誤差),0.0~999.9米
8、 GPS Fix Data Sentence(PGRMF)GPS定位信息
$PGRMF,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>*hh<CR><LF>
<1> GPS周數(0~1023)
<2> GPS秒數(0~604799)
<3> UTC日期,ddmmyy(日月年)格式
<4> UTC時間,hhmmss(時分秒)格式
<5> GPS跳秒數
<6> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<7> 緯度半球N(北半球)或S(南半球)
<8> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<9> 經度半球E(東經)或W(西經)
<10> 模式,M=手動,A=自動
<11> 定位類型,0=沒有定位,1=2D定位,2=3D定位
<12> 地面速率(0~1851公里/小時)
<13> 地面航向(000~359度,以真北為參考基准)
<14> PDOP位置精度因子(0~9,四舍五入取整)
<15> TDOP時間精度因子(0~9,四舍五入取整)
9、 Map Datum(PGRMM)坐標系統信息
$PGRMM,<1>*hh<CR><LF>
<1> 當前使用的坐標系名稱(數據長度可變,如“WGS 84”)
注:該信息在與MapSource進行實時連接的時候使用。
10、 Sensor Status Information(PGRMT)工作狀態信息
$PGRMT,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*hh<CR><LF>
<1> 產品型號和軟件版本(數據長度可變,如“GPS 15L/15H VER 2.05”)
<2> ROM校驗測試,P=通過,F=失敗
<3> 接收機不連續故障,P=通過,F=失敗
<4> 存儲的數據,R=保持,L=丟失
<5> 時鍾的信息,R=保持,L=丟失
<6> 振盪器不連續漂移,P=通過,F=檢測到過度漂移
<7> 數據不連續采集,C=正在采集,如果沒有采集則為空
<8> GPS接收機溫度,單位為攝氏度
<9> GPS接收機配置數據,R=保持,L=丟失
注:本語句每分鍾發送一次,與所選擇的波特率無關。
11、 3D velocity Information(PGRMV)三維速度信息
$PGRMV,<1>,<2>,<3>*hh<CR><LF>
<1> 東向速度,514.4~514.4米/秒
<2> 北向速度,514.4~514.4米/秒
<3> 上向速度,999.9~9999.9米/秒
12、 DGPS Beacon Information(PGRMB)信標差分信息
$PGRMB,<1>,<2>,<3>,<4>,<5>,K,<6>,<7>,<8>*hh<CR><LF>
<1> 信標站頻率(0.0,283.5~325.0kHz,間隔為0.5kHz)
<2> 信標比特率(0,25,50,100或200bps)
<3> SNR信標信號信噪比(0~31)
<4> 信標數據質量(0~100)
<5> 與信標站的距離,單位為公里
<6> 信標接收機的通訊狀態,0=檢查接線,1=無信號,2=正在調諧,3=正在接收,4=正在掃描
<7> 差分源,R=RTCM,W=WAAS,N=非差分定位
<8> 差分狀態,A=自動,W=僅為WAAS,R=僅為RTCM,N=不接收差分信號
任何無效的數字將以下划線來代替。
NMEA-0183數據實際舉例:
NMEA-0183數據協議是一個比較復雜的多樣的格式,這里有其中的幾個例子
nmea數據如下:
$GPGGA,121252.000,3937.3032,N,11611.6046,E,1,05,2.0,45.9,M,-5.7,M,,0000*77
$GPRMC,121252.000,A,3958.3032,N,11629.6046,E,15.15,359.95,070306,,,A*54
$GPVTG,359.95,T,,M,15.15,N,28.0,K,A*04
$GPGGA,121253.000,3937.3090,N,11611.6057,E,1,06,1.2,44.6,M,-5.7,M,,0000*72
$GPGSA,A,3,14,15,05,22,18,26,,,,,,,2.1,1.2,1.7*3D
$GPGSV,3,1,10,18,84,067,23,09,67,067,27,22,49,312,28,15,47,231,30*70
$GPGSV,3,2,10,21,32,199,23,14,25,272,24,05,21,140,32,26,14,070,20*7E
$GPGSV,3,3,10,29,07,074,,30,07,163,28*7D
說明:NMEA0183格式以“$”開始,主要語句有GPGGA,GPVTG,GPRMC等
1、 GPS DOP and Active Satellites(GSA)當前衛星信息
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7>
<1>模式 :M = 手動, A = 自動。
<2>定位型式 1 = 未定位, 2 = 二維定位, 3 = 三維定位。
<3>PRN 數字:01 至 32 表天空使用中的衛星編號,最多可接收12顆衛星信息。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
<7> Checksum.(檢查位).
2、 GPS Satellites in View(GSV)可見衛星信息
$GPGSV, <1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8>
<1> GSV語句的總數
<2> 本句GSV的編號
<3> 可見衛星的總數,00 至 12。
<4> 衛星編號, 01 至 32。
<5>衛星仰角, 00 至 90 度。
<6>衛星方位角, 000 至 359 度。實際值。
<7>訊號噪聲比(C/No), 00 至 99 dB;無表未接收到訊號。
<8>Checksum.(檢查位).
第<4>,<5>,<6>,<7>項個別衛星會重復出現,每行最多有四顆衛星。其余衛星信息會於次一行出現,若未使用,這些字段會空白。
3、Global Positioning System Fix Data(GGA)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh
<1> UTC時間,hhmmss(時分秒)格式
<2> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<3> 緯度半球N(北半球)或S(南半球)
<4> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<5> 經度半球E(東經)或W(西經)
<6> GPS狀態:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的衛星數量(00~12)(前面的0也將被傳輸)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球橢球面相對大地水准面的高度
<11> 差分時間(從最近一次接收到差分信號開始的秒數,如果不是差分定位將為空)
<12> 差分站ID號0000~1023(前面的0也將被傳輸,如果不是差分定位將為空)
4、Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC時間,hhmmss(時分秒)格式
<2> 定位狀態,A=有效定位,V=無效定位
<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)
<4> 緯度半球N(北半球)或S(南半球)
<5> 經度dddmm.mmmm(度分)格式(前面的0也將被傳輸)
<6> 經度半球E(東經)或W(西經)
<7> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<8> 地面航向(000.0~359.9度,以真北為參考基准,前面的0也將被傳輸)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
<11> 磁偏角方向,E(東)或W(西)
<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
5、 Track Made Good and Ground Speed(VTG)地面速度信息
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh
<1> 以真北為參考基准的地面航向(000~359度,前面的0也將被傳輸)
<2> 以磁北為參考基准的地面航向(000~359度,前面的0也將被傳輸)
<3> 地面速率(000.0~999.9節,前面的0也將被傳輸)
<4> 地面速率(0000.0~1851.8公里/小時,前面的0也將被傳輸)
<5> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數據無效)
對於確定數據精確度和GPS穩定性,衛星的位置是非常重要的信息。既然GPS精確讀將被詳細地在這兩部分介紹,那么這一部分將主要描述衛星位置和信號的強度。
衛星二十四小時在軌道上運轉着,它們在任一時間、任一地點上都至少有六顆能被用戶看到。衛星不斷地監測地球,這樣就避免出現一些盲點或者衛星無法看到的地 方。就像在天空中找星星一樣,衛星的位置被表示為一個方位角和高程。如前面所述,方位角為直接水平測量。高程測量則為一個與水平面的夾角,其中0°表示水 平,90°表示為“天頂”(或者說是頭頂)。因此,如果設備說衛星的方位角為45°且高程為45°,那么衛星現在的位置就是處於水平的東北方向,高度為一 半的位置。另外對於衛星位置,設備報告每個衛星的“隨機偽代碼”(簡稱PRC),這個數值用來唯一標示一個衛星。
這里有一個關於 $GPGSV 的語句:
$GPGSV,3,1,10,24,82,023,40,05,62,285,32,01,62,123,00,17,59,229,28*70
每條語句包含四部分內容,例如:第一部分是“24,82,023,40”,第二部分是“05,62,285,32”等等。每部分的第一個詞為PRC,第二個詞為衛星高程,跟着為方位角和信號強度。如果這個衛星信息用圖來顯示,那么就如圖 1-1。
(圖 1-1:$GPGSV語句的圖形表示,中心點為當前位置,周邊的圓標示水平面。)
這個語句里最重要的指標應該算是“信號躁聲比(signal-to-noise ratio)”(以下簡稱為SNR)。這個數值標示衛星信號的接收率。
我們知道,衛星是以相同的強度發射信號,但是傳播過程中難免會遇到諸如樹和牆之類的 障礙物,這樣就影響了信號的識別。典型的SNR值在0到50之間,其中50表示非常好的信號。(SNR可以達到99,但是我還從來沒有見過50以上的數據 哦。)。
在圖 1-1里,綠色衛星表示強信號,然而黃色衛星則為中等(在第二部分,我將提供一個方法來實現信號強度的分類)。衛星#1的信號完全被阻擋了。