説明

移動体

【課題】 検出した表面形状に対応する表面形状データをより正確に特定し、自己の位置情報をより正確に修正することができる移動体を提供する。
【解決手段】障害物の床面と平行な方向における表面形状をグローバル座標系により表す表面形状データを複数個記憶する記憶部と、移動体の位置及び角度をグローバル座標系により算出する自己位置・角度算出部と、光線を走査して、その走査面上に存在する障害物の床面と平行な方向における表面形状を相対座標系により検出する障害物検出部と、移動体の位置及び角度並びにこれらの誤差と、検出された表面形状及びその誤差に基づいて、検出された表面形状に対応する表面形状データを特定するマッチング部と、検出された表面形状とマッチング部で特定された表面形状データとのずれから、移動体の位置及び角度を修正する自己位置・角度修正部を有する移動体。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、床面上を移動する移動体の位置を測定する技術に関する。
【背景技術】
【0002】
特許文献1には、自己の位置と角度(向き)(以下では、位置と角度をまとめて位置情報という)を検出しながら床面上を移動する移動体が開示されている。この移動体は、床面と平行な方向に直線状に伸びる障害物(例えば、壁等)の表面形状を示すデータを複数個記憶している。表面形状データは、床面を基準とするグローバル座標系により表されている。この移動体は、床面上を移動しながら、自己の位置情報を算出するとともに、拡張カルマンフィルタ(以下、EKFという)によって自己の位置情報を修正する。具体的には、移動体は、移動しながら以下の処理を繰り返す。まず、オドメトリにより床面上における自己の位置情報(グローバル座標系における位置情報)を算出する。次に、レーザレンジファインダにより光線を走査して、走査面上に存在する障害物の床面と平行な方向における表面形状を検出する。レーザレンジファインダによれば、障害物の表面形状が移動体に対する相対座標系上の座標点群として検出される。次に、移動体は、座標点群を直線近似した障害物の表面形状を算出する。次に、記憶している表面形状データの中から、検出した表面形状(直線近似した表面形状)に対応する表面形状データを特定する。この特定は、表面形状の検出誤差(すなわち、レーザレンジファインダによる検出誤差)を考慮して行われる。次に、特定した表面形状データと検出した表面形状とのずれを算出し、そのずれから自己の位置情報を修正する。このように、障害物の表面形状データを移動体に予め記憶させておくとともに、移動しながらレーザレンジファインダ等により障害物の表面形状を検出し、検出した表面形状とそれに対応する表面形状データのずれに基づいて自己の位置情報を修正することで、より正確に自己の位置情報を特定することができる。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】A. Garulli, A. Giannitrapani, A. Rossi, A. Vicino, "Mobile robot SLAM for line-based environment representation," Tech. Rep. 2005-3, Dipartimento di Ingegneria dell'Informazone, Universita di Siena, 2005
【発明の概要】
【発明が解決しようとする課題】
【0004】
障害物の表面形状を検出する際には、誤差が生じる。このため、検出した表面形状に対応する表面形状データを複数の表面形状データの中から正確に特定するためには、誤差を考慮する必要がある。上述した非特許文献1の技術では、検出された表面形状の誤差(すなわち、レーザレンジファインダによる検出誤差)を考慮して対応する表面形状データの特定を行っているが、この技術によっても対応する表面形状データを正確に特定できない場合がある。このため、自己の位置情報を正確に修正できない場合があった。
【0005】
本明細書では、上述した実情を鑑み、検出した表面形状に対応する表面形状データをより正確に特定し、自己の位置情報をより正確に修正することができる移動体を提供する。
【課題を解決するための手段】
【0006】
移動体により検出される障害物の表面形状は、移動体に対する相対座標系により表される。一方、移動体に記憶されている表面形状データは、グローバル座標系により表される。したがって、検出された表面形状に対応する表面形状データは、検出された表面形状と、記憶されている表面形状データと、移動体の位置情報に基づいて特定される。このため、この特定には、検出された表面形状の誤差だけでなく、移動体の位置情報の誤差も影響する。本発明者らは、この点に着目し、移動体の位置情報の誤差も考慮して、検出された表面形状に対応する表面形状データを特定することを提案する。
【0007】
本願明細書が開示する移動体は、障害物が存在する床面上を移動する。この移動体は、記憶部と、自己位置・角度算出部と、障害物検出部と、マッチング部と、自己位置・角度修正部を有している。記憶部は、床面と平行な方向に直線状に伸びる障害物の床面と平行な方向における表面形状をグローバル座標系により表す表面形状データを複数個記憶する。自己位置・角度算出部は、移動体の位置及び角度をグローバル座標系により算出する。障害物検出部は、光線を走査して、その走査面上に存在する障害物の床面と平行な方向における表面形状を移動体に対する相対座標系により検出する。マッチング部は、自己位置・角度算出部で算出された移動体の位置及び角度並びにこれらの誤差と、障害物検出部で検出された表面形状及びその誤差に基づいて、記憶部に記憶されている複数の表面形状データの中から障害物検出部で検出された表面形状に対応する表面形状データを特定する。自己位置・角度修正部は、障害物検出部で検出された表面形状とマッチング部で特定された表面形状データとのずれから、自己位置・角度算出部によって算出された位置及び角度を修正する。
【0008】
なお、上記の「グローバル座標系」及び「相対座標系」は、3次元座標系としてもよいし、2次元座標系としてもよい。「グローバル座標系」及び「相対座標系」を2次元座標系とすると、移動体で行う計算量を少なくすることができる。2次元座標系を採用する場合、床面と平行な2つの座標軸により規定される座標系(例えば、直交座標系)であってもよいし、床面と平行な平面内における距離と角度により規定される極座標系であってもよい。また、表面形状データの座標系と移動体の位置及び角度の座標系が異なっていてもよい。例えば、表面形状データが極座標系により表され、移動体の位置が直交座標系により表されてもよい。また、表面形状データ、移動体の位置及び角度、並びに、障害物検出部が検出する障害物の表面形状は、少なくとも床面と平行な方向における形状(座標成分)により規定されていればよく、床面と垂直な方向の座標成分を含んでいてもよい。例えば、表面形状データは、床面と垂直な方向の座標成分を含めた障害物の表面の3次元形状を示すデータであってもよい。
また、「障害物検出部で検出された表面形状とマッチング部で特定された表面形状データのずれ」は、相対座標系で示される「障害物検出部で検出された表面形状」とグローバル座標系で示される「マッチング部で特定された表面形状データ」とを同一座標系で比較したときのずれを意味する。したがって、「障害物検出部で検出された表面形状」をグローバル座標系に座標変換し、グローバル座標系でこれらのずれを算出してもよい。また、「マッチング部で特定された表面形状データ」を相対座標系に座標変換し、相対座標系でこれらのずれを算出してもよい。
また、上記の「誤差」とは、ある特性値を検出(または算出等)するときに、現実の特性値と検出値との間に生じ得るずれの大きさを示す値を意味する。
また、障害物検出部が検出する障害物の表面形状は、光線の走査面上に存在する障害物の表面形状を複数の座標点により表すものであってもよいし、2つの座標点により規定される直線(または線分)により表面形状を表すものであってもよい。直線(または線分)により障害物の表面形状を表す場合には、例えば、光線の走査面上に存在する障害物の表面形状を複数の座標点により検出するレーザレンジファインダと、レーザレンジファインダが検出した複数の座標点を直線近似した直線(または線分)を算出する演算部により障害物検出部を構成することができる。
また、自己位置・角度算出部は、オドメトリによって移動体の位置と角度を算出してもよいし、GPSによって移動体の位置と角度を算出してもよいし、その他の技術によって算出してもよい。
【0009】
この移動体では、移動中に、自己位置・角度算出部が移動体の位置と角度を算出する。また、移動中に、障害物検出部が、障害物の表面形状を検出する。そして、マッチング部が、記憶部に記憶されている複数の表面形状データの中から障害物検出部で検出された表面形状に対応する表面形状データを特定する。このとき、マッチング部は、障害物検出部で検出された表面形状の誤差のみならず、移動体の位置及び角度の誤差も考慮して、検出された表面形状に対応する表面形状データを特定する。したがって、検出された表面形状に対応する表面形状データを正確に特定することができる。自己位置・角度修正部は、特定された表面形状データと検出された表面形状とのずれに基づいて、移動体の位置と角度を修正する。対応する表面形状データが正確に特定されているので、自己位置・角度修正部は正確に移動体の位置と角度を修正することができる。
【0010】
上述した移動体は、障害物検出部が、障害物の床面と平行な方向における表面形状を相対座標系における線分として検出することが好ましい。また、移動体は、検出された線分の両端のみの位置の誤差に基づいて、障害物検出部で検出された表面形状とマッチング部で特定された表面形状データとのずれの誤差を算出するずれ誤差算出部をさらに有していることが好ましい。そして、自己位置・角度修正部は、ずれ誤差算出部によって算出された誤差に基づいて、移動体の位置及び角度を修正することが好ましい。
【0011】
このような構成によれば、検出された線分の両端の位置の誤差のみからずれの誤差が算出されるので、表面形状全体の座標点の誤差からずれの誤差を算出する場合に比べて、移動体で行う計算量を低減することができる。これにより、より高速に移動体の位置と角度を特定することが可能となる。
【0012】
上述した移動体では、障害物検出部が、障害物の床面と平行な方向における表面形状を相対座標系における線分として検出することが好ましい。また、マッチング部は、検出された線分の両端の位置の誤差に基づいて、その両端の両方が同一の表面形状データ上に存在する確率を複数の表面形状データについて算出し、算出された確率が最も高い表面形状データを特定することが好ましい。
【0013】
このような構成によれば、検出された線分の両端の表面形状データ上への存在確率に基づいて対応する表面形状データが特定されるので、表面形状全体の座標点の存在確率を算出する場合に比べて、移動体で行う計算量を低減することができる。これにより、より高速に移動体の位置と角度を特定することが可能となる。
【0014】
また、本明細書は、以下の移動体も提供する。この移動体は、障害物が存在する床面上を移動する。この移動体は、記憶部と、自己位置・角度算出部と、障害物検出部と、マッチング部と、自己位置・角度修正部を有する。記憶部は、床面と平行な方向に直線状に伸びる障害物の床面と平行な方向における表面形状をグローバル座標系により表す表面形状データを記憶する。自己位置・角度算出部は、移動体の位置及び角度をグローバル座標系により算出する。障害物検出部は、光線を走査して、その走査面上に存在する障害物の床面と平行な方向における表面形状を移動体に対する相対座標系により検出する。マッチング部は、障害物検出部で複数の表面形状が検出されたときに、自己位置・角度算出部で算出された移動体の位置及び角度並びにこれらの誤差と、障害物検出部で検出された複数の表面形状及びそれらの誤差に基づいて、障害物検出部で検出された複数の表面形状の中から記憶部に記憶されている表面形状データに対応する表面形状を特定する。自己位置・角度修正部は、マッチング部で特定された表面形状と記憶部に記憶されている表面形状データとのずれから、自己位置・角度算出部によって算出された位置及び角度を修正する自己位置・角度修正部を有する。
【0015】
この移動体によれば、障害物検出部で複数の表面形状が検出されたときに、これらの表面形状の中から記憶部に記憶されている表面形状データに対応する表面形状を正確に特定することができる。したがって、正確に移動体の位置及び角度を修正することができる。
【図面の簡単な説明】
【0016】
【図1】自律移動体10の概略斜視図。
【図2】自律移動体10のブロック図。
【図3】環境マップの説明図。
【図4】レーザレンジファインダ30の測定方法の説明図。
【図5】自律移動体10の角度の説明図。
【図6】制御装置50が実行する処理を示すフローチャート。
【図7】対象線分120の算出方法を示す説明図。
【図8】ステップS10の詳細な処理を示すフローチャート。
【図9】線分上の点P及び領域Qについての説明図。
【図10】対象線分120に対応する線分に関する説明図。
【図11】対象線分120と対応する線分100fの位置情報の説明図。
【図12】2つの線分が検出された場合を示す説明図。
【発明を実施するための形態】
【0017】
以下に説明する実施例の好ましい特徴を整理する。
(特徴1)記憶部は、障害物の表面形状を表す複数の線分を示すデータを記憶している。
(特徴2)移動体は、障害物検出部で検出された表面形状を直線近似した線分を算出する線分算出部を有している。
(特徴3)マッチング部は、記憶部が記憶している複数の線分の中から、線分算出部で算出した線分(対象線分)に対応する線分を特定する。
(特徴4)自己位置・角度修正部は、対象線分とこれに対応する線分とのずれ、及び、当該ずれの誤差を算出し、当該ずれ及び当該ずれの誤差に基づいて、移動体の位置及び角度を修正する。
【実施例】
【0018】
図1は、実施例に係る自律移動体10の概略斜視図を示している。自律移動体10は、2つの駆動輪12a、12bと従動輪12cを有しており、駆動輪12a、12bを駆動することで水平な床面上を移動する。従動輪12cは、自律移動体10の移動に伴って回転する。駆動輪12aと駆動輪12bを同じ回転数で駆動すると、自律移動体10は図1の矢印F1の向きに並進する。また、駆動輪12aと駆動輪12bを異なる回転数で駆動すると、自律移動体10は床面上をカーブしながら移動する。自律移動体10は、床面上における自己の位置を算出しながら、目的地まで自律的に移動する。
【0019】
図2は、自律移動体10の各部の機能ブロック図を示している。自律移動体10は、記憶装置20と、レーザレンジファインダ30と、サーボモータ40a、40bと、制御装置50を備えている。図1に示すように、レーザレンジファインダ30は、自律移動体10の上部に設置されている。記憶装置20、サーボモータ40a、40b、及び、制御装置50は、自律移動体10内に組み込まれている。
【0020】
記憶装置20は、自律移動体10が移動する床面上に存在する障害物(壁等)の表面形状を示す環境マップを記憶している。環境マップは、水平面内における障害物の表面形状を線分により表したデータである。図3は、環境マップが表す線分群の一例を示している。図3では、線分100a〜100jが示されている。環境マップは、始点と終点の座標により各線分100a〜100hを規定している。始点と終点の座標は、床面を基準して水平方向に設定されたx軸とy軸による直交座標系(以下、グローバル座標系という)により定められている。例えば、図3の線分100aは、始点座標(xa1,ya1)と終点座標(xa2,ya2)により表される。線分100bは、始点座標(xb1,yb1)と終点座標(xb2,yb2)により表される。図3の例では、線分100aの終点座標(xa2,ya2)と線分100bの始点座標(xb1,yb1)は等しい。各線分の始点及び終点は、始点から終点に向かうベクトルの右側が障害物側(自律移動体10が進入できない領域)であり、ベクトルの左側が自律移動体10が移動可能な領域であることを示している。図3においては、線分100a〜100jに囲まれた領域が自律移動体10が移動可能な領域であり、その外側の領域が障害物(自律移動体10が進入できない領域)である。
【0021】
レーザレンジファインダ30は、水平面内に光線を走査して、その走査面内に存在する障害物の表面形状を検出する。図4は、レーザレンジファインダ30を上側から示した平面図である。レーザレンジファインダ30は、最初に、自律移動体10の進行方向F1より角度w1(水平面内で見た時における角度)だけ右側にレーザ光を照射する。そして、照射したレーザ光の反射光を検出して角度w1の方向に存在する障害物までの距離r1(水平面内における距離)を検出する。すなわち、レーザ光が照射された箇所の自律移動体10に対する相対位置座標(r1,w1)を検出する。次に、開始角度w1よりも左側に微小角度ずれた角度w2の方向にレーザ光を照射し、レーザ光が照射された箇所までの距離r2を検出する。すなわち、レーザ光が照射された箇所の自律移動体10に対する相対位置座標(r2,w2)を検出する。レーザレンジファインダ30は、開始角度w1から終了角度wn(自律移動体10の進行方向F1より左側の角度)まで一定の角度間隔で同様の処理を繰り返し、レーザが照射された箇所の自律移動体10に対する相対位置座標(r1,w1),(r2,w2),(r3,w3)・・・(rn,wn)を検出する。レーザレンジファインダ30により検出される座標点群(r1,w1)〜(rn,wn)は、障害物の表面形状を表す。レーザレンジファインダ30が検出した障害物の表面形状は、制御装置50に入力される。
【0022】
サーボモータ40aは、サーボ制御回路42a、モータ44a、エンコーダ46aを有している。モータ44aは、駆動輪12aを回転させる。サーボ制御回路42aには、制御装置50から制御指令値が入力される。サーボ制御回路42aは、入力された制御指令値にしたがってモータ44aを駆動させる。したがって、駆動輪12aが、制御指令値に従って回転する。エンコーダ46aは、モータ44a(すなわち、駆動輪12a)の回転数を検出する。エンコーダ46aが検出する回転数は、制御装置50に入力される。
サーボモータ40bは、サーボ制御回路42b、モータ44b、エンコーダ46bを有している。モータ44bは、駆動輪12bを回転させる。サーボ制御回路42bには、制御装置50から制御指令値が入力される。サーボ制御回路42bは、入力された制御指令値にしたがってモータ44bを駆動させる。したがって、駆動輪12bが、制御指令値に従って回転する。エンコーダ46bは、モータ44b(すなわち、駆動輪12b)の回転数を検出する。エンコーダ46bが検出する回転数は、制御装置50に入力される。
【0023】
制御装置50は、記憶装置20、レーザレンジファインダ30、及び、サーボモータ40a、40bと電気的に接続されている。制御装置50は、記憶装置20からデータを読み出すことができ、また、記憶装置20にデータを記憶させることができる。制御装置50は、後述する位置と角度の算出処理によって、自律移動体10の位置(水平面内における自律移動体10の位置)と角度(水平面内における自律移動体10の進行方向F1の向き)を算出する。なお、自律移動体10の位置は、上述したグローバル座標系のxy座標によって表され、自律移動体10の角度は、図5に示すように、グローバル座標系のx軸に対する自律移動体10の進行方向F1の角度φにより表される。以下では、自律移動体10の位置と角度を合わせて、位置情報という場合がある。制御装置50は、算出した自律移動体10の位置情報に基づいて、サーボモータ40a、40bに制御指令値を入力する。制御装置50が、自律移動体10の位置情報を算出し、その位置情報に基づいてサーボモータ40a、40bに制御指令値を入力する処理を繰り返すことで、自律移動体10が目標地点に向かって自律的に移動する。
【0024】
次に、制御装置50が実行する処理について詳細に説明する。図6のフローチャートは、制御装置50が実行する処理を示している。図6の処理の開始時点において、制御装置50に、自律移動体10の初期位置情報(x,y,φ)(処理の開示時点における自律移動体10の位置と角度)と、目標地点の位置が入力される。制御装置50は、図6に示すステップS2〜S16を一定の周期で繰り返して、自律移動体10の位置情報を算出しながら移動する。
【0025】
ステップS2では、制御装置50は、現在の自律移動体10の位置情報と、目標地点の位置と、環境マップ(障害物の位置)に基づいて、自律移動体10の今後の経路を算出する。なお、最初のステップS2では、制御装置50は、開始時に入力された初期位置情報(x,y,φ)を現在の位置情報として経路を算出する。2回目以降のステップS2では、制御装置50は、直前の周期のステップS16で修正された自律移動体10の位置情報Xk−1|k−1(=xk−1|k−1,yk−1|k−1,φk−1|k−1)を現在の位置情報として経路を算出する。経路を算出したら、制御装置50は、算出した経路に沿って自律移動体10が移動するように、サーボモータ40a、40bに制御指令値を入力する。サーボモータ40a、40bは、次のステップS2が実行されるまで、直前のステップS2で入力された制御指令値にしたがって駆動輪12a、12bを駆動する。これによって、自律移動体10が移動する。また、駆動輪12a、12bが駆動すると、エンコーダ46a、46bによって駆動輪12a、12bの回転数が検出される。
【0026】
ステップS2を実行してから所定時間経過後に、ステップS4〜S16の処理が実行される。これによって、現在の自律移動体10の位置情報が算出される。ステップS4〜S16の処理は、拡張カルマンフィルタに基づいて行われる。
【0027】
ステップS4では、制御装置50は、オドメトリによって自律移動体10の現在の位置情報Xk|k−1(=(xk|k−1,yk|k−1,φk|k−1))を算出する。具体的には、制御装置50は、エンコーダ46a、46bが検出する駆動輪12a、12bの回転数と、直前の周期のステップS16で修正された自律移動体10の位置情報Xk−1|k−1(過去の位置情報)に基づいて、自律移動体10の現在の位置情報Xk|k−1を算出する。
また、ステップS4では、位置情報Xk|k−1の算出と同時に、位置情報Xk|k−1の誤差Σを算出する。なお、誤差Σは、位置(xk|k−1,yk|k−1)と角度φk|k−1に生じうる誤差を分散(vxk|k−1,vyk|k−1,vφk|k−1)により表したものである。誤差Σは、文献「S. Thrun, W.burgard, D. Fox, "Probabilistic robotics", The MIT Press, 2005」に記載の技術に従って算出することができる。すなわち、誤差Σは、過去に自律移動体10が移動した経路に基づいて算出される。x方向への移動距離(各周期におけるx方向の移動距離の絶対値を積算した値)が大きいほど誤差vxk|k−1が大きく算出され、y方向への移動距離が大きいほど誤差vyk|k−1が大きく算出され、角度φの変化量(各周期における角度φの変化量の絶対値を積算した値)が大きいほど誤差vφk|k−1が大きく算出される。なお、誤差Σは、上述した他の方法により算出してもよい。また、誤差Σが経時的に変化しない場合には、誤差Σが記憶装置20に記憶されていてもよい。
【0028】
ステップS6では、制御装置50は、レーザレンジファインダ30により空間内に光線を走査して、走査範囲内に存在する障害物の表面形状を検出する。上述したように、レーザレンジファインダ30は、障害物の表面形状を、自律移動体10に対する相対座標系による座標点群(r1,w1),(r2,w2),(r3,w3)・・・(rn,wn)として検出する。
【0029】
ステップS8では、制御装置50は、ステップS6でレーザレンジファインダ30により検出された座標点群を直線近似することによって線分を算出する。ステップS8の線分の算出処理は、例えば、文献「J. Xavier, "Rast Line, Arc/Circle and Leg Detection from Laser Scan Data in Player Driver", ICRA, 2005」に従って実行することができる。具体的には、座標点群(r1,w1)〜(rn,wn)を直線近似することで、図7に示すように、線分120を算出する。この線分は、自律移動体10を基準として水平方向に設定されたs軸とt軸による直交座標系(以下では、ローカル座標系という)により始点の座標(ss,ts)と終点の座標(se,te)を規定することにより表される。なお、始点(ss,ts)は、レーザレンジファインダ30が光線の走査を開始する側(座標点(r1,w1)側)の線分の端部を示しており、終点(se,te)はその反対側(座標点(rn,wn)側)の線分の端部を示している。次に、制御装置50は、相対座標系で表されている線分の始点の座標(ss,ts)と終点の座標(se,te)の座標を、グローバル座標系上の座標(xs,ys),(xe,ye)に座標変換する。この座標変換は、ステップS4で算出された自律移動体10の位置情報Xk|k−1に基づいて行われる。以下では、ステップS8で算出した線分を対象線分という。
【0030】
ステップS10では、制御装置50は、記憶装置20が記憶する環境マップにより規定されている線分の中から、対象線分に対応する線分を特定する。対象線分に対応する線分の特定処理は、図8に示すフローチャートに従って実行される。
【0031】
ステップS40では、制御装置50は、対象線分の始点の位置の誤差Σと終点の位置の誤差Σを算出する。誤差Σは、対象線分の始点の位置(xs,ys)に生じうる誤差を分散(vxs,vys)で表したものであり、誤差Σは、対象線分の終点の位置(xe,ye)に生じうる誤差を分散(vxe,vye)で表したものである。上述したように、対象線分は、レーザレンジファインダ30により検出される座標点群と、自律移動体10の位置情報Xk|k−1に基づいて算出される。このため、レーザレンジファインダ30の測定誤差と、自律移動体10の位置情報Xk|k−1の誤差Σとの影響によって、対象線分の始点と終点の位置に誤差が生じる。このため、制御装置50は、レーザレンジファインダ30の測定誤差と、位置情報Xk|k−1の誤差Σに基づいて、対象線分の始点の誤差Σと終点の誤差Σを算出する。具体的には、制御装置50は、以下の数式によって、これらの誤差を算出する。
Σ=J×Σ×J+Σ
Σ=J×Σ×J+Σ
ここで、Σは、レーザレンジファインダ30の測定誤差に基づいて生じる始点及び終点の位置の誤差を、x座標及びy座標の分散で表したものである。本実施例では、誤差Σは固定値とみなせるため、誤差Σが予め記憶装置20に記憶されている。Jは、自律移動体10の位置情報(x,y,φ)に関する線分の始点のヤコビ行列であり、Jはヤコビ行列Jの転置行列である。Jは、自律移動体10の位置情報(x,y,φ)に関する線分の終点のヤコビ行列であり、Jはヤコビ行列Jの転置行列である。ヤコビ行列J,Jは以下の数1により表される。
【数1】

【0032】
ステップS42では、始点の位置(xs,ys)とその誤差Σに基づいて、始点の位置に関する確率密度関数を算出する。また、終点の位置(xe,ye)とその誤差Σに基づいて、終点の位置に関する確率密度関数を算出する。始点の位置の確率密度関数は、始点が存在している確率をx座標とy座標の関数として表したものである。xy座標の範囲で確率密度関数を積分することで、その座標範囲内に始点が存在する確率を算出することができる。終点の確率密度関数も、始点の確率密度関数と同様に、終点が存在している確率をx座標とy座標の関数として表したものである。
【0033】
ステップS44〜S50では、ステップS42で算出した確率密度関数に基づいて、環境マップ中の複数の線分の中から、対象線分に対応する線分を特定する。
【0034】
ステップS44では、制御装置50は、対象線分の向き(始点から終点に向かう向き)と同じ向きを有する線分を環境マップから抽出する。向きが等しいか否かは、対象線分を示すベクトル(始点から終点に向かうベクトル)と環境マップ中の各線分を示すベクトル(始点から終点に向かうベクトル)との内積がゼロより大きいか否かにより判定することで行う。すなわち、対象線分のベクトルに対する角度が90度未満のベクトルを有する線分が、同じ向きを有する線分として特定される。上述したように、環境マップ中の線分の向きに対して右側の領域は障害物を示している。また、対象線分の向きはレーザレンジファインダ30によるスキャン方向を示している。したがって、対象線分の向きとこれに対応する環境マップ中の線分の向きが逆となることは、レーザレンジファインダ30が障害物の内部に存在することとなり、ありえない。したがって、ステップS44で対象線分と向きが等しい線分を抽出し、ステップS46の処理を抽出した線分に対してのみ行う。このように、向きが同じとなる線分のみを抽出してステップS46を実行することで、制御装置50の負荷が軽減される。
【0035】
ステップS46では、制御装置50は、ステップS44で抽出した線分のそれぞれに対して、その線分上に対象線分の始点と終点の両方が存在する確率を算出する。具体的には、抽出された線分の夫々に対して、以下の処理が実行される。
最初に、抽出された線分上の点を一定間隔で抽出する。なお、抽出された線分の始点と終点については、隣の点との間隔にかかわらず抽出する。次に、図9に示すように、抽出した各点(図9では点Pとして示されている)を中心としてその周囲に対角線の長さが前記間隔と等しい正方形の領域Qを設定する。次に、抽出した各点Pの座標をステップS42で算出した始点についての確率密度関数に代入することで、点P毎に始点が点P上に存在する確立を算出する。次に、点P上に始点が存在する確率に、点Pに対応する正方形の領域Qの面積を乗算して、領域Q毎に領域Q内に始点が存在する確率を算出する。次に、線分に対して設定された全ての領域Qについての始点の存在確率の総和を算出する。算出された総和は、その線分上に始点が存在する確率として近似することができる。
次に、抽出した各点Pの座標をステップS42で算出した終点についての確率密度関数に代入することで、抽出した点P毎に終点が点P上に存在する確立を算出する。次に、点P上に終点が存在する確率に、点Pに対応する正方形の領域Qの面積を乗算して、領域Q内に終点が存在する確率を算出する。次に、線分に対して設定された全ての領域Qについての終点の存在確率の総和を算出する。算出された総和は、その線分上に終点が存在する確率として近似することができる。
最後に、始点の存在確率と終点の存在確率とを乗算する。これによって、その線分上(より具体的には、その線分から所定の範囲内)に対象線分の始点と終端の両方が存在する確率が算出される。
【0036】
ステップS48では、制御装置50は、ステップS46で算出した確率の中で最大値を特定する。そして、特定した最大値が、閾値を超えているか否かを判定する。特定した最大値が閾値を超えていない場合には、制御装置50はNULLデータを報告し、図8の処理を中止する。NULLデータを報告した場合には、図6のステップS12、14は実行されず、次のステップS2は、修正されていない位置情報Xk|k−1(ステップS4で算出された位置情報)に基づいて実行される。特定した最大値が閾値を超えている場合には、ステップS50において、その最大値を有する線分を、対象線分に対応する線分として特定する。以上により、図8の処理(すなわち、図6のステップS10)が終了する。
【0037】
以上に説明したように、ステップS42では、レーザレンジファインダ30の測定誤差Σだけでなく、自律移動体10の位置情報Xk|k−1の誤差Σも考慮して、確率分布関数を算出する。そして、その確率分布関数に基づいて、対象線分に対応する線分を環境マップ中から特定する。このように、時々刻々と変化する誤差Σを考慮することで、より正確に対象線分に対応する線分を特定することができる。例えば、環境マップ中の線分100d〜100fと対象線分120が図10に示す位置関係になった場合を考えると、自律移動体10の位置情報の誤差がx方向に大きければ、対応する線分として線分100fが特定される。自律移動体10の位置情報の誤差がy方向に大きければ、対応する線分として線分100dが特定される。このように、自律移動体10の位置情報の誤差を考慮することで、正確な対応付けを行うことが可能となる。
【0038】
図6のステップS12では、制御装置50は、対象線分と、対応する線分の夫々に対して、自律移動体10に対する相対位置情報を算出する。これらの線分の相対位置情報は、自律移動体10までの距離と自律移動体10の進行方向F1に対する角度により表される。例えば、図11に示すように、対象線分120とこれに対応する線分100fが特定されている場合には、対象線分120の相対位置情報は、自律移動体10までの距離ra(対象線分の垂線方向における距離)と、自律移動体10の進行方向F1に対する角度wa(対象線分の垂線と進行方向F1の間の角度)により算出される。また、対応する線分100fの相対位置情報は、自律移動体10までの距離rb(対応する線分の垂線方向における距離)と、自律移動体10の進行方向F1に対する角度wb(対応する線分の垂線と進行方向F1の間の角度)により算出される。次に、制御装置50は、対象線分と対応する線分との相対位置情報のずれ(dr,dw)を算出する。長さのずれdrは、距離raから距離rbを減算した値であり、角度のずれdwは、角度waから角度wbを減算した値である。
【0039】
ステップS14では、制御装置50は、上述したずれ(dr,dw)の誤差Σ(=(vdr,vdw))を算出する。なお、誤差vdrは距離のずれdrを算出する際に生じうる誤差を表す分散であり、誤差vdwは角度のずれdwを算出する際に生じうる誤差を表す分散である。対応する線分の位置情報は環境マップで規定されたものであるので、上述したずれの誤差Σは、対象線分の相対位置情報(ra,wa)の検出誤差と等しい。
したがって、距離の誤差vdrは、対象線分の始点及び終点の誤差Σを以下の計算式により座標変換することで算出される。
vdr=J×Σ×J
ここで、Jは、対象線分の始点と終点の位置に関する距離raのヤコビ行列であり、Jはヤコビ行列Jの転置行列である。ヤコビ行列Jは以下の数2により表される。
【数2】

また、角度の誤差vdwは、対象線分の始点及び終点の誤差Σを以下の計算式により座標変換することで得られる。
vdw=J×Σ×J
ここで、Jは、対象線分の始点と終点の位置に関する角度waのヤコビ行列であり、Jはヤコビ行列Jの転置行列である。ヤコビ行列Jは以下の数3により表される。
【数3】

【0040】
ステップS16では、制御装置50は、ステップS12で算出した相対位置のずれ(dr,dw)と、ステップS14で算出したずれの誤差Σ(=(vdr,vdw))に基づいて、ステップS4で算出した自律移動体10の位置情報Xk|k−1(=(xk|k−1,yk|k−1,φk|k−1)を修正し、修正後の位置情報Xk|k(=(xk|k,yk|k,φk|k)を算出する。自律移動体10の位置情報の修正は、一般的なEKFの手法により行われる。例えば、文献「S. Thrun, W.burgard, D. Fox, "Probabilistic robotics", The MIT Press, 2005」の手法により自律移動体10の位置情報を修正することができる。このように位置を修正することで、より正確に自律移動体10の位置情報を特定することができる。
【0041】
その後、制御装置50は、再度ステップS2からの処理を実行する。ステップS2では、修正後の正確な位置情報に基づいて経路が算出される。このように、位置情報の算出(ステップS4)、レーザレンジファインダ30の検出値に基づく位置情報の修正(ステップS6〜S16)、修正後の位置情報に基づく制御(ステップS2)が繰り返し行われることで、自律移動体10が目標値まで正確に移動することができる。
【0042】
以上に説明したように、実施例の自律移動体10では、レーザレンジファインダ30の検出誤差だけでなく、自律移動体10の位置情報の誤差をも考慮して、対象線分に対応する線分を環境マップ中から特定する。このため、対象線分に対して誤った線分が対応付けられることが防止される。これにより、より正確に位置情報を修正することができる。
【0043】
また、上述した自律移動体10では、ステップS14において対象線分とこれに対応する線分との相対位置のずれの誤差を算出するときに、対象線分の始点と終点の位置の誤差のみを考慮した。このように、レーザレンジファインダ30が検出する各座標点の全ての検出誤差を考慮するのではなく、対象線分の両端点の位置の検出誤差のみを考慮することで、相対位置のずれの誤差の算出に要する演算量を低減することができる。これにより、より短い周期で図6のフローチャートを実行可能となり、より正確に自律移動体10を移動させることが可能となる。
【0044】
また、上述した自律移動体10では、ステップS10で対象線分に対応する線分を特定するときに、対象線分の両端点の存在確率のみを考慮した。このように、レーザレンジファインダ30が検出する各座標点の全ての存在確率を考慮するのではなく、対象線分の両端点の存在確率のみを考慮することで、対象線分に対応する線分の特定処理に要する演算量を低減することができる。これにより、より短い周期で図6のフローチャートを実行可能となり、より正確に自律移動体10を移動させることが可能となる。
【0045】
なお、上述した実施例では自律移動体10について説明したが、本発明は自律的に移動しない移動体に適用してもよい。例えば、移動体を遠隔操縦するときに、本発明により移動体の位置を特定してもよい。
【0046】
上述した実施例では、移動領域内に他の移動体が存在しなかったが、移動領域内に他の移動体が存在してもよい。この場合は、レーザレンジファインダによって壁の表面形状と他の移動体の表面形状が検出される。このため、レーザレンジファインダによって検出された座標点群から、壁の表面形状に相当する座標点群を特定し、その座標点群に対して上述した処理を実行すればよい。
【0047】
また、上述した実施例では、自律移動体の位置と角度の誤差を文献「S. Thrun, W.burgard, D. Fox, "Probabilistic robotics", The MIT Press, 2005」に記載の技術によって算出したが、位置と角度の誤差の算出には種々の方法を用いることができる。例えば、自律移動体の位置と角度の誤差を、自律移動体の運動状態を考慮して算出することができる。例えば、自律移動体の位置をGPSセンサで検出する場合において、自律移動体の速度がx方向に大きく、y方向に小さい場合は、GPSセンサの検出誤差を、x方向の誤差が大きく、y方向の誤差が小さくなるように算出する。自律移動体の運動状態を考慮することで、自律移動体の位置と角度の誤差を適切に算出することができる。
【0048】
また、上述した実施例では、レーザレンジファインダ30の検出結果から得られる線分が1つであり、この線分に対応する線分を環境マップの複数の線分の中から特定した。しかしながら、レーザレンジファインダ30の検出結果から得られる線分が複数となる場合もある。また、環境マップ中の線分のうちの一部のみが自己位置・角度の修正の基準(すなわち、ランドマーク)として使用される場合がある。例えば、図12に示すようにレーザレンジファインダ30の検出結果から2つの線分130、132が得られており、線分100xだけが自己位置・角度の修正の基準とされている場合を考える。例えば、線分100xが示す壁面の前に別の障害物が置かれていたり、線分100xが示す壁面に設けられた扉が開放されている場合等に、図12に示すように1つの線分が検出されるはずの位置で2つの線分が検出される場合がある。この場合にも、レーザレンジファインダ30の検出誤差だけでなく、自律移動体10の位置情報の誤差をも考慮して、検出された線分130、132の中から線分100xに対応する線分を特定することができる。対応する線分の特定は、上述した実施例と同様の演算により行うことができる。このように、検出される線分が1つでありランドマークとなる線分が複数である場合だけでなく、検出される線分が複数でありランドマークとなる線分が1つである場合にも、誤差を考慮して線分の対応関係を特定することができる。また、検出される線分が複数でありランドマークとなる線分が複数である場合にも、同様にした誤差を考慮して線分の対応関係を特定することができる。
【0049】
以上、本発明の具体例を詳細に説明したが、これらは例示にすぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例をさまざまに変形、変更したものが含まれる。
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
【符号の説明】
【0050】
10:自律移動体
20:記憶装置
30:レーザレンジファインダ
40a:サーボモータ
40b:サーボモータ
42a:サーボ制御回路
42b:サーボ制御回路
44a:モータ
44b:モータ
46a:エンコーダ
46b:エンコーダ
50:制御装置

【特許請求の範囲】
【請求項1】
障害物が存在する床面上を移動する移動体であって、
床面と平行な方向に直線状に伸びる障害物の床面と平行な方向における表面形状をグローバル座標系により表す表面形状データを複数個記憶する記憶部と、
移動体の位置及び角度をグローバル座標系により算出する自己位置・角度算出部と、
光線を走査して、その走査面上に存在する障害物の床面と平行な方向における表面形状を移動体に対する相対座標系により検出する障害物検出部と、
自己位置・角度算出部で算出された移動体の位置及び角度並びにこれらの誤差と、障害物検出部で検出された表面形状及びその誤差に基づいて、記憶部に記憶されている複数の表面形状データの中から障害物検出部で検出された表面形状に対応する表面形状データを特定するマッチング部と、
障害物検出部で検出された表面形状とマッチング部で特定された表面形状データとのずれから、自己位置・角度算出部によって算出された位置及び角度を修正する自己位置・角度修正部、
を有することを特徴とする移動体。
【請求項2】
障害物検出部は、障害物の床面と平行な方向における表面形状を相対座標系における線分として検出し、
検出された線分の両端の位置の誤差のみに基づいて、障害物検出部で検出された表面形状とマッチング部で特定された表面形状データとのずれの誤差を算出するずれ誤差算出部をさらに有しており、
自己位置・角度修正部は、ずれ誤差算出部によって算出された誤差に基づいて、移動体の位置及び角度を修正する、
ことを特徴とする請求項1に記載の移動体。
【請求項3】
障害物検出部は、障害物の床面と平行な方向における表面形状を相対座標系における線分として検出し、
マッチング部は、障害物検出部で検出された線分の両端の位置の誤差に基づいて、その両端の両方が同一の表面形状データ上に存在する確率を複数の表面形状データについて算出し、算出された確率が最も高い表面形状データを特定することを特徴とする請求項1または2に記載の移動体。
【請求項4】
障害物が存在する床面上を移動する移動体であって、
床面と平行な方向に直線状に伸びる障害物の床面と平行な方向における表面形状をグローバル座標系により表す表面形状データを記憶する記憶部と、
移動体の位置及び角度をグローバル座標系により算出する自己位置・角度算出部と、
光線を走査して、その走査面上に存在する障害物の床面と平行な方向における表面形状を移動体に対する相対座標系により検出する障害物検出部と、
障害物検出部で複数の表面形状が検出されたときに、自己位置・角度算出部で算出された移動体の位置及び角度並びにこれらの誤差と、障害物検出部で検出された複数の表面形状及びそれらの誤差に基づいて、障害物検出部で検出された複数の表面形状の中から記憶部に記憶されている表面形状データに対応する表面形状を特定するマッチング部と、
マッチング部で特定された表面形状と記憶部に記憶されている表面形状データとのずれから、自己位置・角度算出部によって算出された位置及び角度を修正する自己位置・角度修正部、
を有することを特徴とする移動体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2011−248648(P2011−248648A)
【公開日】平成23年12月8日(2011.12.8)
【国際特許分類】
【出願番号】特願2010−121452(P2010−121452)
【出願日】平成22年5月27日(2010.5.27)
【出願人】(000003609)株式会社豊田中央研究所 (4,200)
【Fターム(参考)】