
- この記事の内容
- M5StampFlyとは何か
- 9つのセンサが創る飛行システム
- ESP32-S3による400Hz制御
- ESP-NOWがもたらす送信機選択の自由
- 物理設計の工夫
- StampFlyでできること
- センサ統合の重要性
- まとめ
- StampFly技術仕様(リファレンス)
- おねがいと注意
この記事の内容
第1回で学んだ物理的連鎖(PWM→MOSFETドライバ→ブラシモータ→プロペラ→推力)を実現する、M5StampFlyの具体的なハードウェア構成を解説します。
- StampFlyの全体像:36.8gに凝縮されたシステム構成
- 9つのセンサの役割:なぜこのセンサが必要なのか
- ESP32-S3の能力:デュアルコアと400Hz制御ループ
- 通信機能:ESP-NOWによる柔軟な送信機選択
StampFlyは単なる小型ドローンではなく、ドローン制御技術を学ぶのに適した「空飛ぶ学習プラットフォーム」として設計しています。
M5StampFlyとは何か
基本的な立ち位置
M5StampFlyは、教育・学習での利用を意識した超小型ドローンです。市販のトイドローンとは設計思想が異なり、中身を理解して改造できることを重視しています。
基本スペック
| 項目 | 仕様 | 備考 |
|---|---|---|
| 重量 | 36.8g | 100g未満で法規制が大幅緩和 |
| SoC | ESP32-S3 | WiFi/Bluetooth標準搭載 |
| 制御周期 | 400Hz | 2.5ms毎の制御ループ |
| センサ数 | 9個 | IMU、磁力計、気圧計、ToF×2、光学フローなど |
| 通信 | ESP-NOW | 高価なプロポが不要 |
| サイズ | 81.5×81.5×31mm | 手のひらサイズ |
| バッテリー | 300mAh HV LiPo | 約4分飛行 |
StampFlyの特徴
オープンで拡張しやすい
オープンソース設計なので、改造・拡張は自由にできます。Arduino IDEとESP-IDFの両方に対応しており、学習レベルに応じて開発環境を選べます。技術資料やサンプルコードも公開しています。
送信機を選べる
ESP-NOW通信を使っているので、高価なプロポは不要です。専用送信機(別売り)のほか、ESP32で自作した送信機やスマートフォン、PCからの制御も可能です。ペアリングも数秒で完了します。
軽量で安全
100g未満なので航空法の規制が大幅に緩和されます。室内飛行に適した重量とサイズで、衝突時のリスクも低いため教育現場でも使いやすい設計です。
制御性能は本格的
400Hzの制御ループ、9種類のセンサによる状態推定、FreeRTOSによるリアルタイム動作など、制御系としては十分な性能を持っています。
9つのセンサが創る飛行システム
StampFlyに搭載された9つのセンサは、それぞれ異なる役割を担っています。
姿勢制御の心臓部
BMI270(6軸IMU - SPI接続)
役割:機体の傾きと回転速度を検出 接続:SPI(10MHz高速通信) データ:角速度3軸 + 加速度3軸 更新頻度:400Hz(2.5ms毎)
IMUをSPI接続にしているのは、I2Cとの通信速度の差が大きいためです。
- I2C(400kHz):1秒間に約40万回の通信
- SPI(10MHz):1秒間に約1000万回の通信
400Hz制御では2.5ms毎にIMUデータを読み出す必要があり、SPIの高速性が不可欠です。
環境認識センサ群
BMM150(磁力計 - I2C接続)
地磁気を検出して方位(北の方角)を特定します。GPS無しでも機首方向を維持するために使います。分解能は0.3μTで、地磁気の微細な変化を捉えられます。
BMP280(気圧センサ - I2C接続)
気圧変化から高度を推定します。数cm単位の高度変化を検出でき、高度維持制御の基盤となるセンサです。
VL53L3CX×2(距離センサ - I2C接続)
ToF(Time of Flight)方式で距離を測定します。前方と下方に1個ずつ配置し、測定範囲は25mm〜300mm(実用的には200mm程度)。障害物回避や自動着陸に使います。
PMW3901MB(オプティカルフロー - SPI接続)
地面との相対移動を光学的に検出するセンサで、原理はマウスセンサーと同じです。数mm単位の水平移動を検出でき、GPSが使えない屋内でのポジション保持に活躍します。
システム監視センサ
INA3221(電圧・電流モニタ - I2C接続)
バッテリーの電圧・電流・電力消費を監視します。低電圧を検出したら自動着陸をトリガーする安全機能にも使っています。
ESP32-S3による400Hz制御
デュアルコアの使い方
ESP32-S3のデュアルコアを、通信と制御で分けて使っています。
Core 0(通信担当): ├─ WiFi関連タスク(ESP-IDFが自動配置) ├─ ESP-NOW通信処理 ├─ システムモニタリング └─ テレメトリ送信 Core 1(制御担当): ├─ センサデータ読み取り(400Hz) ├─ 姿勢制御演算(PID制御) ├─ モータミキシング計算 └─ PWM信号出力
1制御周期あたりの計算量
400Hz制御は2.5ms周期で制御ループを回すということです。240MHzのCPUなら、2.5msの間に約60万クロック分の処理ができます。センサ読み取り、姿勢推定、PID演算、モータミキシング、PWM出力まで含めても十分な余裕があります。
他のマイコンとの比較
| マイコン | 周波数 | 制御周期 | デュアルコア | 通信機能 |
|---|---|---|---|---|
| Arduino Uno | 16MHz | 50Hz程度 | × | なし |
| ESP32 | 240MHz | 400Hz程度 | ○ | WiFi/BT |
| ESP32-S3 | 240MHz | 400Hz | ○ | WiFi/BT + 省電力 |
ESP-IDFの制約について
ESP-IDFではWiFi機能(ESP-NOWを含む)が強制的にCore 0で実行されます。この制約があるため、リアルタイム制御はCore 1に集約する設計が必須です。
逆に言えば、Core 0が通信を引き受けてくれるおかげで、Core 1は制御演算に専念できるわけです。
ESP-NOWがもたらす送信機選択の自由
従来との違い
従来のドローンでは「本体+専用プロポ+受信機」のセットが必要で、コストも複雑さも増しがちでした。StampFlyではESP32-S3に通信機能が内蔵されているので、送信機側を自由に選べます。
ESP-NOWの特徴
技術面では、数msの低遅延、低消費電力、2.4GHz帯での安定通信が利点です。最大20台のペア接続に対応し、ブロードキャスト通信なら数百台規模の群制御も視野に入ります。
学習・開発の観点では、独自コントローラーの自作、スマホアプリからの直接制御、デバッグ情報のリアルタイム送信、群制御実験など、用途に応じた柔軟な使い方ができます。
物理設計の工夫
36.8gの意味
この重量には明確な意図があります。
まず、100g未満に収めることで航空法の規制が大幅に緩和され、許可申請不要で教育利用が可能になります。
次に安全性。軽いほど衝突時のリスクが低く、教育現場でも扱いやすくなります。
そして機敏性。慣性が小さいため高速な姿勢変更が可能で、制御の応答性も良好です。
StampFlyでできること
学習用途
制御の基礎学習として、物理的連鎖の理解(PWM→推力)、PID制御の実装と調整、センサ融合の基本概念などを実機で体験できます。
プログラミング面では、C/C++でのリアルタイム制御、FreeRTOSを使ったマルチタスク、通信プロトコルの実装が学べます。
センサ融合については、IMU・磁力計・気圧計の統合やカルマンフィルタの実装、状態推定アルゴリズムを実践的に扱えます。
教育現場への展開としては、位置推定機能の実装による高機能化、Scratchのようなタイル型プログラミング言語への対応、小中学生向けプログラミング教育への活用なども検討中です。
研究用途
制御アルゴリズムの検証(新しいPID調整手法、適応制御、ロバスト制御の評価)、複数機による群制御実験、機械学習や強化学習による制御最適化の実装基盤として使えます。
拡張可能性
ハードウェア面ではカメラ追加によるFPV飛行や独自センサの追加、ソフトウェア面では独自の制御アルゴリズムやカスタム通信プロトコル、リアルタイム画像処理など、いろいろな方向に拡張できます。
センサ統合の重要性
なぜセンサフュージョンが必要なのか
単一のセンサだけでは正確な姿勢推定や位置推定はできません。各センサにはそれぞれ弱点があります。
ジャイロスコープ(角速度センサ)の限界
角速度を積分して姿勢を求めますが、時間とともにドリフト(誤差の累積)が発生します。短期的には正確ですが、長時間になると信頼性が落ちます。
加速度計の限界
重力加速度から姿勢を推定できますが、機体が動いているときは動的加速度が加わって精度が低下します。静止時は正確でも、飛行中はそうもいきません。また、重力加速度ベクトル周りの回転(ヨー回転)は原理的に検知できません。
地磁気センサの限界
地球の磁場から方位を特定できますが、モータや金属部品による磁場の歪みの影響を受けます。地磁気ベクトル周りの回転は検知できず、地磁気が垂直に近い極地では特に顕著です。
センサフュージョンのアプローチ
StampFlyでは複数のフィルタアルゴリズムを使ってセンサデータを統合し、より確からしい状態推定を実現しています。
姿勢の表現方法
姿勢を表現する方法は主に3つあり、それぞれ一長一短があります。
オイラー角(ロール・ピッチ・ヨー) は直感的でわかりやすく、制御則の記述に向いていますが、ジンバルロック(特定の姿勢で自由度が失われる問題)が発生します。
回転行列(3×3行列) は数学的に厳密でジンバルロックも起きませんが、9要素分の計算量があり、正規直交性の維持も必要です。
四元数(クォータニオン) は4要素で3次元回転を表現でき、ジンバルロックが起きず計算効率も良好です。直感的な理解はやや難しいですが、数値的に安定しています。
主要なセンサフュージョンアルゴリズム
相補フィルタ(Complementary Filter)
姿勢角 = α × (前回の姿勢角 + ジャイロ角速度 × Δt) + (1-α) × 加速度計による姿勢角
ジャイロの短期的な正確さと加速度計の長期的な安定性を組み合わせるフィルタです。計算量が少なくリアルタイム制御に向いています。αは通常0.98程度(ジャイロ98%、加速度計2%の重み)に設定します。
カルマンフィルタ(Kalman Filter)
センサの誤差特性を考慮して最適な推定値を計算します。各センサの信頼度を動的に調整でき、計算量は多いものの高精度な推定が可能です。
Madgwickフィルタ
勾配降下法を用いた効率的なアルゴリズムです。相補フィルタより高精度で、カルマンフィルタより軽量。計算効率と精度のバランスが良く、StampFlyのようなリソースが限られた環境に適しています。
2つのベクトルで3軸姿勢が決まる理由
姿勢推定には、互いに平行でない2つの基準ベクトルがあれば、3次元空間での機体の向きを完全に特定できます。
重力加速度ベクトル(加速度計で取得) は常に下向きで、ロール角とピッチ角の推定に使えます。ただし、このベクトル周りの回転(ヨー)は検知できません。
地磁気ベクトル(地磁気センサで取得) は磁北を向いており、重力ベクトルと組み合わせることでヨー角の推定も可能になります。2つのベクトルの外積から完全な座標系を構築できます。
機体座標系 = [重力ベクトル × 地磁気ベクトル, 重力ベクトル, 外積ベクトル]
この2つの独立したベクトルにより、StampFlyの3軸姿勢(ロール・ピッチ・ヨー)が一意に決まります。ジャイロスコープは、これらの静的な姿勢推定値を動的に補完し、より滑らかでリアルタイムな姿勢情報を提供します。
位置推定のセンサフュージョン
StampFlyは姿勢だけでなく、位置推定でも複数センサを統合しています。
高度推定では、気圧センサ(BMP280)による相対高度変化、下方ToFセンサ(VL53L3CX)による対地高度の直接測定、加速度計Z軸の積分による短期的な上下動検出を組み合わせます。これにより、気圧変化に影響されない正確な対地高度維持が可能になります。
水平位置推定では、オプティカルフロー(PMW3901MB)による地面に対する相対移動、加速度計XY軸の積分による短期的な水平加速度検出、前方ToFセンサによる障害物距離を使った位置補正を組み合わせます。GPS無しでも、これらの統合により室内での安定したホバリングが実現できます。
実装上の課題
センサノイズの除去:各センサデータへのローパスフィルタ適用、異常値の検出と除外、移動平均による平滑化が必要です。
更新頻度の同期:IMUは400Hz、気圧計は50Hz、オプティカルフローは100Hzと更新頻度がバラバラなので、異なる周期のデータを適切に統合する工夫が要ります。
計算負荷の最適化:Core 1でセンサフュージョン演算を専用実行し、整数演算の活用や必要最小限の精度での計算で負荷を抑えています。
センサフュージョンは、StampFlyが安定して飛行するための核心技術です。複数のセンサデータを適切に統合することで、単一センサでは不可能な精度の状態推定を実現しています。
まとめ
M5StampFlyのハードウェア構成をざっと見てきました。
9つのセンサ、ESP32-S3のデュアルコア、ESP-NOW通信、36.8gの軽量設計——これらが組み合わさって、制御工学を実機で学べる環境を実現しています。Arduino IDEでの入門からESP-IDFでの本格開発まで、学習レベルに応じて段階的にステップアップできるのもStampFlyの強みです。
次回の第3回では、StampFlyの「モータドライバ・プロペラシステム」について、推力がどのように生成され制御されるのかを解説します。
StampFly技術仕様(リファレンス)
ピンアサイン一覧
I2C接続センサ(400kHz共通バス)
| デバイス | SDA | SCL | I2Cアドレス |
|---|---|---|---|
| BMP280(気圧センサ) | G3 | G4 | 0x76 |
| BMM150(磁力計) | G3 | G4 | 0x10 |
| VL53L3CX(距離センサ×2) | G3 | G4 | 0x52, 0x54 |
| INA3221(電流監視) | G3 | G4 | 0x40 |
SPI接続センサ(高速通信)
| デバイス | MOSI | MISO | SCK | CS | 速度 |
|---|---|---|---|---|---|
| BMI270(IMU) | G14 | G43 | G44 | G46 | 10MHz |
| PMW3901MB(オプティカルフロー) | G14 | G43 | G44 | G12 | 10MHz |
モータPWM出力
| モータ位置 | ピン | 回転方向 | 備考 |
|---|---|---|---|
| M1(右前) | G6 | 反時計回り(CCW) | 左回り |
| M2(左前) | G5 | 時計回り(CW) | 右回り |
| M3(左後) | G8 | 反時計回り(CCW) | 左回り |
| M4(右後) | G7 | 時計回り(CW) | 右回り |
Grove端子
| コネクタ | 機能 | SDA/TX | SCL/RX |
|---|---|---|---|
| 赤(A) | I2C | G13 | G15 |
| 黒(B) | UART | G1 | G2 |
その他出力
| デバイス | ピン | 用途 |
|---|---|---|
| ブザー | G12 | 状態通知 |
| WS2812 RGB LED | G39 | 外部LED |
| 内蔵RGB LED | G21 | M5StampS3内蔵 |
モータ回転方向図(上から見た図)
前方
↑
[M2] [M1]
CW CCW
\ /
\____/
/ \
[M3] [M4]
CCW CW
↓
後方
対角モータが同じ回転方向になるよう配置され、トルクバランスを実現しています。
シリーズ: 基礎・ハードウェア編 前提知識: 第1回の物理的連鎖の理解 次回: 第3回「モータドライバ・プロペラの物理学」
コード例について: 本記事のコード例は学習目的で簡略化しています。実際に使う際は、エラーハンドリングや安全機能、最適化を追加してください。
参考資料:
おねがいと注意
本記事はドローンの誘導や制御についての話題を取り扱います。工学的に興味がある人、より深く勉強して実装してみたい人に向けて教育的観点や趣味の人たちを増やしたいと言う意味合いで執筆しています。これを読んでドローンやロボット制御に興味をもってもらって、実際に手を動かしてみる人が増えることを夢見ています。そのような意図以外に人を傷つけたりといった使い方や法令違反をすることなくご利用ください。
また、お約束事項ですが・・・・ 本ブログに掲載する技術情報・解説・コード例は、教育・研究・学習目的で提供するものです。内容の正確性・安全性には十分配慮しておりますが、利用に伴う結果や損害について筆者は一切の責任を負いません。実装や運用は、各自の判断と責任において行ってください。
安全第一でドローン技術を学び、楽しんでください。