電脳メガネでラリーしてきた。リアルで。

2008/8/30 - 31 にHacker's Cafeのメンバーで電脳メガネをかけて都内をラリーするという企画 電脳☆スターラリー をやってきました。といってもよく伝わりませんね。まずは、動画をご覧ください。ニコニコ動画のアカウントをお持ちの方は http://www.nicovideo.jp/watch/sm4473500 からどうぞ。



現実の空間に仮想の物体を(今回は★をあらかじめケータイなどで)配置して、それを実際にその場所に行って回収する、といったことを行っています。物体は緯度・経度を指定すれば世界中のどこでも好きな場所に置くことが可能です。あなたのそばにも、こっそり配置されているかもしれませんよ!
ちなみに、このような技術は Augmented Reality (拡張現実感, AR) と呼ばれています。

当日の様子は、特設ページ 「Cyber Star Rally」で確認できますのでいますぐチェック!



■ しくみとか
#自分の担当の部分だけ書きます。他の部分は id:akio0911 id:gaziro2000 id:yuiseki あたりで説明されるかも?
##全体概要は Cyber Star Rallyについて あたりをご覧ください。

現実の空間の指定した位置に仮想の物体がおかれているように見せるためには、自分の位置(緯度・経度など)と、自分の視点の向き(方角、見上げる角度など)を知ることが必要です。この情報を知るための方法はいくつかあるのですが、今回は以下の方法を利用しました。

自分の位置:

の情報のうち、より精度の高いものを自動的に切り替えて利用。

(9/29追記) 秋月から組み立て済みのUSB接続GPSが出ています。さっそく使ってみたのですが、こちらの方がより感度が高くコンパクトでよい感じです。

自分の視点の向き:

同じような部品はカーナビや新しめのケータイなどにもよく使われています。この辺りの詳細やデモについては、前回のエントリ
コンピュータビジョン・拡張現実感に関する普通じゃない勉強会に行ってきました+α - まちみのな@はてな
を参照してください。



■ 技術的なおはなし(難しめ)

今回のようなアプリケーションを作成するためにはいくつか注意点があります。

  • バイスはすぐには返事をしない

それぞれのセンサはただちに現在の値を返すわけではありません。また値が帰ってくるまで待っているとほかの処理が止まってしまいます。したがって、各処理は別スレッドなどで管理する必要があります。

  • バイスは時々とまることを想定する

バイスは常に動くと思ったら大間違いです。時々変な値を返したり、突然停止したりすることがあります。これを監視して、異常を検知したらしかるべき復帰処理を自動的に行うように作る必要があります。

  • バイスの値はばらつくことを想定する

お手軽に手に入るような部品は常にかなりの量の誤差を含んでいます。適宜平均をとるなどして、できるだけ安定した値がとれるようにする必要があります。ただし、安定させるために長い時間の平均をとると、反応が鈍くなってしまうのでさじ加減が難しいところです。

  • ネットワークもいつもつながっているとは限らない

使い放題な回線で常時接続していると思っても、データは結構うまくおくれてないことがあります。ネットワークがつながらない状態でもデバイスからはつぎつぎ値が送られてくるので、この情報をいったん蓄えておき、送り漏れが無いようにするといった工夫が必要です。



なお、今回のソースコードC#のみで記述されています。現在は一部GPLソースコードが含まれているため、当該部分を書き直したのち修正BSDライセンスで公開します。GPLライセンスは利用条件が厳しいので、できるだけゆるく使ってほしいな〜というところです。

18きっぷがまだあまっているので9/6,7にも違う場所でやってみたいと思っています。