はじめに
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