DJI TelloでOMPLを用いた自律飛行ドローンのナビゲーション - 6.4. AirSimのシミュレーターを動かす

DJI Tello等ドローンの自律飛行を実現するには、3D環境でナビゲーション経路を計画としてOMPL（Open Motion Planning Library）を試してみます。

# 目次
1. [OMPLのインストール](https://qiita.com/k-koh/items/4f7e441d1225e6580f82)
2. [OMPLの基礎](https://qiita.com/k-koh/items/9933cd29599c859cac45)
3. [OMPL.appの入門](https://qiita.com/k-koh/items/fe1f05313045ed729c8b)
4. [OMPLの使用](https://qiita.com/k-koh/items/3a8b372537aa29e17863)
5. DJI Telloの使用
    1. [DJI Telloのフロントカメラのcamera_calibration](https://qiita.com/k-koh/items/094631646931ea5bc2bb)
    2. [Visual SLAM ORB_SLAM2 用のカメラキャリブレーションYamlファイルの作成](https://qiita.com/k-koh/items/b524fc175198e701bdff)
    3. [DJI Telloのカメラ でVisual-SLAMのORB-SLAM2 を動かしてみた](https://qiita.com/k-koh/items/98b5f079f784b22dcd01)
6. navigationスタックの使い方
    1. [Turtlebot3 NavigationをGazebo Simulationで動かしてみた](https://qiita.com/k-koh/items/1a4fbc175ca37be6206b)
    2. [Turtlebot3 Navigationでmap_fileの代わりにSLAMを使用](https://qiita.com/k-koh/items/1ec9097e4afedd0b43ca)
    3. [ARdroneのシミュレーターをGazeboで動かす](https://qiita.com/k-koh/items/feccbaee7c11c43c3ab4)
    4. [AirSimのシミュレーターを動かす](https://qiita.com/k-koh/items/52122fb5e96336ac8d33)　← いまココ
    5. [octomapのインストール](https://qiita.com/k-koh/items/c9a3a87e043934456842)
    6. [単眼カメラでORB_SLAM2から3D point clouodの生成](https://qiita.com/k-koh/items/1e069c9dda43b85e2fa0)
    7. [point_cloud2から3D octomapの生成](https://qiita.com/k-koh/items/01e34f353487eb8a6e26)
7. OMPLで3D 経路計画
    1. [状態空間環境のセットアップ](https://qiita.com/k-koh/items/e19ac08bb0a16975081e)

## 動作環境
- Ubuntu 18.04
- ROS Melodic
- Tello EDU

# AirSimのシミュレーターを動かす

## Epic Gamesに登録

UnrealEngineのソースコードにアクセスするためには、UEに会員登録し、自分のgithubのアカウント情報を登録する必要があります。

[registered with Epic Games](https://docs.unrealengine.com/latest/INT/Platforms/Linux/BeginnerLinuxDeveloper/SettingUpAnUnrealWorkflow/1/index.html)

UEの[接続済みアカウントのページ](https://www.unrealengine.com/dashboard/connected)に下記のフォームがあるので、そこにgithubのidを入力することでgithubアカウントとの紐付けができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/9200d7ff-f6d3-05f0-a7a7-5cce6643fa31.png)


## UnrealEngineのインストール

```console
git clone -b 4.18 https://github.com/EpicGames/UnrealEngine.git
cd UnrealEngine
./Setup.sh
./GenerateProjectFiles.sh
make
```

「./GenerateProjectFiles.sh」で下記のようなエラーが出る場合clangバージョンを切り替えして再度実行

```console
ERROR: This version of the Unreal Engine can only be compiled with clang 5.0, 4.0, 3.9, 3.8, 3.7, 3.6 and 3.5. clang 6.0.0 may not build it - please use a different version.
```
```console
sudo apt-get install clang-5.0
sudo apt-get install libclang-5.0-dev
sudo rm -r /usr/bin/clang /usr/bin/clang++
sudo ln -s /usr/bin/clang-5.0 /usr/bin/clang
sudo ln -s /usr/bin/clang++-5.0 /usr/bin/clang++
```

## AirSimのインストール
```console
git clone https://github.com/Microsoft/AirSim.git
cd AirSim
./setup.sh
./build.sh
```

## AirSimのBlocks 環境を起動

- Unreal Editor の起動

```console
$ UnrealEngine/Engine/Binaries/Linux/UE4Editor
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/c35807ac-2c4b-958c-31a9-ba627ea7977c.png)

- Blocks 環境の読込

Projects タブで "Browse" ボタンをクリックして、 AirSim/Unreal/Environments/Blocks/Blocks.uproject ファイルを読み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/d456afc0-2e51-8138-c7c1-d4fa4733364f.png)

※読み込み時にバージョンが違う旨のダイアログが表示された場合は、左下の "More Options" → "Convert in-place" を選択してコンバージョン処理を実行してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/369a304e-9503-89a1-7714-5343da09c1c0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/66ac4946-bc66-fd8f-05b1-ae353f5b1c59.png)

コンバートが無事完了すると、 Unreal Editor が起動して Blocks サンプルが利用可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/39bc5f67-87b8-87ad-a3d1-a975ac7c0481.png)


## AirSimのNeighborhood（狭い範囲の郊外） 環境を起動

- [Releases->Linux->Assets](https://github.com/Microsoft/AirSim/releases)　から Neighborhood.zip の環境をダウンロード
- Neighborhood.zip を解凍
- AirSimNH.sh を実行

```console
$ cd Neighborhood
$ ./AirSimNH.sh
```

- quadrotor(Drone) を使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/e2160ef3-129e-cb1b-b171-0b6a4c324ee4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386259/242af012-162a-7bdd-a407-ac2da83984af.png)

- system requirements

GPUの付いていないPCでは動作が遅い。
system requirements（GPU with minimum of 4GB RAM）


## Python APIを使ってドローンを飛ばす

- msgpack をインストール

```console
pip install msgpack-rpc-python
pip install airsim
```

- takeoff 実行

```console
cd AirSim/PythonClient/multirotor
python takeoff.py
```

Prev: 6.3. [ARdroneのシミュレーターをGazeboで動かす](https://qiita.com/k-koh/items/feccbaee7c11c43c3ab4)
Next: 6.5. [octomapのインストール](https://qiita.com/k-koh/items/c9a3a87e043934456842)