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 件のコメント:

コメントを投稿

DJI MAVIC MINIのFPVライブ動画をiOSのVisionframeworkで顔認識させるという話

 iOSでは、他の方法もあるが、Visionframeworkは、いろんなことができるので、これでなんとか顔認識させようとここ2,3日没頭していた。ようやく、 こんな感じで、緑の枠で認識画像をリアルタイムで表示できるようになった。 (プログラムの全体は、最下段に掲げてある) 途中...