【RTK22】今まで開発したマイコン用・PC用RTK Pgmの整理中3<2022年10/10まで分>

2020年分に続いて2021年を飛ばして2022年分を記録します。
なぜなら、年々プログラム機能が向上しているので、最新のプログラムが一番参考になるからです。

種別> ターゲットマシン/言語 処理データ 解説
【MovingBase
SDロガー
Teensy4.1
/Arduino C
MovingBase
出力をSDカードログ

RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その1<SDcardWrite5MB/sec以上でる>

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ポート経由で通信

【RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その2<F9P出力をUSB HOST受信>

2022/1/7
Teensy4.1を採用した理由の一つに、USB HOSTが内蔵されていて手軽に使える点です。F9Pのシリアルが22個しかないので、基準局接続とRover接続で使い切ってしまって、自分のデータ出力ができない課題を解決するためどうしてもUSBHArduinoIDEのスケッチ例の一番下のほうへいくとTeensy4.1用が膨大にあります。USBH
OSTでUSBポートから出力する必要があったので、USBHOST動作が必須でした。ここでは、サンプルプログラムをちょっといじっただけです。
●サArduinoIDETeensyDuinoをインストールしてあるArduinoIDEならサンプルプログラムにあります。
USBHost_t36のSerialを選びます。コードが開きますので、コンパイルしてTeensy4.1に書き込みだけです。

【USBHOST
ロガー】
Teensy4.1
/Arduino C
3枚の基板からの出力をUSB3ポート経由で通信

【RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その3<USB3ポートまとめて受信>
2022/1/10 https://gist.github.com/dj1711572002/aabdaf3b9cbd848d28a2bef1e15522d3

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ポート経由で通信

【RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その4<MovingBaseをUSBHOSTでまとめる> 2022/1/12
https://gist.github.com/dj1711572002/aabdaf3b9cbd848d28a2bef1e15522d3

上記1/10のプログラムをF9PMovingBase出力に改造したもの。
きちんとデータがUSB送信されているかを確認するためにPC側ではUcenterを使って受信して、Fixしたデータが長時間大丈夫かをチェックしてあります。F9Pの場合、一瞬無事に接続できても、長時間でこける事件が多発しますので、プログラムが大丈夫かどうか確認するには、長時間(1時間)くらいは動作させる必要があります。

【USBHOST
SDロガー
Teensy4.1
/Arduino C
2枚のF9P基板からUSBHOST経由で、SDカードログする

【RTK22】Teensy4.1でMovingBase受信Pgm作ったrev.042<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レシーバー

【RTK22】F9P基板上にNTRIPレシーバー載せた_半日でできた<XbeeスロットへWiFi基板挿す>
2022/1/23
ArduSinple製WiFiNTRIPMASTERが便利なのですが、スペインから輸入すると1万円近くしてしまうのがネックなので、類似品を自作してみました。ちょうどいい基板が中国製で、技適対応なしだったので、電波監理局の技適なし品登録制度を使って、使える手続きをしました。以外と簡単に手続きできたので、180日一回新テーマで更新してESP8266基板を使うことにしました。
私のプログラムは、GISTにおいてあります。
記入が必要なのは、WiFiのssidとパスと善意の基準局のIDです。
https://gist.github.com/dj1711572002/fd395ff6ffc8fb89a30f60bc67909601
ライブラリは、GLAY-NTRIP-CLIENTです。
https://github.com/GLAY-AK2/NTRIP-client-for-Arduino

【USBHOST
ロガー】
Teensy4.1
/Arduino C
F9P基板4枚から基板IDを取得するPgm

【RTK22】PollingしてF9P4個からチップIDを取得するPgm作った<受信タイミングにコツ>
2022/1/28
USBHOSTだとUserialに接続されているボードがどれなのか区別がつきません、そこで、F9Pの基板IDを取得するコマンドUBX-SEC-UNIQUE をF9PにPollingして、返信でIDを受け取ります。
https://gist.github.com/dj1711572002/f9bb714f087a908def8861b9342b3065
4ポートで試すと順不同に返信がきました。やはり、USBHOSTのネックは、順不同である点です。

 

【STA LCD
モニター】
Teensy3.2
/ArduinoC
視認性のよいOLEDをためした。

【RTK22】秋月のOLEDキャラクタDIPLAYを試した<直射日光下で視認性ギリギリ>

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
スキー挙動と時系列グラフのカーソル同期させた

【STA22】RTKデータ解析用グラフィック機能開発ーその5ー<8か月の集大成>
2022/1/12
PCのSTA用グラフィック解析Pgmを完成させました。BITMAPを何枚も駆使して、グラフィックと時系列グラフでカーソルを同期させて、スキー挙動とデータの関係を観察できるようにしました。
https://youtu.be/NJhKgztkLUQ
https://gist.github.com/dj1711572002/3fd4a496dda9140cd027f68a687ba482

1年がかりで、ここまで作れるようになりました。BITMAPを使ったグラフプログラムが得意になりました。

【SDロガー】 Teensy4.1

/ArduinoC

SDカードを抜かずにUSBHOST経由でSDカードを操作

【Teensy4.1】MTPモードでSDカード抜かずにWin10へマウント<TyToolでPgm切替便利>

 実装をしていると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ログシステムをまとめました。

【RTK22】RTKモニターPgm完成<Teensy-M5Atom無線システム>
2022/5/1
Teensyを使ったシステムをひとまとめしました。無線モジュールとしてM5Atomを使ってます。
モニターはM5Core2です。
①Teensy 4.1用Pgm  STA22_8Hz_USBHOST_STABLE_M5cali_rev10279.ino
https://gist.github.com/dj1711572002/1287d1bf8204e1ec8ee914f1824bc7c3

②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段階で状態を知らせる

【RTK22】RTKアラーム機能車載走行で実験したら便利だった<NO RTK・Float・Fixed>
2022/5/10
https://youtu.be/ca1RcXKvErU

上記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

シリアル自動受信機能が便利です。

【RTK22】超高速マイコンCortex-M7搭載Teensy4.1いじる その5<HardwareSerial 超便利>
2022/6/17
Teensy4.1のハードウェアシリアルが便利であることを実感したので、備忘録しておきました。

●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#
マウス自動クリック

【C#】初めてC#のPgm作ったその1<マウスを自動クリック回数間隔指定>
2022/6/26

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の同期をとって、ログ

【RTK22】F9P高速化試験システム試運転<M9N25Hzで補間して50Hzで出力>
2022/7/10
M9NでF9Pを補間するアイデアに傾注して、10月までずっと補間関係のプログラム作ってました。
F9P100msec(10Hz)とM9N40msec(25Hz)の最大公約数は、20msecなので、20msec基準で補間計算をして、データを生成することにしました。50Hzのitow出力となります。
ソースは、GISTにあります。
https://gist.github.com/dj1711572002/fa30615dad79ddf06e65d1ce6f2bc150

 

【C#プログラム練習】 PC
VS2022
C#
C#でDataGridViewをいじる

【C#】VisualStudio2022いじる その2<DataGridViewで表示>
2022/714
C#でもDataGridVeiwをいじって、VB.NETで作成した、STA21プログラムをC#へ移行する準備を始めました。

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のノイズをローパスフィルタで平滑化した

【RTK22】GPSドップラー用ローパスフィルタPgm作成<積分精度向上した>
2022/8/25
ローパスフィルタを通して、時系列データを平滑化した。おかげで、F9Pの波形と比較ができるようになった。
全体の解析プログラムのソース備忘録
https://gist.github.com/dj1711572002/6356c9c6a6233fc35e1ae7de1e3a22be

※簡単で分かりやすいものを探したら、ExcelVBAで作ってある
EasyLowpassというフリーソフトがvectorに掲載されていました。
 https://www.vector.co.jp/soft/winnt/business/se443007.html

【C#グラフ
プログラム】
PC
VS2022
C#
C#で時系列グラフにXY軌跡グラフを追加して、データを走行軌跡を拡大して参照できるようにした

 RTK22】RTK走行軌跡ビューワー<所望のデータを見つけて拡大自在>
2022/9/21

XYグラフの拡大は、初めてでした。BITMAPメモリーオーバー対策で、データを3000行で1ブロックとして、処理する方法にしました。

●走行軌跡ビュワー特徴
特徴1:ログしたデータ全体を表示して、ブロックに分割して、cm分解能で見れる
特徴2:所望の軌跡をマウスクリックして、マウスホイールで拡大縮小して、みれる
特徴3:拡大縮小で、縮尺がついているので、ポイント間距離が分かる。

ソース備忘録
https://gist.github.com/dj1711572002/ec9a51146b71d2650f44ca53a81a0b37

【C#グラフ
プログラム】
PC
VS2022
C#
Bitmapのグラフの点をクリックしたらその座標の元データを逆引き検索する機能をつけた

【RTK22】グラフをクリックして元データを逆引きした<ややこしい>
2022/10/4

●逆引き原理
①グラフをプロットするときに、ソースBITMAPにプロットするのですが、その時のプロット座標px,pyを
データ配列の行番号とリンクさせる配列 prownx[rowNo]=pxとprowny[rpwNo]=pyを作成しておきます。

②拡大したグラフpictureBox3内でクリックされた座標を、ソースBTIMAP座標に変換して、(src_cp3x,src_cp3y)を
計算します。

③表示しているブロック内の全データをforループで、回しながら、プロット座標(prownx[i],prowny[i])と
クリック座標(src_cp3x,src_cp3y)の距離を計算して、最小距離のプロット座標のデータ番号を求めます。

 https://gist.github.com/dj1711572002/e4da54cb5af1f2782d5a7f8f358c4afa

【C#グラフ
プログラム】
PC
VS2022
C#
速度データを積分する機能もつけて
Excel用にCSVファイル出力

【RTK22】F9Pの速度積分の精度検証<高精度変位測定にはPVT以外にRELPOSNEDも必要だった>
2022/10/8

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に渡す方法がスムーズです。

10月10日現在は、ここまでです。
2022年は、松本から長野市へ開発拠点を引っ越すため、開発活動が中断してきましたが、10月以降から加速して進めます。

 

コメントを残す

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