機体モデルだけでは、まだ飛ばない。
機体モデルを作ったら、次はその機体を安定して飛ばすための制御が必要です。手間のかかるPID調整を、再現可能な評価と自動探索で進めます。
次は、飛ばすための制御を。
x500では約7〜15分で自動探索。
PID調整の時間を、開発の試行錯誤に戻す。
モデルを作っても、その機体に合うPIDを調整しなければ安定して飛べません。手間のかかる試行錯誤を、評価条件に従う自動探索に置き換えます。
※ 手作業の所要時間は経験上の例であり、同条件での比較実験ではありません。自動探索はApple M2 Pro(12コア)、2試行並列での実測。機体モデルの準備、評価条件の設定、SITL再検証などは含みません。
なぜ、内側からPIDを合わせるのか
位置を動かすには速度を変え、速度を変えるには機体を傾ける必要があります。姿勢を正しく変えるには、角速度の制御が安定していなければなりません。
外側の制御は、内側の制御に目標値を渡します。内側が不安定なまま外側を調整すると原因が分かりにくくなります。上の4階層は制御の構造、次の5段階は実際の調整工程です。
5段階で、飛行制御を整える
段階ごとに合格条件を決め、最良値を次の段階へ引き継ぎます。
5段階はx500で採用した自動探索の工程です。各段階で評価対象や探索するゲインを絞ります。
各段階で「試す → 足切り → 採点」を繰り返す
どんな飛び方を合格とするか、何を重視するかを設定。候補を飛ばして検証し、条件に合う中から良い値を探索します。
合格条件は段階ごとに異なります。探索範囲、評価条件、点数の重み、試行結果を記録するので、なぜその値を採用したかを後から追えます。
機体を変えても、同じ手順でまた試せる。
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_PMC_ROLLRATE_IMC_ROLLRATE_D | 0.5 0.25 0.025 | ATC_RAT_RLL_PATC_RAT_RLL_IATC_RAT_RLL_D | 0.35 0.15 0.015 |
| 角速度 ヨー | MC_YAWRATE_PMC_YAWRATE_I | 0.3 0 | ATC_RAT_YAW_PATC_RAT_YAW_I | 0.9 0.018 |
| 角度 ロール・ピッチ | MC_ROLL_P | 7.75 | ATC_ANG_RLL_P | 6.0 |
| 角度 ヨー | MC_YAW_P | 3.75 | ATC_ANG_YAW_P | 3.25 |
| 高さ | MPC_Z_P | 1.25 | PSC_POSZ_P | 1.75 |
| 上下の速さ | MPC_Z_VEL_P_ACCMPC_Z_VEL_I_ACCMPC_Z_VEL_D_ACC | 10 1.5 1.0 | PSC_VELZ_PPSC_VELZ_IPSC_VELZ_D | 5.5 0.5 0 |
| 水平の位置 | MPC_XY_P | 0.8 | PSC_POSXY_P | 2.0 |
| 水平の速さ | MPC_XY_VEL_P_ACCMPC_XY_VEL_I_ACCMPC_XY_VEL_D_ACC | 2.2 1.0 1.0 | PSC_VELXY_PPSC_VELXY_IPSC_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との照合をやり直します。
機体作成(Vehicle Builder) Control Link:PX4編 Control Link:ArduPilot編 PROライセンスに戻る
