Python航空機開発ライブラリIAEAを作成し始めた。ー第1章ー

#航空機開発ライブラリIAEA
##はじめに
　初めまして新卒１年目エンジニアのmuratatatsuroです。これは、航空機を愛し、電動化に憧れ、自律・自動運転に取り憑かれ、pythonと最適化に漬けられた男による航空機開発ライブラリ(OSSにしたい)を構築するまでの1~2年間（おそらくそれくらいで出来るんじゃないかと思ってる）に渡る奮闘記の序章である。Learn or Die!!

##作ろうと思った経緯
　大学院時代に電動化航空機と呼ばれる電気で駆動する航空機の概念設計と最適化について研究を行なっていた。しかし、大学院時代までは、統合設計とは名ばかりのエンジン最適化のみを行なっていたため、航空機も含めた最適化と設計ツールを作成し、他の人にも新時代を担う航空機に簡単に触れる環境を構築し、興味を持ってもらいたかった。これに加えて、自律走行や自動運転に興味があり、実際に設計した航空機（特にスモールスケールのもの）に対してシミュレーションレベルでの最適路探索を体験し、設計から運用シミュレーションまでの一気通貫の概念設計環境があったら面白いんではないかと考えた。

##ライブラリの概要
　**IAEA**(Integrate Analytical Environment for Aircraft)は航空機とエンジンを統合的に概念設計できるPythonのライブラリである（まだ完成していないがそうなのである）。また、航空機とエンジン統合設計にとどまらず、進化計算系を含めた最適化フレームワークと最適化計算検証フレームワーク、これに加えて、SLAMや深層強化学習を組み合わせた自律走行支援を含めた２Dのフライトシミュレータを搭載している優れもの（？）になる。

　作成したライブラリは以下のGithubに公開している（正確には公開していく）。これが１年できっと素晴らしいものになる。
  --すいませんrepositoryへのパスが間違っていたので訂正しました。（2020 5/16)
　[IAEA Github repository](https://github.com/muratataturo/IAEA)
  必要なライブラリはnumpyとmatplotlib,pandasの機械学習３種の神器のみである（のはず）。
　この航空機ライブラリを使えば、こんな航空機も作ってさらに性能とコンセプト図、経済性までも評価することが出来ちゃう！！

**Normal** 

![A320](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Jetstar_Airbus_A320_in_flight_%28cropped_3x2%29.jpg/600px-Jetstar_Airbus_A320_in_flight_%28cropped_3x2%29.jpg)

**Blended Wing Body** 

![BWB](https://www.nasa.gov/centers/langley/images/content/70059main_2003-81-01.jpg)

**Air Taxi(Drone)**


![AT](https://techcrunchjp.files.wordpress.com/2020/01/joby-aircraft-web.jpg?w=641&zoom=2)

**Hyper Sonic**


![Hyper Sonic](http://www.aero.jaxa.jp/research/frontier/sst/images/next_generation01.jpg)

##航空機とエンジン形態##
　本ライブラリで扱う航空機とエンジンについて説明する。航空機エンジンに妙に詳しいのは、大学院時代の研究室がジェットエンジン系であったからだ。

- 航空機
    - 通常型(Normal)
        - 狭胴機
        - セスナ機
    - [翼胴一体型航空機(BWB)](https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AC%E3%83%B3%E3%83%87%E3%83%83%E3%83%89%E3%82%A6%E3%82%A3%E3%83%B3%E3%82%B0%E3%83%9C%E3%83%87%E3%82%A3)
    - [超音速旅客機(Hyper Sonic)](https://ja.wikipedia.org/wiki/%E8%B6%85%E9%9F%B3%E9%80%9F%E8%BC%B8%E9%80%81%E6%A9%9F)
    - ドローン(UAV)・空飛ぶ車(Air Taxi)
    - プロペラ機
- エンジン
    - [ターボジェットエンジン](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%BC%E3%83%9C%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)
    - [ターボファンエンジン](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%BC%E3%83%9C%E3%83%95%E3%82%A1%E3%83%B3%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)
    - [ターボプロップエンジン](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%BC%E3%83%9C%E3%83%97%E3%83%AD%E3%83%83%E3%83%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)
    - [ギアードターボファンエンジン](https://ja.wikipedia.org/wiki/%E3%82%AE%E3%83%A4%E3%83%BC%E3%83%89%E3%82%BF%E3%83%BC%E3%83%9C%E3%83%95%E3%82%A1%E3%83%B3%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3)
    - 電動ファン
    - ターボエレクトリックエンジン(TeDP)
    - パーシャルエレクトリックエンジン
    - オールエレクトリック
      - [水素燃料](https://www.nasa.gov/aero/nasa-aeronautics-selects-three-university-teams-for-research-help/)
      - ソーラーバッテリー
    - パーシャルハイブリットエンジン
    - ハイブリッドエンジン
    - パラレルハイブリットエンジン

　今回のライブラリでは、従来型の航空機のみならず、**空飛ぶ車**や**翼胴一体型航空機**、**超音速機**に渡る幅広い種類と、エンジンに関してもターボエンジンだけでなく、**バッテリー**等を搭載したり、**水素燃料**や**ソーラーバッテリー**を用いたものまで概念設計レベルで性能計算が出来るような仕様になる。（ここの部分に関しては、研究の際にほぼ実装してある。）それぞれの詳細については、実装した時に説明する感じでいきたい。
    
##モジュール概要
　モジュールは大きく分けて7つある。仕様については、[specification.py](https://github.com/muratataturo/IAEA/blob/master/specification.py)に詳しく載せてあるので読んでみてほしい。

1. 航空機性能計算
   - 空力性能（揚抗比）
   - 重量
   - 形状
2. エンジン性能計算
   - 燃費・推力
   - 重量
   - 形状
3. 最適化（進化計算）
   - 進化計算（多目的最適化）
     - NSGA2(Non-dominated Sort Genetic Algorithm 2)
     - PSO(Partial Swarm Optimization)
     - CMAES(Covariance Matrix Adaptive Evolution Strategy)
4. 機械学習支援（ニューラルネットワーク）
5. 最適化結果解析
   - 進化計算個体群の可視化
   - コスト計算（経済性）
   - 最適化結果ヒートマップ
   - 航空機・エンジン可視化
   - 自己組織化マップ(Self Organized Map)
6. フライトシミュレーション環境（今のところは２Dを考えてるが、技術力があれば３Dにする）
7. 自動運転支援（SLAMと深層強化学習）
   - SLAM(Simultaneous Localization and Mapping)
   - DeepRL(Deep Reinforcement Learning)

　理論的には怪しいが、一応騒音も研究テーマとして近しいので、**騒音**（環境適合性）の分野も最適化結果解析に入れたい。（願望）また、航空機データベース作成の際に、パラメータを入力しなければいけないが、**Mask-RCNN**を用いた画像セグメンテーションから値を抽出して自動化したいが、GPUがないので出来ない（泣）

## 実装の流れ
　結構小分けにして数式とか理論を含めて実装フローを見せていきたいと考えている。今の所考えているのは、

1. 航空機とエンジンってなんだ？
2. 航空機・エンジン統合設計における設計変数と目的関数って？
3. 航空機を実際に描画してみよう！
4. エンジンを実際に描画してみよう！
5. 目的関数を求めるまでの流れを可視化してみよう！
5. エンジンの性能計算（サイクル解析）
6. エンジンの重量モデルって？
7. 航空機の空力性能はどう求めるの？
8. 航空機の重量モデルって？
9. 航空機計算とエンジン計算を統合してみよう！
10. 進化計算と多目的最適化
11. 統合環境を多目的最適化してみよう！
12. 最適化の結果を可視化してみよう！
13. 航空機の経済性って？
14. 統合環境の簡略化と高速化（ニューラルネットワーク）
15. ２Dの障害物環境を作成してみよう！
16. SLAMってなんだ？
17. 深層強化学習Tutorial
18. SLAMで自律走行
19. 深層強化学習で最適経路探索

　てな感じで！１ヶ月に２投稿するレベルで開発しないと終わらない、、、長いですけどもし興味あったら読んでください〜〜

##評価方法
　せっかく開発したけど大きく外れてたら意味ないよね？って声が聞こえてきそうですね。実際の航空機とエンジンの組み合わせ（現代においては狭胴機とターボファンエンジンの組み合わせが一般的）に対して性能計算と最適化を行い、公開されているデータと実際の最適化結果を比較してみたいと思う。外れすぎてたらモデルをチューニングしていきます！

##開発経過

　基本的な仕様が完成しているのは、航空機とエンジンの性能計算モジュール、最適化手法モジュール、最適化結果可視化モジュール（航空機、エンジン可視化以外）、機械学習支援モジュールかなと言う感じ。ここら辺も綺麗に書き直していきます。

　現在は、航空機の描画クラスを作成中である。一例を示していく。

  **Drone 1**
  ![drone_center_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637683/18394104-cf64-148e-458d-084d1e6e7578.png)

  **Drone2**
  ![drone_edge_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637683/5c073298-9815-6134-1844-0c92b08585d0.png)

  **Normal**
  ![normal_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637683/a6d50728-4932-bf35-2417-c9d3dff9a97d.png)

  **BWB**
  ![BlendedWingBody.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637683/93374a14-7fb8-00ad-6d31-1668ad5009b7.png)!

  **Hydrogen・Hyper sonic**
![hydrogen_side_fuselage_another.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637683/4b0a910b-4a9e-13f2-e4b7-2c3cea980dda.png)


  丸いのがエンジンで、翼とか胴体の形もまあまあ再現できつつある感じ。ここからさらにグレードアップさせていきます。詳しくは、航空機描画の章で説明~~。

##最後に
　皆さんも良かったら一緒にプログラムを作成してみてください。このライブラリ実装では、基本的には、微分、積分等の高度な数学などはあまり用いないで進んでいきたいと思います。また、性能計算の部分がボトルネックになる（特にエンジン性能計算や航空機形状を推定する部分）ので、その部分については、最適化モジュール実装後に[Cython](https://cython.readthedocs.io/en/latest/)やC++によって実装し直す可能性があります。一緒にPythonを学ぶ方は、準備関係は以下の通りです。

- [Python3のインストールの記事(Mac OS)](https://qiita.com/7110/items/1aa5968022373e99ae28),[Python3のインストールの記事(Windows10)](https://www.python.jp/install/windows/install_py3.html)
- [numpy](https://qiita.com/tseno/items/3b7ef7e36eab64d42753), [matplotlib](https://qiita.com/nkay/items/d1eb91e33b9d6469ef51)のインストール
- [PyCharm](https://www.jetbrains.com/ja-jp/pycharm/), [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/), [Anaconda](https://www.anaconda.com/)のインストール
- [Jupyter notebook](https://qiita.com/KI1208/items/a7765e6fdc95c3e03609)









##参考文献
[Wikipedia エアバスA320](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%A2%E3%83%90%E3%82%B9A320)
[NASA Langley Research Center Homepage](https://www.nasa.gov/centers/langley/news/factsheets/FS-2003-11-81-LaRC.html)
[空飛ぶタクシー事業目指すJoby Aviationはトヨタ主導で650億円を調達](https://jp.techcrunch.com/2020/01/16/2020-01-15-joby-aviation-raises-590-million-led-by-toyota-to-launch-an-electric-air-taxi-service/)
[JAXA 航空宇宙技術部門](http://www.aero.jaxa.jp/research/frontier/sst/concept.html)