M5STACK GRAYを試しました
2019年11月にスイッチサイエンスさんで11%値引きセールを行っていた時にM5STACK GRAYを購入してましたがしばらく放置していました。
理由はWindows+Arduinoの場合コンパイルが長いこと時間かかります。最初はフリーズしたのかと思いビルドを途中でやめていましたが、コンパイル時により詳細な情報を表示すると警告にチェック入れるとちゃんと動いていました。今後はPlatformIOに変えようと考えています。
課題:MPU6886のAHRSでYawが流れる
参考
https://github.com/m5stack/M5Stack/issues/191
があり、ずっとOPEN ISSUEとなっていますので、対策方法をいろいろ探していました。その中でomegatao氏のプログラムを少しいじってテストしてみました。
追記:原作者のOmegatao氏へプルリクを出して承認されました。pitch,roll方向に傾けてもyawはずれることなく表示されていると思います。
https://github.com/omegatao/M5StackGrey_MPU6886_BMM150_AHRS_sample
main.cをarduino IDE用に変更して、main.ino, BMM150class.cpp, BMM150class.hを少し変更しました。
主な変更内容:
オフセットをLoadするコードとCalibrationをユーザが呼べるように変更した。
具体的にはBMM_CalibrationとBMM_Offset_LoadをPrivateからPublicへ変更。
main.inoの60行目にあるMadgwickQuaternionUpdateの磁気センサー入力をRaw値からOffset補正値へ変更。(MagnetX,MagnetYのタイプミスがあったので修正)
9/28追記:MPU9250ではMagnetY,MagnetX,MagnetZの順のままで良いようです。MPU9250データシート38ページの9.1 Orientation of Axis参照。MPU6886+BMM150は調査中
Yaw計算後の偏角値8.5°引き算を削除(-8.5°はSparkfunのあるUSコロラド州のBoulder周辺の偏角値。東京を基準にすると偏角値は+7.66°くらい)
Heading Angleを追加(Offset補正しないと正しく表示されない。-180°~180°のマイナス側を180°~360°表示へ変更)
立ち上げ後のCalibrationをやめた。BTN_Aを押してCalibrationする方法へ変更。
BMM150のオフセット, Head Angle, 比較用にオリジナルのAHRS計算値を同時に表示
表示させたのがこちら
上から順に角速度、加速度、地磁気、地磁気オフセット、方向、地磁気入りフィルタ値、MPU6886のみのフィルタ値、温度表示
Yawは流れなくなりましたが、PitchとRollがオリジナルより小刻みに変動しているようなので、変更したことによる跳ね返りが起きていないかを検証中です。
検証がうまくいきましたら次はM5StackのBluetooth機能を利用した自撮りリモコンや在宅中のプレゼンス詐称ソフトの開発日記を予定しています。