13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-09-23

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

公式SDK「Tello-Python」を試そう

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

#概要

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

 Single_Tello_Test

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

#前提条件

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

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

詳しくは Tello-Pythonのダウンロード を御覧ください.

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

cd(change_directory)
$ cd Tello-Python

lsコマンドでフォルダの中にあるファイルを見てみると,

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

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

Single_Tello_Testへ移動
$ cd Single_Tello_Test

lsコマンドでSingle_Tello_Testの中を見てみると,

Single_Tello_Testの中身
$ ls
README.md  command.txt  stats.py  tello.py  tello_test.py

tello_test.py というファイルがあることがわかります.
その他にtello.pystats.pyというファイルもありますが,これらはtello_test.pyが呼び出すファイルなので,ユーザーが実行する必要はありません.

また,command.txt というテキストファイルもあることがわかります.

全体の構成は下図の様になっています.
tello_test_system.png

要は**tello_test.py**がプログラム本体で,
**command.txt**がTelloにさせたい飛行計画のリスト,です.

#tello_test.pyの実行

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

その際,必ずコマンドライン引数を指定する必要があるので,
command.txtを渡すように書きます.

コマンドライン引数に飛行計画テキストファイルを書く.
$ python tello_test.py command.txt

#実行結果
正しく実行されれば,

 離陸 → 5秒待つ → 着陸

という動作が行われます.

実行結果
$ python tello_test.py command.txt
sending command: command to 192.168.10.1
from ('192.168.10.1', 8889): ok
Done!!! sent command: command to 192.168.10.1
sending command: takeoff to 192.168.10.1
from ('192.168.10.1', 8889): ok
Done!!! sent command: takeoff to 192.168.10.1
delay 5.0
sending command: land to 192.168.10.1
from ('192.168.10.1', 8889): ok
Done!!! sent command: land to 192.168.10.1
Traceback (most recent call last):
  File "tello_test.py", line 28, in <module>
    out = open('log/' + start_time + '.txt', 'w')
IOError: [Errno 2] No such file or directory: 'log/2019-09-23 15:25:53.379159.txt'

また,最後にI/Oエラーを起こしているのが分かります.
このエラーの解消法については,本記事のメインストーリーとは別なので,ページ末尾に記載しておきます.

エラーが出ていても問題なく飛行できるので,今はこのままでかまいません.

#実行後の感想

実行結果の感想としては

・5秒待つのは長い
・離陸して着陸ではつまらない

だと思います.

command.txtを編集して様々な動きをさせてみましょう.

#command.txtの内容

command.txtを開いて見てみると,中身は以下のように書かれています.

command.txt
command
takeoff
delay 5
land

冒頭には,SDKを有効にするためのcommandが書いてあることが分かりますね.

これをメモ帳やテキストエディタで編集することで,望みの動作をさせることができます.

例えば,delay 5 すなわち5秒間待つは長過ぎるので,
delay 2に変えて上書き保存してみましょう.

command.txt(変更後)
command
takeoff
delay 2
land

新しいcommand.txtでTelloを飛ばしてみると,待ち時間が短くなるのが分かります.

2秒待ちのcommand.txtで実験
$ python tello_test.py command.txt

この様に,command.txtの中身を書き換えることで,様々な飛行を実現できます.

では,どんなコマンドを書くことができるのでしょうか?
それを次項で見ていきます.

#コマンドの確認

Tello SDKのPDFを見ると,command.txtに書くことのできるコマンドのリストがあります.

Tello SDK 1.3
Tello SDK 2.0

代表的なものを以下に紹介します.

コマンド名 解説 備考
command SDKのコマンドモードに移行 最初に1回送信
takeoff 離陸
land 着陸
up x 上昇 xには20~500を入れる up 50 で50cm上昇
down x 下降 xには20~500を入れる
left x 左移動 xには20~500を入れる left 20 で20cm左移動
right x 右移動 xには20~500を入れる
forward x 前進 xには20~500を入れる
back x 後進 xには20~500を入れる
cw x 時計回り xには1~360を入れる cw 30で右へ30度旋回
ccw x 反時計回り xには1~360を入れる

前後左右上下の移動の単位はセンチメートル(cm)、旋回は度(degree)です.

また,delayについてはSDKコマンドとは別です.Pythonのtime.sleepを使って実現しています.

python側コマンド 解説
delay x x秒間停止

#新しい飛行計画ファイルで実験

例えば,command.txtとは別にflight_test.txtを作り,
こんな風に書いてみます.

flight_test.txt
command
takeoff
delay 2
left 50
delay 2
back 50
delay 2
right 50
delay 2
forward 50
delay 2
land

左に50センチの四角を描くように飛行して着陸します.

この新しいファイルflight_test.txtで,
コマンドライン引数を変更してプログラムを実行すれば,新しい飛行が行われます.

コマンドライン引数には飛ばしたいファイルを指定する
$ python tello_test.py flight_test.txt

このように,自分で様々な飛行計画テキストを作って,色々飛ばして遊んでみましょう.
これだけでも結構面白いですよ.

#Single_Tello_Testを使った「ドローンのプログラミング体験」

イベントネタやSTEM教育の1つとして,「Telloを使ったプログラミング」というのがよくあります.

まあScratchで操作するのがこれ系イベントの主流なのですが,
ブロック並べだけじゃちょっと...もう少しプログラムを書いてる雰囲気を体験させたい
という意見をいただくこともあります.

とは言え,ガチでPythonのプログラムを書かせるなんてことはできません...
キーボード配列もわからない段階の人に,importだのクラスだのを教えるのは無茶です.

そんな時に便利なのが,この「Single_Tello_Test」です.

  • テキストファイルを編集するだけなので難しくない
  • コマンドの英単語は簡単
  • 産業用ロボットのプログラミング(教示/再生)と同じ,と意義を強調できる(笑

テキストファイルを書くだけなのでPythonの体験とは言えませんが,簡単なテキストプログラミングを味わってもらうことができます.

(Windows機にしてpython tello_test.py command.txtとだけ書いたBATファイルをダブルクリックしてもらうのが,初心者用には簡単です)

#おわりに

今回は「Single_Tello_Test」の使用法を解説しました.

本当はtello_test.pyのプログラム解説もしようと思いましたが,今回は割愛しました.
「Single_Tello_Test」と「Tello_Video」とでtello.pyのTelloクラスが異なるので,
変に解説して混乱を招くよりも,さっさと「Tello_Video」へ行った方が良いと思いました.

次回は,その本命の「Tello_Video」について解説します.

#I/Oエラーの解消法

エラーメッセージには,このように書かれています.

エラーメッセージ
  File "tello_test.py", line 28, in <module>
    out = open('log/' + start_time + '.txt', 'w')
IOError: [Errno 2] No such file or directory: 'log/2019-09-23 

これは,飛行ログを保存するファイルを作ろうとしたけど,"log"なんていうディレクトリがなかったので保存できなかったよ,と言っています.

なので,Single_Tello_Testディレクトリの下にlogディレクトリを作っておきましょう.

logフォルダが無いので作っておく
$ mkdir log

これで今後はI/Oエラーが出なくなり,飛行ログが保存されます.
再度実行して試してみましょう.

logフォルダを作ってから実行
$ python tello_test.py command.txt

すると,logの直下に飛行させた [年月日 時刻].txt というファイルができているので,適当なエディタで表示してみましょう.

とりあえずcatで表示
$ cd log
$ ls
2019-09-23 15:34:12.138149.txt  2019-09-23 15:35:23.141152.txt
$ cat 2019-09-23 15:34:12.138149.txt

id: 0
command: command
response: ok
start time: 2019-09-23 15:34:12.138473
end_time: 2019-09-23 15:34:12.160175
duration: 0.021702

id: 1
command: takeoff
response: ok
start time: 2019-09-23 15:34:12.160224
end_time: 2019-09-23 15:34:19.749133
duration: 7.588909

id: 2
command: land
response: ok
start time: 2019-09-23 15:34:24.752201
end_time: 2019-09-23 15:34:28.163136
duration: 3.410935

SDKで定義されている3つのコマンド

  • command
  • takeoff
  • land

を使った事が分かります.
また,durationに,そのコマンドを実行するのにかかった時間が入っています.

13
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?