Sphero2をMilkcocoaで遠隔操作
Sphero2は,iPhone等の携帯端末で操作ができるロボットボールです.Milkcocoa経由でSphero2を遠隔コントロールしてみました.
流れ
流れは下図のようになります.リモコンページがスピードと方向を決めて送信ボタンを押すと,Milkcocoaへsendします.Milkcocoaはsendイベント監視しているコントロールアプリに送信します.コントロールアプリは受けた値からスピードと方向を取り出しSpheroを操作します.
構成
構成は,Sphero2 をコントロールするアプリと遠隔リモコンHTMLページとなります.
Sphero2のコントロールには,sphero.jsという公式javascript APIを使いました.
Sphero2 コントロールアプリ
機能として,前後左右の指示を行い,この指示内容をMilkcocoaへ記録します.MilkcocoaのデータストアのSendイベントを監視し,遠隔リモコンHTMLからのコマンドが送られてきたらそれに従いSpheroを移動させます.Electronを用いてアプリ化.
main.js
const electron = require('electron'); const app = electron.app; const BrowserWindow = electron.BrowserWindow; electron.crashReporter.start(); var mainWindow = null; app.on('window-all-closed', function() { if (process.platform != 'darwin') { app.quit(); } }); app.on('ready', function() { mainWindow = new BrowserWindow({width: 350, height: 300}); mainWindow.loadURL('file://' + __dirname + '/index.html'); mainWindow.on('closed', function() { mainWindow = null; }); });
チュートリアル通りのファイルです...
HTMLファイル (index.html)
Spheroの操作 Spheroコントローラ
操作パネル
コントローラでもSpheroを操作できるように前後左右させるボタンを配置しています.
JSファイル (script.js)
const MilkCocoa = require('milkcocoa'); var mlkcca = new MilkCocoa('{app-id}.mlkcca.com'); var sphero = require("sphero"); var orb = sphero("/dev/tty.Sphero-***-***-***"); function move(s, d) { orb.roll(s, d); mlkcca.dataStore('sphero/move').push({'s':s, 'd':d}); } function connect(callback){ function done() { orb.startCalibration(); setTimeout(function() { orb.finishCalibration(); }, 5000); callback(); } orb.connect(done); } function remoteControl(e){ var v = e.value; move(v['s'], v['d']); } connect(function() { mlkcca.dataStore('sphero/status').push({ 'messeage' : 'Wakeup!' }); mlkcca.dataStore('sphero/move').on("send", remoteControl); });
connect関数でSpheroに接続を行います.成功したらMilkcocoaの’sphero/status’に状態を通知します.そして,データストア’sphero/move’のsendイベントを監視対象にします.
イベントが発生すると,remoteControl関数にて,スピードと方向を取り出し,Spheroに伝えます.
遠隔リモコンHTMLページ
機能として,スピード,方向を選択してMilkcocoaにSendします.HTMLファイルのみ.
HTMLファイル
Spheroの操作 Spheroリモコン
スピード 方向
sendData関数でセレクタのスピードと方向の値を取得してMilkcocoaにsecdしてます.
おわりに
Sphero2を遠隔操作するプログラムを簡単に作ることができ,Milkcocoaのすごさに驚きました.今後は,このアプリのブラッシュアップと,cloocaを使ったモデル駆動開発用ツールに落とし込んで行きたいと思う.