【Mac】Tello_VideoをAnaconda Python3環境で動かす(2021年版)

スポンサーリンク

トイドローンTelloをPythonプログラムで動かすためのTello-PythonというPython2サンプル環境が提供されていますが、Python2サポートが終了しつつあるためか、当初なかなかうまく行かず、Tello_Video(動画撮影のサンプル)を動かすのに苦労しました。

本記事では、Anacondaの仮想環境を利用してMacでTello_Videoを動かすまでの手順を紹介します。

同じように悩んでいる方のお役に立てれば幸いです。

Telloとの通信

TelloはWi-Fiのアクセスポイントとなり、パソコンのWi-Fi接続先をTELLOから始まる名前を選択することで通信できるようになります。

制御用のコマンドをパソコンから送信し、Telloは状態(センサー情報)とカメラ画像をそれぞれ別のポートから返してきます。

これらすべてUDP通信で一方通行の情報として送られます。

Tello Transmittion

動作環境

下表の環境で動作確認しました。

項目バージョン
macOSCatalina 10.15.7Big Sur 11.2
AnacondaAnaconda3-2020.11-MacOSX-x86_64
python3.8.53.8.8
numpy1.19.2
opencv4.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 )

これが無いとAnaconda環境のPythonではなく、Macにプリインストールされている/usr/local/bin/python3用にビルドされてしまい、できあがるファイル名はh264decoder.cpython-39-darwin.soとなり、正しく読み込めなかったため、このfind_package設定を追加しました。

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は以下から購入することができます。

トイドローン Tello Powered by DJI

書籍紹介

Pythonの学習におすすめの書籍を紹介します。

やはりオライリーはハズレが無いので1冊持っていて損はないと思います。

入門 Python 3

基礎から応用までわかりやすい説明でコード例も多数載っていて、初学者の入門書としては必要十分と感じています。

さらにPythonらしいコードの書き方も言及されていて、スマートなコードが書けるようになります。

まとめ

トイドローンTello用のサンプル環境Tello-Pythonに含まれるビデオサンプルTello_VideoをAnaconda Python3環境で動かす方法を紹介しました。

他のサイトの方法でうまく行かなかった方も本記事の方法でTello_Videoの体験ができると思います。

同じように悩んでいる方のお役に立てれば幸いです。

参考文献

タイトルとURLをコピーしました