プログラミング言語PythonでTelloのカメラ映像を取得して、コマンドを送信して自動制御して飛行させる方法について入門者向けにまとめました。
Telloのカメラ映像を受信してPC側で表示
Telloのカメラ映像受信について学ぶために、まずは単純に映像をPC側で受信して画面表示させてみます。
Telloは、PCとWi-Fiで接続し、ソケット通信(UDP/IP)によりTelloへ命令(離陸、着陸、移動など)したり、Telloから機体のステータス情報(バッテリー残量など)を取得できます。
Telloへ命令を送る場合、Telloから機体のステータス情報を取得する場合、Telloからカメラ映像を取得する場合、それぞれ以下のように通信を行います。
動作 | 通信方法 |
---|---|
Telloへ命令を送る場合 | TelloのIPアドレス・ポート宛て(192.168.10.1:8889)にコマンドをUDP通信で送信 |
Telloから機体のステータス情報を取得する場合 | 操作用のPC宛て(0.0.0.0:8880)にUDP通信で送られてくるのでUDP通信で受信 |
Telloからカメラ映像を取得する場合 | Telloへビデオストリーム有効化の命令(streamon)を送ると、操作用のPC宛て(0.0.0.0:11111)にUDP通信で送られてくるのでUDP通信で受信 |
– | – |
---|---|
1 | Telloの電源を入れると、TelloはWi-Fi親機(SSID:TELLO-〇〇)となるので、PCで接続します。 |
2 | PC側でPythonプログラムを起動し、UDPソケット通信で、IPアドレスは「192.168.10.1」、ポート番号は「8889」宛に「command」というテキストを送信すると、Telloがコマンドモードになります(コマンドで制御可能な状態となる)。 |
3 | 以下のコマンドをテキストで送信すると、Telloが命令(コマンド)に従って動作します。また、Telloからステータス情報やカメラ映像(streamonで有効化した場合)が送られてくるので、それらを取得できます。 |
以下記事では、機体の遠隔制御について解説しました。
今回はまずTelloからカメラ映像を受信し、PC側で画面に表示してみます。
受信した動画データのキャプチャと画面表示にはOpenCVモジュールを使います。ここでは、OpenCVモジュールの使い方については説明を割愛しますが、以下ページで詳細に解説していますので、良かったら参考にしてみてください。
サンプルコードと実行結果
Telloからカメラ映像を受信し、PC側で画面に表示するサンプルプログラムのソースコードです。
上記サンプルコードを実行すると、画面が表示されTelloのカメラ映像が表示されます。
Telloのカメラ映像を受信してキーボードで制御
OpenCVモジュールには、キー入力操作を実装する機能「cv2.waitKey()」があります。
これを用いて、Telloのカメラ映像をPC側でリアルタイム表示しながらキー入力でドローンを操作してみます。
今回は以下の仕様にしてみます。
キー入力 | Telloの動作 |
---|---|
qキー | 終了 |
↑キー | 前進 |
↓キー | 後進 |
←キー | 左進 |
→キー | 右進 |
jキー | 離陸 |
kキー | 着陸 |
hキー | 上昇 |
lキー | 下降 |
uキー | 左回りに回転 |
iキー | 右回りに回転 |
nキー | 低速モード |
mキー | 高速モード |
また、Telloから受信した機体ステータス情報を用いて、画面左上に「キー入力で実行中の動作(Cmd)」「バッテリー残量(Battery)」「飛行時間(Time)」「ステータス(Status)」を表示させます。
「ステータス(Status)」は、正常時にドローンを操作しようとするとTrue、異常時(機体が大きく傾いて着地しているなど)にドローンを操作しようとするとFalseとなります。
実行例
実行例は以下のとおり(動画)。
サンプルコード
サンプルプログラムのソースコードです。
コメント
はじめまして。こちらのページを参考にPython環境を整え、サンプルコードでの動作を確認しました。
一点お聞かせください。
ご利用ノートパソコンは「Mac」と思いますが、Windows10環境でも動作しますがアルファベットキーは問題ないのですが、カーソルキー(上下左右矢印)キーのみ反応しません。
なにか確認する内容などあればお聞かせください。
よろしくお願いいたします。
コメントありがとうございます。Windowsでも矢印キーを扱えるかわかりませんが、
key = cv2.waitKey(1)
print(key)
などで、矢印キーを入力したときに、どのような値がkeyに格納されているか確認されてみるのはどうでしょうか。
キーボードで制御しながらOpenCVを使い顔認識とか出来ますか?是非プログラムを作って欲しいです。
以下のコードを弄れば(キーボード制御のコードと組み合わせれば)可能です。
https://python.joho.info/programming/python/tello-python-anime-face-tracking/