DJI Mobile SDKのサンプルコードでSimulatorを動かしてみる

## やりたいこと
ドローンを利用して自動操縦（Autopilot）のロジックを組みたいですが、自宅でドローンを飛ばしたら家が「破壊」されてしまうので、Simulatorを使いたいなと思いました。
色々と調べた結果、DJI Assistant 2というアプリがあるので、それを使って開発PCでデバッグしながら動きを見られるといいです。

それでは、早速作業に入りましょー！

## 必要なもの
- DJI Phantom 4
- リモートコントローラー(以下、RC)
- USBケーブル数本
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/977cfd2c-43e6-29fc-d79a-1333bbe7cdca.png)


## バージョン
- 開発PC
    - Android Studio Hedgedog
    - Android SDK API Level 31
    - Gradle 7.5
    - Gradle JDK Correcto-11
- Simulator用PC
    - DJI Assistant 2 for Phantom
- Bridge App用携帯
    - DJI Bridge App

## システム構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/a42e3b37-520a-6aef-f298-920786cbdf9c.png)


## 手順

### １．（開発PC）DJI Mobile SDK V4をクローン
https://github.com/dji-sdk/Mobile-SDK-Android/tree/master

### ２．（開発PC）DJI DeveloperでAPIキーを発行
- [DJI Developer](https://developer.dji.com/user/apps/#all)でログイン
- 「CREATE APP」でアプリケーションを登録する
※Package Nameはサンプルコード内のパッケージ名（各パッケージが存在するパス：Sample Code/app/src/main/java）。その他の項目は適当に記載
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/19bfd93e-8e98-b6d1-c580-d68d5b9329f1.png)


### ３．（開発PC）サンプリコード内にAPIキーを入力
AndroidManifest.xml（パス：Sample Code/app/src/main/main)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/5cdf41ab-da77-df42-fd78-9b01d63c9d62.png)

### ４．（開発PC）Sample Codeフォルダーを開いてビルドする
- gradle-wrapper.properties(パス：Sample Code/gradle/wrapper)で一度「Sync」OR「build」
※まず最初からSyncするといいと思うが、大抵の場合ビルドエラーが起こる。こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/263dadb6-cc70-d82b-6109-df1b90657c21.png)
- 「Change Gradle version in Gradle wrapper to 7.5....」を押すと、自動的にgradle-wrapper.propertiesの中身を書き換えてくれて、ビルドする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/d0263290-a75c-b21e-064e-1ee3c5eafb3e.png)

### ５．（開発PC）エミュレータを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/82377107-b577-d412-d017-bf4df17f09f8.png)
- 起動後に「Register App」を押すと、DJI SDK利用が可能になる

### ６．（BridgeApp用携帯）携帯にBridgeAppをインストール
- iOSはApp Storeからダウンロードする
- Andriodは[dji-sdk/Android-Bridge-App](https://github.com/dji-sdk/Android-Bridge-App/releases/tag/4.14-trial1)からapk経由でインストール

### ７．（BridgeApp用携帯）Bridge AppでRCに接続
- 携帯は開発者モードをONにし、USB DebuggingをONにする
- RCの電源をON、Phantom 4の電源をONにする
- Bridge Appを立ち上げて、USBでRCに繋ぐ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/efb430a4-3e4f-4893-e893-ecb8bcb70bcb.png)
- 画面のIPアドレスをメモる(こちらの端末では192.168.1.35)

### ８．（開発PC）IPアドレスをエミュレータ画面に入力
- 「WSBridge IP」欄にIPアドレスを入力
(開発PC画面)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/443ec0a4-28d3-6164-f8c0-550f6890944e.png)
(BridgeApp用携帯画面)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/fa72a460-51d0-afa5-682c-735a3e9cde64.png)

### ９．（Simulator用PC）DJI Assistant 2でPhantom 4に接続
- DJI Assistant 2 for Phantomを立ち上げて、USBでPhantom 4に繋ぐ
- このアプリを使うには、以下の制限と設定が必要（めんどい、、、
※新し目のMACで使えない
※USBドライブにアクセス制限あるPCはそれを解除する必要
- 検知できると、こんな画面が出てくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/15f89b7b-59a0-6d9b-fc29-e6f3c9cd343a.png)
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/a581233b-7b98-ff4c-69b2-bf6036eb6698.png)
- 「Simulator」＞「Start Simulating」を押すと、Simulatorが立ち上がる
※ファイアウォールを無効化にする必要！そうしないとRCからの信号が到達できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747743/f135eb7a-d3d8-09c9-f6bf-41664afa5b59.png)

### １０．🍷🍷🍷操作できました🍷🍷🍷

## 結論
ドローン本体がないとなにもできないです（泣）
ドローンにUSBで繋ぐところはなぜファイアウォールを無効化する必要があるのか今後調査課題とします。