Edited at

AmazonDashButtonを押したらドローンにハッピーターンを運んできてもらう

More than 1 year has passed since last update.

みなさん、こんにちわ。

オープンストリームのKokichiです。

さて、今回はボタンを押したらドローンに物を運んでもらうというお話です。


使うもの&やること

ドローンParrot Mambo

このドローンにはアームがあり、これを装着することで物(最大4 g)を運べるようになります。

運ぶ物:ハッピーターン1枚

私はハッピーターン中毒者なので、ハッピーターン運んでもらいます。重さは約4gなので、運べそうです。

(ちなみカロリーは約21kcal)

ボタンAmazon Dash Button

アマゾンプライムデーの時に大量購入したAmazon Dash Buttonを使います。もちろん正しくない方向で使用します。

管制塔:Raspberry Pi 3(OS:Raspbian GNU/Linux 8.0 jessie)

ドローンを操作したり、Amazon Dash Buttonシグナルを検知したり色々やってもらいます。

今回はOSはRaspbian(Jessie)を使用しますが、最新のRaspbian(Stretch)でも問題ないと思います。

ということで、Amazon Dash Buttonを押したらドローンにハッピーターンを運んできてもらうことにします。

overview_image.png


作業内容

大まかな作業は以下の2つなります。


  • Raspberry Piからドローンを操作する。

  • Amazon Dash Buttonが押されたらRaspberry Piでシグナルを検知する。

Raspberry PiへのOSセットアップは完了しており、Wi-fi接続されている前提で進めます。

また、作業はコマンド操作がメインになるため、Raspberry PiにSSH接続してコマンド実行できるようにしています。


Raspberry Piからドローンを操作する

ここでの作業は以下になります。


  1. ソフトウェアのインストール


  2. pyparrotのダウンロード(ドローン操作ライブラリ)

  3. Pythonプログラムを書く

  4. ドローンを操作する


ソフトウェアのインストール

Raspberry Piにドローンを操作するために必要なソフトウェアをインストールしていきます。

Python3はデフォルトでインストールされているためインストール作業はしてません。

まずはパッケージを最新にします。


raspbian

$ sudo apt-get update

$ sudo apt-get upgrade

ドローンとWi-Fi接続するためのソフトウェアをインストールします。


raspbian

$ sudo pip3 install zeroconf


ドローンとBluetooth接続するためのソフトウェアをインストールします。


raspbian

$ sudo apt-get install bluetooth

$ sudo apt-get install bluez
$ sudo apt-get install python-bluez
$ sudo pip3 install untangle
$ sudo apt-get install python-pip libglib2.0-dev
$ sudo pip3 install bluepy
$ sudo apt-get update


pyparrotをダウンロード

作業ディレクトリを作成します。


raspbian

$ mkdir -p  ~/work/drone

$ cd ~/work/drone

作業ディレクトリ配下にpyparrotをダウンロードし解凍します。

(2017/12/13 時点で最新のリリース1.2.1をダウンロードしています。)


raspbian

$ wget https://github.com/amymcgovern/pyparrot/archive/1.2.1.tar.gz

$ tar -zxvf 1.2.1.tar.gz
$ rm -r 1.2.1.tar.gz
$ cd pyparrot-1.2.1


ドローンのBLEアドレスを調べる

ドローンの電源を入れ、先程ダウンロードしたpyparrot-1.2.1フォルダ中のfindMambo.pyを実行します。


raspbian

$ sudo python3 findMambo.py




FOUND A MAMBO!
Device xx:xx:xx:xx:xx:xx (random), RSSI=-00 dB  // 見つかるとドローンのBLEアドレスが表示される
Complete Local Name = Mambo_*****

見つかったBLEアドレスは次のプログラム作業で使用するのでメモをしておく。


Pythonプログラムを書く

先程メモしたBLEアドレスを書き換えてdroneApp.pyという名前でpyparrot-1.2.1フォルダ配下に保存します。


droneApp.py

from Mambo import Mambo

# 先程メモしたドローンのBLEアドレスに書き換えください
mamboAddr = "xx:xx:xx:xx:xx:xx"

# ドローンのオブジェクト作成
# ドローンのアームはBLE接続しないと操作できないためWi-FiはOFFにしてBLE接続する
mambo = Mambo(mamboAddr, use_wifi=False)

# ドローンと接続開始
print("trying to connect")
success = mambo.connect(num_retries=3)
print("connected: %s" % success)

# アームを開く
print("open the claw")
mambo.open_claw()
mambo.smart_sleep(5)

# アームを閉じる
# ここでハッピーターンをキャッチ
print("close the claw")
mambo.close_claw()
mambo.smart_sleep(5)

# 離陸
print("taking off!")
mambo.safe_takeoff(5)

# 前進
print("Flying direct: going forward")
mambo.fly_direct(roll=0, pitch=50, yaw=0, vertical_movement=0, duration=1)
mambo.smart_sleep(5)

# アームを開く
# ここでハッピーターンをリリース
print("open the claw")
mambo.open_claw()
mambo.smart_sleep(5)

# 着陸
print("landing")
mambo.safe_land(5)
mambo.smart_sleep(5)

# ドローンと接続解除
print("disconnect")
mambo.disconnect()



テスト飛行

ドローンを起動して、書いたdroneApp.pyを実行してボタンを押します。


droneApp.py

sudo python3 droneApp.py


書いたプログラムはアームの開閉と前進しかしてませんが、この他にもいろんな動きができます。

もっといろんな動き試したい方は、pyparrotのGithubにメソッドの説明がありますので、そちらを参照してください。また、ダウンロードしたpyparrot-1.2.1にサンプルコードがあるのでそちらも参考にしてみてください。

続いてAmazon Dash Buttonの設定作業に移ります。


Amazon Dash Buttonが押されたらRaspberry Piでシグナルを検知する

ここでの作業は以下になります。


  1. Amazon Dash Buttonのセットアップ

  2. Node.jsをインストール


  3. dash-buttonモジュールのインストールとセットアップ

  4. Amazon Dash ButtonのMACアドレスを調べる

  5. Node.jsプログラムを書く


Amazon Dash Buttonのセットアップ

Amazonショッピングアプリのメニューから「アカウントサービス」→「Dash端末」→「新しい端末をセットアップ」に移動してセットアップ開始してください。Wi-Fi設定まで完了すると「商品を選択」画面になります。ここで右上の「×」を押し、ダイアログが表示されたら「セットアアップを終了」を選んで完了させてください。

DropShadow ~ IMG_1198.png


Node.jsをインストール

Node.jsをインストールします。私の環境ではapt-getを使用してNode.jsをインストールすると古いバージョンがインストールされるため、今回は公式からパッケージをダウンロードしてインストールするようにしました。

dash-buttonモジュールはNODE_MODULE_VERSION59以上のものが必要なため、node-v9.2.1-linux-armv7l.tar.xzをダウンロードします。


raspbian

$ cd ~/Downloads

$ wget https://nodejs.org/dist/v9.2.1/node-v9.2.1-linux-armv7l.tar.xz
$ cd /usr/local
$ sudo xzcat ~/Downloads/node-v9.2.1-linux-armv7l.tar.xz | sudo tar xvf -
$ sudo mv node-v9.2.1-linux-armv7l nodejs

PAHTを設定します。~/.profileに以下を追記してください。


.profile

if [ -d "/usr/local/nodejs/bin" ] ; then

PATH="/usr/local/nodejs/bin:$PATH"
fi

追記したPAHTを反映させます。


raspbian

$ source ~/.profile


nodeコマンドが実行できるか確認します。


raspbian

$ node -v

v9.2.1

コマンドの確認ができたらNode.jsのインストールは完了です。


dash-buttonモジュールのインストールとセットアップ

作業フォルダを作成します。


raspbian

$ mkdir -p  ~/work/dashButton

$ cd ~/work/dashButton

package.json を生成します。

コマンド実行あとに色々質問されますが、全てENTERでOKです。


raspbian

$ npm init


dash-buttonをインストールします。


raspbian

$ sudo apt-get install libpcap-dev

$ npm install --save dash-button

package.jsonを編集します。


package.json

{

"name": "dashButton",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"dash-button": "^3.2.0"
},
"devDependencies": {},
"scripts": {
"scan": "dash-button scan"  //←これを追加
},
"author": "",
"license": "ISC"
}


Amazon Dash ButtonのMACアドレスを調べる

MACアドレスを調べます。


raspbian

$ sudo npm run scan

// Amazon Dash Buttonを押す

Scanning for DHCP requests and ARP probes on en0...
Detected a DHCP request or ARP probe from xx:xx:xx:xx:xx:xx ←これがボタンのMACアドレス


調べたMACアドレスは次のプログラム作業で使用するのでメモをしておいてください。


Node.jsプログラムを書く

ボタンが押されたらシグナルをフックして、ドローンを起動するプログラムを書きます。

先程メモしたMACアドレスを書き換えてdash.jsという名前で保存してください。


dash.js

// モジュール読み込み

const DashButton = require("dash-button");
const exec = require('child_process').exec;

// Amazon Dash ButtonのMACアドレス
const DASH_BUTTON_MAC_ADDRESS = "xx:xx:xx:xx:xx:xx";

console.log("Listening!");

// Amazon Dash Buttonからのシグナル監視
let button = new DashButton(DASH_BUTTON_MAC_ADDRESS);
let subscription = button.addListener(() => {
console.log("Execute drone program!!!!!");
exeDroneProgram();
});

//ドローンのプログラムを実行する関数
function exeDroneProgram() {
exec('python3 ../drone/pyparrot-1.2.1/dronApp.py', (err, stdout, stderr) => {
if (err) { console.log(err); }
console.log(stdout);
});
}



ハッピーターンを運んできてもらう

書いたdash.jsを実行してボタンを押します。


raspbian

$ sudo node dash.js 

Listening!
// Amazon Dash Buttonを押す

ハッピーターン運べました!


参考