2022年1月25日火曜日

PID制御によるドローンの揺れに関する数値シミュレーション(5):P制御+D制御の計算

 ドローン姿勢のPID制御のうち、P制御とD制御を行なったシミュレーション結果を示す。これまでの議論については、以下のページを参照してください。

PID制御によるドローンの揺れに関する数値シミュレーション(1):理論編

PID制御によるドローンの揺れに関する数値シミュレーション(2):シミュレーションモデル


以下で解説する、EXCELのシミュレーションファイルは、以下からダウンロードできる。(基本的にEXCELで開いてください。Googleのスプレッドシートなど代替ソフトで開くと、計算とグラフ表示に問題が生じる可能性があります。クリックして、Googleのスプレッドシートが開いてしまった場合は、メニューの「ファイル」から一旦ダウンロードしたのちにExcelで再実行してください

EXCELファイル(モジュールなし)のダウンロード(2022/01/28修正)

EXCELファイル(モジュール組み込み済み)のダウンロード(2022/01/28修正)

シミュレーションにはRKMETHODという自作の関数をEXCELのVBAで作成し使用している。モージュールなしを選んだ場合は、それがないというエラーが出るので、「ツール」→「マクロ」からVBAのエディタを開いて、「挿入」→「標準モジュール」をクリックして、エディタを開き、次の関数をコピペしてください。そして、PDパラメータなどを更新すると正しく表示されます。

(次から)

Function RKMETHOD(a As Double, b As Double, c As Double, d As Double, e As Double, j As Double, s As Double, omega As Double, theta As Double, k_omega As Double, k_theta As Double) As Double

    RKMETHOD = a + b * (theta + k_theta) + c * (theta + k_theta) ^ 2 + d * (omega + k_omega) + e * (theta + k_theta) * (omega + k_omega) + j * (omega + k_omega) ^ 2 + s * Cos(theta + k_theta)

End Function

(以上)

ファイルの使い方を説明する。


ファイルを開くと左側に、パラメーターの設定欄、右側にシミュレーションの実行画面が現れる。パラメータを変更すると自動的にシミュレーション結果も変更される。ただし、計算量が多いので、時間が1、2分かかる場合があるかもしれない。その時はそのまま待つしかない。

開いたEXCELシートの左側のパラメータは、私の自作ドローンの使用に沿ったものが書いてある。薄緑蘭のものは、任意に変更が可能である。薄赤の欄は、自動的に変更されるパラメータである。

パラメータの説明を加える。

スロットル(回転数:rpm)
これはドローンのホバリングするプロペラ回転数を書いてください。初期値としては、13000rpmが入力されていますが、小型のドローンでは数万rpmになるのではと思われる。
回転数を力に変換
これは、回転数を水力に変換するパラメータである。が、他が入力されると、機体角度が水平の時の回転数が、上で定義された回転数になるような、適切な値が、自動的に与えられることになっている。これは、理論のページで解説されているので参照して、自力で変更しても問題ない。
機体質量 Kg
これは、機体重量をプロペラの数で割ったものをKg単位で入力することが妥当だ。
中心とモーター間の距離 m
腕の長さである。機体の中心から一つのプロペラの軸までの長さをm単位で入力する。
制御パラメータP
Pパラメータのスケールを記入する。0にすると、P制御が働かない状態になる。
制御パラメータD
Dパラメータのスケールを記入する。0にすると、D制御は働かない。
Δt (時間間隔:秒)
シミュレーションのステップ間隔である。これを大きくすると、計算は速くなるが精度が悪くなる。逆は逆である。

以下、私の自作ドローンのパラメータで実行したシミュレーション結果を示しておこう。初期状態は、ピッチ角が0.5にしてあるので、ピッチが正の方向に30度ほど傾けた状態で、角速度の初期値はゼロにしているので、どの方向にも力を加えず、そのままただ手を離した状態だと考えればよい。
(1)P=10000, D=0
まず、微分制御を入れない、すなわちD=0の場合を調べよう。これは、前に実行したシミュレーションの再現になるはずである。




掲げた図は少し小さいが、ダウンロードしたファイルにP=10000, D=0を代入して実行すれば、このグラフも表示される。
0.8秒くらいの周期で期待が揺れる。自作機の揺れの周期とほぼ等しい感じだ。振幅は変わらない。
振幅は、これ以降もほとんど変わらない。単振動状態である。P制御だけでは姿勢制御は困難なことを意味している。

(2)P=10000, D=100
D制御をD=100のスケールで導入する。




先の場合と比べると、揺れが急速に小さくなっていくことが確認できる。
(3)P=10000, D=1000
さらに10倍のスケールでD制御を加える。




揺れとは言えないほど、ほんの僅かに機体角が負の側に振れただけで、ほぼホバリングを再現している。モーター速度も、一瞬、ホバリングの回転数を超えただけである。
(4)P=10000, D=2000
さらに、D制御のスケールを2倍にした。




ピッチ角は一直線にゼロに収束し、揺れはほとんどなく、一方的にホバリング状態を再現している。ピッチ角がゼロで安定するまでに、0.7秒しかかかっていない。
(5)P=10000, D=5000
さらにD制御を強めたらどうなるか。
モーター速度は、瞬間的に13000rpmを達成しているが、ピッチ角がゼロになるまでに、2秒以上の時間を要するようになり、実用的ではなくなってしまった。


以上の結果は、D制御が高い有効性を持っていることを示している。その一方で、過度に損は姿勢制御に悪影響を及ぼすことがわかる。



0 件のコメント:

コメントを投稿

920MHz帯無線通信モジュールTY92SS-E2730を使う

 先にも書いたが、ドローン2号機上のコントローラーはラズパイ4で、それとのやりとりをもともとWIFI経由で予定していたが、機体がアルミパイプであるために通信が不安定で使い物にならなかった。そこで、プロポに変えた。プロポの信号取り出しもなんとか安定できるようになったが、そのシステム...