BNO085のAdafruitの解説で、UART-RVCモードをベタ褒めしているので、真っ先にやってみました。
回転治具で1回転で停止位置測定実験やったら、BNO055では10度以上軽くずれるのが、BNO085だと3-4度しかずれません。あきらかに、ドリフト特性も抑えられてますが、時間とともずれていくので、いずれは10度ずれると思いますが、3分間で10回転回してみても3-4度以内なので、私の使い方(RTKのHeading角でリセットする)なら1-2度以内で収められる感触をえました=>
=>信州MAKERSでは、スキー板の方角の精度が±1度でRTK技術で計測しているので、IMUのyaw角の精度解析ができますが、一般ユーザーは、RTK MovingBaseシステムなど持ちようがないので、IMUのyaw角の精度解析は、
回転体にロータリーエンコーダーを取り付けて、エンコーダーの正確な角度とIMUのyaw角を比較解析しないといけませんので、精度検証をやりたい方は、ロータリーエンコーダーとIMUの同期システムを制作してください、
※2024年7月5日 RTK GPS基準で解析したyaw角補正結果 ±3.5度レンジで収まりました。
最終的にyaw角誤差の周期をローパスフィルターで潰して、誤差を減らしました。
データを解析するには、ExcelでなくPython のpandas,matplot,scipy,scikitlearnなど使わないと
良い結果が得られませんので、これからは、データ解析はPython使うことにしました。
【STA24】BNO085yaw角補正結局ローパスフィルタで潰した<力ずくで終わらせた>
●2024年5月17日追記 IMUは、BIAS性能が重要
低価格IMUの性能を理解するのが大変です。何故ならメーカー側が仕様書に肝心のセンサの物理性能を記述してないからです。高性能IMUの仕様書を見て学習すれば、IMUの性能のどこが大事なのか、理解できるので、高性能IMU(77万円1個、7万円2個、3千円1個)でジャイロ仕様値を比較した記事作りました。
【STA24】高性能IMUの仕様比較と仕様学習<個人では入手できない>
◆Tactical IMUと中級IMU、低価格IMUとの顕著な違い;
●バイアス:ADIS16490を1時間放置しても1.8deg/hrしかドリフトしません。ADIS16460(7万円)が8deg/hrで、低価格IMUは、3600deg/hrと3桁違います。
●分解能:ADIS16490(77万円)のジャイロ角速度スケールファクタ(比例係数)が1LSBで7.6×10-8 deg/sec に対して、ADIS16460(7万円)0.005deg/secですので、6桁も上です。
低価格IMUのスケールファクタ 0.017deg/secなので23万倍分解能が上ですので、比較にならないほど、細かい分解能です。
※2024年5月14日更新 ロボット掃除機は、IMUでなくジャイロで制御しているみたいです、EPSONのYOUTUBEで詳しく説明してます。
ジャイロだけでみるとEPSONのジャイロセンサは、BNO085より上を行っています。ただ、電子工作向けでないので、チップを実装しないといけないが大変です。
リスク覚悟で、DIGIKEYで2個買ったのは正解でした。=>あと数か月使ってみて最終結論だしますが、cevaの掃除機用センサ開発の過程紹介
※2024年4月追記 4か月間スキー滑走計測で使用した結果
BNO085のyaw角精度は、補正しても±5度程度なので、計測用途には向きません。VRゴーグルとかロボット制御など制御目的で作う用途なら、測定誤差を制御系で打ち消すことができると思います。スキー場で実験を繰り返した結果、スキー滑走での必要なyaw角度精度は、±0.6度程度が必要と結論を得たため、IMUでなくRTK MovingBase法(2点のアンテナ間の精密測量技術)で±1度未満の測定をすることにしました。装置が大きくなるのですが計測に必要な精度が得られないので、苦渋の判断でIMUは、補間用センサとして使うことにしました。
【STA24】BootsOn Yaw補正値とSkiOn Heading角との比較<要求精度±0.6度だった>
●UART-RVCモードとは
ロボット掃除機用のモードです。高級なロボット掃除機のIMUとして、BNO085は採用されているみたいです。掃除機メーカーの技術者さんが楽に実装できるようにCEVA社が工夫したモードです。
なんと、出力TX信号のみで、双方向通信は行いません。つまりユーザーは設定をしなくていいモードです。
ですので、ケーブルは、GND,3.3V,SDA(TX)の3本でよいです。
ジャンパP0を半田でショートさせるだけで、UART-RVCモードが走るので、それをSerial受信するだけです。
プログラムは、UART-RVCライブラリを使います。短いデータなので、ライブラリを使わなくても出来るはずです。
●ライブラリー無しのUART-RCVモードの受信方法
バイナリシリアル受信(Serial2.read())して、データを変換する方法は、バイナリーデータを符号付整数に変換するだけです。サンプルPgm 関数 int bin2int(c0,c1)で変換します。データのヘッダーが0xaa,0xaaをとらえてデータ抽出します。全部で12バイトだけです。
https://gist.github.com/dj1711572002/db3793d7f604045e5dec4629babad413
●CEVA BNO085データシートの21ページに解説があります。
https://www.ceva-dsp.com/wp-content/uploads/2019/10/BNO080_085-Datasheet.pdf
●ArduinoIDE のプログラム
Adafruitの製品ページの随分下のほうにUART-RVCのまとまった解説があります。
https://learn.adafruit.com/adafruit-9-dof-orientation-imu-fusion-breakout-bno085
ライブラリは、#include “Adafruit_BNO08x_RVC.h”をライブラリーをインクルードでインストールできます。
UARTは、ESP32Dの16,17番ピンをSerial1.begin(115200,SERIAL_8N1,16,17);で宣言するだけです。
=>私のArduino ESP32のプログラムは、GISTにあります。BlueToothを使って送信してます。
データはyaw,pitch,rollの浮動小数点%4.2fの3個だけ、20msecで送信してます。
https://gist.github.com/dj1711572002/872715399d810dc6401a403c96edf77e
●私の配線
ボード本体に半田付けをできるだけしたくないので、ジャンパピンP0 1か所だけ半田載せました。
JST SHコネクタをアマゾンで買って、コンタクトの順序を黒赤黄黄で3番目の黄色にSDAを結線します。
テスタでGNDと3.3V間違わないように、何回もチェックします。逆刺しは一瞬でチップ破壊しますので
念には念をいれないといけません。高いチップほど、入念さが必要です。
JST-SHからJST-XHコネクタに変換して、ESP32Dの基板につないでます。ケーブルを短いのと長いのを用意して
実験によって切り替えるためにXHコネクタにしてあります。
●透明箱に実装
BNO085は、VRゴーグル用に開発されたので、専用のモードが各種用意されてます。そこで、コンパクトな箱に電池付でBlueToothで送信できるように、オールインワンで実装しました。
側壁にBNO-085を貼り付けて、90度単位で姿勢を変えて実験できるようにしました。
通電すると青いLEDが光るので安心です。赤いLEDはESP32Dです。
●動作試験
①90度ずつ箱の姿勢回転
Z軸下向きで、90度ずつ回転させました。
2回回しみましたが、元の姿勢に1-2度以内で戻ってます。
②縦置き X軸下向きで、箱回転
少し反応がだらだらですが、元の位置に1-2度誤差で戻ってます。
③回転治具で、1回転させて静止位置測定を10回繰り返す 3分間くらい Z軸下向き
10回やっても4度しかズレません。しかし、ドリフトが続いているので、そのうち10度になります。
どこかで、リセットしてやる必要があります。掃除ロボットなら、充電ステーションに戻った時にリセットするのだと思います。私のスキーの場合は、左右ターンの間のニュートラルポイントでスキーの方位と合わせます。
④縦置き X軸下向きで1回転静止位置 10回繰り返し 3分間くらい
これも10回で3.3度と少ないドリフトでした。
●感想
BNO055とは雲泥の違いです。同じハードで、ファームを別物にすればここまで改善できるということです。
CEVA社は、用途に絞って、最適化する技術が優れているのではないでしょうか。
BOSCH社は大企業なので。用途絞って最適化するという仕事の仕方は不得意ではないかと思います。
ソフトウェア技術者というよりは、製品企画者の能力で、このような違いがでるのだと思います。
信州MAKERSが提唱しているモノづくりとコト作りのバランスを考えながら開発するということをやれば
用途が不明確な開発でピンぼけの結果をだすことがなくなるのではと考えて提唱してます。
●以後
BNO055と同時測定して、明らかな差をだしてみたいと思います。
モードがたくさんあるのですが、メーカーの技術者向けに用意されていて、なかなか大変そうです。
RVCモードで問題がなければ、このまま使っていたほうが楽でいいので、RVCでしばらくやってみます。