出典:パソコン上のM5Stackの3Dモデルを、M5Stackの動きに合わせて動かす
 ジャイロについて調べているときに「SWITCHSCIENCE」の出典サイトを見つけ、自分もやってみることに。 さて、どこまでできることやら。
 手順
 (1)パソコン上にM5Stackの3Dモデルを作成
 (2)IMUを使い端末の姿勢を計算
 (3)姿勢データをパソコンに送り、3Dモデルを制御

パソコン上にM5Stack「3Dモデル」作成

 (1)Processingのインストール
 (2)M5StackCore2の写真を撮り、出典と同じく700×700、700×300にサイズ調整をして、3Dモデルを作成。
    ひどい写真だがこんな感じ。






IMUを使い端末の姿勢を計算

加速度とジャイロの値から姿勢を計算し、データをシリアルに出力

 赤字部分を足しただけ、他は前回の「MPU6886サンプル」と同じ、ただMPU6886なのでキャリブレートは無く不安が。

mpu6886_serialプロジェクト
main.cpp
#include <M5Core2.h>
float accX = 0.0F; 
float accY = 0.0F; 
float accZ = 0.0F;
float gyroX = 0.0F;
float gyroY = 0.0F;
float gyroZ = 0.0F;
float pitch = 0.0F;
float roll  = 0.0F;
float yaw   = 0.0F;
void setup(){
  M5.begin(); //Init M5Core.
  M5.IMU.Init();  //Init IMU sensor.
  M5.Lcd.fillScreen(BLACK); 
  M5.Lcd.setTextColor(GREEN , BLACK);
  M5.Lcd.setTextSize(2);
}
void loop() {
  M5.IMU.getGyroData(&gyroX,&gyroY,&gyroZ);
  M5.IMU.getAccelData(&accX,&accY,&accZ); 
  M5.IMU.getAhrsData(&pitch,&roll,&yaw); 
  M5.Lcd.setCursor(0, 20); 
  M5.Lcd.printf("gyroX,  gyroY,  gyroZ"); 
  M5.Lcd.setCursor(0, 42);
  M5.Lcd.printf("%6.2f %6.2f%6.2f o/s", gyroX, gyroY, gyroZ);
  M5.Lcd.setCursor(0, 70);
  M5.Lcd.printf("accX,   accY,  accZ");
  M5.Lcd.setCursor(0, 92);
  M5.Lcd.printf("%5.2f  %5.2f  %5.2f G", accX, accY, accZ);
  M5.Lcd.setCursor(0, 120);
  M5.Lcd.printf("pitch,  roll,  yaw");
  M5.Lcd.setCursor(0, 142);
  M5.Lcd.printf("%5.2f  %5.2f  %5.2f deg", pitch, roll, yaw);
  Serial.printf("%5.2f,%5.2f,%5.2f\r\n", pitch, roll, yaw);
  delay(10);  // Delay 10ms.
}

シリアルデータをグラフ化

 数値を見ていると「ヨー」の値がおかしい。 シリアル出力データをグラフ化してみることに。
 使ったのは、京都市にある株式会社データ・テクノというデータロガーの製作会社が公開しているこのソフト
「CPLT Version 1.04」 無料で公開してくださりありがたい限り。
 早速、表示してみるとM5Core2は静止状態なのに、次のようになってしまい「ヨーイング」の値がおかしいのは明白。 これでは3Dモデルの制御はできないので、ここで断念。

 ちなみにX軸、Y軸回りに回転した結果はこちら、「ローリング」「ピッチング」は一応それらしい形になっているが、「ヨーイング」はやはり変。