飛行機力学入門の実装

飛行機のフライトシミュレータ作りたいことって往々にしてよくあるんだけど、とってもわかりやすくまとまっている記事が出たので紹介。

フライトシミュレータと言っても操縦して楽しむものではなく、飛行機のパラメータが与えられた時にどのような挙動をするかを調べるためのシミュレータの話しです。

octaveで6自由度飛行シミュレーションを行う(0)

octaveで6自由度飛行シミュレーションを行う(1)

octaveで6自由度飛行シミュレーションを行う(2)

octaveで6自由度飛行シミュレーションを行う(3)

航空力学の基礎の飛行機の運動のところとか、航空機力学入門の運動方程式のところは初見だと難解に見えるけど、実装してみるとこんなにシンプルになるんだっていうことがよくわかります。

MatRockSim

自分でも航空機ではなく飛翔体のフライトシミュレータをMatlabで作って公開していますが基本構造は同じようにシンプルです。 飛翔体フライトシミュレータはそのうちちゃんと記事にしないと・・・

https://github.com/ina111/MatRockSim

https://github.com/ina111/MatRockSim/raw/master/Matlab%20Rocket%20Flight%20Simulator.pdf(PDF)

すごいロガーのログビュワーソフト作った

ちょっとすごいロガー、もうちょっとすごいロガーのログはLOG.DATという普通のテキストで見れないバイナリファイルで保存されています。これをエクセルや普通のエディタで表示するためにはNinjaScan GUI(zip)などを使ってアスキーファイルにします。

そのあと、エクセルなどで必要に合わせてグラフ化するのがいいですが、もう少し簡単にログが見れると良いですよね。

ということで作りました。

作った

zipファイル: NinjaScan LOG Viewer

Githubリポジトリ: https://github.com/ina111/NinjaScan_LogViewer

ログのgpstimeから必要なところを切り出してmatplotlibでグラフ化しています。MITライセンスです。

使い方

すごいロガーのLOG.DATファイルを別ソフトのNinjaScan GUIで.csvファイルに変換。その後、LogViewerを使って、csvファイルを選ぶ。

データの中身を確認。範囲内のgpstimeからグラフ化するgpstimeを指定。Launch gps timeがグラフ化の時間のゼロ点。

Plotボタンでグラフ表示。適当に保存して下さい。

下の画像は某大学のハイブリッドロケットの飛翔ログです。極めて簡単にグラフ表示が可能です。出来る人はcsvファイルから自力でグラフ化するのが良いです。カスタマイズが出来ますから。

スクリーンショット 2014-09-16 01.57.33 NinjaScanLOGViewer

 

使っているもの

  • python 言語
  • matplotlib グラフ化
  • Pyside GUI化
  • cx_Freeze exe化(setup.py)

 NinjaScan GUIの改良

地味にNinjaScan GUIも改良しました。GPS受信機のデータをubx形式(付いているモジュールの標準出力)だけではなくNMEA形式でも出力するようにしました。.nmeaファイルをGoogle Earthに読み込ませると結果が表示されます。

ちょっとすごいロガーのGUIフロントエンド作ってる

ちょっとすごいロガー(Ninja Scan Lite)リンク

”ちょっとすごいロガー”はとても小さい動き計測のためのロガーです。3軸加速度、3軸ジャイロ、3軸地磁気、気圧高度計、GPS受信機のデータをSDカードに保存したり、USBを通してPCと通信したり、(ファームウェアを改造すれば)シリアル通信で他の機器と(例えば無線機など)通信できるオープンソースハードウェアな計測器です。センサの数は多く、でも機能はログを取るだけに絞ったものです。

3つ目のが今回の作ったものの置き場です。

作ったもの

ちょっとすごいロガー(NinjaScanLite)の開発で、一般販売するにあたって、黒い画面でコマンドをガシガシ打ち込んで使えおらぁ!っていうオラオラ系も味がありますが、ゆるふわな感じも大事です。

なので、ちょっとすごいロガーのGUIフロントエンドをC#で作りました。一般公開して、広く使ってもらえるようにしようとしています。exeファイルは後日公開予定。

上にも貼っていますが、開発状況は以下で。

https://github.com/ina111/NinjaScan_GUI

機能
  • ちょっとすごいロガーのUSBから出力されるバイナリデータ(Sylphideプロトコル)のストリームをパースする機能
  • youtube動画のようにリアルタイムで値をグラフで出力する機能
  • SDカードに保存されているLOG.DATというバイナリファイル(Sylphideフォーマット)をCSV形式に変換
  • (GPSから得られる位置情報をGoogleEarth上に表示)

Visual Studio2013だとExpressでもNugetが使えるようになっていて、ライブラリが楽に管理できるので、捗ります。

使っているもの

  • Sylphideフォーマット :転送や保存のデータ量の圧縮のためにセンサデータはASCIIのような読みやすい形式ではなく、バイナリデータにしてあります。なので、デコードする必要があります。C#にはBinaryStreamというクラスがあるので、Sylphideフォーマットにしたがってクラスを作ってパースしています。Sylphideフォーマットを使っているHPA NaviやTiny Featherなどとはセンサの違いなどのため、完全な互換性はありません。
  • Math.net Numerics :数値計算とか行列計算のライブラリ。補間とか色々便利。Nugetから。
  • ZedGraph :グラフライブラリ。timerのイベントでグラフを再描写してリアルタイムグラフにしている。Nugetで入れました。
  • OpenTK :(未実装)OpenGLのC#のフレームワーク。姿勢の表示とかやろうかと。Nugetにもあるが、HPからダウンロードしないと使えませんでした。
  • GoogleEarthAPI :GoogleEarthAPIはJavaScriptなので、やりたい命令を関数として書いたJavaScriptが入っているhtmlファイルを用意して、C#から下記のようにするとJavaScriptの中の関数が実行されるので、カメラ動かしたりできます。
webBrowser1.Document.InvokeScript("js_func", args);

 

計測器、ロガーはとにかく足回りの整備です。これを使った色々が出てきてくれるとやりがいがあるなぁ。

 

Inaprop -プロペラ設計・解析ソフト- 紹介

Inapropというソフトを作りました.
β版という扱いですが,ある程度使えると思うので公開します.
β版ということでまだまだ自分でも確認しているバグもあります.エラーが起こったら報告していただければ幸いです.

Inapropリポジトリのexeファイル置き場

のView Rawからダウンロードしてもらうのが最新版です.

追記2014/08/11

英語での紹介ページを作りました。右上から日本語にも飛べます。

http://inaprop.ina111.org/

 

概要

Inapropは低レイノルズ数領域,具体的には人力飛行機や飛行船などの領域で使うプロペラを設計できるソフトです.低レイノルズ数という言い方は不適当で低円盤荷重という方が適当かもしれません.

exeファイルで公開していますので,インストールの必要はありません.
Windows専用です.Windows Vista,7での動作は確認していますが,他の環境は確認していません.

まだ機能を充実させていないので,正確な値は出力しません.人力飛行機でのおおよその値を見るのには使えます.特に低レイノルズ数領域でのDAE51という翼型の揚力係数以外の翼型の性能を反映させていない部分が致命的です.また,プロペラのような回転体において2次元翼型の性能と実際のプロペラの翼型性能はある程度の誤差があることが報告されていることも留意が必要です.
翼型データが固まっていないのでピッチ角(グラフでphi)の値は信用しないで下さい.ここは優先的に修正したいと思っています.
応援されれば機能追加する予定ですw

ちゃんとした機能のものが必要な場合,XROTORというソフトをオススメしています.

機能

  • 3つの設計手法に対応
  • 最小全損失のプロペラの設計手法(渦法)
  • 最小誘導損失のプロペラの設計手法(Larrabeeの手法,Adkins & Liebeckの手法)
  • 設計したプロペラのパラメータ変更時の解析
  • 複数プロペラの比較
  • 設計プロペラのCSV形式出力

必要なもの

Microsoftの.Net Framework 4が必要になります.

覚書

渦法(vortex method)においてはプロペラの渦法の論文も出されている原田さんから教わったことを元にしています.一般にはオープンになっていませんが,原田さんにコンタクトを取れば頂けるMatlabプログラムであるHiyokoPropをC#に書き直しているものです.このMatlabプログラムが非常にわかりやすく,勉強になるものになっています.
Larrabee method, Adkins & Liebeck methodについては該当論文を参考にプログラムに書き下しています.
渦法では計算時間がかかるのは損失最小のプロペラを計算するのに大域最適化問題を解くためにシミュレーテッドアニーリング法を使用しているからです.計算時間を考えて分割点が少ない上に収束条件が甘く設定しているのでガタガタになりますが,何度かやるとたまにいい結果が出ます.
Larrabee methodの方では誘導損失最小となるプロペラ条件を仮定していることから収束計算が無く,一瞬で計算が終わります.

ファーストリリース現在,解析の部分と翼型の性能を計算結果に反映させる機能をGUIと結びつけていません.テストが十分でないためです.今年の秋頃に時間があれば作り直します.

ライセンス

深く考えているわけではありませんが,MITライセンスに従います.
無償,無保証,利用/改造/再配布OK,著作権表示義務あり,二次利用においてソース公開義務なし,二次利用においてライセンス変更OK

リンク

最新版のソースはここに置いています.理論面ではここのRefarenceの論文集を参考になるかと思います.私の文章より紹介している論文を読むのが理解の近道です.

XROTOR周りの話は参考になると思います.

ソフトの立ち位置と利用場面をよく理解して,素敵に紹介してもらっています.

 

 

人力飛行機の主翼設計を銀本より良くするたった一つの方法

タイトルは流行りの煽り文句です.9割嘘です.自分で書いてイライラしますね.

下にも同じリンク貼ってるけど,今回作ったプログラム

プログラム:https://gist.github.com/ina111/5053876

解説:https://gist.github.com/ina111/5053903

鳥人間関係で面白いネタを教えてもらったので,議論するのもなんなのでサクッと作ってみました.

人力飛行機など(効率重視の飛行機ならなんでも)の主翼の設計をする時の話です.

まえがき

飛行機を低出力で飛ばすためには揚抗比というのが大事になります.揚力の大きさに対しての抗力を小さくしろってことです.人力飛行機では抗力の中でも誘導抗力というものが全体の1/3もあります.これは翼の上下面で圧力差が出来ることから翼端で渦発生し,その生成エネルギーで消費されるものです.

この誘導抗力を最小にする主翼の平面形というのは航空力学の教科書に載っています.それが楕円循環分布と呼ばれる.揚力の分布が楕円状になるものです.昔の航空機で主翼の平面形が楕円形になっているものがあったりします.循環っていうのは揚力や誘導抗力などを上手く数式で表せる便利なやつです.

主翼の設計方法

十分な揚力が得られる翼面積を保ちつつ,誘導抗力が小さくなるように楕円循環分布に従うように主翼の平面形を決めていきます.

教科書に書いてるこの方法が,イケテナイです.

楕円循環分布は揚力とスパン幅が一定の場合の誘導抗力が最小の循環分布です.つまり,空力面だけでの最適な形です.

空力だけではなく構造も含めて最適な主翼が設計したいなら曲げモーメントと誘導抗力を同時に制限して最適問題を解かないといけません.

そのことを書いた論文がR.T.JonesのNACA(NASAの前身)のテクニカルノート(TN-2249,"The spanwise disribution of lift for minimum induced drag of wings having a given lift and a given bending moment")です.これは平面翼について解析的に書いてあります.

これを非平面翼で数値計算で解いて日本語で書いてあるのが浅井先生のNAL(JAXAの前身)のテクニカルレポート(TR-797,"非平面翼の最適設計-揚力と翼根曲げモーメントを与えた時の最小誘導抵抗-")です.

プログラム

このTR-797をMatlab(Octave)で実装してみました.200行程度だったのでGithubのサービスの中のGistを使ってみました.詳しくは論文と下の解説を読んで下さい.論文を読んで下さい(大事なので2回)

プログラム:https://gist.github.com/ina111/5053876

解説:https://gist.github.com/ina111/5053903

プログラム中のbetaの値を0.9にしています.これは翼根での曲げモーメントを楕円循環分布での値から0.9倍にした制限をかけた時の誘導抗力が最小になる揚力の分布が以下になります.

翼根のあたりでより多くの揚力がが必要な分布になっています.

この条件(Gistに載せているデフォルトの条件)のときはbeta=0.9で飛行効率0.92となりました.だいたい1[N]ぐらいの違いでしょうか.この違いが構造重量で吸収できるようなら,楕円循環分布を捨てて,こちらの循環分布を用いるべきなことがわかります.

実際は構造を上手く攻めたり,できるかどうか,あと複数パラメータ振ってみての比較をするかどうかで,採用できるかどうか変わってくるかと思います.

感想

揚力線理論なプログラムは組んだこと合ったけど,渦格子法っぽいプログラムは初めて組んだので,これで人力飛行機なプログラムはかなり満足しました.やり残したことキチンと無くして社会人になりたいですね.