LoginSignup
59
63

More than 5 years have passed since last update.

JavaScriptでスターウォーズのBB-8を動かす。(Cylon.jsが対応したよ!)

Posted at

スターウォーズエピソード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など)経由でプログラム制御出来ます。

参考: SpheroをGo言語から制御して遊んでみた

Cylon.js

Node.jsでハードウェア制御するフレームワーク(ライブラリ)です。

この辺りの界隈は英語圏でJavaScript Roboticsって言っているみたいですね。

過去にJSオジサンCylon.jsでIoTJS Board ShibuyaCylon.jsの闇という発表もしているので、こちらも参考にして下さい。


BB-8とSpheroは基本同じだけど...

BB-8はSpheroと同メーカーが作っていて基本的にはSpheroと同じ機構です。
基本的にはSpheroで出来ることはBB-8も出来ます。
なのでCylon.jsで制御できるかと思いきや、 接続方式が違うみたいです。

  • SpheroはBluetooth
  • BB-8はBLE

この違いがあって、Spheroはペアリングする必要があったのですがBB-8はBLEのGATT経由で制御します。

GATTとか分からない人は参考までにこちらをごらんください

GoでIoT ~BLE入門してみた話~

接続方式の違いを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の部分にコピペしましょう。

bb-8.js
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をぜひ使ってみてください :)

59
63
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
63