Ntrip協議簡介(轉)
原文地址:https://blog.csdn.net/sinat_19447667/article/details/67637167
1 什麽是Ntrip?
CORS(Continuously Operating Reference Stations)就是網絡基準站,通過網絡收發GPS差分數據。用戶訪問CORS後,不用單獨架設GPS基準站,即可實現GPS流動站的差分定位。
訪問CORS系統,就需要網絡通訊協議。NTRIP( Networked Transport of RTCM via Internet Protocol)是CORS系統的通訊協議之一。
2 系統組成
使用NTRIP通訊協議的CORS系統,其組成請參考下圖
圖1 Ntrip系統組成
NtripSource 用來產生GPS差分數據,並把差分數據提交給NtripServer
NtripServer 負責把GPS差分數據提交給NtripCaster
NtripCaster 差分數據中心,負責接收、發送GPS差分數據
NtripClient 登錄NtripCaster後,NtripCaster把GPS差分數據發送給它
NtripSource 和 NtripServer 一般已經集成到一臺GPS基準站內,GPS基準站產生差分數據(扮演著NtripSource的角色),然後再通過網絡發送給NtripCaster(扮演著NtripServer的角色)
NtripSource 和 NtripServer也可以分開:GPS基準站產生差分數據,然後通過串口發送給一個程序,這個程序再把差分數據發送給NtripCaster。這裏GPS基準站扮演著NtripSource的角色,程序扮演著NtripServer的角色。
NtripCaster一般就是一臺固定IP地址的服務器,它負責接收、發送差分數據。給NtripClient發送差分數據時有兩種方案:一是直接轉發NtripSource產生的差分數據;二是通過解算多個NtripSource的差分數據,為NtripClient產生一個虛擬的基準站(即VRS)。
NtripClient一般就是GPS流動站。登錄NtripCaster後,發送自身的坐標給NtripCaster。NtripCaster選擇或產生差分數據,然後發送給NtripClient。這樣GPS流動站即可實現高精度的差分定位。
3 NtripServer
NtripServer訪問NtripCaster的步驟
1、與NtripCaster建立TCP連接;
2、給NtripCaster發送如下數據(↙表示\r\n即0DH和0AH):
SOURCE letmein /Mountpoint↙ Source-Agent: NTRIP NtripServerCMD/1.0↙ ↙ |
上面的Mountpoint是掛載點名稱,註意它前面的/不能省略。NtripServer可能有多個,掛載點用來區分它們。
上面的letmein是此掛載點對應的密碼。沒有密碼,隨便一個程序都能連上掛載點,整個系統就很容易受到惡意攻擊。
"Source-Agent: NTRIP NtripServerCMD/1.0"這一行不是必需的。它說明了NtripServer的軟件名稱和版本號。這裏的軟件名稱為NtripServerCMD,版本號為1.0。
3、NtripCaster給NtripServer的回復
掛載點、密碼均有效,返回:
ICY 200 OK↙ |
掛載點或密碼無效,返回:
ERROR - Bad Password↙ |
4、NtripServer給NtripCaster發送差分數據
NtripCaster回復ICY 200 OK後,NtripServer就可以給NtripCaster發送差分數據了。
4 NtripClient
NtripClient訪問NtripCaster,一般有兩個目的:獲取源列表、獲取差分數據。下面分別進行介紹。
4.1 獲取源列表
多個NtripServer給NtripCaster發送差分數據,這樣NtripCaster獲得的差分數據就有多個。NtripClient在獲取差分數據之前,需要知道差分數據有幾個?分別是什麽格式的?……這就需要獲取源列表,獲取步驟如下:
1、與NtripCaster建立TCP連接;
2、給NtripCaster發送如下數據:
GET / HTTP/1.0↙ User-Agent: NTRIP GNSSInternetRadio/1.4.10↙ Accept: */*↙ Connection: close↙ ↙ |
"User-Agent: NTRIP GNSSInternetRadio/1.4.10"說明了NtripClient的軟件名稱和版本號。這裏的軟件名稱為GNSSInternetRadio,版本號為1.4.10。
3、NtripCaster將返回如下數據,然後自動斷開TCP連接
SOURCETABLE 200 OK↙ Server: NTRIP Trimble NTRIP Caster↙ Content-Type: text/plain↙ Content-Length: 441↙ Date: 02/Jun/2010:14:13:32 UTC↙ ↙ STR;RTCM23;RTCM23;RTCM 2.3;1(1),3(10),18(1),19(1);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMR;CMR;CMR;CMR;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMRP;CMRP;CMR+;CMR;2;GPS;SGNET;CHN;31;121;1;1;Trimble GPSNet;None;B;N;0;;↙ STR;DGPS;DGPS;RTCM 2.1;RTCM 2.1;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;RTCM3X;RTCM3X;RTCM 3.X;1004(1),1005/1007(5),PBS(10);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ ENDSOURCETABLE↙ |
源列表數據以SOURCETABLE開頭,以ENDSOURCETABLE結尾。
200 OK 表示一切正常。
"Server: NTRIP Trimble NTRIP Caster"是對NtripCaster軟件的說明。
"Date: 02/Jun/2010:14:13:32 UTC"表示當前時刻。其格式並不固定,如:
Date: Sun, 01 May 2016 08:40:39 中國標準時間↙ |
以下內容就是源列表數據。"Content-Length: 441"表示源列表數據的字節數為441,含每行結尾的\r\n。
STR;RTCM23;RTCM23;RTCM 2.3;1(1),3(10),18(1),19(1);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMR;CMR;CMR;CMR;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMRP;CMRP;CMR+;CMR;2;GPS;SGNET;CHN;31;121;1;1;Trimble GPSNet;None;B;N;0;;↙ STR;DGPS;DGPS;RTCM 2.1;RTCM 2.1;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;RTCM3X;RTCM3X;RTCM 3.X;1004(1),1005/1007(5),PBS(10);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ |
源列表數據中,一行表示一個掛載點。每行以分號分隔,其含義請見下表
序號 |
示例 |
說 明 |
1 |
STR |
類型STR/CAS/NET,這裏只對STR進行說明 |
2 |
RTCM23 |
掛載點(Mountpoint) |
3 |
RTCM23 |
identifier |
4 |
RTCM 2.3 |
差分數據格式 |
5 |
1(1),3(10) |
數據1(1秒輸出一次);數據3(10秒輸出一次) |
6 |
2 |
載波相位數據 0—無 1—單頻 2—雙頻 |
7 |
GPS |
導航系統,如:GPS、GPS+GLO、EGNOS |
8 |
SGNET |
網絡 |
9 |
CHN |
國家 |
10 |
31 |
緯度 |
11 |
121 |
經度 |
12 |
1 |
是否需要發送NMEA。0—不需要 1—需要 |
13 |
1 |
基站類型:0—單基站 1—網絡 |
14 |
SGCAN |
產生此數據流的軟件名稱 |
15 |
None |
壓縮算法 |
16 |
B |
訪問保護 N—None B—Basic D—Digest |
17 |
N |
Y/N |
18 |
0 |
比特率 |
19 |
上文提到,NtripCaster給NtripClient發送差分數據時分兩種情況:
1、直接轉發NtripSource產生的差分數據。在這種情況下,NtripClient只要指定掛載點即可;
2、通過解算多個NtripSource的差分數據,為NtripClient產生一個虛擬的基準站。在這種情況下,NtripClient不僅要指定掛載點,還要發送自身的坐標給NtripCaster,NtripCaster根據這個坐標才能產生虛擬基準站。
NtripClient給NtripCaster發送自身坐標,用到的就是NMEA裏的GGA數據。上表的第12個數據說明了是否需要給NtripCaster發送GGA數據,0表示不需要,1表示需要。
4.2 獲取差分數據
NtripClient獲取差分數據的過程如下:
1、與NtripCaster建立TCP連接;
2、給NtripCaster發送如下命令
GET /RTCM23 HTTP/1.0↙ User-Agent: NTRIP GNSSInternetRadio/1.4.10↙ Accept: */*↙ Connection: close↙ Authorization: Basic VXNlcjpQd2Q=↙ ↙ |
上面的RTCM23是掛載點名稱。
VXNlcjpQd2Q=是用戶名、密碼的Base64編碼,解碼後就是User:Pwd。也就是說用戶名為User、密碼為Pwd,它們之間以冒號分隔。
3、NtripCaster的回復
如果用戶名、密碼、掛載點均有效,將返回如下數據:
ICY 200 OK↙ Server: Trimble-iGate/1.0↙ Date: Wed, 18 May 2016 07:20:55 中國標準時間↙ ↙ |
200 OK 表示一切正常。註意:有的服務器只返回200 OK,其余數據行不返回;有的服務器返回的200 OK後面沒有回車、換行。
如果用戶名、密碼、掛載點無效,將返回如下數據:
HTTP/1.0 401 Unauthorized↙ |
4、給NtripCaster發送GGA數據
GGA數據的示例如下
$GPGGA,230331,3115.27393,N,12133.89226,E,1,09,1.0,19.31,M,1,M,,*7F↙ |
註意:
1)如上文所述,有的掛載點需要發送GGA數據,有的掛載點不需要發送GGA數據;
2)UTC時刻格式必須為hhmmss,如:80331是不行的,必須改為080331;
3)校驗碼必須正確。
5、NtripCaster收到GGA數據後,將給NtripClient發送差分數據。
Ntrip協議簡介(轉)