前の記事で示した、ドローンのPID制御において、制御とプロペラの回転の間に遅延がある場合のモデルを実際に計算してみる。
本稿で不明なところは、以下のページを参考にしてください。
目次:PID制御によるドローンの揺れに関する数値シミュレーション
モデルは、(6)の記事に示しているもので、それをc++でプログラム化する。
これまでは、EXCELを用いて、結果が直ちにグラフ化されるようにしていたが、遅延を組み込むと実行のたびにモデルの構造を変える必要性が出てくるようなので(モジュールを使えばもっと簡単に行くのだろうが面倒なので)C++で、遅延構造も含めパラメータを変更したのちの結果の数字はすぐにファイルに保存されるようにした。それはcsv形式になっているので、EXCELにも直ちに組み込め、グラフ化できるはずである。
c++のプログラムは、次のgithubのレポジトリから取得できる。ファイル名、pidlag.cppを選んでください。。
(1)遅延が200msの場合(P=10000, D=100)
これまでと同様のP制御に、緩くD制御をかけている。
ピッチ角とモーター回転数のグラフである。
最初から20期分は初期状態として与えたもので、これまでと同様に30度ほどピッチが正になるように期待を傾けて200msど持って、静かに離すというものである。ピッチ角度(青線:目盛左)は0.5でモータスピード(オレンジ線:目盛右)は、ピッチが正に傾いているために、ホバリングよりも少ない8000rpmくらいからスタートしている。90期に近づくと、実際にはありえないが、モーター回転数が負の領域まで落ち込んでしまっている。つまり1秒もたたないうちに飛行が破綻していることになる。
(2)遅延が50msの場合(P=10000, D=100)
遅延を1/4にした。1サイクル10msなので、5サイクル遅れて制御がモーター回転数に伝わるとしている。
状況は基本的に変わっていない。ただし、増加から低下、低下から増加への周期が短くなっている。
(3)遅延が20msの場合(P=10000, D=100)
元の1/10の遅延である。
ついに振動が現れた。
(4)遅延が10msの場合(P=10000, D=100)
1期分の遅れであり、これまでの遅延のないモデルのD制御の弱い状況に大きく近づいている。
(5)遅延が200msの場合(P=10000, D=1000)
元の200msの遅れの状態で、D制御のスケールを10倍にしてみた。状況はほとんど変わっていない。
これらをまとめると、ESCからプロペラの回転までの遅延は、ホバリングの姿勢制御に決定的な影響を与えるということである。なんとも、単純で分かりやすい結論に至った。
0 件のコメント:
コメントを投稿