AirSimのMap"Blocks"をUE4で開く

# はじめに
Microsft製OSSのフライトシミュレータAirSim。Map込みのバイナリを使うことで手軽に利用できます。
MapをカスタマイズするにはVisual StudioとUnreal Engineでビルドして、Unreal EngineでMapを開いて編集する必要があります。
予め、提供されている`Blocks`というMapを使ってその手順をやってみました。

### 検証環境
|項目  |バージョン  |
|---|---|
|OS |Windows10  |
|Visual Studio|2019 |
|Unreal Engine|4.24.3 |


### 参考資料 

下記AirSimのWikiに掲載されている手順を自分用のメモとしてまとめたものです。

* https://microsoft.github.io/AirSim/build_windows/
* https://microsoft.github.io/AirSim/unreal_blocks/

# 実施手順
### 必要ソフトウェアのインストール
1. Unreal Engine インストール
    1. Epic Game Launcherをインストール・起動  
        https://www.unrealengine.com/ja/download
    1. メニューの`Unreal Engine` 選択 > `ライブラリ` タブ選択 > `Ver4.24.3` を指定してインストール  
        * 10GB Overなので環境によっては数時間かかる    
        * 何度かプロンプトが出るのでOKで進む
    1. Windows を再起動してEpic Game Launcherを起動 
    2. uprojectファイルの紐付けをするか聞かれるので`復旧`を押下
        * この手順を実施しないと、後述の`update_from_git.bat` の実行でエラーが発生する

1. Visual Studio 2019 インストール
    1. Community版を選択して、Visual Studio Installer をインストール・起動  
        https://visualstudio.microsoft.com/ja/downloads/
    1. `C++ によるデスクトップ開発` 、`Windows 10 SDK (10.0.18362.0)`  を選択してインストール開始  
        * 10GB Overなので環境によっては数時間かかる  
        * 何度かプロンプトが出るのでOKで進む

1. .NET Framework のインストール  
    https://dotnet.microsoft.com/download/dotnet-framework/net48  
    * `Developer Pack` を選択すること

### AirSimソースコードの取得とビルド

1. AirSim ソースコードをGitHubからClone  
 
    ```cmd
    $ git clone https://github.com/Microsoft/AirSim.git
    ```

1. `Developer Command Prompt for VS2019` を起動して下記コマンドを実行（20分くらいかかる）  
 
    ```cmd
    $ cd AirSim
    $ build.cmd
    ```    
    
1. Unreal環境 `Blocks` をセットアップするため下記コマンドを実行  

    ```cmd
    $ cd Unreal/Environment/Blocks
    $ update_from_git.bat
    ```
    -> `Blocks.sln` が生成される

### Blocks の起動

1. `Blocks.sln` をクリック 
    -> Visual Studio 2019 が起動する

1. VS2019メニューの `DebugGame Editor` `Win64` を選択して、`ローカルWindowsデバッガー` をクリック 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106662/ed66c27a-35b6-2fec-9cc0-9383c4d0d5ed.png)
    -> UE4 が起動して`Blocks`のMapが開く

1. UE4メニューの `プレイ` をクリック > `NO` をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106662/5657c8f8-5525-40a2-9c4a-9ad19958a60a.png)
    -> `Blocks`が開始して、ドローンを操縦可能な状態となる

# まとめ
これでUE4を使ったAirSimのMapのカスタマイズや外部シミュレータ（[ArduPilotのSITL](https://ardupilot.org/dev/docs/sitl-with-airsim.html)等）をAirSim内での使用する環境が整いました。
AirSim内のドローンは[Pythonスクリプトで操作](https://qiita.com/hfujikawa77/items/446caf5c24333b2ae148#python%E3%81%8B%E3%82%89%E6%93%8D%E4%BD%9C)することも可能です。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Visual Studio 2019とUE4でビルドしたAirSimドローン（UE4内で起動）をPythonで操作。<br>UE4でMAPをカスタマイズできるそうなんだけど使い方わからないw <a href="https://t.co/AxsAqbkFl2">pic.twitter.com/AxsAqbkFl2</a></p>&mdash; H.Fujikawa (@hfujikawa77) <a href="https://twitter.com/hfujikawa77/status/1265127223016583168?ref_src=twsrc%5Etfw">May 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<!---
# Trouble shooting
## 

```
Running C:/Program Files/Epic Games/UE_4.24/Engine/Binaries/DotNET/UnrealBuildTool.exe  -projectfiles -project="C:/dev/aiig/AirSim/Unreal/Environments/Blocks/Blocks.uproject" -game -rocket -progress -log="C:\dev\aiig\AirSim\Unreal\Environments\Blocks/Saved/Logs/UnrealVersionSelector-2020.05.25-17.04.26.log"
Discovering modules, targets and source code for project...
ERROR: Could not find NetFxSDK install dir; this will prevent SwarmInterface from installing.  Install a version of .NET Framework SDK at 4.6.0 or higher.
```
-> 関連フォーラム  
https://forums.unrealengine.com/development-discussion/blueprint-visual-scripting/1697074-can-t-package-my-project-netfxsdk 
--->