GNSS航法メッセージ集約ソフトウェアgalmon

category: gnss

はじめに

測位衛星Galileoの航法メッセージ認証OSNMA(open signal navigation message authentication)を観測した際に、世界中の有志が受信した航法メッセージ集約ストリームを利用しました。

自らの受信機u-blox ZED-F9PにてOSNMAを試したくて、この集約ソフトウェアgalmon(Galileo monitoring)をインストールしました。galmonは、Linux(Raspberry Pi Zeroを含みます)、OSX、OpenBSDで動作します。また、Dockerコンテナ版もあります。対応受信機は、u-bloxとSeptentrioですが、NTRIPのストリームを取り込むこともできます。

galmonは、Galileoの名を冠していますが、Galileoだけでなく、GPS(Global Positioning System)、GLONASS、BeiDou、SBAS(Satellite Based Augmentation System)も扱えます。

今回のPC構成

今回、利用したPCは、

  1. 観測用Raspberry Pi 3 Model B(ZED-F9P接続)
  2. データ収集用PC(Linux仮想マシン、観測データをディスクに保存)
  3. データ処理用Mac mini(galileo-osnmaなどを実行)

の3台です。これらはインターネットに接続されています。これらをすべてRaspberry Piで実行することも可能です。しかし、Raspberry Piのストレージへの頻繁な読み書きを避けたくて、また、使い慣れたPCでデータ処理を行いたくて、このような構成にしました。

将来、ここで収集したデータをgalmon.euにフィードしたいと思います。

観測用Raspberry Piへのgalmonのインストール

galmonのREADME.mdに従い、必要なライブラリをインストールし、ソースコードをコンパイルします。

apt install protobuf-compiler libh2o-dev libcurl4-openssl-dev libssl-dev libprotobuf-dev libh2o-evloop-dev libwslay-dev libncurses5-dev libeigen3-dev libzstd-dev g++

私は、別のRaspberry Piでソースコードをコンパイルして、そのバイナリーファイルのみを転送して実行しました。そのままでは、リンク時にライブラリ不足のエラーが出ますので、実行形式ファイル作成の際に静的ライブラリオプションを付加するようMakefileを修正するか、このlibではじまるファイル名のライブラリを実行するRaspberry Piにインストールする必要があります。

次に、ソースコードをダウンロードして、コンパイルします。このコンパイルには、かなり時間がかかります。

git clone https://github.com/berthubert/galmon --recursive
cd galmon
make

私のu-blox ZED-F9P(USB接続)にアクセスするデバイス名は/dev/ttySF9P(secondary F9P)、データ収集用PCのIPアドレスは192.168.0.1(これは例でして、現実のものとは違います)なので、次のコマンドを実行しました。規定値では、データ収集用PCのTCP/IPポート番号29603にパケットを送信します。

./ubxtool --wait --port /dev/ttySF9P -b 115200 --galileo --gps --glonass --beidou --sbas --station 255 --destination 192.168.0.1 > /dev/null 2>&1 &

ubxtool起動には、ボーレート設定を示す-bオプションが必要でした。ここでは、IDを表す--stationに255を設定しましたが、galmon.euにフィードする際には、ID取得が必要です。ubxtool実行中にはたくさんのメッセージが表示されますので、それらの表示を抑制しています。

データ収集用PCへのgalmonのインストール

観測用Raspberry Piの時と同様に、必要なライブラリをインストールし、ソースコードをダウンロードして、コンパイルします。

そして、観測用Raspberry Piからのパケットをローカルディスク(ディレクトリ./galmon)に保存するnavrecvと、その保存データをネットワークから利用できるようにするnavnexusの2つを起動します。

./navrecv -b :: -s ./galmon > /dev/null 2>&1 &
./navnexus -b :: -s ./galmon > /dev/null 2>&1 &

これで、このPCのTCP/IPポート29601にアクセスすると、収集データを得ることができます。

nc 192.168.0.1 29601 | ./navdump

また、RTKLIBのコマンドラインアプリケーションstr2strなどを用いて、GNSS航法データを含むNTRIPフィードサイトデータをこのデータ収集PCにフィードすることも可能です。

str2str -in ntrip://phys.info.hiroshima-cu.ac.jp/OEM7 | ./rtcmtool --station 254 --destination 192.168.0.1

navparseを用いれば、ウェブブラウザ(ポート番号29599)にて状態監視ができるようですが、私の環境ではブラウザに何も表示されませんでした。nc 192.168.0.1 29599にてGET / HTML/1.0などを入力しても、応答がありませんでした。

自らの観測データによるOSNMA

前回のOSNMA受信実験のフィード先を自らのデータ収集用PCに設定して、galileo-osnmaのgalmon-osnmaを実行します。

nc 192.168.0.1 29601 | RUST_LOG=info cargo run --release OSNMA_PublicKey_20210920133026.pem

OSNMA experiment

自前の設備にて、GalileoのOSNMAを観測できました!

このgalmonは、とても大きなソフトウェアですので、対応していないみちびきを追加するのは難しそうです。まずは、galmonを用いて、Galileoの航法メッセージI/NAVにある、SAR(search and rescue)のフィールド取り出しに挑戦しようと思います。

まとめ

ソフトウェアgalmonと測位衛星受信機u-blox ZED-F9Pを用いて、Galileoの航法メッセージ認証を試しました。自前の設備なので、気兼ねなく長期間観測ができ、便利です。