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

●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は、危ないと思ってます。

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

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

●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);

}
}

 

赤字を書き換えたら、コンパイルでM5STACKへ書き込んでOKなら受信動作開始します。インターネット接続を失敗するとデータがでなくて「・」が連続してでてきますので、ネット接続条件かルーターがおかしいです。
最初に接続コメントがでてきた後は、例のRTCMの意味不明の文字列が連続してでてきますので、これでOKです。

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

※2020年3月29日記
その後、NTRIP受信技術が進んで、VRS(仮想基準局)に接続してRTCMデータを受信するプログラムも本プログラムライブラリーを改造して作成しました。

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

カテゴリー: RTK

コメントを残す

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