AirSimをUbuntuで使う

Microsoftが公開しているAirSimをUbuntuで使おうと思ったときに、公式の手順通りではうまくいかなったため、自分が行った方法を書く。

# 環境
| OS |UnrealEngine|
|:-:|:-:|
| Ubuntu 20.04 |UnrealEngine4.27.2|

# 事前準備
AirSimを動かすためにはまずUnrealEngine(ver.4.27)とVisual Studio Codeをインストールする必要がある。
UnrealEngineのインストール方法は別でQiitaの記事を書いているので、そっちを読んでほしい。
UnrealEngine
[UnrealEngineをUbuntuで使う](https://qiita.com/nokopi/items/72955b002787c0471647)

Visual Studio Codeは記事を書いている人が多いのでその記事or公式サイトを見てほしい。参考に貼っとく。
Visual Studio Code
[Visual Studio Code on Linux](https://code.visualstudio.com/docs/setup/linux)
[UbuntuにVSCodeをインストールする3つの方法](https://qiita.com/yoshiyasu1111/items/e21a77ed68b52cb5f7c8)

[AirSim APIsのインストール](#airsim-apisのインストール)をしようと思っている人はAnacondaのインストールも必要。

# AirSimのダウンロードとビルド
準備ができたらAirSimを[AirSimのGithub](https://github.com/Microsoft/AirSim)からダウンロードする。以下コマンドを実行する。
```
$git clone https://github.com/Microsoft/AirSim.git
```
ダウンロードできたら以下のコマンドを実行する。
```
$cd AirSim/
$./setup.sh
$./build.sh
```
`./setup.sh`を実行して
```
************************************
AirSim setup completed successfully!
************************************
```
`./build.sh`を実行して
```
==================================================================
 AirSim plugin is built! Here's how to build Unreal project.
==================================================================
All environments under Unreal/Environments have been updated.

 

For further info see:
https://github.com/Microsoft/AirSim/blob/master/docs/build_linux.md
==================================================================
```
と出たら完了。

# サンプルプロジェクトの実行
AirSimにはBlocksという名前のサンプルプロジェクトが入っているが、これの実行が一番苦労した。
プロジェクトは`AirSim/Unreal/Environments/Blocks`に入っており、Blocksの中は以下の画像のようになっている。
![afterBuildsh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/94a3345a-2896-1266-e15c-e2d5b1d652b9.png)
ここに入っている`Blocks.uproject`がUnrealEngineのプロジェクト。
これを実行するためにUnrealEngineを起動する。
1. 「さらに表示」を選択。
![UE7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/6f2b178e-ab90-955e-b67c-fe7b965aa78a.png)
2. 「ブラウズ...」を選択。
![UE8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/773ebf02-711a-6866-8311-b50e7e20e6ce.png)
3. `Blocks.uproject`を選択して開く。
![UE3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/546ceb08-91f2-6125-e943-339232d136f5.png)
4. 「より多くのオプション」を選択。
![UE4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/a8602ab7-16cb-c0a7-602d-6879167e27a4.png)
5. 「同じ場所で変換」を選択。(英語だとConvert-In-Place)
![UE5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/f5dcb4d1-6139-be04-5045-664acd6b5956.png)

すると、プロジェクトの変換が始まる。公式はこれでできると言ってるができない。
下の画像のようなダイアログが出てくるが、要はコンパイル失敗してプロジェクト変換できなかったということ。![UE6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/355f382b-b7d9-ec8f-36fb-0c0acfc7eba3.png)
変換に失敗するとディレクトリの中は以下の写真のようになる。
![beforedebug.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/9015a09d-41c0-5451-27fb-957b1a49fa6f.png)
ここで修正するためにVisual Studio Codeが必要になる。
ディレクトリの中にある`Blocks.code-workspace`を開くと、Visual Studio Codeが起動する。
起動したら、「Run and debug」を選択(写真の赤矢印)。
![debug1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/e20e8ff1-a9a4-8f5f-5e41-425d23e13077.png)
一覧から`BlocksEditor(Development)(Blocks)`を選択して実行(写真の黄矢印)。
![debug2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/3acbdea4-3fd3-70c2-a00b-a351296993a5.png)
すると、UnrealEngineが起動しプロジェクトが実行できる。
![blocks.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/874e4675-7edd-b314-d256-99bfbc5fd3d3.png)
この作業を行えば次からは下の画像のように最近のプロジェクトから実行できる。
![UE1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/753c7107-ead6-d23d-c3d0-f76616b3a5fc.png)

# AirSim APIsのインストール
APIのインストールは公式からAnaconda環境でやることが推奨されているので、Anacondaで環境を作ってから行う。
PythonのバージョンはPython3.5以上となっているが、一部のコードはPython2.7でも動くらしい。
まずはAnacondaで環境を作る。
```
$conda create -n airsim python
$conda activate airsim
```
作成した環境に切り替えたら、公式のとおりにコマンドを打つとエラーが出るので(主にairsimのインストールで)、以下を先に実行する。
```
$pip install numpy
$pip install backports.ssl_match_hostname
```
次に以下を実行。
```
$pip install msgpack-rpc-python
$pip install airsim
```
これでエラーなくインストールすることができるはず。


# 参考
[Build AirSim on Linux](https://microsoft.github.io/AirSim/build_linux/)
[コンパイルエラーでUE4プロジェクトが開けない場合の対処法](https://qiita.com/chano2/items/517157c412ce5b03e905#2-%E7%94%9F%E6%88%90%E3%81%97%E3%81%9F%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92visual-studio%E3%81%A7%E9%96%8B%E3%81%84%E3%81%A6%E7%B7%A8%E9%9B%86%E3%81%99%E3%82%8B)
[AirSim APIs](https://microsoft.github.io/AirSim/apis/)
[]()