STA24のMovingBaseシステムプログラムは、STA23のちょい変更ですまそうと思っていたのですが、
結局大幅変更となりました。何故なら、STA23MovingBaseシステムがBNO055を使っていた点にあります。
Fusionアルゴリズムに致命的なバグがあるBNO055を使いこなすためにSTA23で10か月切った貼ったしてきたプログラムなので、STA24では、不要なコードばかりで、全体の70%がいらないコードとなりました。
gistにおいてあります。
https://gist.github.com/dj1711572002/c916035f0b3fdd3ba7202de32c562668
●STA24の変更点備忘録
変更点1:BNO085 RVCモード用(100Hz)の受信、SDカードログ
BNo085のRVCモードは、100Hzで19byteデータを垂れ流してくるシンプルなモードです。つまり、UARTで使っているのは、 センサからのTX線1本だけで、一方通行です。ですので、サンプリングの指示命令などはありませんので、垂れ流してくるデータを落ちなく拾うという受信プログラムとなります。通常のIMUだとi2cで命令をだしてデータを受信するのですが、それがありませんので、タイマー類が一切不要です。STA23では、intervaltimerで大ハマりにはまったのですが、それが無くなって良かったです。
=>やった事:Serial3ハードウエアシリアルに19バイト超えたら読み込んで、その場でSDログさせるようにしました。
電源オンで測定GOと同時にBNOログ開始して測定オフまでログします。
STA23では、F9Pの周期に合わせて、IMUもデータをため込んで一挙にSD書き込みしていたのですが、BNO085では、100Hz周期となると10msecに一回データが入るので、F9Pの周期に合わせているとシリアル受信バッファ量がプログラム全体の時間ばらつきをくらってしまって、不安定になる現象が発生したため。思い切ってシリアル受信ブロック内にSD書き込みをいれてしまいました。M5Stackなどでは、絶対にできないことですが、超高速SD書き込み(SDIOで10MBPS以上)ができるTeensy4.1なら余裕でできます。19byteのデータを書き込む時間は、数μsecしかかかりませんので、その他の計算も全部シリアル受信ブロックでできてしまいます。
機能1;BNO専用のbinファイルを起動時にsetup内でF9PからのPVTでタイム測定してタイムスタンプ付ファイル名で作成
時間測定なら、F9PがFIXする必要がないので通電数秒で時間データ取得できます。
ファイル名:bno_MM_dd_hh_mm_ss.bi
機能2:BNOデータのタイムスタンプを19byte以降20-23byteまで4byteでitow換算の時刻で記録
RTKのデータと同期させるので、時刻をitow換算にしておくと楽です。時刻の絶対値は、GPS Timepulseの割り込み時刻を
基準としますが、F9P MovingBaseの場合120msecと中途半端なので、3000msecに一回しかtimepulseと同期できないので
3秒に一回マイコン内のタイマーとGPS絶対時刻をあわせてそれにitowも合わせるという手間をかけてます。
これは、STA23で開発したノウハウです。
機能3:BNO085のINDEXエラー率カウント
BNo085のRVCモード、1%以下でINDEXエラーが発生します。それをモニターできるようにしました。
変更点2:BlueToothモニターの表示内容改良
TeraTermでログを見ながら、全体の状態を監視できるようになってます。
文字が小さいのですが、現場では、タブレットからスマホへsplashtopでリモートデスクトップ表示しているので
スマホで拡大してみることができるので、たくさん文字があっても見たい文字が即みられます。
SPLASHTOPは、MSやGoogleのリモートデスクトップアプリより高速で機能が上です。
●以後
今週は、スキー場にいけませんでした。三連休で、MBシステムを防水ケースにいれこんで、アンテナ線
作って、スキーへの配線実装を確実に行います。
幸い雪が少し振ったので、雪解けの速度が遅くなったので、2月末まではもちそうなので、あと2-3回
測定できそうです。