Tello-Pythonのサンプル「Tello_Video」を動かす


#はじめに
このページは，

[公式SDK「Tello-Python」を試そう](https://qiita.com/hsgucci/items/3327cc29ddf10a321f3c)

の１ページです．
全体を見たい場合は上記ページへお戻りください．

#概要

DJI公式のTello用Pythonサンプルプログラム「Tello-Python」のうち，

　[Tello_Video](https://github.com/dji-sdk/Tello-Python/tree/master/Tello_Video)

を試す方法を記述します．

#前提条件

ホームフォルダにTello-Pythonがインストールされているという前提で話を進めます．

Linuxマシンであれば　`/home/(ユーザー名)/`　に，`Tello-Python`というフォルダがあることになります．

詳しくは　[Tello-Pythonのダウンロード](https://qiita.com/hsgucci/items/3327cc29ddf10a321f3c#tello-python%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)　を御覧ください．

#ディレクトリの移動
まずはコンソール(端末)を開き，以下のコマンドを打って，フォルダを移動します．

```bash:cd(change_directory)
$ cd Tello-Python
```
lsコマンドでフォルダの中にあるファイルを見てみると,

```bash:Linux：lsの結果
$ ls
LICENSE.md               Tello_Video
README.md                Tello_Video_With_Pose_Recognition
Single_Tello_Test        doc
TelloPython_FAQ(CH).txt  tello_state.py
TelloPython_FAQ.txt      tello_video_dll(ForWin64).zip
```

**Tello_Video**　というディレクトリがあることがわかります．
更にディレクトリ移動しましょう.


```bash:Tello_Videoへ移動
$ cd Tello_Video
```
lsコマンドでTello_Videoの中を見てみると，

```bash:Tello_Videoの中身
$ ls
LICENSE.md  README.md  h264decoder  img  install  main.py  tello.py  tello_control_ui.py
```
**<font color="blue">main.py</font>**　というファイルがあることがわかります．
その他に**tello.py**と**tello_control_ui.py**というファイルもありますが，これらは**main.py**が呼び出すファイルなので，ユーザーが実行する必要はありません．

また，**<font color="red">install</font>**と**<font color="red">h264decoder</font>**というディレクトリもあることも明記しておきます．
これらのディレクトリが，Telloのカメラ映像のストリーミングに関係しています．

全体の構成は下図の様になっています．
![tello_video_system.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/3ed5da46-d735-168c-257f-14d51c943293.png)

システム構成のうち，`tello.py`にある`Telloクラス`が最も重要だと思います．
このTelloクラスを転用することで，Telloの映像を取ったり，コマンドを送信したりといった様々な発展が可能になります．

Tello-Pythonをダウンロードしただけでは，<font color="LightSeaGreen">**libh264decoder.so**</font>はありません．
この後の環境構築で，ビルドして作ります．


#Tello_Videoのための環境構築

ページが長くなったので，別ページに分離しました．

- [Ubuntuで「Tello_Video」の環境構築](https://qiita.com/hsgucci/items/ea227c18eee8494d3010)
- [Raspbianで「Tello_Video」の環境構築](https://qiita.com/hsgucci/items/ee6c88c5b3f0be78bd0b)
- [Windowsで「Tello_Video」の環境構築](https://qiita.com/hsgucci/items/fb1425f69626e6aff7ee)
- [Mac OSXで「Tello_Video」の環境構築](https://qiita.com/hsgucci/items/4ace25b4777a49e52555)


#main.pyの実行

それでは，Telloの電源を入れて，WiFi接続を確認したら，
main.pyを実行してみましょう．

```bash:Tello_Videoの実行
$ python main.py
```

#実行結果

Telloとうまく接続できていれば，下の写真のような画面が表示されます．
![tello_video_default.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/fd8472b8-85d9-f299-0a5a-91c37c40e7cb.png)

「TELLO Controller」というタイトルの新しいウィンドウが作成され，そこにTelloのビデオ映像が表示されます．映像の下にはボタンが３つ並んでいます．
コマンドを打ち込んだ端末画面は，h.264ビデオのデコードに関するメッセージと，送信したSDKコマンドが表示されます．

実際にウィンドウを表示させてみると分かりますが，TelloはHD画質なので720pの映像が表示されます．
ちょっとウィンドウが大きすぎる，という感想を持ちました．
TELLO Controllerウィンドウのサイズを変更しても，サイズに合わせて映像もストレッチして表示されるのではなく，右側の映像が欠けるだけです（笑

映像サイズの調整などの改造は，別途記事を執筆しようと思います．

##GUIの操作方法
TELLO Controllerのウィンドウには，
![open_command_panel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/b344bd2b-d13f-cfb7-dd62-b5ceb2efe4be.png)

- Open Command Panel
- Pause
- Snapshot

の３つのボタンがあります．
それぞれの役割を解説します．

###Open Command Panel

Open Command Panelボタンは，クリックするとCommand Panelという新しいウィンドウが開きます．
<font color="red">**※Raspberry Piでは，このボタンを押さないと受信映像が表示されないことがあります．**</font>

![command_panel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256470/35166070-ff4a-f4ac-1aa9-4a8f58858fa9.png)

このウィンドウをアクティブにした状態で，

- キーボードの'w','s','a','d'および矢印キーで，前後左右上下移動や旋回ができます．
- Flip,Takeoff,Landボタンで宙返り，離着陸ができます．
- スライダーを動かすと移動と旋回の移動量を変えることができます．デフォルトは20cmと30度．

要はこのウィンドウを使うと，簡易的に`takeoff`とか`left 20`とかのコマンドを送信できるので，<font color="blue">**スマートフォンのTelloアプリの様に遠隔操縦することができる**</font>，ということです．

###Pause

Pauseボタンは，クリックするとTelloの映像をポーズして，望みの画像を表示し続けるボタンです．
再度クリックすればリアルタイムの映像に戻ります．

ポイントとしては，
「映像受信のUDPサーバを止めてパケットの受信を中止する」とか
「H.264のデコードを中止してCPU負荷を下げる」とか
**などの工夫はまったくされていません**（爆

停止時の画像でウィンドウを再描画し続けていますし，裏でTelloからの映像受信とデコードは続いているので，負荷軽減にはまったく寄与しません．．．

###Snapshot

Snapshotボタンは，クリックした時のビデオ画像を`(年月日_時分秒).jpg`という名前で`img`ディレクトリの中に保存します．

#おわりに

今回は「Tello_Video」の環境構築，使用法を解説しました．

Tello_Videoは，以降様々な画像処理プログラムを作る上で重要なサンプルなので，プログラム解説は別途 記事を執筆する予定です．