「RTK受信機 ZED-F9P on M5Stackの試作(その2)」 で作製したRTK受信機の改良を行いました。

改良した点は次のとおりです。

1.ハードウェアの変更
・アンテナ端子短絡保護回路の改良
・複数モジュールを装着するための対応
・外部コネクタの役割変更
2.測位レートをボタンで切り替え可能にした。
3.3台のモジュールを同時に使えるようにした。
4.基準局として使えるようにした。
5.Moving Baseに対応した。
6.各種設定をINIファイルで行うようにした。
7.ソフトバンクのcm級測位サービス「ichimill」に対応した。
8.rtk2go.comのソーステーブルから接続先を選択できるようにした。
9.双葉電子の920MHz無線モジュールを使えるようにした。
10.Wifiのアクセスポイント機能を付けた。
11.データ配信のためのサーバおよびクライアント機能を付けた。
12.地図(Google)を表示できるようにした。
13.ブラウザに対応した。
14.画面を回転できるようにした。
15.後処理用のデータを保存できるようにした。

以上の機能を追加したため、M5Stackのメモリが不足し、Bluetooth接続機能が使えなくなりました。
Bluetoothを使う場合は上記の機能を限定したバージョンのソフトで対応する予定です。
温度試験も行いましたのでその結果もご報告致します。

1.ハードウェアの変更

アンテナ端子短絡保護回路

アンテナ端子はショートする可能性があるので、短絡保護回路が必要です。
u-bloxのIntegration Manualに記載の保護回路の問題点は電流制限抵抗が17Ωと大きい事です。
測量用アンテナは40mA程度流れますので電圧降下は0.68Vで、アンテナへの供給電圧は2.6Vとなります。
アンテナの動作電圧は通常3.0V以上なので不足します。
この電流制限抵抗を小さくするため次の図の回路としました。

アンテナ端子短絡保護回路図

この回路では電流制限抵抗は3Ωと小さくでき、電圧降下も0.12V、アンテナへの供給電圧も3.1V程度確保できます。
また、アンテナ端子をショートした時に流れる電流は約80mAに押さえられます。

複数モジュールを装着するための対応

GPSコンパス機能等を実現するには複数のZED-F9Pモジュールを装着できる必要があります。
複数装着した場合、ZED-F9Pモジュールからの出力信号が競合しますので、2台目からのモジュールは出力信号をオフにできなくてはなりません。
そのためにモジュールの基板上にDIPスイッチを設けました。

モジュール基板外観

2、3台目のモジュールはこのDIPスイッチの1番をONにする事で使えるようになります。
通信はI2Cで行う事ができます。
但し、I2Cのアドレスが重複しますので、2台目はアドレスを0x43,3台目は0x44に設定します。

モジュール外観

上の画像は3台装着した場合で、ZED-F9Pモジュールの間には空のモジュールが挿入されています。
これはZED-F9Pモジュールのアンテナコネクタ部分が競合するため、スペースが必要なためです。

外部コネクタの役割変更

外部コネクタ外観

右側のコネクタはJST製の3ピンPHコネクタで、最初のバージョンではZED-F9Pのシリアルポート2に接続してました。
それを今回はM5StackのバスのGP12(出力)とGP35(入力)に接続しました。
バッファを入れる事で、電圧レベルはTTLレベルに対応しました。
これで、基準局データをUARTで取得したり、測位データをUARTで外部に出す事が可能です。
この入出力ピンはUARTだけでなく、単なるデジタルIOポートとしても利用可能です。

2.測位レート

ボタンにより、測位レートを切り替えるようにしました。
利用できる測位レートは1Hz~20Hzで、15Hz及び20Hzで使用する場合は事前に使用する衛星を限定する必要があります。
測位データをSDカードに保存する場合も20Hzで可能ですが、ZED-F9Pモジュールが2台以上になると10Hzまでとなります。
次の図は20Hzで保存したデータをrtkplotで表示したものです。

測位レート図

3.複数モジュールへの対応

モジュール外観

ハードウェアの改良で複数のモジュールが利用できるようになったので、ソフトもそれに合わせて改良しました。
上の画像は3台のモジュールを装着した時の画面です。
左のボタンでSDカードへの保存を切替、中央のボタンで測位レートを変更します。
右のボタンで画面の切り替えができ、地図を表示したり、IPアドレス等の設定情報を確認できます。

モジュール外観

上の画像は、2台のアンテナを1mのアルミアングルに取り付けたものです。
2台の位置の差から、軸方向の方位角と高度が計算でき、GPSコンパスと呼ばれる測定方法です。
次の左の画像は、方位角の精度を検証するため、遠くにある建物にアルミアングルの軸を合わせたものです。

モジュール外観及び地図

その時の方位角をメモし、パソコンの地図上で実際の方位角を求めます。
地図上での方位角はマップリドットネットで求める事ができ、上の右側の画像がそのページです。
こうして得た2つの方位角の誤差は0.2度程度でしたので、機能的にも精度的にも問題無い事が確認できました。

4.基準局機能

ボタンで次の動作モードを選択できるようにしました。

1.基準局
2.移動局
3.Moving Base(モジュール2台以上必要)

動作モードとして基準局を選択すると、アンテナの位置座標設定後、次の画面となります。

基準局機能画面

基準局のRTCM形式のデータは次の通信方式で配信が可能です。

1.rtk2go.com等のNTRIPキャスタへの送信
2.TCPサーバとして、クライアントに送信
3.3Gや920MHzモデムによる送信
4.2台以上のモジュールが装着されている場合はUART経由で他のモジュールに送信
5.外部コネクタ(JST-PH)からUARTで送信
アンテナの位置は次の2通りの方法で設定できます。
1.SDカードに保存したINIファイルに記載した固定座標を使う。
2.Survey-in機能により一定時間の測定値を使う。

次の画像は三脚にアンテナを装着し、M5Stackとモバイルバッテリを防水ケースに入れ、三脚の脚にテープで固定したものです。
M5Stackは小さいので、簡単に基準局が設置できます。

モジュール外観

モジュール外観

5.Moving Base機能

通常のRTKでは基準局は固定されていますが、基準局が動いていてもRTKの測位ができる機能をMoving Base機能と呼んでいます。
この機能では基準局との相対的な位置しか分かりませんが、固定された基準局と通信する必要がないので、用途によっては重要な機能となります。
ZED-F9Pはこの機能にも対応していて、ボタンによりこの機能で動作できるようにしました。
画面には、基準となるアンテナの緯度経度、2台目、3台目のアンテナの基準アンテナから見た方向およびアンテナ間の距離が表示されます。

モジュール外観

6.INIファイルによる設定

NTRIPキャスターへの接続情報など、RTKで動作するためには各種の設定のための情報が必要となります。
M5Stackにはキーボードが付いていないので、その場でパスワード等を入力できません。
そのため、設定のための情報をSDカードに保存しておき、その内容に従って、複数の候補から選択できるようにしました。
例えば、基準局のデータ取得先として次のように指定すると、この3つの取得先をボタンで選択できるようになります。

[source1]
address = 192.168.4.1
port = 10000

[source2]
address = rtk2go.com
mount = geosense_f9p

[source3]
address = ntrip.ales-corp.co.jp
mount = RTCM32MSM7
user = ??????
password = ??????

この設定のためのファイルはINIファイルと呼んでいますが、INIファイルで設定できる項目は次のとおりです。

・Wifiアクセスポイント
・基準局データの取得先
・TCPサーバのポート
・測位データの送信先
・JST-PHコネクタのUARTボーレート
・Google MapsのAPIキー
・基準局の位置座標
・基準局データの送信先

7.ソフトバンクのcm級測位サービス「ichimill」

有料のRTKの基準局情報配信サービスの中で、ソフトバンクの「ichimill」は安価に利用でき、全国のどこでも基準局情報が得られるのは大変魅力的です。
今回の改良で、その「ichimill」にも接続できるにしました。
契約すると知らされるユーザ名とパスワードを上記のINIファイルに書き込めば利用できるようになります。
基準局情報の配信サービスとしては無料のrtk2go.comがありますが、時々接続できなくなり信頼性が問題でしたが、この「ichimill」はそういう事もなく、基準局との距離も気にしなくて良く、安心して利用できます。
なお、現在、契約できるのは法人のみとなっていますが、個人向けも検討中だそうです。

8.rtk2go.comのマウントポイント

無料の基準局として、rtk2go.comには現在70以上の日本国内のサイトが登録されています。
自分がいる場所に近いマウントポイントが分かれば便利ですので、距離を表示して、選択できるようにしました。

モジュール外観

9.双葉電子の920MHz無線モジュール

基準局のデータを取得する場合、携帯電話網が使えない時には他の無線通信手段が必要ですが、その一つとして920MHz帯の無線通信があります。
免許不要のモジュールが双葉電子から発売されていますので、それを試してみました。
使ったのは双葉電子のFEP01で、M5スタックの基板にモジュールを両面テープで張り付け、5V、GNDとシリアル2本の4本を半田付けしました。

モジュール外観

これを基準局と移動局用に2台作製しました。
次の画像はテスト用の基準局と移動局で、黒く細い棒状のアンテナが920MHz用です。

モジュール外観

移動局のM5Stackを持って、兵庫県三木市の防災公園を歩いた時の結果が次の画像です。
左の写真の左上のマークが基準局の位置で、スタジアムの周りを1周しました。

結果画像

一番離れているところで400m程度でその範囲内で大体Fixしています。
赤のFixしていないところもありますが、スタジアムの壁により電波状況が悪いのだと考えられます。 ブログ「rtk-ublox4 2020/01/02 920MHzの通信距離」によると、見通し距離で1346m届いたとの報告もあり、リンク用無線として920MHzは最適だと思います。

10.Wifiアクセスポイント機能

M5StackのWifiはステーションとして利用する場合が多いのですが、アクセスポイント(AP)としても動作可能で、今回APとして接続できるようにしました。
APのssidとパスワードはINIファイルで指定します。
このAP機能を使うと、2台のM5StackをWifiで接続でき、基準局データを移動局側で取得できます。
但し、Wifiの到達距離は数10m程度ですので用途は限られます。

11.データ配信用サーバ、クライアント機能

基準局として動作している場合はRTCM形式のデータ、移動局の場合はNMEA形式のデータをTCPで配信できるようにしました。
この機能により、パソコンやタブレットで測位結果をリアルタイムで利用できます。
例えば、rtkplotで測位状況をグラフやマップで確認できます。
また、トラクターのガイダンスアプリAgribus-NavにもWifiを使って測位データを送信できます。

測位データ

12.地図表示

基準局としての位置を確認するなどの用途のため、地図や航空写真を表示できるようにしました。
現在、地図はGoogleMapのみ対応していて、APIキーが必要です。

地図表示

地図では一定以上拡大しても情報が増えなくなりますが、航空写真は拡大するとアンテナそのものが見える場合もあり、確認がしやすくなります。
次の画像で赤の十字の中心が測位したアンテナ位置で、そのすぐ右上の白い点がアンテナです。
距離は50㎝程度ずれていて、多分、航空写真がずれていると思われますが、検証が必要な事が分かります。

地図表示

13.ブラウザ対応

M5StackにHTTPサーバの機能を持たせ、パソコンやスマホ等のブラウザでアクセスできるようにしました。
現在、ブラウザで次の事が可能です。 地図の表示 現在地や軌跡をGoogle Mapの地図上に表示できます。GoogleのAPIキーが必要です。 ログファイルのダウンロード ファイル数が多い場合はSDカードから直接読み出した方が早いですが、一つだけの場合やSDカードリーダが手元に無い場合など、ブラウザでダウンロードが可能です。 INIファイルの編集 各種の設定はINIファイルで行いますが、INIファイルの変更をブラウザで行う事ができます。

14.画面の回転

アンテナのコネクタはM5Stackの下側にありますが、使い方によっては上側にくるように回転した方が使いよい場合があります。
そのような時のために、画面を180度回転できるようにしました。
起動時に画面を回転するかどうか選択できるようになっています。

15.後処理用データ

基準局データが利用できない場合でも、移動局の搬送波位相データを保存しておく事により、後処理でcmレベルの測位データを取得できます。
搬送波位相データの形式にはu-bloxのRawデータ形式とRTCM形式がありますが、ボタンで選択できるようにしました。

16.ソースコードの変更

上記の各種機能を実現するため、ソースコードは全面的に書き換えました。
M5Stackはマイコンながらデュアルコアを搭載していて、リアルタイムOSによりマルチスレッド処理が可能です。
ZED-F9Pからのデータを受信しながら、表示、保存、TCP配信などを円滑に処理するため、並列で処理するようにしました。
最初のバージョンではSparkfunのGPSライブラリや、NTRIPのライブラリを使ってましたが、並列処理にするため新たに実装しました。

17.温度テスト

基準局として屋外に設置する場合など、温度が気になる場合があります。
仕様上、ZED-F9Pは問題ないですが、M5Stack本体は0℃~40℃の範囲で、屋外の温度としては少し足りません。
そこで恒温槽で温度テストを行いました。
テストは恒温槽にM5Stackを入れ、USBケーブル、アンテナを接続し、スネークカメラで恒温槽の中を見る事ができるようにしました。
温度は55℃とマイナス15℃でそれぞれ1時間、5HzでデータをSDカードに保存しました。
結果は特に問題無く、ディスプレイも正常に表示され、保存したデータも異状無しでした。
次の画像は55℃の時のカメラ画像で、M5Stackの画面も正常に表示されています。

温度テスト

仕様の範囲以外で使うのは自己責任になりますが、少し気をつければ屋外での使用、設置も問題無さそうです。

18.回路図

今回の改良後の回路図とパターン図です。 PDF

回路図

回路図

回路外観

パターン図のアンテナコネクタは外観がSMAコネクタになっていますが、取り付け穴はSMAもMCXも同じで、どちらを付けてもいいようにしてあります。
M5Stackで使う場合はMCXでないとM5Stack本体に装着できません。

19.ソースコード

ソースコードは下記よりダウンロード可能です。 M5F9P Source code ソースコードはArduino IDEで読み込み、コンパイル可能です。
コンパイルの前に、M5Stack用のライブラリを読み込む必要があります。 「初心者向けM5Stackの始め方」等を参考にしてライブラリをインストールして下さい。

この他に、TinyGsmというライブラリも必要です。 [付記] 最新のソースコードは使用説明書の「21.1ソースコード」に記載のリンクからダウンロードして下さい。

20.ライセンス

このページに掲載した回路図およびソースコードはオープンソースです。
商用かどうか問わず、自由に改変し使って頂く事が可能です。
但し、内容については無保証で、使った事による損害についても弊社は一切責任を負いません。

21.販売

このモジュールは製品名「ZED-F9P RTKシステム開発用モジュール M5F9P」で、弊社のヤフーショップで販売しています。

ZED-F9P RTKシステム開発用モジュール M5F9P 使用説明書