準天頂衛星みちびきの測位ライブラリCLASLIBの利用(その3:ssr2obsによるVRS-RTK測位)

category: gnss
tags: clas qzss

VRSを用いたRTK測位

前回のCLASLIBによるPPP測位の続きです。今回は、CLASLIBのssr2obsを試します。

CLASLIBのssr2obsは、 任意の空間に仮想的な基準局VRS(virtual reference station)を作成するものです。これに軌道(NAV: navigation)ファイル、CLAS情報ファイル、およびVRSを作成したい空間座標を与えると、その観測擬似距離(OBS: observation)ファイルを得ることができます。

ステップ1:CLASLIB ssr2obsによるVRS観測擬似距離ファイルの作成

前回のCLASLIB ssr2osrを実行するためにRTKLIBにて作成した、NAVファイルとCLAS情報ファイルを再利用します。これらは、util/ssr2osr/ディレクトリに20200505d.nav2020126D.l6なる名前で保存されているとします。このステップでは、この2ファイルを用いて、VRSでの観測擬似距離ファイルvrs20200505d.obsを作成します。

また、utils/ssr2obs/ディレクトリには、コンパイル済みのssr2obsがあることを仮定します。さらに、ssr2osrの実行のときと同様に作成したRTKLIBのrnx2rtkpが、このディレクトリにコピーされているとします。RTKLIBのrnx2rtkpのコンパイルにはgfortranが必要ですが、少々の変更でCコンパイラでも作成できます。このコンパイルのために、予めlib/iers/gcc/ディレクトリでmakeを実行してiers.aを作成しておきます。

はじめに、ssr2obs設定ファイルobs.confを用意します。

元のサンプル設定ファイルからの変更点は、使用周波数(pos1-frequency)をL1帯・L2帯の2周波数にしたことと、測位結果として予想されるVRS座標を私のRTK基準局のものに変更したこと、の2点です。最終的な測位はRTKにより行うため、この座標は大まかなものでも、ここから離れたところのものでも構いません。

これらの準備ができたら、ssr2obsを実行します。

./ssr2obs -k ./obs.conf ../ssr2osr/20200505d.nav ../ssr2osr/2020126D.l6 -o vrs20200505d.obs -r -ts 2020/05/05 03:00:00 -te 2020/05/05 04:00:00

オプション-kは設定ファイルの指定を、-oは出力OBSファイルの指定を、-rはRINEX(ライネックス)形式でのOBSファイル出力指定を、-tsおよび-teは開始日時と終了日時の指定をそれぞれ表します。 NAVファイルには観測期間の情報はありませんので、残念ながら毎回、開始・終了日時を指定しなければなりません。 NAVファイルには、衛星に関する時刻情報は含まれますが、OBSファイルを作成するために、毎回、開始・終了時刻を指定しなければならないようです(2020年6月13日訂正)。

ステップ2:RTKLIB rnx2rtkpによるVRS-RTKの実行

次に、RTKLIB版rnx2rtkpを実行します。RTK測位の前に、受信機のOBSファイルとNAVファイルを用いて単独測位できることを確認します。

./rnx2rtkp -p 0 -t -u 20200505d.obs 20200505d.nav

画面に多くの測位結果が現れれば、単独測位ができたといえます。オプション-p 0は単独測位を、-tはGPS時刻表示ではなく年月日・時分秒での表示を、-uはUTC時刻表示を、それぞれ表します。

また、先ほど作成したVRSのOBSファイルでも単独測位できることを確認します。結果のファイルへの出力を表すオプション-oを用いなければ、標準出力(画面上)に結果が出力されます。

./rnx2rtkp -p 0 -t -u vrs20200505d.obs 20200505d.nav

共に単独測位可能なことを確認したら、このVRSを用いたRTK測位を実行します。RTK測位を行う際には、rnx2rtkpの-lオプションにより、先に決定したVRSの座標を与えなければなりません。VRSのOBSファイルにその座標が含まれないからです。

./rnx2rtkp -p 2 -h -t -u ../ssr2obs/20200505d.obs ../ssr2obs/20200505d.nav vrs20200505d.obs -l 34.44010565 132.41478259 233.05 -o 20200505d.llh

実行中、Q=1(Fix解)やQ=2(Float解)の文字がチラチラと現れたら成功です。しばらくQ=0(測位失敗)のままでしたら、VRSのOBSファイルに情報が含まれず、VRSファイル作成失敗です。オプション-p 2はkinematic測位を、-hはkinematic測位でfix and holdモードの利用を表します。後者はRTKでFix解を得やすくするために設定しました。

この結果から、時刻、緯度、経度、楕円体高、経過秒数の他に、解の状態Qを表す第6列目の値をawkで抽出します。

awk '{print $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $14;}' 20200505d.llh

実行結果は次の通りです。

program :       rnx2rtkp        ver.2.4.3       b33
inp     file    :       ../ssr2osr/20200505d.obs
inp     file    :       ../ssr2osr/20200505d.nav
inp     file    :       vrs20200505d.obs
obs     start   :       2020/05/05      02:59:12.0
obs     end     :       2020/05/05      04:00:11.0
ref     pos     :       34.440105650    132.414782590

(lat/lon/height=WGS84/ellipsoidal,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=
#       of      satellites)
UTC     latitude(deg)   longitude(deg)  height(m)       Q       age(s)
02:59:28.000    34.440113166    132.414779905   232.3191        2       -29.00
02:59:29.000    34.440112852    132.414779921   232.3097        2       -28.00
02:59:30.000    34.440113023    132.414779813   232.3585        2       -27.00
02:59:31.000    34.440113334    132.414779834   232.3978        2       -26.00
02:59:32.000    34.440113290    132.414779938   232.4193        2       -25.00
... snip ...
02:59:54.000    34.440117295    132.414779707   232.7228        2       -3.00
02:59:55.000    34.440117528    132.414779730   232.7227        2       -2.00
02:59:56.000    34.440106283    132.414783758   232.9184        1       -1.00
02:59:57.000    34.440106378    132.414783738   232.9163        1       -0.00
02:59:58.000    34.440106434    132.414783733   232.9125        1       -0.00
02:59:59.000    34.440106465    132.414783748   232.9092        1       -0.00
03:00:00.000    34.440106576    132.414783740   232.9076        1       -0.00
03:00:01.000    34.440106605    132.414783742   232.9058        1       -0.00
03:00:02.000    34.440106524    132.414783742   232.9084        1       -0.00
03:00:03.000    34.440106532    132.414783755   232.9054        1       -0.00
... snip ...
03:59:42.000    34.440105899    132.414783964   232.9055        1       0.00
03:59:43.000    34.440105859    132.414783949   232.9120        1       1.00
03:59:44.000    34.440105864    132.414783983   232.9231        1       2.00
03:59:45.000    34.440105842    132.414783972   232.9249        1       3.00
03:59:46.000    34.440105820    132.414783992   232.9331        1       4.00
03:59:47.000    34.440105838    132.414784006   232.9333        1       5.00
03:59:48.000    34.440105832    132.414783998   232.9355        1       6.00
... snip ...

この観測擬似距離ファイルは、UTCでの予定開始時刻の30秒前からデータを記録していますが、この結果はその最初の時刻からFloat解になっていることを示しています。また、5秒前からFix解になり、最後までFix解を維持していました。予定終了時刻の18秒前を最後に補強データが途絶えましたが、Fix解は維持していました。経度の小数点以下6桁目まで固定していることから、10センチメートル程度の精度で座標決定できているようです。すばらしいです。

ssr2obsでは設定ファイルで、rnx2rtkpでは設定ファイルまたはコマンドラインで、VRS座標を与えます。rnx2rtkpでは、多くの作業を設定ファイルなしに行うことができます。VRS座標をコマンドラインにて指定できれば、その座標変更が容易になります。私は、rnx2rtkp.cを参考にし、ssr2obs.cを改変して、コマンドラインで座標指定できるように、-posオプションを追加しました。ssr2obs.cの439行目に以下を追加します。 -p lat,lon,ghtオプションをお使いください(latは緯度、lonは経度、hgtは楕円体高です。2024-05-03訂正)。

        else if (!strcmp(argv[i],"-pos")&&i+3<argc) {
            prcopt.refpos=prcopt.rovpos=0;
            for (j=0;j<3;j++) prcopt.rb[j]=atof(argv[++i]);
            matcpy(prcopt.ru,prcopt.rb,3,1);
        }

RTKLIBは、外部のアプリケーションで、このような拡張ができる仕組みになっています。

実は、他のデータも試してみたのですが、VRS観測擬似距離データが一部の時刻しか作成できないことや、全く作成できないことがありました。

ひとつの失敗例に対して、rnx2rtkpに-x 2オプションを追加して、VRS観測擬似距離データが欠損する理由をトレースファイルに出力させました。

2 04:00:58.00: point pos error (lack of valid sats ns=4)
2 04:00:59.00: point pos error (lack of valid sats ns=4)
2 04:01:00.00: point pos error (lack of valid sats ns=5)

これは、CLASでの可視衛星数不足を示しています。

このときの測定データは、内閣府のPFI事業でお借りした受信機Javad Alpha G3Tと三菱電機AQLOC-Vを使って、アンテナJavad GrAnt G5Tの出力を2分岐して測定したときのものです。上記の可視衛星不足となったときの結果は、そのAlpha G3Tの観測データを処理したものです。この測定において、自動車のルーフにアンテナを取り付けた状態でも、AQLOC-VではFix解を維持できました。静止時での座標出力は、経度の小数点以下7桁目まで固定していて、センチメートルオーダ測位ができたことを示していました。したがって、CLAS測位パラメータを調整すると充分な可視衛星を得られる可能性があります。CLASLIBのソースコードを読み進めてみようと思います。

2020年5月5日現在、CLASの衛星に対する補強情報はサブタイプ8と9にて伝送されています。ssr2obsなどにダンプオプション-dumpをつけてCLAS信号ファイルを観測するとその内容がわかります。サブタイプ8・9での補強対象衛星数は11です。この2020年には、サブタイプ8・9のフォーマットから、サブタイプ12の新フォーマットに移行して、補強対象衛星数が17に増える予定です。新しいCLAS信号を楽しみに、CLAS信号の観測を続けます。


関連記事