Telloプログラミング初めてみました

# はじめに
こんにちは。最近私は、ドローンでAR表示やリモコン操作など
いろいろ試したくてTelloプログラミングをしてみました。
ドローンを操作するプログラミングは、正直シンプルかつ初心者でもやりやすいです。
さっそく、環境構築から行い

# 環境構築
１．まず、以下のライブラリをコマンドプロンプトでインストールします。
```
pip install djitellopy
pip install tkinter
```

２．ドローンに左の充電器を入れます。
![IMG_6002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226429/23bb2456-70d2-a656-31ce-87aefef92aa6.jpeg)

３．小さい電源ボタンを押して起動します。
![IMG_6007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226429/33656ec3-1e1f-8b79-cfad-e7ea753dc709.jpeg)

４．黄色く点滅している時にWi-Fiをつなげます。Wi-Fiは充電の入り口にあります。
今回は「TELLO=FD60FE」をつなげます。
![IMG_6009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226429/59f54007-1474-129f-ed00-ed163333f6e9.jpeg)

これでドローン操作の準備完了です！

# 離陸と着陸
まず、離陸着陸するプログラムを書いてみました。
```Python
import time
import cv2
from djitellopy import Tello

tello = Tello('192.168.10.1', 8889)
tello.connect()

#離陸する
tello.takeoff()

time.sleep(1)
tello.land()
```

これはとてもシンプルです。

# 迂回するプログラム
次、正方形に迂回するプログラムを書いてみました。
```Python
import time
import cv2
from djitellopy import Tello

tello = Tello('192.168.10.1', 8889)
tello.connect()

tello.takeoff()

time.sleep(3)
#50cm上昇する
tello.move_up(50)

time.sleep(3)
#正方形に迂回する
for i in range(4):
    #50cm前進する
    tello.move_forward(50)
    time.sleep(1)
    #反時計回りに90度回転する
    tello.rotate_counter_clockwise(90)
    time.sleep(1)


tello.move_down(50)

time.sleep(1)
tello.land()
```

迂回する時は、回転と前進が必要になってきます。
特に人とドローンがぶつかると危ないので、上昇してドローン自動操縦しました。

# リモコン作成第１弾
最後に、Telloのアプリを模倣して未完成ですが、リモコンを作ってみました。

今回は移動と離着陸のみです。

<img src ="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226429/5d7892d5-916a-0c31-c275-829e81ecb50b.png" width='70%>

```Python
# tkinterライブラリの読み込み
import tkinter
import time
import cv2
from djitellopy import Tello

# ウィンドウの作成と、Tkinterオブジェクトの取得
window = tkinter.Tk()

# ウィンドウのサイズと位置を設定
window.geometry("500x400+300+200")
tello = Tello('192.168.10.1', 8889)

#Telloを接続
def connect():
    tello.connect()

#Telloを離陸
def takeoff_land():
    tello.takeoff()

#Telloを着陸
def land_tello():
    tello.land()

#前進
def forward():
    tello.move_forward(20)

#後退
def back():
    tello.move_back(20)

#左に移動
def left():
    tello.move_left(20)

#右に移動
def right():
    tello.move_right(20)

#上昇
def up():
    tello.move_up(20)

#下降
def down():
    tello.move_down(20)

# ボタンを作成
button_tello = tkinter.Button(window, text="Telloをつなげる", font=("MSゴシック", "10", "bold"), command =  connect)
button_takeoff = tkinter.Button(window, text="離陸", font=("MSゴシック", "10", "bold"), command = takeoff_land)
button_land = tkinter.Button(window, text="着陸", font=("MSゴシック", "10", "bold"), command = land_tello)

button_forward = tkinter.Button(window, text="↑", font=("MSゴシック", "15", "bold"), command =  forward)
button_back = tkinter.Button(window, text="↓", font=("MSゴシック", "15", "bold"), command =  back)
button_right = tkinter.Button(window, text="→", font=("MSゴシック", "15", "bold"), command =  right)
button_left = tkinter.Button(window, text="←", font=("MSゴシック", "15", "bold"), command =  left)

button_up = tkinter.Button(window, text="上昇", font=("MSゴシック", "10", "bold"), command =  up)
button_down = tkinter.Button(window, text="下降", font=("MSゴシック", "10", "bold"), command =  down)

# GUI設計
button_tello.place(x=10, y=10)
button_takeoff.place(x=10, y=50)
button_land.place(x=50, y=50)
button_forward.place(x=200, y=10, width=40,height=40)
button_back.place(x=200, y=60, width=40,height=40)
button_right.place(x=250, y=60, width=40,height=40)
button_left.place(x=150, y=60, width=40,height=40)
button_up.place(x=350, y=10)
button_down.place(x=350, y=50)


# ウィンドウのループ処理
window.mainloop()

```
次は回転とカメラを使ってドローン触れてみます。

# 今後の開発
このように、Window上でプログラムを動かしました。
今回の要件の中ではマウスクリックによる移動と離着陸は物足りないと感じました。
そこで、Nintendo Switchのプロコンで操作できることを操作の目標にしました。
また、カメラや操縦などできたら、応用としてARとビデオ録画、ゲーム制作を行ってみようと思います。

# ソースコードとGithub
・Tello_test4.pyを参照
・Github: https://github.com/ImagawaKosuke/Python_drone

# 参考サイト
・「【Python】ドローンの自動操縦をプログラミングする！」
https://note.com/commonerd/n/ned0b863e795c

・「Tello-Python」
https://github.com/dji-sdk/Tello-Python