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制御によって一方的安定化が可能であることが示されている。従って、ここで想定するフライホイールでそれが可能になることが示されたわけだ。

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

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

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



2022年1月31日月曜日

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

前の(9)では、遅延制御による問題を回避するためにジャイロ効果を利用する理論的モデルを示した。ここでは二階の非線型常微分方程式と数値解用の漸化式で表されたモデルを、計算で解いた結果を示す。

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


シミュレーションで使用したc++のプログラムは、次のgithubのレポジトリから取得できる。gyroeffect-1.cppという名前のファイルである。

https://github.com/toyowa/pidsimulation/tree/main 

シミュレーション結果を示す。まず、試行錯誤の末に到達した最もよい結果から示す。制御の遅延レベルは、実機の実態を反映した200msに統一している。

1。遅延20期(200ms)、σ = 1.0、P=5000. D=1000

青い線が、機体のピッチ角である。オレンジの線は、モータの回転rpmである。ほぼ迷いなくホバリングの水平姿勢に向け一直線に姿勢を正している。腕の長さや重量などを実機のままに、遅延20期は、これまで全て飛行破綻状態だったが、初めて、遅延のない制御とほぼ同じ結果がもたらされた。おろどくべきことだ。

2。遅延20期(200ms)、σ = 0.5、P=5000. D=1000

他は同じで、ジャイロ効果を半分まで小さくすると、初期の揺れののちにホバリング姿勢に収束していく。
これよりも小さく、例えばシグマを0.25とすると、飛行はすぐに破綻する。すなわち、ジャイロ効果のない事態に近づいていくのである。

逆にシグマを増加させてみよう。

3。遅延20期(200ms)、σ = 2.0、P=5000. D=1000

シグマが1.0の時よりも、滑らかに変化しているが、収束スピードは逆に弱まっている。

PIDのスケールを変えたものも行ったが、ここでのPDの値で、シグマが1.0あたりが一番、綺麗に制御されているように思う。

いずれにしても、ジャイロ効果は、PIDの制御遅延の問題を解決する上で、大きな効果と意味があることがわかった。

ピコをudevを制御して区別する

 システムで、dshot信号を作るのをpicoでやらせていた。UARTの使用の関係で、pico1台で、2つのモータに信号を送っていたので、2つのpicoを使っていた。それまでは、pico二信号を送って、あなたはどちらのpicoですかと問い合わせして、その答えを聞いて /dev/t...