DockerからのQZS L6 Tool利用

category: gnss

はじめに

測位衛星信号のリアルタイム把握を目指すオープンソースソフトウェアQZS L6 Tool(Quasi-Zenith Satellite L6 band tool:キューズイエス・エルシックス・ツール)を公開しています。このコードはPythonで記述し、主にmacOSやLinuxからの利用を想定しています。

Docker(ドッカー)を利用することで、WindowsなどからでもQZS L6 Toolなどを利用でき、また、ライブラリの明示的インストールが不要になり管理が簡略化できます。

QZS L6 Tool with Docker

QZS L6 Toolの制限

QZS L6 Toolは、当初、準天頂衛星みちびきがL6周波数帯で放送する高精度測位サービス(CLASMADOCA-PPP)の信号内容把握のために開発したものです。現在、RTCM(Radio Technical Commission for Maritime Services)、Galileo HAS(High Accuracy Service)、BeiDou PPP-B2b(Precise Point Positioning - B2b band)の内容も読めるようにアップデートしました。

QZS L6 Toolは、RTKLIBのstr2strやNetcat(nc)などの外部ツールと連携して利用することを想定しています。このような連携にパイプの仕組みを利用しています。

しかしながら、Windowsのコマンドラインインタープリタ(cmd.exe)やPowerShellでは、そのパイプがバイナリーデータを通さないため、中間データをファイルに保存して、コマンドを逐次実行しなければなりませんでした。

また、実行に特定のPythonバージョンが必要になることがありました。QZS L6 Toolでは、バイナリーデータ解釈のためにbitstringモジュールを利用し、Galileo HASのガロア体での逆行列計算のためにgaloisモジュールを利用しています。頻繁にはないもの、これらのモジュール更新が最新のPythonに追いつかないことがありました。そのため、QZS L6 Toolでは、pyenvvenvなどのPython仮想化環境の利用を推奨していました。

Dockerを利用すれば、これらの制限を回避できます。

Dockerイメージのビルド

Dockerを利用するために、ここではDocker Desktopを選びました。色々と失敗したときに、マウスクリックで、コンテナ終了やイメージ削除ができるからです。Docker Desktopは無料で利用できるソフトウェアですが、企業利用については有料サブスクリプション契約が必要になることもあります。

はじめに、GitHubからQZS L6 ToolをZIPファイルにて、または、gitを用いて、ダウンロードします。

git clone https://github.com/yoronneko/qzsl6tool

WindowsでGitを使われる方は、あらかじめgit config --global core.autocrlf inputを実行しておいてください。Pythonコード行末に、改行CRコードが混入しないようにするためです。

その後、Dockerイメージを、例えばqzsl6toolなどの名前でビルドします。buildコマンドの行末のドット.を忘れないようにしてください。docker imagesコマンドにて、この作成されたイメージ名が現れることを確認します。

cd qzsl6tool
docker build -t qzsl6tool .
docker images

Dockerイメージの実行

動作テスト

はじめに、Dockerイメージが正しく作成されていることを、内部テストにより確認します。イメージが正しく作成されていれば、すべてのテストで緑色のPassedの文字が表示されます。

docker run -it --rm qzsl6tool "cd /root/qzsl6tool/test; ./do_test.sh"

ここで、-itオプションは、対話型であることと、実行後にコンテナを終了することを表します。このiオプションをつけないと、出力がターミナルでないと判断され、白黒表示になります。--rmオプションは、実行後にコンテナをメモリから取り除くことを表します。

NTRIPによる観測データの把握

次に、RTKLIBのstr2strを用いて広島市立大学のGNSS観測局のNovAtel OEM729受信機に接続し、その出力をrtcmread.pyに供給して、そのRTCMデータを解読してみます。

docker run -it --rm qzsl6tool "str2str -in ntrip://ntrip.rnav.info.hiroshima-cu.ac.jp:80/OEM7 2>/dev/null | rtcmread.py"

NTRIPによる補強データの把握

例えば、CLAS補強データを観測するには次のようにします。str2strでAllystar社HD9310C受信機の生データを読み出し、alstread.pyでL6データを抽出して、qzsl6read.pyでL6データを解読します。

docker run -it --rm qzsl6tool "str2str -in ntrip://ntrip.rnav.info.hiroshima-cu.ac.jp:80/CLAS 2>/dev/null | alstread.py -l | qzsl6read.py"

おわりに

Dockerコンテナを利用すると、多くのプラットフォームで動作するようになるだけでなく、普段使いのPCへの影響を小さくすることができて、便利です。


関連記事