構造制約を考慮した循環分布最適化GUIアプリケーション「Windmize」

ご無沙汰しておりました。yuukivelです。

今回、また新作ができましたので、この場で公開させてもらおうと思います。
そうです。以前から作る作る言っていた構造制約を考慮した循環分布最適化GUIアプリケーション、その名も
Windmize

ダウンロードはこちら
Windmize (for Windows)
※SmartScreenによって弾かれることがあります。ご注意下さい。
※このソフトを使用した事によるいかなる損害も責任は負いかねます。実際に設計に用いるときは確認の計算を行うことを強く推奨します。

また、Githubにてソースコードを公開しています。
https://github.com/NaotoMorita/Circulation_design

GUIの構築にはQtのpython向けwraperであるpyQt4を用いています。
この記事の後、このアプリケーションを題材にして、pyQt4の紹介及び解説を行うつもりです。
この記事はとりあえず、Windmizeの使い方について記述しようと思います。

また、このアプリケーションについて2014年3月9日に電気通信大学で行われたHPA交流会における発表で宣伝させていただきました。
このときに用いたスライドをslideshareにアップしました。

2014春HPA交流会発表(公開用)

Windmizeでできる事

Windmizeは、このブログで何度も触れてきた、構造制約を考慮した循環分布最適化、通称「TR-797の方法」を人力飛行機向けに改造したTR797改手法を用いています。
それはすなわち、翼端でのたわみの値(最大たわみ)を構造制約条件として、そのたわみを実現する循環分布の中で、誘導抵抗が最小となる循環分布を探索します。
求める循環分布は、インプットされた桁の区切りを基準に、これまた以前記事にした多角形化行列を用いて、多角形の状態で計算されます。これによって、テーパー比を決めるような単純な問題にも、このアプリケーションを使うことができます。
また、構造制約条件を外せば、多角形循環での最小誘導抵抗(すなわち楕円循環分布のようなもの)を求めることができますので、設計として何もできていない状態でのスパンや機速を決定する初期設計ツールとしても、バンバン使うことができます。
計算結果はCSVで出力できるようにしていますので、今まで用いられてきた設計ツールや図面出力ツールに値を入れることも可能だと思います。
その証拠として、エクセルで出力した構造制約を考慮した循環分布としない循環分布のグラフを載せておきますね。

では実際に使い方の方を見ていきましょう。

Windmizeの使い方

Windmize.exeはそれ単体では動作しません(入っているフォルダから出して使用することはできない)ので、デスクトップ等から起動したいときはショートカットを作って下さい。もしくはフォルダ「Windmize」を丸ごと移動して下さい。
Windmize.exeをクリックして、アプリを起動すると下図のような画面になります。デフォルトでセットしてある種々の値は、このブログで触れてきた「紅鮭-肥」の設計数値(実際には微妙に異なる)となります。

とりあえず「計算」を押してみて下さい。計算中を示すプログレスバーが動き、値が出力されれば、アプリケーションは使えています。
時間が許すのであれば、デフォルト設定を少し変えて、どのように値が動くのか遊んでみると良いと思います。ある程度設計に関わっている人であれば、何をやっているのかすぐにわかると思います。


では、詳細な設定の仕方を説明しますね。

上のグラフとその下の行は設計結果の表示のための領域です。計算が終わったらここに結果が表示されます。
構造制約係数とか揚力制約係数の値を見て設計できる人とか神様だと思うけれども、一応表示しておきました。

その下が計算の設計変数を設定する部分です。まずは最適化変数の設定の部分の説明をしますね。

最適化変数の設定

  • 揚力[kgf]     

そのままです。必要な揚力をkgfで入力します。

  • 速度[m/s]     

飛行機が飛行する速度を入力して下さい。Dist機であれば6.5〜8.00[m/s]、TT機であれば8.5〜16[m/s]くらいだと思います。

  • 最大たわみ[mm]  

最外翼の終端が翼根と比較してどれだけ上に行っているか(最大たわみ値)をmmで入力します。このプログラムは「ある桁があって、その桁で指定した最大たわみ値を実現する循環分布をもとめる」プログラムですので、構造制約にとって最も重要な値となります。

  • ワイヤー取付位置

ワイヤーに代表される「翼を下に引っ張るもの」を取り付けるスパン方向の位置です。ワイヤーじゃなくても例えば双発機のプロペラとかもここで考慮できます。

  • ワイヤー下向引張

ワイヤーに代表される「翼を下に引っ張るもの」の下向きに引っ張る力を単位[N]で入力して下さい。注意すべきは「ワイヤー張力」ではないということです。この値を0にすると、一般的な片持ち機が設計できます。

  • dy[mm]

計算に用いられる翼素の(y軸に投影した)幅です。この値を大きくすれば計算は速くなりますし、小さくすれば精度は良くなります。しかし、精度が良くなると言っても限界はありますので、一般の人力機のスパンであれば50[mm]でいいと思います。なんでこの値を変更できるようにしたのかというと、ラジコン機の設計に使うときに50mmだと大きすぎるからです。
※dyを大きくしすぎると落ちます。あたりまえっちゃあたりまえですが


ここまでが設計変数を設定する部分です。続いて桁に関する設定に移ります。

桁に関する設定

桁に関する設定でできる事は3つ。

  • 各翼の終端を入力すること(つまり中央翼はここまで、内翼はここまで、みたいな入力の仕方をする)

翼の数を増やしたいときは「列追加」減らしたいときは「列削除」を押して下さい。ただし、これによって挿入された桁の剛性・線密度は必ず固定の値が初期値として入りますので注意して下さい。(例えば第5翼を削除して、列を増やして第5翼を復活させても、設定されていた剛性・線密度の値は復活しない)
また、もちろん内側の翼より外側の翼が翼根側に来てても上手く計算できません。現在のバージョンでは、そのまま落ちます。

  • 詳細に桁剛性・線密度を入力すること。

これは桁詳細設定内でできます。桁詳細設定を開くと下のようなダイアログが出てきます。

このダイアログでは、桁を4分割して、それぞれに対して桁剛性と線密度を設定できます。区切りの考え方は、その桁の翼根側を0[mm]とした座標系で考えます。これで、俗に言う「階段積層」が(一部制限はありますが)考慮できます。各翼に対する入力は上部のタブで管理されています。
桁の剛性や線密度をいちいち入力するのは面倒くさいですね。このダイアログではコピー&ペーストに対応していますので、メモ帳などにメモしてお使い下さい。え?セーブ機能を実装しろって?それは次くらいのアップデートで実装します(汗

  • 調整係数によって、各翼の剛性と線密度を大まかに調整すること

先に書いたようにいちいち剛性や線密度を入力することは、設計の仕上げにやることとして非常に重要なのですが、設計の最中に細かい設定をするのは非常に面倒な作業になります。従って、この調整係数を用いて、各翼の剛性と線密度を調整できます。単純に、剛性と線密度にこの値を掛けているだけです。もちろん剛性と線密度は比例しなかったり、積層するような構造部材では実際にはとびとびの値になりますので、調整係数で大まかに値の見当をつけて、いいものができたと思ったらその剛性値を狙って桁を設計し、できたら実際の剛性・線密度をWindmizeに入力してやってみる、といった流れが良いでしょう。

ここまでが設定の説明です。

使い方のコツ

このアプリケーションは言うなれば「揚力を中央に寄せるためのアプリケーション」です。従って、

このような明らかに楕円循環(緑点線)より中央に揚力が寄っている循環分布なら良いのですが、

このように,外側によってしまった循環は「もったいない循環分布設計」となります。この計算手法ではたわみ角による揚力の損失も考慮した循環分布を求めますので、「たわみによる揚力の減少を考慮して、すこし外側に揚力を寄せる」必要はありません。


また、このような、翼端での循環が負になるような循環分布も不自然です。

またWindmizeに内包されている材料計算は、空力最適化のためのそこまで厳密ではない材料計算です。それなりに実際と計算のズレが出ることはご了承下さい。

値のCSV出力について

CSV出力ボタンを押せば計算結果がCSVに出力されます。
これは普通ですが、中身に少し注意してもらいたい点があります。
だーっと並んでいる循環の値やたわみの値についてです。
この手法では、各翼素の値は翼素の中心の値で計算しています。従って、各翼終端での値は、だーっと並んでいる、各翼中心の値には含まれていません。
CSVの中身の方にも注意がありますが、循環値だけは各翼終端での値がCSVに記されています。
それだけ、注意して下さい(CSV開いてみれば何のことかすぐわかると思います)

最後に

構造制約を考慮した循環分布最適化によって、循環分布を設計する時代がやってきたなと感じます。私が人力飛行機の設計を始めた頃には楕円循環分布を用いる、もしくは感覚に頼るしかなく、ある意味盲目的な所もありました。この「Windmize」によって、楕円循環分布を用いるにしても、きちんとした理由が存在する、そういった時代になってほしいなと思っています。
また、このツールをネタに用いたpyQt4の解説も少し行います。pyQt4は日本語の解説が少なくて、コードを書くときに苦労しました。Windmizeからアプリケーション作成に興味を持ってくれて、新しいことをアプリにまとめて、共有する人がもっとたくさん出て欲しいです。

それでは、みなさん「Windmize」をよろしくお願いします。