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を使ったモデル駆動開発用ツールに落とし込んで行きたいと思う.


