【L-RTK】移動局用にM5StackでRTCM受信実験<サンプルPgmに感謝>

 

●NTRIPを受信するサンプルプログラム
トラ技2019年10月号付録第四章
「Wi-FiマイコンESP32とキットで作るポータブルRTK局」
という記事を学びながら、いじってみました。
RTK関連で有名な茨城高専の岡本修教授の研究室の方が投稿された記事みたいです。記事とプログラムの公開に感謝します。
ESP32-DEVkitCはもっているのですが、配線が面倒なので
M5Stackでサンプルプログラムそのままコンパイルしたら動いたので
使ってます。
①M5StackをArduinoIDEで使えるようにする
M5StackをArduinoIDEで使う準備をしますが、これは、以前の記事にありますし、M5Stack社のチュートリアルが改善されているので使えます。
https://docs.m5stack.com/#/en/quick_start/m5core/m5stack_core_get_started_Arduino_Windows

➁ESP32でRTK受信をするためのNTRIPサーバー受信ライブラリーとプラグラムをGITからダウンロード
https://github.com/GLAY-AK2/NTRIP-client-for-Arduino

➁インターネット接続SSID、パスとNTRIPサーバー指定をいれる
ダウンロードして解凍したプログラムに接続指定すれば動きます。
赤字が変更行 変更点:PCとLCDで同じデータ表示します
//@@@私のコメント@@@ は@@@で囲んでます

#include <NTRIPClient.h>

/*
* NTRIP client for Arduino Ver. 1.0.0
* NTRIPClient Sample
* Request Source Table (Source Table is basestation list in NTRIP Caster)
* Request Reference Data
*
*
*/
//#include <ESP8266WiFi.h> //Need for ESP8266
#include <WiFi.h> //Need for ESP32
#include “NTRIPClient.h”
#include”M5Stack.h”;
const char* ssid = “@@@@@@@@@@@”;//@@@自分のWiFiルーターのSSID@@@
const char* password = “@@@@@@@@@”;//@@@自分のWifFIルーターのパス@@@

char* host = “160.16.134.72”;//@@@このIPはCQ出版のNTRIPサーバーのIPアドレスです@@@
int httpPort = 80; //port 2101 is default port of NTRIP caster@@@CQ出版は80ポートです@@@

char* mntpnt = “CQ-F9P“;//”ntrip caster’s mountpoint”;//@@@CQ出版のマウントポイント名です@@@
char* user = “guest“;//”ntrip caster’s client user”;//@@@CQ出版のUSER名です誰でもログインできます@@@
char* passwd =”guest”;// “ntrip caster’s client password”@@@CQ出版のパスです誰でもログインできます@@@
NTRIPClient ntrip_c;

void setup() {
M5.begin();
// put your setup code here, to run once:
Serial.begin(115200);
delay(10);
Serial.print(“Connecting to “);
M5.Lcd.print(“Connecting to “);
Serial.println(ssid);
M5.Lcd.print(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
M5.Lcd.print(“.”);
}
Serial.println(“WiFi connected”);
Serial.println(“IP address: “);
Serial.println(WiFi.localIP());

Serial.println(“Requesting SourceTable.”);
if(ntrip_c.reqSrcTbl(host,httpPort)){
char buffer[512];
delay(5);
while(ntrip_c.available()){
ntrip_c.readLine(buffer,sizeof(buffer));
Serial.print(buffer);
M5.Lcd.print(buffer);
}
}
else{
Serial.println(“SourceTable request error”);
M5.Lcd.print(“SourceTable request error”);
}
Serial.print(“Requesting SourceTable is OK\n”);
M5.Lcd.print(“Requesting SourceTable is OK\n”);
ntrip_c.stop(); //Need to call “stop” function for next request.

Serial.println(“Requesting MountPoint’s Raw data”);
M5.Lcd.print(“Requesting MountPoint’s Raw data”);
if(!ntrip_c.reqRaw(host,httpPort,mntpnt,user,passwd)){
delay(15000);
ESP.restart();
}
Serial.println(“Requesting MountPoint is OK”);
M5.Lcd.print(“Requesting MountPoint’s Raw data”);

}

void loop() {
// put your main code here, to run repeatedly:
while(ntrip_c.available()) {
char ch = ntrip_c.read();
Serial.print(ch,HEX);
M5.Lcd.print(ch,HEX);

}
}

※2022年12月2日 注記追加
善意の基準局でよく使われているrtk2go.com経由のntrip接続方法で大変更がありました。
今までは、IDパスはブランクでよかったのですが、IDにご自分のメルアド、パスに none 4文字を記入しないと
ntrip接続できなくなりました。詳細は、下記記事をご覧ください。今までのプログラムが動かなくなるので変更作業が必要です。ちなみに、本稿で使っているCQ出版は独自サーバーなので、rtk2goとは関係ありませんので変更はありません。

【RTK22】RTK2GO.COMのNTRIP接続方法が変わった<NC_NAGANO様に感謝>

赤字を書き換えたら、コンパイルでM5STACKへ書き込んでOKなら受信動作開始します。インターネット接続を失敗するとデータがでなくて「・」が連続してでてきますので、ネット接続条件かルーターがおかしいです。

最初に接続コメントがでてきた後は、例のRTCMの意味不明の文字列が連続してでてきますので、これでOKです。

M5STACKのLCDにもでてきますが、これは、意味ないので本番プログラムではNMEAの位置情報結果だけ表示します。

※2022年3月追記 本記事投稿から3年後、自作NTRIPレシーバーはこんなに進化しました。
当初M5Stack,M5StickC,M5AtomなどM5シリーズを使っていたのですが、ESP8266(中国製WEMOS基板)へ本記事のプログラムをインストールするだけで超小型のNTRIPレシーバーを作りました。安い、超小型(SimpleRTK2B上に乗る)といったパフォーマンス最高の基板ですが、技適が取得されてません。そこで、技適無し機器使用申請をして、6か月間使用できるようにしました。WEB上で、電波監理局へ申請して、返信メールを受信した瞬間から6か月間合法的に技適無しWiFi基板を使用できるのは素晴らしいことです。WeMOSの基板がXbeeコネクタにぴったり合うので、他のESP基板だとダメなので、技適申請しないとダメでした。ArduSimple社から同様の基板WiFi-NTRIP MASTERを購入すると1万円近くかかるので、何枚ももてませんが、この自作ESP8266基板なら1枚800円ですので、何枚でももてます。私は、9P4個持っているので、それぞれ用に4枚つくりました。

【RTK22】F9P基板上にNTRIPレシーバー載せた_半日でできた<XbeeスロットへWiFi基板挿す>

 

 

※2021年6月30日追記
本記事で使用させていただいているNTRIPライブラリーに変更を加えてSOFTBANK NTRIPサービスALESに接続できるようにしました。

【L-RTK】NTRIP_CASTER接続プログラム初期動作できた<ALES基準局へ接続>

※2021年1月追記
本記事から1年経過して、2年目シーズンは、ソフトバンク系ALES社のNTRIPサービスへの接続用のプログラムを組んでいるところです。今までは、サンプルぷグラムとらNtripClientライブラリーをブラックボックスで使っていたのですが、ALESサービスでは、自分の位置のGGAをサーバーに送信して最寄りの基準局からRTCM3を送ってもらう手続きが必要なので、ライブラリのGGAを送信する機能を追加しなければなりません。昨年1回接続できたのですが、本格的には実験してないので、1-2月かけてALES接続の実験をして契約をします。
RTCMの学習を始めました。未公開規格なのであちこちから調べをいれてます。昨年よりは、深く理解をすすめるつもりです。
①RTCM3をESP32系マイコンでF9Pへシリアル送信する場合にNO RTKになってままでRTKが実行しないトラブルが多いです。
これは、いくつかの原因がありますが、シリアル通信波形をオシロで解析して、原因をみてみました。

【RTK2021】F9PへRTCM入力するシリアル波形をオシロで観察してみた<RTCMシリアル通信はまりやすい>

 

【RTK2021】RTCM3フレームの抽出法学習<つかみどころがない規格>

【RTK2021】NTRIPからのRTCM3の受信データの観察<結構ばらつく>

 

 

●RTCM3などF9Pから出力されるセンテンスのログ調査
RTCM3は、F9Pへ入力するセンテンスなのでマイコンではログしてませんが、Ucenterで再現用にフルログする時にはRTCM3もログします。
重要なのは自分の使い方を決めて、最低限必要なセンテンスだけをマイコンとかスマホでログすることです。全部ログするにはマイコンもスマホも性能不足になるので、全部ログするならPCでucenterを使うことになります。慣れない間は、UcenterでノートPCを持ち歩いたほうが全部ログできるので、迷わなくていいです。WIN10のタブレットでもucenterは、走ります。私は、Arrow Tab QH33/S FARQ33S8インチを使ってますが、一応走りますが、11インチタブレットでもっとCPU性能が早いタブレットのほうがよかったです。

【L-RTK】ROVERデータのログと表示方法検討<スマホに落ち着いた>

 

Espressiff調査
ESP32系初めていじるのですが、ESP32Wroom02もM5Stackも、特徴は、ドキュメンテーションがしっかりされてない点です。欧米のCPUメーカーは、きちんとドキュメンテーションしていて、読むのがうんざりするほどあるのですが、ESP32系は、ベンチャーなので、きちんとドキュメンテーションする工数がないので、まともなドキュメンテーションがなく、いきなり動作サンプルで説明が始まります。arduinoとかmbedとか欧米系のCPUシステムに慣れていると面喰います。危ないのは、ハード仕様もどうなっているのかDATA SHEETをみても、欧米のメーカーほど、シビアな仕様書になってなくて、プロフェッショナルな仕事ではまずはつかえないだろうなという感じがします。WIFIモジュールの世界シェアは村田、太陽誘電とか日本メーカーが高いシェアをもっていて、ESP32のEspressiffは、シェアにはいってません、
たぶん、WIFI内臓マイコンというニッチ分野でビジネスをしているのだと思います。それでも、2014年から2018年で1億個売ったといってますので
年2千~3千万個売っているらしいです。売上は100億いくかいかないかの会社ではないでしょうか。ベンチャーを脱却する過程にあるので、これから
ドキュメンテーションもしっかりしてくるのではないかと期待してます。
●M5Stack社
ここは、まだまだベンチャースタートアップですので、ドキュメントや信頼性を期待してもしょうがないです。arduinoやmbedほどのバックボーンがないし使っているのがESP32ですので、上記の課題をかかえています。

●中華CPUで進めていいのか
WEB検索してみても、arduino,mbedほど、詳細な技術解説がなくて、いじっているのが私みたいな素人さんが趣味でいじっている感じで、これみて納得というブログがあまりなくて、乗り気にならないのですが、
今回は、サンプルプログラムがすべて、ESP32Wroomを使ったプログラムなので、しょうがないのでM5Stackを使ってみることにしました。後日、リセットになるかもしれませんが、とりあえず12月中はM5Stack使ってみます。
CPU選定にパワーメーター2019でこりごりしてますので、
特に安い中華CPUは、危ないと思ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です