以下、本発明の実施形態について図面を参照して詳細に説明する。なお、図面において、同一または同等の要素には同じ符号を付し、重複する説明を省略する。
図1は、本発明の一実施形態に係る自律移動体の位置推定装置を示す概略構成図である。図1において、本実施形態の位置推定装置1は、自律移動体であるフォークリフト2の自動運転を実施する際に、フォークリフト2の位置を推定する装置である。位置推定装置1は、フォークリフト2に搭載されている。
位置推定装置1は、第1自己位置推定器3と、第2自己位置推定器4と、ホイールエンコーダ5と、ジャイロセンサ6と、コントローラ7と、表示器8とを備えている。つまり、位置推定装置1は、複数(ここでは2つ)の自己位置推定器を備えている。
第1自己位置推定器3は、SLAM(Simultaneous Localization andMapping)を用いて、フォークリフト2の自己位置を推定する。SLAMは、センサデータ及び地図データを使って自己位置推定を行う自己位置推定技術である。SLAMは、センサとしてレーザレンジスキャナー等を利用して、自己位置推定と環境地図の作成とを同時に行う。SLAMでは、建物の有無によって自己位置推定結果にずれが生じる。従って、SLAMは、屋内での推定精度が屋外での推定精度よりも高い自己位置推定技術である。第1自己位置推定器3は、フォークリフト2の自己位置を絶対位置として推定する。
第2自己位置推定器4は、GNSS(Global NavigationSatellite System)を用いて、フォークリフト2の自己位置を推定する。GNSSは、衛星を使って自己位置推定を行う自己位置推定技術である。GNSSでは、衛星の状態によって自己位置推定結果にずれが生じる。従って、GNSSは、屋外での推定精度が屋内での推定精度よりも高い自己位置推定技術である。第2自己位置推定器4は、フォークリフト2の自己位置を絶対位置として推定する。
第1自己位置推定器3及び第2自己位置推定器4は、フォークリフト2の自己位置としてフォークリフト2の二次元位置及び向きを推定する。ここでは、第1自己位置推定器3及び第2自己位置推定器4により推定された自己位置を位置推定値と称する。第1自己位置推定器3及び第2自己位置推定器4による自己位置推定は、単位時間(例えば数mS)毎に行われる。
ホイールエンコーダ5は、フォークリフト2のホイールに取り付けられ、フォークリフト2の速度を計測するセンサである。ジャイロセンサ6は、フォークリフト2の車体等に取り付けられ、フォークリフト2の角速度を計測するセンサである。
コントローラ7は、CPU、RAM、ROM及び入出力インターフェース等により構成されている。コントローラ7は、第1自己位置推定器3及び第2自己位置推定器4の自己位置推定結果とホイールエンコーダ5及びジャイロセンサ6の計測値とを入力し、所定の処理を行い、フォークリフト2の自己位置を推定する。コントローラ7は、自己位置算出部10と、外れ値除去部11と、最終自己位置推定部12とを有している。
自己位置算出部10は、ホイールエンコーダ5及びジャイロセンサ6の計測値に基づいて、フォークリフト2の自己位置を算出する。ホイールエンコーダ5、ジャイロセンサ6及び自己位置算出部10は、フォークリフト2に具備されたセンサを有し、フォークリフト2の自己位置を検出する自己位置検出部13を構成する。自己位置検出部13は、フォークリフト2の自己位置としてフォークリフト2の二次元位置及び向きを検出する。ここでは、自己位置検出部13により検出された自己位置を位置検出値と称する。
外れ値除去部11は、第1自己位置推定器3及び第2自己位置推定器4により得られたフォークリフト2の位置推定値と自己位置検出部13により得られたフォークリフト2の位置検出値とを比較して、フォークリフト2の位置推定値の外れ値を抽出して除去する。
最終自己位置推定部12は、第1自己位置推定器3及び第2自己位置推定器4によりそれぞれ得られた2つのフォークリフト2の位置推定値に基づいて、フォークリフト2の自己位置を最終的に推定する。このとき、最終自己位置推定部12は、外れ値除去部11により外れ値が除去されたフォークリフト2の位置推定値に基づいて、フォークリフト2の自己位置を最終的に推定する。また、最終自己位置推定部12は、フォークリフト2の周囲環境に基づいて第1自己位置推定器3及び第2自己位置推定器4の重み係数を設定し、その重み係数を用いてフォークリフト2の自己位置を最終的に推定する。
表示器8は、最終自己位置推定部12によって最終的に推定されたフォークリフト2の自己位置を表示する。表示器8は、例えばフォークリフト2の二次元位置及び向きを画面表示する。
図2は、自己位置算出部10により実行される自己位置算出処理手順の詳細を示すフローチャートである。図2において、自己位置算出部10は、まずホイールエンコーダ5及びジャイロセンサ6の計測値を取得する(手順S101)。
続いて、自己位置算出部10は、ホイールエンコーダ5及びジャイロセンサ6の計測値に基づいて、フォークリフト2の位置検出値を算出する(手順S102)。具体的には、自己位置算出部10は、ホイールエンコーダ5により計測されたフォークリフト2の速度を積分することにより、フォークリフト2の二次元位置(XY座標の位置)を求める。また、自己位置算出部10は、ジャイロセンサ6により計測されたフォークリフト2の角速度を積分することにより、フォークリフト2の向きを求める。続いて、自己位置算出部10は、フォークリフト2の位置検出値を外れ値除去部11に出力する(手順S103)。
図3は、外れ値除去部11により実行される外れ値除去処理手順の詳細を示すフローチャートである。図3において、外れ値除去部11は、まず第1自己位置推定器3及び第2自己位置推定器4により得られたフォークリフト2の位置推定値を取得する(手順S111)。
続いて、外れ値除去部11は、第1自己位置推定器3及び第2自己位置推定器4により今回得られたフォークリフト2の位置推定値と第1自己位置推定器3及び第2自己位置推定器4により前回得られたフォークリフト2の位置推定値との相対位置(x,y,θ)を算出する(手順S112)。前回得られたフォークリフト2の位置推定値は、単位時間前に推定されたフォークリフト2の自己位置であり、メモリに記憶されている。
相対位置(x,y,θ)は、例えば第1自己位置推定器3により得られた位置推定値と第2自己位置推定器4により得られた位置推定値との平均値として算出してもよいし、或いは第1自己位置推定器3により得られた位置推定値及び第2自己位置推定器4により得られた位置推定値のうち前回算出された値に近いほうを採用してもよい。
続いて、外れ値除去部11は、自己位置算出部10により得られたフォークリフト2の位置検出値を取得する(手順S113)。続いて、外れ値除去部11は、自己位置算出部10により今回得られたフォークリフト2の位置検出値と自己位置算出部10により前回得られたフォークリフト2の位置検出値との相対位置(xd,yd,θd)を算出する(手順S114)。前回得られたフォークリフト2の位置検出値は、単位時間前に検出されたフォークリフト2の自己位置であり、メモリに記憶されている。
続いて、外れ値除去部11は、フォークリフト2の周囲環境に基づいて、閾値δx,δy,δθを設定する(手順S115)。閾値δx,δyは、フォークリフト2の二次元位置(x軸位置,y軸位置)に係る閾値である。閾値δθは、フォークリフト2の向きに係る閾値である。フォークリフト2の周囲環境は、最終自己位置推定部12により前回推定されたフォークリフト2の自己位置の環境である。なお、フォークリフト2の周囲環境は、環境地図を作成するSLAMを用いる第1自己位置推定器3によって把握することができる。
例えば、フォークリフト2が雨等で滑りやすい屋外を走行する場合、ホイールエンコーダ5は滑りの影響が大きいため、ホイールエンコーダ5の計測値に誤差が出やすいが、ジャイロセンサ6は滑りの影響が少ないため、ジャイロセンサ6の計測値に誤差が出にくい。従って、屋外では、屋内に比べて閾値δx,δyを大きく(緩く)設定する。例えば、屋外では、閾値δx,δyを1mに設定し、屋内では、閾値δx,δyを0.5mに設定する。閾値δθについては、屋外と屋内とで等しくする。例えば、屋外及び屋内において、閾値δθを0.3radに設定する。このように閾値δx,δy,δθは、フォークリフト2の周囲環境に応じて変更される。
また、フォークリフト2が例えば冷蔵庫の内外のような温度差が大きい屋内及び屋外を走行する場合には、ジャイロセンサ6の計測値に誤差が出やすい。このため、屋内では、屋外に比べて閾値δθを大きく(緩く)設定する。
続いて、外れ値除去部11は、手順S114で算出された相対位置(x
d,y
d,θ
d)と手順S112で算出された(x,y,θ)との差分に関する計算式f(x),f(y),f(θ)を計算する(手順S116)。計算式f(x),f(y),f(θ)は、下記式で表される。
続いて、外れ値除去部11は、上記式にも示されるように、計算式f(x),f(y),f(θ)の計算値がそれぞれ閾値δx,δy,δθよりも大きいかどうかを判断する(手順S117)。
外れ値除去部11は、計算式f(x),f(y),f(θ)の計算値が閾値δx,δy,δθよりも大きいと判断したときは、第1自己位置推定器3及び第2自己位置推定器4により今回得られたフォークリフト2の位置推定値を外れ値として除去する(手順S118)。このとき、外れ値除去部11は、計算式f(x),f(y),f(θ)の計算値の少なくとも1つが閾値δx,δy,δθよりも大きいとき、つまり上記式の条件を1つでも満たすときは、今回得られたフォークリフト2の位置推定値を外れ値とみなす。
外れ値除去部11は、計算式f(x),f(y),f(θ)の計算値の全てが閾値δx,δy,δθよりも大きくない、つまり上記式の条件を全て満たさないと判断したときは、第1自己位置推定器3及び第2自己位置推定器4により今回得られたフォークリフト2の位置推定値を最終自己位置推定部12に出力する(手順S119)。
図4は、最終自己位置推定部12により実行される自己位置推定処理手順の詳細を示すフローチャートである。ここでは、最終自己位置推定部12は、第1自己位置推定器3及び第2自己位置推定器4によりそれぞれ得られた2つのフォークリフト2の位置推定値を融合し、線形最小分散推定法を利用してフォークリフト2の自己位置を最終的に推定する。
図4において、最終自己位置推定部12は、まず第1自己位置推定器3により得られた最新のフォークリフト2の位置推定値(xs,ys,θs)と、第2自己位置推定器4により得られた最新のフォークリフト2の位置推定値(xg,yg,θg)とを取得する(手順S121)。
続いて、最終自己位置推定部12は、フォークリフト2の周囲環境に基づいて、第1自己位置推定器3の誤差分散(σsx2,σsy2,σsθ2)と、第2自己位置推定器4の誤差分散(σgx2,σgy2,σgθ2)とを設定する(手順S122)。フォークリフト2の周囲環境は、最終自己位置推定部12により前回推定されたフォークリフト2の自己位置の環境である。また、誤差分散とは、重み係数のことである。誤差分散σsx2,σsy2及び誤差分散σgx2,σgy2は、フォークリフト2の二次元位置(x軸位置,y軸位置)に係る重み係数である。誤差分散σsθ2及び誤差分散σgθ2は、フォークリフト2の向きに係る重み係数である。
このとき、屋内では、SLAMの推定精度がGNSSの推定精度よりも高いため、第1自己位置推定器3の誤差分散を第2自己位置推定器4の誤差分散よりも低く設定する。例えば、第1自己位置推定器3の誤差分散を4とし、第2自己位置推定器4の誤差分散を36とする。屋外では、GNSSの推定精度がSLAMの推定精度よりも高いため、第2自己位置推定器4の誤差分散を第1自己位置推定器3の誤差分散よりも低く設定する。例えば、第1自己位置推定器3の誤差分散を36とし、第2自己位置推定器4の誤差分散を4とする。また、屋内と屋内との中間では、第1自己位置推定器3の誤差分散と第2自己位置推定器4の誤差分散とを等しく設定する。例えば、第1自己位置推定器3及び第2自己位置推定器4の誤差分散を何れも25とする。なお、屋内と屋内との中間とは、例えば屋根はないが建物の近くで柱が存在しているような場所である。
続いて、最終自己位置推定部12は、第1自己位置推定器3により得られた最新のフォークリフト2の位置推定値(xs,ys,θs)、第2自己位置推定器4により得られた最新のフォークリフト2の位置推定値(xg,yg,θg)、第1自己位置推定器3の誤差分散(σsx
2,σsy
2,σsθ
2)及び第2自己位置推定器4の誤差分散(σgx
2,σgy
2,σgθ
2)を用いて、下記式により最終的なフォークリフト2の自己位置(x
est,y
est,θ
est)を推定する。
以上のように本実施形態にあっては、自己位置推定技術が異なる第1自己位置推定器3及び第2自己位置推定器4によりフォークリフト2の自己位置が推定され、第1自己位置推定器3及び第2自己位置推定器4により得られた各フォークリフト2の位置推定値に基づいて、フォークリフト2の自己位置が最終的に推定される。このとき、フォークリフト2の周囲環境に基づいて第1自己位置推定器3及び第2自己位置推定器4の誤差分散(重み係数)が設定され、第1自己位置推定器3及び第2自己位置推定器4の誤差分散を用いてフォークリフト2の自己位置が最終的に推定される。これにより、フォークリフト2の自己位置の推定精度が向上する。その結果、フォークリフト2の自動運転時に、フォークリフト2の安定した走行が可能となる。
また、本実施形態では、最終自己位置推定部12により前回最終的に推定されたフォークリフト2の自己位置の環境に基づいて、第1自己位置推定器3及び第2自己位置推定器4の誤差分散が設定される。このような構成により、現在のフォークリフト2の周囲環境が精度良く得られるため、第1自己位置推定器3及び第2自己位置推定器4の誤差分散が適切に設定される。これにより、フォークリフト2の自己位置の推定精度が更に向上する。
また、本実施形態では、第1自己位置推定器3及び第2自己位置推定器4は、フォークリフト2の自己位置としてフォークリフト2の二次元位置及び向きを推定し、最終自己位置推定部12は、第1自己位置推定器3及び第2自己位置推定器4の誤差分散としてフォークリフト2の二次元位置及び向きに係る誤差分散を設定する。このようにフォークリフト2の二次元位置だけでなくフォークリフト2の向きも考慮されるため、フォークリフト2の自己位置の推定精度が一層向上する。
また、本実施形態では、第1自己位置推定器3は、屋内での推定精度が屋外での推定精度よりも高い自己位置推定技術を用いてフォークリフト2の自己位置を推定し、第2自己位置推定器4は、屋外での推定精度が屋内での推定精度よりも高い自己位置推定技術を用いてフォークリフト2の自己位置を推定する。このような構成により、フォークリフト2が屋外及び屋内を移動する際に、屋外及び屋内に応じた適切な第1自己位置推定器3及び第2自己位置推定器4の誤差分散が設定されることになるため、フォークリフト2の自己位置の推定精度がより一層向上する。
図5は、図3に示された外れ値除去処理手順の変形例を示すフローチャートである。図5において、外れ値除去部11は、図3に示されるフローチャートと同様に、手順S111〜S114を実行する。
外れ値除去部11は、手順S114を実行した後、フォークリフト2の周囲環境に基づいて、閾値δ及び重み係数α,β,γを設定する(手順S115A)。重み係数αは、フォークリフト2のx軸位置に係る重み係数である。重み係数βは、フォークリフト2のy軸位置に係る重み係数である。重み係数γは、フォークリフト2の向きに係る重み係数である。このとき、例えば雨等で滑りやすい屋外では、屋内に比べて重み係数α,βを小さく設定する。
続いて、外れ値除去部11は、手順S114で算出された相対位置(x
d,y
d,θ
d)と手順S112で算出された(x,y,θ)との差分に関する計算式fを計算する(手順S116A)。計算式fは、下記式で表される。計算式fは、フォークリフト2の二次元位置及び向きに関する変数を加算する式である。
続いて、外れ値除去部11は、上記式にも示されるように、計算式fの計算値が閾値δよりも大きいかどうかを判断する(手順S117A)。外れ値除去部11は、計算式fの計算値が閾値δよりも大きいと判断したときは、第1自己位置推定器3及び第2自己位置推定器4により今回得られたフォークリフト2の位置推定値を外れ値として除去する(手順S118)。
外れ値除去部11は、計算式fの計算値が閾値δよりも大きくないと判断したときは、第1自己位置推定器3及び第2自己位置推定器4により今回得られたフォークリフト2の位置推定値を最終自己位置推定部12に出力する(手順S119)。
なお、本発明は、上記実施形態には限定されない。例えば上記実施形態では、最終自己位置推定部12は、第1自己位置推定器3及び第2自己位置推定器4によりそれぞれ得られた2つのフォークリフト2の位置推定値を融合し、線形最小分散推定法を利用してフォークリフト2の自己位置を最終的に推定しているが、2つのフォークリフト2の位置推定値を融合する場合には、例えばカルマンフィルタを利用してフォークリフト2の自己位置を最終的に推定してもよい。
また、上記実施形態では、SLAMを用いてフォークリフト2の自己位置を推定する第1自己位置推定器3と、GNSSを用いてフォークリフト2の自己位置を推定する第2自己位置推定器4とを使用しているが、特にその形態には限られず、自己位置推定技術が異なる3つ以上の自己位置推定器を使用してもよい。この場合には、最終自己位置推定部12は、各自己位置推定器によりそれぞれ得られた3つ以上のフォークリフト2の位置推定値を融合することになる。また、使用する自己位置推定技術としては、特にSLAM及びGNSSには限られない。
また、上記実施形態では、ホイールエンコーダ5によりフォークリフト2の速度を計測し、ジャイロセンサ6によりフォークリフト2の角速度を計測しているが、使用するセンサとしては、特にそれには限られない。例えば、フォークリフト2の速度を計測するセンサとしては、ロータリーエンコーダ等を使用してもよく、フォークリフト2の角速度を計測するセンサとしては、操舵角センサまたは操舵ポテンショメータ等を使用してもよい。また、フォークリフト2の二次元位置及び向きをセンサにより直接検出してもよい。
さらに、上記実施形態では、フォークリフト2の位置を推定しているが、本発明は、フォークリフト以外の産業車両あるいは移動ロボット等といった自律移動体にも適用可能である。