知育ロボRomoとmyThingsと連携してコミュニケーションロボにしてみる


今年、Pepperを代表にコミュニケーションロボがいくつか発表されました。
ロボットが日常生活に浸透していく上で、「コミュニケーション」がキーワードになりそうです。

* [Pepper](http://www.softbank.jp/robot/special/pepper/) 本体¥198,000+月額費用
* [BOCCO](http://robots.dmm.com/robot/bocco) ユカイ工学製作 ¥29,000
* [RoBoHoN](http://www.takaratomy.co.jp/products/omnibot/robi/) シャープのモバイル型ロボット電話 2016年販売予定

ただし、Pepperは20万円+月額費用、一番安価なRobi Jr.でも2.9万円と、なかなか「手軽に試してみる」というわけにはいきません。

そこで、以前購入していたRomoを使って、myThingsと連携することで、簡単にコミュニケーションロボを作ってみます。

# Romoって何?
* [公式サイト](http://www.romotive.jp/)では「体験型エデュケーショナルロボット」と紹介されています。
 + 要は 「頭脳とUIは、iPhone」で「本体として、モーター(左右キャタピラ、頭の角度調整)とLED」をもつ知育ロボです。
* 約15,000円。Papperに比べたらはるかに安いです。
* [SDK](http://www.romotive.jp/developers/index.html)が提供されています。サンプルコードも付属しており、サンプルコード単体をシミュレータで動かす事も可能です。(画面タッチで、Romoの表情を変わったりする)
*  また、教育用プログラミング環境[Scratch](https://scratch.mit.edu/)からRomoを操作することができる[Scracth2Romo](http://tsukurusha.com/2015/02/1117/)のソースコードが公開されています。Scratchをすでに使っている人は、「Scratchのプログラムで現実世界のロボを操作する」事もできたりします。
* 対応するiPhoneは[こちら](http://www.romotive.jp/about/specification.html)
 + iPhone6へ機種変更時、古くなったiPhone4,5は下取りせずにRomo用に置いておくのも手です。 
 + 現在、iOS9では正常動作が確認できていないようですので、注意が必要です。

# myThingsって何?
> myThingsは、インターネットサービスやプロダクトを利用して、あなたにあった便利な組み合わせをつくることができるアプリです.
> [myThings](http://mythings.yahoo.co.jp/)

[IFTTT](https://ifttt.com/)をご存知の方は、Yahoo!Japan版IFTTTと言えば、理解いただけるでしょうか。

いろいろなwebサービスを組み合わせて自分用にカスタマイズした動作を実現する事ができます。今だと、IoTということで、webサービスと手元のデバイスを接続する事も可能です。

## IDCFチャンネルって何？

IFTTTの[Maker channel](https://ifttt.com/maker)に相当するのが、myThingsの[IDCFチャンネル](http://mythings.yahoo.co.jp/)です。
詳細は[こちら](http://www.idcf.jp/cloud/iot/)をご参照ください。

# 今回のゴール

* twitterにハッシュタグ#roboroboroboをつけてtweetすると、Romoにtweetが表示されます。
* さらに、tweet内容を感情解析APIで分析し、感情にあわせて、Romoの表情・アクションが変わります。

## 構成

![myThings_Romo.png](https://qiita-image-store.s3.amazonaws.com/0/4779/3c766c6a-ac39-7065-24f6-afa85fe702a3.png "myThings_Romo.png")




# 必要なもの

* [iPhone4/5シリーズ or iPod Touch](http://www.romotive.jp/about/specification.html)
* [Romo本体](http://store.romotive.jp/item/ROMO.html)
	* 使用するiPhoneによって、Romo対応が異なります。
* 開発環境
	* 今回使用した環境は下記の通り
	* MacBook Air(MacOSX 10.10.5)
	* Xcode 7.1.1(Swift2.1)
		* [CocoaPods](https://cocoapods.org/)
		* MQTTライブラリ:[Moscapsule](https://github.com/flightonary/Moscapsule)
		* [感情解析API](http://www.metadata.co.jp/emotion-ma9.html)

## IDCFチャンネル

* [こちら](http://www.idcf.jp/cloud/iot/detail01.html#post01)の「Part1 サーバーの準備」を参考に、IDCFクラウド上に、MQTT Brokerを作成。
* Action1のuuidとtokenを確認。

## myThings

* トリガーとしてTwitterチャンネル、アクションとしてIDCFチャンネルを選択します。
* IDCFチャネルではAction1を選択。

![mythings2.png](https://qiita-image-store.s3.amazonaws.com/0/4779/b4239b8a-d088-6759-deb2-175a9ff55c20.png "mythings2.png")


## 感情解析API

* [こちら](http://www.metadata.co.jp/emotion-ma9.html)から、利用登録して、API Keyを発行してもらいます。API Keyは後述の箇所で設定します。

## Romo側iOSプログラム

* コードは[こちら](https://github.com/snumano/RomoSwift)
 + SwiftでRomo SDKを扱うにあたり、[RomoSDKをSwiftで使う。【導入編】](http://qiita.com/ken0nek/items/ccdfefe274bd00203957)を参考にさせていただきました。iOS開発初心者なので、大変助かりました。
 + 上記のコードはXcode6.xで作成されたもので、Xcode7.1.1で動かすにあたりいくつか対応事項があります。[こちら](http://qiita.com/snumano/items/e7a243a7af8a9f85d5bf)にまとめましたのでご参照ください。

* 手順は下記の通り。
	1. 適当な場所で、上記コードをgit clone  
	
	```
	% git clone https://github.com/snumano/RomoSwift.git
	```
	2.レポジトリに移動し、Podfileを確認
	
	```
	% cd RomoSwift
	% pwd
	/Foo/Bar/RomoSwift
	% ls
	Podfile				RMCharacter.bundle		RomoSwift.xcodeproj
	Podfile.lock		RMCharacter.framework	RomoSwift.xcworkspace
	RMCore.framework	RomoSwiftTests			Pods
	RomoSwift
	```
	3.'pod install`を実施
	
	4.さらにRomoSwift dirに移動し、自分の環境にあわせてconfig.jsonを編集。上記で確認した、IDCFクラウドで作成したMQTT BrokerのAction1のuuid,tokenを以下のmqttのuuid,passwordとして、感情解析APIのAPI Keyでmextractrのapikeyとして記載します。
	
	```
	% cd RomoSwift
	% pwd
	/Foo/Bar/RomoSwift/RomoSwift
	% ls
	AppDelegate.swift		RomoSwift-Bridging-Header.h
	Base.lproj				Images-2.xcassets
	ViewController.swift	Images-3.xcassetsImages.xcassets
	Info.plist				config.json.sample
	% cp config.json.sample config.json
	% vi config.json
	{
  "mqtt":{
        "host":"x.x.x.x",
        "uuid":"hogehoge",
        "password":"hogehoge"
        },
  "mextractr":{
        "url":"http://ap.mextractr.net/ma9/emotion_analyzer",
        "apikey":"hogehoge",
        "out":"json"
        }
}
	```
	5.Xcodeを起動し、上記で用意したProjectをOpenし、シミュレータで実行(Run)
	6. さらに、MacbookにiPhoneを接続し、実機に対してプログラムを実行(Run)すると、iPhoneにアプリが転送されます。iPhone上でアプリを起動後に、iPhoneをRomoに接続します。

# 動作

* 上記手順で起動すると、下記のようにRomoの画面が起動します。
	* 以下では、iPhoneにアプリを転送し、Romoに接続後の動作について説明します。
	* Romo本体が手元にない人は、Romo本体のキャタピラ等の動作は確認できませんが、シミュレータ、iPhoneだけでも画面上のRomoの表情変化、メッセージ表示等の動作は同じですので、参考にしてみてください。

* 下記画像をクリックすると、Youtubeの動画が流れます。

[![RomoとmyThingsを連携](http://img.youtube.com/vi/qvqPxPuYgms/0.jpg)](http://www.youtube.com/watch?v=qvqPxPuYgms)

# まとめ

* 知育ロボRomoとmyThingsを連携して、コミュニケーションロボを作ってみました。
* myThings側のチェンネルの組み合わせ次第で、自分にあった使い方ができます。
	* 実はmyThingsには、BOCCOチャンネルもあります。BOCCOのユースケースが参考になります。
	* 天気予報をRomoに表示させたりもできそうです。
* Romo側のプログラムは結局は、iOSのプログラムなので、iPhoneの各種センサー、タッチパネル等を使った操作、表現が可能です。
* iPhoneから外部サービスと連携することで、さらなる機能追加も可能です。
	* テキスト読み上げ機能や、音声をテキスト変換してメッセージ送信等。
* 今回紹介したものは、Romo本体がなくても、iPhoneアプリだけでも試す事が可能です。