フューチャー技術ブログ

Bluetoothで位置推定

はじめに

地図・GIS・位置特定に関する連載の6日目のエントリーです。
マイコンとか電子工作などIoT関連が好きで、Bluetooth信号を使った位置推定手法について調査したことがあったので、紹介します。

Bluetoothとは

数メートルから長いものでは数十メートル程度の距離の情報機器間で、電波を使いながら簡易な情報のやりとりを行うのに使用されます。
身近な例だと、

  • イヤホン
  • マウス
  • キーボード
  • …etc.

などはBluetooth信号で音の情報やキー・マウスが押された情報を伝えることで操作が行えるようになります。
近年ではBLE(Bluetooth Low Energy)が主流になってきています。

RSSI

信号の強さを表す値として、RSSI(Received Signal Strength Indicator)が使われます。
大きいほど信号強度が強く、小さいほど信号強度が弱い状態を表します。
そして、発信源から距離が近いほど信号強度が強く、離れるにつれて段々と強度が弱くなっていきます。
つまり、このRSSIの値を使えばざっくりと位置推定ができるわけです。

位置推定

Bluetoothを使った位置推定では、主にビーコンを配置することで行います。
ビーコンはただひたすら、Bluetooth信号を発信し続けます。電池持ちの良いものだと数年持つそうです。

ビーコン1つだけを使った位置推定

まずは、ビーコンを1つだけ使った場合の位置推定手法です。
こちらの記事で詳しく紹介されていますが、ビーコン自体が発するBluetoothの強度TxPowerRSSIの値の関係から位置を計算することができます。
ここでは、自由空間では受信信号強度は距離の二乗に反比例するという関係が使われます。
ただ記事内でも仰られている通り、実空間では床から反射したり、機器間に人間が居たり、完全な自由空間とは程遠いもので正確な距離を出すことはできません。
また、ビーコン一つだけだと、同心円上では図のように等しく距離dなので方向まではわかりません。

こんなの使えないじゃん!ってなるところですが、実際は近くにいるかどうかわかれば良いという用途もあります。
例えば、ある商品棚の近くに来たときにプッシュ通知したり、ある店の前に通りかかったときにプッシュ通知してお得な情報をお知らせすることができます。

これを利用したものとして、LINEビーコンがあります。
LINEビーコンで近くの人を検知、LINEでプッシュ通知という組み合わせです。
ちなみにこちらの記事を参考に、ESP32を使ってLINEビーコンを作る事ができます。
また、LINE DevelopersからLINEbotと組み合わせて、プッシュ通知を簡単に試すことが可能です。

ビーコンを3つ以上使った位置推定

次に、ビーコンを複数使った位置推定手法になります。
ビーコン1つの場合でも距離はざっくりとわかりましたが、方向がわかりませんでした。これを解決するために3つ以上のビーコンを使う事で方向まで推定します。

図のように各ビーコンの位置は固定で、それぞれのビーコンには個別の識別番号を振っておくことで各ビーコンからの距離がわかります。
この時どこか基準点を決めて、その位置から各ビーコンの位置がどれだけx方向とy方向に離れているか記録しておく必要があります。
それぞれのxy座標を使って円の方程式を立て(距離d1d2d3が円の半径)、その連立方程式を解くことで交点を計算し、基準点に対する相対的な位置を推測できます。
これで距離も位置も決まった!と思いきや、Bluetoothは様々な干渉を受けるため距離dがざっくりとした値になり、連立方程式が解けずに位置が求まらないことが多発します。

ビーコンを複数と機械学習を使った位置推定

最後に、ビーコンを複数と機械学習を使った位置推定手法を紹介します。
簡潔に手法言うと、クラス分類モデルで位置を推定していきます。但し、このやり方だと正確な距離は推定することができません。

①推定したい場所をグリッドで区切る

図のように部屋をグリッドで区切って番号を振ります。グリッド番号が位置を示します。
また、このグリッド番号をクラスとして分類モデルに学習させていきます。

②ビーコンを配置する

これはどの手法でも同じですが、Bluetooth信号を発するビーコンに固定の番号を振ってそれぞれ配置します。
配置位置は特に決まっていませんが、部屋に満遍なく配置したほうがいいでしょう。
またこの例だと各部屋1つの計4つですが、グリッドが大きい場合はもっとたくさんビーコンを置いて、部屋のどの位置にいてもBluetooth信号を捕まえられるようにしたほうがより正確な推定ができます。

③各グリッドでBluetoothのRSSIを収集し、機械学習モデルを学習させる

※図の吹き出しに記載している値はRSSIの大きさ
各グリッドの位置でそれぞれのビーコンから送られてくるRSSIの値を収集します。
収集したRSSIの値をグリッド番号推定用の機械学習モデルの学習データとして使うので、なるべく多めに収集しておいたほうが良いです。

そして、収集したRSSIの値に対するグリッド番号(位置)をモデルに学習させます。
機械学習モデルでは収集したRSSIの値を元にグリッド番号をクラス分類するように学習していきます。

④位置推定する

学習させたモデルを使って現在のRSSI値からグリッド番号を推定することで位置がわかります。
推定された位置はDBに格納するなりして、アプリケーションにて可視化することでユーザーの現在位置が把握できます。

ただ、新しいグリッドができた場合やビーコンを新たに追加した場合、学習データを収集し直す必要があります。
また、グリッドが多いと学習データの収集が非常に大変です。

おまけ

v.s. GPS

無線通信を使った位置推定手法にはGPS(Global Positioning System)、全地球測位システムも存在します。
GPSは上空にある複数の衛星(3個以上は必須)から信号を受け取り、現在位置を知ることができるシステムです。こちらも身近な位置推定手法で、

  • スマホ
  • カーナビ

などに搭載されています。
GPS自体の入手は比較的容易で、Switch Sicenseさんでも受信機自体を多数見つけることができます。
結構簡単に使うことができ、井上さんの過去記事プロトタイピングの勧めの中でもGPSユニットが使われています。

Bluetoothと比較した利点・欠点としては、

  • 広域で見るとかなり精度が良く、位置情報が安定している
  • 信号の発信機を設置する必要がない
  • 遮蔽物に弱い

が挙げられます。屋外で使う分には力を発揮しますが、3個以上の信号を受信する必要があるため、遮蔽物があると信号を受信できずに位置を測位できません。

そのため、ある商品棚の近くや、ある部屋に居るなどの狭い範囲の位置推定や屋内だとBluetoothの方に分があります。

v.s. タグ

こちらは無線ではありませんが、カメラでバーコードのようなタグを認識することで位置を認識する手法があります。
(もちろんタグだけでは移動できないので、LiDARなどを用いてSLAM(自己位置推定)を併用しながら移動します)
近年では飲食店でのロボットの導入が進んでおり、狭い範囲で決まった位置への移動を繰り返すロボットにとってはタグは非常に有効な手法になります。

また、タグを天井に配置することができるためタグを隠す障害物の心配もなく、さらに飲食店の景観を損ねずに済みます。
余談ですが、羽田空港にあるAI_SCAPEではシェフもウェイターもロボットらしく、今回紹介したタグによる位置認識も導入されているようなので今度行ってみようと思います。

用途が違うので比較するのもおかしい話ですが、Bluetoothと比較した利点・欠点としては、

  • 位置推定ではなく、マーカーによって位置を認識しているので正確
  • マーカーに電源が要らない
  • 人間の位置推定には向かない

が挙げられます。

カメラ取り付けたヘルメット被ってもらって、天井にマーカー配置すれば人間も位置認識できなくはなさそうですね。

まとめ

以上、3種類のBluetoothを用いた位置推定手法を紹介させて頂きました。
個人的には、ビーコンを1つのみ使って近くにいるかどうかのみを判断する手法の方が手間がかからず、コスト的にも安く抑えられるのかなと思います。

次は真野さんのPlus Codeについて調べた です。