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に増加させた

結果は次のようになる。

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

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

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


剛体としてのドローンのシミュレーション(2):むだ時間ありモデル

 PID制御に信号と動作の間の遅延があった場合を分析する。この遅延は「むだ時間」と呼ばれている。

先のシミュレーションの目的もこのむだ時間があった場合の分析を目的としていた。そして、むだ時間があるとPID制御に大きな困難をもたらすことがわかった。その点が、モデルを剛体を考慮したものにしたときどうなるのかをここで調べる。

以前のシミュレーション記事のリストは以下にあるので、必要に応じて参照していただきたい。

目次:PID制御によるドローンの揺れに関する数値シミュレーション

剛体としてみたドローンモデルの運動式は、

$$I\frac{d\omega}{dt}=L(f_{1}-f_{2})$$

となり、前の記事と同じである。ESCからの信号とトルク発生の間にむだ時間が発生するとしよう。むだ時間を$\tau$で表す。これによって回転トルクを発生させる力$f_{1}, f_{2}$は次のように表される。ただし、$\omega$は角速度で、$\omega=d\theta/dt$である。

$$f_{1}=\delta\left(V_{0}-P\theta_{t-\tau}-D\left.\frac{d\theta}{dt}\right|_{t-\tau}\right)^{2}=\delta\left(V_{0}-P\theta_{t-\tau}-D\omega_{t-\tau}\right)^{2}$$

$$f_{2}=\delta\left(V_{0}+P\theta_{t-\tau}+D\left.\frac{d\theta}{dt}\right|_{t-\tau}\right)^{2}=\delta\left(V_{0}+P\theta_{t-\tau}+D\omega_{t-\tau}\right)^{2}$$

右辺は、$\tau$期前のPID制御の信号に基づいてプロペラの回転数が実現しトルクが発生していることを示している。この右辺をラグ関数として$lag(\theta, \omega)$としよう(システムが前のものとは簡単になったのであえて定義する必要がないかもしれないが)。すなわち、

$$lag(\theta, \omega)=-\frac{4L\delta V_{0}}{I}(P\theta+D\omega)$$

となる。そして、次のような、一階の連立微分方程式を考える。

$$\frac{d\theta_{t}}{dt}=\omega_{t}$$
$$\frac{d\omega_{t}}{dt}=lag(\theta_{t-\tau}, \omega_{t-\tau})$$

これに4次のルンゲ・クッタ法を適応する。(ルンゲ・クッタ法については、前のシミュレーションの(2)の記事などを参考にしていただきたい

これは(6)の記事にある漸化式から$\cos \theta$に関わるものを除いた式と、形が一致するので、それを載せると次のようになる。

$$\begin{eqnarray*}k_{1}^{\theta}&=&h\omega_{n}\\k_{1}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau}))\\k_{2}^{\theta}&=&h(\omega_{n}+\frac{k_{1}^{\omega}}{2})\\k_{2}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau}))\\k_{3}^{\theta}&=&h(\omega_{n}+\frac{k_{2}^{\omega}}{2})\\k_{3}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau}))\\k_{4}^{\theta}&=&h(\omega_{n}+k_{3}^{\omega})\\k_{4}^{\omega}&=&h(lag(\theta_{n-\tau}, \omega_{n-\tau}))\\\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*}$$

これは機械的に変換したが、結果的に $k_{1}^{\omega}=k_{2}^{\omega}=k_{3}^{\omega}=k_{4}^{\omega}$ であるからこの値を$k^{\omega}$とおく。漸化式は次のようになる。

$$k^{\omega}=h\cdot lag(\theta_{n-\tau}, \omega_{n-\tau})$$

$$k_{1}^{\theta}=h\omega_{n}$$

$$k_{2}^{\theta}=h(\omega_{n}+\frac{k^{\omega}}{2})$$

$$k_{3}^{\theta}=h(\omega_{n}+\frac{k^{\omega}}{2})$$

$$k_{4}^{\theta}=h(\omega_{n}+k^{\omega})$$

$$\theta_{n+1}=\theta_{n}+\frac{h}{3}(2\omega_{n}+ lag(\theta_{n-\tau}, \omega_{n-\tau}))$$

$$\omega_{n+1}=\omega_{n}+\frac{2h}{3} \cdot lag(\theta_{n-\tau}, \omega_{n-\tau})$$

これによるシミュレーション結果は、次の記事で示す。

剛体としてのドローンのシミュレーション(1):基本モデル

以下のリストにある以前のシミュレーションは、ドローンをローターの位置のみを質点としてみたシミュレーションだった。

 目次:PID制御によるドローンの揺れに関する数値シミュレーション

すなわち、4ロータードローンならば、機体重が4つのローター位置に分散している4質点を想定したものだった。それでも、PID制御の特質を捉えることはできると思っているが、実体的には、ドローンを連続的な質点が分布している剛体として分析すべきだろう。

そこで、引き続き、極力、単純性を確保しながら剛体としてのPID制御によるドローン姿勢制御のシミュレーションを試みることにした。

空間を自由に姿勢を変えながら動くドローンの運動は、オイラーの運動方程式を使うかラグランジュの方程式を使うかという選択があるが、ここではオイラーの運動方程式を、一軸固定で簡単化して使うことにする。

そこで、ローターを前から右回りに1、2、3、4と番号をつけ、1番画のロータが最前方にあるとし、1と3のローターを貫く方向を軸とした回転をロールとして、2、4を軸とする回転をピッチとしよう。そして、ロールの回転だけ分析することにする。

ここで、ドローンのロール方向の慣性モーメントを$I$としよう。慣性モーメントは回転のしにくさ、あるいは回転のおもたさのようなものであり、ドローンの部品の重さと位置を悉く把握できれば、近似的に計算できなくもないが、なかなか面倒なものである。現実の物体の動きから逆算的に慣性モーメントを推定したりすることもあるようだ。ここでは何らかの方法で計算されているとしよう。

このように慣性モーメントが出てくるところが、剛体としてのドローンを捉える最も重要なステップであると言える。

二つのローターによる推力は、$f_{1}$と$f_{2}$によって与えられる。前後の軸、ここでは$x$方向の軸は固定されているとする。したがって、この固定された軸の回転のみを解析することになる。したがって上下方向の動きは想定していない。PID制御による揺らぎからの安定性のみを分析するということである。

左回りを正の方向とした機体角度を$\theta$で表す(モータの一関係上、ロール角の方向は負となるが特に問題ではない)。その正の方向に回転する角速度を$\omega$とする。したがって角速度ベクトルは画面手前側($x$軸の正方向)に向いていることになる。ただ、この方向はあまり関係はない。機体の中心を原点$O$として、ここからローターまでの長さを$L$で表す。

この1軸固定の剛体の運動方程式は次のように表される。

$$I\frac{d\omega}{dt}=L(f_{1}-f_{2})$$

オイラーの運動方程式で、一つの回転方向しか見ない特殊な場合でもある。この辺りのわかりやすい理論的説明は原島鮮氏の『力学I 質点・剛体の力学(新装版)』(p.193)に与えられている。

運動方程式の右辺は、二つのローターによるトルクの差を表している。このトルク差が回転の動力を与えるのである。

プロペラの回転による$f_{1}$および$f_{2}$の変化は、次の各式で与えられると想定する。設定は、前のシミュレーションモデルと同じであり、必要ならば参照していただきたい。

$$f_{1}=\delta\left(V_{0}-P\theta-D\frac{d\theta}{dt}\right)^{2}$$

$$f_{2}=\delta\left(V_{0}+P\theta+D\frac{d\theta}{dt}\right)^{2}$$

$V_{0}$は、ホバリングを実現するプロペラの回転数で1軸固定を正当化する力である。$P$は、PID制御のPパラメータで、単位としては機体のロール角(ラディアン)をプロペラ回転数に変換するものである。また、$D$は、PIDの微分制御で、ロールの角速度をプロペラ回転数に変換するパラメータである。ここでは、機体の傾向的偏差を補正する $I$制御は考慮しない。

プロペラの回転数は、その平方値が力に比例すると考える。また、その変換パラメータが$\delta$になっている。

このトルクに関する二つの式を運動方程式に代入して整理すると次の式を得る。

$$I\frac{d\omega}{dt}=-4L\delta V_{0}\left(P\theta+D\frac{d\theta}{dt}\right)$$

さらに、$w=\frac{d\theta}{dt}$を用いて整理すると次のようになる。

$$\frac{d^{2}\theta}{dt^{2}}+4\frac{L\delta V_{0}D}{I}\frac{d\theta}{dt}+4\frac{L\delta V_{0}P}{I}=0$$

ここで、

$$4\frac{L\delta V_{0}}{I}=\eta$$とおく。この$\eta$は時間に依存しない定数である。すると式は、

$$\frac{d^{2}\theta}{dt^{2}}+\eta D\frac{d\theta}{dt}+\eta P=0$$

となり、典型的な二階の線形常微分方程式となった。もっと複雑になるかと思ったが、予想外に単純なモデルとなったことにとても驚いた。

これは微分方程式の教科書にも必ず書いてあるもので、解析的に解くことも容易である。

特性方程式は次のようになる。

$$\lambda^{2}+\eta D\lambda+\eta P=0$$

この式の判別式を$J$とすると、

$$J=\eta^{2}D^{2}-4\eta P = D^{2}\eta\left(\eta-\frac{4P}{D^{2}}\right)$$

三つの場合に分けることができる。

(1)$0<\eta<\frac{4P}{D^{2}}$のとき、$J<0$で、特性式を満たす$\lambda$は、虚数になる。

$$\lambda = \frac{-\eta D\pm \sqrt{\eta^{2}D^{2}-4\eta P }}{2}=\alpha\pm\beta I$$

とすると、解である$\theta$は、次のようになる。

$$\theta=e^{\alpha t}(C_{1}\cos{\beta t}+C_{2}\sin{\beta t})$$

ここで、$C_{1}, C_{2}$は、初期条件から与えられる未定条数で、これで初期の撹乱を与えることができる。。

$\alpha=-\frac{\eta D}{2} < 0$であるから、この場合は、機体角度は振動しながら減衰し、ホバリング状態に近づいていく。

(2)$J=0$で、重根のとき。

$\lambda=\alpha=\frac{-\eta D}{2}$として、

$$\theta=e^{\alpha t}(C_{1}+C_{2}t)$$

で、機体角度は、揺れることもなく、ホバリング状態に減衰していく。

(3)$J>0$で、実数解のとき。特性方程式の解を$\lambda_{1}, \lambda_{2}$とすると、

$$\theta=C_{1}e^{\lambda_{1}t}+C_{2}e^{\lambda_{2}t}$$

となる。特性方程式は二次曲線だが、その中心は負にあり、かつ$\lambda=0$の左辺の値は、正なので、この二つの解は、必ず負である。したがって、この場合もまた一方的に機体角度はホバリング状態に近づいていく。

機体に撹乱があったとき、どのような状況でも、時間の速さや揺れがある内の違いはあっても、ホバリング状態に戻ることがわかった。また、$\eta$の絶対値が大きくなると、ホバリング状態への復帰が早くなる。$\eta$の定義から、他が同じで、慣性モーメントが大きくなるとホバリング状態への復帰が遅くなることを意味している。期待が大きくなると必然的に慣性モーメントは大きくなるので、安定化に時間がかかるということだ。ある意味当然の結果だと言える。

他のパラメータの影響も色々調べることはできるが、それはまた機体の設計上、必要に応じてやるのが効率的なので、ここではこれ以上の分析はスキップする。

確認のために、数値的なシミュレーションを実行しよう。ただし、解析的にある程度解がわかっているので、パラメータを実機に近いものにする面倒は避けておく。

(1)虚数解のとき
パラメータを条件に合わせて次のようにする。$c_{1}=2, c_{2}= 1, \eta=0.0015, D=2, P=1$このときステップを1秒として実行すると解の機体角度$\theta$は次のようになる。

理論的に予測された通りである。

重根のときは省略。

(2)実数解のとき
パラメータは、虚数解と比べて$P=0.001$だけを変更する。P制御を弱めた形になる。結果は次のようだ。

一方的減数で、予想どおりだ。

これらの結果は、PID制御が有効なことを表しているが、問題は、制御に遅延がある場合、すなわちむだ時間がある場合である。先のシミュレーションでは、むだ時間がある場合は、安定化はとても難しかった。

また、むだ時間を入れる場合は、解析的な解は望めない。その辺りを次に検討するつもりだ。


2022年2月23日水曜日

目次:PID制御によるドローンの揺れに関する数値シミュレーション

ドローンの1つの軸が固定され、ローター位置に質点が集中していると簡単化したシミュレーションの記事リストは以下のものです。

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

PID制御によるドローンの揺れに関する数値シミュレーション(7):遅延シミュレーション 

PID制御によるドローンの揺れに関する数値シミュレーション(8):慣性モーメント

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

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



2022年2月13日日曜日

Raspberry PI 4 に 64bit OS をインストール

 ジャイロスタビライザーを組み込むフレームはできて、それを動かすためにシステムを改定したら、実行時にメモリがおかしくなっている感じでうまく動かない。

しばらく格闘していたが、前にも同じようなヒープ領域がおかしくなったようなエラーがあってOSを最初からインストールし直した記憶がある。ラズパイのバグではないかと思った。調べるつもりはないが。

今回は、あっさり64ビットOSを入れたらこんな問題は発生しなくなるのではないかという根拠のない予想のもとに、再インストールを試みることにした。もちろん、新しいSDカードに入れるので、前のを消すわけではない。

一番心配したのはWiringPIが使えなくなるのではないかということだ。もともと、作者がもう更新はしないと言っているようなので、心配だった上に、確実にこれまでのライブラリは動かなくなるので、どうしようかと思った。後で書くが結果的に、ビルドし直して問題を回避できたので良かった。

手順だけ書いておく。

(1)ラズパイのサイトにある、イメージ作成ソフトで、64ビット版デスクトップイメージをSDカードに焼く。少々時間がかかる。

(2)基本設定をする。ssh、I2CやSPIを使えるようにする

(3)/boot/config.txtのインターフェイスブロックに次の1行を加える

i2c_arm_baudrate=400000

(4)日本語入力環境を構築する

sudo apt-get install fcitx-mozc

これをやって、再起動で良かったと思う

(5)qtcreatorのインストール

sudo apt-get install qtbase5-dev qtchooser
sudo apt-get install qt5-qmake qtbase5-dev-tools
sudo apt-get install qtcreator
sudo apt-get install qtdeclarative5-dev
(20221031追加)
sudo apt-get install libqt5serialport5-dev

だいたいこれで良かったと思う。
(追記)sudo apt install cmake でcmakeもインストールする必要がある

(6)nodejsのインストール
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install -y nodejs
これで良かったような気がする。

(7)wiringPiのシェアードライブラリのインストール
オリジナルのサイトからのリンクには、ソースがなかったというか、ダウンロードできなかったので、以下のサイトにあるソースをビルドしたらインストールできた。
 
(8)jdk, netbeansをインストールする
jdkをインストール
sudo apt install default-jdk
バージョン確認
java -version
netbeansをダウンロード
からBinariesをダウンロード解答、/usr/local/netbeansに移す
export PATH="$PATH":/usr/local/netbeans/bin

(8)/boot/confifg.txt の dtoverlay=vc4-kms-v3d に nocomposite をつけてはならない。にっちもさっちもいかなくなる。
 

2022年2月12日土曜日

ジャイロスタビライザーを組み込んだ機体の配線

 新しい機体の配線をする段階が近づいている。これまでの機体の配線は、ただ頭の中にあるものを実体化していただけだったので、複雑になってくると、考えるのが面倒になってくる。ノートに書き留めておくことにした。



2022年2月9日水曜日

「東京ドローン製作所」を立ち上げる

事業化が目標なので、個人でやっているというよりも組織を明確にしたほうがいいと思い、「東京ドローン製作所」を立ち上げた。その名前は、場所と目的をはっきりさせただけなのだが。

サイトを以下に作った。

東京ドローン製作所


2022年2月5日土曜日

PID制御によるドローンの揺れに関する数値シミュレーション(12):ジャイロスタビライザー

 (11)で、ジャイロモーメントを利用して、遅延制御で発生するPIDの不安定かを除去する理論的枠組みを説明した。その装置をジャイロスタビライザーと呼んでおこう。ドローンに装着するジャイロスタビライザーのシステムを仮に製作した。

その様子を、以下のYoutube動画としてアップした。

姿勢安定化のためのジャイロスタビライザー

ジャイロの円板は動画のものよりも小さくするが、システム全体は大きなものとなるので、現在のドローン機体を少しコンパクトにする必要がある。しばらく、その作業に時間を割かなければならないだろう。

なお、このような制御システムのことをコモンコントロールジャイロ(common control gyro: CMG)と呼ぶようだ。今知ったが(笑)

これまでの記事は以下にある。

目次:PID制御によるドローンの揺れに関する数値シミュレーション


2022年2月2日水曜日

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

 前節で、制御遅延があるシステムに、機体の慣性モーメントを増やすために、ジャイロ効果を入れた時のシミュレーションを行なった。運動方程式上は、角速度に係数$\sigma$をかけたものが入ってきた。そして、その$\sigma$はある程度の大きさを持っていないと、PID制御による安定化に寄与できないことがわかった。そこで、一体どうしたらこのようなジャイロ効果を入れることができるのかを考えてみる。

なにしろ、ドローンは中空を飛んでいるのである。慣性モーメントを増やそうというのは、特に支えもないのに動きにくくしようということである。

プロペラにもジャイロ効果があると書いた。それは大概対称に回転しているので、ジャイロ効果も偏りなく入ってきそうであるが、残念ながらその効果は大きくない。なぜなら、プロペラが軽いからである。

そこで、フライホイールのように円板を回転させて、それによって生み出されるジャイロ効果を組み込むことを考えよう。回転体は、コマのように一つの方向を維持しようとし、力を加えると歳差運動を引き起こす。

回転体に、その軸と垂直にひねりの力を加えると、それに対する反発力としてのジャイロモーメントが生まれる。この力は、結局ひねりそのものを抑止する力となる。

この仮説が正しいとして、それによって我々の$\sigma$の値を得るためには、どれほどの回転体を用意しなければならないかを数値分析しようというのが、ここでの課題である。

まず、フライホイールの図を用意する。



中央の網掛け部分がフライホイールの本体、回転体である。

まず、この円板の慣性モーメント$I$を求めると次のようになる。それほど難しくないと思うが、Wikipediaのものをそのまま使っている。円板は、質量$M$が均等に分布し、半径$a$のものである。

$$I=\frac{1}{2}a^{2}M$$

この慣性モーメントはベクトルではなくスカラー値である。一方、この回転から生じている円板の角運動量は円板の角速度$\vec{\omega}$と慣性モーメントによって次のように表される。(ベクトルの矢印が少しずれています)

$$\vec{U}=I\vec{\omega}$$

今、回転体が上側にいる観察者から見て、反時計回りに回転していると、右ネジ方向がベクトルの向きになる。従って、角運動量ベクトル同じ上方向になる。

一方、ジャイロモーメント$\vec{T_{g}}$は、軸をひねる角速度を$\vec{\Omega}$として、次のようになる。Wikipedi

$$\vec{T_{g}}=\vec{U}\times\vec{\Omega}$$

ここでは、ひねりは軸に対して垂直に加えられるとする。$\times$はベクトルの外積であり、それ自身ベクトルだが、今はスカラー値を観察する。両ベクトルが垂直の関係なので、ベクトルを外した記号の式で、目的のものが求められる。

今、回転体の中心から捻りを与えるまでの距離を$L$とする。これは、ドローン機体の中心からモータの位置までを想定すればよい。モータこそがフライホイールに捻りを与える存在だからである。実際は、回転体は、機体に水平に置かれるが、それは大きな問題ではない。

スカラー値だけを問題にして、まず、$\Omega=\frac{d\theta}{dt}$だから、

$$U=I\omega$$

$$T_{g}=U\frac{d\theta}{dt}$$

また、$T_{g}$は、トルクであるから、その力を$F$として、

$$T_{g}=LF=U\frac{d\theta}{dt}=\frac{1}{2}a^{2}M\omega\frac{d\theta}{dt}$$

$$F=\frac{a^{2}M\omega}{2L}\frac{d\theta}{dt}$$

と書き換えられる。

また、円板の毎分回転数$R$(rpm)は、円板の回転の角速度$\omega$を使って、次のように求められる。

$$R=\frac{\omega}{2\pi}60=\frac{30\omega}{\pi}$$

逆に$\omega$で解いて、

$$\omega=\frac{\pi R}{30}$$

を得る。

これで、準備が整ったはずだ。

以上の変形を使うと、このシリーズの(9)に記載されている遅延制御とジャイロ効果を含む運動式の、ジャイロ効果の項(マイナスを省く)は次のようになる。

$$\sigma\frac{d\theta}{dt}=\frac{F}{mL}=\frac{a^{2}M\frac{\pi R}{30}}{2L}\frac{d\theta}{dt}$$

左端と右端の項を比べることによって次の式を得る。

$$\sigma=\frac{\pi a_{2}MR}{60L}$$

この式の右辺に、実際の円板と実機の情報を次のように与える。

$$M=0.113 (Kg)$$

$$a=0.1 (m)$$

$$R=5000 (rpm)$$

$$L=0.215 (m)$$

円板は、厚さ1.5mm、半径100mmステンレス板であり重さは大体113グラムくらいになる。比較的小さなブラシレスモーター(負荷は小さいのでKv値が大きくてよい)で回す予定で、5000rpmを想定する。また、ドローンの腕の長さは、これまで通り21.5cmである。

これらの値を上式に代入すると、計算間違いがなければ、$\sigma$は次のようになる。

$$\sigma \simeq 1.3753 $$

(10)のシミュレーションで、$\sigma$は1以上であれば、PID制御によって一方的安定化が可能であることが示されている。従って、ここで想定するフライホイールでそれが可能になることが示されたわけだ。

もし、不足したり、過大であったりするときは円板の回転数を上下させればよい。あるいは、急な旋回や機体の移動が必要なときは、このジャイロモーメントは邪魔になるので、回転を止めることも必要になるだろう。

ただし、機体を抑止する方向は、一つの円板で一つの方向しかダメなので、水平方向の揺れを抑止するためには、少なくとも二つの円盤を動かさなければならないことに注意する。

これまでの記事は以下にある。



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

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