u-blox ZED-F9PとDrogger VRSCを用いたリアルタイムCLAS測位
はじめに
RTK(reltime kinematic)によりセンチメートルオーダー測位を行うためには、緯度、経度、楕円体高の既知な基準局にて観測したGNSS(global navigation satellite system)信号観測データが必要になります。みちびきから放送されているCLAS(centimeter level augmentation system)情報を用いれば、日本国内に限定されるものの、この事実上の基準局(VRS: virtual reference station)データを作り出すことができます。しかしながら、CLASを利用するためには、RTK機器に加えて、現在ではまだ一般的ではないL6周波数帯の受信機、アンテナ、CLASデコーダ、CLASソフトウェアが必要になります。
2021年2月末に発売されたビズステーションのDrogger VRSC(VRS by CLAS)は、これらをパッケージ化して、そのVRS観測データを作り出すハードウェアです。これに加えて、搬送波位相の出力できるGNSS受信機、RTKLIBなどのソフトウェアがあれば、特定のRTK基準局に頼ることなくRTK測位を行えます。VRSCは、L6信号を受信できるアンテナつきで税込み54,780円と安価です。
このVRSCは、ビズステーションのRWP受信機やDG-PRO1RW(S)受信機と組み合わせて利用することが前提になっていますが、動作に必要な情報はテクニカルガイドに公表されています。ここでは、その情報をもとにして、u-blox ZED-F9PにてVRSCを利用しました。
実は、東京海洋大学の高須先生は、すでにVRSCとZED-F9Pとの接続実験をされています。私は、今になって、やっとできましたので、その詳細をまとめます。
なお、本来、VRSCはRWP受信機とともに用いるものですので、本記事内容をビスステーションに問い合わせることはご遠慮願います。これは、私の技術的興味により行なっていることで、VRSCとZED-F9P開発キットとを組み合わせて利用することを推奨するものではありません(2021-12-29追記)。
機器のセットアップ
ZED-F9Pの設定
自宅の窓側にてL6D信号を受信することになったため、VRSC本体やu-blox ZED-F9P受信機とは別に、外部アンテナ(Beitian BT-200)と、スプリッタ(Mini Circuits ZAPD-2DC-S+)を用意しました。また、動作確認のために、さらに、Raspberry Pi 3、Windows 10 PC、Androidスマートフォンも準備しました。
Raspberry PiとWindows 10 PCには、RTKLIB 2.4.3b34をインストールしました。Raspberry Piは、VRSCへのWi-FiによるNTRIP Casterへの接続のために用いるので、有線ネットワークにも接続しています。また、有線ネットワークに接続したWindows 10 PCには、u-bloxのu-centerもインストールしています。
Androidスマートフォンには、Drogger VRSCをインストールしました。Androidスマーフォンは必須ではありませんが、バージョンアップや確認のためにあると便利です。
VRSCを利用するためには、ZED-F9P形式での衛星航法データRXM-SFRBX
(receiver manager - subframe data next generation)メッセージとNAV-PVT
(navigation - position, velocity, and timing)メッセージをNTRIP形式にてVRSCに送信しながら、RTCM形式でのVRS観測データをNTRIP形式にてVRSCから受信しなければなりません。このZED-F9PとVRSC VRSとの間でRTK測位を行えるようにするために、メッセージRXM-RAWX
(receiver manager - multi GNSS raw measurement data)もオンにします。そのために、Raspberry PiにZED-F9Pを接続し、次のスクリプトでRTKLIB strstrを実行しました。VRSCは、このNAV-PVT
に含まれる座標をもとにして、VRS観測データを作成します。(2022-12-29修正)
#!/bin/bash
#----------
DEV=ttyF9P
PORT=2001
STR2STR=/home/pi/exec/str2str
#----------
$STR2STR \
-in serial://$DEV:230400 \
-out tcpsvr://:$PORT \
-b 1 \
> /dev/null 2>&1 &
-b
はstr2strの双方向(bi-directional)モードのオプションで、出力1番ポートの情報を入力ポートに与えることができます。これにより、Windows PC上で動作するu-centerにて、このZED-F9PをRaspberry Piを経由してリモート設定できます。
NAV-PVT
を出力するためには、u-centerのView
メニューからConfiguration View
ウィンドウを開き、MSG (Messages)
と進み、Message
からNAV-PVT
を探してUSBポートにチェックを入れます。
すぐに左下のSend
ボタンを押します。u-centerでは、毎回、Send
ボタンを押して設定を反映させます。
次に、Message
からRXM-SFRBX
(receiver mode - subframe extended?)を探してUSBポートにチェックを入れます。同様に、左下のSend
ボタンを押します。
また、測位間隔を5秒(レート0.2 Hz)に延ばします。ZED-F9Pでは、最小測位間隔を0.2秒(レート5 Hz)にできるので、もったいない気がしますが、仕方がありません。左側のメニューのRATE (Rates)
を探し、Measurement Period [ms]
に5000
を入力して、左下のSend
ボタンを押します。
最後に、VRSCへの負荷を軽減するため、必要のないメッセージをオフにします。CLASが補強対象とする衛星システムは、GPS、みちびき、Galileoなので、GNSS
にてこれら以外の衛星システムをオフにし、Send
ボタンを押します。また、NMEA-0183メッセージをオフにするために、MSG
のF-xxのメッセージ出力のチェックボックスを外してSend
ボタンを押します。(2022-12-29追記)
これらの設定を終えたら、左側のメニューCFG (Configuration)
のSave current configuration
ラジオボタンを選択して、左下のSend
ボタンを押します。ここで、u-centerを終了します。
VRSCの状態確認
VRSCに付属のUSBケーブルで電源供給すると、Wi-Fi SSIDVRSC
が現れます。初期パスワードは12345678
です。私は、Raspberry PiのUSBポートからVRSCに電源供給しました。これは、Raspberry Pi上にシリアルポートが現れ、CLAS補強情報がUSBシリアルポート経由にて取り出せることを期待してのことですが、そのようなことはできませんでした。AndoidにてBluetoothデバイスの検索を行うとVRSC
が現れるのでペアリングを行い、アプリDrogger VRSC
からWi-Fiパスワードの変更や、CLASやMADOCAの生データ出力や、ファームウェア更新などを行うことができます。VRSCは、Allystar HD9310オプションCとは異なり、CLASとMADOCAを同時に受信復号ができるようです。
Raspberry PiからVRSCへの接続
Raspberry PiをVRSCのWi-Fiに接続するため、/etc/wpa_supplicant/wpa_supplicant.conf
を次のように設定しました。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="VRSC"
psk="12345678"
}
その後、Raspberry Piを再起動して、Wi-Fi接続を有効にします。ip li
にてwlan0デバイスに192.168.4.2のアドレスが割り当てられていることを確認します。VRSCのIPアドレスは、192.168.4.1になります。VRSCは、Espressif SystemのESP32マイコンを利用していることが、Raspberry Piのログに残っていました。
VRSCにNAV-PVT
とRXM-SFRBX
を注入しながらRTCMメッセージを受け取るために、Raspberry PiにてRTKLIB str2strを活用します。
#!/bin/bash
#------------------------------------------
IP=192.168.4.1
RPORT=2001
LPORT=9999
STR2STR=/home/pi/exec/str2str
#------------------------------------------
$STR2STR \
-in ntrip://$IP/VRSC \
-out tcpsvr://:$LPORT \
-b 1 \
> /dev/null 2>&1 &
sleep 2
$STR2STR \
-in tcpcli://localhost:$RPORT \
-out tcpcli://localhost:$LPORT \
> /dev/null 2>&1 &
# EOF
結局、3つのstr2strプロセスをバックグランドで実行しました。Raspberry PiのTCPポート2001にてu-blox ZED-F9Pの設定確認や変更ができ、TCPポート9999にRTCM形式のVRS観測メッセージが出力されます。データの流れは次の通りです。
このVRS観測メッセージを基準局メッセージとみなして、職場のRTK基準局座標を推定します。
Windows PC上のRTKNAVIによるRTK測位
VRSCからRTCMメッセージが出力されることを確認するために、RTKLIBのSTRSVRを利用します。
(0) InputにTCP Client
を選択して、OptにてRaspberry PiのIPアドレスとポート番号(ここでは9999)を設定します。Start
を押し、上部にある四角いボタンを押し、解読するメッセージとしてRTCM 3
を選択すると、そのRTCMメッセージを確認できます。
RTCM 1005
(座標)、RTCM 1074
GPS MSM4(観測データ)、RTCM 1094
Galileo MSM4、そして、RTCM 1114
QZSS MSM4が出力されていることがわかります。自宅にてこの実験を行っていますので、RTCM 1005
に私の自宅の座標が設定されています。
次に、このVRSを用いてRTK測位を行います。RTKLIBのRTKNAVIを起動し、ウィンドウ上部にあるI
ボタンを押して、入力ストリームを設定します。
Input Streamの(1) Roverとして、TypeにNTRIP Client
を選び、Optに観測したい機器の情報(Address ntrip.phys.info.hiroshima-cu.ac.jp
、Port 80
、Mouont Point OEM7
)を設定しました。一方、(2) Base Stationとして、TypeにTCP Client
、OptにはRaspberry PiのIPアドレスとポート番号を入力しました。ここでは、観測点として、広島市立大学のRTK基準局を選択しましたが、皆様の観測機器、またはこのZED-F9Pを利用することも当然、可能です。
OptionのSetting 1は次のように設定しました。
項目 | 内容 |
---|---|
Positioning Mode | Kinematic |
Frequencies | L1+L2 |
Elevation Mask | 20 |
Ionosphere Correction | Broadcast |
Troposhere Correction | Saastamoinen |
Satellite Ephemeris | Broadcast |
Satellite | GPS, Galileo, QZSS |
これは電離層補正として、2周波観測結果(Iono-Free LC)ではなく、放送信号(broadcast)によるクロバッチャモデルを利用する設定です。全てのGPS衛星が2周波以上の放送をしているとは限らず、Iono-Free LCではそのような衛星の測位結果が無駄になるからです。他の設定は、RTKNAVIの初期値です。利用できる全ての衛星システムを選択していますが、GPSとQZSSだけ、またはGPSだけにした方がフィックスしやすいこともあります。
Setting 2は次のようにしました。
項目 | 内容 |
---|---|
Integer Ambiguity Resolution | Instanteneous |
Min Ratio to Fix Ambiguity | 2.0 |
これは、1測位データごとに整数値不確定性を解き、Fixと判断するレシオテストを通常の3から2にする設定です。早く収束させるためです。結果は次の通りです。
観測点からこの仮想基準局との基線長は約4 kmです。現在のタイプ12メッセージを含むCLASからは最大17衛星のVRS観測データが作成されます。ここでは、16から17のVRS観測データが作成されました。
仮想的に作られた基準局なので、その信号強度に意味はありませんが、全ての衛星信号強度が同じと表示されるところが一般のRTKではあり得なく、興味深いです。一方、レシオ値は2から40程度の間を変動しています。通常のRTKでは、しばらく動作させるとレシオ値は最大値である999になることが多いですが、たった2 kbit/sの情報で作られた基準局信号なのでこれが限度かも知れません。
VRS観測データの更新レートは1 Hzでした。
VRSCの初期値では、NAV-PVT
を供給するZED-F9Pの座標が1 km動くたびに基準局座標を更新するようになっていますが、Androidアプリでこの距離を変更することも可能なようです。
VRSCからのRTCMメッセージが出力されないとき
(2021-12-29追記)
VRSCの3つのLEDがすべて点灯していれば、RTCMメッセージ出力が出ているものと考えられます。
中央の緑色LEDが点滅しているならば、VRSCのWi-Fi接続ができていないようです。Raspberry PiのWi-Fi設定を確認してください。
右側のオレンジLEDが点滅しているならば、L6D信号は受信できているものの、VRSが作成できていません。u-centerにてRaspberry PiのTCPポート2001に接続し、View
の中のView Message
ウィンドウからMSG (Message)
を選択し、NAV-PVT
メッセージとRXM-SFRBX
メッセージが出力されていることを確認してください。また、Configuration View
ウィンドウのRATE
のMeasurement Periodが5000 msになっていることを確認してください。
受信状態がよくないと、VRSCはVRSを作成してくれないようです。アンテナとその設置場所は重要です。私は、自宅に多周波数アンテナを屋外設置して試していますが、設置環境がよくないためか、しばしばRTCM出力が停止します。
長時間観測していると、オレンジのLEDが点灯状態になり、RTCMメッセージが出力されることがあります。また、VRSCをリセットしたら、RTCM出力が復活することもありました。