2022年1月31日月曜日

PID制御によるドローンの揺れに関する数値シミュレーション(9):ジャイロ効果

これまでの記事は以下のリンクから見ることができる。

これまでのシミュレーションで、フライトコントロールシステムに制御遅延が生じていると、PID制御は強く悪影響を受けて、振動やフライトの破綻が引き起こされることを見た。そして、その対策として、機体の慣性モーメントを増加させることによって、制御遅延の問題を吸収可能であることを示した。しかし、その方法としての、モーターまでの腕の長さを長くしたり、機体をあえて重くしたりすることでは、現実的な解決にはならない。

そこで、機体の中でジャイロ効果を発生させることによって慣性モーメントを大きくすることと同じ効果をもたらすかどうかを確かめることにする。

ジャイロ効果とは、回転体の回転によって回転軸方向を維持する力が発生したり、回転軸の歳差運動などを引き起こす効果を指す。コマが倒れなかったり、歳差運動を引き起こすのがその典型的な例である。

ヘリコプターはその大きなローターによってジャイロ効果を発生させ、それを機体の制御に利用していると言われている。一方ドローンは、ジャイロ効果に依存して制御するのではなく、PID制御など情報処理システムによって機体の姿勢制御を行なっていると言われている。

しかし、ドローンもまたプロペラという明確な回転体を持っているので、ジャイロ効果を発生させていることは確実だ。実際、ある程度の制御の遅延は避けられないはずなのに、市販のメーカードローンは、綺麗に機体の制御が行われている。これについて、ある程度は、プロペラのジャイロ効果が役割を果たしているのではないかと私は考えている。

しかし、DJIのプロペラなどを見ていると、あえてプロペラが発生するジャイロ効果を低減させているのではないかと思えなくもない。それはなぜか。プロペラのジャイロ効果が存在するということは、機敏な姿勢制御ができないことを意味していて、都合が悪いからではないか。優れたレスポンスのモーターさえあれば、プロペラのジャイロ効果に依存しなくても、PID制御は適切に機能するので、それで問題ないはずだからである。

ここでは、これまでの制御遅延が含まれたモデルに、ジャイロ効果を導入し、その効果を確かめる。今回は、モデルの理論的な側面を明らかにし、次回にシミュレーション結果を示す。

まず、プロペラなどの形で(明示的なフライホイール型のジャイロを組み込む場合もある)ジャイロ効果が導入されているとしよう。するとそれは、ピッチ角やロール角の与えられたレベルに対してジャイロ効果が働くのではない。変化に対する効力として働くのであるから、ここでは機体角度の変化分に対してそれを打ち消す方向に力が働くとしよう。

理論的には、この力はジャイロモーメントと言われるもので、方向性を無視すると回転の核速度に比例するので、角度ではなく角度の変化の速さが復元力になるものと考えればよい(これについては、(11)でより詳しい説明を加えているので、そちらを参考にしていただきたい)。方向も交えて説明すると、機体の回転の角運動量を$\vec{L}$で表すとその方向はベクトルの方向である。機体に加わる揺れの角速度をベクトルで$\vec{\Omega}$で表すと、ベクトルの外積で、

$$\vec{T}_{g}=\vec{L}\times\vec{\Omega}$$

のジャイロモーメント$\vec{T}_{g}$を発生させるということである。この方向は、加えられた揺れとは方向が異なったものであり(それをどう処理するかは別問題として)、その揺れを吸収させる力と考えればよい。すなわち、方向は別に、復元力は角度の微分値を使えばよいということである。

この時、(6)で導入された遅延制御モデルの運動方程式は次のように変形される。

\begin{eqnarray*}\frac{d^{2}\theta_{t}}{dt^{2}}&=&\frac{\delta}{mL}\left(V_{0}^{2}+P^{2}\theta^{2}_{t-\tau}+D^{2}\left(\left.\frac{d\theta}{dt}\right|_{t-\tau}\right)^{2}-2V_{0}P\theta_{t-\tau}+2P\theta D\left.\frac{d\theta}{dt}\right|_{t-\tau}-2V_{0}D\left.\frac{d\theta}{dt}\right|_{t-\tau}\right)\\& &-\frac{g}{L}\cos \theta_{t}-\sigma \frac{d\theta_{t}}{dt}\end{eqnarray*}

最後に$-\sigma \frac{d\theta_{t}}{dt}$がジャイロ効果の項で、$\sigma$はパラメータである。

これを4次のルンゲ・クッタ法で解くために、この二階の非線型微分方程式を一階の連立微分方程式に変換する。

$$\begin{eqnarray*}\frac{d\theta_{t}}{dt} & = & \omega_{t} \\\frac{d\omega_{t}}{dt} & = & lag(\theta_{t-\tau}, \omega_{t-\tau})+s\cos\theta_{t}+\xi \omega_{t}\end{eqnarray*}$$

ラグ関数$lag(\theta_{t-\tau}, \omega_{t-\tau})$は、パラメータの定義も含め(6)で導入したものと同じである。(パラメータの定義は元々(4)で行われている)

これを解くための漸化式は次のようになる。

\begin{eqnarray*}k_{1}^{\theta}&=&h\omega_{n}\\k_{1}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau})+s\cos \theta_{n}+\xi \omega_{n})\\k_{2}^{\theta}&=&h(\omega_{n}+\frac{k_{1}^{\omega}}{2})\\k_{2}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau})+s\cos(\theta_{n}+\frac{k_{1}^{\theta}}{2})+\xi(\omega_{n}+\frac{k_{1}^{\omega}}{2}))\\k_{3}^{\theta}&=&h(\omega_{n}+\frac{k_{2}^{\omega}}{2})\\k_{3}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau})+s\cos (\theta_{n}+\frac{k_{2}^{\theta}}{2})+\xi(\omega_{n}+\frac{k_{2}^{\omega}}{2}))\\k_{4}^{\theta}&=&h(\omega_{n}+k_{3}^{\omega})\\k_{4}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau})+s\cos( \theta_{n}+k_{3}^{\theta})+\xi(\omega_{n}+k_{3}^{\omega}))\\\theta_{n+1}&=&\theta_{n}+\frac{1}{6}(k_{1}^{\theta}+k_{2}^{\theta}+k_{3}^{\theta}+k_{4}^{\theta})\\\omega_{n+1}&=&\omega_{n}+\frac{1}{6}(k_{1}^{\omega}+k_{2}^{\omega}+k_{3}^{\omega}+k_{4}^{\omega})\end{eqnarray*}

漸化式は、最後にジャイロ効果の項が加わっているだけで大きく変化していない。また、漸化式の解き方も、これまでの遅延制御モデルと同じである。

次回にその結果を示そう。

0 件のコメント:

コメントを投稿

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

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