※注意 ここで紹介する機能は、MANICAモバイルの次期バージョンである MANICA MOBILE NEXT の iOS版限定の機能になります。Android版は後日リリースの予定です。
前回は光るLEDタグを使って探索を行う内容でした。探索するには強力な機能ですが、対応タグが必要になる前提でした。今回は普通のパッシブタグで探索ができるAR探索の機能を紹介します。
まずは使ってみましょう。探索画面で物品を検索し、結果の中から探したいアイテムを長押しするとカメラビュー(AR探索画面)が開きます。はじめに端末を少し左右に振るか、数歩歩いてください。ARKitが床や壁を認識し、方向推定が安定します。中央の3D矢印がタグの方向を指します。画面下部の距離ゲージは、近づくにつれて**緑(遠い)→ 橙(近い)→ 赤(至近)**と色が変わります。赤になったら、その周辺を目視で確認してください。
RFIDリーダがタグから得られる情報はRSSIと位相がありますが、この機能ではRSSIのみを使用しています。さてどうやって矢印を表示しているのか。RSSIは、近いほど強く、遠いほど弱い値になります。だから1つの値からでも、ざっくりした距離を出すことはできます。電波の減衰は距離に対して対数的なので、いわゆる log-distance パスロスモデルで逆算します。
距離 d = 10 ^ ((RefRssi@1m - rssi) / (10 × n))
RefRssi@1m は1m地点での基準強度、n は経路損失指数。室内・金属環境のパッシブRFID(電波が反射して戻る後方散乱)では n = 4 あたりを使っています。生のRSSIはマルチパスで激しく暴れるので、EMA(指数移動平均)で平滑してから距離に変換します。
ただ、これだけだと「近い・遠い」しか分からないので、従来のビープ探索と同じです。方向を出すには、もう一つの情報源が要ります。
カギは「スマホがどこにいるか」を知っていること。
ここで ARKit を使います。ARKit は、スマホを動かすとカメラが空間のどこにいるか(ワールド座標)と、どっちを向いているかを毎フレーム返してくれます。これと RSSI を掛け合わせます。
タグを検出するたびに、そのときのカメラのワールド座標とRSSIをペアで記録します。
空間を10cm角の格子(ボクセル)に区切り、格子ごとにRSSIをEMAで平滑し、(同じ場所で何度も拾った値をならし、マルチパスのノイズをここで吸収する)RSSIが強かった**上位8ボクセルの「RSSI重み付き重心」**を計算します。これが「タグはこの辺りにある」という推定点(ホットゾーン)になります。
ここでカメラの現在位置から、その重心へ向かうベクトルを求めます。これが方向(水平の方位+上下の仰角)になります。
つまり、スマホを持って少し歩き回るだけで、空間に「電波が強かった場所の塊」が浮かび上がり、そこへの矢印を引ける、という理屈になります(そうはうまく行かんけどな)。重心は世界座標で固定されるので、利用者がタグを通り過ぎれば、矢印はちゃんと後ろを振り返ります。
確信度も出しています。上位ボクセルのばらつき(重み付きRMS距離)が小さいほど「ここだ」と言い切れるので確信度を高く、散らばっていれば低くします。確信度が一定以下のときは矢印を出さないようにします(自信ないのでな)。


