使用したビーコン
- iPhone5c(Peripheralとして動作するiPhoneアプリ)
- BLE Mini (RedBearLab社)
- RaspberryPI(+ Bluz iBeacon)
どれも同じUUIDを使用。Major番号も統一し、Minor番号をそれぞれ1、2、3と設定。
あと、Central用に、iPhone5を使用。
使用したサンプルプログラム
https://developer.apple.com/downloads/download.action?path=wwdc_2013/wwdc_2013_sample_code/ios_airlocate.zip
(計算したビーコンからの距離が視覚的にわかるように修正して使いました。)
CentralのiPhone5にインストールしました。
測位方法
各ビーコンの座標を取得しておく。
キャリブレーションモードで、各ビーコンの出力電波強度(dBm)を計測し、取得しておく。
どちらの値もソースコードにハードコーディングする必要があります。
ビーコンとの距離の計算
サンプルコード内に記載されていた参考論文(ここ)に詳細が記載されている。
RSSI (dBm) = -10n log10(d) + A
d = 10^((RSSI - A) / (-10n))
3つのビーコンを使った測位計算式
(こちらの都合で若干変更したものを使用。)
動作の様子
わかりにくいですが、
画面右上に、Minor=1のビーコン、
画面左上に、Minor=2のビーコン、
画面左下に、Minor=3のビーコン、
があります。
Centralデバイスの実際の位置は、画面左下よりちょっと上あたりです。動画では人のアイコンで測位結果が表示されています。だいたいあってます。ときどき離れます。。。
ピンク色の円は、ビーコンの電波の到達範囲ではなく、CentralでRSSIから取得し計算したそのビーコンの距離を半径にもつ円を表しています。三つの円が一点で交わると、人のアイコンがそこに一致します。
左下のビーコンが最初のうち円が小さいですが、これは計測距離が近いことを表しています。キャリブレーション時に設定した出力電波強度が実際の値よりも弱すぎたためだと思われます。動画では途中から、このビーコンの出力電波強度を少し強くしました。それによって、円が広がりました。
感想
・ビーコンの出力が一定ではない。(当然と言えば当然ですね。。。)
➡ビーコンの出力を一定にする工夫が必要。
・このサンプルプログラムでは、キャリブレーション画面でキャリブレーションした値が自動でロケーション画面に反映されない。
➡プログラムの修正でなんとかする。
・距離の計算があってるのかどうかわからない。
➡上記論文を読んで、妥当なのかどうか考える。。。
・キャリブレーションの値によって計測結果が大きく異なる。
➡キャリブレーションのノウハウを蓄積しないと。。。
➡キャリブレーションのノウハウを蓄積しないと。。。
記載されている会社名、および商品名等は、各社の商標または登録商標です。
すごい!
返信削除