以下、図面を参照しながら、本発明の実施形態について説明する。
(第1の実施形態)
図1は第1の実施形態に係る無線通信システムの構成を示す図である。本ネットワークは1台のコンセントレータ(集約装置)101と複数の無線ノード(以下、ノード)102とを備える無線マルチホップネットワークである。各ノード102はセンサを搭載している。各ノード102は、センサで測定した情報を含むデータと、下位のノード(子ノード)から受信したデータとを上位のノードに送信(中継)する。これにより、各ノード102で取得されたセンサ情報がコンセントレータ101に集まる。
図2は、図1のシステム構成をネットワークトポロジーの形態で表した図である。コンセントレータ101を根ノードと称する。またノード102は、丸で囲んだアルファベットで表現されている。ノードA,B,及びCは直接に根ノードと直接通信する。ノードD,E,F及びGは、それぞれA,B,またはCを介して根ノードと通信する。このように、各ノード102は直接あるいは他のノードを介して根ノードと通信する。このようなネットワークを、メッシュネットワークと呼ぶ。ここで、根ノードに近い側(ホップ数が小さい側)を上流側、根ノードから遠い側(ホップ数が多い側)を下流側とする。また各ノードが、下流側のデータを受信し、受信したデータを上流側に向かって送信しなおすことを中継と呼ぶ。中継を行うノードを中継ノードと呼ぶ。中継に当たっては、中継ノードが、自ノードで測定したセンサ情報等のデータを、受信した下流側のデータに追加することもある。中継にあたり、自ノードを送信相手として指定して送信してくる下流側のノードを子ノード、自ノードが無線信号を送信する相手となるノードを親ノードと呼ぶこととする。また、自ノードを集約装置101までの経路に含んでいるノードを子孫ノードと呼ぶ。子ノードも子孫ノードの一例である。また、以下の説明において、自ノードよりホップ数が少ないノードを上位ノード、自ノードよりホップ数が多いノードを下位ノードと呼ぶこともある。
図3は、第1の実施形態に係る無線マルチホップネットワークの通信方式を説明する図である。本ネットワークでは通信方式として時分割通信を行う。時分割通信では、時間をフレームに分割し、さらにフレームをスロットに細分化する。各ノードは特定のスロットを占有し、フレーム周期で無線信号を送信する。送信する無線信号は、具体的にはパケットの形態を有する。パケットのフォーマットについては後述する。図3の例では、各フレームにおける1番目のスロットがノードCに割り当てられている。ノードCが無線信号を送信するときは、各フレームにおける1番目のスロットにて無線信号を送信する。同様にノードAは各フレームにおける3番目のスロット、ノードBは各フレームにおける第5番目のスロットにて無線信号を送信する。
図4は、無線マルチホップネットワークの基本的な動作を説明するための図である。根ノードであるコンセントレータ(図4において図示せず)に至る各経路の途中にノード2,3,4,5,7がある。ノード2に対してノード3と5が無線接続(以下、接続)されている。また、ノード5に対してノード4が接続されており、ノード4に対してノード7が接続されている。接続とは予め接続処理および認証処理を行って、互いのパラメータ交換等を済ませた状態を意味する。接続されたノード間は親ノードと子ノードの関係にある。ノード3と5は、コンセントレータ101からRホップ目である。またノード4はR+1ホップ目である。
図5は、無線マルチホップネットワークの基本的な動作の説明図である。スロットベースの時分割通信を行う動作を示す。横軸は時間である。各ノードに対して根ノードからのホップ数(中継回数)に同じ値のランクを割り当てる。また、隣接する所定数の複数スロットをまとめてスロット群と定義する。フレーム内には複数のスロット群が配置される。そしてスロット群の中で最初のスロットをスロット番号1、次をスロット番号2、というように番号付けする。
各ノードは自ノードのランクに対応したスロット群で送信する。ここで、ランクが大きいノード(根ノードから遠いノード)ほど、フレーム内の複数のスロット群のうち、時間的に早いスロット群を使用する。例えば根ノードに直接信号が届くランクが1のノードについては、フレーム内の複数のスロット群のうち、もっとも時間的に後のスロット群を利用する。またランクが1のノードと通信可能なランクが2のノードについては、フレーム内の複数のスロット群のうち、最後から2番目のスロット群を使う。図4に示した例では、ノード3と5はコンセントレータ101からのホップ数がRであるため、フレーム内の最後からR番目のスロット群を用いる。これにより、根ノードから遠い下流側ノードから順に上流側の根ノードに向かって、1フレーム以内でデータを中継する形態が実現できる。
また、各ノードは、自ノードのランクに対応するスロット群の中で、自ノードのID(ノードID)と同一の番号のスロット番号のスロットを使う。例えばノード3は、フレーム内の複数のスロット群のうち、最後からR番目のスロット群の中で、スロット番号3のスロットを使う。このようにすることで、システム内でノードIDの重複が無ければ、送信した無線信号が衝突することは無い。
親ノードは、子ノードの送信タイミングにおいて、受信動作を行う。例えば、ノード5の子ノードであるノード4の送信タイミングは、最後からR+1番目の、スロット番号4である。したがって、ノード5は、最後からR+1番目のスロット番号4において受信動作を行う。
子ノードは、親ノードの存在確認のために親ノードの送信した無線信号を受信する動作を行ってもよい。例えばノード5は、親ノードであるノード2の無線信号を受信し、ノード2が存在している(無線マルチホップネットワークから離脱していない)ことを確認する。ノード2のランクはR−1であるから、ノード5は、最後からR−1番目のスロット群のスロット番号2において受信動作を行う。
ノードは省電力化のため、送信及び受信するスロット以外の期間では、スリープする。スリープの動作例として、自ノードの回路(プロセッサ、通信回路等)の一部または全部の動作を停止させる。ノード5の場合、送信及び受信するスロットは、子ノードからの受信用のスロット、自ノードの送信用のスロット、親ノードからの受信用のスロットである。ノード5は、これらの3つのスロットでのみ動作し、他のスロットではスリープする。
ここで親ノードからの無線信号の受信について説明する。例えばノード4は、親ノード5からの受信用のスロットでは、親ノード5がさらにその親ノード2に送信する無線信号を受信する。この無線信号には、親ノード5がそのさらに親となるノードに送信するデータの他に、自ノード4が親ノード5に送信したデータが親ノード5で受信成功したかを示す受信確認信号(ACK)も含まれている。このACKを確認することで、ノード4は、自ノードの送信成功可否を確認できる。また、親ノード5からの無線信号を受信することで、親ノード5の存在を確認できる。ここではノード4を例に説明したが、他のノードも同様の動作を行う。
無線マルチホップネットワークにおいて、あるノードについて、通信可能な複数の上位ノード(親ノードの候補)が存在する場合は、これらの上位ノードの中から、親ノードを選択する必要がある。親ノードを選択する方法としては、ETX(Expected Transmission)と呼ばれる方式が良く知られている。以下、ETX方式について説明する。
ETX方式では、親ノードの選択のために、リンクコストおよびパスコストを用いる。
リンクコストとは、あるノードから、直接の通信相手のノード(例えば親ノード)までの通信に掛かるコストと定義される。ETX方式の場合、リンクコストは、あるノードから、通信相手のノードへデータを誤り無く送るのに必要な送信回数の期待値である。データを誤り無く1回で送れるのであれば、リンクコストは1である。再送が1回あるいは2回必要な場合(再送回数の期待値が1または2の場合)は、リンクコストは2あるいは3となる。再送回数の期待値は、一例として、過去の再送回数の平均値などが用いられる。
パスコストとは、あるノードから根ノードまでの通信に掛かるコストのことである。ETX方式の場合、パスコスト(以下、ETXパスコスト)は、総送信回数の期待値、すなわち根ノードへ至る経路上の全てのリンクコストの加算値である。ETXパスコストが小さいということは、ホップ数が少ないか、経路上のデータ誤りが少ないことを意味している。
図6に、リンクコスト及びETXパスコストの計算例を示す。ノードAから根ノードまでのリングコスト(LC)は4である。これは、ノードAから根ノードまでデータを送信するために、最初の送信に加え、期待値として3回の再送が必要であることを示している。ノードAは根ノードに直接接続されているため、ノードAのETXパスコスト(PC)は、リンクコストと同じ4である。
ノードCからノードAまでのリンクコストは3である。ノードCからノードAを経由して根ノードまでのETXパスコストは、ノードAのETXパスコストと、ノードCのリンクコストとの合計で7となる。すなわち、ノードCからノードAを経由して根ノードへ至る経路では、期待される総送信回数は7である。
このようなETXパスコストを利用して親ノードを選択する例を、ノードNについて説明する。ノードNの親ノード候補として、ノードC、ノードA、ノードBおよび根ノードが存在する。ノードNは、これらのノードを含む、根ノードへ至る4つの経路のそれぞれについて、ETXパスコストを計算する。そして、最もETXパスコストが小さい経路に含まれる親ノード候補を親ノードとする。ETXパスコストが小さい経路は、言い換えれば安定した通信品質でデータ送信が可能な経路であると言える。本例では、ETXパスコストが最も少なくなる経路は、ノードCを経由する経路である。ノードNは、ノードCを親ノードとして選択する。
各ノードは、自ノードのETXパスコストを含む無線信号を、自ノード用のスロットで送信(報知)する。周囲のノードは、この無線信号を受信することで、当該ノードのETXパスコストを把握できる。例えばノードAは、EXTパスコスト4を報知する。なお、以下の説明において、“EXTパスコストx”(xは実数)は、値がxのEXTパスコストを意味する。ノードCは、ノードAから受信したEXTパスコスト4に、ノードAおよびノードC間のリンクコスト3を加算して、EXTパスコスト7を得る。ノードCは、EXTパスコスト7を報知する。ノードNは、ノードCから受信したEXTパスコスト7に、ノードNおよびノードC間のリンクコスト2を加算して、ノードCを経由する場合の自ノードから根ノードまでの経路のEXTパスコスト9を得る。ノードNは、ノードA、根ノード、ノードBに対しても同様にして、EXTパスコストを計算し、それぞれ13、15、11を得る。ノードCを経由する場合のパスコストが最も小さいため、ノードCを親ノードとして選択する。
ETX方式では、リンクが安定していて再送回数が少ない経路が選ばれる傾向がある。その結果、安定した経路に含まれるノードに中継されるデータが集中し、輻輳が発生し易い。
図7は、輻輳の問題を説明する図である。この例ではツリー型ネットワークの極端な例のうちの1つとして、全部で9台のノードA,B,C,D,E,F,G、H,Iがすべて数珠つなぎになっている。この場合、中継のたびに、各ノードで自ノード用のデータが追加されるため、根ノードに最も近いノードは、全部で9台分のデータを送信しなければならない。図のリンクに付された数字は、何台分のノードのデータを中継しているかを表している。ノードに多くのデータが集まると、このノードでデータのうちの一部を送信できない、あるいはデータのうちの一部をノード内のメモリに蓄積できなくなる場合がある。この結果、データが欠損し、根ノードによりデータの収集が失敗する可能性がある。
図8は、図7で説明した輻輳が解決するネットワーク構成のうちの1つを示す。図8の例では、図7に比べて多くのノードが、根ノードに直接接続されている。根ノードに直接接続するノードは、中継の依頼先となる上位ノードが存在しない。したがって根ノードに直接接続するノードを増やす事は、輻輳の回避に効果がある。一般的には、ホップ数が増えるほど、子孫ノード数が増えることになり、根ノードに近いノードにとっては、輻輳が起こりやすくなる。逆にホップ数が少ない場合は、子孫ノード数が少ない傾向になるため、輻輳が起こりにくくなる。よって、根ノードに直接接続するノードを増やすこと(ランク1のノードを増やすこと)、輻輳を効果的に回避できる。図8の例では、根ノードに直接するノードは3つであり、そのうち2つのノードH、Iは自ノードのみのデータを根ノードに送信し、残りの1つのノードGは、7台分のデータを根ノードに送信する。図7の例では根ノードに直接接続するノードIが、9台分のデータを送信したが、図8の例では、根ノードに直接接続するノードGは、7台分のデータを送信すればよく、ノードH、Iは自ノードのみのデータを送信すればよいため、1ノードあたりの負荷を低減できる。
そこで、本実施形態では、ホップ数を減らし、ひいてはランクが1のノードを増やしたネットワーク構成を実現する。このために、1ホップごとに加算されるホップペナルティを導入する。
図9は、本実施形態に係るパスコスト(経路の評価値)を説明する図である。ノードAは根ノードに直接接続されており、ノードAと根ノードの間のリンクコスト(LC)は4である。なお、根ノードに直接されるノードの場合、根ノードへの経路のパスコストは、リンクコストに一致するものとする。
各ノードは、上位ノードから受信したパスコスト(受信PC)に、リンクコストを加算して、上位ノードを経由する場合の自ノードから根ノードまでの経路のパスコストを計算する。そして、このパスコストに、ホップペナルティ(=1)を加算し、加算後のパスコストを、自ノードを経由する場合の自ノードから根ノードまでの経路のパスコスト(評価値)として報知する。このパスコストを受信した下流のノードは、受信したパスコスト(受信PC)にリンクコストを加算することで、当該上位ノードを経由する場合の自ノードから根ノードまでの経路のパスコストを計算する。そして、計算したパスコストにホップペナルティ1を加算して、加算後のパスコストを、自ノードを経由する場合の自ノードから根ノードまでの経路のパスコストとして報知する。このような動作を各ノードで行う。
具体的には、図9において、ノードAは、根ノードとのリンクコスト4にホップペナルティ1を加算してパスコスト5を取得し、パスコスト5を報知する。つまり、ノードAを経由する場合のノードAから根ノードまでのパスコストは5であることを報知する。なお、“パスコストx”(xは実数)は、値がxのパスコストを意味する。同様に、ノードBは根ノードとのリンクコスト5にホップペナルティ1を加算してパスコスト6を取得し、パスコスト6を報知する。つまり、ノードBを経由する場合のノードBから根ノードまでのパスコストは6であることを報知する。
ノードCはノードAから受信したパスコスト(受信PC)5に、リンクコスト3を足した値8を、ノードAを経由の場合のノードCから根ノードまでの経路のパスコストとする。ノードCは、パスコスト8にホップペナルティ1を加算してパスコスト9を取得し、パスコスト9を報知する。つまり、ノードCを経由する場合のノードCから根ノードまでのパスコストは9であることを報知する。
ノードNはノードCから受信したパスコスト9に、ノードCとのリンクコスト2を足した値11を、ノードCを経由する場合のノードNから根ノードへの経路のパスコストとする。同様に、ノードNはノードAから受信したパスコスト5に、ノードAとのリンクコスト5を足した値10を、ノードAを経由する場合のノードNから根ノードへの経路のパスコストとする。ノードNは、根ノードと直接接続する場合、根ノードとのリンクコスト15をそのままノードNから根ノードへの経路のパスコストとする。ノードNはノードBから受信したパスコスト6に、ノードBとのリンクコスト5を足した値11を、ノードBを経由する場合のノードNから根ノードへの経路のパスコストとする。ノードNは、最も小さいパスコスト10が得られた経路の上位ノードであるノードAを、親ノードとして選択する。パスコストは、親ノード選択に用いられる指標であり、経路の評価値に相当する。
このようにすることで、ホップ数が多いノードは、親ノードとして選ばれにくくなる。図9の例では、ノードNにとっては、ノードCを経由する経路よりも、ノードAを経由する経路の方が、パスコストが小さくなる。従って、ノードAを経由する経路が選択される。なお、親ノードが決定済みのノードであっても、親ノードの再選択処理を適宜行ってもよい。その場合、ノードNと同様に、上位ノードから受信したパスコストにリンクコストを加算した値(ホップペナルティを加算する前の値)を用いて、親ノードを決定すればよい。
以上の説明から理解できるように、ノードNのパスコスト(経路の評価値)は、根ノードに至るまでの経路の通信経路品質(経路上のリンクコストの合計)と、ホップ数情報とに基づいた計算される値である。ホップ数情報は、根ノードに至るまでの経路上のホップ数を表す。ホップペナルティの値が1ホップあたり1である場合、ホップ数情報は、経路上のホップペナルティの合計である。
具体的には、ノードNについて、ノードCを経由する場合の根ノードまでの経路の通信経路品質は、経路のリンクコストの合計であり、4+3+2=9である。当該経路上のノードのホップ数情報は2である。すなわち、ノードNの上流に根ノードに至るまでにノードA、Cの2つが存在する。したがって、経路の評価値(パスコスト)は9+2=11である。この値は、上記の説明におけるノードCを経由する場合のパスコスト11と一致する。
同様に、ノードNについて、ノードAを経由する場合の根ノードまでの経路の通信経路品質は、経路のリンクコストの合計であり、4+5=9である。当該経路上のノードのホップ数情報は1である。すなわち、ノードNの上流に根ノードに至るまでにノードAの1つが存在する。したがって、経路の評価値(パスコスト)は9+1=10である。この値は、上記の説明におけるノードAを経由する場合のパスコスト10と一致する。
同様に、ノードNについて、根ノードまでの経路の通信経路品質は、根ノードとのリンクコストに一致し15である。当該経路上のノードのホップ数情報は0である。すなわち、ノードNの上流には、根ノードに至るまでに他のノードは1つも存在しない。したがって、経路の評価値(パスコスト)は15+0=15である。この値は、上記の説明における根ノードに直接接続する場合のパスコスト15と一致する。
ノードNについて、ノードBを経由する場合の根ノードまでの経路の通信経路品質は、経路のリンクコストの合計であり、5+5=10である。当該経路上のノードのホップ数情報は1である。すなわち、ノードNの上流に根ノードに至るまでにノードBの1つが存在する。したがって、経路の評価値(パスコスト)は10+1=11である。この値は、上記の説明におけるノードBを経由する場合のパスコスト11と一致する。
図9の説明では、各ノードはホップペナルティ1を加算して、周囲のノードにパスコストを報知したが、別の方法として、各ノードはホップペナルティを加算せずに、ETX方式と同じパスコスト(ETXパスコスト)を報知してもよい。各ノードは、パスコスト(経路の評価値)を得る際は、上位ノードから受信したETXパスコストに、“自ノードのランク(ホップ数)−1”(すなわち上位ノードのランク)を加算することで、ペナルティを考慮したパスコスト(経路の評価値)を計算してもよい。このようにペナルティを考慮したパスコストを計算する具体的な方法には種々の方法がある。いずれの方法を用いてもかまわない。
図10は本実施形態における無線通信装置(ノード)の構成を示す図である。無線通信装置は、アンテナ10と、無線通信部20とを備える。
アンテナ10は、無線周波数の信号(無線信号)の送信及び受信を行う。アンテナ10は1本でも、複数本でもよい。また、アンテナ10はアレイアンテナでもよい。
無線通信部20は、RF部21、送受信部22、データ生成部25、親ノード選択部(選択部)26、及び中継制御部27を備える。送受信部22は、送信部23および受信部24を備える。これらの各要素はCPU等のプロセッサまたは回路によって構成できる。また、これらの各要素がメモリ等のバッファを備えていてもよい。メモリは、DRAM、SRAM等の揮発性メモリでも、NAND、FRAM、MRAM等の不揮発性メモリでもよい。また、本装置が、ハードディスク装置またSSDなどのストレージ装置を備えていてもよい。
RF部21は、アンテナ10に接続されている。RF部21は、送信用のパケットのビット系列を無線信号に変換し、無線信号を送信する処理を行う。RF部21は、受信した無線信号からパケットのビット系列を取り出す処理を行う。図11はパケットのフォーマットの一例を示す。パケットは、自ノードID、宛先ノードID、自ノードのデータ、子孫ノードのデータ、子孫数、パスコストなどのフィールドを有する。
データ生成部25は、自ノード用のデータを生成する。データ生成部25は、センサに接続されている。センサは、温度または傾きなどの情報を測定する。データ生成部25は、センサから測定値を取得し、測定値をビット変換したデータを生成する。ここではセンサから自ノード用のデータを生成したが、これに限定されない。例えばCPUにより行った演算結果でもよいし、装置の内部状態を表す値でもよい。
送信部23は、データ生成部25及び中継制御部27の少なくとも一方から提供されたデータと、パラメータとに基づき、パケットを生成し、パケットの送信ビット系列をRF部21へ送り出す。ここでのデータとは、データ生成部25で生成されたデータ(センサの測定値等)及び中継すべきデータ(子ノードから受信したデータ)である。データは自ノードデータフィールド、中継すべきデータは子孫ノードデータフィールドに格納される。パラメータは、送信先の親ノードのIDや、送信タイミング(例えばどのフレームのどのスロットか)、送信電力値などである。送信先の親ノードのIDは、宛先ノードIDフィールドに格納される。自ノードIDフィールドには、自ノードのIDを格納する。パスコストフィールドには、周囲のノードの報知するパスコスト(後述する親ノード選択部26で計算される)を格納する。子孫数フィールドには、自ノードの子孫ノードの個数を設定する。その他、子ノードおよび子孫ノードに対応するACKフィールドを備えてもよい。この場合、例えば、子ノードおよび子孫ノードのデータを子ノードから受信した場合は、該当するノードのACKフィールドにビット1を立て、受信しなかった場合は0を立てる。パラメータは、データ生成部25または中継制御部27から送信部23に提供される。もしくは、パラメータは、送信部23内のバッファに事前に設定されていてもよい。
受信部24は、RF部21から受信したパケットのビット系列から、データおよびパラメータを取り出す。取り出されたデータ及びパラメータは、親ノード選択部26及び中継制御部27に送られる。ここでのパラメータとは、受信した無線信号の送信元ID、受信した際の受信電力や受信タイミングなどである。また自ノードが送信した無線信号に対する受信確認信号(ACK)である場合もあり得る。
親ノード選択部26は、受信部24で得られたデータ(例えばパスコストなど)およびパラメータの少なくとも一方に基づき、親ノード候補の中から親ノードの選択を行う。親ノード候補は、例えば自ノードと無線信号を送受信可能なノードである。親ノード選択部26は、親ノード候補を含む、根ノードへ至る複数の経路の通信経路品質(例えばリンクコストの合計)と、当該複数の経路の根ノードまでのホップ数情報(中継負荷情報)とに基づき、親ノードを選択する。例えば、通信経路品質とホップ数情報とに基づきパスコスト(経路の評価値)の計算を行い、計算したパスコストに基づき、親ノードを選択する。選択された親ノードの情報は、中継制御部27に送られる。リンクコストは、一例として、過去の送信履歴から送信に成功するまでに送信回数の期待値を計算することで、取得してもよい。あるいは、実際にリンクコスト計算のための通信を行って送信に成功するまでの送信回数を測定してもよい。リンクコストの別の計算方法として、ノードから受信した無線信号の受信電力値に基づいて、当該ノードとのリンクコストを計算してもよい。例えば受信電力値が大きいほど、小さな値のリンクコストを計算してもよい。一例として、図12のリンクコストテーブルを用いて、これを実現できる。リンクコストテーブルでは、受信電力とリンクコストが対応づけられている。親ノード選択部26は、受信した無線信号の受信電力に基づき、対応するリンクコストをリンクコストテーブルから取得する。親ノード選択部26は、取得したリンクコストを、無線信号の送信元のノードとのリンクコストとする。
中継制御部27は、受信部24で受信された子ノードからのデータを受け取って、中継のために送信部23に送り出す。また、中継制御部27は、送信タイミングの決定などを行う。
図13は、本実施形態における親ノード選択の動作の一例を示すフローチャートである。
受信部24が、周囲のノードから無線信号を受信する(S1)。受信した無線信号には、送信元のノードID、および送信元のノードから報知されるパスコスト(図9参照)が含まれている。受信した無線信号から送信元のノードID、及びパスコストを取り出す(S2)。複数のノードから無線信号の受信を行うことで、複数の送信元のノードについて、ノードID及びパスコストを取得する。
親ノード選択部26は、送信元のノードとの間のリンクコストを計算する(S3)。過去の送信履歴から送信に成功するまでに送信回数の期待値を計算することで、リンクコストを計算してもよいし、実際にリンクコスト計算のための通信を行って送信に成功するまでの送信回数を測定してもよい。または、上記送信元のノードから受信した無線信号の受信電力値に基づいて、リンクコストを計算してもよい。例えば受信電力値が大きいほど、小さな値のリンクコストを計算してもよい。
親ノード選択部26は、送信元のノードから受信したパスコストと、計算したリンクコストとを加算し(S4)、送信元のノードを親とした場合の経路のパスコストを求める。この処理は、各送信元のノードについて行う。
親ノード選択部26は、複数の送信元のノードに対して計算したパスコスト(経路の評価値)を比較し、パスコストが最小となったノードを親ノードとして選択する(S5)。
さらに親ノード選択部26は、当該最小のパスコスト(選択した親ノードを経由する経路のパスコスト)にホップペナルティ(=1)を加算することで、自ノードを経由する場合の自ノードから根ノードまでの経路のパスコストを計算する(S6)。
計算したパスコストを含む無線信号を周囲に報知する(S7)。自ノードに割り当てられたスロットで、親ノードへ送信する中継用データおよび自ノードで測定したデータとともに、パスコストを含むパケットを送信する。
以上の動作により、根ノードからのホップ数が多いノードは、周囲のノードから親ノードとして選択されにくくなる。
[ランクが小さい時だけホップペナルティを加算する]
上述した実施形態において、すべてのノードがホップペナルティ1を加算したが、ランクが小さいノードにおいてのみ、ホップペナルティ(値は1でもよいし、より大きな値でもよい)を加算し、それ以外のノードはホップペナルティの加算を行わない方法も考えられる。前述の通り、ランクが1のノードは直接根ノードに接続されるため、他のノードに負荷を掛けない。したがって、ランクが1のノードを増やすようにネットワークを構築してもよい。このためには、ランクが1のノードでのみ、ホップペナルティを加算すればよい。もちろんランク1に限らずランクが閾値以下のノードでのみ、ホップペナルティを加算する方法でも構わない。
逆に、ランクが閾値より大きいノードでのみ、ホップペナルティを加算する方法も考えられる。この方法を使えば、ランクが大きくなるほど、親ノードとして選ばれにくくなる。この結果、ある程度のホップ数までは、ETX方式の場合と同様にネットワークが形成されるが、それ以上より長いホップ数になることが抑制される。結果的に、短すぎず、かつ長すぎないホップ数のノードが増える。
(第2の実施形態)
図14は、第2の実施形態に係る無線マルチホップネットワークの例を示す。前述した図7及び図8で示した例とノードの位置が同じであるが、ネットワーク構成が異なっている。根ノードから遠いノード(例えばノードB)が、ノードCではなく、ノードFを親ノードとしている。ノードBにとっては、ノードCの方がノードFよりも通信距離が短いにもかかわらず、ノードFを親ノードとして選択している。これにより、経路が分岐し、根ノードへ至る経路が複数生成されている。また、ノードB等のホップ数は、図7及び図8の例よりも、小さくなっている。一般的にノード間の通信距離が長くなると、その分だけ通信誤りが増える傾向にある。しかしながら、あえて通信距離が長く通信誤りが多い経路を通ってでも、ホップ数を減らすことで、輻輳によるデータ欠損を避けた方が良い場合もある。図14ではこのようなネットワーク構成を実現している。このための方法として本実施形態では、中継ノードの中継負荷情報としてトラヒックペナルティを導入する。トラフィックペナルティは、一例として、ノードが従えている子ノードの数に応じた値である。中継負荷情報は、ノードの中継負荷を表し、トラヒックペナルティはその一例である。
図15は本実施形態における親ノードの選択方法を説明する図である。各ノードは、パスコストとして、受信したパスコスト(根ノードに直接接続しているノードの場合はリンクコスト)にトラヒックペナルティを加算し、加算後の値を、自ノードを経由する場合の自ノードから根ノードへ至る経路のパスコストとして報知している。例えばノードAは、ノードAと根ノードの間のリンクコスト4に対して、トラヒックペナルティ(TP)2を加えた6を、自ノードAを経由する場合の自ノードAから根ノードまでの経路のパスコストとして報知する。トラフィックペナルティは、自ノードが従えている子ノードの数に応じた値とする。ノードAの場合、子ノード1台を従えているため、1台あたりのペナルティ値を2とすると、トラフィックペナルティは2となる。もし子ノードが2台であれば、トラフィックペナルティは2台分の4である。
パスコストを受信したノードCは、受信したパスコストに、ノードAとノードCとの間のリンクコスト3を加算してパスコスト9を算出する。ノードCは、算出したパスコスト9を、ノードAを経由する場合のノードCから根ノードまでの経路のパスコストとして報知する(図の状態ではノードCに子ノードは存在しないため、トラフィックペナルティの加算は行わない)。
このようにノードが持つ子ノードの数に比例したトラヒックペナルティを加算し、加算後の値を、自ノードを経由する場合の自ノードから根ノードまでの経路のパスコストとして報知する。この方法によれば、従える子ノードの数が多いノードは、必然的に報知するパスコストが大きくなるため、親ノードとして選ばれにくくなる。図15の例では、ノードNは、一切の子ノードを従えていないノードBを、親ノードとして選択している。すなわち、ノードBから報知されるパスコスト5と、ノードBとのリンクコスト5とを加算した値は10である。ノードAから報知されるパスコスト6と、ノードAとのリンクコスト5とを加算した値は11である。ノードCから報知されるパスコスト9と、ノードCとのリンクコスト2とを加算した値は11である。よって、ノードB経由の経路のパスコストが最も小さい。このため、ノードNは、ノードBを親ノードとして選択する。
図16は、本実施形態における親ノード選択の動作の示すフローチャートである。図13に比べ、報知するパスコストを算出する処理が異なる。すなわち、周囲のノードから受信したパスコストに対し、当該ノードとの間のリンクコストを加算するのみならず、自ノードのトラヒックペナルティを加算し(S11)、加算後のパスコストを、自ノードを経由する場合における自ノードから根ノードまでの経路のパスコストとして周囲に報知する。
なお本実施形態では、トラヒックペナルティとして子ノードの台数に応じた値を用いたか、他の方法も可能である。例えば、トラヒックペナルティの値を、子ノードだけでなく、子孫のノードの台数に応じた値としてもよい。あるいは、子ノードから自ノードに送られてくるデータ量に応じた値、あるいはこのデータの量の平均値に応じた値を、トラヒックペナルティの値としてもよい。子ノードが複数存在する場合は、すべての子ノードからの合計データ量またはその平均値に応じた値を、トラヒックペナルティの値としてもよい。
さらに、各ノードにおいてデータの溢れが発生し、データの一部を中継送信できない、あるいは受信したデータの一部を記憶できない等の事態が生じた場合(あるいは生じうる場合)、トラヒックペナルティの値を無限大、あるいは通常より大きい値、あるいは非常に大きな値としてもよい。これにより、実質的に他のノードが自ノードを親ノードに選択しないようにすることもできる。
(第3の実施形態)
図17は本実施形態における親ノード選択の動作を示す図である。本実施形態は、第1の実施形態で導入したホップペナルティと、第2の実施形態で導入したトラヒックペナルティの双方を適用する。
例えばノードAに着目すると、ノードAは、根ノードまでのリンクコスト4に対し、ホップペナルティ1と、トラヒックペナルティ2(1台の子ノードCを従えており、1台の子ノードあたりトラヒックペナルティの値は2とする)とを加算した7を、自ノードAを経由する場合のノードAから根ノードまでの経路のパスコストとして報知している。これを受信したノードCは、さらにノードAとノードCの間のリンクコストである3と、ホップペナルティ1とを加算し、加算後のパスコスト11を、自ノードCを経由する場合の自ノードCから根ノードまでの経路のパスコストとして、報知している。ノードCは子を従えていないので、トラヒックペナルティは0である。すなわち、ノードCは、トラフィックペナルティを加算しない。
ノードNは、ノードCから受信したパスコスト11に、ノードCとのリンクコスト2を加算して、パスコスト(経路の評価値)13を得る。また、ノードNは、ノードAから受信したパスコスト7に、ノードAとのリンクコスト5を加算し、パスコスト12を得る。また、ノードNは、ノードBから受信したパスコスト6に、ノードBとのリンクコスト5を加算し、パスコスト11を得る。また、ノードNは、根ノードに直接する場合のリンクコスト15をパスコストとする。これらのパスコストの中で、最小のパスコストはノードBである。このため、ノードNは、ノードBを親ノードとして選択する。
本実施形態によれば、ホップ数が多いノードや、子ノードを多く従えているノードは親ノードとして選ばれにくくなる。従ってホップ数が少なく、経路の集中が軽減されたネットワークが形成される。これにより、輻輳が起こりにくくなり、結果としてデータの欠損が起こりにくくなる。
図18は本実施形態においてノードが親ノードを選択する動作のフローチャートを示す。本フローチャートは、受信したパスコストに、リンクコストを加算するのみならず(S4)、ホップペナルティとトラヒックペナルティの双方を加算している(S12)。それ以外のステップは、図13または図16と同じである。
(第4の実施形態)
第4の実施形態においては、ホップペナルティの値、およびトラヒックペナルティの値の決め方について記載する。
第1の実施形態では、ホップペナルティは1ホップあたり1、第2の実施形態では、トラヒックペナルティは子ノード1台あたり2とした。これらのペナルティは輻輳を回避するためのペナルティであり、これらのペナルティを利用すると、ペナルティが無い場合に選択される理想的なノードとは異なるノードを親ノードとして選択する場合も起こり得る。例えば、通信品質があまり良くないノードを親ノードとして選択する事態が生じ得る。従って、輻輳が生じにくい場合は、ペナルティを軽減すべきである。逆に輻輳が生じやすい場合は、通信品質を犠牲にしても、積極的にペナルティを大きくして輻輳回避を図った方が良い場合がある。
そこで例えば各ノードは、一定期間の間(例えば1フレームの間)、リスニングを行い、周囲からの無線信号を受信する。受信される無線信号の個数が少ない場合は、周囲に存在するノードの数が少なく(すなわちネットワーク内のノード密度が低く)、結果として輻輳が起きにくいと判断する。この場合、ホップペナルティおよびトラヒックペナルティの少なくとも一方の値を低くする。ここでは受信した無線信号の個数によって周囲のノード数を把握したが、受信した無線信号を復調して送信元のノードのIDを把握し、送信元のノードの個数をカウントしてもよい。
逆に、受信される無線信号の個数が多い場合は、周囲に存在するノードの数が多く(すなわちシステム内のノード密度が高く)、結果として輻輳が起きやすいと判断する。この場合、ホップペナルティおよびトラヒックペナルティの少なくとも一方の値を高くする。
これらの制御により、輻輳が起きにくい環境では通信品質に基づく親ノード選択ができるようになり、輻輳が起きやすい環境では、輻輳回避を積極的に行う親ノード選択ができるようになる。
(第5の実施形態)
第1〜第4の実施形態ではホップペナルティまたはトラフィックペナルティを導入することで、ETX方式の問題点を解消したが、本実施形態では、別の方法で当該問題を解消する。
図19は、ETX方式の問題点を説明する図である。ETX方式では、リンクコストは送信成功に必要な送信回数の期待値を表しており、リンクコストの最小値は1である。図の例では、ノードAと根ノードのリンクコストは1であり、ノードCとノードAのリンクコストは1である。従って、ノードCのパスコストは最小値の2(=1+1)である。ノードCは、1ホップ目にいるパスコストが1.5のノードBに比べ、パスコストが大きいため、親として選ばれにくい。しかし、ノードCおよびノードA間、ノードAおよび根ノード間のリンクコストがそれぞれ最小の1ということは、ノードCから根ノードまで、再送なしで、1回でデータを確実に送信できるということである。それにも関わらず、再送が必要になる可能性が高いルートBを通る経路を選択することは、通信の信頼性を追求するのであれば、適切でない。このようにETX方式では、必ずしも通信の信頼性の観点から最適では無いノードが選択され易い点がある。信頼性を追求するのであれば、各ノードから根ノードまでのデータ収集が確実に出来る、言い換えると、データ収集成功率が最大となる経路と選ぶべき場合がある。
図20は、本実施形態に係る親ノード選択の動作を説明する図である。通信成功率を用いてリンクコストを定義している。パスコストは経路上のリンクの通信成功率の乗算値としている。例えば、ノードAと根ノードの間の通信成功率は0.95である。ノードAはパスコスト(リンクコストに等しい)として、この0.95を報知する。またノードAとノードCの間の通信成功率は0.97である。ノードCは、ノードAから受信した0.95に0.97を乗じ、0.9215をパスコストとして報知する。受信したパスコストにリンクコストを乗じているのは、ノードCからノードAを通じて根ノードに至る通信成功率が、両者の積で表されるからである。ノードBも同様にして通信成功率0.96のパスコストを報知する。
ノードNは、ノードCからのパスコスト0.9125を受信し、ノードNとノードCとの間のリンクコスト(通信成功率0.98)を乗算して、ノードCを経由する経路のノードNから根ノードまでのパスコスト0.90307を得る。
同様にして、ノードNは、ノードAからのパスコスト0.95を受信し、ノードNとノードAとの間のリンクコスト(通信成功率0.92)を乗算して、ノードAを経由する場合のノードNから根ノードまでのパスコスト0.874を得る。
同様にして、ノードNは、根ノードに直接接続する場合のパスコスト0.77を得る。
同様にして、ノードNは、ノードBからのパスコスト0.96を受信し、ノードNとノードBとの間のリンクコスト(通信成功率0.93)を乗算して、ノードBを経由する場合のノードNから根ノードまでのパスコスト0.8928を得る。
ノードCを経由する場合のパスコストが最も大きいため、ノードNはノードCを親ノードとして選択する。本実施形態ではリンクコストを通信成功率で表し、パスコストはその積としているため、リンクコストおよびパスコストは、値が高いほど良いことに注意する。
図21は、図20の例に、ホップペナルティとトラヒックペナルティとを適用してパスコストを計算する例を示す。本実施形態ではリンクコストやパスコストは高いほど良いため、これらペナルティは、値を減じるために用いられる。具体的には、リンクコストに応じた値、またはパスコストに応じた値を減算することで、ペナルティを実現する。値を減算するとは、言い換えれば、負の値を加算していることである。すなわち、本実施形態ではリンクコストおよびパスコストが負の値であると言える。図21の例では、ホップペナルティとして0.1、トラヒックペナルティとして子1台あたり0.1を減算する例を示している。この方法によれば、通信成功率の高い経路を選択しつつ、通信の輻輳を回避できるようになる。ここではペナルティとして値を減算したが、1より小さい値を乗じることも可能である。
例えばノードAは、通信成功率(リンクコスト)0.95から、ホップペナルティ0.1と、トラヒックペナルティ0.1を減算して、パスコスト0.75を計算している。ノードAはパスコスト0.75を報知する。ノードCは、パスコスト0.75を受信し、これにノードAおよびノードC間の通信成功率(リンクコスト)0.97を乗算して、ノードAを経由する場合のノードCから根ノードまでのパスコスト0.7275を計算している。さらにノードCは、これからホップペナルティ0.1を減算して、ノードCを経由する場合のノードCから根ノードまでの経路のパスコスト0.6275を計算し、このパスコスト0.6275を報知している。同様にして、ノードBは、リンクコスト0.96から、ホップペナルティ0.1を減算して(ノードBに子ノードは存在しないため、トラヒックペナルティはゼロ)、パスコスト0.86を計算している。ノードBは.パスコスト0.86を報知している。
ノードNは、ノードCからのパスコスト0.6275を受信し、ノードNとノードCとの間のリンクコスト(通信成功率0.98)を乗算して、ノードCを経由する経路のノードNから根ノードまでのパスコスト0.61495を得る。
同様にして、ノードNは、ノードAからのパスコスト0.75を受信し、ノードNとノードAとの間のリンクコスト(通信成功率0.92)を乗算して、ノードAを経由する場合のノードNから根ノードまでのパスコスト0.69を得る。
同様にして、ノードNは、根ノードに直接接続する場合のパスコスト0.77を得る。
同様にして、ノードNは、ノードBからのパスコスト0.86を受信し、ノードNとノードBとの間のリンクコスト(通信成功率0.93)を乗算して、ノードBを経由する場合のノードNから根ノードまでのパスコスト0.7998を得る。
ノードBを経由する場合のパスコストが最も大きいため、ノードNはノードBを親ノードとして選択する。
ここで、乗算演算(例えばノードCにおいてノードAから受信したパスコストと、ノードC及びノードA間のリンクコストとの乗算)は、電子回路から成る無線機の内部では回路規模が大きくなるなどの理由で実装が難しい場合もある。そこで、リンクコストは通信成功率の対数値とし、パスコストを求める際には加算演算で実現する方法も可能である。2値の乗算値の対数を取ることは、2値の対数を加算することと等価な性質を利用したものである。
図22は、パスコストの計算を加算演算で行う例を説明する図である。例えばノードAと根ノードの間の通信成功率0.95の場合、ノードAは、0.95の対数を取り、さらにホップペナルティとトラヒックペナルティを減算して、パスコスト−0.029を計算する。ノードAは、パスコスト−0.029を送信する。ノードCは、Aから受信した−0.029という値に、ノードAとノードCの間の通信成功率0.97の対数値を加算して、ノードAを経由する場合のノードCから根ノードまでのパスコストを計算する。さらにノードCは、この値から、ホップペナルティ0.002を減算して、ノードCを経由する場合のノードCから根ノードまでのパスコスト−0.044を計算し、パスコスト−0.044を報知する。ノードBは、0.96の対数を取り、さらにホップペナルティを減算して、パスコスト−0.020を計算する。ノードBは、パスコスト−0.020を送信する。
ノードNは、ノードCからのパスコスト−0.044を受信し、ノードNとノードCとの間のリンクコスト(通信成功率0.98の対数値)を加算して、ノードCを経由する経路のノードNから根ノードまでのパスコスト−0.052を得る。
同様にして、ノードNは、ノードAからのパスコスト−0.029を受信し、ノードNとノードAとの間のリンクコスト(通信成功率0.92の対数値)を加算して、ノードAを経由する場合のノードNから根ノードまでのパスコスト−0.065を得る。
また、ノードNは、根ノードとのリンクコスト0.77の対数値を計算して、根ノードに直接接続する場合のパスコスト−0.11を得る。
ノードNは、ノードBからのパスコスト−0.020を受信し、ノードNとノードBとの間のリンクコスト(通信成功率0.93の対数値)を加算して、ノードBを経由する場合のノードNから根ノードまでのパスコスト−0.051を計算する。
ノードBを経由する場合のパスコストが最も小さいため、ノードNはノードBを親ノードとして選択する。
このように通信成功率の対数値をリンクコストとすることで、ノード内での乗算を回避し、加減算によるパスコスト計算を可能にできる。
さらに、リンクコストやパスコストが負の値(すなわち減算)では実装が困難な場合がある。そこで、加算演算のみでパスコストを計算する方法を以下に示す。この方法では通信成功率の逆数について対数値を取り、これをリンクコストとする(リンクコストの値は小さいほど良い)。そしてリンクコスト及びパスコストは双方とも0以上の値とする。報知するパスコストの計算の際は、リンクコスト及びパスコストを加算する。つまり、ホップペナルティ及びトラヒックペナルティは、報知するパスコストの値を増加させる方向に使われる。
図23は、通信成功率を利用してリンクコストを定義しつつ、加算演算のみでパスコストを計算する例を説明する図である。通信成功率の逆数の対数値をリンクコストとし、リンクコスト及びパスコストは双方とも0以上の値としている。例えばノードAと根ノード間の通信成功率は0.95であるため、根ノードへの経路のパスコストは0.95の逆数の対数値である。この値にホップペナルティ0.002と、子ノード1台分のトラヒックペナルティ0.005とを加算し、加算後の値0.029を、ノードAを経由する場合のノードAから根ノードまでのパスコストとして報知する。同様にして、ノードBの根ノードへの経路のパスコストは0.96の逆数の対数値である。ノードBは、この値にホップペナルティ0.002を加算し、加算後の値パスコスト0.020を、ノードBを経由する場合のノードBから根ノードまでのパスコストとして報知する。
ノードCは、このパスコスト0.029を受信し、ノードCとノードAとの間のリンクコスト(通信成功率0.97の逆数の対数値)を加算して、ノードAを経由する経路のノードCから根ノードまでのパスコスト0.042を得る。ノードCは、これにホップペナルティ0.002を加算して、報知するパスコスト0.044を得る。このパスコスト0.044を報知する。
ノードNは、このパスコスト0.044を受信し、ノードNとノードCとの間のリンクコスト(通信成功率0.98の逆数の対数値)を加算して、ノードCを経由する経路のノードNから根ノードまでのパスコスト0.052を得る。
同様にして、ノードNは、ノードAからのパスコスト0.029を受信し、ノードNとノードAとの間のリンクコスト(通信成功率0.92の逆数の対数値)を加算して、ノードAを経由する場合のノードNから根ノードまでのパスコスト0.065を得る。
ノードNは、根ノードに直接接続する場合のパスコスト0.11を得る。
ノードNは、ノードBからのパスコスト0.020を受信し、ノードNとノードBとの間のリンクコスト(通信成功率0.93の逆数の対数値)を加算して、ノードBを経由する場合のノードNから根ノードまでのパスコスト0.051を得る。
ノードBを経由する場合のパスコストが最も小さいため、ノードNはノードBを親ノードとして選択する。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。