Posted at: 2016-06-29 04:51:39  Category: programming

位置指紋について

以前から作ってた、Wi-Fiの位置指紋を使った位置測位アプリケーションについて書きます。
まず位置指紋が何なのかについてですが、ざっくり言うとある地点に於いて、どんなアクセスポイントが
どのように見えるかを測定したものです。
ここで言う「どんなアクセスポイントが」というのはAPのBSSIDのことであり、「どのように見えるか
というのは電波強度の数値の大小のことです。
下の図でいえば地点Pに於いては、AP Cの電波が強いかもしれませんし
A,Bについてはどちらも同じくらいの強度かもしれません。

FingerPrint

このデータ、位置指紋を複数の場所で予め測定しておきます。
位置測位を行うときは、現在地点でのAPの一覧を取得し、予め測定しておいた位置指紋と
突き合わせる事で、現在位置を知ることができます。

いんすとーる

位置指紋について概要を説明しましたが、今回は上述した位置指紋の測定及びその可視化、
位置測位を行うモジュールと、それを用いた簡単なアプリケーションを作ったので紹介します。
動作環境は今のところLinuxだけとなっています。

まずはじめにCommon Lisp処理系をインストールする必要があるので、
パッケージマネージャ等を開いてもらってsbclのインストールをします。

次に、Common Lispのパッケージマネージャであるquicklispをインストールするため
以下のコマンドを実行します。

$ curl -O https://beta.quicklisp.org/quicklisp.lisp && sbcl --load 'quicklisp.lisp' --eval '(quicklisp-quickstart:install)' --eval '(ql:add-to-init-file)' --quit

その後~/quicklisp/local-projectsにソースをcloneします

$ cd ~/quicklisp/local-projects && git clone https://github.com/moratori/indoor-positioning.git

つかいかた

以下を実行するとREPLがひらくと思うので、そこにコマンドを入力して使います。

$ sbcl --eval '(ql:quickload :indoor-positioning)' --eval '(indoor-positioning:main)'

例えば位置指紋を測定し、結果を指定したディレクトリに保存するには以下のようにします。

0 Perform measurement of Wi-Fi fingerprint

1 Draw a graph

2 Load fingerprint

3 Save fingerprint (dump)

4 Perform indoor positioning

5 Show this help



>>> 0

save directory name?(no input for current): /home/moratori/Desktop/fp/A

how many times do you measure?: 3

measurement interval?: 5

performing...

finished.

>>>

また、上で測定した位置指紋を可視化するには以下のようにします。

>>> 2

file name?(no input for current): /home/moratori/Desktop/fp

loading...

loaded.

>>> 1

save directory name?(no input for current): /home/moratori/Desktop/out

place name?: A

bssid?(t for all): t

>>>

gnuplotがインストールされている環境であれば、以下のような図が出るはずです

FingerPrint

上の図は、あるAPについてそれがどれくらいの電波強度で何回見えたかを示しています。

実際の位置測位は上の図で表される、位置指紋を用いるわけですが
その方法については後日書きたいと想います