MilkcocoaでSphero2を遠隔操作

Sphero2をMilkcocoaで遠隔操作

Sphero2は,iPhone等の携帯端末で操作ができるロボットボールです.Milkcocoa経由でSphero2を遠隔コントロールしてみました.

流れ

流れは下図のようになります.リモコンページがスピードと方向を決めて送信ボタンを押すと,Milkcocoaへsendします.Milkcocoaはsendイベント監視しているコントロールアプリに送信します.コントロールアプリは受けた値からスピードと方向を取り出しSpheroを操作します.

flow

構成

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

リファレンス