読者です 読者をやめる 読者になる 読者になる

#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に接続するiPhone3DSを同じネットワークに接続する

会場のネットワーク速度が遅かったのと、ルータが端末間の通信を許可していなかったので、iPhoneテザリング環境を使ってiPod touch3DSを同じネットワークに接続しました。

iPod touch 側にHTTPサーバを立てる

 特定のURLへのアクセス時に、SDKメソッドを呼び出し、所定の動作をすればいいと考えたので、HTTPサーバを立てました。ちなみに、チュートリアル以外での初のObjective-Cでプログラミングでした。内容はQiitaに書きました。

3DS側から呼び出すためのHTMLコンテンツを作成する

 3DSはボタンがたくさんついていますが、GamePad APIには対応しておらず、それぞれ機能が割り当てられています。そのため、HTMLコンテンツから取得できるのは上下左右+Aボタンの5つになります。

  また、WebSocketなどにも対応していないため、キー入力によりiframeのURLを変更することで、特定のURLにリクエストを投げるようにしました。これにより「戻る」操作を行うことなく、継続して操作できるようにしました。

 

動かしてみた

なんか動画はイマイチですが、左キーで旋回して、上キーで直進しています。