TelloとOpenCVを組み合わせた自動制御入門(1. 環境構築編)
こんにちは、エヌデーデーの飯島と申します。弊社ではドローン研究グループを立ち上げて、ドローンビジネスの模索、ドローン技術の開発、ドローンによる教育など幅広い活動しています。
今回は、「TelloとOpenCVを組み合わせた自動制御入門」と題して、ドローンTelloの自動制御についてご紹介しようと思います。本記事では「1. 環境構築編」ということで、Telloの自動制御を行うための環境構築方法についてご説明いたします。「2. 制御プログラム編」では、Telloの自動制御のプログラミングについて解説していますので、そちらも合わせてご参照ください。
Telloとは?
環境構築の説明に入る前にドローンTelloについて簡単に説明します。
TelloはDJI社のトイドローンです。DJI社は中国のドローンメーカーで、大小・用途様々なドローンを開発・販売していますが、その中でもTelloは最小の部類に入るものです。Telloの特徴は小さいだけでなく、正面にカメラがついており動画を撮影できる他、Pythonのプログラムによる遠隔操作ができるようになっています。また、PythonのSDKは公開されており、誰でも使うことができます。
そのため、今回の目的であるドローンの自動制御もお手軽に行うことができます。
前提条件
環境構築前の環境として下記を想定しています。
- OSはWindows 10 Homeをインストール済
- Tello(通常版)またはTello EDUを所持している
尚、本記事は2020年10月21日に書かれたもので情報が古い可能性があります。ご留意願います。
環境構築手順
Telloの環境構築は次のようなステップで行います。
- Tello-Python SDKをダウンロードする
- Pythonをインストールする
- 必要なPythonモジュールを追加する
- Boostをインストールする
- FFmpegをインストールする
- Visual C++ 2013ランタイムコンポーネントをインストールする
- libh264decoderをコピーする
- サンプルプログラムを実行し動作確認する
各ステップについて説明していきます。
Tello-Python SDKのダウンロード
DJI社が公式で提供しているTello-Python SDKをダウンロードします。Gitでクローンするか、「Code」→「Download ZIP」でZipファイルをダウンロードして解凍します。必要なのは「Tello_Video」フォルダ配下の一式です。今回の環境構築ではTelloVideoのサンプルプログラム(main.py)が動作するようにしていきます。
尚、TelloVideoにはインストーラも付属していますが、作成時期が古いせいかうまく動作しない場合があります。ですので、本記事の手順に従って環境構築した方が確実かと思います。
Pythonのインストール
こちらのサイト等を参考に、Windows版Python 2.7をインストールします。
(3.x系ではうまく動作しない可能性があるのでご注意ください)
デフォルトですと、「C:¥Python2.7」配下にインストールされると思います。
インストールしたら、こちらのサイト等を参考に、環境変数Pathに「<Pythonのインストールフォルダ>」(通常は「 C:¥Python2.7 」)及び「 <Pythonのインストールフォルダ> ¥Script」を追加します。
また、環境変数PYTHONPATHを新規作成し、「<Pythonのインストールフォルダ>¥Lib¥site-packages」を設定します。
コマンドプロンプトから下記コマンドを実行してPythonのバージョンが表示されればOKです。
python --version
Pythonモジュールのインストール
TelloVideoの動作に必要なPythonモジュールをインストールします。インストールするPythonモジュールは下記の通りです。
- NumPy
- Matplotlib
- OpenCV-Python(ver.3.4.2.17)
- Pillow
それぞれのインストール手順について説明していきます。
まず、pipを最新版にしておきます。pipとはPythonモジュールのパッケージ管理ツールです。コンソールを開いて下記コマンドを実行します。pipでのインストールは成功すると「Successfully 〜」のようにメッセージが出るはずです。
python -m pip install --upgrade pip
次に、Numpyをインストールします。これもコンソールから実行します。
python -m pip install numpy
続いて、Matplotlibをインストールします。付随して依存関係のあるパッケージについてもインストールされるはずです。
python -m pip install matplotlib
続いて、OpenCVをインストールします。OpenCVのインストールではバージョンを指定します。
python -m pip install -v opencv-python==3.4.2.17
最後に、Pillowをインストールします。
python -m pip install pillow
以上でPythonモジュールのインストールは完了です。
Boostをインストールする
Boostをインストールします。BoostはオープンソースのC++用ライブラリです。
まず、下記のBoostのインストーラをここからダウンロードします。
64bit版: boost_1_68_0-msvc-12.0-64.exe
32bit版: boost_1_68_0-msvc-12.0-32.exe
インストーラをダブルクリックで起動し、インストールします。
インストールが完了したら、「<インストール場所>¥lib64-msvc-12.0」(または、lib32-msvc-12.0)配下にある「boost_python27-vc120-mt-x64-1_68.dll」(または、boost_python27-vc120-mt-x32-1_68.dll)を、「<Pythonのインストール場所>¥Lib¥site-packages」配下にコピーします。
FFmpegのライブラリ取得
FFmpegをインストールします。FFmpegは動画再生・変換のためのソフトウェアです。必要なのは、FFmpegに含まれるdllファイル一式です。
まず、FFmpegのダウンロードサイトからffmpeg-release-full-sharedの7zファイルをダウンロードします。
次に7zファイルを解凍します。7zファイルは解凍・圧縮ソフト7-Zipにより解凍できますので、必要なら7-Zipもインストールします。
解凍したら、「<解凍先フォルダ>¥bin」配下にある「全てのdllファイル」を 「<Pythonのインストール場所>¥Lib¥site-packages」配下にコピーします。
Visual Studio 2013 C++ランタイムコンポーネントのインストール
下記URLからVisual Studio 2013 C++ランタイムコンポーネントのインストーラをダウンロードします。
(Tello-Python SDKにて記載されているVisual Studioのバージョンはこちらのバージョンとなっています。最新のバージョンでも動作するかもしれませんが、動作検証はしておりませんのでご了承ください)
64bit版: vcredist_x64.exe
32bit版: vcredist_x86.exe
インストーラを起動してインストールします。「Repair」を押せばOKです。
libh264decoderのコピー
最初にダウンロードした「Tello-Python SDK」の中にある「libh264decoder」をコピーします。
以下のフォルダから「libh264decoder.pyd」をコピーし、 「<Pythonのインストール場所>¥Lib¥site-packages」配下にペーストします。
64bit版:<Tello-Python SDKの展開先>¥Tello-Python-master¥Tello_Video¥h264decoder¥Windows¥x64
32bit版:<Tello-Python SDKの展開先>¥Tello-Python-master¥Tello_Video¥h264decoder¥Windows¥x84
サンプルプログラムの動作確認
Tello-Python SDKが用意しているサンプルプログラムを実行し、動作確認をします。
サンプルプログラムは「Tello_Video」内の「main.py」ですので、そちらを実行します。
まず、Telloを起動し、TelloとWi-Fi接続します。TelloのSSIDは「TELLO-XXXXXX」(XXXXXXは数字)のようになっているので、SSIDを探して接続します。
次にコマンドプロンプトを起動し、下記コマンドにより「Tello_Video」に移動します。
dir <Tello-Python SDKの展開先>¥Tello_Video
下記コマンドにより「main.py」を実行します。
python main.py
うまくいけば、Telloのカメラ映像といくつかのボタンが配置されたウィンドウが開きます。これで動作確認は完了です。