プログラミング言語PythonでTelloにコマンドを送信して自動制御して飛行させる方法について入門者向けにまとめました。
Telloを遠隔制御してみよう(コマンド入力版)
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で有効化した場合)がPCに送られてくるので、それらを取得できます。 |
Telloで使える主なコマンドは以下のとおりです。
説明 | 動作 | 値の範囲 |
---|---|---|
Command | SDKモードを開始(コマンドでTelloを遠隔操作する際に最初に必ず実行) | ー |
streamon | ビデオストリームを有効化(カメラ映像を送信する) | ー |
streamoff | ビデオストリームを無効化(カメラ映像を送信しない) | ー |
emergency | 緊急停止(すぐにモーターを停止させる) | ー |
wifi ssid pass | Wi-FiのSSIDとパスワードを設定(Telloアプリからでも設定可能) | ssid:SSID、pass:パスワード |
ap ssid pass | Telloをステーションモードに設定し、アクセスポイントのSSIDとパスワードを使用して新しいアクセスポイントに接続 | ssid:SSID、pass:パスワード |
takeoff | 離陸 | ー |
land | 着陸 | ー |
stop | 空中で停止(ホバリング) | ー |
speed x | 速度をx[cm/s]に設定 | 10〜100 |
left x | 左にx[cm]移動 | 20~500 |
right x | 右にx[cm]移動 | 20~500 |
forward x | 前にx[cm]移動 | 20~500 |
back x | 後ろにx[cm]移動 | 20~500 |
up x | x[cm]上昇 | 20~500 |
down x | x[cm]下降 | 20~500 |
cw x | 右回りにx[度]回転 | 1〜360 |
ccw x | 左回りにx[度]回転 | 1〜360 |
flip x | x方向に反転 | ”l”:左、”r”:右、”f”:前、”b”:後ろ |
speed? | 現在の速度[cm/s]を取得 | 0〜100 |
battery? | 現在のバッテリー残量[%]を取得 | 0〜100 |
time? | 現在の飛行時間[秒]を取得 | ー |
wifi? | 現在のWi-FiのS/N比(信号雑音比)を取得 | ー |
sdk? | Tello SDKのバージョンを取得 | ー |
sn? | Telloのシリアルナンバーを取得 | ー |
height? | 現在の高さ(cm)を取得 | 0-3000 |
temp? | 現在の温度(℃)を取得 | 0-90 |
attitude? | IMU(慣性計測装置) の姿勢情報を取得 | ー |
baro? | バロメータ(気圧計)の値(m)を取得 | ー |
acceleration? | IMU角加速度データを取得 | ー |
tof? | TOFからの距離(cm)を取得 | 30-1000 |
今回、コマンド入力を受付するためのPythonの標準入力についての説明を省略しますが、以下ページで説明していますので参考にしてください。
ソケット通信するためのsocketモジュールについても、以下ページで説明しています。
サンプルコード
キーボード入力でコマンドを送信し、Telloを遠隔制御するサンプルコードは以下のとおりです。
上記サンプルコードを実行し、以下のコマンドを1行ずつ順に標準入力で実行すると、Telloが「SDKモード有効化→離陸→30cm上昇→30cm上昇→50cm上昇→100cm下降→着陸」します。
command takeoff up 30 up 30 up 50 down 100 land
Telloの電源を入れてPCと接続するたびに、最初に必ず「command」を実行しないと、SDK機能が有効化されないため、遠隔操作ができないので注意が必要です。
Telloを遠隔制御してみよう(コントロール画面でボタン操作版)
次のようなコントロール画面をTkinter(Python標準モジュール)で作成し、ボタン操作で簡単にTelloを遠隔制御してみます。
今回、コントロール画面を作成するためのTkinter(Python標準モジュール)については説明を省略しますが、以下ページで説明してますので参考にしてください。
サンプルコード
TelloとPCをWiFiで接続し、Pythonプログラムを実行して、コントロール画面の「▲離陸」ボタンを押せばTelloが離陸し、その後は各種ボタンにしたがってTelloが動いてくれます。
コメント