PID自動チューニング


箱庭ドローンPROのPID自動チューニングAuto Tuning / PX4・ArduPilot

機体モデルだけでは、まだ飛ばない。

機体モデルを作ったら、次はその機体を安定して飛ばすための制御が必要です。手間のかかるPID調整を、再現可能な評価と自動探索で進めます。

機体モデルを作った。
次は、飛ばすための制御を。
x500では約7〜15分で自動探索。

PID調整の時間を、開発の試行錯誤に戻す。

モデルを作っても、その機体に合うPIDを調整しなければ安定して飛べません。手間のかかる試行錯誤を、評価条件に従う自動探索に置き換えます。

半日〜1日手作業ではかかることも何度も試し、ログを読み、値を調整する負担
7分14秒PX4:x500での実測5段階・170試行の自動探索
14分48秒ArduPilot:x500での実測5段階・150試行の自動探索

※ 手作業の所要時間は経験上の例であり、同条件での比較実験ではありません。自動探索はApple M2 Pro(12コア)、2試行並列での実測。機体モデルの準備、評価条件の設定、SITL再検証などは含みません。

なぜ、内側からPIDを合わせるのか

位置を動かすには速度を変え、速度を変えるには機体を傾ける必要があります。姿勢を正しく変えるには、角速度の制御が安定していなければなりません。

飛び方のしくみ:モーターから位置まで
モーターの推力推力差で回転させる
角速度回転の速さ
角度機体の傾き
速度移動する速さ
位置移動した場所
チューニング順:内側から外側へ
① 角速度回転を安定させる
② 角度姿勢を整える
③ 速度移動を整える
④ 位置狙った場所に止める

外側の制御は、内側の制御に目標値を渡します。内側が不安定なまま外側を調整すると原因が分かりにくくなります。上の4階層は制御の構造、次の5段階は実際の調整工程です。

5段階で、飛行制御を整える

段階ごとに合格条件を決め、最良値を次の段階へ引き継ぎます。

01ホバー安定して浮き続けられるか
02姿勢指令に素直に反応し、振動しないか
03高度目標の高さに落ち着けるか
04水平速度速度に追従し、高さを保てるか
05位置目標地点まで移動し、停止できるか

5段階はx500で採用した自動探索の工程です。各段階で評価対象や探索するゲインを絞ります。

各段階で「試す → 足切り → 採点」を繰り返す

どんな飛び方を合格とするか、何を重視するかを設定。候補を飛ばして検証し、条件に合う中から良い値を探索します。

1候補を試すPIDゲインを設定して飛行応答を記録
2足切りする振動や行き過ぎ、他軸への悪影響などを確認
3合格候補を採点応答の良さを点数で比較
4次を探索するOptunaが候補を選択。最良値は次段階へ

合格条件は段階ごとに異なります。探索範囲、評価条件、点数の重み、試行結果を記録するので、なぜその値を採用したかを後から追えます。

機体を変えても、同じ手順でまた試せる。

Auto Tuningの価値は、PIDを一度だけ合わせることではありません。機体を改良した後も同じ評価方法で自動調整を繰り返し、設計の試行錯誤を速く回せることです。

x500の実測成果:PX4は170試行・7分14秒、ArduPilotは150試行・14分48秒。求めた値を書き出してSITLと定量比較し、設定した許容差を外れる指標はありませんでした(PX4 68指標、ArduPilot 72指標、NG 0)。

SITLとの比較は実機の飛行性能や安全性の保証ではありません。物理モデルや機体設定を変えたときは、再チューニング・再検証が必要です。

参考情報・検証条件

詳しい試験条件、探索グラフ、最終的なPID値、制御の実装範囲は必要なときに確認できます。

技術詳細を表示する

段階ごとの詳細 x500 の例

段階探す値何で合格・順位を決めるか条件
① ホバー角速度の制御(ロール・ピッチ)ホバーに入るまでの時間、上下の速さと傾きの揺れ。場所を変えて30秒ずつ5回続けて保持できるか(※)重力あり。保持の確認だけジャイロのずれあり(※)
② 姿勢角度と角速度の制御(ロール・ピッチ・ヨー)段階的な指令への応答の速さ、正弦波への追従(大きさと遅れ)、振動、ほかの軸への影響地面なし。保持の確認だけジャイロのずれあり(※)
③ 高度高さと上下の速さの制御上昇の速さと落ち着くまでの時間、行き過ぎ、横への流れ。指令の前に目標の高さで落ち着いているか地面あり。ジャイロのずれなし
④ 水平の速度水平の速さの制御(と高さの再調整)目標の速さへの追従、移動中に高さが変わらないか地面あり。ジャイロのずれあり(※)
⑤ 位置水平の位置の制御目標の位置への移動と停止地面あり。ジャイロのずれあり(※)

見る指標:段階的な指令への応答、正弦波への追従(0.5〜4 Hz)、振動(周波数で見る)、ほかの軸への影響、指令の前に落ち着いているか、ホバーに入れるか。

ジャイロのずれ(ゆっくり増える角速度の誤差)は、速度や位置の制御で打ち消せる段階からONにします。角度だけの試験でONにすると、ずれによる流れをゲインのせいと誤って判断するためです。

※ 保持の確認とジャイロのずれの切り替えは、ArduPilot の調整(2026年10月12日)から入れた手順です。PX4 の結果(10月11日)は、その前の手順で求めました。

探索の様子 実測 1回ずつの点数。赤い×は足切りで不合格、緑の線は採用した試行

段階ごとの探索

不合格の組を早く捨て、合格の組の中で点数を上げていきます。PX4 の姿勢の段階のように、合格する組が見つかるまで時間がかかる段階もあります。

求めた値 x500 書き出した自動操縦のパラメータ(PX4 のパラメータファイル、ArduPilot の .parm と一致)

制御PX4値ArduPilot値
角速度 ロール・ピッチMC_ROLLRATE_P
MC_ROLLRATE_I
MC_ROLLRATE_D
0.5
0.25
0.025
ATC_RAT_RLL_P
ATC_RAT_RLL_I
ATC_RAT_RLL_D
0.35
0.15
0.015
角速度 ヨーMC_YAWRATE_P
MC_YAWRATE_I
0.3
0
ATC_RAT_YAW_P
ATC_RAT_YAW_I
0.9
0.018
角度 ロール・ピッチMC_ROLL_P7.75ATC_ANG_RLL_P6.0
角度 ヨーMC_YAW_P3.75ATC_ANG_YAW_P3.25
高さMPC_Z_P1.25PSC_POSZ_P1.75
上下の速さMPC_Z_VEL_P_ACC
MPC_Z_VEL_I_ACC
MPC_Z_VEL_D_ACC
10
1.5
1.0
PSC_VELZ_P
PSC_VELZ_I
PSC_VELZ_D
5.5
0.5
0
水平の位置MPC_XY_P0.8PSC_POSXY_P2.0
水平の速さMPC_XY_VEL_P_ACC
MPC_XY_VEL_I_ACC
MPC_XY_VEL_D_ACC
2.2
1.0
1.0
PSC_VELXY_P
PSC_VELXY_I
PSC_VELXY_D
4.0
0.75
0

ロール・ピッチは同じ値です(MC_PITCH*・ATC_*_PIT* も同じ)。水平のX・Yは、PX4・ArduPilot とも1つのパラメータです。

探索範囲と合格条件の勘所 x500 で分かったこと

  • 探す範囲は、その自動操縦が受け付ける範囲の中に限る。範囲の外で合格しても、実機やSITLでの振る舞いは保証されません。ArduPilot では、書き出すときに範囲の外の値へ警告を出します。
  • ゲインの前に、初期値(フィルタなど)を推奨に合わせる。ArduPilot ではプロペラの大きさから決まる推奨値(Mission Planner の初期値の計算)を使います。フィルタの遅れはゲインでは取り戻せません。
  • 安定に効く値を固定しない。角速度の D を 0 に固定していたときは、合格する組がありませんでした。
  • 合格の幅は、測れる精度より広くする。推定の揺らぎより狭い幅では、どのゲインも合格できません。
  • 1回の結果で判断しない。安定ぎりぎりでは、同じ設定でも揺れる回と揺れない回があります。

どの制御を調整しているか

Control Link は、PX4(位置・姿勢・角速度の制御、制御配分、EKF2)と ArduCopter 4.6.3(角速度・姿勢・位置の制御、EKF3)のソースから制御と推定の部品を取り込み、1つのプロセスの中で関数呼び出しでつないで動かします。 調整するのは、その部品のゲインそのものです。

自動操縦ソフト全体(タスクの切り替え、通信、飛行モードの管理など)は動かしません。離陸・着陸の手順のように部品の外にある振る舞いは、アダプターの側で再現しています。そのため、求めた値は SITL で確かめてから使います。

求めた値はシミュレーション上の結果です。実機に適用する前に、SITL・HIL・実機での確認が必要です。所要時間と試行回数は、この試験の実測です。機体のモデルを変えたときは、チューニングとSITLとの照合をやり直します。

データ:PX4 は2026年10月11日、ArduPilot は2026年10月12日。機体 Holybro X500 V2 相当(離陸重量1.63 kg、機体作成のモデル)、ArduCopter 4.6.3。探索は Optuna(TPE)、2試行ずつ並列、Apple M2 Pro。

機体作成(Vehicle Builder) Control Link:PX4編 Control Link:ArduPilot編 PROライセンスに戻る

トップへ戻る