翼型とかの図面出力について、C#で作ってみた

まえがき

前の記事の続き

プロペラの渦法のGUIソフトを引き続き作っています。空いた時間にやってるのでのんびりのんびり・・・

現在のところ渦法とLarabeeの設計法、Adkins & Liebeckの設計法(翼素運動量理論Blade Element Momentum theory:BEMとかとも呼ばれたりする)と設計した翼の性能解析を実装しました。基本的には以前に作ったものの移植です。
機能は整ってきたので公開しようとおもうのですが、クラス設計を見直したいのでソースが整ってきたら公開します。

そんな中

製作段階になると、設計できたプロペラの翼型を印刷したいという要求があります。作っている人達は大抵、翼型データベースから持ってきた翼型datファイルをCADに持ってきて印刷したりしてるかと思います。
設計結果からExcelなどで翼型datファイルを拡大、回転させてCADにインポートして印刷してたりするんでしょうか。
業務としてやるなら、CADについてるスクリプトで書くのが普通でしょうか。
そこで、いま作っているプロペラ設計ソフトに翼型印刷機能を付けようと計画してコード書いていました。
しかし、ソフトに組み込むような機能では無いなと思ったので、ここで翼型印刷機能だけ別ソフトにして公開しておきます。
他記事
鳥人間の現役の人が翼型印刷について頑張って書いた記事は以下のようなものがあります。
設計の為の言語としてOctaveを勧めてしまった経緯もあって細かい技術的な工夫をして作っているのがわかります。

C#で作ってみた

Visual Studio使ってC#によって翼型datファイルの読み込みと拡大縮小・回転、印刷機能を作ってみました。
これを元に機能を追加することによって汎用的なソフトになるかと思います。
元ネタとしては自分が昔いたサークルで作られていたAirFoilPrinterというソフトです。ソース読んだことないけど、多分これをブラッシュアップしたものな気がします
車輪の再発明すぎるものではありますが、ネット上に挙がってなさそうでしたのでブログにしてみました。
ソースだけ晒しておきますが、もし欲しい人がいればexe形式で公開します。
ポイントとしては
csvなどのカンマ区切りではなく、スペース区切りになっている翼型datファイルを読み込むために数字の部分だけをx座標y座標のコレクションに追加している点。
AeroFoilクラスにDrawメソッドを作って
画面への描写と印刷面への描写に対応しているところです。
ミリメートル単位にしているので解像度など気にしないで大きさを直接指定できます。
あとはGUIを作る部分なので大した意味はないです。
188行目などのグラフィックの単位をミリメートルにした点がポイントです。
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
あと見てもらいたいのは後半のAeroFoilクラスの翼型読み込みのためのメソッドと描写のメソッドの部分です。
AeroFoilクラスのポイント部分だけ抽出すると以下です。全文は一番下にあります。

C#で渦法のプロペラ設計プログラム作ってみた

前置き

ちょっと前まで、オープンソースというか誰かが作ったプロペラ設計プログラムや解析プログラムが中身分かる形でネット上に置いてあるということがなく、不便をしていました。そんな中、これまでAdkins & Liebeckの方法Larrabeeの方法のプロペラ設計法のプログラムを作って公開してきました。

それがXROTORがGPLライセンスになったことでオープンソースということでは便利な形で存在するようにました。これも日本語での説明どころか、英語ですら解説がないものだったので解説記事を書いたりインストール方法を書いたりしていました。

渦法

そうこうしている中、「低レイノルズ数プロペラの設計法」という論文を書かれている原田さんに直接色々と話しを伺うことが出来て、しかも、Matlabで作った論文の重要な部分を抜き出した簡易版のプログラムも頂けました。

渦法は低レイノルズ数領域のプロペラ設計では有用な設計方法ではありますが、(どんな点で有用かは論文や後述の課題見ればわかるはず、あとで説明書くかも)

  1. 論文が難しい
  2. 誰でも使えそうなソフトウェアの形になっているものがない

という点でLarrabeeやAdkins & Liebeckなどの方法が鳥人間でまだまだ使われています。

1.の点に関して、原田さんがMatlabの課題形式で渦法の設計方法のまとめの文章を書いてくださっています。鳥人間の関係者はちゃんとコンタクトを取ってみると課題が受け取れるかと思います。もしくは貰っている人がいるチームの人は担当者から引き継ぐなどできるかと思います。

課題を見ながらなら(しっかり時間をかければ)誰でも渦法の設計は出来るようになるかと思います。難しい論文の内容が自分の手元で組上がってくるのはこれ以上無く、楽しいものです。

2.の点に関して、もし誰でも使えるソフトというものがあれば、設計法の有用性から考えても渦法が広まるかと思っていました。(初期設定がLarrabeeの手法になっている)XROTORや私作成のプログラムの「渦法」版のソフトがあればいいなって話しです。

マニア向けに言うとXFOILの時代からXFLR5が出てきたことによる翼型解析の普及のようなことが起こればいいなと思うわけです。

なので作ってみた

C#ってラーメンタイマーみたいな練習以外で使うのは初めてでしたが、3日かけて(そのうち1日分の作業はブルースクリーンで闇に消えた)C#で作ってみました。パラメータを入れてCalculationボタンを押すと渦法で設計してくれるっていうものです。Matlabでの同じアルゴリズムの計算の3倍以上速く計算完了します。自分の環境だと10秒程度でした。forループが入れ子になって収束計算しているのでMatlabより早くなります。

今は単に原田さん謹製のMatlabプログラムからC#への移植しただけです。

もし反響があれば、以下のようなアップデートを行いつつ、公開していこうかと思います。

  • 複数データが比較可能へ
  • 性能解析モード搭載
  • 翼型性能をXFLR5から読み込み
  • ファイル入出力
  • etc…

 

JA2012に行ってきた

2週間以上前のことだけど、国際航空宇宙展(JA2012)というのを見に名古屋に行って来ました。いつもならブログには書かないようなことだけど、すごく刺激を受けました。ここから得た刺激を元にやりたいことがいくつか出てきて、それをこの場所で出していきたいので、書いておきます。

ポートメッセなごや

金曜日の夜、研究室で飲んだ後、そのまま深夜高速バスで名古屋入り、ポートメッセなごや到着。

日本企業だけじゃなくて海外企業も来てるって言われてたから割りと期待してたけど、ビジネス的に来てるだけで、一般客としては日本企業の方が面白いと思うのです。

それでも防衛ミサイルの断面模型なんかは興奮して見ていました。

面白いと思える展示はたくさんあったけど、写真に残してたのは新明和のUS-2やら関東で何度か見てるIHIのネ-20。

飛行ロボットコンテスト

会いたかった人にも会えたし、200gという厳しい重量制限でも結構なものが作れるんだなということは会場を見るだけでもわかりました。自分ならこうするのにとか、電子機器や設計や構造まとめて色々思いつくけど、学生として出場する機会はないんだなぁと引いて見てました。

セントレア

セントレア空港もJA2012の別会場として空いていたので見に行った。ブルーインパルス登場の時間だったために中々前に進めないような混雑具合のまま展示されている飛行機の写真とかとってました。JAXAの飛翔は何度も個人的な話に出てきていたので初めて見た気がしなかったです(笑)。

ガルフストリームの機体が美しくて感動してしばらくボーッとしていました。

ブルーインパルスの飛行もちょっとだけだけど見れて、満足してセントレアを出ました。

そのあと空いた時間でJR東海のリニア鉄道館というところで鉄道充して高速バスで帰りました。0泊4日で諸経費総額で2万円を切るような楽しい名古屋旅でした。

スゴイロガー進捗(1)STM32F4の(仮)開発環境

前回に電源周りだけ確認したスゴイロガーことNinjaScanですが,STM32F4でLチカできるまで進みました.

これが出来るとハードウェア的には大部分の確認が取れたことになります.基板設計とアートワークの確認が取れることに意義が大きいです.好きにプログラムすることによって取り付けるセンサとのやり取りやコネクタから出ている信号線を使って通信できます.このあとはSuper Sylphideシリーズの設計資産を使ってソフトウェアの開発を行います.(これは自分には重すぎるのでお師匠様であるFenrirさん任せの予定)

(仮)開発環境まとめ

今回はSTM32F4の動作確認が目標だったので,簡単にマイコンに書き込める環境にしました.

  • ARM用 IAR Embedded Workbench(32KBコード制限の無料評価版)
  • ST-Link/V2(秋月で購入)
  • ファームウェアやサンプルプログラムは公式から
  • SWD(シリアル ワイヤ デバッグ)でデバッグ

ファームウェアはSTMicroの公式から落としたが,公式からだとすごく見つけにくいのでhttp://www.emcu.it/STM32.html#STM_Firmware_Librariesを参考にしました.

Lチカの書き方は当初「STM32徹底入門」のサンプルを参考にしていたが,STM32F1とSTM32F4とで微妙に異なるようなので

http://www.emcu.it/STM32F4xx/STM32F4-Library/STM32F4-Library.html

などを参考にした.全体的にはSTM32徹底入門のGPIOのサンプルそのまま.初期化の辺りを直すことと,F1からF4に変わることで,GPIOのクロックがAPB2からAHB1に変わっていること,GPIOの構造体変数が変わっていることを注意します.

EWARMをインストールした後,STM32F4 DSP and standard peripherals libraly… と書いてあるstm32f4_dsp_stdperiph_lib.zipを解凍してその中の[STM32F4xx_DSP_StdPeriph_Lib_V1.0.1] → [Project] → [STM32F4xx_StdPeriph_Templates] → [EWARM] → [Project.eww]からプロジェクトを作り,[User]の中身のmain.cやstm32f4xx_it.c辺りを書き換えました.

ST-Linkで書き込んだので,EWARMの[プロジェクト] → [オプション]のデバッガがJ-LinkになっているのをST-Linkにしておきます.

ST-LinkのJTAGの20ピンあるところからSWDに相当するピンの4本繋いで書き込みとデバッグが出来ました.

あくまで仮の開発環境で,コード制限などを考えると,新たに開発環境整えないといけないと考えているところです.STM32はググるとそれなりに情報が出てくるのでありがたい限りです.

スゴイロガーはじめました

Fenrirさん企画のスゴイロガーことNinjaScanのお手伝いをしています.

スゴイロガーはすごいです.何がすごいって,説明などはそのうち・・・w

自分が忙しかったために9月中は手をつけていませんでした,10月に入って本格的にお手伝いということで,部品の実装をしています.電源部分まで動作確認しました.このあとSTM32F4の動作確認をしてセンサをつなげていきます.

写真はUSB給電で,電源が来ているのを確認しているところです.電源ICが面白くて,USB/外部電源/電池の電源切り替え,LiPo充電機能,DC/DCコンバータを1チップでもつ電源ICなので電源だけでも楽しめてます.