図1を参照して、この実施例の計測装置10は、コンピュータ12を含む。コンピュータ12は、汎用のコンピュータであり、人間を追跡(検出)する装置として機能するとともに、距離センサ(以下、単に「センサ」という)14のキャリブレーション装置としても機能する。図1からも分かるように、コンピュータ12には、複数(この実施例では、6台)のセンサ14a、14b、14c、14d、14e、14fが接続される。
以下、この実施例において、センサ14a−14fを識別する必要が無い場合には、単に「センサ14」と表記することにする。
なお、この実施例の計測装置10では、或る領域(図3参照)における被験者を追跡するために、6つのセンサ14を設けるようにしてあるが、これは単なる例示である。したがって、領域の大きさ、形状、障害物の位置や個数に応じて、センサ14の数は適宜変更される。詳細な説明は省略するが、この実施例の計測装置10では、被験者の移動方向も計測するようにしてあるため、少なくとも2つのセンサ14が必要である。
コンピュータ12は、センサ14とはRS232Cのようなインターフェイスを介してシリアルに接続される。この実施例では、1台のコンピュータ12にすべてのセンサ14を接続するようにしてあるが、LANのようなネットワークで接続される2台以上のコンピュータで分担するようにしてもよい。かかる場合には、いずれか1台のコンピュータが統括コンピュータとして機能すればよい。
センサ14は、たとえば、レーザーレンジファインダであり、レーザーを照射し、物体に反射して戻ってくるまでの時間から当該物体までの距離を計測するものである。たとえば、レーザーレンジファインダ(センサ14)は、トランスミッタ(図示せず)から照射したレーザーを回転ミラー(図示せず)で反射させて、前方を扇状に一定角度(たとえば、0.5度)ずつスキャンする。
ここで、センサ14としては、SICK社製の距離センサ(型式 LMS 200)を用いることができる。この距離センサを用いた場合には、距離8000mmを±15mm程度の誤差で計測可能である。具体的には、図2に示すように、センサ14の検出範囲は、半径R(R≒8000mm)の半円形状(扇形)で示される。つまり、センサ14は、その正面方向を中心とした場合に、左右90°の方向を所定の距離(R)以内で計測可能である。ただし、正面方向を0°として、正面方向から左向きが検出される角度のプラス方向であり、正面方向から右向きが検出される角度のマイナス方向である。
また、使用しているレーザーは、日本工業規格 JIS C 6802 「レーザー製品の安全基準」におけるクラス1レーザーであり、人の眼に対して影響を及ぼさない安全なレベルである。たとえば、センサ14のサンプリングレートは、37Hzに設定される。これは、歩行するなどにより移動する人間を追跡(検出)するためである。
さらに、後述するように、センサ14は、或る領域を検出可能な任意の位置に配置される。具体的には、センサ14の各々は、少なくとも2つ以上のセンサ14の検出領域が重なるように配置され、図示は省略するが、床面から約900mmの高さに固定される。この高さは、人間の胴体を検出可能とするためであり、たとえば、日本人の成人の平均身長から算出される。したがって、計測装置10を設ける場所(地域ないし国)や被験者(人間)の年齢ないし年代(たとえば、子供、大人)に応じて、センサ14を固定する高さを適宜変更するようにしてよい。
上述したように、センサ14は、或る領域を検出可能な任意の位置に配置される。通常、このような計測装置10では、各センサ14の位置や向きを実測することにより全体の検出範囲(全検出範囲)を設定したり、各センサ14を予め決定された位置および向きで配置したりするが、いずれの場合も手間である。さらに、人間を追跡する環境(計測装置10を適用する場所)を頻繁に変更したり、人間を追跡する環境が同じであっても、センサ14の位置や向きを頻繁に変更したりする場合には、きわめて面倒である。
そこで、この実施例では、各センサ14の検出結果に基づいて、各センサ14の位置および向きを推定し、それらを調整(キャリブレーション)するようにしてある。
簡単に説明すると、各センサ14からの出力に基づいて、センサ14毎に、人間の位置(人観測点)を検出し、その人観測点の時間変化から当該人間の移動軌跡を算出(生成)する。次に、各センサ14の出力に基づいて生成された移動軌跡を、センサ14間で同定する(一致させる)。一致させた移動軌跡上の2つ以上の人観測点が所定のルールに従って抽出され、抽出された2つ以上の人観測点を用いて、この移動軌跡を生成したセンサ14間の制約(センサ制約)の平均およびその分散を算出する。ただし、センサ制約は、センサ14間の距離およびセンサ14間の相対的な角度(向き)である。また、分散は、センサ14間の距離の誤差である。このようなセンサ制約は、移動軌跡の同定が行われたセンサ14の各組について算出される。そして、算出されたセンサ制約の平均およびその分散を用いて、すべてのセンサ14の位置および向きが推定される。推定されたすべてのセンサ14の位置が調整され、最適化される。以下、詳細に説明する。
図3(A)は、センサ14a−14fが設置された環境を真上方向から見た地図を示す図解図である。この実施例では、図3(A)に示される環境は、或るショッピングモールである。図3(A)からも分かるように、センサ14a、14c、14dは、地図の上側に設置されており、センサ14b、14e、14fは地図の下側に設置されている。また、センサ14a−14fの各々から延びる矢印は、各センサ14a−14fの正面方向を示してある。そして、図3(B)に示すように、2台以上のセンサ14の検出範囲が重なる範囲(全検出範囲)は、斜線を付した範囲(領域)で示される。
ただし、上述したように、センサ14の位置および向き(位置関係)についての初期値は与えられないため、コンピュータ12は、図3(A)および図3(B)に示すような位置関係や全検出範囲を予め知ることができない。
したがって、コンピュータ12は、各センサ14で検出される情報(センサ情報)から背景を抽出する。つまり、図3(B)の斜線を付した範囲と、斜線を付していない範囲との境界を求めることにより、全検出範囲を画定する。これは、計測装置10によって、人間を検出ないし追跡するためである。したがって、扉や壁で遮られる範囲や柱などの固定物が配置されている範囲は背景として抽出される。このように、予め背景を抽出しておくことにより、センサ14によって背景の手前に検出されるものを、人間等の観測点として容易に判断することができる。
この実施例では、コンピュータ12が背景を走査する処理(背景スキャン処理)を実行し、その結果から背景を抽出する。具体的には、各センサ14で検出されるセンサ情報から背景を抽出する。センサ情報の一例が図4(A)に示される。図4(A)に示すように、センサ情報は、フレーム毎に、―90°から90°の範囲において一定の角度(0.5°)毎に検出された距離(mm)についての情報である。
なお、簡単のため、図4(A)では、5°単位で距離を検出しているように記載してあるが、実際には、上述したように、0.5°単位で距離を検出する。
また、この実施例では、フレームは、センサ14がその検出範囲の全角度についての距離を検出する単位時間であり、たとえば27msに設定される。したがって、各センサ14では、1フレーム(27ms)の間に、0.5°単位で180°分の距離を検出するとともに、検出した距離をコンピュータ12に送信する。
詳細な説明は省略するが、各センサ14のセンサ情報は、各センサ14の出力に基づいてコンピュータ12が生成するため、各センサ14のセンサ情報のフレーム数の同期は取られている。
このような背景スキャン処理が或る程度長い時間(たとえば、10分)行われると、各角度についての検出可能な最大距離が分かる。図4(B)には、背景スキャン処理が実行された結果から得られる、或る角度について検出された距離の個数の分布を表したグラフが示される。このグラフから分かるように、最も検出された個数の多い距離が検出可能な最大距離すなわち境界に設定され、境界を超える距離については背景とみなされる。
したがって、図5(A)に示すように、背景スキャン処理を実行することにより、センサ14の検出範囲(図2参照)のうち、背景と重なる部分を除く範囲、すなわち実際に人間を検出することが可能な範囲(人検出可能範囲)が画定されるのである。図5(A)では、人検出可能範囲を、網掛模様を付することにより示してある。この人検出可能範囲が、上述した全検出範囲を構成することになる。
なお、図5(A)に示すように、背景スキャン処理の実行中に人間Hや他の物を検出したり、計測誤差が発生したりすることがあるため、図4(B)のグラフからも分かるように、境界とは異なる距離が検出されることがある。
また、図5(A)に示すように、センサ14と壁などの背景との距離が、センサ14の検出範囲(最大距離R)を超えている場合には、センサ情報としては、最大距離R(8000mm)が記述される。
さらに、ここでは、背景スキャン処理を或る程度長い時間実行して最も多く検出された距離を境界として決定するようにしてあるが、実際には、所定数(たとえば、100個)同じ距離が検出された場合に、当該距離を境界として決定するようにしてある。したがって、全てのセンサ14の全ての角度についての境界が得られたときに、背景スキャン処理が終了される。
詳細な説明は省略するが、背景データ(図16参照)としては、センサ14毎に、各角度についての境界までの距離または最大距離Rのデータが記憶されるのである。
背景スキャン処理が終了されると、人間と思われる観測点(人観測点)との距離およびその角度についての情報を、各センサ14のセンサ情報から検出する。ただし、ここで検出される距離および角度は、各センサ14のローカル座標系における距離および角度である。たとえば、各センサ14のローカル座標は、自身の中心が原点Oに設定され、原点Oを通りセンサ14の正面方向と重なる軸がY軸に設定され、原点Oを通りY軸に直交する軸がX軸に設定される。また、センサ14の正面方向がY軸のプラス方向であり、その正面方向から左に90°回転した方向がX軸のプラス方向である。
この実施例では、人検出可能範囲内で連続的に検出された観測点間の長さ(幅)が所定の範囲内であり、かつ観測点と当該観測点を検出した角度についての背景との間の長さ(深さ)が所定値以上である場合に、人間を検出したとみなし、そのときの距離と角度とをリスト(人観測点リスト)に記録(追加)する。この人観測点リストは、背景スキャン処理の実行により、背景が抽出された後に検出されるセンサ情報に基づいて生成される。
ここで、図5(B)を用いて、或るセンサ14によって人間H(人観測点)が検出される場合について説明することにする。図5(B)に示すように、センサ14で、或るフレームにおいて或る5つの角度について、連続的に点P1、P2、P3、P4、P5との距離が計測されたと仮定する。ただし、簡単のため、他の角度で計測された距離については省略してある。
図5(B)からも分かるように、点P1および点P5は、境界上の点であり、背景と判定され、観測点から排除される。点P2、点P3および点P4は、境界よりも手間であるため、観測点として抽出される。次に、抽出した観測点を用いて、両端の観測点間の長さ(幅)および各観測点とこの各観測点を検出した角度における境界との間の長さ(深さ)が算出される。
上述したように、センサ14のローカル座標は、その中心を原点Oとして設定しているため、図5(B)に示す例では、センサ14で検出された点P2までの距離(第1距離L1)およびそのときの角度(第1角度φ1)と、センサ14で検出された点P4までの距離(第2距離L2)およびそのときの角度(第2角度φ2)とを用いて、点P2と点P4との距離(幅)Wが算出される。具体的には、数1に従って算出される。
[数1]
W=√{(x1−x2)2+(y1−y2)2}
ただし、x1=L1×sinφ1、x2=L2×sinφ2、y1=L1×cosφ1、y2=L2×cosφ2である。
また、各観測点について、当該各観測点を検出した角度における境界上の点との間の距離(深さ)depが検出される。つまり、図5(B)に示す点線の長さ(深さ)depが算出される。これは、背景スキャン処理で得られた背景までの距離または最大距離Rから観測点までの距離を減算することにより算出される。
そして、幅Wが所定の範囲内であり、かつ深さdepが所定距離以上であるかどうかを判断するのである。具体的には、数2を満たすかどうかを判断する。数2で示される条件は、1人の人間を判別するために設定したものである。つまり、センサ14の高さは、人間の胴体付近に設定されているため、数2に示す数値は、胴体かどうかを判別可能に設定される。また、幅Wについては、人間が正面を向いていたり、横を向いていたりすることがあるため、比較的広い範囲で設定してある。
[数2]
300(mm)≦W≦800(mm)
300(mm)≦dep
ただし、数2の数値は、計測する人間の年齢や体格に応じて適宜変更するようにしてもよい。ただし、夏と冬とでは、服装が全く異なり、その厚みが大幅に違うため、季節に応じて異なる数値を設定する必要もある。
上述したように、幅Wを所定の範囲内に設定してあるのは、1人の人間を検出するためである。したがって、たとえば、センサ14から見て、2人以上の人間が並んでいたり、重なっていたりする場合については、個々の人間を区別する方法をさらに導入する必要がある。
また、深さdepを所定距離以上にしているのは、或る程度の厚みが無い場合には人間と判断するべきではないからである。
なお、図5(B)では、1つのセンサ14によって1人の人間Hが検出される場合について示してあるが、1つのセンサ14から見て重ならずに離れた場所に存在する2人以上の人間Hが検出される場合もある。
数2に示す条件を満たすと、人間Hを検出(観測)したと判断し、その観測点(人観測点)が各センサ14のローカル座標系における極座標(距離および角度)で記憶される。ただし、図5(B)からも分かるように、1フレームにおいて同一の人間Hについて、複数の人観測点が検出されるため、ここではその代表値(距離および角度の平均値、または、距離の最大値または最小値とそのときの角度)が記憶される。
具体的には、図6(A)に示すような人観測点のリスト(人観測点リスト)が作成され、この人観測点リストに今回(現フレームで)検出された人観測点が記憶(追加)される。図6(A)に示すように、人観測点リストは、インデックスに対応して、フレーム数、距離、角度および速度が記述される。インデックスは、人観測点に付された識別情報であり、この実施例では、アルファベットと数字とによって表される。ただし、これに限定される必要は無く、インデックスは、アルファベットまたは数字のみで表しても良いし、人間が解読不能な情報で表してもよい。フレーム数は、当該人観測点を検出した時点のフレーム数(フレームの番目)である。距離(mm)は、当該センサ14によって検出され、対応するインデックスが示す人観測点までの距離である。角度(°)は、当該センサ14によって、対応するインデックスが示す人観測点を検出したときの当該センサ14の正面方向に対する角度である。速度(mm/s)は、対応するインデックスが示す人観測点の移動速度である。ただし、速度(mm/s)は、同一人物の移動速度であり、後述する移動軌跡(ローカル軌跡リスト)が生成されたときに、連続する人観測点間の単位時間当たりの距離(移動速度)が算出され、人観測点リストに記載される。したがって、人観測点リストの作成時には、速度(mm/s)としてはnullが記載される。
このような人観測点リストを参照することにより、各センサ14で検出される人間Hの移動軌跡が生成される。この実施例では、所定時間(1フレーム)における人観測点間の距離が所定値(たとえば、500mm)以下である場合には、同一の移動軌跡上の点であると判定する。つまり、かかる場合には、同一の人間Hについての人観測点が時間に従って変化していると判断するのである。一方、人観測点間の距離が所定値を超える場合には、異なる移動軌跡上の点であると判定する。かかる場合には、異なる人間Hの移動軌跡も生成される。詳細な説明は省略するが、人観測点間の距離は、上述した数1に従って算出される。
このように、同一の移動軌跡上の人観測点であるかどうかが判定され、その判定結果に基づいて、図6(B)に示すようなローカル軌跡リストが生成される。つまり、移動軌跡が生成(検出)される。ローカル軌跡リストは、センサ14毎に作成される。つまり、人間Hの移動軌跡が各センサ14のローカル座標系のセンサ情報に基づいて生成され、それぞれのローカル軌跡リストが作成されるのである。
図6(B)に示すように、ローカル軌跡リストでは、ローカルIDに対応して、人観測点リストのインデックスが記載される。ローカルIDは、当該センサ14で検出される移動軌跡を識別するための識別情報であり、アルファベットと数字とによって表される。ただし、ローカルIDは、アルファベットまたは数字のみで表されても良く、人間が解読不能な情報で表されてもよい。また、人観測点リストのインデックスは、対応するローカルIDが示す移動軌跡上の人観測点についてのインデックスであり、2つ以上のインデックスが時系列に従って記載される。
すべてのセンサ14について、ローカル軌跡リストが作成されると、異なる2つのセンサ14の各々のセンサ情報に基づいて検出された移動軌跡のうち、同一であると考えられる2つの移動軌跡が互いに関連付けられる。つまり、異なる2つのセンサ14の出力に基づいて生成された移動軌跡のうち、同一の人間Hの移動軌跡であると考えられるものを同定するのである。
たとえば、図7に示すような場合には、センサ14aおよびセンサ14bのそれぞれにおいて、2つの移動軌跡が検出される。上述したように、各センサ14は、ローカル座標系で人観測点を検出しており、互いに他のセンサ14の存在を認識できていない。このため、各センサ14で生成された移動軌跡が、他のセンサ14で生成されたいずれの移動軌跡と一致するのかを直ぐに知ることはできない。したがって、この実施例では、移動軌跡から分かる人観測点の時間変化(人間の移動速度)に基づいて、異なる2つのセンサ14で検出された移動軌跡のうち、共通する(同一の)移動軌跡を検出するようにしてある。
具体的には、一方のセンサ14で検出された移動軌跡のうちの着目する1つの移動軌跡(説明の都合上、「移動軌跡Tm」という)の速度変化と、他方のセンサ14で検出された全ての移動軌跡(説明の都合上、「移動軌跡Tn」という)の各々の速度変化とを比較し、速度変化の誤差(速度差)が最も小さい移動軌跡Tnが移動軌跡Tmと同一であると判定する。ただし、速度差(RMS誤差)は、数3に従って算出される。
ただし、この実施例では、速度差が最も小さい移動軌跡Tnと同程度の速度差を有する他の移動軌跡Tnが存在する場合には、速度差が最も小さい移動軌跡Tnであっても、移動軌跡Tmと同一であると判定しない。また、この実施例では、速度差が最も小さい移動軌跡Tnが唯一存在する場合であっても、この速度差が一定値(この実施例では、100mm/s)以上である場合には、移動軌跡Tmと同一であると判定しない。これらの場合には、速度差が最小であっても、移動軌跡Tmと移動軌跡Tnとが一致すると決定することは適切でないと考えられるからである。
図8(A)には、或るセンサ14で検出された移動軌跡のうちの着目する1つの移動軌跡Tmの速度変化(実線)と、図面では分かり難いが、他のセンサ14で検出された7つの移動軌跡Tn(ここでは、n=1、2、…、7)の速度変化(破線等)とが記載される。
図8(B)は、図8(A)に示した1つの移動軌跡Tmと、7つの移動軌跡Tnの各々との速度差を示すグラフである。たとえば、速度差は、速度変化における一定時間(この実施例では、5フレーム)毎のサンプル点での速度差の絶対値を累積したものである。図8(B)から分かるように、着目する1の移動軌跡Tmでは、移動軌跡Tn(n=5)との速度差が最小である。また、この移動軌跡Tn(n=5)の速度差は、他の移動軌跡Tn(n=1−4、6、7)の速度差と同程度でない。さらに、移動軌跡Tn(n=5)の速度差は、一定値(この実施例では、100mm/s)未満である。したがって、移動軌跡Tmと移動軌跡Tn(n=5)とは同一であると判定され、関連付けが行われる。
このような判定処理が行われると、次に着目する移動軌跡Tmとすべての移動軌跡Tnとの間で、速度差が求められ、同一の移動軌跡が有るかどうかが判定される。すべての移動軌跡Tmについてすべての移動軌跡Tnとの判定処理が実行されると、センサ14の次の組についての判定処理が実行される。この実施例では、6個のセンサ14が用いられるため、全部で15(6C2)通りのセンサ14の組について判定処理が実行される。以下、この実施例において、センサ14の組という場合には、(A,B)、(A,C)、(A,D)、(A,E)、(A,F)、(B,C)、(B,D)、(B,E)、(B,F)、(C,D)、(C,E)、(C,F)、(D,E)、(D,F),(E,F)の各組を意味し、センサ14の各組について処理を実行する場合には、この順番に従って処理が実行されるものとする。ただし、括弧内のアルファベットはセンサ14の識別情報である。この実施例では、センサ14aの識別情報が「A」であり、センサ14bの識別情報が「B」であり、センサ14cの識別情報が「C」であり、センサ14dの識別情報が「D」であり、センサ14eの識別情報が「E」であり、そして、センサ14fの識別情報が「F」である。ただし、センサ14の識別情報はアルファベットで示す必要はなく、数字やアルファベットと数字との組み合わせで表してもよく、また、人間が解読できない情報で表してもよい。
図9(A)には、同一の移動軌跡であることが判定され、関連付けが行われた移動軌跡についてのテーブル(関連付けテーブル)の例が示される。この関連付けテーブルでは、グローバルIDに対応して、第1センサID、第1ローカルID、第2センサIDおよび第2ローカルIDが記述される。
グローバルIDは、上述したように、同一であることが判定された移動軌跡すなわちグローバル座標系における1つの移動軌跡についての識別情報であり、数字で表される。ただし、グローバルIDは、アルファベットで表されも良く、数字とアルファベットとで表されても良く、人間が解読できない情報で表されても良い。
第1センサIDは、同一の移動軌跡であると判定された場合の移動軌跡Tmを検出したセンサ14の識別情報である。第1ローカルIDは、同一の移動軌跡と判定された場合の移動軌跡TmについてのローカルIDである。第2センサIDは、同一の移動軌跡であると判定された場合の移動軌跡Tnを検出したセンサ14の識別情報である。第2ローカルIDは、同一の移動軌跡と判定された場合の移動軌跡TnについてのローカルIDである。
たとえば、図9(A)に示すように、グローバルIDが「35」である移動軌跡は、第1センサIDが「A」であるセンサ14aで検出された第1ローカルIDが「T1」の移動軌跡Tmおよび第2センサIDが「B」であるセンサ14bで検出された第2ローカルIDが「T1」の移動軌跡Tnであることを意味する。説明は省略するが、他の場合についても同様である。
なお、第1ローカルIDと第2ローカルIDは、同じIDが付されている場合もあるが、第1センサIDおよび第2センサIDによって区別されるため、それらが示す移動軌跡は識別可能である。
同一の移動軌跡が関連付けられると、つまり関連付けテーブルが作成されると、同一であると判定された移動軌跡Tm上および移動軌跡Tn上の人観測点であって、同じタイミング(同一フレーム)で検出された人観測点(共有の人観測点)をそれぞれの移動軌跡Tm、Tnから抽出する。
図9(B)は、抽出した共有の人観測点についてのリスト(共有の人観測点リスト)の例を示す。図9(B)に示すように、共有の人観測点リストは、第1センサIDおよび第2センサIDに対応して、第1距離、第1角度、第2距離および第2角度が記述される。
上述したように、第1センサIDは、同一の移動軌跡であると判定された移動軌跡Tmを検出したセンサ14の識別情報である。同様に、第2センサIDは、同一の移動軌跡であると判定された移動軌跡Tnを検出したセンサ14の識別情報である。
第1距離は、第1センサIDが示すセンサ14と共有の人観測点OBSとの距離(mm)である。第1角度は、第1センサIDが示すセンサ14の正面方向に対する、当該センサ14から見た共有の人観測点OBSの角度(°)である。
第2距離は、第2センサIDが示すセンサ14と共有の人観測点OBSとの距離(mm)である。第2角度は、第2センサIDが示すセンサ14の正面方向に対する、当該センサ14から見た共有の人観測点OBSの角度(°)である。
たとえば、図9(B)に示すように、第1センサIDが「A」であるセンサ14aと、第2センサIDが「B」であるセンサ14bとの共有の人観測点OBSは、センサ14aとの第1距離が3500mmであり、センサ14aの正面方向に対する第1角度が45°であり、センサ14bとの第2距離が2000mmであり、そして、センサ14bの正面方向に対する第2角度が30°である。説明は省略するが、他の場合についても同様である。
ただし、人観測点OBSは、上述したように、センサ14毎の人観測点リストに登録されている人観測点(H1,H2,H3,H4,H5,…)である。
図10(A)には、第1センサIDが示すセンサ14(センサS1)と第2センサIDが示すセンサ14(センサS2)とによって検出され、同一であると判定された移動軌跡上の共有の人観測点OBSと、センサS1およびセンサS2との位置関係(距離および角度)を示す図解図である。ただし、図10(A)においては(後述する図10(B)も同様)、第1距離を「d1」、第1角度を「θ1」、第2距離を「d2」、そして第2角度を「θ2」で示してある。
なお、図10(A)では、1つの共有の人観測点OBSを示してあるが、実際には、同一と判定された移動軌跡上には、複数の共有の人観測点OBSが存在する。
次に、センサ14間の制約(位置関係)を算出方法について説明する。ただし、センサ14間の制約とは、2つのセンサ14間の距離Dとこの2つのセンサ14間の相対的な向き(α、β)とを意味する(図11(A)、(B)参照)。
上述したように、人観測点OBSは各センサ14のローカル座標系における極座標で表されるため、たとえば、図10(B)に示すように、センサS1が距離d1と角度θ1とを保ったまま任意の角度γだけ回転した場合には、角度γだけ回転しない場合と比較して、センサS1とセンサS2との制約が全く異なってしまう。つまり、共有の人観測点OBSが1つの場合には、当該人観測点OBSと、センサS1およびセンサS2との位置関係(極座標)から、それらのセンサ間の制約(位置関係)を正しく算出することができない。
なお、図示は省略するが、センサS2が距離d2と角度θ2とを保ったまま任意の角度だけ回転した場合も、図10(B)に示した場合と同様である。
したがって、この実施例では、2つの共有の人観測点OBSp、OBSqと、センサS1およびセンサS2との位置関係から、センサS1とセンサS2との制約(位置関係)を算出するようにしてある。
図11(A)は、2つの共有の人観測点OBSp、OBSqと、センサS1およびセンサS2との位置関係を示す図解図である。図示は省略するが、人観測点OBSpおよび人観測点OBSqは、同一であると判定された移動軌跡上の点である。
ここで、図11(A)および図11(B)を用いて、センサ間の制約の算出方法について説明する。ただし、図11(B)では、図11(A)で示した2つのセンサS1、センサS2の位置を点Aおよび点Bで示すとともに、2つの共有の人観測点OBSp、OBSqの位置を点Pおよび点Qで示してある。また、上述した2つのセンサ間の距離Dおよび2つのセンサ間の相対的な角度α、βが示される。具体的には、図11(B)に示す、線分ABの長さが距離Dであり、線分ABとセンサS1の正面方向が為す角度が角度αであり、そして、線分ABとセンサS2正面方向が為す角度が角度βである。
上述したように、図11(A)に示す2つの共有の人観測点OBSp、OBSqは、所定のルールに従って抽出(選択)される。たとえば、共有の人観測点OBSpは時間的に最も新しい(最後に検出された)人観測点であり、共有の人観測点OBSqは、共有の人観測点OBSpよりも古い(時間的に前に検出された)人観測点であり、任意(ランダム)に選択される。ただし、2つの共有の人観測点OBSp、OBSqをランダムに選択するようにしてもよい。
(1)まず、余弦定理を用いて、線分PQの長さdPQが算出される。ここで、図11(A)に示す第1角度θ1および第3角度θ3は、共有の人観測点リストに含まれるため、既知の値である。したがって、図11(B)に示す角度∠PAQは、第1角度θ1の大きさと第3角度θ3の大きさとを用いて算出することができる。ただし、センサS1の向きによって第1角度θ1と第3角度θ3との符号(+,−)が変わるため、基準の人観測点OBSpに対する第1角度θ1から他の人観測点OBSqに対する第3角度θ3を減算することにより算出される。具体的には、角度∠PAQは、数4に従って算出される。同様にして、角度∠PBQは、第2角度θ2と第4角度θ4とを用いることにより、数5に従って算出される。ただし、数4および数5において、|・|は絶対値を意味する。以下、この実施例において同じ。また、図11(A)に示す第2角度θ2および第4角度θ4は、センサS2で検出されたセンサ情報に含まれるため、既知の値である。以下、同様である。
[数4]
∠PAQ=|θ1−θ3|
[数5]
∠PBQ=|θ2−θ4|
(2)次に、三角形△APQについて余弦定理を用いることにより、線分PQの長さを算出する。ここで、線分APの長さdAPおよび線分AQの長さdAQは、図11(A)に示す第1距離d1および第3距離d3の各々に相当し、これらは共有の人観測点リストに含まれるため、既知である。したがって、数6に示すように、余弦定理を用いて、線分PQの長さdPQが求められる。
[数6]
dPQ=√((dAP)2+(dAQ)2−2×dAP×dAQ×cos∠PAQ)
なお、詳細な説明は省略するが、角度∠PBQを数5に従って算出してあるため、三角形△BPQについて余弦定理を用いることにより、線分PQの長さを算出することも可能である。
(3)次に、角度∠APQおよび角度∠BPQが算出され、さらに、角度∠APBが算出される。角度∠APQは、三角形△APQについて正弦定理を用いることにより、数7に従って算出される。また、角度∠BPQは、三角形△BPQについて正弦定理を用いることにより、数8に従って算出される。ただし、角度∠APBは、角度∠APQと角度∠BPQとの和であるため、数式は省略する。また、線分BQの長さdBQは、図11(A)に示す第4距離d4に相当し、共有の人観測点リストに含まれるため、既知である。
[数7]
∠APQ=sin−1(dAQ/dPQ×sin∠PAQ)
[数8]
∠BPQ=sin−1(dBQ/dPQ×sin∠PBQ)
(4)続いて、線分ABの長さdABが、三角形△PABについて余弦定理を用いることにより、数9に従って算出される。ただし、線分BPの長さdBPは、図11(A)に示す第3距離d3に相当し、共有の人観測点リストに含まれるため、既知である。
[数9]
dAB=√((dAP)2+(dPB)2−2×dAP×dPB×cos∠APB)
(5)さらに、角度∠PABおよび∠PBAが、三角形△PABについて正弦定理を用いることにより、数10および数11に従ってそれぞれ算出される。
[数10]
∠PAB=sin−1(dBP/dAB×sin∠APB)
[数11]
∠PBA=sin−1(dAP/dAB×sin∠APB)
角度∠PABと角度∠PBAが算出されると、センサS1と人観測点OBSpとの角度θ1およびセンサS2と人観測点OBSpとの角度θ2は既知であるため、センサS1の正面方向と線分ABとの為す角度α(∠PAB−|θ1|)およびセンサS2の正面方向と線分ABとの為す角度β(∠PBA−|θ2|)は簡単に求めることができる。
このように、数9−数11を用いて、2つのセンサ間の制約(D、α、β)が算出される。ただし、上述したように、観測点OBSqはランダムに選択されるため、複数(この実施例では、3つ)の観測点OBSqをランダムに選択し、それぞれの場合について、2つのセンサ間の制約を算出するようにしてある。観測点OBSpと複数の観測点OBSqについて、2つのセンサ間の制約が算出されると、それらについての平均およびその推定値の分散(誤差)が算出される。この実施例では、センサ間の制約の平均およびその推定値の分散は、カルマンフィルタによって算出される。ここで、その算出方法について簡単に説明する。
まず、共有の人観測点OBSから生成された2つのセンサ(ここでは、センサiとセンサj)についての新しい制約(dij,θij)は、数12に示すように、センサ間の相対座標系において、座標デカルトの差Zijに変換される。
このように算出されたセンサ14の各組についてのセンサ間の制約および推定値の分散は、図12に示すようなリスト(制約リスト)に登録(追加)される。図12に示すように、制約リストは、第1センサID、第2センサID、センサ間の距離、角度、および推定値の分散が記述されている。
なお、図11(A)および(B)では、センサ間の制約は、センサS1とセンサS2との距離Dおよびそれらの相対角度α、βとして、その算出方法を説明した。ただし、相対角度αは、着目するセンサS1からセンサS2を見た場合のセンサS1の正面方向の向きであり、相対角度βは、着目するセンサS2からセンサS1を見た場合のセンサS2の正面方向の向きである。したがって、制約リストでは、それぞれの場合を別のセンサ制約として記載してある。
第1センサIDは、着目するセンサ14の識別情報であり、第2センサIDは、第1センサIDが示すセンサ14から見たセンサ14の識別情報である。センサ間距離、上述のようにして算出された、第1センサIDが示すセンサ14と第2センサIDが示すセンサ14との距離(mm)である。角度は、上述のようにして算出された角度(°)であり、具体的には、第1センサIDが示すセンサ14から第2センサIDが示すセンサ14を見た場合の第1センサIDが示すセンサ14の正面方向の向きである。推定値の分散は、上述のようにして算出された推定値の分散σであり、ここでは、対応する第1センサIDと第2センサIDとを添えて示してある。
制約リストが作成されると、この制約リストを用いて、すべてのセンサ14の位置が推定される。たとえば、仮想のマップ上に、すべてのセンサ14が配置される。そして、センサ間の制約について緩和計算を繰り返すことにより、それらの推定を精錬する。
まず、制約リストは、分散σが小さい順(信頼度の高い順番)に並べ替えられる(ソートされる)。そして、最も信頼度の高い場合におけるセンサ間の制約に従って2つのセンサ14を仮想のマップ上に配置する。このとき、一方のセンサ14が基準として設定される。たとえば、2つのセンサ14のうち、括弧書きのセンサ14の組において左側(または右側でもよい)に記載されたセンサ14が基準として設定される。つまり、基準として設定されたセンサ14の位置および角度を基準値に設定する。この実施例では、基準値として、(X座標,Y座標,角度)=(0,0,0)が設定される。つまり、基準のセンサ14の位置が仮想のマップ上の原点に設定される。ただし、センサ14の正面方向が仮想のマップ上のY軸のプラス方向に設定される。そして、他方のセンサ14が、上述のようにして算出したセンサの制約の平均に従って仮想のマップ上に配置される。
たとえば、最も信頼度の高いセンサ14の組が(A,C)であると仮定すると、図13(A)に示すように、初めに、センサ14aを基準として、センサ14aおよびセンサ14cがグローバル座標系の仮想のマップ上に配置される。図13(A)からも分かるように、センサ14aが原点O(0,0)に配置され、その向きがY軸のプラス方向に設定される。次に、センサ14cが、センサ14aとの間におけるセンサ間の制約(ここでは、距離D1、制約角度α1およびβ1)を用いて配置される。したがって、センサ14cの位置が(D1×sin|α1|,D1×cos|α1|)で表される。ただし、上述したように、センサ間の制約には偏差すなわち誤差(センサ間の誤差)が含まれる。したがって、センサ14cが配置された位置は推定位置と言える。また、センサ14cの向きが−(180°−|α|−|β|)に決定される。
なお、この実施例では、角度については分散(誤差)は算出していない。
また、グローバル座標系においては、Y軸方向を基準とした場合に、右側(第1象限、第4象限側)がセンサ14の向き(角度)のプラス方向であり、左側(第2象限、第3象限側)がセンサ14の角度のマイナス方向である。
信頼度の最も高い組についての2つのセンサ14(ここでは、A,C)が配置されると、配置されたセンサ14(A,C)のいずれか一方とセンサ間の制約を有する他のセンサ14が当該センサ間の制約に従って配置される。図13(A)に示す例では、センサ14aまたはセンサ14cとのセンサ間の制約を有するセンサ14が、次に仮想のマップ上に配置されるのである。ただし、次に配置するセンサ14を決定する際には、制約リストを参照することにより、信頼度の高い順にセンサ間の制約が読み出される。
図13(B)は、図13(A)に示す状態から次のセンサ14(ここでは、B)を配置する場合についての例を示す。ここでは、並べ替えられた制約リストを一列目からサーチした際に、センサ14aまたはセンサ14cのうち、センサ14aとのセンサ間の制約を有するセンサ14bが検出され、このセンサ14bが配置されるのである。
図13(B)に示すように、すでに配置されているセンサ14aとのセンサ間の制約に従ってセンサ14bが仮想のマップ上に配置される。グローバル座標系において、センサ14bの推定位置は(−D2×sin|α2|,D2×cos|α2|)で表される。また、センサ14bの角度は、180°−|α2|−|β2|で表される。
このようにして、既に配置されたセンサ14とのセンサ間の制約を有するセンサ14が仮想のマップ上に順番に配置される。また、センサ14が仮想のマップ上に配置されると、図14に示すようなセンサ位置リストに、配置された情報が登録(追加)される。図14に示すように、センサ位置リストは、配置センサIDに対応して、対センサID、推定位置、角度およびセンサ間の制約誤差が記述される。配置センサIDは、今回配置したセンサ14についての識別情報である。対センサIDは、配置センサIDが示すセンサ14を配置する際に用いたセンサ間の制約が示す他方の(対となる)センサ14の識別情報を示す。
なお、基準のセンサ14は、位置が原点Oに設定されるため、(x1,y1)=(0,0)であり、基準のセンサ14の正面方向がY軸方向に設定されるため、角度は0°である。
推定位置は、今回配置されたセンサ14のグローバル座標系における位置を示す2次元座標である。角度は、今回配置されたセンサ14のグローバル座標系における正面方向のY軸のプラス方向に対する角度である。センサ間の誤差は、センサ間の制約リストに記述された分散(誤差)σijであり、今回配置したセンサ14(センサj)と対となるセンサ14(センサi)についての誤差σijの数値が記述される。
このセンサ位置リストの配置センサIDの欄にすべてのセンサ14の識別情報(ここでは、A−F)が記述されると、すべてのセンサ14が仮想のマップ上に配置されたことになる。すべてのセンサ14が配置されると、全体についての配置位置の誤差(全体誤差)が所定の閾値以下になるように、緩和計算によって、各センサ14の位置が調整される。つまり、緩和計算によって、センサの推定位置が精錬される。
緩和計算の方法および収束(精錬)の証明は、文献(T. Duckett, S. Marsland, and J. Shapiro, Learning globally consistent maps by relaxaTmon, in Proc. IEEE InternaTmonal Conference on RoboTmcs & AutomaTmon (ICRA), San Francisco, CA, April 2000.)に詳細に説明されている。
簡単に説明すると、緩和計算では、推定位置は、各センサiと、それに関連する近傍の位置(xj,yj)に配置されるセンサjとについて、数16に従って生成される。ただし、センサiとセンサjとは共有の観測点OBSを検出した2つのセンサ14である。また、これらの算出では、絶対座標系における角度の制約θjiを算出するために、数17に示すように、推定された角度の制約が用いられる。
次に、各推定位置の誤差νjiが、近傍のセンサjの推定位置の誤差νjと2つのセンサ間の制約の推定についての誤差ujiとの合計として、数18に従って算出される。
これらの推定位置を組み合わせることにより、数19に従って、センサ14の新しい推定位置(xi,yi)とその誤差νjとが算出される。ただし、数19においてNiは、センサi以外のすべてのセンサjのセットを表す。ただし、i≠jである。
そして、すべてのセンサ14の角度が、数20を用いて、角度の制約と推定されたセンサ14の位置との間の誤差の平均値が最小になるように調整される。
このような手順が任意の停止点まで繰り返される。この実施例の計測装置10では、上述したような手順を所定回数(たとえば、3回)繰り返すと、正確に収束する傾向にある。ただし、この実施例では、全体誤差の最小値が得られるまで、上述した手順を繰り返すようにしてある。ここで、全体誤差は、センサ間の制約に従ってすべのセンサ14を仮想のマップ上に配置した場合に得られるセンサ間の距離と、算出したセンサ間の制約におけるセンサ間の距離との差の合計である。ただし、仮想のマップ上に配置したセンサ14間の距離は、センサ間の制約を有しているセンサ14間についてのみ算出される。このようにして、すべてのセンサ14の位置が調整される。このようにして、或る環境に配置された各センサ14の位置および角度が同一の座標系(グローバル座標系)において認識される。つまり、センサ14の位置および角度がキャリブレーションされる。
ただし、すべてのセンサ14についての位置誤差の平均値が所定値(この実施例では、50mm−100mm)を超えている場合には、位置誤差の平均値が所定値以下になるまで、人間の位置検出処理からセンサ位置の調整処理までが繰り返し実行される。ここで、センサ14の位置誤差は、推定されたセンサ14の位置に含まれる誤差を意味する。図14を参照して説明すると、センサ14aとセンサ14cとを配置した際、これらはセンサ間の制約を算出した際の分差σAC,σCA(=200mm)を含むため、センサ14aおよびセンサ14cの位置には、その誤差(位置誤差)が含まれることになる。次に、センサ14bを配置する場合には、センサ14aの位置誤差に加えて、センサ14aとセンサ14bとのセンサ間の制約の分差σAB(=500mm)が含まれるため、センサ14bの位置誤差は200mm+500mmとなる。このように、センサ14を配置する度に、位置誤差が増大されるのである。この位置誤差の平均値を所定値以下にして、複数のセンサ14の位置を最適化しているのである。
図15は、図1に示したコンピュータ12に内蔵されるメモリ(RAM)12aのメモリマップ300の一例を示す。図15に示すように、メモリ12aは、プログラム記憶領域302およびデータ記憶領域304を含む。プログラム記憶領域302には、キャリブレーションプログラムが記憶され、このキャリブレーションプログラムは、メイン処理プログラム312、背景スキャンプログラム314、人間位置検出プログラム316、軌跡生成プログラム318、軌跡一致処理プログラム320、共有人観測点リスト作成プログラム322、センサ間制約算出プログラム324、センサ間制約平均プログラム326、センサ位置推定プログラム328およびセンサ位置調整プログラム330などによって構成される。
メイン処理プログラム312は、この実施例のキャリブレーション処理のメインルーチンを処理するためのプログラムである。背景スキャンプログラム314は、センサ14a−14fの各々の出力(センサ情報)から背景となる壁や柱などを検出範囲から除外し、センサ14a−14fの各々について、所定角度(この実施例では、0.5°)毎の検出可能な最大距離を抽出するためのプログラムである。
人間位置検出プログラム316は、背景スキャンの結果を用いて、センサ14a−14fの各々の出力(センサ情報)から人間を検出するとともに、その位置(人観測点OBS)を検出するためのプログラムである。ただし、人間の位置は、センサ14a−14fの各々のローカル座標系における距離および角度で表され、図6(A)に示したように、センサ14a−14fの各々について作成される人観測点リストに登録(追加)される。
軌跡生成プログラム318は、センサ14a−14fの各々について、人観測点リストを参照して、連続する人観測点であると判断される人観測点を時系列に並べることにより、ローカル座標系における移動軌跡を生成し、それぞれのローカル軌跡リストを作成するためのプログラムである。軌跡一致処理プログラム320は、異なる2つのセンサ14の出力に基づいてそれぞれ生成された移動軌跡を、移動軌跡の速度変化に基づいて一致するかどうかを判断し、一致する2つの移動軌跡を関連付ける関連付けテーブルを作成するためのプログラムである。
共有人観測点リスト作成プログラム322は、関連付けられた2つのローカル軌跡上の人観測点OBSのうち、同時(同じフレーム)に検出された人観測点OBSが共有の人観測点OBSであると判断し、共有の人観測点リストを作成するためのプログラムである。
センサ間制約算出プログラム324は、2つのセンサ14の距離および2つのセンサ14の相対的な角度(センサ間の制約)を算出するためのプログラムである。センサ間制約平均プログラム326は、センサ間制約算出プログラム324に従って算出された各センサ14間の複数の制約についての平均およびその分散をそれぞれ算出するためのプログラムである。この実施例では、上述したように、カルマンフィルタを用いて、各センサ14間の制約の平均およびその分散が算出される。
センサ位置推定プログラム328は、センサ間制約平均プログラム326に従って算出された各センサ間の制約の平均およびその分散を用いて、全センサ14を同一の座標系(グローバル座標系)に配置するためのプログラムである。センサ位置調整プログラム330は、センサ位置推定プログラム328によって配置された全センサ14の位置および角度を、緩和計算により、調整(精錬)するためのプログラムである。
図16は、図15に示したデータ記憶領域304の具体的な内容を示す図解図である。図16に示すように、データ記憶領域304には、センサ情報データ350、背景データ352、人観測点リストデータ354、ローカル軌跡リストデータ356、関連付けテーブルデータ358、共有の人観測点リストデータ360、制約リストデータ362、センサ位置リストデータ364およびセンサ位置誤差データ366などが記憶される。
センサ情報データ350は、図4に示したように、各フレームで一定の角度毎に検出された距離を記述したセンサ情報(テーブル)のデータであって、各センサ14について作成および記憶されている。背景データ352は、一定の角度毎の境界までの距離または最大距離Rについての数値データであって、センサ14毎に作成および記憶される。
人観測点リストデータ354は、図6(A)に示したように、センサ情報に基づいて検出された人間の位置(人観測点OBS)を記述した人観測点リストについてのデータであって、各センサ14について作成および記憶される。ローカル軌跡リストデータ356は、図6(B)に示したように、人観測点リストに基づいて生成(検出)された移動軌跡のリストのデータであって、各センサ14について作成および記憶される。
関連付けテーブルデータ358は、図9(A)に示したように、異なるセンサ14で生成(検出)された2つの移動軌跡であって、一致すると判定された(同定された)移動軌跡について、互いに関連付けた関連付けテーブルについてのデータである。共有の人観測点リストデータ360は、図9(B)に示したように、関連付けされた2つの移動軌跡上の人観測点OBSのうち、同時(同じフレーム)に検出された人観測点OBSを共有の人観測点OBSとして登録したリストについてのデータである。制約リストデータ362は、図12に示したように、センサ間の制約(センサ14間の距離および相対的な角度)およびその推定値の分散についての制約リストのデータである。
センサ位置リストデータ364は、複数のセンサ14を仮想のマップ上に配置する際に、当該仮想マップに配置したセンサ14についての情報(推定位置、角度、センサ間の誤差など)を示すリストについてのデータである。センサ位置誤差データ316は、仮想のマップ上に配置された複数のセンサ14のそれぞれについての位置誤差を示す数値データである。
なお、図示は省略するが、データ記憶領域304には、キャリブレーションプログラムの実行に必要な、他のデータが記憶されたり、カウンタ(タイマ)やレジスタが設けられたりする。
図17は、図1に示したコンピュータ12(CPU)のキャリブレーション処理を示すフロー図である。図17に示すように、コンピュータ12は、キャリブレーション処理を開始すると、ステップS1で、後述する背景スキャン処理(図18参照)を実行し、次のステップS3で、後述する人間の位置検出処理(図19参照)を実行する。
なお、図示は省略するが、キャリブレーション処理が開始されると同時またはほぼ同時に、各センサ14からのスキャンデータの検出処理が開始される。この検出処理は、キャリブレーション処理を並列的に実行される。
続いて、ステップS5で、後述するローカル軌跡の生成処理(図20参照)を実行し、ステップS7で、後述する軌跡一致処理(図21および図22)を実行する。さらに、ステップS9で、後述する共有の人観測点リストの作成処理(図23および図24参照)を実行し、ステップS11で、後述するセンサ間の制約の算出処理(図25参照)を実行して、ステップS13で、すべてのセンサ14を接続するためのセンサ間の制約を表せたかどうかを判断する。つまり、コンピュータ12は、センサ間の制約を算出していないセンサ14が存在しないかどうかを判断する。
ステップS13で“NO”であれば、つまりすべてのセンサ14を接続するためのセンサ間の制約を表せていない場合には、ステップS3に戻って、ステップS3−S11の処理を再度実行する。一方、ステップS13で“YES”であれば、つまりすべてのセンサ14を接続するためのセンサ間の制約を表せている場合には、ステップS15で、後述する全センサの配置処理(図26および図27参照)を実行し、ステップS17で、後述するセンサ位置の調整処理(図28参照)を実行する。
そして、ステップS19で、推定された位置誤差の平均が閾値(たとえば、50mm−100mm)以内であるかどうかを判断する。ステップS19で“NO”であれば、つまり推定された位置誤差の平均が閾値以内でなければ、ステップS3に戻る。一方、ステップS19で“YES”であれば、つまり推定された位置誤差の平均が閾値以内であれば、キャリブレーション処理を終了する。
図18は、図17のステップS1に示した背景スキャン処理のフロー図である。この背景スキャン処理は、マルチタスクによって、センサ14毎に実行される。コンピュータ12(CPU)は、背景スキャン処理を開始すると、ステップS31で、時間の経過に従って、スキャンデータを収集する。つまり、フレーム毎に、一定の角度毎の距離が検出される。次のステップS33では、角度毎にスキャンデータが示す距離の代表値を算出する。この実施例では、代表値は、最頻出のスキャンデータが示す距離の値である。そして、ステップS35では、代表値についての距離を示すスキャンデータの個数が所定値(この実施例では、100個)以上かどうかを判断する。
ステップS35で“NO”であれば、つまり代表値についての距離を示すスキャンデータの個数が所定値未満であれば、ステップS31に戻る。一方、ステップS35で“YES”であれば、つまり代表値についての距離を示すスキャンデータの個数が所定値以上であれば、ステップS37で、角度毎の代表値の数値データを当該センサ14の背景データとしてデータ記憶領域304に記憶して、図17に示したキャリブレーション処理にリターンする。この背景処理が各センサ14について実行され、図16に示した背景データ352が生成される。
図19は、図17に示したステップS3の人間の位置検出処理のフロー図である。この人間の位置検出処理もまた、マルチタスクによって、センサ14毎に実行される。図19に示すように、コンピュータ12(CPU)は、人間の位置検出処理を開始すると、ステップS51で、1フレーム分のスキャンデータを収集する。つまり、1フレームにおける、各角度の距離が検出される。次のステップS53では、背景との差分を検出する。つまり、コンピュータ12は、背景データ352を参照して、当該センサ14の背景データが示す各角度の距離と、ステップS51で検出した現フレームの各角度の距離との差分をそれぞれ算出するのである。
続くステップS55では、人間幅の閾値以内(この実施例では、数2で示した範囲内)で、背景とは異なるセグメントを特定する。つまり、人間が特定される。続くステップS57では、特定されたセグメントについての位置(人観測点)を人観測点リストに登録(追加)して、図17に示したキャリブレーション処理にリターンする。ただし、上述したように、人観測点として、距離と角度とが人観測点リストに登録される。この人間の位置検出処理が各センサ14について実行されることにより、人観測点リストデータ354が作成ないし更新される。
図20は、図17に示したステップS5のローカル軌跡の生成処理のフロー図である。このローカル軌跡の生成処理もまた、マルチタスクによって、センサ14毎に実行される。図20に示すように、コンピュータ12は、ローカル軌跡の生成処理を開始すると、ステップS71で、今回検出された人観測点OBSのうち、或る1つの人観測点OBSを読み出す。
次のステップS73では、今回検出された人観測点OBSが、前回(直前のフレーム以前のフレームで)検出されたいずれかの人観測点OBSの500mm以内であるかどうかを判断する。ステップS73で“NO”であれば、つまり今回検出された人観測点OBSが、前回検出されたいずれかの人観測点OBSの500mm以内でなければ、そのままステップS81に進む。一方、ステップS73で“YES”であれば、つまり今回検出された人観測点OBSが、前回検出されたいずれかの人観測点OBSの500mm以内であれば、ステップS75で、当該前回検出された人観測点OBSがローカル軌跡リストに記載されているかどうかを判断する。このとき、コンピュータ12は、ローカル軌跡リストデータ356を参照する。
ステップS75で“YES”であれば、つまり当該前回検出された人観測点OBSがローカル軌跡リストに記載されている場合には、ステップS77で、今回検出された人観測点OBSを、既存のローカル軌跡に追加して、ステップS81に進む。つまり、ステップS77では、ローカル軌跡リストデータ356が示すローカル軌跡リストにおいて、既に存在するローカルIDに対応して、今回検出された人観測点OBSのインデックスを記載する。
一方、ステップS75で“NO”であれば、つまり当該前回検出された人観測点OBSがローカル軌跡リストに記載されていない場合には、当該前回検出された人観測点OBSと今回の検出された人観測点OBSとを含む新しい移動軌跡を生成して、ステップS81に進む。つまり、ステップS79では、ローカル軌跡リストデータ356が示すローカル軌跡リストに、ローカルIDを追加するとともに、当該ローカルIDに対応して、当該前回検出された人観測点OBSのインデックスと今回の検出された人観測点OBSのインデックスとを記載する。
ステップS81では、今回検出されたすべて人観測点OBSについて、ローカル軌跡を生成するための処理(ステップS73−S79)を実行したかどうかを判断する。ステップS81で“NO”であれば、つまり今回検出された人観測点OBSのうち、ローカル軌跡を生成するための処理を実行していない人観測点OBSが存在する場合には、ステップS83で、今回検出された人観測点OBSのうち、次の人観測点OBSを読み出して、ステップS73に戻る。ステップS83では、人観測点リストにおいて、次に(下側に)記載された人観測点OBSが読み出される。一方、ステップS81で“YES”であれば、つまり今回検出されたすべての人観測点OBSについて、ローカル軌跡を生成するための処理を実行した場合には、図17に示したキャリブレーション処理にリターンする。
図21および図22は、図17に示したステップS7の軌跡一致処理のフロー図である。この軌跡一致処理は、マルチタスクによって、センサ14の組毎に実行される。図21に示すように、コンピュータ12(CPU)は、軌跡一致処理を開始すると、ステップS101で、変数mを初期化する(m=1)。mは、センサ14の組のうちの一方のセンサ14の出力に基づいて生成されたローカル軌跡を個別に識別するものである。また、この軌跡一致処理では、一方のセンサ14についてのローカル軌跡リストの一列目から順に参照される。
続くステップS103では、変数nを初期化する(n=1)。nは、センサ14の組のうちの他方のセンサ14の出力に基づいて生成されたローカル軌跡を個別に識別するものである。また、この軌跡一致処理では、他方のセンサ14についてのローカル軌跡リストの一列目から順に参照される。
続いて、ステップS105では、移動軌跡Tmと移動軌跡TnとのRMS誤差を数3に従って算出する。次のステップS107では、移動軌跡Tmと移動軌跡Tnとの速度が最低速度の閾値よりも大きいかどうかを判断する。この最低速度の閾値は、人間が歩いている(移動している)と判断するための速度に設定される。ただし、観測する領域(環境)において、人間の数が多い場合には、この最低速度の閾値は比較的小さく設定され、人間の数が少ない場合やセンサの計測結果にノイズが多く含まれるには、この最低速度の閾値は比較的大きく設定される。このように、人間の数が多い場合には、最低速度の閾値を小さくして、人間が移動しているかどうかを判断し易くしてある。逆に、人間の数が少ない場合には、最低速度の閾値を或る程度大きくしても、人間が移動しているかどうかを判断することができる。また、ノイズの影響を受けないようにするためには、フィルタリングのために、最低速度の閾値を大きくする必要がある。
ステップS107で“NO”であれば、つまり移動軌跡Tmおよび移動軌跡Tnの速度の少なくとも一方が最低速度の閾値以下であれば、そのままステップS113に進む。一方、ステップS107で“YES”であれば、つまり移動軌跡Tmおよび移動軌跡Tnの速度がいずれも最低速度の閾値よりも大きい場合には、ステップS109で、RMS誤差が誤差閾値(この実施例では、100mm/s)よりも小さいかどうかを判断する。
ステップS109で“NO”であれば、つまりRMS誤差が誤差閾値以上であれば、そのままステップS113に進む。一方、ステップS109で“YES”であれば、つまりRMS誤差が誤差閾値よりも小さければ、移動軌跡Tmと移動軌跡Tnとが一致する可能性があると判断して、ステップS111で、RMS誤差に対応して移動軌跡Tnをメモリ12aのワーク領域(図示せず)に記憶する。
ステップS113では、変数nを1加算する(n=n+1)。続くステップS115では、変数nが最大数を超えたかどうかを判断する。つまり、コンピュータ12は、他方のセンサ14についてのローカル軌跡リストに記述されたすべての移動軌跡Tnについて、移動軌跡Tmと一致するかどうかを判定する処理(判定処理)を実行したかどうかを判断する。
ステップS115で“NO”であれば、つまり変数nが最大数を超えていなければ、次の移動軌跡Tnについての判定処理に移行する。一方、ステップS115で“YES”であれば、つまり変数nが最大数を超えていれば、図22に示すステップS117で、移動軌跡Tmに一致する唯一の移動軌跡Tnが有るかどうかを判断する。つまり、コンピュータ12は、メモリ12aのワーク領域を参照して、1つのRMS誤差に対応して移動軌跡Tnが記載されているかどうかを判断する。
ステップS117で“NO”であれば、つまりメモリ12aのワーク領域に、RMS誤差に対応して移動軌跡Tnが記載されていない場合や2つ以上のRMS誤差のそれぞれに対応して移動軌跡Tnが記載されている場合には、移動軌跡Tmに一致する唯一の移動軌跡Tnが無いと判断して、そのままステップS121に進む。一方、ステップS117で“YES”であれば、つまりメモリ12aのワーク領域に、1つのRMS誤差に対応して移動軌跡Tnが記載されている場合には、移動軌跡Tmに一致する唯一の移動軌跡Tnが有ると判断して、移動軌跡Tmと移動軌跡Tnとを関連付けテーブルに登録(追加)して、ステップS121に進む。
ステップS121では、変数mを1加算する(m=m+1)。続くステップS123では、変数mが最大数を超えたかどうかを判断する。つまり、コンピュータ12は、一方のセンサ14についてのローカル軌跡リストに記述されたすべての移動軌跡Tmについて、他方のセンサ14についてのローカル軌跡リストに記述されたすべての移動軌跡Tnと一致するかどうかの判定処理を実行したかどうかを判断するのである。
ステップS123で“NO”であれば、つまり変数mが最大数以下であれば、図21に示したステップS103に戻る。つまり、コンピュータ12は、一方のセンサ14についてのローカル軌跡リストに記述された次のローカル軌跡Tmと他方のセンサ14についてのローカル軌跡リストに記述された移動軌跡Tnのそれぞれとが一致するかどうかの判定処理に移行するのである。一方、ステップS123で“YES”であれば、つまり変数mが最大数を超えていれば、図17に示したキャリブレーション処理にリターンする。
図23および図24は、図17に示したステップS9の共有の人観測点リストの作成処理のフロー図である。この共有の人観測点リストの作成処理もまた、マルチタスクによって、センサ14の組毎に実行される。図23に示すように、コンピュータ12(CPU)は、共有の人観測点リストの作成処理を開始すると、ステップS141で、関連付けテーブルに存在する最初の移動軌跡Tmと移動軌跡Tnとのそれぞれを構成する人観測点OBS(OBSv、OBSw)およびその人観測点OBSを検出したフレーム数を読み込む。
次のステップS143では、変数fcに初期値を設定する(fc=1)。ただし、fcはフレーム数である。次のステップS145では、このフレームにおいて、移動軌跡Tmを構成する人観測点OBSvが有るかどうかを判断する。つまり、コンピュータ12は、移動軌跡Tmを構成する人観測点OBSvのうち、変数fcが示すフレーム数の人観測点OBSvが存在するかどうかを、人観測点リストデータ354およびローカル軌跡リストデータ356を参照して判断する。この処理は、次のステップS147も同様である。
ステップS145で“NO”であれば、つまりこのフレームにおいて、移動軌跡Tmを構成する人観測点OBSvが無い場合には、そのままステップS151に進む。一方、ステップS147で“YES”であれば、つまりこのフレームにおいて、移動軌跡Tmを構成する人観測点OBSvが有る場合には、ステップS147で、このフレームにおいて、移動軌跡Tnを構成する人観測点OBSwが有るかどうかを判断する。
ステップS147で“NO”であれば、つまりこのフレームにおいて、移動軌跡Tnを構成する人観測点OBSwが無い場合には、そのままステップS151に進む。一方、ステップS147で“YES”であれば、つまりこのフレームにおいて、移動軌跡Tnを構成する人観測点OBSwが有る場合には、ステップS149で、このフレームにおける人観測点OBSv、OBSwを、図9(B)に示したような、共有の人観測点リストに登録(追加)して、ステップS151に進む。
ステップS151では、このフレームが最大フレーム(現時点の最終フレーム)であるかどうかを判断する。ステップS151で“NO”であれば、つまりこのフレームが最大フレームでなければ、ステップS153で、変数fcを1加算して(fc=fc+1)、ステップS145に戻る。つまり、コンピュータ12は、次のフレームにおいて、共有の人観測点OBSが有るかどうかの判断処理を実行するのである。
一方、ステップS151で“YES”であれば、つまりこのフレームが最大フレームであれば、図24に示すステップS155で、次の移動軌跡Tmと移動軌跡Tnとが関連付けテーブルに存在するかどうかを判断する。つまり、コンピュータ12は、関連付けテーブルデータ358を参照して、このセンサの組において、一致することが判断された他の移動軌跡Tmおよび移動軌跡Tnが有るかどうかを判断するのである。
ステップS155で“NO”であれば、つまり次の移動軌跡Tmと移動軌跡Tnとが関連付けてテーブルに無い場合には、図17に示したキャリブレーション処理にリターンする。一方、ステップS155で“YES”であれば、つまり次の移動軌跡Tmと移動軌跡Tnとが関連付けテーブルに有る場合には、ステップS157で、関連付けてテーブルに存在する次の移動軌跡Tmと移動軌跡Tnとのそれぞれを構成する人観測点OBS(OBSv、OBSw)およびその人観測点OBSを検出したフレーム数を読み込み、図23に示したステップS143に戻る。
図25は、図17に示したステップS11のセンサ間の制約の算出処理のフロー図である。このセンサ間の制約の算出処理は、マルチタスクによって、センサ14の組毎に実行される。図25に示すように、コンピュータ12(CPU)はセンサ間の制約の算出処理を開始すると、ステップS161で、最新の共有の人観測点OBSpと、1つ以上(たとえば、3つ)の古い共有の人観測点OBSqとを抽出する。ただし、上述したように、古い共有の人観測点OBSqについては、ランダムに抽出される。
次のステップS163では、三角形の幾何学を用いて、センサ間の制約(距離および角度)を算出する。つまり、コンピュータ12は、数4−数11に従ってセンサ間の制約を算出する。これは、最新の共有の人観測点OBSpと、1つ以上(この実施例では、3つ)の古い共有の人観測点OBSqのそれぞれとについて算出する。そして、ステップS165で、数12−数15を繰り返し用いて、ステップS163で算出した複数のセンサ間の制約の平均とその推定値の分散(誤差)とを算出する。そして、ステップS167で、センサ間の制約の平均およびその推定値の分散を図11に示した制約リストに記憶(追加)して、図17に示したキャリブレーション処理にリターンする。
図26および図27は、図17に示したステップS15の全センサの配置処理のフロー図である。図26に示すように、コンピュータ12(CPU)は、全センサの配置処理を開始すると、ステップS181で、信頼度の高い順に制約リストを並べ替える。つまり、コンピュータ12は、推定値の分散(誤差)の小さい順に制約リストを並べ替える。
次のステップS183では、最も高い信頼度の制約に従って、基準のセンサ14と対のセンサ14とを図14に示したようなセンサ位置リストに登録する。このとき、図13(A)を用いて説明したように、仮想のマップ上に、基準のセンサ14および対のセンサ14が配置される。次のステップS185では、位置誤差に、センサ間の制約誤差すなわち最も高い信頼度の制約についての推定値の分散(誤差)を設定する。図示は省略するが、このとき、最も高い信頼度の制約についての推定値の分散がセンサ間の誤差として、センサ位置リストの基準のセンサ14および対のセンサ14に対応して登録される。つまり、図14に示したセンサ位置リストのセンサ間の誤差の項目の1行目および2行目に、最も高い信頼度の制約についての推定値の分散が登録される。したがって、基準のセンサ14と対のセンサ14とのそれぞれに対応する位置誤差のデータがセンサ位置誤差データ366として記憶される。
続いて、ステップS187では、変数kを初期化する(k=1)。ここで、kはセンサ14の各組を個別に識別するとともに、センサ14の各組について順次ステップS189以降の処理を実行するための変数である。図27に示す次のステップS189では、センサiの推定位置が有るかどうかを判断する。ここで、センサiは、上述したように、括弧書きで示すセンサ14の組のうち、左側に記載された識別情報が割り当てられたセンサ14を意味する。また、後述するセンサjは、括弧書きで示すセンサ14の組のうち、右側に記載された識別情報が割り当てられたセンサ14を意味する。このステップS189では、コンピュータ12は、センサ位置リストにセンサiの推定位置が登録されているかどうかを判断しているのである。このことは、後述するステップS191についても同様である。
ステップS189で“NO”であれば、つまりセンサiの推定位置が無ければ、センサjの位置を推定するために使用するセンサiが配置されていないため、そのままステップS201に進む。一方、ステップS189で“YES”であれば、つまりセンサiの推定位置が有れば、ステップS191で、センサjの推定位置が有るかどうかを判断する。ステップS191で“YES”であれば、つまりセンサjの推定位置が有れば、当該センサjの位置を推定する必要が無いため、そのままステップS201に進む。
一方、ステップS191で“NO”であれば、つまりセンサjの推定位置が無ければ、ステップS193で、センサiとセンサjとの間の制約が制約リストにあるかどうかを判断する。ステップS193で“NO”であれば、つまりセンサiとセンサjとの間の制約が制約リストに無ければ、センサjを配置できないと判断して、そのままステップS201に進む。一方、ステップS193で“YES”であれば、つまりセンサiとセンサjとの間の制約が制約リストに有れば、ステップS195で、センサiとの制約に従って、センサjの位置を推定し、センサjの推定位置をセンサ位置リストに追加する。図示は省略するが、このとき、センサjの角度も算出され、センサ位置リストに登録される。
続くステップS197では、センサiの位置誤差に、センサ間の誤差を加えて、センサjの位置誤差として設定する。ただし、センサ間の誤差は、上述したように、センサiとセンサjとの間の推定値の偏差σijである。なお、ステップS185およびS197で算出された位置誤差は、後述のセンサ位置の調整処理(図28参照)等で用いられる。
続いて、ステップS199では、すべてのセンサ14についての位置を推定したかどうかを判断する。つまり、コンピュータ12(CPU)は、センサ位置リストの配置センサIDの欄にすべてのセンサ14の識別情報(この実施例では、A−F)が記述されたかどうかを判断する。または、コンピュータ12は、センサ位置リストに記載された識別情報がセンサ14の総数(この実施例では、6)になったかどうかを判断する。
ステップS199で“YES”であれば、つまりすべてのセンサ14の位置を推定した場合には、図17に示したキャリブレーション処理にリターンする。一方、ステップS199で“NO”であれば、つまり位置を推定していないセンサ14が有る場合には、ステップS201で、変数kを1加算する(k=k+1)。そして、ステップS203で、変数kが最大数(この実施例では、15)を超えたかどうかを判断する。つまり、センサ14のすべての組について、ステップS189以降の処理を実行したかどうかを判断するのである。
ステップS203で“YES”であれば、つまり変数kが最大数を超えた場合には、キャリブレーション処理にリターンする。一方、ステップS203で“NO”であれば、つまり変数kが最大数以下である場合には、ステップS189に戻って、センサ14の次の組について、ステップS189以降の処理を実行する。
図28は図17に示したステップS17のセンサ位置の調整処理のフロー図である。図28に示すように、コンピュータ12は、センサ位置の調整処理を開始すると、ステップS211で、後述する全体誤差の算出処理(図29)を実行する。次のステップS213では、変数iを初期化する(i=1)。この変数iは、センサ14を個別に識別するための変数である。
次に、ステップS215では、他のすべてのセンサj(j≠i)の推定位置とセンサ間の制約とを用いて、センサiの新しい位置および位置誤差を算出する。つまり、コンピュータ12は、上述した数16−数19に従って、新しいセンサiの位置(xi,yi)および位置誤差νiを算出するのである。次のステップS217では、他のすべてのセンサjの推定位置に対する現実角度と、制約によって推測される角度との最小誤差をセンサiの角度に設定する。つまり、コンピュータ12は、上述した数20に従って、センサiの角度θiを算出するのである。
続いて、ステップS219では、変数iを1加算する(i=i+1)。そして、ステップS221で、変数iが最大数(この実施例では、6)を超えたかどうかを判断する。ステップS221で“NO”であれば、つまり変数iが最大数以下であれば、ステップS215に戻って、次のセンサiについてステップS215およびS217の処理を実行する。一方、ステップS221で“YES”であれば、つまり変数iが最大数を超えていれば、ステップS223で、全体誤差の算出処理を実行し、ステップS225で、今回算出された全体誤差が前回算出された全体誤差(初回では、ステップS211で算出された全体誤差)よりも小さいかどうかを判断する。
ステップS225で“YES”であれば、つまり今回算出された全体誤差が前回算出された全体誤差よりも小さい場合には、ステップS213に戻る。つまり、コンピュータ12は、さらにセンサ位置の調整を行うのである。一方、ステップS225で“NO”であれば、つまり今回算出された全体誤差が前回算出された全体誤差以上であれば、ステップS227で、前回算出(推定)したセンサ位置を採用して、図17に示したキャリブレーション処理にリターンする。
図29および図30は、図28に示したステップS211、S223の全体誤差の算出処理を示すフロー図である。図29に示すように、コンピュータ12(CPU)は、全体誤差の算出処理を開始すると、ステップS241で、全体誤差値を0(初期値)に設定する。続くステップS243では、変数rを初期化する(r=1)。次のステップS245では、変数sを初期化する(s=1)。ただし、変数rおよび変数sは、各センサ14を個別に識別するための変数である。
次のステップS247では、変数rと変数sとが一致するかどうかを判断する。ステップS247で“YES”であれば、つまり変数rと変数sとが一致する場合には、そのまま図30に示すステップS257に進む。一方、ステップS247で“NO”であれば、つまり変数rと変数sと一致しない場合には、ステップS249で、センサrとセンサsとの間のセンサ制約の平均が制約リストに有るかどうかを判断する。
ステップS249で“NO”であれば、つまりセンサrとセンサsとの間のセンサ制約の平均が制約リストに無ければ、後述する誤差(dest−dcstr)を算出することができないと判断して、そのままステップS257に進む。一方、ステップS249で“YES”であれば、つまりセンサrとセンサsとの間のセンサ制約の平均が制約リストに有れば、ステップS251で、変数destにセンサrの推定位置とセンサsの推定位置との距離を設定する。続くステップS253では、変数dcstrをセンサrとセンサsとのセンサ制約の平均によって特定された距離で定義する。そして、ステップS255で、全体誤差に誤差(dest−dcstr)を加算して、ステップS257に進む。
図30に示すように、ステップS257では、変数sを1加算する(s=s+1)。そして、ステップS259で、変数sが最大数(この実施例では、6)を超えたかどうかを判断する。ステップS259で“NO”であれば、ステップS247に戻る。つまり、センサrと次のセンサsとについての誤差(dest−dcstr)を算出し、全体誤差を更新する。
一方、ステップS259で“YES”であれば、ステップS261で、変数rを1加算する(r=r+1)。そして、S263で、変数rが最大数(この実施例では6)を超えたかどうかを判断する。ステップS263で“NO”であれば、図29に示したステップS245に戻る。つまり、次のセンサrと各センサsとの誤差(dest−dcstr)を算出し、全体誤差を更新する。一方、ステップS263で“YES”であれば、つまり変数rが最大数を超えると、全体誤差の算出処理を終了したと判断して、図28に示したセンサ位置の調整処理にリターンする。
この実施例によれば、或る環境に配置した複数の距離センサの出力に基づいて、各距離センサの位置および角度を推定するので、初期値を与えなくても、距離センサの位置および向きをキャリブレーションすることができる。したがって、計測する環境が変化したり、距離センサの配置位置を変えたりしても、ユーザの手を煩わすことが無い。
なお、この実施例では、センサ間の制約の平均および分散(誤差)をカルマンフィルタを用いて算出するようにしたが、これに限定される必要はない。他の例として、算術平均(Arithmetic mean)やメジアンフィルタを用いるようにしてもよい。算術平均を用いる場合には、標準分散を算出することにより、分散(誤差)を得ることができる。また、メジアンフィルタを用いる場合には、中央絶対偏差(median absolute deviation)を算出することにより、近似値として分散(誤差)を得ることができる。たとえば、カルマンフィルタ、算術平均またはメジアンフィルタのいずれを用いるかは、環境(人の数の大小、人の歩く速度など)に応じて選択するようにしてもよい。
また、この実施例では、距離センサとして、レーザーレンジファインダ(レーザー距離計)を用いた場合についてのみ説明したが、これに限定される必要はない。角度毎の距離が検出可能であれば、超音波、赤外線、マイクロ波、音波(指向性有り)を用いた距離センサを適用することも可能である。
さらに、この実施例では、2次元方向(XY平面)におけるセンサの位置および角度についてのみキャリブレーションするようにしてある。これは、上下方向(Z方向)については、たとえば加速度センサやジャイロセンサをセンサに設けることにより、他のセンサとは無関係に調整することができるためである。
さらにまた、この実施例では、移動軌跡の特徴として、速度変化を用いることにより、その差に基づいて、異なるセンサで検出された移動軌跡が同一であるかどうかを判定するようにしたが、これに限定される必要はない。
たとえば、速度に代えて、加速度(フレーム毎の加速度)を用いて、その差に基づいて、異なる2つのセンサで検出された移動軌跡が同一であるかどうかを判定してもよい。ただし、加速度は、移動軌跡の速度を微分することにより得ることができる。また、移動軌跡が同一であるかどうかの判定方法は、上述の実施例と同様である。
また、移動軌跡の曲率に基づいて、異なる2つのセンサで検出された移動軌跡が同一であるかどうかを判定してもよい。かかる場合には、移動軌跡を構成する複数の点を、ICP(Iterative Closest Point)のようなアルゴリズムを用いて抽出し、抽出した複数の点から、移動軌跡の進行方向に向かう順番で曲率を算出する。すると、進行方向を基準とした場合に、移動軌跡の曲がっている方向(右または左)を時系列に従って抽出(ラべリング)することができる。たとえば、図31(A)に示すように、或るセンサで検出した或る移動軌跡から、複数の点Z1、Z2、…、Z15が抽出される。ただし、点Z1が時間的に最も古く、点Z15が時間的に最も新しい。抽出された点Z1−Z15を用いて、時系列に従って、局部の曲率が算出され、進行方向に対する方向が決定される。したがって、移動軌跡に対して、「右、右、右、右、左、左、右、左、左、右、左」のように、ラベリングすることができる。ただし、曲率は、抽出された複数の点のうち、連続する3点が時系列に従う順序(Z1−Z3、Z2−Z4、Z3−Z5、…、Z13−Z15)で着目され、その着目される3点で形成される三角形の外接円に基づいて算出される。また、たとえば、図31(A)に示すうように、進行方向は、抽出された複数の点のうち、時間的に最も古い(最初の)点(ここでは、点Z1)から、時間的に最も新しい(最後の)点(ここでは、点Z15)に向かう方向に決定される。他のセンサについても、同様に、移動軌跡に対してラベリングされる。そして、異なる2つのセンサにおいて、同じラベリングの移動軌跡が唯一存在する場合に、それらを同一の移動軌跡であると判定することができる。
なお、上述の実施例と同様に、異なる2つのセンサにおいて、3つ以上同じラベリングの移動軌跡が存在する場合には、同一の移動軌跡とは判定しない。共通の移動軌跡とは言えないからである。
さらに、移動軌跡の特徴として、人間の行動を抽出(ラベリング)することもできる。この場合には、移動軌跡に含まれる人観測点の時間変化に基づいて、人間の局所行動を判定することができる。局所行動を判定する方法としては、本件出願人が先に出願し、既に公開された特開2010−231359号に開示された方法を採用することができる。この先行技術文献に従えば、「歩き方」、「歩く速さ」、「短時間の歩き方」および「短時間の歩く速さ」の4つのクラスが定義され、各クラスにおいて、複数のカテゴリ(局所行動)に分類される。「歩き方」のクラス(「短時間の歩き方」のクラスも同様)では、「まっすぐ」、「右に曲がる」、「左に曲がる」、「うろうろする」、「Uターン」および「不明」の6つのカテゴリに分類される。また、「歩く速さ」のクラス(「短時間の歩く速さ」のクラスも同様)では、「走っている」、「忙しく歩く」、「ゆっくり歩く」、「止まっている」および「待っている」の5つのカテゴリに分類される。移動軌跡から特徴量(特徴量データ)が抽出され、抽出された特徴量データに対してカテゴリがラベル付けされ、ラベル付けされた特徴量データをSVM(Support Vector Machine)に学習させることにより、移動軌跡から人間の歩き方が判別される。そして、異なる2つのセンサにおいて、同じ歩き方と判定される移動軌跡が唯一存在する場合に、それらを同一の移動軌跡であると判定することができる。
なお、かかる場合にも、上述の実施例と同様に、異なる2つのセンサにおいて、3つ以上同じ歩き方と判定される移動軌跡が存在する場合には、同一の移動軌跡とは判定しない。
さらに、移動軌跡の特徴として、その大きさに基づいて、異なる2つのセンサで検出された移動軌跡が同一であるかどうかを判定してもよい。たとえば、図31(B)に示すように、移動軌跡を囲む円が描画され、異なるセンサにおいて、円の大きさが同じまたは略同じと判定される移動軌跡が唯一存在する場合に、それらを同一の移動軌跡であると判定することができる。詳細な説明は省略するが、移動軌跡を囲む円は、移動軌跡を構成する複数の点の中央値を算出し、移動軌跡のうち、中央値と、この中央値から最も遠い点(基本的には、移動軌跡の端点のいずれか一方が選択される)との距離を半径とする円である。ただし、中央値は、複数の点についてのローカル座標系におけるXY座標の平均値である。また、実際に円を描画する必要は無く、半径の長さが同じまたは略同じであるか否かを判定すればよい。
なお、かかる場合にも、上述の実施例と同様に、異なる2つのセンサにおいて、円の大きさが同じまたは略同じであると判定される移動軌跡が3つ以上存在する場合には、同一の移動軌跡とは判定しない。
ただし、図31(C)に示すように、円の大きさだけでは、異なる移動軌跡であっても、同じ移動軌跡であると判定されてしまうことがある。このため、移動軌跡の大きさのみならず、移動軌跡を構成する複数の点の分散も考慮するために、図32(A)に示すように、移動軌跡の大きさを近似する楕円を描画するようにしてもよい。たとえば、中央値が算出され、この中央値から最も遠い点(第1点)が検出される。ただし、中央値は、上述した方法により、求められる。さらに、中央値を中心として第1点と点対称となる点(第2点)が検出され、第1点と第2点とを結ぶ線分が楕円の長軸に決定される。また、長軸と直交する方向で、長軸から最も遠い点までの距離が検出され、中央値を通り、長軸と直交する方向に当該距離だけ離れた点(第3点)が算出される。さらに、中央値を中心として第3点と点対象となる点(第4点)が検出され、第3点と第4点とを結ぶ線分が短軸に決定される。異なる2つのセンサにおいて、楕円の大きさ、すなわち長軸および短軸の長さが同じまたはほぼ同じと判定される移動軌跡が唯一存在する場合には、それらの移動軌跡は同一であると判定される。
なお、かかる場合にも、上述の実施例と同様に、異なる2つのセンサにおいて、楕円の大きさが同じまたは略同じであると判定される移動軌跡が3つ以上存在する場合には、同一の移動軌跡とは判定しない。
また、図32(A)からも分かるように、移動軌跡の大きさを楕円で近似する場合には、円で囲む場合とは異なり、楕円内に移動軌跡が収まらない場合がある。
さらに、移動軌跡の形状に基づいて、異なる2つのセンサで検出された移動軌跡が同一であるかどうかを判定してもよい。たとえば、図32(B)の上側に示すように、図31(A)に示した場合と同様に、ICPのアルゴリズムを用いて移動軌跡から複数の点Z1−Z15を抽出する。次に、図32(B)の下側に示すように、抽出した複数の点を用いて、時系列に従って、隣接する2点の間の距離(ここでは、dZ1、dZ2、…、dZ14)を算出する。距離は、上述の実施例で示した数1を用いて算出することができる。ただし、隣接する2点の座標を(x1,y1)および(x2,y2)とする。異なるなる2つのセンサにおいて、時系列に従って算出される距離の差を求め、その差の累積値が最も近似する移動軌跡が唯一存在する場合に、それらの移動軌跡が同一であると判定する。ただし、ICPのアルゴリズムを用いずに、フレーム間の距離を算出する場合には、移動軌跡の速度を積分することにより得ることもできる。かかる場合には、フレーム間の距離を算出するため、差を求めるための演算量が膨大であるが、移動軌跡の形状を正しく比較することができると考えられる。