Tello × Python

2019/09/15

先日購入したドローン「Tello」をPythonで自動操縦してみました。
Telloには、「Python」「Scratch」というプログラミング言語で制御が出来る機能が備わっています。今回は、σ(^_^)が触ったことがあるPythonでプログラムしてみることにしました。

 

Python環境構築

今回、Pythonの環境を構築するにあたり、USBメモリで持ち歩きたい希望があったので、「WinPython」をインストールすることにしました。
インストールは、ファイルをダウンロードしてUSBメモリに解凍するだけ。(σ(^_^)はWinpython64-3.7.4.0.exeをダウンロードしました。)
フォルダの中に「WinPython Command Prompt.exe」があるので、これを起動します。

 

TelloとPCの接続

TelloとPCはWiFiで接続します。TelloのスイッチをONにすると、PCのWiFiアクセスポイントリストに「Tello-xxxxxx」が表示されますので、それを選択すればOK。

 

TelloとPCが接続出来ない

ちょっと専門的なお話を。
σ(^_^)は、最初TelloとPCが接続出来ませんでした。TelloのIPアドレスは「192.168.10.1」固定なのですが、σ(^_^)のPCは「192.168.0.100」に固定していたことで通信が出来ませんでした。接続する為には「192.168.10.xx」にする必要があります。固定IPアドレスを設定し直すことで接続出来ました。

 

Pythonでプログラム

Telloの公式サイトでSDKのマニュアルが公開されています。このマニュアルの冒頭にサンプルプログラム(Tello3.py)のリンクがありますので、これを参考にプログラムします。動作に関するコマンドと情報収集に関するコマンドが用意されています。とりあえず出来たソースがこちら。


# If Tello does not receive any command input for 15 seconds, it will land automatically.

import socket
import time

socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

tello_address = ('192.168.10.1', 8889)

print('command send.')
socket.sendto('command'.encode('utf-8'),tello_address)
time.sleep(3)

# Take Off
print('Take Off.')
time.sleep(3)
socket.sendto('takeoff'.encode('utf-8'),tello_address)
time.sleep(3)

print('rotate(clockwise)!')
time.sleep(3)
socket.sendto('cw 180'.encode('utf-8'),tello_address)
time.sleep(3)

print('flip!')
time.sleep(3)
socket.sendto('flip b'.encode('utf-8'),tello_address)
time.sleep(3)

print('rotate(counter-clockwise)!')
time.sleep(3)
socket.sendto('ccw 180'.encode('utf-8'),tello_address)
time.sleep(3)

print('go!')
time.sleep(3)
socket.sendto('go 20 20 20 10'.encode('utf-8'),tello_address)
time.sleep(3)

# Land
print('Land!')
time.sleep(3)
socket.sendto('land'.encode('utf-8'),tello_address)

socket.close()
print('end.')
						

 

実験!

いよいよ実験してみます。さくっと動きました。ただ、コマンドが無視され、意図した動きをしないことがしばしばありました。UDP接続なので、スルーされてしまったのかな?あと、情報収集系のコマンドの実行結果が、マニュアルと違う?のが気になりました。

 

展望

映像の取得方法がわかりませんでした。「streamon」というコマンドはあるものの、映像はどうやって取得するのか?がわかりません…これが出来れば、AIと絡めて何か出来そうです。また時間を見つけて勉強してみようと思います。

 

Tello撮影ビデオ(おまけ)

スマホアプリからの操縦でビデオ撮影してみました。この日は風が強かったので、かなり流されました。でも、Telloが自動で元の場所に戻ろうとするのには驚きました。映像はちょっと暗いですが、この浮遊感は人間には撮れませんね。なかなか面白いです。因みに、Telloで撮影したビデオには音声が録音されない仕様です。録音されてもドローンの飛ぶ音がうるさいと思うので、この仕様は妥当かなと思います。

 

関連リンク

Tello SDK