M5Stack+M5F9PとD9CX1を接続し、みちびきCLAS補正を行う方法

M5StackにM5F9Pを装着したGNSS受信機(以下M5F9P受信機)にNEO-D9C/D9CX1で受信したCLAS補正データを転送し、CLAS測位ができるか試してみました。

転送方法としては、I2Cによる転送とUARTによる転送が考えられますが、I2C用ケーブルにより簡単に接続できる事と回路的な制約から、I2Cによる転送としました。

1.接続

接続は次の画像のように、D9CX1のSMAコネクタにみちびきL6バンドが受信できるアンテナを接続し、スプリッタ出力のMCXコネクタとM5F9PのMCXコネクタを同軸ケーブルで接続します。
M5StackのI2C用ケーブルで、M5Stackの4ピンコネクタとD9CX1のGroveコネクタを接続します。

2.D9CX1の設定

D9CX1のI2Cアドレスは初期値が42(HEX)になっているので、41(HEX)に変更します。
変更するには、D9CX1をUSBコネクタでWindowsパソコンに接続し、u-centerというアプリで行います。
設定方法は「2周波RTKモジュール u-blox ZED-F9P の設定方法」の1~3の項目をご覧ください。

実際の設定画面は次のようになります。
I2Cのアドレスは「CFG-I2C-ADDRESS」というKey Nameで設定します。
この項目で入力する値はアドレスを2倍した値になり、41(HEX)に設定する場合は82(HEX)を指定します。

3.M5Stackモジュールの設定

M5StackおよびM5F9P(ZED-F9P)ではファームウェアのバージョンアップを行います。

M5Stackのファームウェアのバージョンアップ

WindowsのパソコンとM5StackをUSBで接続し、COMポート番号をデバイスマネージャーで調べて下さい。
ファームウェアはm5f9pFW_v1_0_42.zipをダウンロードし、解凍して下さい。
コマンドプロンプトを開き、解凍したフォルダに移動した後、
writeFW COMn
を実行して下さい。nはデバイスマネージャーで調べたポート番号を指定して下さい。

ZED-F9Pのファームウェアのバージョンアップ

M5F9Pに搭載されているZED-F9PのファームウェアのバージョンをHPG1.30以降にアップして下さい。
バージョンアップの方法はZED-F9Pファームウェアのバージョンアップをご覧ください。

4.CLASデータによる測位

M5StackとD9CX1をI2C用ケーブルで接続し、電源を入れると、通常の機能選択モードになります。
Wifiやモデムを利用しないで起動すると、次の画像のように”CLAS=nnn"とD9CX1から受信したデータのバイト数が表示されます。
もし、このデータ項目が表示されない場合はNEO-D9CのI2Cアドレスが違っていないか確認して下さい。

NEO-D9Cから送られてくるデータは1チャンネルあたり272バイトで、2チャンネルありますので通常は544バイトです。
電源オン後、みちびきの信号が捕捉できるまではこのバイト数は0のままです。
何分経っても0のままの場合はアンテナが接続されているか、アンテナの位置から空が十分見渡せるかご確認下さい。

”CLAS="の値が272以上になると、空が開けた位置では、通常、数分以内で、”FIX=”の値が0,1,2と変化します。
2になるとFixという状態で、センチメータ精度の測位データが得られています。
衛星の配置等で、10分経っても”FIX=2"にならない事がありますが、通常は”FIX=1"にはなります。
もし、”FIX=0”のままの場合は、空が完全に開けた場所で確認してみて下さい。

次のグラフはFixした状態で30分間ほどログを取ったものです。
アンテナは固定で、Saveボタンを押してログとして保存したデータを、rtkplotで表示しました。

位置のばらつきは数cmの範囲内に収まっていて、仕様どおりの精度が得られています。

CLASデータによる測位結果

この結果と比較するため、D9Cを接続しないで、通常の基準局データによるRTKのログも取ってみました。
次のグラフがその結果で、CLASに比べ、変動幅が大幅に改善されているのが分かります。
但し、CLASとの変動幅の差は数cmの差ですので、どこまでの精度を必要とするのかで、CLASの評価は変わっててくるかと思います。
基準局データが不要で無線リンク無しで、日本国内であればどこでも数cmの精度が得られるのは素晴らしいインフラが整ったと言えます。

基準局データによる測位

5.RTK測位とCLAS測位の自動切換え

基準局データを使った従来のRTK測位の方が、精度やFixするまでの時間などの点で有利ですので、基準局データが利用できる時には利用し、何らかの理由で基準局データが使えないか途絶えた時に、CLASによる測位に自動的に切り替える事が考えられます。

今回のファームウェアではその機能も実装しました。
切り替える方法は、基準局データが取得できている間は基準局データをZED-F9Pに転送し、基準局データが取得できなくなるとCLASデータを転送するという、単純な方法でいいようです。

次の画像はその切り替えを行った場合のログデータです。

最初は通常のRTK測位を行っていて、”Wifi Off”の時点でWifiルータの電源を落としました。
ZED-F9Pでは基準局データによる測位計算がそのまま1分ほど続き、その後、CLASデータによる測位に切り替わっています。
Wifiルータの電源を入れ、”Wifi On”の時点で基準局データが取得できるようになると、ほぼ瞬時にRTK測位に復帰しています。

座標値の違い

上のグラフで、従来のRTK測位の座標値とCLAS測位の座標値で数十cmの違いがありますが、この違いは元期・今期という、座標値の基準日の違いによるものです。
このRTK測位に使用した基準局の座標値は元期座標で、測位結果も元期座標になります。
一方、CLAS測位では今期座標が得られますので、グラフのようなジャンプが発生します。
自動切換えを行う場合、この座標値の違いは致命的ですので、座標変換を実装しないと実用的にはなりません。

6.基準局データとCLASデータの同時供給

ZED-F9Pに基準局データとCLASデータを同時に供給した場合どうなるかを試してみました。
ZED-F9Pが基準局データを優先的に使用し、CLASデータを無視するのであれば、マイコン側での制御が簡単になります。
次のグラフはその結果です。

このグラフを見るとFix率が97.9%に落ちていて、上記の”基準局データによる測位”のグラフとは全く違う変動をしています。
この結果から補正データを同時に送る事は避けないといけない事が分かりました。

7.ソースコード

ソースコードはm5f9p_src_v1_0_42.zipをダウンロードして下さい。
開発環境はArduino IDEです。