RaspberryPi[12] でRTK

RTK

「RTK」とは『リアルタイムキネマティック』の略で、地上に設置した「基準局」からの位置情報データによって、高い精度の測位を実現する技術のことです。こんかいは、最終的にラズパイで基地局と移動局を作りたいと思っています。今まで、言葉ではGPS、GNSS、Diffrential GPSやRTTKという言葉は知っていましたが、どんな構成になっているのかは全く分からずに、想像で始めたので結構つまずきました。使用したGNSS受信機はu-blox「ZED-F9P」です。

ServerとCaster

想像では、基準局のデータを何らかの方法で移動局に送るんだろうなという考えはあったのですが、調べてみると二つの方法があるようです。一つは、移動局に直接データを送り込む方法。もう一つは、Casterという配信サーバーを介して移動局に送る方法です。Casterは無料で公開しているところがあるので、Casterに自分で作った基地局のデータを登録し、データを送り込めば、自分の移動局で使用することができるようです。この時、基地局をサーバー、移動局をクライアントと呼ぶようですが、Casterを使用した場合は、Casterがサーバーになり、基地局もクライアントとしてCasterに接続に行きます。前者の場合はCasterがないので、基地局サーバーに対して移動局クライアントがRTKデータをもらいに行くので、多分、ここから基地局はサーバーと呼ぶようになったのかなと思います。今回はこの二つの方式を構築することが目的です。まずは、移動局はPC上で動かし、ソフトは有名な u-center を使うことにしました。

まずは、前者のCasterを使わない方式から構築します。当然、サーバーとクライアントなのでIP上でお互いが認識できないといけません。そのためには、ラズパイで構築する基地局とPCで構築する移動局はお互いのIPが認識できる環境が必要です。これを構築するには、三つの方法があると思います。

1.グローバルIPを使用する。

2.ローカルIPを使用する。

3.仮想HUBでローカルIPを使用する。

1番目は、まず現実的にではないでしょう。2番目は自宅や企業内で構築することできますが、実際は移動局と基地局は距離があるので現実的には無理でしょう。3番目は仮想HUBをクラウド上に於けば基地局と移動局はWiFiルータを用意するだけでお互いが見えるローカルIPネットワークが構築できます。なので、この3番目を狙います。既に過去ブログで仮想HUBの構築はできているので、まずは机上で基地局と移動局を作ります。

ラズパイを基地局にするには、「ZED-F9P」をUSBポートに刺します。ラズパイには、RTKLIBをインストールします。./makeall.sh install で /usr/local/bin 配下にインストールされます。

git clone https://github.com/tomojitakasu/RTKLIB.git
cd RTKLIB/app
chmod +x makeall.sh
./makeall.sh clean
./makeall.sh
sudo ./makeall.sh install

基地局として動かすには下記のコマンドを打ち込みます。バッチファイルにしておくのが楽だと思います。IPアドレスはラズパイのIPアドレスです。クライアント(移動局)がこのIPアドレスとポートにアクセスします。仮想HUB動かす場合は、仮想HUB上のIPアドレスになります。

/usr/local/bin/str2str -in serial://ttyACM0:230400#rtcm3 -out tcpsvr://192.168.X.X:2101

これだけで、基地局のサーバーは完成です。起動すると以下のようなメッセージが出ます。まだ、誰もつないでいないので、waiting... が出るだけです。

stream server start
2022/09/02 05:17:22 [CW---]          0 B       0 bps
2022/09/02 05:17:27 [CW---]      50087 B   79466 bps (1) waiting...
2022/09/02 05:17:32 [CW---]      99826 B   80732 bps (1) waiting...
2022/09/02 05:17:37 [CW---]     150177 B   82248 bps (1) waiting...

ここに移動局を接続します。まずは、PC上で構築するので、PCのUSBポートに「ZED-F9P」を刺して、u-center を起動します。u-center でGPSが接続されているポートを設定して、とBaudrateを240300bpsにします。GPSのデータが受信できれば大丈夫です。

次に reciever → Diffrencial GNSS Interface を開きます。
Internet connectionの Serverに ラズパイのIPアドレス、Portに2102と入れます。OKを押すとそれで終わりです。先に基地局のRTKLIBを起動しておかないとエラーが出ます。
ラズパイのメッセージに移動局(PC)のアドレスが表示され、u-center のFix Mode に TIME/DGNSS と出れば完成です。

2022/09/02 05:30:56 [CW---]     270747 B   88091 bps (1) waiting...
2022/09/02 05:31:01 [CC---]     324814 B   85490 bps (1) 192.168.1.6 (u-centerが動いているPCのアドレス)
2022/09/02 05:31:06 [CC---]     379917 B   86705 bps (1) 192.168.1.6
2022/09/02 05:31:11 [CC---]     434192 B   86723 bps (1) 192.168.1.6

Caster

次に、Casterを使用したRTKを作ってみます。
CasterはさくらネットのVPSサーバーで構築しました。Casterは NtripCaster を使用します。フリー版は ntripcaster0.1.5 になります。有料版は2.0.x まであるようですが、1000ユーロもするみたい。
インストールは、「自分用のNTRIP caster をたてる」というサイトに詳しく書かれているのでそれを参考にしてください。Casterの場所を忘れるので転記しておきます。

git clone https://github.com/thpe/ntripcaster.git
cd ./ntripcaster/ntripcaster0.1.5
./configure –prefix=/usr/local
make
sudo make install


注意としては、さくらネットは2101ポートがデフォルトでは閉じているので開けないと動きません。これを見つけるのに時間がかかりました。VPSコンソールのぐオーバルネットワークの場所にパケットフィルターを設定というところがあるので、これで開けてください。

自動起動

自動起動は/etc/rc.local に起動scriptを書きました。必要なファイルを読み込むために一旦、conf フォルダに移動してから、nteripcaster を起動させています。