BLEビーコンでポジトラは可能なのか(未完ごめんなさい) - ReDo

2015年12月14日

BLEビーコンでポジトラは可能なのか(未完ごめんなさい)

本エントリはOculus Rift Advent Calendar13日目の記事ですが、ここ最近の一ヶ月を振り返って、睡眠を削ってゲームを優先させた結果、結論としてごめんなさいという状況です。

Gear VRにポジトラが欲しいとは散々みんなが思っていると思いますが、Microsoft Kinnect v2、Google Tango Project、Oculus Rift DK2, HTC Viveの各方式をちょっと調べて乱暴にまとめればわかる通り、「光源とカメラが両方含まれたシステムで、時間情報を用いた厳密な距離測定によるポジショントラッキング」が結局のところ勝利の方程式だということがわかります。赤外線ではないですが、もう少し大きなスケールな例で言うならば、GPSも同じ仕組みです。

他の方式でポジトラのようなことをしようとするとどこかでより賢い補正式や、用途を限定的にする必要があるという、このへんの勘所をムリしてはいけないと常々思っています(まれによく天才と札束が組み合わさって最強に見える話が発生しますが・・・)いくつか事例を挙げてみます。


例1:加速度値の積分で位置を測定する
「姿勢」に関してはなんとかなるのですが、「位置」に関しては誤差が蓄積されていきますので、それを修正する別の何かが必要です。逆にいうとホイホイリセットできれば意外と使えたりします。

例2:光源がシステムに含まれない
ARマーカーはこちらに分類されます。人間が目でやってる距離測定はこちらですが、人間の距離感というのはある程度遠くなって左右の目の視差がなくなると、経験による距離測定をしだします。トラックみたいに大きな車両だと車間距離を勘違いしやすい、みたいな話とか、野球では球の鉛直方向の落下速度で軌跡を推測するそうですが、そのへんめっちゃ人間頭いいなー、というつらさがあります。

例3:時刻情報ではなく波のパワーで距離を測定する
今回やろうとしているBLEビーコンでのボジトラはこいつにあたります。耳で音を聞いて距離を測定する話に近いと言えば近いのですが、iBeacon等も含むBLEビーコンのAdvertiseはBLEの規格上20ms間隔の50Hzが限度です。RSSIとやらがもう二桁ぐらい精度よく取れればなんちゃってでも楽しめたのかもしれませんが、誤差も振動も大きく、厳しい話です。

ではそんな中でBLEビーコンでポジトラの勝率をあげるために、いくつかの前提条件を検討していきましょう。

案1:受信機を複数にする
人間の耳みたいに、BLEのAdvertiseを受けられるCentralな板を複数つけたら勝率があがるかもしれません。ただし、これはGear VRでは物理的には採用しづらいですね。面倒なのでやめときます。

案2:時間をかける
サンプリング周波数が足りないのであれば、足りるまで位置特定まで時間をかければいいのです。その場に10秒ぐらい立っていてくれれば10cm程度のオーダで位置測位ができます!いやいや、VRなポジトラ用途ではさすがに現実味がありません。受信誤差吸収のための移動平均はもちろんかけますが、秒オーダでもさすがに話になりません・・・。

案3:発信機を複数にする
これは実際やったことがあります。2x2x2(8個)の立方体な感じでビーコンをせいぜい1m間隔で置くという力技です。VR的な使い方を考えると前方3つ(正面と左右)あればなんとかなるんじゃないかなと思っています。

案4:受信機の向きを固定したり、障害物が入らないようにする
これがGear VRで少し有利な点です。電波ですから金属でガンガン反射するので、スマホでこの手のことをやると、端末の向きが意外と影響します。BLEの2.4GHzなマイクロ波は水に吸収されやすいので、身体やスマホの位置がガンガン影響します。どういう持ち方でどの向きで使われるか特定できるGearVR(特に前方にビーコンを配置した際)なら勝率が上がるのでは!ということです。

Appleが「iBeaconは距離測定に使うなよ使うなよ」ってつよく言っている理由がわかってきましたでしょうか。だんだんOculusの話ではなくてBLE位置測位の愚痴の話になってきましたが気のせいです。

・・・というわけでUnityでAdvertise取って計算させたぐらいまでしかできていないのでもう少し形にしたらリベンジさせていただきますごめんなさい!orz

コメントする