← Hub に戻る Library 基礎知識

IMU の基礎

IMU(Inertial Measurement Unit)は、加速度と角速度(ジャイロ)を測るセンサです。 M5StickC Plus の内蔵 MPU6886 を入口に、傾き操縦で使う考え方をまとめます。

関連: ミニ① IMU 読み出しミニ② 傾き操縦

IMU とは?

Chocofon(B):
IMU って何の略? スマホにも入ってるやつ?
AIチューター:
バイブス受信。Inertial Measurement Unit(慣性計測装置)です。 スマホの画面回転やゲームの傾き操作と同じ仲間。ラボでは M5 の内蔵チップを読みます。
よく出てくる2つ
  • 加速度計(accel) — 重力を含む加速度。単位はだいたい g
  • ジャイロ(gyro) — 角速度。単位はだいたい dps(度/秒)

加速度とジャイロの違い

加速度計ジャイロ
何が分かるどの向きに「落ちているか」(静的な傾き)どれくらい速く回っているか
静止時重力で約 1 g が出るほぼ 0(理想)
向きの推定静かなら得意動きの変化に強い
弱いところ振動・加速でノイズ長く積分するとドリフト
AIチューター:
ミニ①②ではまず 加速度だけから簡易の pitch/roll を出しています。 本格的な姿勢推定(フィルタ融合)は、倒立振子など次のテーマで深掘りできます。

傾き(pitch / roll)のイメージ

コントローラをゆっくり傾けると、加速度の各軸の成分が変わります。 そこから角度の近似値を計算するのが、ラボの「簡易 pitch/roll」です。

ミニ②で確定した使い方(実機)
  • roll → throttle(前後)
  • pitch → steer(左右)
  • デッドゾーン ±5°、フルスケール仮 ±30° → コマンド ±1000
Chocofon(B):
軸の名前と「車の前後左右」は机上で合わせた! 最初は逆だった……。
AIチューター:
教科書の軸定義と、ヌンチャクの持ち方は一致しないことがあります。 実機で合わせて確定するのが正解ルートです。

M5StickC Plus での読み方

  • ライブラリ: M5Unified
  • API の流れ: M5.Imu.update()getImuData()
  • 実機チップ例: MPU6886getType() で確認)
  • 配線: 追加なし(ボード内部の I2C)→ 詳細は I2C の基礎
// イメージ(詳細は m5_imu_readout / m5_imu_rc)
M5.Imu.update();
auto data = M5.Imu.getImuData();
float ax = data.accel.x;  // g
float gx = data.gyro.x;   // dps

使うときのコツ

  • まず Serial で数値が動くことを確認してから LCD/無線へ
  • 操縦では デッドゾーン を入れる(手ぶれで勝手に動かないように)
  • フルスケール角は握りやすさ優先(大きすぎると過敏、小さすぎると振り切れない)
  • スティックは物理可動域の上限がある一方、IMU は角度でフルレンジを使いやすい(ミニ③の実走知見)
管理人:
センサは「読めた」がゴールではない。何にマップするかを机上で決めろ。

関連リンク