ArduPilotは、機体を遠隔操作するだけのファームウェアではない。IMU、GNSS、気圧計、磁気センサ、距離センサから機体状態を推定し、目標姿勢・速度・位置を制御し、通信断やセンサ異常時には安全側へ遷移する自動操縦プラットフォームである。Copter(マルチコプター/ヘリ)、Plane(固定翼)、Rover(地上車両)、Boat(水上艇)など、動力学の異なる機体を同じパラメータ・ログ・地上局の考え方で扱える。
0. 30秒要約
- ArduPilotの中心は「センサ → 状態推定 → 制御器 → アクチュエータ」の閉ループ。推定が壊れれば、どれほど高性能なモータでも安全に飛べない。
- EKF3はジャイロ・加速度・GNSS・磁気・気圧・距離を融合し、姿勢・速度・位置・バイアスを推定する。単一センサへ依存しないのが基本である。
- MAVLinkは機体と地上局、コンパニオンコンピュータを結ぶ軽量プロトコル。テレメトリとコマンドを分け、認証・暗号化・権限を設計する。
- SITL(Software in the Loop)でミッション、フェイルセーフ、パラメータを実機前に再現できる。ログ解析と再現試験を自動化すると安全性が上がる。
- 自律化の範囲は、安定化、位置保持、ウェイポイント、障害物回避、協調飛行の順に広がる。各段階で手動復帰とジオフェンスを残す。
1. 典型的なデータフロー
ArduPilotの処理を四つの箱に分けると理解しやすい。
- 入力:IMU、GNSS、コンパス、気圧、距離、RC入力、MAVLink。
- 推定:姿勢、位置、速度、風、センサバイアス、健康状態。
- 制御:姿勢・角速度・位置・速度・航法の各ループ。
- 出力:モータPWM、サーボ、モード遷移、テレメトリ、ログ。
IMUは数百Hz、GNSSは数〜数十Hz、地上局との通信は数Hz〜数十Hzと周期が異なる。タイムスタンプと遅延を無視すると、位置保持が振動したり、旋回後に機体が流れたりする。センサドライバから推定器へ渡る時刻を単調にし、遅いセンサは観測時刻へ補間して使うことが、アルゴリズムより先に必要になる。
2. EKF3:予測と観測を繰り返す
状態ベクトルを
とする。位置\mathbf p、速度\mathbf v、姿勢四元数\mathbf q、加速度・ジャイロのバイアス\mathbf b_a,\mathbf b_g、風\mathbf wなどを含む。IMUで短時間を予測し、GNSS・磁気・気圧・距離の観測で補正するカルマンフィルタ系がEKF(拡張カルマンフィルタ)である。
予測の概念式は
観測\mathbf z_kが来たら残差\mathbf r=\mathbf z_k-h(\hat{\mathbf x})を計算し、観測ノイズRを重み付けして状態と共分散を更新する。観測が外れたときに無理に補正しないため、イノベーションゲート、センサヘルス、磁気干渉検出、GNSS品質フラグを使う。
3. 姿勢制御と位置制御
マルチコプターでは、内側から角速度、姿勢、速度、位置のループを重ねる。角速度ループが速く、位置ループが遅い。姿勢誤差を\mathbf e_R、角速度を\boldsymbol\omegaとすれば、単純なPIDトルク指令は
である。実機ではモータ推力の飽和、バッテリー電圧、プロペラ効率、風、機体重心のずれを考慮する。固定翼ではピッチ・ロール・ヨーと対気速度、Roverではステアリング角・車輪速度と、機体により制約が変わる。
ArduPilotの飛行モードは、制御ループの目標と操縦入力の扱いを切り替える。Stabilizeは姿勢安定化を支援し、LoiterやPosHoldは位置保持、Autoはミッションのウェイポイント、RTLは帰還、Landは着陸シーケンスを実行する。モード名だけで安全性を判断せず、GNSSが失われた場合、通信が切れた場合、バッテリーが低下した場合の遷移を実機仕様で確認する。
4. MAVLinkとコンパニオンコンピュータ
MAVLinkは、機体と地上局、オンボードコンピュータをつなぐメッセージプロトコルである。姿勢・位置・バッテリー・状態をテレメトリで送信し、ミッション・モード・速度・サーボ命令を受信する。ROS 2へ接続する場合は、MAVROSやMAVLink Routerなどのブリッジを使い、/tf、時刻、座標系(NED/ENU)を明示する。
ネットワークへ機体を露出すると、偽のモード変更、位置情報の改ざん、ログの持ち出しが起きる。通信リンクを分離し、署名、鍵の管理、許可するコマンドの最小化、物理RCによる即時復帰を設計する。テレメトリを暗号化しても、飛行制御のリアルタイム周期を同じネットワークへ載せて遅延させてはいけない。
5. SITLで安全に試す
SITLは、ArduPilot本体を実機センサの代わりにシミュレータへ接続して動かす方法である。Mission Planner、QGroundControl、MAVProxy、Gazebo、JSBSimなどを組み合わせ、パラメータ変更、ミッション、通信断、GNSS妨害、バッテリー低下、フェイルセーフを繰り返し試せる。
最低限の試験表を作る。
| 試験 | 注入する異常 | 期待する遷移 | 合格条件 |
|---|---|---|---|
| GNSS断 | 位置観測を停止 | AltHold/Loiter等 | ジオフェンス内で操縦復帰 |
| 通信断 | GCSリンクを切断 | RTLまたは指定モード | 事前設定時間で遷移し安全着陸 |
| 低電圧 | 電池電圧を漸減 | 警告→RTL→着陸 | 設定閾値とログが一致 |
| 磁気異常 | ヨー観測を外れ値化 | 別コンパス/EKF切替 | 発散せず切替を通知 |
| モータ欠損 | 1系統の推力を低下 | 姿勢保持/緊急着陸 | 飛行継続条件を超えたら停止 |
SITLで合格しても、実機では振動、電源ノイズ、プロペラ個体差、GPSマルチパスが加わる。初飛行は低高度・短時間・広い場所で、ログを取得し、手動復帰スイッチを操作者が確認してから行う。
6. ログとチューニング
ArduPilotのログには、IMU、EKF、姿勢、モード、RC、電源、モータ出力、振動、GPS品質が記録される。位置誤差だけでなく、イノベーション、推定共分散、クリップ数、振動スペクトル、電圧降下を時刻で重ねる。PIDゲインを変えた結果、角速度が追従したのか、モータ飽和で見かけ上動いただけなのかを分けるためだ。
チューニングは、機体を固定したベンチ試験、低リスクの手動飛行、姿勢保持、位置保持、ミッションの順に段階化する。パラメータを一度に大量変更せず、バージョン管理と飛行ログのIDを結び付ける。ファームウェア更新時は、既定値やEKF仕様、パラメータ名の変更を公式リリースノートで確認する。
7. 現行利用と研究の接点
ArduPilotは市販フライトコントローラ、教育用機体、測量・農業・点検用のコンパニオンコンピュータで使われるオープンな基盤である。メーカー独自の安全認証済み製品と、研究者が自作した機体では責任範囲が異なる。機体重量、飛行場所、電波、保険、航空法などの規制は地域で変わるため、公式ドキュメントと所管当局を優先する。
研究では、Visual-Inertial Odometry、LiDAR、イベントカメラ、学習ベースの障害物認識、群ロボットの協調、風推定、エネルギー最適航路をArduPilotへ接続する試みが続く。重要なのは、学習器が出す目標をいきなりモータへ渡さず、既存の姿勢・速度制御とフェイルセーフの境界内へ制限することだ。ArduPilotを「自律性の完成品」ではなく、状態推定・制御・安全遷移を検証できる共通基盤として使うと、研究結果を再現しやすい。
8. まとめ
ArduPilotの本質は、豊富な飛行モードの一覧ではなく、センサ融合、階層制御、通信、ログ、フェイルセーフが閉ループで動くことにある。まずSITLで異常を注入し、次に実機で振動・電源・電波を測り、最後に自律機能を一つずつ増やす。推定の信頼度と手動復帰を残したまま進めれば、ドローン、ローバー、ボートをまたぐ実装と研究の土台になる。