(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 |
---|---|---|---|
PC | MacBook Pro Early 2015 | MacBook Air 2020 | MSI GF65 Thin 10UE |
OS | Monterey 12.5 | Monterey 12.5 | Ubuntu 22.04LTS |
Anaconda/Miniconda | Anaconda3-2022.05-MacOSX-x86_64 | Miniconda3-py39_4.12.0-MacOSX-arm64 | Miniconda3-py39_4.12.0-Linux-x86_64 |
python | 3.9.12 | 3.9.12 | 3.9.12 |
numpy | 1.16.6 | 1.19.5 | 1.16.6 |
opencv | 4.5.5 | 4.5.2 | 4.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用)
コンパイルツール、ffmpeg
、git
をインストールします。
sudo apt update sudo apt upgrade sudo apt install build-essential ffmpeg git
こちらのサイトからMiniconda3 Linux 64-bitをクリックしてインストーラをダウンロードします。
以下のコマンドで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 .
元々あった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は以下から購入することができます。
書籍紹介
Pythonの学習におすすめの書籍を紹介します。
やはりオライリーはハズレが無いので1冊持っていて損はないと思います。
基礎から応用までわかりやすい説明でコード例も多数載っていて、初学者の入門書としては必要十分と感じています。
さらにPythonらしいコードの書き方も言及されていて、スマートなコードが書けるようになります。
参考文献
- 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)
- 外部ディスクにUbuntuをインストールして、基本Windows・たまにUbuntuとして使う(https://take6shin-tech-diary.com/install_ubuntu2usb/)