準天頂衛星みちびきの測位ライブラリCLASLIBの利用(その3:ssr2obsによるVRS-RTK測位)
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.nav
と2020126D.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信号の観測を続けます。
関連記事
- CLASLIBによる高精度GPS測位 25th July 2024
- 準天頂衛星みちびきの測位ライブラリCLASLIBの利用(その2:ssr2osr) 8th May 2020
- 準天頂衛星みちびきの測位ライブラリCLASLIBの利用(その1:構成の理解) 7th May 2020