ドローンの制御について(AR.Drone編)
第3回目となります今回は、ドローン(AR.Drone)の制御方法について、紹介したいと思います。SDKによるドローン状態の取得、Nodeによるドローンの操作を行った実例を記します。
安井政人のめざせ!ROSマスター! 第3回
- 2015年11月04日公開
はじめに
こんにちは。NTTソフトウェアの安井です。第3回目となります今回は、ドローンの制御方法について、紹介したいと思います。
ドローンについて
私が普段利用しているドローンは、Parrot社 AR.Drone 2.0 と、Parrot社 Bebop Drone の2機種を利用しています。
今回は、AR.Drone 2.0 をターゲットにご紹介していきます。
まずは、簡単な製品概要です。
Parrot社 AR.Drone 2.0
- CPU: 1GHz ARM cortex A8(ARMv7 Processor rev2)
- Memory: DDR SDRAM 128MB
- Storage: NAND Flash memory 128MB
- OS: Linux(linux uclibc 2.6.32-9-g980dab2)
- WiFi: Wi-Fi /g/n
- Camera: HD Camera 1280x720
ドローンへの接続は、ドローンを親機としたWiFi接続が基本となります。
ssid は、ardrone-xxxxx という名前が設定されており、ドローンのデフォルトIPは、192.168.1.1 となっています。
SDKでの制御
動作確認は、Ubuntu 12.04で行います。
(※Ubuntu 14.04 でも実施してみましたが、コンパイルエラーが発生しました。)
ダウンロードしたファイルを、解凍した後、
$ cd ARDrone_SDK_2_0_1/Examples/Linux/ $ makeこれだけで、サンプルの動作確認が行えます。
$ cd Build/Release/サンプルの実行ファイルはここに配置されます。
$ ./linux_sdk_demoドローンの状態(バッテリー残量など)が標準出力で確認できます。
$ ./ardrone_navigation
カメラ映像の確認や、ドローン制御用のキー設定(キーボード、JoyStickなど)をGUIで行うことができます。
サンプルは、基本的にカメラ映像の取得やドローンの状態を取得するといったことができるようになっており、実際にドローンに飛行命令を送るためには、外部コントローラが必要であったため、飛行命令については、リモートでコマンドを簡単に送信して制御できるNodeを利用した制御で試してみました。
Nodeでの制御
1. ar-drone
$ npm install ar-droneこれでインストール完了です。 npm がインストールされていない場合は、インストールしてください。
$ sudo apt-get install npm
READMEに従い、サンプルプログラムを書きます。
$ vi sample.js var arDrone = require('ar-drone'); var client = arDrone.createClient(); client.createRepl();
作成したNodeプログラムを実行し、コマンドを入力することで、離陸と着陸の制御を確認することができます。
$ node sample.js drone> takeoff() drone> land()※スペルミスや括弧の付け忘れでは、動作しないので、注意が必要です。
takeoff()は、プロペラの回転がスタートし、回転数が上がってきた時点で50cmほど上昇する動きになります。
land() は、プロペラがストップする動きになっています。
takeoff()直後にland()を実行すれば、プロペラが少し回転するのみで、停止します。
2. ardrone-webflight
$ git clone https://github.com/eschnou/ardrone-webflight.git $ cd ardrone-webflight $ npm install $ bower install //bower をインストールしていない場合はインストールしてください。 $ sudo npm install bower -g用意されたNodeプログラムを実行します。
$ node app.jsブラウザで、アプリの画面にアクセスします。
http://localhost:3000
フライト画面がブラウザ上に表示され、キーボードの「t」(離陸)と「l」(着陸)で制御を確認することができます。
ar-drone と同様に、
「t」は、プロペラの回転がスタートし、回転数が上がってきた時点で50cmほど上昇する動きになります。
「l」は、プロペラがストップする動きになっています。
「t」直後に「l」を入力すれば、プロペラが少し回転するのみで、停止します。
実際に、離陸させたときの画像です。
離陸する前は、画像中央部分の床に置いていたのですが、離陸させた時点で右へ移動しました。自身のプロペラの風や、空調の風の影響を受けるのが特徴になっています。屋内で飛ばす際は、注意が必要になってきます。
ということで、SDKによるドローン状態の取得、Nodeによるドローンの操作を行いました。 これらを組み合わせることで、バッテリー状態を管理して残量が減って来た場合は、自動で着陸する、といったことも可能になると思うので、制御用のサンプルを作っていきたいと考えています。
おわりに
今回はAR.Droneの制御方法について紹介しました。次回は、Bebop Droneの制御方法について紹介したいと思います。ROSでの制御については、もう少し先でご紹介いたします。次回もご購読いただけると幸いです。
新しい技術や、スキルの習得を好み、幅広い分野に柔軟に対応できるオールマイティなシステムエンジニア。 最近ではドローンやロボットの技術に注目し、業務を通じてNTTテクノクロスのドローン先駆者になるべく、絶賛奮闘中。 プライベートでは三姉妹のパパ。家の中は男一人で少し肩身が狭いですが、逆境にも負けず子育ても頑張っています!!