【STA24】IMU100Hz化でログデータ2MB/分と膨大になった<TeraTermバイナリログ方法>

BNO085でIMUサンプリング周波数が100Hzになって良かったのですが、これをSDカードにログした後アップロードが大変なことが判りました。システム構成を大幅に変更しないと使い勝手が改善されないので
使い勝手は、後回しで、STA23システムを踏襲して、STA24の最初のVersion1.0を進めて、
アップロード高速化基板の基礎実験が終わってから、Version2.0以降でシステムを大幅に改良することにします。
※2024年1月11日追記 本件UDPで解決しました。
 測定データが膨大だからSDカードにログすると、SDカードから読みだすのに時間がかかってしまうので
最終的には、PCで受信してログして処理するのが一番効率が良いことに気づきました。それを実現するためには
高速無線データ通信が必要です。WiFiUDPを年末から正月にかけて実験して、近距離(1m以内)なら、データ落ちも少なく使えそうなことが分ったので、SDカードログを止めて、センサデータは、マイコンから即無線PCへ送ってPCでログして各種処理をすることにしました。UDP関連リンクをご覧ください。

【STA24】UDP採用でシステムを断捨離その1<Teensy廃止ESP32のみでトライ>

 

 

●IMU100Hzになって発生した課題
①SDデータが膨大になった
IMUのデータ量がSTA23の20Hzが5倍の100Hzになったので、
IMUデータだけで、1エポック(RTKの1サンプリング)で2.3KBにもなってしまいます。
ログデータ全部で、1エポックで4KBにも膨れてしまいました。
1エポック120msecなので。1分で500エポックx4KB=2MB/分と膨大な容量を食います。
②アップロード時間が測定時間の3倍もかかる 
マイコン側のSDログの速度はTeensy4.1なので5MByte/sec程度でているので、書き込み時間は
問題ないのですが、そのスピードでログされたデータをSDから読み込んでアップロードする速度が115200bps では、実測定時間の3倍以上かかってしまいます。10分の測定データをBluetoothSPP115200bpsだと30分もかかるということで、防水ケースのネジを外して、SDカードを取り出して、PCで読み込んだほうが速いという大変なことになってしまいました。
※2023年12月28日 検討結果
STA24のシステム作り始めました。本課題が最重要なので、UDP、ESP-NOWなど検討してますが、
送信はESP32eモジュールで決まっているのですが受信がWin10PCにするか、マイコンで受信してUSBシリアルでPCに渡すか検討してます。UDPで実効速度3Mpbs以上だせるかが課題となります。
10分間のログデータを1分でアップロードできるのが最低限の待ち時間と考えてます。

 

 

③IMUデータをメインでスキーターン解析することにした。
IMUデータをyaw,pitch,rollと加速度を100Hzでサンプリングして、ターンの動作を横Gと軌跡
の関係で解析する方向へ転換したので、今までおまけだったIMUデータが、重要データとなった
点で、漏らさずログしないといけないので容量が増えた。
◎自動車計測分野事例では、IMUがメインセンサです。
自動車の計測ではGNSSよりは、IMUの信頼性が高いので、IMUメインでGNSSを使ってます。IMUから得られる情報で
速いコーナリングを追求してい人達が居て、参考になります。
 ガチで速くなる練習法というブログで加速度とコーナリング追及されてます。
自動車の物理というブログ  コーナリングの最適解

VBOXという自動車計測メーカーの商品は、最新のRTKとハイエンドIMUの補完システムを提供してます。
その中で、高級IMU(1個100万円)の性能の凄さのデータがあります。MovingBaseより凄いです。

ということで、STA24では、IMUに注目してスキーターンデータ解析をしていきます。

●TERATERMでバイナリーアップロードの実験(ややこしいので、備忘録しておきます)
 =>バイナリーアップロードの必要性
単純にサイズが小さく済む、2バイトの整数を実数にすると5桁のASCIIになるので6Byte食いますが、バイナリーなら2バイトのままなので、倍以上の効率がよいです。元ファイルがバイナリーなので、マイコンで変換して送信しても膨れるので、バイナリーになります。

◆バイナリデータがBTSPP経由でPCへ届いているか目視するためには、専用ソフトを作成するか
Teratermでログする。
注意は、Teratermは。設定しても残らないので、必ず設定の保存でTERATERM.INIを上書き保存すること。
Teraterm設定1:ファイル保存種類をバイナリに設定
(設定=>その他の設定=>ログ=>オプション バイナリにチェック
Teraterm設定2:バイナリデータをHEX数でDISPLAY表示させる
(ログはバイナリ保存されますが、見るだけはHEX数で見れる)
 バイナリデータを見るモード(Program>teraterm>TERATERM.INIを開いてdebug mode=on にする)
  受信して化け文字がでてきたらshift-ESCを押すとSHIFT-JISになるので、HEXがでる
これを教えていただいたブログ様に感謝です。
https://eng-memo.info/blog/teraterm/?utm_source=pocket_saves

 

●ESP32 SPPプログラムでバイナリ送信とASCII送信の区別
ESP32 BlueToothSPP送信は、SerialBT.print();は、ASCII Charcter送信します。1バイトは1文字を表現します。SerialBT.write();は、バイナリー1バイトを送信します。0~255までの数値を表現します。
通常は、BlueToothSPPは、ASCIIベースでモニター通信用として使ってますが、バイナリアップロードの場合
は、バイナリ送信で、SerialBT.write()を使います。ですので、マイコンから送るデータを判別します。
バイナリーとASCIIを汎用的に区別する手段は困難なので、今回は、UBXファイルのヘッダを目印にしました。
PVTのヘッダ 0xB5,0x62,0x01が来たら、バイナリと判断して、SerialBT.write()で送信することにしました。プログラムは短いですので、下記に示します。

#include <BluetoothSerial.h>

BluetoothSerial SerialBT;
uint64_t chipid;
char chipname[256];
int bid=0;
int initflag=0;
uint8_t bt[3];
int n=0;
int binmodeflag=0;
void setup() {
Serial.begin(115200);
chipid = ESP.getEfuseMac();
sprintf( chipname, “ESP32EA0_%04X”, (uint16_t)(chipid >> 32));
SerialBT.begin(chipname);
Serial.print(“BT chipname:”);
Serial.println(chipname);
}

void loop() {
if(Serial.available()>0)
{
char cdata= Serial.read();
//******binary modeセレクタは、b5 62 01 を受信したら自動でバイナリ送信する。コントロー  ラから入力があるとバイナリモード自動解除される****
bt[n%3]=cdata;
if(bt[0]==0xb5 && bt[1]==0x62 && bt[2]==0x01 && binmodeflag==0){
//boinary mode 初回検出
// Serial.println(“—Binary mode IN— “);
SerialBT.write(bt[0]);
SerialBT.write(bt[1]);
SerialBT.write(bt[2]);
binmodeflag=1;
}
else if( binmodeflag==1){//binary mode send
SerialBT.write(cdata);
// Serial.println(“binmode=1 sending”);
}
else {//ASCII send
SerialBT.print(cdata);
// Serial.print(cdata);
}
n++;
//
}
//PCから命令受信
if (SerialBT.available()) {
char rdata=SerialBT.read();
Serial.print(rdata);
if(binmodeflag==1){
binmodeflag=0;
}
}

 

●実験結果
115200bpsの80%程度の転送速度で、BlueToothSPPが送信できてましたが、いかんせん、元ファイルが
巨大すぎて、測定時間の3倍も転送に時間かかるとんでもない結果となりました。

 

●以後
現在のシステムとは別に、もう一個基板を作って、高速アップロードシステムの試作をします。
優先順としては、STA24レイアウトの完成のために防水ケースを作ることです。
将来の高速アップロード基板も搭載できるようにケースのサイズを余裕をみて作っておきます。

 

 

 

 

コメントを残す

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