MALIBによる高精度GPS測位

category: gnss

はじめに

GPSなど測位衛星の精度を高める一つの方法として、衛星軌道や衛星時計の誤差を外部情報により補正する補強があります。準天頂衛星みちびきは、高精度補強情報として、CLAS(シーラス、centimeter-level augmentation service)とMADOCA-PPP(マドカ・ピーピーピー、multi-GNSS advanced orbit and clock augmentation - precise point positioning)の2種類の補強信号を1278.75 MHzにて放送しています。

MADOCA-PPPを利用する公式ソフトウェアとして、内閣府より提供されているMADOCALIB(マドカリブ、MADOCA-PPP test library)があります。

一方、宇宙航空研究開発機構(JAXA: Japan Aerospace Exploration Agency)は、MADOCA-PPPを利用する別の公式ソフトウェアとして、2024年10月にMALIB(MADOCA-PPP Library)をリリースしました。

MADOCALIB v1.2は以前に試しましたので、今回はMALIBを試します。

MALIB vs. MADOCALIB

MALIBは、特に、リアルタイム測位と、u-blox、Septentrio、Magellan JapanのL6信号受信機の生データを直接処理できる点に特徴があります。現時点でのMALIBとMADOCALIBの比較を次にまとめます。

項目MALIBMADOCALIB
提供元JAXA Satellite Navigation UnitQZSS Strategy Office(内閣府)
公表バージョン1.0.01.3
ベースRTKLIB 2.4.3 b34RTKLIB 2.4.3 b34
解析PPP, PPP-ARPPP, PPP-AR
処理リアルタイム、後処理後処理
電離層補正(PRN200, 201)-yes (v.1.2より)

MALIBとMADOCALIBともに、サンプルデータが付属していますので、パソコンのみでも動作確認ができます。L6信号受信機、または、みちびき公式ページにあるMADOCA-PPPのアーカイブリアルタイムストリームを利用すれば、コードと搬送波位相からなる擬似距離を出力できる自らのGNSS受信機でも試すことができます。

MALIBのインストール

ここでは、インターネット接続のあるRaspberry Pi 4(メモリ8GB、Raspberry Pi OS Lite 64-bit)、内閣府のGNSSリアルタイムストリーム(Mirai)、MADOCA-PPPリアルタイムストリームを利用します。グラフプロットのときにのみ、Windows PCにて、RTKLIBRTKPLOTを用います。すなわち、自らのGNSS受信機なしに、MALIBを試します。

Miraiのアカウント作成についてはgnss.go.jp 公開GNSS観測データの利用を、MADOCA-PPPの利用申請についてはMADOCALIBによる高精度GPS測位をご参照ください。

ここで利用するRaspberry Pi 4にてuname -aを実行した結果は次のとおりです。

uname -a
Linux rpi3d 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64 GNU/Linux

Raspberry Piにログインして、任意のディレクトリでgit cloneによりMALIBをダウンロードし、rtkrcv(リアルタイム測位アプリケーション)とrnx2trkp(後処理測位アプリケーション)をビルドします。

git clone https://github.com/JAXA-SNU/MALIB mailb
cd malib/app/consapp/rtkrcv/gcc
make
make install
cd ../../rnx2rtkp/gcc
make
make install
cd ../../../..

MALIBの2つのアプリケーションは、binディレクトリ以下にインストールされます。docディレクトリ内にMALIBの説明書manual_MALIB1.0.0.pdfがあります。

プレイバックファイルを用いたリアルタイム測位

ここでは、サンプルとして用意されたプレイバックファイルを用いてリアルタイム測位を行います。

このMALIBダウンロードディレクトリからrtkrcvを実行します。設定ファイルbin/rtkrcv.confには、測位計算に必要なアンテナ位相ファイルやサンプルデータファイルのパスが相対パス表記で記述されています。この設定ファイルを利用するとき、rtkrcvにこれらのファイルを見つけさせるため、このディレクトリから実行します。

bin/rtkrcv -o bin/rtkrcv.conf
start
sol 1 

-oオプションは、設定ファイルbin/rtkrcv.confを読むためのオプションです。rtkrcvを実行すると、rtkrcv>なるプロンプトが表示されますので、startと入力してリアルタイム測位のプレイバックを開始します。sol 1と入力すると、測位結果が逐次的に表示されます。

sol 1のリアルタイム測位結果表示を終了するにはctrl+cを入力します。rtkrcvを終了するには、ctrl+dを入力後にctrl+cを入力します。

測位開始直後は、コードと搬送波位相からなる擬似距離、衛星軌道、衛星時刻を補強したPPP(precise point positioning)解の表示が現れました。しばらく測位計算を続けると、コードと搬送波位相との関係の曖昧さ(矛盾)を解決するPPP-AR(ambiguity resolution)が動作して、FIX解表示が現れました。

この設定ファイルにより、測位結果はdata/out/rtkrcv_test.posに出力されます。この測位結果ファイルをRTKLIBのWindowsアプリケーションのRTKPLOTで表示します。2次元平面の軌跡(ground track)は次のとおりです。

MALIB 1.0 rtkrcv example

この軌跡をFIX解に限定して表示し直します。

MALIB 1.0 rtkrcv example

静止目標に対して14センチメートル程度のばらつきで座標が求まりました。

次に座標の時間経過を表示します。この3枚の図は、上から東西方向、南北方向、高さ方向の座標変化をそれぞれ表します。紫色のプロットがPPP解、緑色のプロットがFIX解です。

MALIB 1.0 rtkrcv example

測位開始から16分程度で、FIX解に到達しました。

後処理による測位

次にサンプルデータを用いて後処理解析を行います。ここで用いる設定ファイルはbin/rnx2rtkp.confです。後処理アプリケーションrnx2rtkpには、-kオプションにてこの設定ファイルを指定し、さらにdataディレクトリにある航法ファイル.nav、観測ファイル.obs、MADOCA-PPP L6ファイル.l6を引数として指定します。

bin/rnx2rtkp -k bin/rnx2rtkp.conf data/*.{nav,obs} data/*.l6

画面上には逐次的に測位結果が表示されました。注目すべきところは、中央部分のQ(quality)を表す列の6(PPP解)から1(FIX解)に変わるところと、最も右側の列にあるレシオ値(解の信頼度)が徐々に大きくなるところです。

qualityを表す列の右の列は測位に用いた衛星数を表します。ここではほぼ21衛星が利用されていました。

この出力をオプション-o solution.posにてファイルsolution.posに出力し、同様にRTKPLOTにて平面軌跡と座標時間変化を表示します。

MALIB 1.0 rnx2rtkp example (解全体) MALIB 1.0 rnx2rtkp example (FIX解に限定) MALIB 1.0 rnx2rtkp example (座標の時間変化)

リアルタイム測位と比較して、この後処理解析では、やや短い10分程度でFIX解を得ることができました。また、リアルタイム処理と後処理とで、FIX解のばらつきの様子がやや異なりました。この1時間分のサンプルデータの後処理にかかる時間は2分程度でした。

$ time bin/rnx2rtkp -k bin/rnx2rtkp.conf data/*.{nav,obs} data/*.l6 -o solution.pos

real	2m13.401s
user	2m12.833s
sys	    0m0.505s

リアルタイムストリームを用いたMADOCA-PPP測位

ここで、リアルタイムストリームによるMADOCA-PPP測位を行います。Miraiの受信機マップを開き、受信機をひとつ選び、その座標をMADOCA-PPP測位します。測位には航法データ必要なため、全300箇所を超える受信点から、Typeタブ検索により、航法データを出力する稼働中のものを選びます。

mirai observation point search

ここでは、一例として、神戸にある受信点のリアルタイムストリーム(マウントポイント名QKBP00JPN)を選択しました。

mirai observation point Kobe

サンプル設定ファイルをcp bin/rtkrcv.conf .にてインストールディレクトリにコピーし、このファイルを修正します。データ入力切替に関する修正は次のとおりです。

inpstr1-type       =ntrip       # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripcli,7:ftp,8:http,10:udpsvr,11:udpcli)
inpstr1-path       =CHANGEME-MIRAI-ID:CHANGEME-MIRAI-PASSWORD@ntrip.go.gnss.go.jp/QKBP00JPN
inpstr1-format     =rtcm3        # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:javad,9:nvs,10:binex,11:rt17,12:sbf,14:sp3,21:l6e)
inpstr3-type       =ntrip       # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripcli,7:ftp,8:http,10:udpsvr,11:udpcli)
inpstr3-path       =CHANGEME-MDCPPP-ID:CHANGEME-MDCPPP-PASSWORD@CHANGEME-MDCPPP-SVR/CHANGEME-MDCPPP-PRN209
inpstr3-format     =l6e         # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:javad,9:nvs,10:binex,11:rt17,12:sbf,14:sp3,21:l6e)

ここで、

  • CHANGEME-MIRAI-IDCHANGEME-MIRAI-PASSWORDを自らのMiraiのIDとパスワードに、
  • CHANGEME-MDCPPP-IDCHANGEME-MDCPPP-PASSWORDCHANGEME-MDCPPP-SVRCHANGEME-MDCPPP-PRN209を自らのMADOCA-PPPリアルタイムストリームサービスのID、パスワード、サーバURL、PRN 209(204、205、206でも可)マウントポイント名に、

それぞれ置き換えてください。MALIBは、inpstr3-formatl6eに設定することで、MADOCA-PPP L6フォーマットを直接、解釈できます。

また、結果をカレントディレクトリのsolution.posファイルに出力するように設定します。

outstr1-path       =./solution.pos

実は、いつもFIX解が得られるとは限りませんでした。PPP解のまま1時間が経過することもあれば、しばらくして座標が出力されなくなることもありました。ここでは、衛星システムをGPSとみちびきに限定します。

pos1-navsys        =17         # (1:gps+2:sbas+4:glo+8:gal+16:qzs+32:bds+64:navic)
pos2-arsys         =25         # (1:gps+8:gal+16:qzs)

この設定ファイルを用いて、次のコマンドを実行します。

bin/rtkrcv -o rtkrcv.conf -s -t 3

オプションの意味は次のとおりです。

  • -s は、rtkrcvプロンプトでstartコマンドを入力することなく、直ちに測位を開始するオプションです。
  • -o rtkrcv.conf は、設定ファイルrtkrcv.confを読み込むオプションです。
  • -t 3 は、デバッグ情報をファイルrtkrcv_[date and time].trace([date and time]は実行日時)に出力するオプションです。

Raspberry Piに2画面ログインして、1つの画面でrtkrcvを実行して動作確認しながら、もう1つの画面でデバッグ情報や測位結果を観測します。

測位開始後、左画面では、rtkrcvに次のコマンドを入力しています。

  1. ssr 1: 補強情報を1秒間隔で逐次表示します。補強情報が確認できたらctrl+cでこの逐次表示を終了します。
  2. obs: 観測データを表示します。
  3. nav: 航法データを表示します。
  4. stat: 測位の状態を表示します。
  5. sol 1: 測位結果を1秒間隔で逐次表示します。

一方、右画面では、次のコマンドを入力しています。

  1. tail -f rtkrcv_[date and time].trace: デバッグ情報をtailコマンドで逐次表示します。bashやzshでは、rtkrcv_を入力した後にtabキーを押すことで、ファイル名の続きが補完されます。
  2. tail -f solution.pos: 測位結果を逐次表示します。

実はこのとき、しばらく測位計算をした後に解の出力が停止し、結局はFIX解を得られませんでした。デバック情報にはlarge chi-squaredというメッセージが残されていました。上述の設定ファイルにて利用衛星システムからGalileoを除外したのは、このエラーを軽減するためです。利用システムに、GPSとみちびき以外が含まれると、このエラーが出やすくなるようです。私の手順に誤りがあるのかもしれません。

次の結果は、翌日に再び同一条件で測位を行い、FIX解を得たときのものです。

MALIB 1.0 rtkrcv realtime plot for QKBP00JPN Kobe (解全体) MALIB 1.0 rtkrcv realtime plot for QKBP00JPN Kobe (FIX解に限定) MALIB 1.0 rtkrcv realtime plot for QKBP00JPN Kobe (座標の時間変化)

このリアルタイムストリームを用いて、30分程度でFIX解を得ることができました。この設定において、測位に用いた衛星数は11程度でした。リアルタイムストリームを収録して、プレイバックによって、より良い設定を探し出そうと思います。

まとめ

MADOCA-PPPリアルタイム測位ライブラリMALIBを試しました。MALIBには、リアルタイム測位が可能で、多くのL6信号受信機のデータをそのまま利用することができる利点があります。オプション指定など、ノウハウを蓄えることにより、安定した測位ができそうです。

今後、Pocket SDR FE4CH、MALIB、PixHawk、CuGo V3コンプリートキットを組み合わせて、MADOCA-PPP自動運転クローラの製作にチャレンジしてみようと思います。