概要
前回はパラメータを調整してみましたが、今回はENVハットのBMM150を使って磁気センサーを使ってみたいと思います。これを使えば電子コンパス的に方角がわかるはず、、、
ただ、あまり評判よくないんだよね、、、
サンプルスケッチ

スケッチ例のENVを動かしてみました。静止している状態で方角だけ出力したデータになります。結構フラフラしていますよね、、、
M5StickCの中に磁石が入っているので、どうしても磁気センサーの精度は悪くなるみたいです。
中身でキャリブレーションをしていたので外してみます。この処理はSeeed社のGrove接続のBMM150ライブラリと同じ処理だ、、、

あれ、範囲が狭くなったけれどものすごく安定した、、、
生データ | 調整後 | |
上 | 23 | 150 |
右 | 18 | 100 |
下 | 8 | 250 |
左 | 10 | 200 |
4方向に向けたときの値を比較してみました。方向によって感度が違う感じですね。
組み入れてみる
、、、動かない、、、
いろいろ調べたところ、そもそもちゃんと動かない疑惑があります。
ライブラリの種類
- https://github.com/m5stack/M5StickC/blob/master/src/utility/MahonyAHRS.cpp
- https://github.com/PaulStoffregen/MahonyAHRS/blob/master/src/MahonyAHRS.cpp
- https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
一番上が、M5StickCに入っているライブラリです。このライブラリは2番目のArduinoライブラリマネージャーに入っているものに近かったです。一番下が最初の実装です。
差をみたところ、一番大きかったのがクォータニオンから、オイラー角への変換方法でした。
- オイラー角とクォータニオン間の変換とベクトルの回転(かぜのテスト)
クォータニオンの計算もちょっと違うのですが、M5StickCは上のページにあるような計算式でオイラー角を計算していました。
このひとのページすごいな、、、ただ残念なことに私には辛い、、、
まとめ
オリジナルのソースと比べると磁気センサーを利用する関数であるMahonyAHRSupdateはsqrtだったところがinvSqrtになっていてなんか変。この辺を直しても計算結果がおかしいので磁気センサーの値か、軸の調整をしないと正しい値は出ないみたいです。
そして、M5StackなどのBMM150を内蔵している端末でもちゃんとしたAHRSは実現できていない気がします。。。
このサンプルが一番キレイに動くかな?
でもなんか変です。
たとえば、このドローンも6軸でBMM150は搭載していないんですよね。他の磁気センサーを入手してみて、どんな値になるのかを確認してから、再度チャレンジしてみたいと思います。
AliExpressでは注文したので、届いてからかな、、、
コメント