個人的な意見ですが、ドローンがまっすぐにしか移動しないものであればチューニングはほとんど必要ないと夢想します。しかし現実は左右に曲がったり上昇、下降を移動しながら行います。とくにコの字のような90度に曲がることを期待される場合、正確なチューニングが必要となります。
しかしドローンのチューニングは、はっきりした手順が確立されていません。
誤差をみながら修正という感じです。
プロペラ、モーター、ESCなどがいろんな会社から出ているからでしょうね。
GPSで航行する場合、GPSが不正確だと”Unhealth AHRS”などと表示され、自動運転(GUIDED, AUTO)などのモードに入れません。(海上では驚くほどGPSは安定します)
さて、自動運転(AUTOモード)の時、出発点をホーム。途中の経由するポイントをウェイポイント(Way Point:WP)といいます。
しばしばドローンのチューニングで”PIDチューニング”という言葉が出ます。目的は操作、自動運転で機体の反応を調整することをいいます。
PIDとはProportional–Integral–Derivative controllerの略です。Proportionalは比例、Integralは積分, Derivativeは微分の意味で、目的に対してセンサーから得られる差(エラー)を3つの手法で計算して次の出力を決めることをいいます。
以下、無線のテレメトリーが必須です。
最初のチューニング
特別なモードのセット
しばしばプロポのスイッチに特別なモードのオン、オフをセットしろという指示がありますが、そのたびにRCx_OPTION をセットするのは面倒です。
チャンネルが少ない場合、やりたくないこともあります。
この場合、ミッションプランナーのAUX_FUNCTION を使うことができます。
メチャ手軽です。
もっともフライトコントローラーとPCが無線のテレメトリーで接続されている必要がありますが。
MPのタブにはAux Functionがあり、SCRIPTING1や他のモードをリストから指定し、Low, Mid, Highを指定することもできます。
この場合、Arm前に該当Aux FunctionをLOWにします。
Armし、scripting1を動作させたい時にmidを押します。
Scripting1はメッセージを出しますから、終了したらHighを押します。
自動チューニング
(2024/2)
自動チューニング(QuickTune)が正式リリースされたのでマニュアルを訳します。
(ソースコード内によると)このスクリプトでは
- ATC_STR_RAT_P
- ATC_STR_RAT_I
- ATC_STR_RAT_D
- ATC_STR_RAT_FF
- ATC_SPEED_P,
- ATC_SPEED_I
- ATC_SPEED_D
- CRUISE_SPEED
- CRUISE_THROTTLE
が設定されます。
サポートされているFCはRuaスクリプトが動作するものとなります。
(Luaスクリプトは通常、F7またはH7プロセッサを搭載したオートパイロット(CubeOrangeなど、プロセッサーが32bit ARM STM32H753でRAMが1MB以上)が推奨されていることに注意してください。)
セットアップ
- スクリプト使用可能とするためにSCR_ENABLEを1にし、リブートします。
- RCx_OPTION=300(“scripting1”)とセットします。x部分はポジションがstart/stop/saveの3位置を取れる送信機のスイッチを設定します。(先に書いたMPのAUX_FUNCTIONの使用も可能です)
- RTUN_AUTO_SAVEを0にするとマニュアルで結果が保管されます。保管には数秒かかると思ってください。
- MAVftpでscriptフォルダーに動かすスクリプトを転送します。(参照)
- Rover Quick Tuneスクリプト自体はここ
- Lua Scriptを使用するためにSCR_ENABLE = 1 に設定します。
- rover-quicktune.lua script をオートパイロットの SD カードの APM/scripts ディレクトリにインストールします。ミッションプランナー の MAVFTP 機能を使うのが一番簡単かもしれません。
直進でのチューニング
左右のモーターやESCには製品としての誤差があります。
まずミッションプランナーのモーターテストでモーターが回り始める%をMOT_THR_MINに設定します。
次にManualモードでまっすぐ走らせてSERVO1_TRIM, SERVO3_TRIMでPWMパルスの幅調整をし、直進するように設定します。
Circleモードでのチューニング
Rover-4.4(およびそれ以降)にはサークルモード(モード9)が含まれており、フライトモードスイッチを使って設定するか、最近のバージョンのミッションプランナーのアクションタブを使って切り替えることができます。
このモードに切り替える前に、CIRC_RADIUS が少なくとも 2m 以上あることを確認してください。車両やテストエリアが広い場合は、より大きな値を設定してください。
オプションで CIRC_SPEED を車両にとって快適な速度に設定してください。
「快適」とはスロットルの50%+-15%程度のことをいいます。
ゼロのままだと WP_SPEED が使用されます。Circleモードでは、Mission PlannerのActionタブの “Change Speed “ボタンでも車速を変更できます。(あまり早くないほうがいい)
サークル・モードに切り替えると、車両はサークルの端までゆっくりと前進し、急旋回してサークルを一周します。もちろん、いつでも他のモードに切り替えて車両のコントロールを取り戻すことができます。
サークルモードのターゲット(サークルの周りを移動する)は、車両が追いついていなくても減速しないことに注意してください。サークル走行がまったくできない場合は、速度を落としてみてください。
クイックチューニングの実行
RTUN_ENABLE = 1 に設定します(再起動は必要ないが、Rua Scriptを動かしていないと出ない。そしてデフォルトは1)。
RCのスイッチをbeginの位置にします。テキストメッセージが表示されます。(静止状態ではエラーが出ます)
AUX FunctionタブではLowがスクリプトの停止、Middleがスクリプトのチューニング開始、Highにすると得たデータを書き込みます。
ARM前にAUX FUNCTIONタブを使うとしてもLOWボタンを押してください。これでスクリプトが始まります。
チューニング中、ステアリングとスロットルの出力は10秒間以上は応答と比較されます。
エラーメッセージに注意してください。速度をあげたり、半径を減らす必要が出る場合があります。
デフォルトでは次の順序でチューニングされます。
ATC_STE_RAT_FF, ATC_STR_RAT_P
CRUISE_SPEED, CRUISE_THROTTLE, ATC_SPPED_P
???スクリプトはフィルター設定します。ATC_STR_RAT_FLTDをINS_GYRO_FILTERの半分に設定します。
チューニングが正常に完了したら、”RTUN: Tuning Done”と出ます。(実地では)
RC補助スイッチをHighの位置まで上げて数値を保存します。
その後、アクロモードでドライブしたり、ミッションを実行したりして、チューニング前よりも性能が良くなるか悪くなるかを確認することができます。
チューニングのモニター
チューニングの進行状況はMessagesタブに表示されます。
アクティブにチューニングされたPIDのリアルタイム表示は、MPのData画面で見ることができます。一番下の “Tuning “チェックボックスをチェックし、グラフエリアをダブルクリックし、”piddesired “と “pidachieved “を選択します。また、”pidSRate “を選択することで振動数を見ることもできます。
例
私がテスト用ローバーでやってみた例です。
CIRC_SPEED=0.5, CIRC_RADIUS=1.5 と遅い車体です。
RTuneで始まるメッセージがチューニングスクリプトからのメッセージのようです。
チューニングの前と後のパラメータです。
前はデフォルト値です
- ATC_STR_RAT_P 0.2 ->0.2195252 -> 0.1326563
- ATC_STR_RAT_I 0.2->0.2195252 -> 0.13246563
- ATC_STR_RAT_D 0->0 -> 0
- ATC_STR_RAT_FF 0.2 -> 0.4390503 -> 0.2649326
- ATC_SPEED_P 0.2->1.550583 -> 1.649786
- ATC_SPEED_I 0.2->1.550583 -> 1.649786
- ATC_SPEED_D 0 -> 0 -> 0
- CRUISE_SPEED 0 -> 0 -> 0
- CRUISE_THROTTLE 50->90 -> 100
ものの10分もかからずに終了しました。
この車体はとても遅いので、かえってチューニングに苦労しました。
その他のパラメーター
ATC_STR_ANG_Pは望んだ方向のエラーを望むターンの割合に変換します。大きい値だとより激しく方向に向かうことになります。
ATC_STR_RAT_MAXは機体の最大のターン割合(角度/秒)を設定します。ピボットターンに適用されます。
ATC_STR_ACC_MAXは回転加速度です(角度/毎秒毎秒)鷹居値だとより早く回転します。
スクリプトのパラメーター
スクリプトには、動作を設定するための次のパラメータがあります。
RTUN_ENABLE
スクリプトを有効にするには 1 に設定します。
RTUN_RC_FUNC
チューニングの開始/停止に使用される RCx_OPTIONS 関数番号。デフォルトでは、300 (scripting1) の RCx_OPTIONS が使用されます。
ミッションプランナーのAUX FUNCTIONを使えば設定しなくてもOK
RTUN_AXES
調整される軸。デフォルトは 3 で、ステアリングと速度を意味します。このパラメータはビットマスクなので、ステアリングのみを調整するには 1 を設定します。速度だけなら2
RTUN_STR_FFRATIO
測定された応答と FF ゲインの比。より高い FF ゲインを得るには、これを上げます。デフォルトの 0.9 は、ほとんどのユーザーにとって適切です。
RTUN_STR_P_RATIO
ステアリング FF ゲインと P ゲインの比。より高い P ゲインを得るにはこれを上げ、P を変更しない場合は 0 にします。デフォルトの 0.2 はほとんどのユーザーにとって適切です。
RTUN_STR_I_RATIO
ステアリングFFとIの比率が増加します。より高い I ゲインを得るにはこれを上げ、I を変更しない場合は 0 にします。デフォルトの 0.2 はほとんどのユーザーにとって適切です。
RTUN_SPD_FFRATIO
測定された応答と CRUISE_THROTTLE 値の間の比率。より高い CRUISE_THROTTLE 値を取得するには、この値を大きくします。デフォルトの 1.0 は、ほとんどのユーザーにとって適切です。
RTUN_SPD_P_RATIO
速度 FF と P ゲインの比。より高い P ゲインを得るにはこれを上げ、P を変更しない場合は 0 にします。デフォルトの 1.0 はほとんどのユーザーにとって適切です。
RTUN_SPD_I_RATIO
速度 FF と I ゲインの比。I ゲインを高くするにはこれを上げ、I を変更しない場合は 0 にします。デフォルトの 1.0 はほとんどのユーザーにとって適切です。
RTUN_AUTO_FILTER
これにより、INS_GYRO_FILTER 値に基づいて PID フィルターの自動設定が有効になります。この機能を無効にするには、ゼロに設定します。
RTUN_AUTO_SAVE
これをゼロ以外の値に設定すると、チューニング終了後、指定した秒数経過すると自動的に値を保管します。
スイッチが3ステートをもたない。ハイとローだけでもチューニング用スイッチに使えるメリットがあります。
値をゼロにすると自動保存が無効になり、3 ポジション スイッチが必要になります。
(個人的には自動で保存したほうが安心です)
個別のチューニング
(以下は手作業です。自動チューニングをやれば不要だと認識しています)
クルーズスロットルとクルーズ速度
CRUISE_THROTTLE および CRUISE_SPEED パラメータは、スロットルにより望む速度をコントローラで調整できるかを設定します。 この 2 つの値が合理的であり、相互に一貫していることが重要です。つまり、CRUISE_THROTTLE 値 (パーセントで表されます) が、CRUISE_SPEED (m/s で表されます) を達成するために必要なスロットルに近い必要があります。
これらのパラメータを設定する方法は次のとおりです。
- 補助機能スイッチに“Learn Cruise Speed”を設定します。(例:RC6_OPTION=50)
- 車両をARMしてManualモードに切り替えます
- 50% ~ 80% のスロットルで船を運転します。
- 設定した 機能スイッチを数秒間高い位置に動かし、その後低い位置に戻します。
- 地上局に「Cruise Learned: Thr:XX Speed:YY」のようなメッセージがあることを確認して、CRUISE_SPEED と CRUISE_THROTTLE が更新されたことを確認します。
スロットル PID チューニング
望む速度に応じるコントローラーは、PID コントローラーを使用して、希望の速度 (捜査社またはオートパイロットによって設定) を達成しようとします。HoldとManualを除くすべてのモードでPIDコントローラーは使用されます。
このコントローラーの P、I、および D ゲインは、それぞれ ATC_SPEED_P、ATC_SPEED_I、および ATC_SPEED_D パラメーターに保持されます。 ATC_SPEED_FF はゼロのままにしておく必要があります。
コントローラーを調整するための推奨手順は次のとおりです。
- テレメトリ無線を使用してMission Planner(地上局)を船に接続する
- PID 情報をMission Plannerに送信するに、GCS_PID_MASK を 2 (スロットル) に設定します。
- Mission Plannerで、Flight Data 画面を開き、地図の下部にある「Tuning」チェックボックス (中央下) をチェックし、グラフをダブルクリックして「pidachieved」、「piddesired」を選択します。
- Acro モードでさまざまな速度で車両を運転し、目標にどれだけ忠実に従うかを比較します。
- piddesired が pidachieved に従うように、ATC_SPEED_P、ATC_SPEED_I を上下に調整します。
- P ゲインが最も重要なので、最初に調整する必要があります。 車両の速度がぎくしゃくしていて不安定な場合は、このパラメータを下げる必要があります。 車両が速度に達するのが遅い場合は、このパラメータを大きくする必要があります。
- I ゲインは長期誤差を補正します。 車両が希望の速度に達しない場合は、このパラメータを増やす必要があります。 車両の速度が速すぎるところと遅すぎるところの間をゆっくりと変動している場合は、このパラメータを下げる必要があります。 通常はPよりも低いはずです。
- Dゲインは、短期間の速度変化に対抗して出力を安定させることを目的としています。 これはゼロのままにすることができます。
- FF ゲインはゼロのままにしておく必要があります。というのもCRUISE_THROTTLE と CRUISE_SPEED は予測制御を排除するベース スロットル出力の計算に使用されるためです。
- Mission Controllerの基本チューニング画面から設定できます。
最大加速度(AutoTuneでは変更されない)
- 他のチューニング値ほど重要ではありませんが、ATC_ACCEL_MAX および ATC_DECEL_MAX パラメータは船の物理的制限に一致するように設定する必要があります。
>これにより、速度コントローラーが不可能な加速を試みることを回避し、オーバーシュートを減らすことができます。 - Mission Plannerを使用して、前後方向 (別名 X 軸) の加速度をリアルタイムで表示します。Flight Data 画面を開き、「Tuning」チェックボックス (中央下) をチェックし、グラフをダブルクリックして「ax」を選択します。
>値は cm/s 単位であるため、m/s を取得するには 100 で割る必要があることに注意してください。 - マニュアルモードで船を運転し、フルスロットルにして停止状態から全速力まで加速します。
- 表示された加速度をガイドとして使用して、ATC_ACCEL_MAX および ATC_DECEL_MAX パラメータを設定します。 パラメータの単位が m/s であるのに対し、表示される値は cm/s 単位である場合があることに注意してください。 車両の加速と減速度が類似している場合、ATC_DECEL_MAX はゼロのままにすることができます。
- Acro モードで車両を運転し、車両の加速がスムーズで、減速が遅すぎないかをテストします。
スロットルスルー
MOT_SLEWRATE パラメータを使用して、スロットル出力の変化速度を制限できます。
値を 100 にすると、スロットル出力が 1 秒以内に全範囲にわたって変化します。
値をゼロにすると制限が無効になります
ステアリングターンの割合をチューニング
>https://ardupilot.org/rover/docs/rover-tuning-steering-rate.html#rover-tuning-steering-rate
SKIDタイプ特有のピボットターンの設定(要確認)
Auto, Guided, RTL もしくはSmartRTLモードでのみその場で回転させることができます。
- WP_PIVOT_ANGLE は、ピボットターンのトリガーとなる最小角度を保持します。例えばデフォルトの “60 “に設定した場合、車両の方位が次のウェイポイントに向かう時60度以上ずれている場合にピボットターンします。このパラメータを0に設定することでピボットターンを無効にすることができます。
車両の方位が目的地までの方位から10度以内になると、次のウェイポイントに向かい始めます。 - WP_PIVOT_RATEは、ピボット旋回時の車両の最大旋回速度(1秒あたりの角度)を設定します。
- ATC_STR_ANG_Pは、車両の方位誤差を希望する旋回速度に変換します。値が大きいほど、目的地に向かってより積極的にピボットします。
- ATC_STR_RAT_MAXは、ピボット・ターンを含むすべてのモードにおいて、車両の最大ターン・レート(1秒あたりの度数)を設定します。
- ATC_STR_ACC_MAXは、すべてのモードにおいて、車両の最大回転加速度(単位:deg/sec/sec)を制限します。
最初はデフォルトでいいと思われます。