種別> |
ターゲットマシン/言語 |
処理データ |
解説 |
【MovingBase
SDロガー】 |
Teensy4.1
/Arduino C |
MovingBase
出力をSDカードログ |
2022/1/6
Teensy4.1を採用した理由に高速SD記録ができる点です。
そこで早速、サンプルプログラムを走らせてみました。
https://gist.github.com/dj1711572002/1a56926e58ec3caa8f7c03672cd50ffa恨む
このプログラムは、SD.hライブラリーを使ってましたが、USB HOSTライブラリと共存させると異常な動作でNGでした。そこで、sdFat.hライブラリーを使うとUSB HOSTライブラリーと共存できました。Teensyでは、sdFATライブラリーを使ってSDカード高速書き込みするのが定番のようです。
sdFATライブラリは、GITのここにあります。
https://github.com/greiman/SdFat |
【USBHOST
ロガー】 |
Teensy4.1
/Arduino C |
MovingBase出力をUSBポート経由で通信 |
2022/1/7
Teensy4.1を採用した理由の一つに、USB HOSTが内蔵されていて手軽に使える点です。F9Pのシリアルが22個しかないので、基準局接続とRover接続で使い切ってしまって、自分のデータ出力ができない課題を解決するためどうしてもUSBHArduinoIDEのスケッチ例の一番下のほうへいくとTeensy4.1用が膨大にあります。USBHOSTでUSBポートから出力する必要があったので、USBHOST動作が必須でした。ここでは、サンプルプログラムをちょっといじっただけです。
●サArduinoIDETeensyDuinoをインストールしてあるArduinoIDEならサンプルプログラムにあります。
USBHost_t36のSerialを選びます。コードが開きますので、コンパイルしてTeensy4.1に書き込みだけです。
|
【USBHOST
ロガー】 |
Teensy4.1
/Arduino C |
3枚の基板からの出力をUSB3ポート経由で通信 |
USBHOSTのプログラムを複数ポートに拡張して実験しました。Forum記事大事です。
Setup USB Host to talk with hub with two FTDI serial devices
複数ポートを使う場合は、USBHUBを1個増設しないといけないと書いてありました。
課題があって、送信順序がバラバラになるので、どの基板からのデータなのか目印をつけておかないと、わからなくなります。時々順序が狂うので、この点がUSBHOST複数ポート使用時のネックとなって、後々まで苦労しました。 |
【USBHOST
ロガー】 |
Teensy4.1
/Arduino C |
2枚のF9P基板からの出力をUSBポート経由で通信 |
上記1/10のプログラムをF9PMovingBase出力に改造したもの。
きちんとデータがUSB送信されているかを確認するためにPC側ではUcenterを使って受信して、Fixしたデータが長時間大丈夫かをチェックしてあります。F9Pの場合、一瞬無事に接続できても、長時間でこける事件が多発しますので、プログラムが大丈夫かどうか確認するには、長時間(1時間)くらいは動作させる必要があります。
|
【USBHOST
SDロガー】 |
Teensy4.1
/Arduino C |
2枚のF9P基板からUSBHOST経由で、SDカードログする |
2022/1/19
SD.hライブラリは古くて他のライブラリーと同時に使用すると異常動作してはまりました。sdFAT.hライブラリを使えば解決できます。Forum内にサンプルありました。
SDFAT read/write example ここのWWATSON氏のサンプルププログラムがシンプルで判り易かったです。私用にカスタムしたのが下記リンク
https://gist.github.com/dj1711572002/f472a0f45c404c904bb97526359b7b41
|
【RTCM3
レシーバー】 |
ESP8266
/ArduinoC |
小型基板をF9P基板上のXbeeスロットに差し込んでRTCM3レシーバー |
|
【USBHOST
ロガー】 |
Teensy4.1
/Arduino C |
F9P基板4枚から基板IDを取得するPgm |
|
【STA LCD
モニター】 |
Teensy3.2
/ArduinoC |
視認性のよいOLEDをためした。 |
2022/1/31
スキー場で、LCDの視認性で苦労してきたので、OLEDではどうだろうと実験しました。
しかし、あまりよくなかったです。2022年10月現在では、M5StickCのLCDが最も視認性が良いです。理由は、ケース表面から2ミリほど深く画面が設置されているためと液晶のコントラスが良いからです。
Teensy3.2を使ってますがAruduinoの標準コードで動きますので、Arduino汎用プログラムでライブラリも汎用の
I2C用のwire.hをつかっているだけです。
1個の動作確認用:https://gist.github.com/dj1711572002/89a05cae8dae04ea6d02c38a30272f99
2個の動作確認用:https://gist.github.com/dj1711572002/4f2da24c13e5b6a5ad8dd33acefbf089 |
【STA グラフィック ビュワー】 |
PC/
VB.NET |
スキー挙動と時系列グラフのカーソル同期させた |
1年がかりで、ここまで作れるようになりました。BITMAPを使ったグラフプログラムが得意になりました。 |
【SDロガー】 |
Teensy4.1
/ArduinoC |
SDカードを抜かずにUSBHOST経由でSDカードを操作 |
実装をしているとSDカードを抜けるように配置するのがネックになるので、SDカードを抜かないレイアウトでも、SDカードを操作できるようにするMTPモードをTeensyで実現できることをForumでしりました。
mtp-basic.ino というサンプルプログラムがあります。
いくつか、サンプルプログラムがありますが、使うのはmtp-basic.inoです。走らせるとWIN10
※MTP-t4ライブラリーがインクルードされていることが前提です。
この機能、普段は逆に不便なので、ほとんど使ってません。実際は、無線接続でSDカードのデータを転送する使い方になるので、
MTPモードではなく、SDライブラリーをつかった転送になります。
|
【F9P
解析】 |
PC/VB.NET |
F9Pの精度測定で基線長を測定して統計処理しました |
【RTK22】2kmと51km基準局での基線長ばらつき精度比較<ubx-csv変換TOOL公開>
2022/4/22
RTKの精度は、Ucenterでは、見る機能がついてません。基準局との距離LengthとrelPosN,relPosE,relPosDの4個のパラメータを測定して、長時間測定したときの3σとなって統計的な精度となります。hAcc1cm精度と言っても実際3σは3cm程度になります。
やり方、base基板からPVTとRELPOSNEDをPCUcenterログします。UcenterのUBXファイルを実数に変換するプログラムが
これです。
EXEファイルZIP:STA22_BitmapGraph_Cursor_for_MobileTabline_rev042
※VB.NET使える方は、VBプロジェクトファイルZIPでカスタマイズしてみてください:
STA22_BitmapGraph_Cursor_for_MobileTabline_rev042
ここでは、PCベースで基線長解析をしてますが、マイコンでもできる計算なので、STA22では、マイコン用にプログラムを作ります。 |
【RTK
システム】 |
Teensy4.1
M5Atom
M5Core2
/ArduinoC |
Teensyを使ったRTKログシステムをまとめました。 |
②M5Atom用 SPPプログラム M5Atom-STA22_Teensy-Serial_ESP-NOW_rev02.ino
TeensyUART3のTXピンからシリアル受信してバッファのデータをそのまESP-NOW送信します。
ESP-NOW設定で送信相手のMACアドレスを書き込んでおくとその相手だけに送信します。MACアドレスをFFでうめるとESP-NOW端末すべてに一斉送信します。データバイト数は250以下なら自由です。
https://gist.github.com/dj1711572002/d5cc9b72833ac7480116a6d94a35a4d9
③M5Core2用 モニタープログラム Core2_STA22_ESP-NOW_for-rev10279_rev04.ino
Teensy-M5Atomから送られてくるバイナリーデータセットをLCDに表示する。
LCDの反応速度が遅いため1秒に一回に間引きしてある。
さらに、ちらつきをおさえるために、spriteを使って描画している。
受信データ内にカウンタ(epNo)を仕込んでそれで間引きしている。
後日、ブザー機能を追加する。
https://gist.github.com/dj1711572002/2495bd34bdf67a0510a11a9b38d30127 |
【STA 音
モニター】 |
M5Core2
/ArduinoC |
ブザー音を3段階で状態を知らせる |
【M5】Core2に外付けブザー付けたPgm簡単<3段階の警告音>
2022/5/2
スキー 中に、RTK動作が正常かどうか知るには、音で警報音を鳴らす以外にないということで、ブザーをいじってみました。
●私のサンプルコード
①関数ABeep(int flag)を実行すると、1~1.7秒に1回だけ音を鳴らします。
動作:1秒周期で警告音がなります。
A音=システム状態がOKな場合:短い高音(20msec,3000Hz) ピッピ音
B音=システムが少し不安定な場合:中くらいの長さの少し低い音(40msec,1000Hz)ププー音
C音=システムが死んでいる場合:長くて低音(700msec,200Hz)ブーブー音
ここでは、flag=131でA音、flag=67でB音、flag<67でC音となってますので、改造時に自分のルールで変更いてください。
②loop()では、ABeep()を呼び出してぐるぐる回っているだけです。10秒たったら、音の種類を切り替えてます。
Core2_BuzzerTest00.ino
https://gist.github.com/dj1711572002/a7aeab039ecce7730c4738b8b1266ca7
|
【STA 音
モニター】 |
M5StickC
/ArduinoC |
ブザー音を3段階で状態を知らせる |
上記M5Core2用ブザーでは音がよくなかったので、M5StickC用に変更して、実走行したらまくいきました。
原理:PWMで周波数と振幅を決めて任意時間発振させるだけです。
私の作った関数は RTKのflags番号と音量値を渡すだけで3段階のアラーム音を鳴らしてくれます。
モニタープログラム全体はGISTにアップしてあります。
https://gist.github.com/dj1711572002/8acbe6b97e859fa7a5d9dee706de1105 |
【STA MovingBase
たわみ】 |
M5StickC
/ArduinoC |
MovingBaseLength
を測定してたわみとの相関を得る |
【RTK22】MovingBaseで部材のタワミを測定できるか実験した<Lengthが好適>
2022/5/18
MovingBaseのLnegthのmmオーダーの感度を利用して、アンテナを梁にとりつけて梁のたわみを測定してみました。
同時に梁の傾き角度をモニターするために、M5StickCにカルマンフィルターで角度表示しました。
M5StickC内蔵のIMUを活用して、カルマンフィルタで角度表示してます。
静的な角度なら、加速度のATANのほうが精度いいですが、動きが入った場合は、カルマンフィルタのほうが破綻しないでなめらかに角度変化に追従してくれます。ジャイロデータ補正があるからです。
TKJ Electronicsさんのカルマンフィルタライブリーを使ってます。サンプルプログラムをコピペでできます。
https://www.arduinolibraries.info/libraries/kalman-filter-library
このM5StickCは、IMU表示をしながら測定データをモニターへ無線送信する役目もしてます。 |
【RTK
ロガー】 |
Teensy4.1
/ArduinoC |
RTKデータの複数シリアル受信で安定した受信を行う |
【RTK22】RTK-MB-IMU最新システム備忘録<F9Pシリアル受信のコツ>
2022/5/26
F9P MovingBaseからの出力は、2枚のボードから同時に種類の違うメッセージが流れてきます。電波状態のよって、時々タイミングが狂ってバッファが途中で途切れる場合があって、データが中途半端になって、使えないデータが発生してしまいます。それを防ぐために、規定データ数一挙に受信するまで待つというプログラムにしてあります。
昨年までのM5Atomの受信プログラムでは、数%データ落ちがあったので、2022年では3シグマ以下のデータ落ちまで、管理してます。3シグマを達成するのは、すごく手間と時間がかかります。覚えているうちに備忘録しておきます。
F9Pは、シリアルデータ送信タイミングが衛星電波受信後50~70msecの範囲で遅延してばらつきます。ですので受信プログラム次第で、データ落ちしやすくなります。特に、衛星電波状態が悪いとき、メッセージ数が多いときなど計算能力を目いっぱい使っているときは、タイミングの乱れが多く発生して、データ落ちしやすくなります。良好で安定した状態なら、あまり気にしなくてもいいですが、数多くの測定をしていくと、プログラムの出来不出来でデータ落ちエラー率が違ってきます。
2022・5・31のプログラムGISTに置いておきます。
https://gist.github.com/dj1711572002/5bf724f4570cec5a9c84ced0be4991c0
STA22_8Hz_USBHOST_Uart4_MPU6500x2_Kalman_Stable2_rev10391_6.ino
|
【RTK
ロガー】 |
Teensy4.1
/ArduinoC |
シリアル自動受信機能が便利です。 |
●addMemoryForReadの使い方
・計測周期が違う2ポート受信の例
Serial1が172バイトSerial2が100バイトを受信する場合、
バッファなので32の倍数で大きめに決めてSerial1は192バイトとSerial2は128バイトに設定します。
大きめでも、所定数までif文で待って、読み込めば一瞬で読み込み完了できます。
Teensyでハードウェアシリアルのバッファサイズを指定するのは、setup()内で行います。
解説ページは、https://www.pjrc.com/teensy/td_uart.html |
【C#プログラム練習】 |
PC
VS2022
C# |
マウス自動クリック |
VB.NETを2年間続けてきて、たまたま、自動クリックのプログラムを作ろうとしたら、C#の事例しかなくて、しょうがないのでC#をいじることにしました。VVB.NETをやっていれば、C#への移行はあまり抵抗がなかったのが結論です。WEB上のサンプルもプロの方が書いているので、詳しいものが多いし、Q&Aは、VB.NETより多い感じがします。速度的には、C#もVB.NETもほぼ同じ感じです。https://gist.github.com/dj1711572002/d7374cb1a7c4f1c161c6c32aec3dfb03
C#とVB.NETの大きな違い、ソリューションエクスプローラの内容が違ってきます。
コピーして同じソリューションを作る場合、Form系3ファイルをコピーするのは同じですが、
namespaceの行のソリューション名を変更しておかないと動きません。
コンパイル処理が思い感じがします。 |
【M9N補間開発】 |
Teensy4.1
/ArduinoC |
F9PのPVTとM9NのPVTの同期をとって、ログ |
|
【C#プログラム練習】 |
PC
VS2022
C# |
C#でDataGridViewをいじる |
Response関数のelse以下がデータ表示部なので、そこにdgv1を追加しました。
下記コードをコピーすると全角が混じるので、プログラムエラーになるので、
gistからコードコピーしてください。
https://gist.github.com/dj1711572002/33853cb363f159febab9ed6af6e0075c
フォームをつくるのが面倒なら、プロジェクト全部ZIPでダウンロードしてください。
SerialDGV_03
|
【C#グラフ
プログラム】 |
PC
VS2022
C# |
C#で時系列グラフを作成、スクロールで自在に観察する機能 |
【RTK22】GPSドップラー解析ツール作り<30kmh以上の実験必要>
2022/8/22
20msec補間したF9PとM9NのPVTデータをBluetoothで受信して、PCで処理するプログラム作成しました。リアルタイム処理でなく、ログが終わったあとファイルを読み込む方式です。
グラフィックでなく、時系列の折れ線グラフでスクロールバーでグラフを流すことができるようにしてます。
※グラフを見て、M9NのDynamic Platformモードによって、速度波形が随分変わることが分りました。
ソースコードは、以降の改良版で公開してます。
|
【C#グラフ
プログラム】 |
PC
VS2022
C# |
C#でM9Nのノイズをローパスフィルタで平滑化した |
※簡単で分かりやすいものを探したら、ExcelVBAで作ってある
EasyLowpassというフリーソフトがvectorに掲載されていました。
https://www.vector.co.jp/soft/winnt/business/se443007.html |
【C#グラフ
プログラム】 |
PC
VS2022
C# |
C#で時系列グラフにXY軌跡グラフを追加して、データを走行軌跡を拡大して参照できるようにした |
XYグラフの拡大は、初めてでした。BITMAPメモリーオーバー対策で、データを3000行で1ブロックとして、処理する方法にしました。
●走行軌跡ビュワー特徴
特徴1:ログしたデータ全体を表示して、ブロックに分割して、cm分解能で見れる
特徴2:所望の軌跡をマウスクリックして、マウスホイールで拡大縮小して、みれる
特徴3:拡大縮小で、縮尺がついているので、ポイント間距離が分かる。
ソース備忘録
https://gist.github.com/dj1711572002/ec9a51146b71d2650f44ca53a81a0b37 |
【C#グラフ
プログラム】 |
PC
VS2022
C# |
Bitmapのグラフの点をクリックしたらその座標の元データを逆引き検索する機能をつけた |
●逆引き原理
①グラフをプロットするときに、ソースBITMAPにプロットするのですが、その時のプロット座標px,pyを
データ配列の行番号とリンクさせる配列 prownx[rowNo]=pxとprowny[rpwNo]=pyを作成しておきます。
②拡大したグラフpictureBox3内でクリックされた座標を、ソースBTIMAP座標に変換して、(src_cp3x,src_cp3y)を
計算します。
③表示しているブロック内の全データをforループで、回しながら、プロット座標(prownx[i],prowny[i])と
クリック座標(src_cp3x,src_cp3y)の距離を計算して、最小距離のプロット座標のデータ番号を求めます。
|
【C#グラフ
プログラム】 |
PC
VS2022
C# |
速度データを積分する機能もつけて
Excel用にCSVファイル出力 |
PC上Pgm処理:上記データで17000行もあるので、Excelで積分処理すると重くなって、仕事になりません。
そこで、C#のグラフィックプログラム内で、各種処理を行って、軽くしてからExcelに渡します。
このグラフィックプログラムは、走行データ全体を眺めながら、観察したい部分を詳細に拡大して、データを考察できるように各種機能をプログラムしてあります。
C#のソース:https://gist.github.com/dj1711572002/0a1a2229cd87fd46b5eeef33edd0b214
処理1:M9Nの速度ノイズをローパスフィルターで平滑化
処理2:20msec単位で台形積分計算します。線形補間してあるので、20msec積分x5個で100msecのF9Pの台形積分値と同値になります。20msecだと変位が小さい(5-15cm/20msec)ですが、積分単位時間が長くなると誤差が大きくなりますが、%で見れば、同じになります。
処理3:上記フィルター、積分処理した計算値をDataGridViewに書き込んで、CSVファイルで出力してExcelで読み込みます。
処理4:Excelで、各データ列を使ったグラフを作成して、観察します。
Excelが1万7千行あるので、セル内で台形積分するとメモリー不足で重くて使えないので、別プログラムで積分処理してから、Excelに渡す方法がスムーズです。 |