2022年2月24日木曜日

剛体としてのドローンのシミュレーション(3):実行

先の、剛体としてのドローンのシミュレーション(2):むだ時間ありモデルで定式化したモデルを実際にシミュレーションしてみよう。

シミュレーションで使ったプログラム(C++)は、以下のサイトからダウンロードできる。

https://github.com/toyowa/pidsimulation

そのサイトの中の、timelag-2.cppというプログラムを選択してダウンロードしてください。前の記事の最後の縮約したものではなく、その手前の漸化式をそのまま入れている。実行すると、実行した日時(秒単位)の付いたファイルの中に、ログを吐き出す。それはCVS形式なので、EXCELなどで計算やグラフィカルな処理ができる。ログファイルの冒頭に、実行時のパラメータが書かれている。

パラメータは基本以下のように定義されている。

$ホバリングプロペラ回転数 V_{0} = 13000 rpm$
$モーター起動力パラメータ \delta = 1e-08$
$機体慣性モーメント I = 0.01 Kg*m^{2}$
$\eta = 0.01924 $
$中心からモーター位置までの長さ L = 0.37 m$
$PID制御パラメータ P = 300$
$PID制御パラメータ D = 300$
$シミュレーションステップのh = 0.01 sec$
$シミュレーション期間(1期間10ms) T = 2000 periods$
$むだ時間:遅延 \tau = 20 期間、時間では 200ms$
$初期 \theta = 0.5 radian$
$初期 \omega = 0 radian/sec$

パラメータは、基本自作のドローンから取ってきているが、慣性モーメントIだけは、実測する元気が湧かず、似たような機体を使った論文の値に近いものを考えている。そうなるとI=0.1くらいなのだが、このリファレンスパラメータでは、あえてその十分の1と、小さな値に設定している。すなわち、他の諸元はやや大きなドローンだが、慣性モーメントだけは小型ドローン、下手すればマイクロドローンくらいのこじんまりしたドローンになっている感じだ。実測もしていないので、この想定も外れているかもしれないが。

このパラメータを基本に、シミュレーションを実行する。変更する場合は、変更したパラメータのみを表示する。

(1)基本パラメータによるシミュレーション

まず、上記のパラメータをそのままに実行した場合の結果を示そう。

かなり短い時間で安定したホバリングを回復していると思われる。オレンジ色がプロペラの回転数で、ホバリングの回転数は1300rpmにしているので、そこへ収束している。機体のロール角(青色の線)もまたゼロ(右の目盛りで)に向かって収束する。

収束に至るまで、約1秒周期の揺れが起こっている。機体の慣性モーメントは小さいが、モーターまでの腕の長さはかなり大型のドローンになっているので、それほど周期の短い揺れが現れることはないのだと思う。

何よりも、200msのむだ時間があるにもかかわらず、このような収束結果を見せることには驚いた。

(2)慣性モーメントを0.1でシミュレーション

慣性モーメントを10倍にした結果は次のとおりである。

収束に向けてより時間がかかっているように見えるが、そもそも揺れの振幅が小さいので、それはあまり問題にならない。慣性モーメントが大きくなったことによって、揺れの周期が大きくなっている。1周期が5秒くらいになっているようだが、収束への過程として見ると、あまり問題にはならないのではないか。

(3)慣性モーメントを0.1、制御パラメータをP=100, D=50に低下させた

慣性モーメントを大きくしたまま、制御を弱めた。
当然ながら、大きな揺れのまま、収束させる力が弱まっている。

(4)慣性モーメント 0.1で、P制御パラメータを1000に増加させた

結果は次のようになる。

慣性モーメントは大きくしたままであるにもかかわらず、収束に向けた揺れの周期が短くなった。

他にも色々試みたが、全体として収束傾向は変わらなかった。すなわち、むだ時間がしっかりあるにもかかわらず、剛体としての慣性モーメントを考慮すると、ホバリングの安定性がある程度確保できるのである。これは大きな発見だった。

これで、ドローンのホバリング安定性に関わる数値的分析は、一通りやったことになる。


0 件のコメント:

コメントを投稿

立ち上がらないraspberrypiのネットワーク

 raspberrypiのネットワークが立ち上がらなくなってしまっていた。差し当たって必要ないのでほっておいたが、今日、いろいろ調べてみた。 結局、raspi-confgで、network Configure をdhcpcdから、networkmanagerに変更したら立ち上がる...