以下、本発明の実施形態について、図面を参照しながら説明する。なお、図面の説明において同一要素には同一符号を付し、重複する説明は省略する。
実施形態に係る端末装置は、所定の領域において測位を行う。端末装置は、たとえばスマートフォンのような移動体端末装置として実現されてよい。所定の領域は、所定の建物を含む領域であり、そのような領域を、以下、単に建物という場合もある。建物は、屋外型施設であってもよい。建物では、複数の発信器が所定の位置に配置されることによって、複数のノードおよびノード間のリンクが設定される。ノードは、建物における抽象化された位置である。リンクは、各ノードの接続経路を示す。このようなノードおよびリンクを用いた構造(ノード・リンク構造)によって、建物における各位置が抽象的に示される。たとえば、端末装置がいずれのノードに滞在しているかという情報に基づいて、建物における端末装置の位置を特定する(測位を行う)ことができる。また、端末装置がいずれのリンク(経路)に沿って移動したかという情報に基づいて、建物における端末装置の移動経路を特定することもできる。
発信器は、近距離無線信号を発信する。近距離無線信号は、たとえば、発信器から数メートルから数十メートルの範囲内において受信可能なビーコン信号である。ビーコン信号としては、たとえば、WiFi(登録商標)信号およびBLE(Bluetooth(登録商標) Low Energy)信号が用いられてよい。
図1は、建物内に配置された発信器と、ノード・リンク構造との関係を説明するための図である。図1の(a)は、建物内に発信器が配置された状態を模式的に示す。図1の(b)は、図1の(a)に対応するノード・リンク構造を示す。なお、発信器は、建物外にも配置されてよい。
図1の(a)に示される例では、建物1として、スーパーマーケットのような店舗が想定されている。ただし、建物1はこの例に限定されない。建物1では、通路3に面した棚2が配置されている。建物1には、複数の発信器Tが配置される。なお、各発信器を区別し得るように、発信器Tには、TA〜TFの異なる符号を付している。発信器Tは、通路3の接続点に配置されてもよく、この例では、各通路3の接続点に、発信器TA〜TFがそれぞれ配置されている。
図1の(b)に示されるように、ノード(実ノード)Nは、発信器Tに対応する位置を抽象的に示す。なお、上述のノードは、後述の仮想ノードnと区別し得るように、実ノードNと称することとする。なお、各実ノードを区別し得るように、実ノードNには、NA〜NFの異なる符号を付している。同様に、各発信器を区別し得るように、発信器Tには、TA〜TFの異なる符号を付している。この例では、実ノードNA〜NFが、発信器TA〜TFに対応する位置を抽象的に示す。実ノードNは、発信器Tを含む所定範囲で定められる位置を抽象化して示す。発信器はたとえば通路3の接続点に配置されているので、実ノードNは、建物1での通路3の接続点を含む位置に対応し得る。
リンクLは、実ノードNA〜NF間に設定される。リンクLは物理的に遷移可能な実ノードNA〜NF間を接続する経路である。リンクLは、実ノードNA〜NFを接続するすべての経路のうち、たとえば端末装置のユーザが移動可能な経路にのみに対応し得る。この場合、リンクLは、通路3に対応する。なお、図1の(b)に示されるノード・リンク構造は、有向グラフで表されてもよく、その場合、同じ実ノードN間に設定されるリンクLであっても、一方の実ノードNから他方の実ノードNに向かう経路と、他方の実ノードNから一方の実ノードNに向かう経路とで、リンクLの性質(たとえば移動コストなど)が異なっていてもよい。
以上のようにして、建物1のフロアマップが、ノード・リンク構造(グラフ構造)として抽象化される。このようなノード・リンク構造を用いることによって、建物1において測位を行うことができる。たとえば、建物1の或る位置において、各発信器Tからのビーコン信号の受信レベルを示すRSSI(Received Signal Strength Indicator)を取得し、取得したRSSIと、先に説明した予め計測されたRSSIとを比較(照合)すれば、その位置が、ノード・リンク構造におけるいずれの実ノードNに位置しているかが特定される。そして、ノード・リンク構造は、建物1のフロアマップを抽象化したものであるので、ノード・リンク構造における位置が特定されれば、そこから、建物1における位置も特定される。
さらに、本実施形態では、ノード・リンク構造は、仮想ノードnを含む。図1の(b)に示されるように、仮想ノードnは、リンクL上に設定される仮想的なノードである。なお、各仮想ノードnを区別し得るように、仮想ノードnには、na〜ncの異なる符号を付している。この例では、仮想ノードnaは、実ノードNAおよび実ノードNDの間の位置に設定される。仮想ノードnbは、実ノードNBおよび実ノードNEの間位置に設定される。仮想ノードncは、実ノードNCおよび実ノードNFの間の位置に設定される。
仮想ノードnは、とくに、発信器Tを設置することなく実現される点において、実ノードNA〜NFとは相違する。このような仮想ノードnのノード・リンク構造における位置を特定することによって、建物1における位置を特定することもできる。
図2は、仮想ノードを含むノード・リンク構造の設計手法の一例を説明するための図である。この例では、建物1に3つの棚2が配置されている。まず、すべてのノードを仮想ノードnで構成する。このとき、各仮想ノードnの間隔はできるだけ狭く設定しておく。図2の(a)に示される例では、建物1に計16個の仮想ノードnが設定される。次に、図2の(a)に示される仮想ノードnのうちのいくつかの仮想ノードnに対応する位置に、発信器Tを配置する。図2の(b)に示される例では、16個の仮想ノードnのうちの6個の仮想ノードnに対応する位置に発信器TA〜TFが配置される。これにより、図2の(c)に示されるように、実ノードNと、実ノードNの間に設定されたリンクLと、リンクL上に設定された仮想ノードnとからなるノード・リンク構造が得られる。その際、仮想ノードnは、用途(たとえば測位精度など)に応じて適宜間引きされてもよい。このように、実ノードNと仮想ノードnとを組み合わせてノード・リンク構造を設計することで、実ノードNを実現するために設置する発信器Tの数を調整することができる。また、発信器Tを設置した後は、発信器T(つまり実ノードN)を追加したり、発信器Tの設置場所を変更したりせずとも、仮想ノードnを調整する(たとえば上述の間引きを解除する)ことで対応が可能である。
図3は、実施形態に係る端末装置の機能ブロックを示す図である。図3に示されるように、端末装置100は、取得部110と、選定部120と、特定部130と、算出部140と、判定部150と、制御部160と、通信部170と、記憶部180とを含む。
取得部110は、ノードNから発信された無線信号を受信することによって、ノードNの情報を取得する部分(取得手段)である。ノードNから発信された無線信号は、発信器Tが発信するビーコン信号であり、ノードNの情報を含む。ノードNの情報は、ノードNを特定するための識別情報(たとえば後述の図4に示されるノードID)を含む。ノードNを特定するための識別情報は、ノードNに対応する発信器Tを特定するための情報(たとえば後述の図6に示されるUUID)であってもよい。また、取得部110は、端末装置100におけるビーコン信号のRSSIも取得する。
図1に示される例では、取得部110は、位置情報サービス部111、WiFi信号受信部112、BLE信号受信部113およびGPS信号受信部114を含む。位置情報サービス部111は、端末装置100の屋外での測位のための位置情報サービスを行う部分である。たとえば、位置情報サービス部111は、GPS信号を受信するGPS信号受信部114と協働して、GPS信号を用いた測位による位置情報サービスを行う。位置情報サービス部111は、基地局からの電波に基づく測位による位置情報サービスを行ってもよい。また、位置情報サービス部111は、建物1における端末装置100の位置に応じて提供される種々のサービス情報を受信する部分でもある。サービス情報は、たとえば、端末装置100の位置の付近に位置する棚2に陳列されている商品に応じた情報(たとえばクーポンなど)とされる。サービス情報の受信の手法はとくに限定されないが、たとえば近距離無線通信技術を用いて行われてよい。サービス情報には、店舗が屋内のみの施設であるか否かといった情報も含まれてよい。WiFi信号受信部112は、WiFi信号を受信する部分である。ビーコン信号がWiFi信号である場合には、WiFi信号受信部112がビーコン信号を受信することとなる。BLE信号受信部113は、BLE信号を受信する部分である。上述のビーコン信号がBLE信号である場合には、BLE信号受信部113がビーコン信号を受信することとなる。
選定部120は、端末装置100が滞在しているノードNおよび仮想ノードnを選定する部分(選定手段)である。選定部120は、とくに、取得部110によって取得された情報に基づいて、リンクL上に設定された仮想ノードnを選定する。端末装置100がノードNおよび仮想ノードnのいずれに滞在しているかは、後述の判定部150によって判定される。このため、後述の判定部150も、選定手段の一部として機能する。選定部120による選定手法のさらなる詳細については後述する。
特定部130は、選定部120によって選定されたノードNおよび仮想ノードnに基づいて、端末装置100の位置を特定する部分(特定手段)である。特定部130は、後述の記憶部180に記憶されたノードDB181を参照し、選定部120によって選定されたノードNまたは仮想ノードnに対応するノードIDに基づいて、端末装置100の位置を特定する。特定部130による特定手法のさらなる詳細については後述する。
算出部140は、実ノードNと端末装置100との距離を算出する部分(算出手段)である。とくに、算出部140は、選定部120によって選定された仮想ノードnが設定されたリンクLに対応する実ノードNと、端末装置100との距離を算出する。実ノードNと端末装置100との距離は、たとえば、実ノードNから発信されたビーコン信号の端末装置100におけるRSSIに基づいて算出されてよい。算出部140による算出手法のさらなる詳細については後述する。
判定部150は、ノードへの端末装置100の滞在を判定する部分である。図3に示される例では、判定部150は、実ノード滞在判定部151および仮想ノード滞在判定部152を含む。実ノード滞在判定部151は、実ノードNへの端末装置100の滞在を判定する部分である。実ノードNへの端末装置100の滞在は、実ノードNから発信されたビーコン信号の端末装置100におけるRSSIに基づいて判定される。たとえば、端末装置100におけるRSSIが閾値(後述の図6に示される閾値th1)よりも大きいビーコン信号に対応する実ノードNに、端末装置100が滞在していると判定される。実ノード滞在判定部151による判定手法のさらなる詳細については詳述する。仮想ノード滞在判定部152は、仮想ノードnへの端末装置100の滞在を判定する部分である。仮想ノード滞在判定部152による判定手法の詳細については後述する。
制御部160は、端末装置100に含まれる各要素を制御することによって、端末装置100の全体制御を行う部分である。
通信部170は、端末装置100の外部と通信を行う部分である。通信部170によって、たとえば、後述の記憶部180に記憶される種々の情報(たとえば後述の測位プログラムなど)が追加して取得され、あるいは更新され得る。なお、通信部170によって先に説明したサービス情報が取得されてもよい。
記憶部180は、端末装置100によって実行される処理に必要な種々の情報を記憶する部分である。図3に示される例では、記憶部180は、ノードDB(Data Base)181と、リンクDB182と、ビーコンDB183と、メッシュDB184と、図3には図示されない機種別補正DBとを記憶する。また、記憶部180は、端末装置100が測位を行うために必要な処理を端末装置100に実行させるためのプログラム(測位プログラム)を記憶する。
次に、図4から図8を参照して、記憶部180に記憶される各DBの例について説明する。
図4は、ノードDB181の一例を示す図である。ノードDB181は、ノードを定義するためのテーブルである。ここでのノードは、実ノードNおよび仮想ノードnを含む。図4に示される例では、ノードDB181は、「ノードID」と、「カテゴリ」と、「ロケーションID」と、「フロアID」と、「店舗ID」と、「ノードタイプ」と、「マップID」と、「X座標」と、「Y座標」とを対応づけて記述する。
「ノードID」は、ノードを特定するための識別子である。図4に示される例では、ノードIDは、数値(「1」など)で表される。
「カテゴリ」は、ノードIDに対応するノードが、建物1での位置を示すノード(屋内ノード)であるのか、建物1外の位置を示すノード(屋外ノード)であるのかを特定するための識別子である。図4に示される例では、カテゴリは、数値(「1」など)で表される。たとえば、カテゴリが0の場合にノードが建物1外の位置を示すノードとされ、カテゴリが1の場合にノードが建物1での位置を示すノードであるとされる。
「ロケーションID」は、建物1の所在地を特定するための識別子であり、ここでは、ノードIDに対応するノードが配置された建物1の所在地を特定するための識別子である。図4に示される例では、ロケーションIDは、数値(「1」など)で表される。各ロケーションIDは、たとえば赤坂、六本木といった所在地にそれぞれ対応し得る。
「フロアID」は、ノードIDに対応するノードNが配置された建物1におけるフロアを特定するための識別子である。図4に示される例では、フロアIDは、数値(「2」など)で表される。
「店舗ID」は、ノードIDに対応するノードNが配置されている建物1の店舗を特定するための識別子である。なお、図4に示される例では、店舗IDは空欄(「NULL」)とされている。
「ノードタイプ」は、ノードIDに対応するノードが実ノードNであるのか、仮想ノードnであるのかを特定するための識別子である。図4に示される例では、ノードタイプは数値(「0」など)で表される。たとえば、ノードタイプが0の場合にノードが実ノードNであるとされ、ノードタイプが1の場合にノードが仮想ノードnであるとされる。
「マップID」は、図1に示されるような、ノードIDに対応するノードの位置を特定する際に用いられるマップを特定するための識別子である。各マップは、予め記憶部180が記憶していてよい。なお、図4に示される例では、マップIDは空欄(「NULL」)とされている。
「X座標」および「Y座標」は、は、マップIDに対応するマップにおける座標を示す。図4に示される例では、マップ上の座標値が数値(「25」、「50」など)で表される。
図5は、リンクDB182の一例を示す図である。リンクDB182は、リンクを定義するためのテーブルである。図5に示される例では、リンクDB182は、「開始ノード」と、「終了ノード」と、「ロケーションID」と、「リンクタイプ」と、「距離コスト」とを対応づけて記述する。
「開始ノード」は、端末装置100がリンクに沿って移動する際の開始点となるノードNを示す。先に説明したように、ノード・リンク構造は有向グラフで表されてよいので、「開始ノード」は、一方のノードNから他方のノードNに向かう経路を示すリンクLにおける、一方のノードを示す。
「終了ノード」は、端末装置100がリンクに沿って移動する際の終点となるノードNを示す。すなわち、「終了ノード」は、一方のノードNから他方のノードNに向かう経路を示すリンクLにおける、他方のノードを示す。
「ロケーションID」は、先に図4を参照して説明したとおりであり、ここでは、リンクによって接続される各ノードが配置された建物1を特定するための識別子である。
「リンクタイプ」は、リンクが、端末装置100が実際に移動可能な経路に対応するリンクであるか否か(リンクが実際に繋がっているか否か)を特定するための識別子である。図5に示される例では、リンクタイプは、数値(「0」、「1」など)で表される。たとえば、リンクタイプが0の場合にリンクが実際に繋がっているとされ、リンクタイプが1の場合にリンクが実際に繋がっていないとされる。
「距離コスト」は、リンクに対応する経路を移動するのにかかるコストを数値で示す。距離コストは、たとえば、リンクに対応する経路の長さに基づいて定められる。それ以外にも、たとえばリンクに対応する経路の傾斜の程度などが考慮されて距離コストが定められてもよい。図5に示される例では、距離コストは数値「20」、「10」など)で表される。
図6は、ビーコンDB183の一例を示す図である。このビーコンDB183の例は、ビーコン信号を定義するためのデータテーブルである。図6に示される例では、ビーコンDB183は、「UUID」と、「ロケーションID」と、「ノードID」と、「閾値th1」と、「閾値th2」と、「閾値th3」とを対応付けて記述する。
「UUID」(Universally Unique Identifier)は、ビーコン信号の発信源である発信器Tを特定するための識別子である。図6に示される例では、UUIDは、数値およびアルファベットの組み合わせ(「00:00:00:AA:BB:CC」など)で表される。このUUIDは例示であり、UUIDは、たとえば、Proximity uuid、major番号およびminor番号の組み合わせによって定められてもよい。
「ロケーションID」は、先に図4を参照して説明したとおりであり、ここでは、UUIDに対応する発信器Tが配置された建物1を特定するための識別子である。
「ノードID」は、先に図4を参照して説明したとおりである。
「閾値th1」は、端末装置100における受信するビーコン信号のRSSIの最大値に対して設定される閾値である。RSSIの最大値は、受信された異なる種類の複数のビーコン信号のRSSIのうち最も大きいRSSIである。各ビーコン信号のRSSIは、平均化されたものであってよく、その場合、所定の周期(たとえば3秒)で受信された同じ種類の複数(たとえば5回分)のビーコン信号のRSSIの平均値であってよい。なお、平均値は発信器Tごとに別々に算出される。同じ種類のビーコン信号は、同じ発信器Tからのビーコン信号である。平均値は、スライディングウィンドウ方式で求めてもよい。閾値th1の単位はたとえばdBmである。なお、ここで説明した発信器Tごとに算出したビーコン信号のRSSIの平均値のうち最も大きいRSSIを、以後、「MaxAve」という場合もある。
「閾値th2」は、端末装置100が受信する異なる種類の複数のビーコン信号のうち、RSSIが最も大きいビーコン信号のRSSIと、RSSIが2番目に大きいビーコン信号のRSSIとの差に対して設定される閾値である。閾値th2の単位はたとえばdBである。なお、ここで説明したRSSIが最も大きいビーコン信号のRSSIと、RSSIが2番目に大きいビーコン信号のRSSIとの差を、以後、「DiffMax」という場合もある。
「閾値th3は、端末装置100が受信する異なる種類の複数のビーコン信号のうち、RSSIの平均値が最も大きいビーコン信号のRSSIと、RSSIの平均値が2番目に大きいビーコン信号のRSSIとの差に対して設定される閾値である。閾値th3の単位はたとえばdBである。なお、ここで説明したRSSIの平均値が最も大きいビーコン信号のRSSIと、RSSIの平均値が2番目に大きいビーコン信号のRSSIとの差を、以後、「DiffAve」という場合もある。
図7は、機種別補正DBの例を示す図である。機種別補正DBは、端末装置100の種類(機種)に応じて、先に説明した閾値th1〜th3を補正するための補正値を定義するためのテーブルである。図7に示される例では、機種別補正DBは、「機種別コード」と、「補正値1」と、「補正値2」と、「補正値3」とを対応づけて記述する。
「機種別コード」は、端末装置100の種類を特定するための識別子である。図7に示される例では、機種別コードは数値(「1」など)で表される。
「補正値1」は、対応する機種別コードに適用される閾値th1の補正値を示す。たとえば図7に示される補正値1が図6に示される閾値th1に加算されることによって、閾値th1が補正される。
「補正値2」は、対応する機種別コードに適用される閾値th2の補正値を示す。たとえば図7に示される補正値2が図6に示される閾値th2に加算されることによって、閾値th2が補正される。
「補正値3」は、対応する機種別コードに適用される閾値th3の補正値を示す。たとえば図7に示される補正値3の値が図6に示される閾値th3に加算されることによって、閾値th3が補正される。
図8は、メッシュDB184の一例を示す図である。このメッシュDB184は、メッシュを定義するためのデータテーブルである。図8に示される例では、メッシュDB184は、「メッシュID」と、「ノードID」と、「最近傍屋外ノードID」とを対応づけて記述する。
「メッシュID」は、メッシュを特定するための識別子である。図8とともに図9を参照して説明すると、メッシュMEは、所定間隔の経度緯度で区画されたマップ上の領域に対応する。所定間隔は、たとえばメッシュMEのサイズが1m×1mとなるような経度緯度の間隔であってよい。メッシュMEは実ノードNよりも細かく設定され、たとえば図9の(a)に示されるように、各実ノードN(ノードID=1〜3)のそれぞれが、複数のメッシュMEに対応している。
「ノードID」については、先に図4を参照して説明したとおりである。図8および図9の(a)に示される例では、たとえば、メッシュID=2のメッシュMEは、ノードID=1の実ノードNに対応する。
「最近傍屋外ノードID」は、メッシュMEが含まれる実ノードN以外のノードであって屋外ノードである実ノードNのうち、メッシュMEに最も近い実ノードNのノードIDを示す。たとえば図9の(b)に示される例における、メッシュME(メッシュID=1)およびメッシュMEが含まれる実ノードN(ノードID=3)に対応する最近傍屋外ノードIDは、次のようにして定められる。まず、メッシュME(メッシュID=1)の中心の経度緯度を中心とする円を設定する。円のサイズは、たとえば、実ノードN(ノードID=3)の周囲に位置する各実ノードNの一部が含まれるサイズとされる。そして、各実ノードNのうち、設定された円に含まれる面積が最も大きくなる実ノードNを、最近傍屋外ノードIDとして定める。図9の(b)に示される例では、ノードIDが2の実ノードNが最近傍屋外ノードとなるので、最近傍屋外ノードのノードIDは2となる。
次に、図10を参照して、端末装置100のハードウェア構成について説明する。図10に示されるように、端末装置100は、物理的には、1または複数のCPU(Central Processing Unit)21、RAM(Random Access Memory)22およびROM(Read Only Memory)23、カメラなどの撮像装置24、データ送受信デバイスである通信モジュール26、半導体メモリなどの補助記憶装置27、操作盤(操作ボタンを含む)やタッチパネルなどのユーザ操作の入力を受け付ける入力装置28、ディスプレイなどの出力装置29、ならびにCD−ROMドライブ装置などの読み取り装置2Aを備えるコンピュータとして構成され得る。図2における端末装置100の機能は、たとえば、CD−ROMなどの記憶媒体Mに記憶された1または複数のプログラムを読み取り装置2Aにより読み取ってRAM22などのハードウェア上に取り込むことにより、CPU21の制御のもとで撮像装置24、通信モジュール26、入力装置28、出力装置29を動作させるとともに、RAM22および補助記憶装置27におけるデータの読み出しおよび書き込みを行うことで実現される。
また、図11には、コンピュータを端末装置100として機能させるための測位プログラムのモジュールが示される。図11に示されるように、測位プログラムP100は、取得モジュールP110、選定モジュールP120、特定モジュールP130、算出モジュールP140および判定モジュールP150を備えている。各モジュールによって、先に図3を参照して説明した、取得部110、選定部120、特定部130、算出部140および判定部150の機能が実現される。
測位プログラムは、たとえば記憶媒体に格納されて提供される。記憶媒体は、フレキシブルディスク、CD−ROM、USBメモリ、DVD、半導体メモリなどであってよい。
次に、図12〜17を参照して、端末装置100の動作(端末装置100によって実現される測位方法)について説明する。
図12は、端末装置100が測位を行う際に実行される処理の全体フローを示す。この処理は、たとえば所定の周期で繰り返し実行される。なお、とくに説明がない場合、各処理は、制御部160によって実行され得る。
まず、端末装置100は、実ノードチェックインを行う(ステップS100)。この処理では、端末装置100が実ノードNに滞在しているか否かが判別される。また、端末装置100が実ノードNに滞在している場合には、その実ノードNが選定され、対応するノードIDが戻り値として出力される。ステップS100の詳細については、後に図13および図14を参照して説明する。
ステップS100の結果に基づき、実ノードにチェックインしたと判断すると(ステップS200:YES)、端末装置100は、ステップS600に処理を進める。そうでない場合(ステップS200:NO)、端末装置100は、ステップS300に処理を進める。
ステップS300において、端末装置100は、緯度経度変換を行う。この処理は、屋外ノードが存在する(設定されている)場合に実行され、屋外ノードが存在せず屋内ノードのみが存在する(設定されている)場合にはスキップされる。この処理では、たとえば位置情報サービス部がGPS信号を受信することによって取得した緯度経度が、屋外ノードのノードIDに変換される。また、そのノードIDが戻り値として出力される。なお、経度緯度が取得されずに、NULLが戻り値と出力される場合もある。ステップS300の詳細については、後に図15を参照して説明する。
ステップS300の結果を受けて、屋外のノードIDが取得されると(ステップS400:YES)、端末装置100は、ステップS600に処理を進める。そうでない場合(ステップS400:NO)、端末装置100は、ステップS500に処理を進める。
ステップS500において、端末装置100は、仮想ノードチェックインを行う。この処理では、端末装置100が仮想ノードnに滞在しているか否かが判別される。また、端末装置100が仮想ノードnに滞在している場合には、その仮想ノードnが選定され、対応するノードIDが戻り値として出力される。ステップS500の詳細については、後に図16および図17を参照して説明する。ステップS500の処理が完了した後、端末装置100は、ステップS600に処理を進める。
ステップS600において、端末装置100は、経路補完処理および異常ノード判定処理を行う。経路補完処理では、端末装置100が滞在していたノードのうち最後に滞在していたノード(前回ノード)と、端末装置100が現在滞在していると判定されたノード(今回ノード)との間の経路が特定される。前回ノードと今回ノードとの間の経路は、前回ノードから今回ノードに向かうリンクLに沿った経路とされる。また、異常ノード判定処理では、端末装置100が滞在していたノードのうち最後に滞在していたノード(前回ノード)と、端末装置100が現在滞在していると判定されたノード(今回ノード)との間の移動コストに基づいて、今回ノードが、端末装置100が現在滞在しているノードとして適さないノード(異常ノード)であるか否かが判定される。たとえば、移動コストが所定値よりも大きい場合に、今回ノードは異常ノードであると判定される。そうでない場合、今回ノードは、端末装置100が現在滞在しているノードとして適切なノード(正常ノード)であると判定される。正常ノードと判定された場合には、今回ノードのノードIDが戻り値として出力される。なお、今回ノードが仮想ノードnの場合には、経路補完処理が実行されることなく、ノードIDが戻り値として出力される。また、今回ノードが異常ノードであると判定された場合には、経路補完処理が実行されず、前回ノードのノードIDが戻り値として出力される。
ステップS600の結果を受けて、今回ノードが異常ノードであった場合(ステップS700:YES)、端末装置100は、ステップS900に処理を進める。そうでない場合(ステップS700:NO)、端末装置100は、ステップS800に処理を進める。
ステップS800において、端末装置100は、正常ノードIDを保持する。具体的に、先のステップS600で出力されたノードIDが、正常ノードとして保持される。
最後に、端末装置100は、ノードIDに基づいて端末装置の位置を特定する(ステップS900)。具体的に、特定部130が、先のステップS800で正常なノードIDとして保持されたノードIDに対応するノードのノード・リンク構造における位置から、建物1における端末装置100の位置を特定する。
以上の処理が繰り返し実行されることで、実ノードNおよび仮想ノードnを用いた端末装置100の測位が行われる。
次に、図12におけるステップS100において実行される処理の詳細について、図13および図14を参照して説明する。
図13に示されるように、まず、端末装置100は、ビーコン信号を受信する(ステップS101)。具体的に、取得部110が、ノードNからの(発信器Tからの)ビーコン信号を受信することによって、ノードNの(発信器Tの)情報を取得する。種類の異なる複数のビーコン信号が受信される場合には、各情報の一覧(リスト)が取得されてもよい。
次に、端末装置100は、受信したビーコン信号がビーコンDBに含まれているものであるか否かを判断する(ステップS102)。具体的に、先のステップS101で取得部110によって取得されたノードNの情報のうちのUUID(ノードIDでもよい)が、ビーコンDB183(図6)に含まれるか否かが判断される。受信したビーコン信号がビーコンDBに含まれている場合(ステップS102:YES)、端末装置100は、ステップS103に処理を進める。そうでない場合(ステップS102:NO)、端末装置100は、ステップS105に処理を進める。
ステップS103において、端末装置100は、各UUIDの5サンプルのRSSIの平均を算出する。具体的に、先のステップS102でビーコンDB183に含まれていると判断された各UUIDに対応するビーコン信号の5回の受信におけるRSSIの平均値が算出される。その後、端末装置100は、ステップS104に処理を進める。
ステップS104において、端末装置100は、閾値処理を行う。この処理について、図14を参照して説明する。
図14に示されるように、まず、端末装置100は、MaxAveが閾値th1を超えているか否かを判断する(ステップS111)。ここでのMaxAveは、先のステップS101で受信された異なる種類の複数のビーコン信号のRSSIのうち最も大きいRSSIである。MaxAveが閾値th1を超えている場合(ステップS111:YES)、端末装置100は、ステップS112に処理を進める。そうでない場合(ステップS111:NO)、端末装置100は、ステップS119に処理を進める。
ステップS112において、端末装置100は、要素が2つ以上であるか否かを判断する。具体的に、先のステップS111でMaxAveが閾値th1を超えていると判断されたビーコン信号が2つ以上であるか否かが判断される。要素が2つ以上の場合(ステップS112:YES)、端末装置100は、ステップS114に処理を進める。そうでない場合(ステップS112:NO)、端末装置100は、ステップS113に処理を進める。
ステップS113において、端末装置100は、ビーコンDBを参照し、UUIDに対応するノードIDを取得する。具体的に、ビーコンDB183(図6)が参照され、先のステップS111でMaxAveが閾値th1を超えていると判断された1つのビーコン信号のUUIDに対応するノードIDが取得される。ステップS114の処理が完了した後、端末装置100は、ステップS118に処理を進める。
ステップS114において、端末装置100は、DiffMaxが閾値th2以上であるか否かを判断する。ここでのDiffMaxは、先のステップS111においてMaxAveが閾値th1を超えていると判断された2つ以上のビーコン信号のうち、RSSIが最も大きいビーコン信号のRSSIと、RSSIが2番目に大きいビーコン信号のRSSIとの差(DiffMax)である。DiffMaxが閾値th2以上の場合(ステップS114:YES)、端末装置100は、ステップS115に処理を進める。そうでない場合(ステップS114:NO)、端末装置100は、ステップS116に処理を進める。
ステップS115において、端末装置100は、ビーコンDBを参照し、RSSI(最大値)が最大のUUIDに対応するノードIDを取得する。具体的に、ビーコンDB183(図6)が参照され、先のステップS111においてMaxAveが閾値th1を超えていると判断された2つ以上のビーコン信号のうち、RSSIが最も大きいビーコン信号のUUIDに対応するノードIDが取得される。ステップS115の処理が完了した後、端末装置100は、ステップS118に処理を進める。
ステップS116において、端末装置100は、DiffAveが閾値th3以上であるか否かを判断する。ここでのDiffAveは、先のステップS111においてMaxAveが閾値th1を超えていると判断された2つ以上のビーコン信号のうち、RSSIの平均値が最も大きいビーコン信号のRSSIと、RSSIの平均値が2番目に大きいビーコン信号のRSSIとの差である。DiffAveが閾値th3以上の場合(ステップS116:YES),端末装置100は、ステップS117に処理を進める。そうでない場合(ステップS116:NO)、端末装置100は、ステップS119に処理を進める。
ステップS117において、端末装置100は、ビーコンDBを参照し、RSSI(平均値)が最大のUUIDに対応するノードIDを取得する。具体的に、ビーコンDB183(図6)が参照され、先のステップS111においてMaxAveが閾値th1を超えていると判断された2つ以上のビーコン信号のうち、RSSIの平均値が最も大きいビーコン信号のUUIDに対応するノードIDが取得される。ステップS117の処理が完了した後、端末装置100は、ステップS118に処理を進める。
ステップS118において、端末装置100は、ノードIDを出力する。具体的に、先のステップS113,S115またはS117において取得されたノードIDが、閾値処理(図13のステップS104)および実ノードチェックインの処理(図12のステップS100)での戻り値に設定される。
ステップS119において、端末装置100は、NULLを出力する。具体的に、NULLが、閾値処理(図13のステップS104)および実ノードチェックインの処理(図12のステップS100)での戻り値に設定される。
再び図13に戻り、ステップS105において、端末装置100は、NULLを出力する。具体的に、NULLが、実ノードチェックインの処理(図12のステップS100)での戻り値に設定される。
以上のようにして、閾値th1〜th3を用い、端末装置100における実ノードNからのビーコン信号のRSSIに基づいて、端末装置100が実ノードNに滞在しているか否か、また、滞在している場合にはいずれの実ノードNに滞在しているかが判定される。なお、その際、機種別補正DB(図7)が参照され、端末装置100の機種に応じて、閾値th1〜th3が補正されてもよい。
次に、図12におけるステップS300において実行される処理の詳細について、図15を参照して説明する。
図15に示されるように、まず、端末装置100は、屋内のみの施設か否かを判断する(ステップS301)。この判断は、たとえば、位置情報サービス部111が受信するサービス情報に基づいて行われる。屋内のみの施設である場合(ステップS301:YES)、端末装置100は、ステップS302に処理を進める。そうでない場合(ステップS301:NO)、端末装置100は、ステップS300(図12)の処理を完了する。
ステップS302において、端末装置100は、5サンプル分の緯度経度の平均値を算出し、代表緯度経度とする。具体的に、位置情報サービス部111によるGPS信号の受信を利用して得られた5回分の測位結果(緯度経度)平均値が算出され、代表緯度経度とされる。なお、GPS信号の受信レベルが十分でないなどの理由で緯度経度が算出されなかった場合には、ステップS303以降の処理がスキップされ、NULLが、緯度経度変化の処理(図12のステップS300)での戻り値に設定される。
ステップS302の処理が完了した後、端末装置100は、代表緯度経度が対応するメッシュIDを算出する(ステップS303)。たとえば、記憶部180がメッシュID(図8)と緯度経度とを対応づけて記述しており、その情報が参照されることによって、先のステップS302で算出された代表緯度経度に対応したメッシュIDが特定される。
ステップS303の処理が完了した後、端末装置100は、メッシュDBを参照し、メッシュIDに対応するノードIDを返す(ステップS304)。具体的に、メッシュDB184(図8)が参照され、先のステップS303で算出されたメッシュIDに対応するノードIDが返される。
ステップS304の処理が完了した後、端末装置100は、ノードIDがNULLか否かを判断する(ステップS305)。具体的に、先のステップS304で返されたノードIDがNULLであるか否かが判断される。ノードIDがNULLの場合(ステップS305:YES)、端末装置100は、ステップS306に処理を進める。そうでない場合(ステップS305:NO)、端末装置100は、ステップS309に処理を進める。
ステップS306において、端末装置100は、前回の正常ノードIDを返す。先に説明したように、図12の処理はたとえば所定の周期で繰り返し実行されるので、先に説明したステップS304の処理も繰り返し実行され得る。このため、今回のループよりも前のループにおいてステップS304でNULLでないノードIDが返されていれば、直近のステップS304で返されたNULLでないノードIDが、正常ノードIDとなる。
ステップS306の処理が完了した後、端末装置100は、ノードDBを参照し、屋内ノードか屋外ノードかを判断する(ステップS307)。具体的に、ノードDB181が参照され、先のステップS306で返されたノードIDに対応するカテゴリに基づいて、当該ノードIDが屋内ノードであるか屋外ノードであるかが判断される。屋内ノードの場合、端末装置100は、ステップS308に処理を進める。屋外ノードの場合、端末装置100は、ステップS310に処理を進める。
ステップS308において、端末装置100は、メッシュDBを参照し、前回の正常ノードIDの最近傍の屋外のノードIDを返す。具体的に、メッシュDB184が参照され、先のステップS306で返されたノードIDに対応する最近傍屋外ノードIDが、緯度経度変化の処理(図12のステップS300)での戻り値に設定される。
ステップS309において、端末装置100は、ノードDB181を参照し、屋内ノードか屋外ノードかを判定する。この判定の手法は、先に説明したステップS307と同様であるので、ここでは説明を省略する。屋内ノードの場合、端末装置100は、ステップS311に処理を進める。屋外ノードの場合、端末装置100は、ステップS310に処理を進める。
ステップS310において、端末装置100は、屋外のノードIDを返す。つまり、この屋外ノードIDが、緯度経度変化の処理(図12のステップS300)での戻り値に設定される。
ステップS311において、端末装置100は、メッシュDBを参照し、メッシュIDに対応する最近傍屋外ノードIDを返す。つまり、この最近傍屋外ノードIDが、緯度経度変化の処理(図12のステップS300)での戻り値に設定される。これにより、たとえば、位置情報サービス部111によるGPS信号を用いた測位結果において端末装置100が屋内に位置しているという誤った結果が出力された場合には、その結果が是正される。
再び図12に戻り、ステップS300の処理が完了した後、端末装置100は、屋外のノードIDを取得したか否かを判断する(ステップS400)。具体的に、先のステップS300での戻り値が屋外のノードIDであったか否かが判断される。なお、先のステップS300での戻り値が屋外のノードIDでない場合は、先に説明したようにステップS302において緯度経度が算出されずNULLが戻り値に設定される場合である。屋外のノードIDを取得した場合(ステップS400:YES)端末装置100は、ステップS600に処理を進める。そうでない場合(ステップS400:NO)、端末装置100は、ステップS500に処理を進める。
次に、図12のステップS500において実行される処理の詳細について、図16および図17を参照して説明する。
図16に示されるように、まず、端末装置100は、経路選定処理を行う(ステップS501)。たとえば選定部120が、前回ノードから到達可能な実ノードNのうちの最初に到達可能な(つまり最も近い)実ノードNに至るすべての経路を検索する。換言すれば、前回ノードに対応するすべてのリンクが検索される。
次に、端末装置100は、経路が複数か否かを判断する(ステップS502)。たとえば仮想ノード滞在判定部152が、先のステップS501において検索した経路の数が2以上であるか否かを判断する。経路が複数である場合(ステップS502:YES)、端末装置100は、ステップS506に処理を進める。そうでない場合(ステップS502:NO)、端末装置100は、ステップS503に処理を進める。
ステップS503において、端末装置100は、隣接ノードが実ノードか否かを判断する。たとえば仮想ノード滞在判定部152が、先のステップS501において選定された1つの経路を介して前回ノードに隣接するノードが、実ノードNであるか否かを判断する。前回ノードに隣接するとは、前回ノードから、他のノードを経由することなく到達することが可能なノードである。隣接ノードが実ノードの場合(ステップS503:YES)、端末装置100は、ステップS504に処理を進める。そうでない場合(ステップS503:NO)、端末装置100は、ステップS505に処理を進める。
ステップS504において、端末装置100は、ノードIDをNULLに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは実ノードNであり、仮想ノードnではないと判断する。また、たとえば選定部120が、NULLを戻り値として出力する。
ステップS505において、端末装置100は、ノードIDを仮想ノードのノードIDに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、先のステップS501において選定された1つの経路を介して前回ノードに隣接する(つまり当該経路に対応するリンクL上に設定された)仮想ノードnであると判断する。また、たとえば選定部120が、当該仮想ノードnのノードIDを戻り値として出力する。
ステップS506において、端末装置100は、隣接する仮想ノードがいくつ存在するかを判断する。たとえば仮想ノード滞在判定部152が、前回ノードに隣接する仮想ノードnがいくつ存在するかを判断する。各ノード間に仮想ノードnが1つ設定されていれば、前回ノードに隣接する仮想ノードnは、前回ノードに対応するリンクL上に設定された仮想ノードnとなる。隣接する仮想ノードが存在しない(0の)場合、端末装置100は、ステップS507に処理を進める。隣接する仮想ノードが1つの場合、端末装置100は、ステップS508に処理を進める。隣接する仮想ノードが2つ以上の場合、端末装置100は、ステップS509に処理を進める。
ステップS507において、端末装置100は、ノードIDをNULLに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、仮想ノードnではないと判断する。また、たとえば選定部120がNULLを戻り値として出力する。
ステップS508において、端末装置100は、ノードIDを仮想ノードのノードIDに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、先のステップS506において判断された1つの仮想ノードnであると判断する。また、たとえば選定部120が、当該仮想ノードnのノードIDを戻り値として出力する。
ステップS509において、端末装置100は、距離比較処理を行う。この処理は、たとえば選定部120が、先のステップS506で判断された2つ以上の仮想ノードnから、1つの仮想ノードnを選定するための処理であり、詳細については、後に図17を参照して説明する。
ステップS509の結果を受けて、端末装置100は、ノードIDを仮想ノードのIDに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、先のステップS509の距離比較処理で選定された1つの仮想ノードnであると判断する。また、たとえば選定部120が、当該仮想ノードnのノードIDを戻り値として出力する。
次に、図16のステップS509の処理の詳細について、図17を参照して説明する。
図17に示されるように、まず、端末装置100は、総リンク距離を算出する。この処理は、算出部140によって実行される。総リンク距離は、端末装置100が最後に滞在していた実ノードNと、当該実ノードNから他の実ノードNを介さずに到達可能な実ノードNとの間の経路上の距離である。総リンク距離は、ノードDB181およびリンクDB182(図4および図5)を参照することによって算出される。
具体的に、算出部140による総リンク距離の算出の例について、図18を参照して説明する。図18には、実ノードN1〜N4、仮想ノードn1〜n3、リンクL1〜L3で構成されるノード・リンク構造が示される。リンクL1は、実ノードN1と実ノードN2との間に設定される。リンクL2は、実ノードN1と実ノードN3との間に設定される。リンクL3は、実ノードN1と実ノードN4と間に設定される。仮想ノードn1は、リンクL1上に設定される。仮想ノードn2は、リンクL3上に設定される。仮想ノードn3は、図示しないリンク上に設定される。
たとえば端末装置100が最後に滞在していた実ノードNが実ノードN1の場合、総リンク距離は次のようにして算出される。すなわち、実ノードN1から他の実ノードNを介さずに到達可能な実ノードNは、実ノードN2〜N4であるので、総リンク距離は、実ノードN2〜N4の各々と、実ノードN1との距離として算出される。このような総リンク距離は、算出部140が、たとえば、ノードDB181(図4)によって記述された各ノードの位置情報(たとえばX座標およびY座標の値)を用いて算出することができる。ここでは、実ノードN2と実ノードN1との総リンク距離が10として算出され、実ノードN4と実ノードN1との総リンク距離が10として算出されるものとする。
再び図17に戻り、次に、端末装置100は、実測距離を算出する(ステップS522)。この処理は、算出部140によって実行される。実測距離は、先のステップS506において判断された2つ以上の仮想ノードnが設定されたリンクに対応する実ノードNのそれぞれと、端末装置100との距離である。実測距離は、端末装置100における各実ノードNからのビーコン信号のRSSIに基づいて算出され得る。これは、各実ノードNからの距離と、RSSIとが一定の関連性を有するためである。
たとえば図18に示される例では、端末装置100が最後に滞在していた実ノードNが実ノードN1であるので、実ノードN1に隣接する仮想ノードn1が設定されたリンクL1に対応する、実ノードN2と端末装置100との距離が、実測距離とされる。さらに、実ノードN1に隣接する仮想ノードn2が設定されたリンクL3に対応する、実ノードN4と端末装置100との距離も、実測距離とされる。ここでは、実ノードN2と端末装置100との間の距離が5として算出され、実ノードN4と端末装置100との距離が13として算出されるものとする。
次に、端末装置100は、総リンク距離より実測距離が短い経路がいくつあるかを判断する(ステップS523)。この処理は、たとえば選定部120によって実行される。たとえば、上述の図18の例では、実ノードN2と実ノードN1との総リンク距離が10であり、実ノードN4と実ノードN1と総リンク距離が10である。これに対し、実ノードN2と端末装置100との実測距離が5であり、実ノードN4と端末装置100との実測距離が13である。この場合、実ノードN2と実ノードN1との総リンク距離が10であるのに対し、実ノードN2と端末装置100との実測距離が5であるので、総リンク距離より実測距離が短い経路が1つ存在することになる。
総リンク距離より実測距離が短い経路が存在しない場合、端末装置100は、ステップS524に処理を進める。総リンク距離より実測距離が短い経路が1つの場合、端末装置100は、ステップS525に処理を進める。総リンク距離より実測距離が短い経路が2つ以上の場合、端末装置100は、ステップS526に処理を進める。
ステップS524において、端末装置100は、ノードIDをNULLに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、仮想ノードnではないと判断する。また、たとえば選定部120が、NULLを戻り値として出力する。
ステップS525において、端末装置100は、ノードIDを経路上の仮想ノードのノードIDに設定する。たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、先のステップS524において総リンク距離より実測距離が短いと判断された1つの経路上の(つまりこの経路に対応するリンクL上の)仮想ノードnであると判断する。また、たとえば選定部120が、当該仮想ノードnのノードIDを戻り値として出力する。
ステップS526において、端末装置100は、総リンク距離と実測距離との差の絶対値が最も大きくなる経路を選定する。この処理は、先のステップS523で判断された2つ以上の経路から、1つの経路を選定するための処理であり、たとえば選定部120によって実行される。上述の図17の例では、総リンク距離と実測距離との差の絶対値は、実ノードN2と実ノードN1との総リンク距離および実ノードN2と端末装置100との実測距離については5(すなわち(10−5)の絶対値)であり、実ノードN4と実ノードN1との総リンク距離および実ノードN4と端末装置100との実測距離については3(すなわち(10−13)の絶対値)であるので、実ノードN2に向かう経路(リンクL1)が選定される。
そして、端末装置100は、ノードIDを経路上の仮想ノードのノードIDに設定する(ステップS527)。具体的に、たとえば仮想ノード滞在判定部152が、端末装置100が滞在しているノードは、先のステップS526において選定された経路上の(つまりこの経路に対応するリンクL上の)仮想ノードnであると判断する。また、たとえば選定部120が、当該仮想ノードnのノードIDを戻り値として出力する。なお、図18に示される例では、仮想ノードn1のノードIDが戻り値として出力されることとなる。たとえば以上のようにして、複数の実ノードNと端末装置100との各距離に基づいて、端末装置100が滞在している仮想ノードnが推定される。
次に、端末装置100の作用効果について説明する。端末装置100では、取得部110が、実ノードN(発信器T)から発信されたビーコン信号を受信することによって、実ノードNの情報を取得する(ステップS101)。また、選定部120等が、取得部110によって取得された情報に基づいて、リンクL上に設定された仮想ノードnを選定する(ステップS505,S508,S510,S525,S527)。そして、特定部130が、選定部120等によって選定された仮想ノードnに基づいて、端末装置100の位置を特定する(ステップS900)。ここで、実ノードNは発信器Tを設置することによって実現されるのに対し、仮想ノードnは発信器Tを設置することなく実現される。このような仮想ノードnを用いることで、その分、実ノードNの数を低減することができる。その結果、設置しなければならない発信器Tの数を低減することができる。したがって、測位に必要な発信器Tの数を低減することが可能になる。
また、選定部120等は、端末装置100が最後に滞在していたノードに対応するリンクL上に設定された仮想ノードnを選定する(ステップS501〜S504,S506,S508〜S510)。端末装置100は、滞在していたノード(前回ノード)を離れた後、次の実ノードに滞在するまでの間は、前回ノードに対応するリンクL上にいると考えられる。このため、上記のように前回ノードに対応するリンクLを選定することで、端末装置100が滞在している可能性の高い仮想ノードnを選定することができる。
また、算出部140は、複数の実ノードNと端末装置100との各距離を、複数の実ノードNから発信されビーコン信号のRSSIに基づいてそれぞれ算出する(ステップS522)。そして、選定部120は、算出部140の算出結果に基づいて、前回ノードに対応するリンクL上に設定された複数の仮想ノードから、端末装置100が滞在していると推定される仮想ノードnを選定する(ステップS523,S525〜S527)。たとえば、端末装置100から最も距離が近い実ノードNへと向かう(分岐している)リンク上の仮想ノードnが、端末装置100が滞在していると可能性の高い仮想ノードnとして選定される。これにより、端末装置100が滞在している可能性の高い仮想ノードnが選定される。
たとえば、複数の実ノードNおよび複数のノードN間のリンクLが配置された所定の領域は、建物1を含む領域とされる。この場合、実ノードNは、建物1での通路3の接続点を含む位置に対応してもよい。また、仮想ノードnは、実ノードNを除くリンクL(通路3)上のいずれかの位置に対応してもよい。この場合、実ノードNを実現するための発信器Tを建物1の通路3の接続点に設置すれば、各接続点の間、つまり通路3の途中には発信器Tを設置しなくとも、仮想ノードnに基づいて端末装置100の位置を特定することができる。よって、通路3の途中にも発信器Tを設置する場合よりも、発信器Tの設置数を低減することができる。
以上説明した端末装置100の各機能は、たとえば、コンピュータにおいて測位プログラムが実行されることによって実現することもできる。
以上、本発明の一実施形態について説明したが、本発明は、上記実施形態に限定されるものではない。
たとえば、端末装置100は、通信部170を用いて、サーバ(不図示)と通信してもよい。この場合、たとえば、端末装置100の選定部120、特定部130、算出部140、判定部150の少なくとも一部の機能を、サーバ側で備えるようにしてもよい。これにより、端末装置100での処理負担を軽減するとともに、端末装置100の構成を簡素化することができる。この場合、端末装置100およびサーバによって構成されるシステムが、本発明に係る端末装置に相当する。