Tello_VideoをAnaconda Python3環境で動かす(2022年版)【Intel Mac/M1 Mac/Windows/Linux対応】

スポンサーリンク
Tello_Video Top

(2022/8/5追記)Windows、Linuxにも対応しました。ただし、Windows対応といってもデュアルブートにしてLinuxとしての実現になりますのでご了承ください。

(2022/11/25追記)読者様からのご指摘で従来の内容では動かなくなっていたことに気づいたため、Intel Macの環境構築の内容を更新しました。

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

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

以下の動画にも手順を収めていますので、参考にしてください。

【Intel Mac用】

【M1 Mac用】

【Windows / Linux用】

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

Telloとの通信

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

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

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

動作環境

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

項目(1) Intel Mac(2) M1 Mac(3) Linux
PCMacBook Pro Early 2015MacBook Air 2020MSI GF65 Thin 10UE
OSMonterey 12.5Monterey 12.5Ubuntu 22.04LTS
Anaconda/MinicondaAnaconda3-2022.05-MacOSX-x86_64Miniconda3-py39_4.12.0-MacOSX-arm64Miniconda3-py39_4.12.0-Linux-x86_64
python3.9.123.9.123.9.12
numpy1.16.61.19.51.16.6
opencv4.5.54.5.24.5.5

環境構築

以下、Intel Mac、M1 Mac、Windows、Linuxで環境構築方法が異なりますので、お使いのPCに合う章をお読みください。

Anaconda Python3環境構築(Intel Mac用)

Xcodeをインストールしていない場合は、App StoreからXcodeをインストールします。

次に以下に従い、Anacondaのインストールします。

以下のコマンドで環境を構築します。

conda update conda
conda update --all
conda create -n Tello python=3.9
conda activate Tello
conda install cmake boost ffmpeg pillow pybind11 numpy
conda install -c conda-forge blas opencv
export CC=gcc
export CXX=g++

blasのバージョンを確認します。

conda list blas

バージョン1.0の場合は、1.1以上に更新する必要がありますので、以下のコマンドで更新とバージョン確認を行います。

conda update -c conda-forge blas
conda list blas

Miniconda Python3環境構築(M1 Mac用)

こちらのサイトからMiniconda3 macOS Apple M1 ARM 64-bit pkgをダウンロードし、インストールします。

以下のコマンドで仮想環境を構築し、各種ライブラリをインストールします。

conda update conda
conda update --all
conda create -n Tello python=3.9
conda activate Tello
conda install cmake boost ffmpeg pillow pybind11 numpy
conda install -c conda-forge blas opencv cxx-compiler

blasのバージョンを確認します。

conda list blas

バージョン1.0の場合は、1.1以上に更新する必要がありますので、以下のコマンドで更新とバージョン確認を行います。

conda update -c conda-forge blas
conda list blas

Miniconda Python3環境構築(Windows用)

WindowsネイティブやWSL2 Ubuntuでの実行はハマりすぎて断念しました・・・(汗)

Windows PCをLinuxとのデュアルブートにしてLinuxとして次節を実行することで問題なくTello_Videoを実行できたので、Windowsの場合はこの方法が最も簡単だと思います。

以下の記事にしたがって、外部ディスクにUbuntuをインストールするのがお手軽です。

ただし、デュアルブートはトラブルも多いため、問題が起きた場合にご自分で対処方法を検索して対応できる方が自己責任でお願いします。

デュアルブートに成功したら、Ubuntuを起動し、次節「Miniconda Python3環境構築(Linux用)」に進んでください。

Miniconda Python3環境構築(Linux用)

コンパイルツール、ffmpeggitをインストールします。

sudo apt update
sudo apt upgrade
sudo apt install build-essential ffmpeg git

こちらのサイトからMiniconda3 Linux 64-bitをクリックしてインストーラをダウンロードします。

Miniconda installer for Linux

以下のコマンドでMinicondaをインストールします。

bash ~/ダウンロード/Miniconda3-py39_4.12.0-Linux-x86_64.sh
 または、
bash ~/Downloads/Miniconda3-py39_4.12.0-Linux-x86_64.sh

以下のコマンドで仮想環境を構築し、各種ライブラリをインストールします。

source ~/.bashrc
conda update conda
conda update --all
conda create -n Tello python=3.9
conda activate Tello
conda install cmake boost pillow pybind11 numpy
conda install -c conda-forge blas opencv
conda update -c conda-forge blas

Tello-PythonのダウンロードとH.264デコーダのビルド

ここから先はIntel Mac/M1 Mac/Linux共通です。

Tello-Python(Python3版)

Tello制御用のコードをPython3化してGitHubに載せてくれている方のコードをありがたく使わせていただきます。

git clone https://github.com/f41ardu/Tello-Python

H.264デコーダ

ここでつまづいている方が多いのではないかと思います。

Tello Videoを動かすにはH.264デコーダをビルドする必要があるのですが、上記Tello-Pythonに含まれるものではうまく行かなかったので、別途以下からH.264デコーダを入手します。

git clone https://github.com/DaWelter/h264decoder

H.264デコーダをCMakeを使ってビルドします。

cd h264decoder
mkdir build
cd build
cmake ..
cmake --build .

warning: ‘PyEval_InitThreads’ is deprecated … のようなWarningが出ますが、気にしなくて大丈夫です。

これでh264decoder.cpython-39-darwin.soという共有オブジェクトができるので、先にgit cloneしたPY3_Tello_Videopディレクトリにシンボリックリンクを作ります。(コピーしても良いです)

cd ../../Tello-Python/PY3_Tello_Videop
ln -s ../../h264decoder/build/h264decoder*.so .

ln -sに続く〜.soのファイル名は、環境によって異なる場合があるため、上記コマンドではワイルドカード*を使用して、ファイル名の違いがあっても実行できるようにしました。

元々あったlibh264decoder.soは削除します。

rm libh264decoder.so

Telloとの通信確認

TelloのHello World!(はじめてのプログラムの意味)とも言えるtello_state.pyを実行してTello_Videoサンプル実行前にTelloとの通信をテストしておきましょう。

現在、PY3_Tello_Videopのディレクトリにいることを想定しており、1つ上のディレクトリにtello_state.pyがあります。

実行前に1箇所だけ編集が必要な部分がありますのでvi等のテキストエディタで編集を行います。

viの使い方がわからない方は↓の動画でテキスト編集の方法を紹介していますので参考にしてください。

vi ../tello_state.py

以下の行に”.decode()”を書き足します。

out = response.replace(';', ';\n')
              ↓
out = response.decode().replace(';', ';\n')

この編集を行わないと以下のようなエラーが出ると思います。

Traceback (most recent call last):
File "tello_state.py.org", line 36, in <module>
out = response.replace(';', ';\n')
TypeError: a bytes-like object is required, not 'str'

ここで、Telloの電源を入れて、TELLOから始まる名前のWi-Fiに接続します。

TelloとのWi-Fi接続ができたら、以下のコマンドでtello_state.pyを実行します。

python ../tello_state.py

以下のようにTelloから受け取った各種状態を表す数値が表示されれば成功です。

Tello State:
mid:-1;
x:0;
y:0;
z:0;
mpry:0,0,0;
pitch:0;
roll:0;
yaw:0;
vgx:0;
vgy:0;
vgz:0;
templ:55;
temph:57;
tof:10;
h:0;
bat:39;
baro:103.58;
time:0;
agx:4.00;
agy:-16.00;
agz:-1008.00;

Telloを持って傾けると上記数値が変化すると思います。

tello_state.py実行後にターミナルの表示が崩れてしまう場合、resetと入力すると元に戻せます。

Tello_Video実行

importするモジュール名に合わせるためにtello.pyの編集を行います。

vi tello.py

以下tello.pyの先頭部分抜粋です。

import socket
import threading
import time
import numpy as np
#import libh264decoder                 // ****** この行をコメント ******
import h264decoder as libh264decoder   // ****** この行を追加 ******

これで準備完了です。

lsで以下のようなファイル構成になっていることを確認します。

(Tello) Mac$ ls
./                                h264decoder.cpython-39-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の電源を入れ、TELLOから始まる名前のWi-Fiに接続します。

TelloとWi-Fi接続できたら、あらかじめ作っておいたAnaconda仮想環境Telloのターミナルを立ち上げて、以下のコマンドでTello_Videoを実行します。

python main.py

以下のようにTelloのカメラ映像が画面に出れば成功です。

Snapshot!でJPG画像を保存できますが、この機能を利用する場合は、事前に以下のコマンドでimgディレクトリを作成しておく必要があります。

mkdir img

これで、Snapshot!を押すとimg以下にJPGファイルが作成されるようになります。

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

Takeoff、Landボタンで離着陸します。

W、S、A、D、矢印キー↑↓←→で移動でき、DistanceとDegreeのつまみで移動量を調節できます。

Flipはくるっと回りますので、十分にスペースに余裕のある場所で試しましょう。

トラブルシューティング

PythonプログラムでのTelloとの通信がうまくいかない場合、Telloのファームウェアが古いことが原因の可能性があります。

ファームウェアの更新はTello公式アプリから実施できるので、ケータイやタブレットにTello公式アプリをインストールし、以下の手順をお試しください。

設定(歯車マーク)→More→「・・・」→Firmware Version

ここでアップデート可能な場合は「Update」をタップします。

改造・遠隔操作編

以下の記事では、Tello-Videoを改造してMQTT通信で映像と操縦コマンドを送ることで、遠く離れた場所からTelloを動かす方法を紹介しています。

ご興味をお持ちの方はご覧ください。

まとめ

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

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

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

ものづくりに興味があり、いろいろ触り始めたらLinuxの知識が必要になって困っているという方向けに以下のページを作成しましたので、よろしければ参考にしてください。

Telloの入手方法

Telloは以下から購入することができます。

トイドローン Tello Powered by DJI

書籍紹介

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

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

入門 Python 3

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

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

参考文献

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