Pieces for electronic kits

For Ubiquitous Computing

M5Stackで姿勢に応じた3D表示をする

M5Stack grayにはIMUとLCDディスプレイが付いている。
簡単にARライクなアプリを作ってみる。

作ったもの

f:id:nekosystem:20190317195013g:plain
視点 - M5Stack - 対象が直線上にあり、M5Stackのディスプレイの法線と視線が平行なとき、ARライクな動作をする

用意するもの

  grayでないとIMUが載っていない。

プログラム

github.com

  • quaternionFilters.cpp / .h
    • 外乱に弱い地磁気センサを使いたくないので、加速度と角速度だけからAHRSを更新する関数MadgwickQuaternionUpdateIMU()を追加
    • 物体の回転操作にQuaternionは使いづらい(使えるが分かりづらい)ので、Quaternion -> Rotation Matrixの変換を追加
    • RotationMatrixを取得する関数getR()を追加
    • M5Stackのデフォルトのライブラリの/src/utility/quaternionFilters.cppの代わりに使う
  • 3Dwire-AHRSanim.ino
    • 3D wire-frameをM5Stackの姿勢の転置行列で回転、つまり、M5Stackの姿勢変化を補償するように回転させることを目指す
    • M5.Lcd.fillScreen()だと重たく画面がちらつくので、M5.Lcd.drawLine()で前フレームの画像を消す

以上。