出典:パソコン上の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軸回りに回転した結果はこちら、「ローリング」「ピッチング」は一応それらしい形になっているが、「ヨーイング」はやはり変。