1Click飲みRomoCartTempescope色色[:iroiro]Other Projects

2014年12月27日土曜日

河本の実験室の2014年まとめ

今年も、無くても死なない物を沢山作りました。
2014年も残り僅かとなったので、まとめてみたいと思います。去年のまとめ


言葉をカラーパレットに変換する色色[:iroiro]

ソチオリンピック」の検索結果

言葉から連想される色を生成するサービスです。(リンク
ネットの検索結果に基づき、どんなに抽象的な言葉でも「それっぽい」色を提案してくれます。

2月の公開後、約50万語が検索されました。

ちなみに一番検索された言葉は「青峰大輝」です。
日本のデザイナーだけでなく、中国のアニメ好きに使われたり、服のコーディネートをする人が現れたり、予想外に流行りました。
Mashup Awards 10でも8作品にAPIとして利用して頂けたのも嬉しい出来事です。

少し残念なのは、欧米ではあまりウケなかったことです。
色に対する感覚が合わなかったんでしょうかね。


部屋をマリオカートの世界に変えてしまうRomoCart


iPhoneで操作できるロボット「Romo」とプロジェクションマッピングを組み合わせて、部屋をマリオカートの世界に変えてしまうゲームを作りました。(リンク
「生活空間をゲームにしてしまおう!」という夢いっぱいのコンセプトに共感してもらえたのか、ニコニコ技術部で一位になり、engadgetCNET等の海外メディアでも取り上げられました。

単に静的な環境に絵を投影するのではなく、「物」を拡張してパワーアップさせる手段としてプロジェクションマッピングを使うという考え方は、レーシングゲームに留まる話ではなく、色々な発展の方向性があると思います。

来年も多分色々作ります。


住民の行動に合わせて部屋の照明環境を最適化するロボット照明「Myra



住民の場所や行動(読書中、歩行中、テレビ鑑賞中など)を認識し、複数のロボットアーム照明を協調動作させて最適な照明環境を作り上げるシステムです。(リンク

ぶっちゃけ照明って見たい場所だけ照らされてりゃいいよね」という考えから作ってみました。
日本語版の動画は作らなかったのですが、海外では意外とウケてHackadayなどのメディアに掲載されました。


サイゼリヤの間違い探しを自動で解くプログラム




サイゼリヤに行って間違いさがしがどうしても解けなかったんで、画像認識で解くプログラムを作った、というお話。(リンク
異様にRTされました。みんなサイゼリヤ好きなんですね。


iPhoneをサーマルカメラとして使えるFLIR ONEの熱画像をプロジェクションマッピングしてみたら意外と面白かった、という動画です。(リンク

熱湯と氷水が混ざり合う様子が見れたり、教育やらなんやらで使えそうな雰囲気ですが、あまりこれといった目的で作ってません。

Hackadayイタリアのメディアで紹介されました。

僕が「なんのために」作ったかというストーリーをちゃんと伝えなかったためか、記事で勝手な意味を持たせられてコメント欄が混乱するという目に遭いました。動画をアップするなら、ちゃんと「なにが課題で」「なんのために」作ったのか分かりやすく伝えなきゃ駄目だという良い例です。


部屋に天気を再現させるtempescope


今年でtempescopeプロジェクト(http://tempescope.com)も3年目になりました。
これまでは細々一人で作ってきたtempescopeですが、去年のMA9でハードウェア賞受賞をきっかけに、チームができ写真家に写真も撮ってもらい
CEATECやMFT2014で展示したり、engadgetGizmodoMAKE:本誌に掲載され、ようやく2015年のクラウドファンディング開始に向けて動き出しました。

個人的にはホリエモンが「欲しい」と言ってくれたあたりがピークです。2回も。




たったの1Clickで飲み屋が予約できる「1Click飲み


去年のMashup Awards 9で優勝した1Click飲みは事業譲渡して、別の運営主体様にお任せすることになりました。(リンク

まだプロモーションをかけていないので使っている人は少ないのですが、実はちゃんと使えます→ App Storeリンク


実験:建物のWifiをホッピングして東京から大阪まで通信できるか


日本の全ての家がWifiを備えていたら、Wifi同士を繋いだネットワークで東京からどこまで通信できるか実験してみました。(リンク
今年はこれ以外にも
住んでいる場所の時間帯とTopcoderのスコアの関係を調べたり、
Wikipediaの人に関する情報から色んな分析をしたり、
気象庁のデータをクローリングして、世界で一番過ごしやすい場所を探索したり、
色んなデータで遊びました。
初歩的なクローリングや認識技術を組み合わせるだけでも、軽い学会発表ぐらいならできそうなネタが検証できてしまえる、面白い時代になりましたね。


その他、私事。

・7年勤めた日立の中央研究所を辞めて、Googleのソフトウェアエンジニアになりました。
退職エントリとか書いてないんですが、日立中研に興味ある人は聞いてくださいな。

・子供が生まれました。

これが:


こうなりました:



来年の抱負とか。

今年は「作って、アップして、メディアに紹介されて満足して、終わり」の物が多すぎた気がします。
来年はもう少し、最後まで行く物を増やしていきたいと思います。
例えばtempescopeは来年の今頃は販売している予定です。
その他のプロジェクトもオープンソース化したり、売ったり、コミュニティを作ってちゃんと形に残すことを目指していきたいです。
そんなわけで2015年も河本の実験室を宜しくお願いします。

2014年12月22日月曜日

iPhoneをサーモカメラにできるFLIR ONEを遊び倒してみた


こんにちは。河本です。
ちょっとクリスマスには早いですが、長らく欲しかったFLIR ONEが手に入ったので遊び倒してみました。


FLIR ONEで見れば排気ガスが熱いのが見える!

FLIR ONEってなに?

こいつです:

*日本だと並行輸入品でしか買えないので高いです。国内で販売が始まるのを待ったほうがいいです。

iPhoneに装着するだけで、↑みたいな熱画像が撮影できるようになるiPhoneカバーです。
今のところ0℃から100℃の間で120x160ピクセルの画像が撮れるっぽいです。


なにができるの?

FLIR ONEをもって色々撮ってみました。
街を見ると、人がくっきり見える
車はエンジンとタイヤが熱い!


スーパーにて。レンコンだけ冷たい。陳列したばかり?

鍋が熱い!
Arduino UNO
駐車場を見下ろすと、さっきまで走ってた車がわかる
冷え性の僕(左)と妻(右)
赤ちゃん超かわいい。


FLIR ONE×プロジェクタで「熱さ」が見える机を作ってみた

こんなハックもできます。
FLIR ONEの出力をプロジェクタで投影することで、物の熱さが見える机を作って見ました。
見た目が同じでも違う温度の水が入ったグラスが違う色になったり、
熱湯と氷水をトレーに入れると、少しずつ混ざり合う様子が可視化されて面白いです。
食べ物を冷まして子供に食べさせるのにも使えそうですね。
これを実装したアプリやプロジェクションマッピングのサーバのソースを欲しい人がいたら連絡ください。


不満たらたら

以下、改善して欲しい点:
カメラを認識するまでの時間が遅すぎる。公式アプリでも自作アプリでも、カメラへの接続を開始してからちゃんと認識するまでボタンを押しまくったりして平均20~30秒ぐらいかかります。即応性がないと、「いざ」という時に接続ができなくて困りそうです。
iPhoneを充電してくれるわけではない。iPhoneカバーとしては特大サイズですが、追加バッテリーと思えばそこまで酷くはありません。しかしFLIR ONE自身は自分用のバッテリを積んでいるにもかかわらず、iPhoneは充電されません。何故そうした。
着けたままだとiPhoneを充電できないし、デバッグが面倒。FLIR ONEを着けていると、iPhoneの充電口がふさがれてしまいます。その結果、FLIR ONEを着けたままではiPhoneの充電もできないですし、PCに接続してデバッグすることもできません。↑のプロジェクションマッピングを作るためには、わざわざログをネットワークに吐き出すモジュールを作りました。面倒。

色々直して欲しい点はありますが、街や世界を今までと全く違った視点で見れるのは本当に楽しい体験です。
まだ国内で買うと高いですが、是非みなさんも機会を見つけて遊んでみてください。

2014年12月1日月曜日

世界で一番住みやすい場所を計算してみた

こんにちは。河本です。

東京は寒すぎず、カラっとした過ごしやすい日が続いてます。

こんな日が続くと日本は世界で一番快適な国なんじゃないか、なんて思ってしまいますね。

ところで本当に世界で一番過ごしやすい地点ってどこなんでしょう?

気象庁が出している数値予報データから計算してみました。
全球の気温 (2013.11.30 06:00+UTC)
(Background image taken from TerraMetrics for educational purposes)

方法

まず元データとして、気象庁が計算している6時間毎の全球域数値予報モデルを取得しました。
これは、6時間毎に地球を0.5度毎に区切った領域全ての気温、湿度、風速、気圧などを計算したデータです。
(ちなみにSynthetic Skyはこれの1時間毎のデータを使ってます)

これを使えば世界中の好きな場所の温度(上図)や湿度(下図)がわかるわけです。

全球の湿度 (2013.11.30ぐらい)
(Background image taken from TerraMetrics for educational purposes)

また、「過ごしやすさ」を定量化するために「不快指数」を使います。

不快指数とは、知っての通り温度と湿度から「不快さ」を定量化する指標です。
ただし、65~70を快適さの中心として、これより高い場合は「暑くて不快」、低い場合は「寒くて不快」という評価を行う指標なため、少し扱いにくいのが欠点です。

そこで、もっとわかりやすい「快適指数」という指標を定義しました。

単純にふるまいが「高いほど快適」「低いほど不快」となるように「不快指数」を変換しているだけです:
快適指数=   (不快指数が67.5以上の場合) 1-(不快指数-67.5)/(85-67.5)
      (不快指数が67.5未満の場合) 1-(67.5-不快指数)/(67.5-55)
(0~1内に収まるよう適宜切り捨て/切り上げ)
パラメータの選択の意図:
67.5=快適指数の快適域の中心
85=「暑くてたまらない」の閾値
55=「寒い」の閾値

この定義から、地球上の全ての場所の「過ごしやすさ」を定義できるようになりました。

以下の図は一昨日(11月29日)の快適指数を計算したものです。
北半球の多くは寒すぎるため青(不快)になってますね。
日本付近は、陸は青(不快)ですが、海にいけば赤(快適)が広がっています。
逆に、南半球は季節は春で、快適さが広がっています。
地球上の「快適指数」(2014/11/29 09:00JST)
以上のデータを過去1年分(2013年11月29日から2014年11月29日まで)を取得し、以下を計算してみました:
1. 平均「快適指数」が一番高い場所はどこ?
2. 「快適日」(不快指数が65~70の間の日)が年間を通して一番多いのはどこ?

結果

1. 平均「快適指数」が一番高い場所はどこ?
各地点における6時間毎の快適指数を単純に平均化し、最大地点を計算しました。
最大地点はここです:
2013/11/29~2014/11/29の間の快適指数平均値。白いマークは最大地点。どこだこれ。
え、うそ日本じゃないの?
最大値の場所(白いマーク)はウガンダ、年間を通して平均快適指数実に87.4の超優良エリアです。
世界で一番過ごしやすいのはヴィクトリア湖のほとり。

ちなみに東京は平均33.6。
以下の年間の快適指数推移を見ると、この差は明らかです。
東京は冬は快適指数がサチってます(寒すぎるんですね)。
ウガンダは年間を通じて高い快適さを叩き出しています。
春と秋以外は東京の快適指数は低い


年間を通じて高い快適指数のウガンダ




2. 「快適日」(不快指数が65~70の間の日)が年間を通して一番多いのはどこ?
各地点において、快適な日(不快指数65~70の間)であった日数の割合を計算しました。
最大地点はここです:

2013/11/29~2014/11/29の間の快適日数割合。白いマークは最大地点。またここか。
やっぱりウガンダです。
ウガンダの快適日数割合は77%。
東京はたったの14.3%なので、だいぶ勝ってます。
どうやら地球で一番快適な場所はウガンダで間違いないようです。

少し調べてみるとウガンダは「アフリカの真珠」「緑の国ウガンダ」だそうです。(ソース
日本が世界一快適だなんて、世間知らずの思い上がりでした。反省します。

まとめ

・老後はウガンダに住みましょう。アフリカって灼熱のサバンナに象が歩いてるイメージしか無かったんですが、全然違うんですね。「どこだこれ」とか言ってすみませんでした。

・今回は温度と湿度から算出した「快適指数」という観点のみで「一番過ごしやすい」地点を算出してみました。他にも「道を歩いてて殺される率」「ハブに噛まれる率」など色んな「過ごしやすさ」の観点を含めて再度過ごしやすさを評価してみたいですね。

・データがあれば、日常のふとした疑問に簡単に答えられるようになります。データを入手する方法や解析テクニックを小学校とかで教えたら、日本はもっと面白い国になるんじゃないですかね?

2014年11月16日日曜日

サイゼリヤの間違い探しが難しすぎたので大人の力で解決した

こんにちは。河本です。
僕はサイゼリヤに行くとまずキッズメニューの間違い探しを解くんですが、
今回は難しすぎたので、大人の力(=画像処理)で解決することにしました。
2014年9月版。みんなもやってみよう!
(以下、間違い探しの答えが出てきます。見たくない人は↑の画像で頑張ってから読もう。)


やり方

いろいろ書いてますが、左面と右面の違う部分を色の差分から見つけてるだけです。
紙の歪みを吸収するために、少しややこしいことをしてます。

(1) 間違い探しページの写真を撮る
↑の写真です。普通にiPhoneで撮りました。

(2) ページ領域を抽出する
画像からページの部分を見つける必要があります。

今回は面倒なので、左側は手作業で指定しました。
角を手作業でタグ付けして・・・
こっちは手作業。
射影変換で台形補正します。OpenCVならWarpPerspectiveです。
台形補正しても、紙が曲がってたので少し歪んでる。
次に、左側の画像をテンプレとして使って、右側の画像から紙部分をSURF+マッチングでオブジェクト認識して見つけます。(参考:whoopsidaisies's diary: OpenCVで画像の特徴抽出・マッチングを行う
右面は自動で見つける
そんなわけで、両面の画像ができました。
両方歪んでますが、そもそも紙が曲がってるので射影変換ではこれが限界です。
左面と右面


(3) 局所差分を算出
ざっくり両面の画像が取れましたが、歪みのため単純比較はできません。
例えば、左と右のピクセルの色距離を単純に比較(AbsDiff)するだけでは、こんなことになってしまいます:
左面と右面の同じ位置のピクセルの色の距離。これでは間違い部分は見つけられない。
そこでどうするかというと、
左面の小さい領域を取り出し、
100x100の小さい領域。
再度オブジェクト認識で右面から同じ領域を見つけ、


見つけた領域の左面と右面を比較、差分抽出(absDiff→threshold→erode→dilate)します。
文字の輪郭はどうしても差分ノイズが乗りますが、erodeで大体消えます。

この局所領域を少しずつずらして、ページ全体の差分画像を作り上げます:
(左)差分画像 (右)元のページ
ちゃんと答えのところに大きい差分が出てる。

(4) 間違い部分の抽出
最後に差分画像から輪郭抽出(findContours)して、「間違い」を探します。
見つけた領域を元の画像に描画したのが以下です:

誤認識は3つあります。
また、一個だけ見つけられていないのがありますね。(どこでしょう?)
実際には二値化のステップの閾値を下げれば見つけられますが、そのぶん誤認識も増えます。
今回の問題では、精度を下げてでも再現率を上げた方がいいですね。

というわけで、一番最初にページ領域を手作業でタグ付けする部分以外は、全自動で間違い探しを解くことができました。


さいごに

・最初にテンプレを手作業で作らないといけないのは、いろいろ自動化する方法があります。例えば「同じような画像が2つ並んでる一番大きい領域を探す」みたいなことをしたり、机を見つけて除外するとかすればいいんですが、ちょっと汎用性が落ちそうなので今回は止めました。

サイゼリヤのサイトに過去の間違い探しの画像データが上がってます。元画像なので、精度よく間違い認識できます。答えも載ってるけどな!
歪みが無いので簡単に間違いを認識できる。
・iPhoneアプリにしたり、メニューに直接答えを投影したりとか色々見せ方が考えられますね。暇な時作ります。

・OpenCVが使えれば世の中の大抵の問題は解決できる。

2014年11月3日月曜日

建物のWifiをホッピングして東京から大阪まで通信できるか

日本ほど建物密度が高い国なら、Wifiだけでどこまでも行けるはず・・!
(Satellite Image taken from TerraMetrics for educational purposes)

こんにちは。河本です。
最近ネットの自由を脅かす様々なニュースが話題になってますね。
NSA職員が傍受したヌード写真で遊んでたり
英国がネット検閲に力入れ始めたり
ハンガリー政府が「インターネット税」の導入を決めたり
現行のインターネットは、施政者の息がかかった電気通信事業者のインフラ無しでは繋ぐことすら出来ません。
これはしょうがないことなのでしょうか?

ところでネットワークの種類にWANETというものがあります。

簡単に言うと、短距離の無線ノード同士を接続することで、バケツリレー的にデータを遠くまで運ぶ技術です。
中央の統制者が居ないため、検閲しにくく、インターネット従量課税なんてアホなこともできません。

そこで今回は、もし住宅に置かれたWifi基地局同士を繋いで純度100%の「草の根インターネット」を作ったら、東京からどれぐらい遠くまで通信できるのか、を検証してみたいと思います。

各戸に短距離無線しか無くても、複数の家を中継すれば遠いところまで通信できる


前提条件

・国内の全ての建物に1台の無線基地局が置かれている
・基地局は通信圏内にある他の基地局と相互接続されている
・通信距離は色々実験する(Wifi:~100m ブーストしたWifi:3200m)

今回は「そもそも接続可能なのか」という観点だけを考えるので、伝送速度やロバスト性などは考えないとする。

建物データの取得
この検証のためには、国内の全ての建物の位置を取得する必要がありますが、そんなデータはどこにも公開されていません。

そこで今回は、Google Mapsから画像認識してクローリングしてきました。
怒られそうなので詳細は省きますが、このように建物の中心点と大きさを認識します:
建物認識の結果
(Satellite Image taken from TerraMetrics for educational purposes)
こんな感じで全国4000万戸の建物を抽出しました。

下の図は国内の全建物の密度を示してます。東京と大阪が濃いですね。
国内の建物分布
(Satellite Image taken from TerraMetrics for educational purposes)

Wifiを使う場合の通信範囲
各家に通常のWifi基地局(通信半径100m)しか無い場合に、東京駅からホッピングで通信できる理論的な範囲(=100m以内にある建物同士を繋いで行った時に、東京駅からカバーできる領域)を計算してみました。


ノード間通信距離100mのWANETで東京駅からWifiのホッピングで通信可能な範囲
意外と狭いですね。
通信領域内の建物は246万戸、全体の5%程度の建物しか含まれません。
東京の半分と埼玉県の一部分しか入っていません。
大阪と通信するなんて、夢のまた夢でした。

よく見ると、荒川と多摩川に塞き止められていることがわかります。
Wifiの通信距離では、川を越えられないんですね。
荒川を越えられなかった。(赤点:東京駅から通信できる建物。対岸には赤点が存在しない。)
次に、必要なホップ数を見てみましょう。
下の図では、東京駅から通信する際に中継する建物の数を表しています。
最大(東吾野あたりまで)で700ホップも必要なことがわかります。
今回は通信の性能の話はしませんが、スループットを出すのも大変そうですね。


ノード間通信に必要なホップ数。都内はだいたい100ホップぐらいで行ける。
というわけで、一般的なWifi基地局では、都内ですら通信できない場所があるという、残念な結果になりました。

Wifiをブーストした場合の通信範囲
普通のWifi(IEEE 802.11 a/b/g/n)で通信できる距離は、国内では100mだけですが、
せっかくなのでブースターを使って通信距離を伸ばした場合に、どれぐらい範囲が広がるか実験してみましょう。(日本では違法です)
このブースターは3.2kmまで行けるなどと言っているので、
200m, 500m, 1000m, 2000m, 3200mで実験してみました。

各建物の通信距離が200mの場合
ノード間通信距離200mのWANETで東京駅から建物をホッピングして通信できる範囲
通信可能な建物は798万戸、全体の17%です。
急に広がりましたね。一番北は群馬まで届いています。
興味深いのが、荒川と多摩川の越え方です。
通信距離が200mあっても川の本流では越えられていないため、川が細くなる場所まで大回りしてのルートが取られています。
一方、江戸川と相模川はそれでも越えられていない様子です。


各建物の通信距離が500mの場合
ノード間通信距離500mのWANETで東京駅から建物をホッピングして通信できる範囲
通信できる建物は1320万戸、全体の28%です。
川は難なく越えられるようになりました。
北はいわきまで届いています。
しかし伊豆半島の田舎っぷりには負けてしまった様子です。 

各建物の通信距離が1000mの場合
ノード間通信距離1000mのWANETで東京駅から建物をホッピングして通信できる範囲
通信可能な建物は3202万戸、全体の68%です。
一気に通信範囲が全国レベルに広がりました。
大阪ばかりか、九州まで到達できたのは驚きですね。
九州まで行くのに1200ホップ程度で済んでいることも予想外でした。

一方、北のいわきはどうしても越えられていないようです。

また、伊豆付近の接続エリアが疎なのが気になりますね。
このへんを空爆されたら西と東の通信が遮断されそうです。


各建物の通信距離が2000mの場合

ノード間通信距離2000mのWANETで東京駅から建物をホッピングして通信できる範囲
通信可能な建物は3258万戸、全体の70%です。
さっきから50万戸ぐらいしか増えてません。
鳥取まで開通したぐらいの変化でしょうか。


各建物の通信距離が3200mの場合
ノード間通信距離3200mのWANETで東京駅から建物をホッピングして通信できる範囲
通信可能な建物は3380万戸、全体の72%です。
2000mとほとんど違いがわかりません。長野県の山間部にもネットが開通したぐらいです。
九州まで350ホップで通信できるようになったのは嬉しいですが、相変わらずいわきが越えられていません。。。

まとめ
・一般的なWifiをホッピングするだけで23区内は通信できる(かも)。その外には行けない。

・1000mぐらい通信距離があれば全国レベルのネットワークが貼れる
 →全部の家に1000mの基地局を置く必要はないかもしれない。例えば川の手前とかに置くだけで、残りは通常のWifiで十分かもしれない。(未検証)

・完全に自由が守られた国では、こんなネットワークは無駄かもしれません。でも広域災害が起きたり、日本のインターネットへの締め付けが強くなってきたときに「市民がいかにして自らを守るか」を市民レベルで常に考えていくことに価値があると思います。
・例えば独裁国家にこっそり無線基地局をばらまいて、検閲不可能なネットワークを無理やり張っちゃったりしたら面白いよね。

・地図とか衛星写真を画像認識すると色々解析できて面白い。

・いわきの闇は深い。

おしまい。


(Satellite Image taken from TerraMetrics for educational purposes)


他の分析エントリ

山手線リアルタイム混雑情報で遊んでみよう
140文字の「重み」を言語毎に比較してみた
世界で一番住みやすい場所を計算してみた
サイゼリヤの間違い探しが難しすぎたので大人の力で解決した
Topcoderに一番有利な時間帯を調べてみた
Wikipediaのデータで人生解析をしてみよう
明日の天気を過去の似た日から合成して可視化してみよう
「頭痛」を含むツイートと気圧の関係を調べてみた

2014年10月4日土曜日

RomoCart, a hack to turn your living room into a Mario Kart course

(In Japanese here)


RomoCart is the third in our series of home hack projects (TempescopeMoving Windows, Myra) to make your living room a more exciting place to be in.

Here, we used Romo, an educational robot toy that can be controlled using an iPhone app, to recreate the world of Mario Kart in your living room.



By combining Romo and projection mapping, RomoCart lets you race robots around a race course generated in your living room, whilst firing missiles and throwing bananas at opponents.


How it works


RomoCart initially scans your room, and generates an optimal race course based on the layout of your room.
The RGBD camera finds obstacles,
and generates a circuit that best fits the open space.
The system tracks the Romos using the camera, and projects the game environment according to their positions.
We gave Romos some exciting smoke trails...
During the race, players can pick up various items,
Various items and abilities exist, like the "accelerate" item which makes the player move twice as fast.
they can drop bananas, 
Flood the floor with bananas!

and fire missiles at your friends.

Unleash missiles in your living room!
Because the RGBD camera tracks obstacles in real time, you can even step on incoming missiles to protect your Romo.
In RomoCart, even your mum can join in as a Thwomp
We've given special abilities to different objects.
A teddy bear acts as a rotating turret.

and finally, when you cross the finish line, you're welcomed by fireworks.


RomoCart physically turns a part of your home into a racing game.


The System

RomoCart uses 3 pieces of hardware:

Romo

Buy them from Amazon.
Romos have two caterpillar tracks that you can control independently, thus letting you program a "moving iPhone" very easily.

For RomoCart, we built an app "Romote" that receives and executes commands from a PC wirelessly.
We use a gamepad to let users control the Romo, but override their movements with specific actions when, for example, the Romo gets hit by a missile.
We thus use Romo's as an "intelligent radio controlled car".

RGBD Camera


Hang an RGBD camera (like Kinect, or Xtion Pro Live) from your ceiling, to track objects, and auto-generate circuits.
(We recommend Xtion, as it's lighter and works on USB bus power)

Projector


Any projector will do, but you need to be able to get your projector as high up as possible to project onto a sizeable area of your living room.

We used a pico projector "Sanwa PRJ-3", because it's cheap, fairly bright, and can be attached to common tripods, but short throws should work equally well.

In RomoCart, a single Java program receives the depth feed from Xtion, finds objects (including Romo), renders the game environment, and projects it onto the floor.

Algorithms

How do you calibrate the Xtion against projectors?

You want to project the game environment to the correct position with respect to the Xtion's coordinate system.  You need to calibrate the view projection matrix for the projector.
This is a useful link I used to do this.
I'll release the code when I have the time.

How do you auto-generate the circuit from obstacles?

There are many ways of going about this.
I defined a "good" course to be one that vaguely follows the borders of obstacles, while not actually going through them.
I therefore generate a Voronoi diagram using obstacle borders as control points, and find the longest loop.
1:15 in the video should give you a good idea of how it works.
(If you're interested, give me a message)

How do you track the positions of Romo?

We know the input from the gamepad, so we can use that as prior knowledge of Romo's movement.  We calculate a probability for each object in the view being our Romo (using concordance with the movement given from the gamepad, as well as the object's size and height) to find and track our Romo.
This may be a good place to use particle filters, but things worked pretty well using a fairly dumb tracker.

Summary

We presented a system that uses projection mapping and Romo to turn a portion of your room into a Mario Kart-like world.
We showed that by combining very simple hardware and some common tracking algorithms, we can hack our house to be part of an exciting game environment.
All of the source code will be released when we find the time.

We hope this work will persuade others to follow and start similar projects that integrate the real environment with games.