スターウォーズエピソード7皆さんもうみましたか?
スターウォーズシリーズの待望の新作ですね。
今日はこの中で出てくるBB-8をCylon.jsで動かせたのでその話です。
#iotlt
で話した内容の詳細版です。
https://speakerdeck.com/n0bisuke/javascriptdesutauozufalsebb-8wodong-kasitayo-di-11hui-number-iotlt-5fen
BB-8
スターウォーズエピソード7に出てくるドロイドです。
R2D2やC3POが有名ですが、本作品ではBB-8が活躍します。
Sphero
ロボティクスボールと言われています。
後述するCylon.js(やGobotなど)経由でプログラム制御出来ます。
Cylon.js
Node.jsでハードウェア制御するフレームワーク(ライブラリ)です。
この辺りの界隈は英語圏でJavaScript Robotics
って言っているみたいですね。
過去にJSオジサン
でCylon.jsでIoT、JS Board Shibuya
でCylon.jsの闇という発表もしているので、こちらも参考にして下さい。
BB-8とSpheroは基本同じだけど...
BB-8はSpheroと同メーカーが作っていて基本的にはSpheroと同じ機構です。
基本的にはSpheroで出来ることはBB-8も出来ます。
なのでCylon.jsで制御できるかと思いきや、 接続方式が違うみたいです。
- SpheroはBluetooth
- BB-8はBLE
この違いがあって、Spheroはペアリングする必要があったのですがBB-8はBLEのGATT経由で制御します。
GATTとか分からない人は参考までにこちらをごらんください
接続方式の違いをCylon.jsが吸収してくれました
今まではCylon.jsが対応していなかったので案の定issueが。
https://github.com/orbotix/sphero.js/issues/26
二日前くらい(2016/1/13)に確認したらBB-8対応したよって話が出てました。
(正確な時期は分からないですが汗)
https://github.com/hybridgroup/cylon-sphero-ble
ということで Node.jsでBB-8が動かせるようになりました!
##実際に動かしてみます。
購入はAmazonから買えます!
http://amzn.to/1KgydQM
まずは環境確認
- Mac book pro mid 2014
- Mac OS 10.10
- Node.js v5.3.0
UUIDを探す
BB-8のUUIDを探します。まずはcylon-ble
をグルーバルインストールします。
$ npm i -g cylon-ble
cylon-ble-scan
コマンドが使えるようになるのでsudo実行しましょう。
MacのBluetoothはonにしておいてください。
$ sudo cylon-ble-scan
sudo cylon-ble-scan
Password:
Starting scan.
Peripheral discovered!
Name: undefined
UUID: 28f97a8aeb034db4b82c0c3e960fc09e
rssi: -85
Peripheral discovered!
Name: undefined
UUID: bdc6a5526bc24d6f850d47ecccc86ca0
rssi: -48
Peripheral discovered!
Name: undefined
UUID: 10a279a9999d464291b3ab00a4f5e3c1
rssi: -81
Peripheral discovered!
Name: BB-XXXX
UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
rssi: -57
・
・
・
・
Macを起点にして色々な周辺デバイスのUUIDがでてくるので
こんな感じでBB-XXXX
のような名前とUUIDを探します。xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
って書いたところです。
### サンプルを動かす
UUIDをサンプルコードのUUIDの部分にコピペしましょう。
var Cylon = require('cylon');
Cylon.robot({
connections: {
bluetooth: { adaptor: 'central', uuid: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', module: 'cylon-ble'}
},
devices: {
bb8: { driver: 'bb8', module: 'cylon-sphero-ble'}
},
work: function(my) {
my.bb8.color(0x00FFFF);
after(500, function() {
my.bb8.color(0xFF0000);
});
after(1000, function() {
my.bb8.roll(60, 0);
});
after(2000, function() {
my.bb8.roll(60, 180);
});
after(3000, function() {
my.bb8.stop();
});
}
}).start();
colorメソッド
で色指定、rollメソッド
で移動って感じです。接続した後のこの辺りのメソッドはspheroと同じですね。
実行してみます。
$ node bb-8.js
動画はこちら。 https://goo.gl/photos/8CxFXMhPSxApWzmr8
うごきました!!
感動です
まとめ
Cylon.jsでBB-8を動かせました。
Node.jsとの連携ができると、Webブラウザ側にコントローラを用意してwebとの連携も簡単にできますね。
ブラウザ <-> Node.js <-> Sphero
は Milkcocoaで連携確認できているのでサクッといけそうです。
脳波連携してフォースで動かすみたいなことをやりたいですね笑
可能性広がりました。
プログラマブルなBB-8をぜひ使ってみてください :)