MALIBによる高精度GPS測位
はじめに
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の比較を次にまとめます。
項目 | MALIB | MADOCALIB |
---|---|---|
提供元 | JAXA Satellite Navigation Unit | QZSS Strategy Office(内閣府) |
公表バージョン | 1.0.0 | 1.3 |
ベース | RTKLIB 2.4.3 b34 | RTKLIB 2.4.3 b34 |
解析 | PPP, PPP-AR | PPP, 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にて、RTKLIBのRTKPLOT
を用います。すなわち、自らの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)は次のとおりです。
この軌跡をFIX解に限定して表示し直します。
静止目標に対して14センチメートル程度のばらつきで座標が求まりました。
次に座標の時間経過を表示します。この3枚の図は、上から東西方向、南北方向、高さ方向の座標変化をそれぞれ表します。紫色のプロットがPPP解、緑色のプロットがFIX解です。
測位開始から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
にて平面軌跡と座標時間変化を表示します。
(解全体) (FIX解に限定) (座標の時間変化)
リアルタイム測位と比較して、この後処理解析では、やや短い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
タブ検索により、航法データを出力する稼働中のものを選びます。
ここでは、一例として、神戸にある受信点のリアルタイムストリーム(マウントポイント名QKBP00JPN
)を選択しました。
サンプル設定ファイルを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-ID
とCHANGEME-MIRAI-PASSWORD
を自らのMiraiのIDとパスワードに、CHANGEME-MDCPPP-ID
、CHANGEME-MDCPPP-PASSWORD
、CHANGEME-MDCPPP-SVR
、CHANGEME-MDCPPP-PRN209
を自らのMADOCA-PPPリアルタイムストリームサービスのID、パスワード、サーバURL、PRN 209(204、205、206でも可)マウントポイント名に、
それぞれ置き換えてください。MALIBは、inpstr3-format
をl6e
に設定することで、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
に次のコマンドを入力しています。
ssr 1
: 補強情報を1秒間隔で逐次表示します。補強情報が確認できたらctrl
+c
でこの逐次表示を終了します。obs
: 観測データを表示します。nav
: 航法データを表示します。stat
: 測位の状態を表示します。sol 1
: 測位結果を1秒間隔で逐次表示します。
一方、右画面では、次のコマンドを入力しています。
tail -f rtkrcv_[date and time].trace
: デバッグ情報をtail
コマンドで逐次表示します。bashやzshでは、rtkrcv_
を入力した後にtab
キーを押すことで、ファイル名の続きが補完されます。tail -f solution.pos
: 測位結果を逐次表示します。
実はこのとき、しばらく測位計算をした後に解の出力が停止し、結局はFIX解を得られませんでした。デバック情報にはlarge chi-squared
というメッセージが残されていました。上述の設定ファイルにて利用衛星システムからGalileoを除外したのは、このエラーを軽減するためです。利用システムに、GPSとみちびき以外が含まれると、このエラーが出やすくなるようです。私の手順に誤りがあるのかもしれません。
次の結果は、翌日に再び同一条件で測位を行い、FIX解を得たときのものです。
(解全体) (FIX解に限定) (座標の時間変化)
このリアルタイムストリームを用いて、30分程度でFIX解を得ることができました。この設定において、測位に用いた衛星数は11程度でした。リアルタイムストリームを収録して、プレイバックによって、より良い設定を探し出そうと思います。
まとめ
MADOCA-PPPリアルタイム測位ライブラリMALIBを試しました。MALIBには、リアルタイム測位が可能で、多くのL6信号受信機のデータをそのまま利用することができる利点があります。オプション指定など、ノウハウを蓄えることにより、安定した測位ができそうです。
今後、Pocket SDR FE4CH、MALIB、PixHawk、CuGo V3コンプリートキットを組み合わせて、MADOCA-PPP自動運転クローラの製作にチャレンジしてみようと思います。