スポンサーリンク

市販ドローン

Parrot bebop2をNode.jsで操作してみた

Parrot bebop2は
プログラミング可能な市販ドローン
ということで、

実際にNode.jsで操作できるか試してみました。
検証のため、Mac上で簡単なNode.jsプログラムを書いて
実行してみます。

準備

準備するものは

・Parrot bebop2
・Mac
・Node.js開発環境

だけです。

接続

iPhoneで操作するときと同様に、ドローンとMacをWifiで繋ぎます。
MacのWifi接続先を、Wifiの親機であるBebop2のネットワークを選択し、
確実に接続します。

無事に接続できると、
Mac側は192.168.42.xxのIPアドレスが割り振られ、
Bebop2側は192.168.42.1でアクセスできるようになります。

※Bebop2に接続しているときは、
当然インターネットには繋がっていない状態なので、
必要な場合はWifi接続先を切り替えましょう。

Node.jsプログラム

ここからは、ひたすらターミナルからのコマンド操作です。

Node.jsモジュール

適当な作業ディレクトリに移り、新規でNode.jsアプリを作成します。

npm init

ここで、今回一番重要な作業をします。

Node.jsからBebop2を操作するのに必要な
node-bebopモジュールのインストールです。

このモジュールは、Parrotから正式に配布されているものではなく、
どなたか心優しい第三者が有志で作り、公開してくださっている
ありがたい代物です。

オープンソースでMITライセンスなので、
わざわざ苦労して開発せずとも、再利用して恩恵を受けることができます。
公開くださった方々、ありがとうございます!

とはいえ、その分自己責任ですし、ドローンの操作となると危険がつきものですので
使用する際は慎重に行わないといけません。

インストールは↓のコマンドを実行します。

npm install node-bebop

基本的に、node-bebopの使い方は
node-bebopのGithubを参考にしてます。
https://github.com/hybridgroup/node-bebop

離陸・着陸

まずは、1秒後に離陸して、その3秒後に着陸させてみます。

var bebop = require('node-bebop');

var drone = bebop.createClient();

drone.connect(function() {
    drone.on('ready', function(){
        setTimeout(function() {
            drone.takeOff();
        }, 1000);

        setTimeout(function() {
            drone.land();
        }, 4000);
    });
});

このプログラムを↓コマンドで呼び出して実行すると、、

node index.js

見事に1秒後に浮き上がり、着陸に成功しました!

バッテリー残量・位置・高度・スピード・傾き等の取得

続いて、ドローンの各種センサーデータを取得して
ログをはくようにしてみます。

var bebop = require('node-bebop');

var drone = bebop.createClient();

drone.connect(function() {
    drone.on('ready', function(){
        drone.on('battery', function(result){
            console.log('Battery');
            console.log(result);
	});
        drone.on('PositionChanged', function(result){
            console.log('PositionChanged');
            console.log(result);
        });
        drone.on('SpeedChanged', function(result){
            console.log('SpeedChanged');
            console.log(result);

	});
	drone.on('AttitudeChanged', function(result){
            console.log('AttitudeChanged');
            console.log(result);
	});
	drone.on('AltitudeChanged', function(result){
            console.log('AltitudeChanged');
            console.log(result);

	});
    });
});


これを実行すると、、、

Battery
99
SpeedChanged
{ speedX: 0, speedY: 0, speedZ: 0 }
AltitudeChanged
{ altitude: 0 }
AttitudeChanged
{ roll: 0.0005007538129575551,
  pitch: -0.0005832064780406654,
  yaw: 3.0114099979400635 }
SpeedChanged
{ speedX: 0, speedY: 0, speedZ: 0 }
AltitudeChanged
{ altitude: 0 }
AttitudeChanged
{ roll: 0.00009098551527131349,
  pitch: -0.0010168136795982718,
  yaw: 3.0112364292144775 }
AltitudeChanged
{ altitude: 0 }
AttitudeChanged
{ roll: -0.00006515673157991841,
  pitch: -0.0012804582947865129,
  yaw: 3.0115065574645996 }
PositionChanged
{ latitude: 500, longitude: 500, altitude: 500 }
SpeedChanged
{ speedX: 0, speedY: 0, speedZ: 0 }
...

上手い具合に表示することができました。
バッテリー残量に関しては、0〜100までの整数で、
プログラム実行初期と値が変わった時だけ取得できます。

スピード、高度、傾き等は
ほぼ1秒間隔でレスポンス返ってきます。

位置に関しては、
スピード、高度、傾きよりももう少し遅い間隔ですが、
定期的に取得できるようです。

位置のlatitudeとlongitudeの値が500になってますが、
これは、ドローン本体の電源投入後、時間があまり経っておらず
GPSセンサーが衛星をまだ捕捉できていないために発生してます。

しばらく時間が経ってGPS衛星を補足すれば
緯度経度の細かい値が取得できるようになります。

カメラ映像の取得

Githubを見ると、なんとカメラの映像をストリーミングで取得できるみたいです。
サンプルプログラムを見ると、ストリーミングを取得毎に
opencvで画像解析処理をかませて、、
なんという面白そうなことまで。

早速、カメラ映像の取得に試みます。

var bebop = require('node-bebop');
var fs = require('fs');

var drone = bebop.createClient();
var output = fs.createWriteStream("./video.h264");
var video = drone.getVideoStream();

drone.connect(function() {
    drone.on('ready', function(){
        drone.MediaStreaming.videoEnable(1);
        drone.MediaStreaming.videoStreamMode(0);
    });
});


実行すると、、、

何も起こらない・・・

どこか間違っていたかな?と思い、
ログ吐き出してみたり、色々やりましたが
Bebop2からレスポンスがない模様です。

困ったので、ParrotのDeveloper Communityでも検索してみました。

すると、最近のFirmwareのアップデートで
カメラ映像のストリーミング配信方法が変更になったとのこと。
このnode-bebopでは、以前の方式が使われているため、取得できないんですね。

カメラ映像はこのnode-bebopモジュールではできないのか。。
Node.jsではここまでが限界か。。

と思いましたが、なんとか取得する方法がありました。

カメラ映像のストリーミング配信の取得方法については次回詳しくお伝えします。

ピックアップ記事

  1. ドローン練習に行ってきました #3
  2. かっこいいアンテナホルダーを自作する方法
  3. プログラミングができる市販ドローン”Parrot Bebop2…
  4. フライトコントローラーSP Racing F3をRaspberryPiで操作
  5. トイドローンTelloでGo言語プログラミング!フロントカメラのビデオ映像も取得…

関連記事

  1. 市販ドローン

    DJIとIntelの最新技術の結晶 80gの小型ドローンTello

    中国のRyze Tech というメーカーの小型ドローンを購入しました。…

  2. 市販ドローン

    プログラミングができる市販ドローン”Parrot Bebop2″開封レビュー…

    今回、新たに一台ドローンを迎え入れました。購入したドローンは・・・…

  3. Webプログラミング

    Parrot Bebop2のカメラ映像をリアルタイムにYouTube配信する方法

    Node.jsを使い、Parrot Bebop2をどこまでコントロール…

おすすめ記事

最近の記事

  1. トイドローンTelloでGo言語プログラミング!フロントカメ…
  2. DJIとIntelの最新技術の結晶 80gの小型ドローンTe…
  3. Parrot Bebop2のカメラ映像をリアルタイムにYou…
  4. Parrot bebop2をNode.jsで操作してみた
  5. プログラミングができる市販ドローン”Parrot…

月別アーカイブ

  1. プロポ

    バッテリー切れで墜落するのを防ぐには
  2. RaspberryPi

    フライトコントローラーSP Racing F3をRaspberryPiで操作
  3. RaspberryPi

    iPhoneでドローン(SPRacingF3)を操縦する方法
  4. ドローン制作

    210サイズドローンの制作
  5. 市販ドローン

    Parrot bebop2をNode.jsで操作してみた
PAGE TOP