トイドローンTelloをPythonプログラムで動かすためのTello-PythonというPython2サンプル環境が提供されていますが、Python2サポートが終了しつつあるためか、当初なかなかうまく行かず、Tello_Video(動画撮影のサンプル)を動かすのに苦労しました。
本記事では、Anacondaの仮想環境を利用してMacでTello_Videoを動かすまでの手順を紹介します。
同じように悩んでいる方のお役に立てれば幸いです。
Telloとの通信
TelloはWi-Fiのアクセスポイントとなり、パソコンのWi-Fi接続先をTELLOから始まる名前を選択することで通信できるようになります。
制御用のコマンドをパソコンから送信し、Telloは状態(センサー情報)とカメラ画像をそれぞれ別のポートから返してきます。
これらすべてUDP通信で一方通行の情報として送られます。

動作環境
下表の環境で動作確認しました。
項目 | バージョン | |
---|---|---|
macOS | Catalina 10.15.7 | Big Sur 11.2 |
Anaconda | Anaconda3-2020.11-MacOSX-x86_64 | ← |
python | 3.8.5 | 3.8.8 |
numpy | 1.19.2 | ← |
opencv | 4.5.1 | ← |
環境構築
Macのベース環境
HomeBrewをインストールしていない場合はインストールします。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
HomeBrewを使って必要なツールをインストールします。
brew install cmake boost ffmpeg
Anaconda Python3環境
以下に従い、Anacondaのインストールをして、Environments→Createから仮想環境の名称をTelloとします。(名称は任意)
Pythonバージョンは3.8を選択します。
作成した仮想環境Telloのターミナルを立ち上げ、condaコマンドでPythonモジュールをインストールします。
conda install numpy Pillow conda install -c conda-forge opencv
Tello_Python(Python3版)
Tello制御用のコードをPython3化してGitHubに載せてくれている方のコードをありがたく使わせていただきます。
git clone https://github.com/f41ardu/Tello-Python
H.264デコーダ
ここが一番の難関で、ここでつまづいている方が多いのではないかと思います。
Tello Videoを動かすにはH.264デコーダをMacネイティブプログラムとしてビルドする必要があるのですが、上記に含まれるものではうまく行かなかったので、別途以下からH.264デコーダを入手します。
git clone https://github.com/DaWelter/h264decoder
ソースコードh264decoder.cpp
に書き足しが必要なのでvi等のテキストエディタで編集します。
viの使い方がわからない方は↓の動画でテキスト編集の方法を紹介していますので参考にしてください。
cd h264decoder vi src/h264decoder.cpp
以下のように1行追加します。(以下、h264decoder.cpp
の先頭部分抜粋)
extern "C" { #include <libavcodec/avcodec.h> #include <libavutil/avutil.h> #include <libavutil/imgutils.h> #include <libavutil/mem.h> #include <libswscale/swscale.h> } #include "h264decoder.hpp" #include <utility> // ****** この行を追加 ****** typedef unsigned char ubyte;
CMakeLists.txtを編集します。
vi CMakeLists.txt
Addに続く2行を追加します。
cmake_minimum_required(VERSION 3.14) project(h264decoder) set(CMAKE_BUILD_TYPE Debug) set (BuildExamples False CACHE BOOL "Build the examples") # Add find_package ( PythonInterp 3.8 REQUIRED ) find_package ( PythonLibs 3.8 REQUIRED )
H.264デコーダをCMakeを使ってビルドします。
mkdir build cd build cmake .. cmake --build .
これでh264decoder.cpython-38-darwin.so
という共有オブジェクトができるので、先にgit clone
したPY3_Tello_Videop
ディレクトリにシンボリックリンクを作ります。(コピーしても良いです)
cd ../../Tello-Python/PY3_Tello_Videop ln -s ../../h264decoder/build/h264decoder.cpython-38-darwin.so .
元々あったlibh264decoder.so
は削除します。
rm libh264decoder.so
import
するモジュール名に合わせるために以下の編集を行います。
vi tello.py
以下tello.py
の先頭部分抜粋です。
import socket import threading import time import numpy as np #import libh264decoder // ****** この行をコメント ****** import h264decoder as libh264decoder // ****** この行を追加 ******
これで準備完了です。
Tello_Video実行
ls
で以下のようなファイル構成になっていることを確認します。
(Tello) Mac$ ls ./ h264decoder.cpython-38-darwin.so@ ../ h264decoderpi3/ LICENSE.md main.py README.md tello.py __pycache__/ tello_control_ui.py
デフォルトの移動量を調整するとTelloを動かしやすいのでtello_control_ui.py
の31行目辺りを以下のように編集し、self.distance
の値を0.3に変更します。
# control variables #self.distance = 0.1 # default distance for 'move' cmd self.distance = 0.3 # default distance for 'move' cmd self.degree = 30 # default degree for 'cw' or 'ccw' cmd
Telloの電源を入れ、パソコンのWi-Fi接続先からTelloを選択します。
TelloとWi-Fi接続できたら、あらかじめ作っておいたAnaconda仮想環境Telloのターミナルを立ち上げて、以下のコマンドでTello_Videoを実行します。
python main.py
以下のようにTelloのカメラ映像が画面に出れば成功です。

Open Command Panelを押すと以下のような操作パネルが表示されます。

Takeoff、Landボタンで離着陸します。
W、S、A、D、矢印キー↑↓←→で移動でき、DistanceとDegreeのつまみで移動量を調節できます。
Flipはくるっと回りますので、十分にスペースに余裕のある場所で試しましょう。
改造・遠隔操作編
以下の記事では、Tello-Videoを改造してMQTT通信で映像と操縦コマンドを送ることで、遠く離れた場所からTelloを動かす方法を紹介しています。
ご興味をお持ちの方はご覧ください。
Telloの入手方法
Telloは以下から購入することができます。
書籍紹介
Pythonの学習におすすめの書籍を紹介します。
やはりオライリーはハズレが無いので1冊持っていて損はないと思います。
基礎から応用までわかりやすい説明でコード例も多数載っていて、初学者の入門書としては必要十分と感じています。
さらにPythonらしいコードの書き方も言及されていて、スマートなコードが書けるようになります。
まとめ
トイドローンTello用のサンプル環境Tello-Pythonに含まれるビデオサンプルTello_VideoをAnaconda Python3環境で動かす方法を紹介しました。
他のサイトの方法でうまく行かなかった方も本記事の方法でTello_Videoの体験ができると思います。
同じように悩んでいる方のお役に立てれば幸いです。
参考文献
- Mac OSXで「Tello_Video」の環境構築(https://qiita.com/hsgucci/items/4ace25b4777a49e52555)
- (補足)Python3で「Tello_Video」を動かす(https://qiita.com/hsgucci/items/cbcb8da6941a9981c11e)
- Tello_VideoをMacかつPython3.9(miniconda)でやる(https://note.com/pinponpin/n/nff7c1c5882cf)
- トイドローン Tello でプログラミング!バイナリーコマンドの使い方(https://qiita.com/mozzio369/items/a942a212c6b5d3fdeb48)