目次
Section 1
カーブ関連の設定
前回スロットル関連の設定を行ないましたので、今回はカーブに関連した設定を行っていきます。
こちらも前回同様、自動走行などする際にFCがこの車両がどのくらいのスピードで、どのくらいのカーブを曲がれるのか、逆にどの程度無理な曲がり方をしたら倒れてしまうのか、といったことを判断するための設定となります。
人が乗るような車両を想像すると、滅多なことでは倒れないと思ってしまいますが、ラジコンカーは形状によって無理な曲がり方をすると、思いの外すぐに倒れてしまうものですよね。
人が操作する場合は車両の状況をみながらカーブの前でスピードを落としたり、ステアリングの切り方を調整したりできますが、その加減をFCにも教える必要がある、ということです。

今回は前回も何度も開いた[設定/調整]タブ、[ベーシックチューニング]ページ内の[ステア2サーボ]という区画を主に設定していきます。
Section 2
ACRO_TURN_RATEの設定
前回もスロットルのPIDを設定しましたが、今回はカーブにおけるPIDの設定となります。
下記のArdupilot Roverのドキュメントに、スロットル関連の設定と同じようにこちらも動画付きで説明がでていますので、あわせてご覧ください。
Tuning Turn Rate
https://ardupilot.org/rover/docs/rover-tuning-steering-rate.html
まず、 [ACRO_TURN_RATE ]というパラメータを設定する必要があるようです。
この値を測定するためにはまず、スロットルPIDの設定の時と同じように、Mission Plannerのホーム画面で[チューニング]のチェックボックスにチェックを入れ、グラフを表示します。
さらに、そのグラフをダブルクリックして、[gz]にチェックを入れます。
この状態で、グラフに表示される数値を見ながら、「Manual」モードで走行を行ないます。

この時、中程度の速度で急旋回を行ないましょう。
イメージとしては、最大ステアリングでギリギリ倒れない程度のなるべく早いスピードで、ぐるぐる円を描くように走るイメージになります。

ここで測定された最高値よりも少し低い値を [ACRO_TURN_RATE ]パラメータに入れるのですが、前回のAcceleration Limitの設定と同様に、このグラフで表示される値はcm/s/s単位なのに対して、 [ACRO_TURN_RATE ]のパラメータに入力する単位はm/s/sであるため、グラフで表示された数値を100で割った数値を入力します。
この値は、まずはざっくりで問題ないです。
これ以降の調整作業の中で走行中に頻繁に倒れてしまうようでしたら、値を下げて調整し、逆に全然カーブできない状態なら値を上げましょう。
今回この段階では3000程度の数値なので、 [ACRO_TURN_RATE ]には当初30を入れていたのですが、この後の工程で全然曲がらないという状況になりました。
あまりにも曲がらないので、様子を見ながら数値を上げていき最終的に80まで数値を調整しました。
凹凸があまりない綺麗な路面でのテストと比較して、多少凹凸のある路面でテストする場合、数値はかなり控えめになると考えられます。
数値が大きすぎるとやはり転倒してしまうので、最終的にはそのローバーを使用する環境で設定するのが良さそうです。
Section 3
Turn Rate PIDの設定
続いて、いよいよTurn Rate PIDの設定を行ないます。
まず、下準備として、[フルパラメータリスト]から [GCS_PID_MASK]を1(ステアリング)に設定します。

次に先程もグラフの表示内容を変更しましたが、再度グラフをダブルクリックし、[piddesired](目標値)と[pidachieved](実際の値)を選択してグラフに表示させます。
これで下準備は完了しました。
テスト走行をおこなっていきますが、目標に対して実際の動きがどれだけ追従できているかをこのグラフを見て判断します。
テスト走行は、[ACRO]モードで走行し、広いターンと狭いターンを行ってグラフを評価します。
自分の使用しているMission Plannerのバージョンでは[ステア2サーボ]という区画内にP、I、D、INT_MAX、FFという5つのパラメーターがありますが、FF→P→I→Dの順番で設定をおこないます。
[INT_MAX]については参考にしているドキュメント内に紹介がないので、一旦デフォルトのままにしておきました。
まず、回転速度の応答が遅い場合は、[FFゲイン]を上げ、逆に車両が常に目標回転速度を超えてしまっている場合は、[FFゲイン]を下げます。
この[FFゲイン]が最も直接的にステアリングサーボやモーターに出力される値に関わるようです。
次に[Pゲイン]の調整ですが、この[Pゲイン]は短期的な誤差の補正に関連するパラメータとのことです。
[FFゲイン]が適切に設定されていれば、[Pゲイン]は低い値(例えばFFの20%)に設定できる場合が多く、常に[FFゲイン]よりも低く設定する必要があるようです。
続いて、[Iゲイン]は多くの場合[Pゲイン]と同じ値に設定するようです。[Iゲイン]は長期的な誤差の補正に関連するパラメータで、車両が目標の旋回速度に達しない場合は、[Iゲイン]を増やし、車両の旋回速度がゆっくりと振動する場合は、[Iゲイン]を減らす必要があります。
[Iゲイン]も[Pゲイン]と同様に、[FFゲイン]よりも低く設定する必要があります。
最後に[Dゲイン]なのですが、このパラメーターは通常ゼロのままで良いようです。
[ステア2サーボ]の設定の手順は上記のような形なのですが、実際の作業では[ACRO]モードで走行を始めた段階で全然曲がらないことに気づいたので、 [ACRO_TURN_RATE]の再調整することから始めました。

[ACRO_TURN_RATE]が30のままでは[piddesired](目標値)に対しての[pidachieved](実際の値)は上記のような形で、全然追従出来ていないことがわかります。
[ACRO_TURN_RATE]を80まで段階的に上げて行き、次に [FFゲイン]を上げたり下げたりしながらテスト走行を繰り返して比較することにしました。

以前に設定したことがあり、始めに設定していた[FFゲイン]は0.8でした。
[piddesired](目標値)に対しての[pidachieved](実際の値)は上記のような形です。

次に比較のために[FFゲイン]0.4をテストしました。
[piddesired]に対して[pidachieved]の動きが極端になり、全体としてオーバーシュートが目立つようになりました。
この事から、先程よりも明らかに悪化していることがわかります。
次に[FFゲイン]1.0をテストしました。
これまでで最もよく追従できているように感じ、 [FFゲイン]0.8のグラフと比較しても細かい部分をしっかり拾って追従しているように思えます。
その後も [FFゲイン]の上げ下げを試し、2.0では逆に悪化し始めることがわかったので、最終的に[FFゲイン]を1.5に設定しました。
次に[Pゲイン]と[Iゲイン]を1.5の20パーセントの0.3に設定しようと思ったのですが、既に0.3に設定されていたのでそのままにしました。
今回の作業で [ステア2サーボ]の区画内は上記のように設定にしました。
Section 4
ATC_STR_RAT_MAXの設定とACRO_TURN_RATEの調整
最後に、 [ATC_STR_RAT_MAX]をSection 2で設定した [ACRO_TURN_RATE ]と同じ値に設定します。

[ATC_STR_RAT_MAX]は[フルパラメータリスト]で検索すると表示されます。
ここに、Section 2で設定した(Section 3で微調整した方も多いかと思います)[ACRO_TURN_RATE]の数値を入れれば完了です。
この [ATC_STR_RAT_MAX]は車両がどのモードでも試みる最大旋回速度で、通常、車両の機敏性を維持するために、この値は車両の性能限界に近い値に維持する必要があるとのことです。
特に悪路でローバーを使用したいと思っている方は、凹凸が酷いところでは頻繁に倒れてしまうため、倒れるのを防ぐために[ACRO_TURN_RATE]をどんどん下げてしまいがちではあるのですが、この[ATC_STR_RAT_MAX]は車両の性能の限界付近の数値が良いようなので、[ATC_STR_RAT_MAX]は比較的平らで条件の良い環境で達成できる[ACRO_TURN_RATE]の数値を入れるのが良さそうです。
もし悪路で使用したい場合は、条件の良い環境で設定した[ACRO_TURN_RATE]の値に[ATC_STR_RAT_MAX]を設定した後に、必要に応じて[ACRO_TURN_RATE]を減らす方法が良さそうです。
[ACRO_TURN_RATE]は、 [ACRO]モードでのパイロットの入力を望ましい旋回速度に変換し、このパラメータを下げることで、[ACRO]モードでの旋回をよりドライバーにとって従順なものにすることができる、とのこと。
この2つのパラメーターのバランスは、Section 2、Section 3の間に[ACRO_TURN_RATE]を上たり下げたりした場合は、[ATC_STR_RAT_MAX]はなるべく高めで、[ACRO_TURN_RATE]は現実的に倒れにくい数値に抑えておくのが良いかと思います。
Section 5
今回のまとめ
これで自動走行に必要な最低限の設定は完了です。
長く続いたArdupilot Roverの製作シリーズも次回が最終回となります。
振り返ると、パーツを制御するための設定は長かったですが、実際の制御に関わる調整は比較的簡単に済んでしまったように思います。
細かいことをいうと、もっと追い込める設定もあるようなのですが、自動走行を行うためには充分な段階まで到達しましたので、次回はいよいよミッションを作成して自動走行を試してみましょう。
---
いつもご覧いただきありがとうございます。
DAYSCAPEのブログは、皆さまからの応援によって成り立っています。
「いいね」と思っていただけたら、無理のない範囲でご支援いただけると嬉しいです。
下記のボタンより、PayPalを通じて応援いただけます。
応援はこちら
※この応援は任意のものです。商品やサービスの購入を伴うものではありません。



