Ntrip version 1.0 Basic

Ntrip(Networked Transport of RTCM via Internet Protocol)とは

NtripはRTCM(Radio Technical Commission for Maritime Services)で規定されているインターネット上でGNSSデータを送信するためのプロトコルです。 GNSS単独測位ではメートル級の誤差が生じるのですが、NtripでGNSSデータを受信し測位することによりセンチメートル級の誤差に収めることが可能となります。


GNSSデータの送受信において、Ntripは次の3つの要素で構成されますが、本ページではNtripCaster - NtripClient間の動作を中心に説明していきます。

要素
概要
NtripServer GNSSデータの送信元。要はGNSSレシーバー(基準点)のこと。
GNSSレシーバーで受信されたGNSSデータはNtripCasterに送信され、NtripCasterでレシーバー単位にMountPointとして配信される。
NtripCaster GNSSレシーバから見ればGNSSデータの送信先、GNSS差分データ利用者からみればデータの送信元。
Casterという名前であるが、Server/Clientの区別でいえばどちらから見てもServerである。
NtripClient GNSS差分データ利用者
本ページの対象

f:id:misatospring:20190531224847j:plain

シーケンス

NtripCaster - NtripClient間のプロトコルはHTTP1.1に準じています。 NtripClientはGNSSデータ取得対象のGNSSレシーバー(基準点)をmountpointとしてRequest-URIに設定し、Requestを送信します。

f:id:misatospring:20190531224853j:plain

GET <mountpoint> HTTP/1.1<CR><LF>
user-Agent: NTRIP<product/comment><CR><LF>
Accept: */*<CR><LF>
Connection: close<CR><LF>    // NTRIPはnonpersisntent connectionのみサポート
<CR><LF>
ICY 200 OK<CR><LF>

Requestフォーマットが適正でない場合(mountpointが/等)、NtripCasterは保持するmountpointの一覧であるsourcetableを返します。

f:id:misatospring:20190531224919j:plain

GET / HTTP/1.1<CR><LF>
user-Agent: NTRIP<product/comment><CR><LF>
Accept: */*<CR><LF>
Connection: close<CR><LF>
<CR><LF>
SOURCETABLE 200 OK<CR><LF>
Server: *****<CR><LF>
Date: Fri, 31 May 2019 08:00:00 UTC<CR><LF>
Content-Type: text/plain<CR><LF>
Content-Length: ****<CR><LF>
<CR><LF>
STR;mountpoint;id;format;format-details,,,,,,<CR><LF>    // moutpointのrecord
STR;mountpoint;id;format;format-details,,,,,,<CR><LF>
ENDSOURCETABLE<CR><LF>
<CR><LF>

sourcetableはフリーのNtripCasterにブラウザでアクセスすると参照できます。


初期アクセスにおいてはmountpointは未知のはずなので、sourcetableを取得し最寄りのmountpointを調べそのmountpointのGNSSデータを取得する流れとなります。
ただ上記rtk2goのようなフリーのNtripCasterは実際の基準点をmountpointとして開放していますが、ネットワーク型RTKの商用サービスでは仮想基準点(VRS: Virtual Referrence Station)をmountpointとしていることが多いため、利用者が最寄りのmountpointを指定することができません。
この場合、HTTP Requestのbody部にNMEAフォーマットで自身の概略位置を設定することにより仮想基準点のGNSSデータを取得します。

GET /VRS HTTP/1.1<CR><LF> // Request-URIはVRSのmountpoint名
user-Agent: NTRIP<product/comment><CR><LF>
Accept: */*<CR><LF>
Connection: close<CR><LF>
<CR><LF>
$GPGGA, Time(UTC),,,,   // NMEAフォーマットで自位置を指定
<CR><LF>

実装における注意点

  • HTTP認証はBasic認証、Digest認証をサポートする
  • ICY 200 OK受信後GNSSデータを継続して受信するが、必ずしも次パケットからGNSSデータ(バイナリデータ)のストリームが始まるわけではない。同一パケット内にストリームが含まれることもある。