TelloPyでTelloドローンをプログラム飛行した


###参考にしたサイト

- [【Tello】トイ・ドローンで遊んでみた♪～キーボードのキーを使ってTelloを制御](https://qiita.com/MuAuan/items/ccd0e7881fed8759904d)
- [GitHub github.com/MuAuan/Tello/blob/master/simple_takeoff_KeyTelloCamera.py](https://github.com/MuAuan/Tello/blob/master/simple_takeoff_KeyTelloCamera.py) 

###実行画面

```bash:Terminal
electron@diynoMacBook-Pro Tello % pwd
/Users/electron/Desktop/MuAuan/Tello
electron@diyrofuminoMacBook-Pro Tello % 
```


```bash:Terminal
electron@diynoMacBook-Pro Tello % python3 tellopy_programmed_flight_wo_camera.py
Tello: 19:56:21.743:  Info: start video thread
========
Telloへの接続を開始します。（60秒間tryし続けます）
========
Tello: 19:56:21.744:  Info: send connection request (cmd="conn_req:9617")
Tello: 19:56:21.744:  Info: video receive buffer size = 524288
Tello: 19:56:21.744:  Info: state transit State::disconnected -> State::connecting
Tello: 19:56:21.758:  Info: LogData: UNHANDLED LOG DATA: id=   16, length=   4
Tello: 19:56:21.758:  Info: connected. (port=9617)
Tello: 19:56:21.758:  Info: send_time (cmd=0x46 seq=0x01e4)
Tello: 19:56:21.758:  Info: state transit State::connecting -> State::connected
========離陸します。========
Tello: 19:56:21.758:  Info: set altitude limit 30m
Tello: 19:56:21.759:  Info: takeoff (cmd=0x54 seq=0x01e4)
========3秒時間を置きます。========
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 1710, length=   6
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 1306, length=  22
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 1307, length=  16
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 1305, length=  37
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 2064, length=  64
Tello: 19:56:21.912:  Info: LogData: UNHANDLED LOG DATA: id= 2208, length=  40
Tello: 19:56:22.092:  Info: LogData: UNHANDLED LOG DATA: id= 1000, length=  44
Tello: 19:56:22.092:  Info: LogData: UNHANDLED LOG DATA: id= 1001, length=  16
Tello: 19:56:22.092:  Info: LogData: UNHANDLED LOG DATA: id=10086, length=   4
Tello: 19:56:22.093:  Info: LogData: UNHANDLED LOG DATA: id=10085, length=  80
Tello: 19:56:22.598:  Info: LogData: UNHANDLED LOG DATA: id= 1304, length=  34
Tello: 19:56:22.782:  Info: LogData: UNHANDLED LOG DATA: id=   12, length=  55
Tello: 19:56:22.985:  Info: LogData: UNHANDLED LOG DATA: id=10100, length=  21
Tello: 19:56:23.395:  Info: LogData: UNHANDLED LOG DATA: id= 1200, length=  24
Tello: 19:56:23.395:  Info: LogData: UNHANDLED LOG DATA: id= 1202, length=  33
Tello: 19:56:23.395:  Info: LogData: UNHANDLED LOG DATA: id= 1203, length=   7
Tello: 19:56:23.395:  Info: LogData: UNHANDLED LOG DATA: id= 1300, length= 137
Tello: 19:56:23.813:  Info: LogData: UNHANDLED LOG DATA: id= 1002, length=  27
Tello: 19:56:24.416:  Info: LogData: UNHANDLED LOG DATA: id= 1303, length=  64
========15前進します。========
Tello: 19:56:24.761:  Info: forward(val=15)
========3秒時間を置きます。========
========20右移動します。========
Tello: 19:56:27.764:  Info: right(val=20)
========3秒時間を置きます。========
========30上昇します。========
Tello: 19:56:30.766:  Info: up(val=30)
========3秒時間を置きます。========
========時計回りに90度回転します。========
Tello: 19:56:33.769:  Info: clockwise(val=90)
========着陸します。========
Tello: 19:56:33.769:  Info: land (cmd=0x55 seq=0x01e4)
========3秒時間を置きます。========
========drone.subscribe()します。========
========30droneインスタンスをquit()します。========
Tello: 19:56:36.772:  Info: quit
Tello: 19:56:36.772:  Info: state transit State::connected -> State::quit
Tello: 19:56:36.782:  Info: exit from the video thread.
Tello: 19:56:36.785:  Info: exit from the recv thread.
electron@diynoMacBook-Pro Tello % 
```

###ソースコード

```Python3:tellopy_programmed_flight_wo_camera.py
from time import sleep
import tellopy
import cv2
import av
import numpy

def handler(event, sender, data, **args):
    drone = sender
    #if event is drone.EVENT_FLIGHT_DATA:
    #    print(data)

def test():
    drone = tellopy.Tello()
    print("========\nTelloへの接続を開始します。（60秒間tryし続けます）\n========")
    drone.connect()
    drone.wait_for_connection(60.0)
    
    print("========離陸します。========")
    drone.takeoff()
    print("========3秒時間を置きます。========")
    sleep(3)
    print("========15前進します。========")
    drone.forward(15)
    print("========3秒時間を置きます。========")
    sleep(3)
    print("========20右移動します。========")
    drone.right(20)
    print("========3秒時間を置きます。========")
    sleep(3)
    print("========30上昇します。========")
    drone.up(30)
    print("========3秒時間を置きます。========")
    sleep(3)
    print("========時計回りに90度回転します。========")
    drone.clockwise(90)
    print("========着陸します。========")
    drone.land()
    print("========3秒時間を置きます。========")
    sleep(3)
    print("========drone.subscribe()します。========")
    drone.subscribe(drone.EVENT_FLIGHT_DATA, handler)
    print("========30droneインスタンスをquit()します。========")
    drone.quit()

if __name__ == '__main__':
    test()

```