IMU の基礎
IMU(Inertial Measurement Unit)は、加速度と角速度(ジャイロ)を測るセンサです。 M5StickC Plus の内蔵 MPU6886 を入口に、傾き操縦で使う考え方をまとめます。
IMU とは?
Chocofon(B):
IMU って何の略? スマホにも入ってるやつ?
IMU って何の略? スマホにも入ってるやつ?
AIチューター:
バイブス受信。Inertial Measurement Unit(慣性計測装置)です。 スマホの画面回転やゲームの傾き操作と同じ仲間。ラボでは M5 の内蔵チップを読みます。
バイブス受信。Inertial Measurement Unit(慣性計測装置)です。 スマホの画面回転やゲームの傾き操作と同じ仲間。ラボでは M5 の内蔵チップを読みます。
よく出てくる2つ
- 加速度計(accel) — 重力を含む加速度。単位はだいたい g
- ジャイロ(gyro) — 角速度。単位はだいたい dps(度/秒)
加速度とジャイロの違い
| 加速度計 | ジャイロ | |
|---|---|---|
| 何が分かる | どの向きに「落ちているか」(静的な傾き) | どれくらい速く回っているか |
| 静止時 | 重力で約 1 g が出る | ほぼ 0(理想) |
| 向きの推定 | 静かなら得意 | 動きの変化に強い |
| 弱いところ | 振動・加速でノイズ | 長く積分するとドリフト |
AIチューター:
ミニ①②ではまず 加速度だけから簡易の pitch/roll を出しています。 本格的な姿勢推定(フィルタ融合)は、倒立振子など次のテーマで深掘りできます。
ミニ①②ではまず 加速度だけから簡易の pitch/roll を出しています。 本格的な姿勢推定(フィルタ融合)は、倒立振子など次のテーマで深掘りできます。
傾き(pitch / roll)のイメージ
コントローラをゆっくり傾けると、加速度の各軸の成分が変わります。 そこから角度の近似値を計算するのが、ラボの「簡易 pitch/roll」です。
ミニ②で確定した使い方(実機)
- roll → throttle(前後)
- pitch → steer(左右)
- デッドゾーン ±5°、フルスケール仮 ±30° → コマンド ±1000
Chocofon(B):
軸の名前と「車の前後左右」は机上で合わせた! 最初は逆だった……。
軸の名前と「車の前後左右」は机上で合わせた! 最初は逆だった……。
AIチューター:
教科書の軸定義と、ヌンチャクの持ち方は一致しないことがあります。 実機で合わせて確定するのが正解ルートです。
教科書の軸定義と、ヌンチャクの持ち方は一致しないことがあります。 実機で合わせて確定するのが正解ルートです。
M5StickC Plus での読み方
- ライブラリ: M5Unified
- API の流れ:
M5.Imu.update()→getImuData() - 実機チップ例: MPU6886(
getType()で確認) - 配線: 追加なし(ボード内部の 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 は角度でフルレンジを使いやすい(ミニ③の実走知見)
管理人:
センサは「読めた」がゴールではない。何にマップするかを机上で決めろ。
センサは「読めた」がゴールではない。何にマップするかを机上で決めろ。
関連リンク
- I2C の基礎 — 内蔵 IMU がつながるバス
- ミニ①:IMU 読み出し
- ミニ②:傾き操縦・机上確認
- ミニ③:実車・実走行