#はじめに
このページは,
の1ページです.
全体を見たい場合は上記ページへお戻りください.
#概要
DJI公式のTello用Pythonサンプルプログラム「Tello-Python」のうち,
を試す方法を記述します.
#前提条件
ホームフォルダにTello-Pythonがインストールされているという前提で話を進めます.
Linuxマシンであれば /home/(ユーザー名)/
に,Tello-Python
というフォルダがあることになります.
詳しくは Tello-Pythonのダウンロード を御覧ください.
#ディレクトリの移動
まずはコンソール(端末)を開き,以下のコマンドを打って,フォルダを移動します.
$ cd Tello-Python
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 というディレクトリがあることがわかります.
更にディレクトリ移動しましょう.
$ cd Single_Tello_Test
lsコマンドでSingle_Tello_Testの中を見てみると,
$ ls
README.md command.txt stats.py tello.py tello_test.py
tello_test.py というファイルがあることがわかります.
その他にtello.pyとstats.pyというファイルもありますが,これらはtello_test.pyが呼び出すファイルなので,ユーザーが実行する必要はありません.
また,command.txt というテキストファイルもあることがわかります.
要は**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
takeoff
delay 5
land
冒頭には,SDKを有効にするためのcommand
が書いてあることが分かりますね.
これをメモ帳やテキストエディタで編集することで,望みの動作をさせることができます.
例えば,delay 5
すなわち5秒間待つ
は長過ぎるので,
delay 2
に変えて上書き保存してみましょう.
command
takeoff
delay 2
land
新しいcommand.txt
でTelloを飛ばしてみると,待ち時間が短くなるのが分かります.
$ python tello_test.py command.txt
この様に,command.txtの中身を書き換えることで,様々な飛行を実現できます.
では,どんなコマンドを書くことができるのでしょうか?
それを次項で見ていきます.
#コマンドの確認
Tello SDKのPDFを見ると,command.txtに書くことのできるコマンドのリストがあります.
代表的なものを以下に紹介します.
コマンド名 | 解説 | 備考 |
---|---|---|
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
を作り,
こんな風に書いてみます.
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
ディレクトリを作っておきましょう.
$ mkdir log
これで今後はI/Oエラーが出なくなり,飛行ログが保存されます.
再度実行して試してみましょう.
$ python tello_test.py command.txt
すると,logの直下に飛行させた [年月日 時刻].txt というファイルができているので,適当なエディタで表示してみましょう.
$ 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に,そのコマンドを実行するのにかかった時間が入っています.