情報畑でつかまえてロゴ
本サイトは NTTテクノロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

ドローンの制御について(BebopDrone編)

第4回目となります今回は、ドローン(Bebop Drone)の制御方法について、紹介したいと思います。SDKによるドローン状態の取得やドローンの操作を行った実例を記します。

はじめに

こんにちは。NTTソフトウェアの安井です。第4回目となります今回は、前回に引き続きドローンの制御方法について、紹介したいと思います。

ドローンについて

今回使用するドローンは、Parrot社 Bebop Drone になります。
まずは、簡単な製品概要です。

Parrot社 Bebop Drone



  • CPU: Dual-core ARM Contrex-A9(ARMv7 Processor re7)
  • Memory: DDR SDRAM 384MB
  • Storage: Flash memory 8GB
  • OS: Linux(Linux BebopDrone-E103019 3.4.11)
  • WiFi: Wi-Fi 802.11a/b/g/n/ac
  • Camera: Full HD Camera 1920x1080
  • gcc: gcc version 4.6.3(Sourcery CodeBench Lite 2012.03-57)

ドローンへの接続は、ドローンを親機としたWiFi接続が基本となります。
ssid は、BebopDrone-xxxxx という名前が設定されており、ドローンのデフォルトIPは、192.168.42.1 となっています。

SDKでの制御

動作確認は、Ubuntu 14.04で行います。
(※Ubuntu 12.04 でも実施してみましたが、ffmpeg で利用しているライブラリとの相性が悪くコンパイルエラーが発生しました。)
インストールから、動作確認までの手順をご紹介していきます。
SDKをダウンロードします。
$ git clone https://github.com/ARDroneSDK3/ARSDKBuildUtils.git
ビルドに必要なパッケージをチェックしてくれるツールがあるため、そちらで必要なパッケージを確認します。
$ cd ARSDKBuildUtils
$ ./CheckEnv.py
不足しているパッケージは、チェックがOKとなるまで、パッケージ名を指定して、インストールを行います。
$ sudo apt-get install [pkg name]
// インストール完了後、再度チェックを行い、結果を確認する。
$ ./CheckEnv.py
---
Unix                : OK !
---
次に、チェックツールでは確認できない以下のパッケージをインストールしていきます。
(私が試した環境では、必要でしたので、インストールされていない場合は、インストールが必要です。)
// JDK
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
// openssl
$ sudo apt-get install openssl
$ sudo apt-get install libssl-dev
// libavformat-dev
$ sudo apt-get install libavformat-dev
// libncurses5-dev
$ sudo apt-get install libncurses5-dev
// ffmpeg
$ sudo add-apt-repository ppa:mc3man/trusty-media
$ sudo apt update
$ sudo apt install ffmpeg
// libswscale-dev
$ sudo apt-get install libswscale-dev
// mplayer
$ sudo apt-get install mplayer
ビルドを行います。Ubuntu でのビルドのため、OSのタイプは、Unixを指定します。
$ ./SDK3Build.py -t Unix
ビルド完了後、一つ上のpath に、サンプルアプリが作成されます。
$ cd ../Samples/Unix
SDKによる飛行確認のためには、「BebopDroneDecodeStream」というサンプルアプリを使用します。
$ cd BebopDroneDecodeStream
$ make
ドローンと接続をし、サンプルを実行することで、キーボード操作による飛行が可能となります。
$ make run
コンソールに、操作方法が表示されるため、キーボード操作で制御が可能です。
Arrow keys to move ;
'z' = up ; 's' = down ; 'q' = yaw left ; 'd' = yaw right;
Spacebar to take off/land ;
'k' = move camera down ; 'i' = move camera up ; 'j' = move camera left ; 'l' = m
ove camera right ;
'm' = EMERGENCY
'esc' to quit
Battery: 72
speceキーで、離陸(take off)と着陸(land)の確認ができます。
q キーは、左回転。d キーは、右回転。となっており、前後左右への移動は、サンプルでは実装されていません。
バッテリーの残量も、確認することができます。
実際に、離陸させたときの画像です。


室内は、スペースが狭く、壁やドア近くになってしまうので、なかなか実験が難しいです。
サンプルを改良して、前後左右にも制御できるようにしておいた方がよさそうです。(現在実装中)

Nodeでの制御

Node(nodejs)での制御は、OSSのパッケージを利用して確認しました。

node-bebop
$ npm install node-bebop
これでインストール完了です。 npm がインストールされていない場合は、インストールしてください。
$ sudo apt-get install npm

"How to Use"に従い、サンプルプログラムを書きます。
$ vi sample.js
var bebop = require('node-bebop');
var drone = bebop.createClient();
drone.connect(function() {
drone.takeOff();
setTimeout(function() {
drone.land();
}, 3000);
});

離陸して5秒後に着陸というコードだったのですが、少し怖いので、3秒にして確認しました。作成したNodeプログラムを実行することで、離陸と着陸の制御を確認することができます。
$ node sample.js
飛行確認後、3秒を5秒に変更して確認したところ、ドローンが着陸せずにホバリングしたまま、制御不能に。。。
慌てて、3秒にコードを戻し、実行することで、着陸させました。
ということで、以下のように、別ファイルで緊急時のサンプルを用意しておくのがよいかと思います。
// 着陸用サンプル
$ vi land.js
var bebop = require('node-bebop');
var drone = bebop.createClient();
drone.connect(function() {
drone.land();
});
// 緊急時用サンプル(着陸コマンドをなげてもダメなら緊急着陸コマンドを送る)
$ vi emergency.js
var bebop = require('node-bebop');
var drone = bebop.createClient();
drone.connect(function() {
drone.emergency();
});

おわりに

今回はBebop Droneの制御方法について紹介しました。次回は、ROSを利用したドローンの制御について、紹介したいと思います。次回もご購読いただけると幸いです。

著者プロフィール
安井 政人
安井 政人
新しい技術や、スキルの習得を好み、幅広い分野に柔軟に対応できるオールマイティなシステムエンジニア。 最近ではドローンやロボットの技術に注目し、業務を通じてNTTテクノクロスのドローン先駆者になるべく、絶賛奮闘中。 プライベートでは三姉妹のパパ。家の中は男一人で少し肩身が狭いですが、逆境にも負けず子育ても頑張っています!!