LoginSignup
2
1

More than 1 year has passed since last update.

NTRIP CasterServer の構築

Last updated at Posted at 2021-08-13

はじめに

RTKと呼ばれるcm単位精度で測位可能なGNSS(全球測位衛星システム:一般にGPSと呼ばれることが多い)の測位方法がある。このRTKは、「相対測位」と呼ばれる測定方法で、固定局と移動局の2つの受信機の間で情報をやりとりして補正することで、単独測位よりも精度の高い位置情報を得ることができ、農機や建設機械、ドローンの自動航行など、正確な位置情報を求められる分野で活用が期待されています。

このRTK測位では基準局からのデータを移動局で利用しますが、このデータを中継する Casterサーバを用いることで、より効率的・安定定的に測位が可能となります。このCasterサーバとして、無料のrtk2goを利用する以外に、自ら設置することができます。

Ntrip Casterと呼ばれるCasterサーバのソースは、有償でBKG Professional Casterが購入できるほか、githubにいくつかのプロジェクトがあり、dockerに対応したもの、や、goによる実装などが入手可能です。このメモでは、Recentry updated で一番上に表示された、T.Suenaga氏のプロジェクトを利用しました。

BKG社の有償のソースはバージョンが上がってますが、同等の手順で構築可能です。具体的にソースのどの部分が改良されているかは把握していません。

動作環境

  • UbuntuServer 20.04LTS
  • NtripCaster Version 0.1.5 (githubから取得)

Ubuntuの設定

OSのバージョン確認

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"

パッケージ類のアップデートと必要なパッケージのインストール

$ apt update
$ apt upgrade

一時的なものだと思うが、glibの依存関係で g++ のインストールに失敗していたので、glibc6をロールバック。
emacsは省略可

$ apt install emacs
$ apt install git make gcc rtk-lib
$ apt install g++
----エラー----
$ apt install libc6=2.31-0ubuntu9.2
$ apt install g++

作業用ユーザアカウントの作成

$ adduser foo

$HOME/.ssh/ に公開鍵を保存。対応する秘密書を用いてSSHアクセスできる様にしておく。

sshの設定

/etc/ssh/sshd_configの以下の3箇所を修正。port変更は省略可。

Port 65522
PermitRootLogin no
PasswordAuthentication no

sshd を再起動すると、秘密公開鍵を設定していないとログインできないので、事前に動作確認しておくこと

systemctl restart sshd

ファイヤーウォールの設定

ポート10050は、Zabbix監視用なので省略可。

$ sudo ufw status
Status: inactive
$ sudo ufw default deny
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
$ sudo ufw allow 2101/tcp
Rules updated
Rules updated (v6)
$ sudo ufw allow 10050/tcp
Rules updated
Rules updated (v6)
$ sudo ufw allow 65522/tcp
Rules updated
Rules updated (v6)
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

設定内容の確認

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
2101/tcp                   ALLOW       Anywhere                  
10050/tcp                  ALLOW       Anywhere                  
65522/tcp                  ALLOW       Anywhere                  
2101/tcp (v6)              ALLOW       Anywhere (v6)             
10050/tcp (v6)             ALLOW       Anywhere (v6)  
65522/tcp (v6)             ALLOW       Anywhere (v6)             

別途、利用しているネットワーク環境でポート2101への通信ができることを確認し、さくらのVPSならばコントロールパネルで「パケットフィルタ」の設定で2101を開放、などの必要な設定を行う。

NtripCasterの導入

ソースの取得

今回は、githubで公開されているソースを利用

$ https://github.com/tomohirosuenaga/ntripcaster.git

コンパイル

$ cd ntripcaster
$ ./configure  --prefix=/usr/local/ntripcaster
[snip]
Ok, everything seems ok. Now do 'make'.
You can then run make install to install as you specified
$ make
[snip]
gcc  -g -O2 -Wall  -o ntripcaster  main.o client.o source.o connection.o log.o sock.o threads.o utility.o avl.o timer.o ntrip_string.o  -lm  -lpthread
[snip]
make[2]: Leaving directory '/home/foo/work/ntripcaster'

インストール

$ sudo make install
[snip]

正常すれば、--prefix で指定したディレクトリに以下の4ファイルが配置される

bin/ntripcaster
conf/mountpos.conf.dist
conf/ntripcaster.conf.dist
conf/sourcetable.dat.dist

NtripCasterの設定

設定ファイルのコピー

$ cd /usr/local/ntripcaster
$ sudo cp mountpos.conf.dist mountpos.conf
$ sudo cp ntripcaster.conf.dist ntripcaster.conf
$ sudo cp sourcetable.dat.dist  sourcetable.dat

NTRIP caster の設定 ntripcaster.conf

以下の部分を修正

location JPTEST
rp_email info@example.com
server_url http://[host]

port 2101
#port 8000

NTRIP serverリスト sourcetable.dat

u-blox ZED-F9Pを接続する場合は以下の行を追加

STR;MYPOINT;myref;RTCM3.0;.....;2;GPS+GLONASS+Galileo+Beidou;;JPN;34.40;135.50;0;0;u-bloxZED-F9P;none;N;N;8000;Demo

マウントポイント、及び緯度軽度は適当です。

動作確認

Ntirp キャスターの起動

サービスの起動

$ cd /usr/local/ntripcaster/bin
$ ./ntripcaster 
NtripCaster Version 0.1.5 Initializing...
NtripCaster comes with NO WARRANTY, to the extent permitted by law.
  :

ポート2101のプロセスを確認

$ lsof -i:2101 -P
COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ntripcast 10370      foo    5u  IPv4  48966      0t0  TCP *:2101 (LISTEN)

継続運用するなら、systemctlで管理できるservice化をしておく方が良い。

Ntirp サーバからの接続

テスト用に善意の基準局サーバを使わせていただく場合、下記コマンドの -in を ntrip://RTK2go.com:2101/XXXX (XXXXは要修正)とし、登録先のパスワードは、ntripcaster.confで設定したもの、ホスト名はキャスターが動いているサーバに変更。

$ str2str -in [ntrip uri] -out ntrips://:[password]@[host]:2101/MYPOINT
stream server start
2021/05/12 00:20:29 [-----]          0 B       0 bps 
2021/05/12 00:20:34 [CC---]       1620 B    2628 bps (0) [utrip uri] (1) [host]/MYPOINT
  :

これは一時的なテスト用であり、実際にはタイムラグによりRTK測位ができない可能性が高い。

Ntrip クライアントからの接続

$ str2str -in ntrip://www.geortk.jp:2101/MYPOINT -out file://./ntriptest.log
stream server start
2021/05/12 00:54:36 [-C---]          0 B       0 bps 
2021/05/12 00:54:41 [CC---]       1475 B    2400 bps (0) www.geortk.jp/MYPOINT 
2021/05/12 00:54:46 [CC---]       3062 B    2745 bps (0) www.geortk.jp/MYPOINT 

マウントポイントの確認

以下のコマンドで、sourcetable.dat の内容が確認できるが、httpプロトコルが古いため、ほとんどのブラウザでは表示できない。

curl http://[host]:2021

参考

参考リンク

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1