#Romoハッカソン に参加してきました。
KickStarterでファウンディングに成功していたRomoのハッカソンに参加してきました。
Romoってなんだ?
iPhoneを頭脳として使う高機能ロボットで、iPhoneにキャタピラをつけて遊びます。標準のアプリは無料で公開されていて、ボールやラインのトラッキング、遠隔からの監視みたいな用途にも使えます。
Romo– The Smartphone Robot by Romotive — Kickstarter
ハッカソンのお題
Romoは、SDKが公開されているので、自分でアプリを組み込んで好きなように動かすことができます。
となれば、ハッカソンが開催されますよね。
今回のハッカソンのお題は「絶対に起きれる目覚ましを作ろう」。
。。。
だったのですが、それをほぼ無視して別のことをやっちゃいました。
何をやったのか
Web原理主義的なところがある私は、「目覚まし時計であろうとWebAPIを持つべきだ」ということで、Romoをブラウザ経由で操作できるようにしました。それも、どうせなら、お子様だったらほぼ持っていると言っても過言じゃないNintendo 3DS上のブラウザから操作するようにということで挑戦してみました。
やったこと
iOS8(beta3)が使えないことを知る
そうだよね、ベータ版ですからね...まだ対応してるわけありませんよね。運営の方からiPod touchを借りました(感謝っ!)。RomoにはこのiPod touchを差して遊びます。
Romoに接続するiPhoneと3DSを同じネットワークに接続する
会場のネットワーク速度が遅かったのと、ルータが端末間の通信を許可していなかったので、iPhoneのテザリング環境を使ってiPod touchと3DSを同じネットワークに接続しました。
iPod touch 側にHTTPサーバを立てる
特定のURLへのアクセス時に、SDKのメソッドを呼び出し、所定の動作をすればいいと考えたので、HTTPサーバを立てました。ちなみに、チュートリアル以外での初のObjective-Cでプログラミングでした。内容はQiitaに書きました。
3DS側から呼び出すためのHTMLコンテンツを作成する
3DSはボタンがたくさんついていますが、GamePad APIには対応しておらず、それぞれ機能が割り当てられています。そのため、HTMLコンテンツから取得できるのは上下左右+Aボタンの5つになります。
また、WebSocketなどにも対応していないため、キー入力によりiframeのURLを変更することで、特定のURLにリクエストを投げるようにしました。これにより「戻る」操作を行うことなく、継続して操作できるようにしました。
動かしてみた
なんか動画はイマイチですが、左キーで旋回して、上キーで直進しています。