mosaic X5 (mosaic HAT)で RTK 測位

少し使い方もわかってきたところで、RTK接続を。 でも、場所的には最悪なんだが、実現するかどうか。。。 ここ数年、自宅ではなかなかFixしなかったり、Fixしてもすぐに落ちたりしてており、結局屋外に出かけていたので正直設定と1度でもFixして動作確認ができればいいと思っていた。

しかし、結果はそれなりのFIXを得られて満足。 測位精度は屋外での実験を待ちたいが、現状では期待以上の結果が出ている。

さて、まず環境の紹介。

環境としては最悪かも。 次にシステム構成は下記。 PCを除くと写真の通り。

Wifi-Routerとmosaic HATとM5Stack Core2

今回の目的は、M5Stack Core2とmosaic X5をつかったRTKの実現である。

まずは、Core2が20km以上離れた場所のNtrip Serverに接続し、RTCM3の情報を得て、mosaicへ送信。mosaicからは、RTKのFix状態と位置情報を確認する。

まずは、RTKの設定をしない状態。

SBASが1衛星だけ補足していたが、単独測位との表示で±80cmといったところか。

衛星を半球しか捕まえていないところを見ると、かなり良い。 もしかしたらSBASが効いている可能性があるのだろうか。

従来の受信機ではこの状態だと軽く10mぐらいずれてしまっていた。次に、RTK測位を行っている場合、下記を見ると特にmosaic側での設定は不要のようである。

見ると、COM2にRTCM3が毎秒1kB程度づつ送られているのがわかる。

RTKもFloat解が出だした。

その後、Fixになり、それなりにほおっておいた状態が下の図である。

半球しか見えていないことと、これまでの実績を加味すると、このデータは結構よさそう。

その後、NMEAの出力を100mSに変えたが、Fix率が悪くなった。また、トレースで見切れていないのだが、(ここはu-centerが便利)RTKの送信が間に合わないのではないかという想像もしている。

どちらにせよ、個々のあたりはほかのアプリも組み込んだうえで調整が必要である。

また、少し気になるところとしては、Fixed RTKからStand-Aloneに落ち、Float解を経由してFix解となったときに、アンテナの位置は移動していないのだが、同じ場所を示さないという現象がある。

±15cm程度の誤差ではあるが、さらに良い環境で確かめる必要がある。

半球というところと、Ntrip Serverまでの距離が長いことと、Ntrip Serverの位置情報を入れていない事も十分考えられる。

今回は、M5がWifi-Router経由でNtrip Serverからのデータを受信し、mosaic X5に転送し、ちゃんとFix解が出るかどうかという実験だったので、それに関しては完了!

MOSAIC HAT (MOSAIC X5)の接続

さて、今度は、Septentrio社 の mosaic を試してみる。 X5という話なのだが、シルクにはmosaicとしかかない。

でも、ここに二次元バーコードが付いているので、読んでみると(URLかと期待した。) MOSAIC-X5GRB….

となっており、ちょっと安心。 mosaic-X5として扱っていける。
Webをみると、結構情報がある。 これまでubloxを使っているのはu-centerがわかりやすいという面がおおきかったが、どちらかというとマニア向けか。

ちょっと見たところでは、

データシートやマニュアル類、最新バージョンのファームの情報などは下記ある。

https://www.septentrio.com/en/products/gnss-receivers/receivers-module/mosaic#resources

そのほか、githubにもかなりの情報が公開されている。

https://github.com/septentrio-gnss/mosaicHAT

また、各種コンフィグレーションなどはRxToolsによって行われるが、下記からDownloadができる。

https://www.septentrio.com/en/products/software/rxtools#resources

ドライバも一緒にインストールされるので、あまり困ることはない。

さて、私のWindows環境にRxToolsをダウンロードし、ドライバと一緒にインストール。

そしてボードを見てみて、ANTとFTDI(USB/シリアル変換)で電源設定があるので、とりあえず両方とも3.3Vに指定して二周波のアンテナとUSBを接続。

一応動き出したが、場所の関係もあり、1GPS,1GLONASS.1BeiDou,1NavICしか入らない。 

ちょっと少し移動せざるを得ないか。。。

部屋の反対側に来て、作業性は悪いものの、半球は開放。さすがにあっという間に衛星を確保。

4GPS,7GLONASS,4Galileo,7BeiDou,1QZSSとなった。

方位が半円しか見えないためか、Main Signalの評価は半分以下しかあてにできない。 まぁ。しょうがないか。

まぁ、ほとんど設定も必要なくここまで来た。

そういえば、入江先生がWebで設定していたような雰囲気で話していたので、もしかしてと思い、pcの設定を確かめてみると、USB経由でLAN接続されているみたい。 また、192.168.3.1が怪しいので、さっそくChromeで接続してみると、これで十分設定できそうな画面が出てくる。

なんとなく感触はつかめた。 ふむ。 これは面白い。 

では次にGPSロボットカーのGPS部に使えるかどうか考えてみる。

まず、素材としてやらなけてばならないのは、

MOSAICの立ち上げ (この投稿部分が該当)

ロボットカー CPUへのNMEA送信(接続含む)

RTKの実現

というところか。

今回はMOSAICからシリアル通信でカーCPU ( M5 Stack Core2 ) へ通信。 

カーCPUというのもめんどくさいので、今使っているM5Stack Core2で実験。 ← ちょっとの遊びには結構高いんだよねぇ。。。 

まずは、Core2のアプリを作成。

要はMOSAICから受信したデータを画面に出すことと、USBでPCに送ること。

Core2上の画面では制御文字が出るとどうなるかわからないので、一か所にAscii CodeがHexで表示されるようにした。

また、Core2からPCにシリアルを送るのは、データを見たいだけではなく、トレースデータを見たいのだが、設定Webではそのような機能を探しきれなかったので、u-centerを使ってしまおうという考え。

Core2で作ったスケッチは下記。

#include <M5Core2.h>

#define RXD2 13 //HardwareSerial Serial2;
#define TXD2 14 //HardwareSerial Serial2;

static int i;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);  //USB to PC
  delay(100);
  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);  // UART for GPS module
  delay(100);
  M5.begin(true, false, true, true); //LCD:Yes, SD:No, Seria:Yes, I2C:Yes
//  M5.Power.begin(); // Power ON for GPIO21,GPIO22 and I2C
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setTextColor(GREEN , BLACK);
  M5.Lcd.setTextSize(2);
  M5.Lcd.println("M5 Started");
}

void loop() {  
  i = i + 1;
  if(Serial2.available() > 0) { 
    int data = Serial2.read();     
    Serial.write(data); 
    M5.Lcd.setCursor(0,20);
    M5.Lcd.println(data,HEX);
    M5.Lcd.println(i); 
  } 
}

何をやっているかというと、端子の定義とシリアルの定義(USBと端子)。

SerialのBufferに何かデータが来たら、そのままUSBに送信。 M5にはAscii Codeの16進数表示とLoop Counterの表示。

次にMOSAICとCore2の接続は下記。

Jumperスイッチとして3V3とVCCを接続。 ESP32のUARTは3.3V系のため。

シルクをみると、PWR SRCとあるので、VCCの電圧設定だけかもしれないが、念のため。

(こんな時にジャンクでとってあるJumper Switchが役に立つ)

CORE2側は

MOSAICもCore2もたぶんどちらもDCE側(端末側)。 なので、TXとRXD、RXとTXDを接続する。

ここは、ベンダーによってさまざまなので、だめなら逆に。 というレベル。

GNDはGND同士で接続。 MOSAICにはRTS/CTSの制御線があり、設計者のきちんとした意図が感じる。

でも、ごめんなさい。 使わないです。 Core2に無いし。 (仕事だと使うんですけどね)

つぎはMOSAIC-X5の設定。 Core2とMOSAIC-X5をともにUSBにつなげて電源ON。

192.168.3.1にアクセスして

Serial Portを指定して「Next」で次に

COM2を指定して、

好きなメッセージを選択してFinish!

最後にOK!!!! うーん。 簡単。 簡単。 

さらに、この更新周期に関しては期待大!

では、Core2の画面。

よさげ。

IDEのシリアルモニタの画面。

Good!

さらに、シリアルモニタを終了してu-centerでの画面。

Very Good!