BB-8 とは
STAR WARS シリーズ最新作の『スター・ウォーズ/フォースの覚醒』に登場するボール型ドロイドです。R2-D2 の弟分的な、愛くるしいキャラ。
物語の重要なカギを握るボール型のドロイド。与えられた任務には一生懸命。
BB-8 のメイキング映像が公式の Facebook ページに上がっています。
https://www.facebook.com/StarWars.jp/videos/1125623990830969/
Sphero BB-8 とは
以前からボール型ロボットを手掛けている Sphero 社が『スター・ウォーズ/フォースの覚醒』に合わせて販売した BB-8 の小型ロボット。Sphero 社は、劇中の BB-8 の制作にも技術協力しています。
公式のアプリ(iOS / Android)が出ていて、Bluetooth 経由でアプリから操作します。動いている様子はこんな感じ。
https://www.youtube.com/watch?v=GqCUegO--gY
リモコンを作りたい
Sphero BB-8 はスマートフォンアプリから操作させることが前提なので、物理的なリモコンは標準で付いてきません。ただ、子どもに遊ばせることを考えたときに、スマホではなく物理的なリモコンで動かしたいところ。
幸い、Sphero のロボットには各種 SDK が用意されているので、自分でプログラミングして操作することができます。BB-8 の通信には BLE が使われているので、Bluetooth 4.0 が使える環境が必要なのですが、Intel Edison を使えば簡単にリモコンが作れそうです。
Intel Edison とは
Edison はインテル社が販売するシングルボードコンピュータです。Arduino や Raspberry Pi と違い、Wi-Fi や Bluetooth のモジュールがあらかじめ組み込まれているので、無線通信するようなモノづくりに便利です。
作ったもの
作り方の前に完成品を。こんな感じのものを作りました。手作り感ありますね。
作り方
では作り方を簡単に紹介します。
準備物
- Sphero BB-8
- Intel Edison Kit for Arduino
- ブレッドボード
- ジョイスティック
- ジャンパーワイヤ
- 9V 乾電池
- 9V 乾電池用ジャンパーワイヤ
- ピンソケット
- ちょうどよい箱
Intel Edison のセットアップ
Wi-Fi 設定
まずは、ここなどを参考にして、Edison を Wi-Fi に繋げるところまでセットアップしてください。
同じ Wi-Fi ネットワークにあるマシンから、
$ ssh root@[設定した Edison 名].local
で、ログインできるようになれば OK です。
Bluetooth 設定
執筆時の Edison は、出荷状態(バージョン weekly-159.devkit-2.0)で Bluetooth が無効化されていました。無効化されているかどうかは、rfkill list
というコマンドで確認できます。
無効化されていた場合は rfkill unblock bluetooth
で有効化してください。
root@edison:~# rfkill unblock bluetooth
root@edison:~# rfkill list
0: phy0: wlan
Soft blocked: no
Hard blocked: no
1: brcmfmac-wifi: wlan
Soft blocked: no
Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
Soft blocked: no
Hard blocked: no
4: hci0: bluetooth
Soft blocked: no
Hard blocked: no
回路を組む
ジョイスティックからの入力を Edison で処理するための、シンプルな回路を組みましょう。
- 9V 乾電池のプラス側を Edison の VIN に、マイナス側を GND につなぐ
- Edison の 5V を ジョイスティックの L/R+, U/D+ につなぐ
- Edison の GND を ジョイスティックの GND につなぐ
- ジョイスティックの L/R を Edison の ANALOG IN A0 につなぐ
- ジョイスティックの U/D を Edison の ANALOG IN A1 につなぐ
L/R は Left/Right(横方向)の値、U/D には Up/Down(縦方向)の値が出力されます。
プログラムを書く
制御プログラムは JavaScript (Node.js) で書きます。Edison の入出力端子 (GPIO) を制御するライブラリ mraa が初期状態で入っているのでこれを使います。
加えて、BB-8 を BLE 経由で操作するために、noble と sphero の2つのライブラリを npm でインストールします。
root@edison:~# npm install noble sphero
そうしたら制御プログラムを書きましょう。
root@edison:~# vi bb8.js
bb8.js の中身はこちらを参照してください。
やっていることは、ジョイスティックの Left/Right, Up/Down の値 (0~1024) から、角度と速度を計算して、orb.roll(speed, direction);
で100ミリ秒毎に動かしているだけです。
動かす
書いたプログラムを、
root@edison:~# nohup node bb8.js &
で実行してみましょう。実行直後に BB-8 のキャリブレーション(正面決め)が始まるので、青い点が自分の目の前になるように BB-8 を置きます。
キャリブレーションが終わると BB-8 は白色に光るようになるので、そうなったらジョイスティックで操作できるはずです。
今回はジョイスティックの入力で BB-8 をそのまま操作するだけの単純なものでしたが、色々なセンサー使ったり、もっと複雑なプログラムを書いたりすれば、より面白いことができると思います。