u-blox ZED-F9PとDrogger VRSCを用いたリアルタイムCLAS測位

categories: gnss
tags: clas qzss rtk rtklib

はじめに

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スマートフォンも準備しました。

Equipment photo

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ポートにチェックを入れます。

NAV-PVT in u-center

すぐに左下のSendボタンを押します。u-centerでは、毎回、Sendボタンを押して設定を反映させます。

次に、MessageからRXM-SFRBX (receiver mode - subframe extended?)を探してUSBポートにチェックを入れます。同様に、左下のSendボタンを押します。

RXM-SFRBX in u-center

また、測位間隔を5秒(レート0.2 Hz)に延ばします。ZED-F9Pでは、最小測位間隔を0.2秒(レート5 Hz)にできるので、もったいない気がしますが、仕方がありません。左側のメニューのRATE (Rates)を探し、Measurement Period [ms]5000を入力して、左下のSendボタンを押します。

RATE in u-cener

最後に、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を同時に受信復号ができるようです。

Drogger VRSC Android application

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-PVTRXM-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観測メッセージが出力されます。データの流れは次の通りです。

VRSC connection

このVRS観測メッセージを基準局メッセージとみなして、職場のRTK基準局座標を推定します。

Windows PC上のRTKNAVIによるRTK測位

VRSCからRTCMメッセージが出力されることを確認するために、RTKLIBのSTRSVRを利用します。

STRSVR on Windows PC

(0) InputにTCP Clientを選択して、OptにてRaspberry PiのIPアドレスとポート番号(ここでは9999)を設定します。Startを押し、上部にある四角いボタンを押し、解読するメッセージとしてRTCM 3を選択すると、そのRTCMメッセージを確認できます。

RTCM message in STRSVR

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 ModeKinematic
FrequenciesL1+L2
Elevation Mask20
Ionosphere CorrectionBroadcast
Troposhere CorrectionSaastamoinen
Satellite EphemerisBroadcast
SatelliteGPS, Galileo, QZSS

これは電離層補正として、2周波観測結果(Iono-Free LC)ではなく、放送信号(broadcast)によるクロバッチャモデルを利用する設定です。全てのGPS衛星が2周波以上の放送をしているとは限らず、Iono-Free LCではそのような衛星の測位結果が無駄になるからです。他の設定は、RTKNAVIの初期値です。利用できる全ての衛星システムを選択していますが、GPSとQZSSだけ、またはGPSだけにした方がフィックスしやすいこともあります。

Setting 2は次のようにしました。

項目内容
Integer Ambiguity ResolutionInstanteneous
Min Ratio to Fix Ambiguity2.0

これは、1測位データごとに整数値不確定性を解き、Fixと判断するレシオテストを通常の3から2にする設定です。早く収束させるためです。結果は次の通りです。

VRS-RTK by CLAS

観測点からこの仮想基準局との基線長は約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出力が復活することもありました。