説明

状態推定装置、方法、プログラム及びその記録媒体

【課題】未知の外乱がある環境で、対象物の位置等の状態(位置)の推定を高精度で行う。
【解決手段】状態パーティクルを用いて状態の推定を行うモンテカルロ・ローカリゼーション法を応用して、さらに変位量パーティクルを用いる。変位量パーティクルを用いることにより、対象物に与えられる外乱を考慮して対象物の変位量を推定することが可能となり、対象物の状態の推定を高精度に行うことができる。また、誘拐度Eを定義して、誘拐度Eが低い場合には、移動誤差を拡大することで状態パーティクルの存在範囲を広げる処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、対象物の位置等の状態を計測及び推定する技術に関する。
【背景技術】
【0002】
自律移動ロボットの位置を計測する技術として、GPS方式、無線LAN方式による位置計測技術が知られている。しかし、これらの位置計測技術の計測精度は、自律移動ロボットを制御する上で不十分であることがある。
【0003】
そこで、これらの位置計測技術により求まった計測値を用いて、より精度が高い位置を推定するために、フィルタ技術が導入されている(非特許文献1)。これらのフィルタ技術のほとんどがベイズフィルタの応用によるものである。ベイズフィルタを用いて高精度の位置の推定を行うためには、自動移動ロボットの高精度な移動モデルが必要である。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】上田隆一、新井民夫、浅沼和範、梅田和昇、大隅久、「パーティクルフィルタを利用した自己位置推定に生じる致命的な推定誤りからの回復法」、日本ロボット学会誌Vol. 23、No. 4、pp.466〜473、2005
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1に記載された技術では、環境中において、時間的な観点で継続的に存在する風などの未知の外乱がある環境では対象物の位置等の状態(位置)の推定を高精度で行うことができないという課題があった。
【課題を解決するための手段】
【0006】
上記の課題を解決するために、状態パーティクルのみならず、変位量パーティクルを用いる。
【発明の効果】
【0007】
変位量パーティクルを用いることにより、対象物に与えられる外乱を考慮して対象物の変位量を推定することが可能となり、対象物の状態の推定を高精度に行うことができる。
【図面の簡単な説明】
【0008】
【図1】状態推定装置の機能ブロック図の例。
【図2】変位量計算部の機能ブロック図の例。
【図3】変位量重み計算部の機能ブロック図の例。
【図4】状態推定方法の流れ図の例。
【図5】ステップS1の流れ図の例。
【図6】ステップS2の流れ図の例。
【図7】ステップS3の流れ図の例。
【図8】ステップS6の流れ図の例。
【図9】ステップS7の流れ図の例。
【図10】自律移動ロボットを例示する図。(a)は正面図であり、(b)は側面図。
【発明を実施するための形態】
【0009】
[対象物]
状態の推定の対象となる対象物は、例えば図10に例示する自律飛行船等の自律移動ロボットである。この自律飛行船の重心位置は低く設定されているので姿勢傾斜に対する復元力は大きく、自律飛行船の姿勢角は方位角以外は0に維持されるとする。以下、対象物が自律移動ロボットである場合を例に挙げて説明する。なお、状態の推定の対象となる対象物は何でもよく、自律移動ロボットに限られない。
【0010】
図10の自律移動ロボットのゴンドラ部には、5つの無線LAN方式の位置計測センサ61,62,63,64,65が取り付けられている。これらの位置計測センサ61,62,63,64,65は、自律移動ロボットの水平面内重心位置(Xg(t),Yg(t),Zg(t))を中心として水平面内に点対象に配置されている。位置計測センサ61,62,63,64,65は、水平面内重心位置(Xg(t),Yg(t),Zg(t))から、それぞれ方位角にしてΦs1,Φs2,Φs3,Φs4,Φs5の方向に距離Rs1,Rs2,Rs3,Rs4,Rs5だけ離れた位置に固定されているものとする。各位置計測センサ61,62,63,64,65は、水平面内位置(XY)及び高度(Z)を計測することができる。
【0011】
時刻tにおける位置計測センサ61,62,63,64,65の計測値をそれぞれZ1(t)、Z2(t)、Z3(t)、Z4(t)、Z5(t)とする。
【0012】
Z1(t)=(Zx1(t),Zy1(t),Zz1(t))
Z2(t)=(Zx2(t),Zy2(t),Zz2(t))
Z3(t)=(Zx3(t),Zy3(t),Zz3(t))
Z4(t)=(Zx4(t),Zy4(t),Zz4(t))
Z5(t)=(Zx5(t),Zy5(t),Zz5(t))
【0013】
位置計測センサ61,62,63,64,65の真の位置をそれぞれ(Xs1(t),Ys1(t),Zs1(t))、(Xs2(t),Ys2(t),Zs2(t))、(Xs3(t),Ys3(t),Zs3(t))、(Xs4(t),Ys4(t),Zs4(t))、(Xs5(t),Ys5(t),Zs5(t))とし、自律移動ロボットの方位角をΦg(t)とし、i=1,…,5とすると、
Xsi(t)=Xg(t)+Rsi・cos(Φg(t)+Φsi)
Ysi(t)=Yg(t)+Rsi・sin(Φg(t)+Φsi)
Zsi(t)=Zg(t)
という関係が成り立つ。この関係を利用して、位置計測センサ61,62,63,64,65の計測値から、自律移動ロボットの方位角を求めることができる。もちろん、これらの位置計測センサとは別に、直接方位角を計測するジャイロセンサ等の角度センサを用いても構わない。
【0014】
対象物の推定の対象となる状態は、例えば水平面内位置、高度及び方位角(Xg(t),Yg(t),Zg(t),Φg(t))である。
【0015】
[ベイズフィルタ]
以下、ベイズフィルタについて簡単に説明をする。ベイズフィルタの詳細については、参考文献1を参照のこと。
【0016】
〔参考文献1〕スラン・セバスチャン(著)、バーガード・ウルフラム(著)、フォックス・ディーター(著)、上田隆一(訳)、「確率ロボティクス」、毎日コミュニケーションズ、2007/10/25
ベイズフィルタは、以下の(1)予測、(2)計測更新を各時刻tにおいて全ての確率変数(Xg(t),Yg(t),Zg(t),Φg(t))について繰り返すアルゴリズムである。
【0017】
(1)予測
bel0(Xg(t),Yg(t),Zg(t),Φg(t))=∫p(Xg(t),Yg(t),Zg(t),Φg(t)|u(t),Xg(t-1),Yg(t-1),Zg(t-1),Φg(t-1))・bel(Xg(t-1),Yg(t-1),Zg(t-1),Φg(t-1))dXg(t-1)Yg(t-1)Zg(t-1)Φg(t-1)
(2)計測更新
bel(Xg(t),Yg(t),Zg(t),Φg(t))=ηp(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Xg(t),Yg(t),Zg(t),Φg(t))・bel0(Xg(t),Yg(t),Zg(t),Φg(t))
bel(Xg(t),Yg(t),Zg(t),Φg(t))は、自律移動ロボットの位置が(Xg(t),Yg(t),Zg(t),Φg(t))である確率分布である。時刻tのbel(Xg(t),Yg(t),Zg(t),Φg(t))を求めるために、まず、(1)予測のステップにおいて、一時刻前のbel(Xg(t−1),Yg(t−1),Zg(t−1),Φg(t−1))に、移動モデルにより推定した自律移動ロボットの状態遷移確率p(Xg(t),Yg(t),Zg(t),Φg(t)|u(t),Xg(t−1),Yg(t−1),Zg(t−1),Φg(t−1))をかけて、時刻tのbel(Xg(t),Yg(t),Zg(t),Φg(t))の推定値bel0(Xg(t),Yg(t),Zg(t),Φg(t))を求める。u(t)は時刻tでの自律移動ロボットの制御入力である。次に、(2)計測更新のステップにおいて、位置計測センサの計測値(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t))を用いて、推定値bel0(Xg(t),Yg(t),Zg(t),Φg(t))の補正を行い、時刻tのbel(Xg(t),Yg(t),Zg(t),Φg(t))を求める。具体的には、自律移動ロボットの状態が(Xg(t),Yg(t),Zg(t),Φg(t))である場合に位置計測センサにより計測値(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t))が得られる確率p(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Xg(t),Yg(t),Zg(t),Φg(t))を用いて、bel0の補正を行っている。なお、ηは、正の定数である。
【0018】
[モンテカルロ・ローカリゼーション]
ベイズフィルタは、数学的な概念を記したものに過ぎないので、計算機でこれを実装するためには、別の表現が必要である。例えば、ベイズフィルタの実装形態として、パーティクルフィルタを用いたモンテカルロ・ローカリゼーション(ML)が知られている。以下、パーティクルフィルタ及びモンテカルロ・ローカリゼーションについて簡単に説明する。詳細については、参考文献1を参照のこと。
【0019】
パーティクルフィルタは、例えば以下のアルゴリズムで記述される。
各状態パーティクルSi(t)(i=1,…,M)は、状態Li(t)=(Xgi(t),Ygi(t),Zgi(t),Φgi(t))と、その状態Li(t)を取る可能性を示す指標である重みWi(t)との組により構成され、Si(t)=(Li(t),Wi(t))と表現される。Mは、状態パーティクルの数であり、一般にMが大きい程計算の近似精度は高まる。
【0020】
以下の(1)から(4)の計算により、時刻t−1の状態パーティクルSi(t−1)(i=1,…,M)から、時刻tの状態パーティクルSi(t)(i=1,…,M)を生成する。この(1)から(4)の計算を各時刻tごとに行う。
【0021】
(1)時刻t−1の複数の状態パーティクルSi(t−1)(i=1,…,M)から重みWi(t−1)の値に比例した確率に従って1つの状態パーティクルを選択してSk(t−1)とする。これを、k=1からk=MまでM回繰り返す。すなわち、重みWi(t−1)の値に比例した確率に従って、時刻t−1のM個の状態パーティクルSk(t−1)(k=1,…,M)を選択する。
【0022】
重みWi(t−1)の値に比例した確率に従って状態パーティクルを選択することにより、時刻t−1における自律移動ロボットの状態Li(t−1)における存在確率を考慮している。
【0023】
(2)p(L(t)|u(t−1),Lk(t−1))の値に比例した確率に従って状態遷移先の1つの状態Lk(t)を選択する。状態Lk(t)の一時的な重みW’k(t)(一時重みW’k(t)とも言う。)を1/Mとする。これを、k=1からk=MまでM回繰り返す。pは状態遷移確率である。pは自律移動ロボットの運動モデルを用いて計算される。
【0024】
(3)以下の総和αを計算する。
α=Σk=1p(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))W’k(t)
p(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))は、自律移動ロボットの状態がLk(t)である場合に、位置計測センサの計測値が(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t))である確率である。
一時重みW’k(t)は例えば1/Mである。
【0025】
(4)以下の式のようにαを用いて重みを補正して、状態Lk(t)の重みWk(t)とする。これにより、状態パーティクルSk(t)=(Lk(t),Wk(t))が得られる。これを、k=1からk=MまでM回繰り返す。これは、Wk(t)の総和が1になるようにするための正規化処理である。
【0026】
Wk(t)=p(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))W’k(t)/α
時刻tにおける自律移動ロボットの状態は、状態Li(t)(i=1,…,M)を重みWi(t)で重み付き加算することにより推定することができる。具体的には、状態Li(t)を構成するXgi(t),Ygi(t),Zgi(t),Φgi(t)のそれぞれをWi(t)で重み付き加算することにより自律移動ロボットの状態(Xg(t),Yg(t),Zg(t),Φg(t))を推定することができる。
【0027】
Xg(t)=Σi=1Wi(t)Xgi(t)
Yg(t)=Σi=1Wi(t)Ygi(t)
Zg(t)=Σi=1Wi(t)Zgi(t)
Φg(t)=Σi=1Wi(t)Φgi(t)
【0028】
しかし、モンテカルロ・ローカリゼーションでは、自律移動ロボットの運動モデルが現実の運動を正確に反映していない場合や、自律移動ロボットに様々な外乱(突風、急な流れ等)が与えられて推定された状態とセンサによる計測値との間に大きな乖離が発生した場合に、フィルタの動作そのものが破綻してしまうという問題がある。これは誘拐問題と言われるものである。例えば、上記ステップ(3)のp(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))の値が全ての状態パーティクルSk(t)について0になってしまうと、重みWi(t)の値がすべて0になってしまい状態パーティクルSk(t)が意味をなさないものになってしまう。
【0029】
すなわち、モンテカルロ・ローカリゼーションでは、多くの状態パーティクルSk(t)についてのp(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))の値が0になるのを防がなければならない。そのためには、自律移動ロボットの高精度な運動モデルの構築が必要であるが、未知の外乱がある環境における複雑かつ非線形な力学特性を持つ自律移動ロボットの運動モデルの構築は極めて難しい。そこで、この発明では、自律移動ロボットの状態のみならず、状態の変位量についてもパーティクルを用いて推定する。
【0030】
[実施形態]
図1に、状態推定装置の機能ブロックを例示する。図4に、状態推定方法の流れ図を例示する。
【0031】
<ステップS1>
状態パーティクル記憶部1には、各時刻tごとにM個の状態パーティクルSi(t)(i=1,…,M)が記憶されている。状態パーティクルSi(t)は、対象物の状態Li(t)=(Xgi(t),Ygi(t),Zgi(t),Φgi(t))と、その状態Li(t)を取る可能性を示す指標である重みWi(t)との組により構成され、Si(t)=(Li(t),Wi(t))と表現される。
【0032】
状態パーティクル選択部3は、時刻t−1の状態パーティクルから重みの値に比例した確率に従ってM個の状態パーティクルSk(t−1)(k=1,…,M)を選択する(ステップS1)。ステップS1は、例えば以下のステップS11からステップS14で構成される。
【0033】
制御部15が変数kをk=1と初期化する(ステップS11)。
【0034】
状態パーティクル選択部3は、時刻t−1の状態パーティクルから重みの値に比例した確率に従って1つの状態パーティクルを選択してSk(t−1)とする(ステップS12)。選択された状態パーティクルSk(t−1)は、状態変位部5に送られる。
【0035】
例えば、M=3であり(通常Mはもっと大きな数である。)、S1(t−1)=(L1(t−1),1/2)、S2(t−1)=(L2(t−1),1/3)、S3(t−1)=(L3(t−1),1/6)であるとする。この場合、状態パーティクル選択部3は、1/2の確率で状態パーティクルS1(t−1)を選択し、1/3の確率で状態パーティクルS2(t−1)を選択し、1/6の確率で状態パーティクルS3(t−1)を選択して、Sk(t−1)とする。
【0036】
制御部15は、k=Mかどうか判定する(ステップS13)。k=Mであれば、ステップS1を終えてステップS2に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS14)、ステップS12に戻る。ステップS12において、状態パーティクル選択部3は、時刻t−1の状態パーティクルから重みの値に比例した確率に従って1つの状態パーティクルを再度選択してSk(t−1)とする。
【0037】
状態パーティクル選択部3は、異なるkに対して毎回同じ状態パーティクルの集合から重みの値に比例した確率に従って1つの状態パーティクルを選択するため、重みが大きな状態パーティクルが複数選択されることもある。例えば、上記の例では、重みが最大である状態パーティクルS1(t−1)が複数選択される可能性が高い。
【0038】
<ステップS2>
変位量パーティクル記憶部2には、各時刻tごとにM個の変位量パーティクルSFi(t)(i=1,…,M)が記憶されている。変位量パーティクルSFi(t)は、対象物の状態の変位量Fi(t)とその変位量Fi(t)を取る可能性を示す指標である重みWFi(t)との組により構成され、SFi(t)=(Fi(t),WFi(t))と表現される。Fi(t)=(Fix(t),Fiy(t),Fiz(t),FiΦ(t))である。
【0039】
変位量パーティクル選択部4は、時刻t−1の変位量パーティクルから重みの値に比例した確率に従ってM個の変位量パーティクルSFk(t−1)(k=1,…,M)を選択する(ステップS2)。ステップS2は、例えば以下のステップS21からステップS24で構成される。
【0040】
制御部15が変数kをk=1と初期化する(ステップS21)。
【0041】
変位量パーティクル選択部4は、時刻t−1の変位量パーティクルから重みの値に比例した確率に従って1つの変位量パーティクルを選択してSFk(t−1)とする(ステップS22)。選択された変位量パーティクルSFk(t−1)は、状態変位部5に送られる。
【0042】
例えば、M=3であり(通常Mはもっと大きな数である。)、SF1(t−1)=(F1(t−1),1/2)、SF2(t−1)=(F2(t−1),1/3)、SF3(t−1)=(F3(t−1),1/6)であるとする。この場合、変位量パーティクル選択部4は、1/2の確率で変位量パーティクルSF1(t−1)を選択し、1/3の確率で変位量パーティクルSF2(t−1)を選択し、1/6の確率で変位量パーティクルSF3(t−1)を選択して、SFk(t−1)とする。
【0043】
制御部15は、k=Mかどうか判定する(ステップS23)。k=Mであれば、ステップS2を終えてステップS3に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS24)、ステップS22に戻る。ステップS22において、変位量パーティクル選択部4は、時刻t−1の変位量パーティクルから重みの値に比例した確率に従って1つの変位量パーティクルを再度選択してSFk(t−1)とする。
【0044】
変位量パーティクル選択部4は、異なるkに対して毎回同じ変位量パーティクルの集合から重みの値に比例した確率に従って1つの変位量パーティクルを選択するため、重みが大きな変位量パーティクルが複数選択されることもある。例えば、上記の例では、重みが最大である変位量パーティクルSF1(t−1)が複数選択される可能性が高い。
【0045】
<ステップS3>
状態変位部5は、各状態パーティクルSk(t−1)の状態Lk(t−1)を変位量Fk(t−1)に応じて変位させた状態を含む領域から、その変位させた状態に近い状態ほど高い確率で選択されるように時刻tの状態Lk(t)を選択する(ステップS3)。選択された状態Lk(t)は、総和計算部7に送られる。また、状態Lk(t)は、状態パーティクル記憶部1に送られて、後述するWk(t)と共に状態パーティクルSk(t)=(Lk(t),Wk(t))として状態パーティクル記憶部1に記憶される。ステップS3は、例えば以下のステップS31からステップS34で構成される。
【0046】
制御部15が変数kをk=1と初期化する(ステップS31)。
【0047】
確率関数計算部51は、確率関数P(Lk(t)|Lk(t−1),Fk(t−1))を計算する(ステップS32)。
【0048】
確率関数P(Lk(t)|Lk(t−1),Fk(t−1))は正規分布を使用して、以下のように定義することができる。ここで、Lk(t)=(Xgk(t),Ygk(t),Zgk(t),Φgk(t))とし、Fk(t−1)=(Fxk(t−1),Fyk(t−1),Fzk(t−1),FΦk(t−1))とする。
【0049】
P(Lk(t)|Lk(t-1),Fk(t-1))=p(Xgk(t)|Xgk(t-1),Fxk(t-1))・p(Ygk(t)|Ygk(t-1),Fyk(t-1))・p(Zgk(t)|Zgk(t-1),Fzk(t-1))・p(Φgk(t)|Φgk(t-1),FΦk(t-1))
p(Xgk(t)|Xgk(t-1),Fxk(t-1))=(1/((2π)1/2・σx))・exp(-Rx/2σx2)
p(Ygk(t)|Ygk(t-1),Fyk(t-1))=(1/((2π)1/2・σy))・exp(-Ry/2σy2)
p(Zgk(t)|Zgk(t-1),Fzk(t-1))=(1/((2π)1/2・σz))・exp(-Rz/2σz2)
p(Φgk(t)|Φgk(t-1),FΦk(t-1))=(1/((2π)1/2・σΦ))・exp(-RΦ/2σΦ2)
Rx=(Xgk(t)+(Xgk(t-1)+Fxk(t-1)))・(Xgk(t)-(Xgk(t-1)+Fxk(t-1)))
Ry=(Ygk(t)+(Ygk(t-1)+Fyk(t-1)))・(Ygk(t)-(Ygk(t-1)+Fyk(t-1)))
Rz=(Zgk(t)+(Zgk(t-1)+Fzk(t-1)))・(Zgk(t)-(Zgk(t-1)+Fzk(t-1)))
RΦ=(Φgk(t)+(Φgk(t-1)+FΦk(t-1)))・(Φgk(t)-(Φgk(t-1)+FΦk(t-1)))
【0050】
ここで、σx、σy、σz、σΦは、一時間ステップの間にどれだけ変位量が変化し得るかを表す指標となっている。ここでは、自律移動ロボットが変位量Fk(t−1)で変位していると推定しているので、その変位量Fk(t−1)だけ変位した自律移動ロボットの状態と、実際に位置計測センサで計測された自律移動ロボットの状態がどの程度異なり得るかを各σx、σy、σz、σΦで表している。各σx、σy、σz、σΦの値が大きければそれだけ変位量のずれが大きい可能性が高く、逆にそれらの値が小さければそれだけ変位量のずれが小さい可能性が高いことを示している。各σx、σy、σz、σΦは、自律移動ロボットの加速度の大きさを反映するものであるから、
Vx(t+1)=axVx(t)+bxVoltx
Vy(t+1)=ayVy(t)+byVolty
Vz(t+1)=azVz(t)+bzVoltz
VΦ(t+1)=aΦVΦ(t)+bΦVoltΦ
という関係を利用して、簡単な運動モデルを用いて以下のように計算される。
【0051】
σx=cos(Φ(t-1)+VΦ(t-1))・Ax+sin(Φ(t-1)+VΦ(t-1))・Ay
σy=-sin(Φ(t-1)+VΦ(t-1))・Ax+cos(Φ(t-1)+VΦ(t-1))・Ay
Ax=KxMx(Vx(t)-Vx(t-1))=KxMx(axVx(t-1)+bxVoltx2-Vx(t-1))=KxMx((ax-1)Vx(t-1)+bxVoltx2)
Ay=KyMy(Vy(t)-Vy(t-1))=KyMy(ayVy(t-1)+byVolty2-Vy(t-1))=KyMy((ay-1)Vy(t-1)+byVolty2)
σz=KzMz(Vz(t)-Vz(t-1))=KzMz(azVz(t-1)+bzVoltz2-Vz(t-1))=KzMz((az-1)Vz(t-1)+bzVoltz2)
σΦ=KΦMΦ(VΦ(t)-VΦ(t-1))=KΦMΦ(aΦVΦ(t-1)+bΦVoltΦ2-VΦ(t-1))=KΦMΦ((aΦ-1)VΦ(t-1)+bΦVoltΦ2)
Mx、My、Mz、MΦは入力が0のときに最小値を取る広義単調増加関数である。ここで、広義単調増加関数とは、x≦xならば、f(x)≦f(x)となる関数fのことである。Kx、Ky、Kz、KΦは予め定められた定数であり、例えば1である。
【0052】
Vx(t),Vy(t),Vz(t),VΦ(t)はそれぞれ自律移動ロボットの機体座標における前進方向の速さ、横方向の速さ、上下方向の速さ、旋回速度である。ax,bx,ay,by,az,bz,aΦ,bΦは、適宜定められる運動モデルの安定微係数である。Voltx,Volty,Voltz,VoltΦはそれぞれ前進方向、横方向、上下方向、旋回方向に力を発生するアクチュエータに与えられる電圧値である。アクチュエータが例えばDCモータにプロペラを装備したものである場合、それが発生する力とモーメントは、電圧値の二乗の次元を持つので、運動モデル内では二乗して使用されている。もちろん、電圧値の代わりに、直接アクチュエータの発生する力を使用して運動モデルを構築してもよい。自律移動ロボットに横方向アクチュエータが装備されていないならば、横方向の運動モデルは扱わずに、横方向の移動速度はすべて風外乱によるものであると仮定してもよい。安定微係数は、大まかな値を設定しておけばよい。
【0053】
状態変位部5は、確率関数P(Lk(t)|Lk(t−1),Fk(t−1))の値に比例した確率に従って、Lk(t)を選択する(ステップS33)。
【0054】
制御部15は、k=Mかどうか判定する(ステップS34)。k=Mであれば、ステップS3を終えてステップS4に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS35)、ステップS32に戻る。
【0055】
<ステップS4>
総和計算部7は、自律移動ロボットが状態Lk(t)である場合に計測値Z(t)が計測される確率P(Z(t)|Lk(t))に予め定められた一時重みW’k(t)をかけた値の和α(t)=Σk=1P(Z(t)|Lk(t))W’k(t)を計算する(ステップS4)。
【0056】
一時重みW’k(t)は例えば1/Mである。
【0057】
P(Z(t)|Lk(t))は、例えば状態Lk(t)=(Xgk(t),Ygk(t),Zgk(t),Φgk(t))における位置計測センサ6i(i=1,…,5)の位置(Xksi(t),Yksi(t),Zksi(t))と、位置計測センサ6iの実際の計測値(Zxi(t),Zyi(t),Zzi(t))との距離が小さいほどP(Z(t)|Lk(t))が大きくなるように定められる。
【0058】
P(Z(t)|Lk(t))=P(Z1(t),Z2(t),Z3(t),Z4(t),Z5(t)|Lk(t))の計算は、自律移動ロボットが状態Lk(t)である場合に位置計測センサ6iにおいて計測値Zi(t)が計測される確率P(Zi(t)|Lk(t))を用いて、例えば以下のように行う。
【0059】
P(Z(t)|Lk(t))=Πi=1P(Zi(t)|Lk(t))
ここで、状態Lk(t)において、P(Zi(t)|Lk(t))は、正規分布を用いて以下のように計算することができる。σsは位置計測センサ61,…,65の計測精度に応じて決定される。計測精度が高いほどσsは小さくなる。
【0060】
P(Zi(t)|Lk(t))=(1/((2π)1/2・σs))・exp(−r/2σs
r=(Zxi(t)−Xksi(t))+(Zyi(t)−Yksi(t))+(Zzi(t)−Zksi(t))
なお、状態Lk(t)=(Xgk(t),Ygk(t),Zgk(t),Φgk(t))における位置計測センサ6i(i=1,…,5)の位置(Xksi(t),Yksi(t),Zksi(t))は、Lk(t)から次のようにして求められる。
【0061】
Xksi(t)=Xgk(t)+Rsi・cos(Φgk(t)+Φsi)
Yksi(t)=Ygk(t)+Rsi・sin(Φgk(t)+Φsi)
Zksi(t)=Zgk(t)
【0062】
<ステップS5>
状態重み計算部8は、P(Z(t)|Lk(t))W’k(t)を和α(t)で割った値を計算して、時刻tの状態Lk(t)に対する重みWk(t)とする(ステップS5)。
【0063】
生成された重みWk(t)は、状態パーティクル記憶部1に送られて、状態Lk(t)と共に状態パーティクルSk(t)=(Lk(t),Wk(t))として状態パーティクル記憶部1に記憶される。
【0064】
<ステップS6>
変位量計算部9は、生成された時刻tの状態パーティクルSi(t)の状態Li(t)と、状態パーティクル記憶部1に記憶された時刻t−1の状態パーティクルSi(t−1)の状態Li(t−1)と、変位量パーティクル記憶部2に記憶された時刻t−1の変位量パーティクルSFi(t−1)の変位量Fi(t−1)のうち少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の変位量Fi(t)を計算する。計算された変位量Fi(t)は、変位量パーティクル記憶部2に送られて、後述するWFi(t)と共に変位量パーティクルSFi(t)=(Fi(t),WFi(t))として変位量パーティクル記憶部2に記憶される。
【0065】
変位量計算部9は、図2に例示するように、状態パーティクル選択部91、変位量パーティクル選択部92及び合成部93を含む。変位量計算部9は、例えば図7に例示するステップS61からステップS67により変位量Fi(t)を計算する。
【0066】
制御部15が変数kをk=1と初期化する(ステップS61)。
【0067】
状態パーティクル選択部91は、時刻t−1の状態パーティクルSi(t−1)から重みの値に比例した確率に従って1つの状態パーティクルを選択してSk(t−1)とする(ステップS62)。選択された状態パーティクルSk(t−1)は、合成部93及び変位量重み計算部10に送られる。
【0068】
また、状態パーティクル選択部91は、時刻tの状態パーティクルSi(t)から重みの値に比例した確率に従って1つの状態パーティクルを選択してSk(t)とする(ステップS63)。選択された状態パーティクルSk(t)は、合成部93及び変位量重み計算部10に送られる。
【0069】
変位量パーティクル選択部92は、時刻t−1の変位量パーティクルSFi(t−1)から重みの値に比例した確率に従って1つの変位量パーティクルを選択してSFk(t−1)とする(ステップS64)。選択された変位量パーティクルSFk(t−1)は、合成部93及び変位量重み計算部10に送られる。
【0070】
合成部93は、Sk(t)の状態Lk(t)からSk(t−1)の状態Lk(t−1)を減算したLk(t)−Lk(t−1)と、SFk(t−1)の変位量Fk(t−1)とを合成して、時刻tの変位量パーティクルSFk(t)の変位量Fk(t)を計算する(ステップS65)。例えば、以下の式に従って変位量Fk(t)を計算する。Aは、ローパスフィルタの係数であり、0<A≦1である。
【0071】
Fk(t)=A*(Lk(t)−Lk(t−1))+(1−A)*Fk(t−1)
制御部15は、k=Mかどうか判定する(ステップS66)。k=Mであれば、ステップS6を終えてステップS7に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS67)、ステップS62に戻る。
【0072】
<ステップS7>
変位量重み計算部10は、生成された時刻tの状態パーティクルSi(t)の重みWi(t)と、状態パーティクル記憶部1に記憶された時刻t−1の状態パーティクルSi(t−1)の重みWi(t−1)と、変位量パーティクル記憶部2に記憶された時刻t−1の変位量パーティクルSFi(t−1)の重みWFi(t−1)の少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の重みWFi(t)を計算する(ステップS7)。生成された重みWFi(t)は、変位量パーティクル記憶部2に送られて、Fi(t)と共に変位量パーティクルSFi(t)=(Fi(t),WFi(t))として変位量パーティクル記憶部2に記憶される。
【0073】
変位量重み計算部10は、図3に例示するように、合成部101及び正規化部102を含む。ステップS7は、変位量重み計算部10は、例えば図8に例示するステップS61からステップS67により変位量Fi(t)を計算する。
【0074】
制御部15が変数kをk=1と初期化する(ステップS71)。
【0075】
合成部101は、Sk(t−1)の重みWi(t−1)と、Sk(t)の重みWi(t)と、SFk(t−1)の重みWFi(t−1)とを広義単調増加関数F(Wi(t−1),Wi(t),WFi(t−1))に入力した値を計算して、仮重みWFi’(t)とする(ステップ)。例えば、関数Fは以下のように表される。
【0076】
F(Wi(t−1),Wi(t),WFi(t−1))=Wi(t−1)*Wi(t)*WFi(t−1)
【0077】
制御部15は、k=Mかどうか判定する(ステップS73)。k=Mであれば、ステップS75に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS74)、ステップS72に戻る。
【0078】
正規化部102は、αf=Σk=1WFk’(t)を計算する(ステップS75)。
【0079】
制御部15は、変数kをk=1と初期化する(ステップS76)。
【0080】
正規化部102は、WFk(t)=WFk’(t)/αfで定義される重みWFk(t)を計算する(ステップS77)。
【0081】
制御部15は、k=Mかどうか判定する(ステップS78)。k=Mであれば、ステップS8に進む。k=Mでなければ、変数kを1だけインクリメントしてk=k+1として(ステップS79)、ステップS77に戻る。
【0082】
<ステップS8>
状態推定部11は、状態Lk(t)の平均値を求めて、自律移動ロボットの状態の推定値とする。つまり、状態Lk(t)を重みWk(t)で重み付き加算して自律移動ロボットの状態の推定値を求める(ステップS8)。
【0083】
すなわち、自律移動ロボットの世界座標における時刻tのx方向の位置Xg(t)、y方向の位置Yg(t)、z方向の位置Zg(t)、方位角Φg(t)は、次のようにして求めることができる。
【0084】
Xg(t)=Σk=1Wk(t)Xgk(t)
Yg(t)=Σk=1Wk(t)Ygk(t)
Zg(t)=Σk=1Wk(t)Zgk(t)
Φg(t)=Σk=1Wk(t)Φgk(t)
【0085】
<ステップS9>
変位量推定部14は、変位量Fk(t)=(Fix(t),Fiy(t),Fiz(t),FiΦ(t))の平均値を求めて、自律移動ロボットの状態の推定値とする。つまり、変位量Fk(t)を重みWFk(t)で重み付き加算して自律移動ロボットの変位量の推定値を求める(ステップS9)。
【0086】
すなわち、自律移動ロボットの世界座標における時刻tのx方向の変位量Fx(t)、y方向の変位量Fy(t)、z方向の変位量Fz(t),旋回量FΦ(t)は、次のようにして求めることができる。
【0087】
Fx(t)=Σk=1WFk(t)Fkx(t)
Fy(t)=Σk=1WFk(t)Fky(t)
Fz(t)=Σk=1WFk(t)Fkz(t)
FΦ(t)=Σk=1WFk(t)FkΦ(t)
【0088】
これらは世界座標における変位量であるから、これらを機体座標値に変換し、変換後の各値を使用して、最小二乗法等の手法で、運動モデルの安定微係数及びVx(t),Vy(t),Vz(t),VΦ(t)を更新する。更新されたVx(t),Vy(t),Vz(t),VΦ(t)は、状態変位部5がステップS3において、P(Lk(t)|Lk(t−1),Fk(t−1))を計算するために用いられる。
【0089】
このように、変位量パーティクルを用いることにより、対象物に与えられる外乱を考慮して対象物の変位量を推定することが可能となり、対象物の状態の推定を高精度に行うことができる。
【0090】
なお、状態パーティクルSi(t)の初期値Si(0)は、最初に設定したM個のパーティクルを含む領域の中に位置計測センサ61,62,63,64,65の計測値が含まれているように設定することが望ましい。例えば、以下のように設定される。
【0091】
時刻t=0における位置計測センサ61,62,63,64,65の計測値の平均値(Xg,Yg,Zg)を中心とし(点対象に位置センサを配置しているので、平均を取るだけで重心位置がでる。)、位置計測センサ61,62,63,64,65の計測誤差をEsとしたときに、その平均値から距離Es以内の点をランダムにM個取ってくる。
【0092】
方位角については、範囲が0から360度で決まっているので、この範囲内でランダムに設定する。または、計測値の平均値(Xg,Yg,Zg)に自律移動ロボットの重心があると仮定し、各位置計測センサ61,62,63,64,65の計測値に基づいて、方位角を推定し、その推定された方位角±D(Dは予め定められた角度)の範囲内でランダムに設定する。計測値に基づく方位角の推定は、自律移動ロボットの重心と各位置計測センサ61,62,63,64,65の相対的な位置関係はわかっているので、各位置計測センサ61,62,63,64,65の実際の計測値と、自律移動ロボットの重心を(Xg,Yg,Zg)とした場合の各位置計測センサ61,62,63,64,65の位置との差が最小になるような方位角を計算する等が考えられる。
【0093】
[変形例等]
誘拐問題の発生をより効果的に防ぐために、以下のように誘拐度Eを計算して、誘拐問題が発生しているかどうかを判断してもよい。
【0094】
誘拐度計算部12(図1)は、qを自然数として、α(t),α(t−1),…,α(t−q)についての広義単調増加関数Eに、α(t),α(t−1),…,α(t−q)を入力した値E(α(t),α(t−1),…,α(t−q))を計算して、誘拐度とする(ステップS101、図4)。計算された誘拐度E(α(t),α(t−1),…,α(t−q))は、誘拐判定部13に送られる。
【0095】
例えば、関数E(α(t),α(t−1),…,α(t−q))=α(t),α(t−1),…,α(t−q)である。割引率γ(0<γ<1)を用いて、関数E(α(t),α(t−1),…,α(t−q))=α(t)+Σγα(t−1)としてもよい。
【0096】
誘拐判定部13は、誘拐度E(α(t),α(t−1),…,α(t−q))と所定の閾値αthとを比較する(ステップS102)。
【0097】
誘拐度Eが閾値αthよりも小さい場合には誘拐問題が発生している可能性が高いとして、状態変位部5に、先に時刻tの状態Lk(t)を選択したよりも上記変位させた状態に遠い状態が高い確率で選択されるように、時刻tの状態Lk(t)を再度選択させる。例えば、分散σx,σy,σz,σΦを大きくするために、定数Kx、Ky、Kz、KΦを大きな値に更新して(ステップS103)、確率関数P(Lk(t)|Lk(t−1),Fk(t−1))に基づいて状態Lk(t)を再度選択させればよい。
【0098】
このように、自律移動ロボットの変位量の想定値を大きくすることにより、自律移動ロボットのアクチュエータが与え得るよりも大きな加速度が風等の外乱によって自律移動ロボットに与えられた場合でも、誘拐問題を発生させずに状態の推定が可能となる。
【0099】
α(t)を基準として誘拐問題が発生しているかどうかを判断すると、実際には誘拐問題が発生していないにも関わらず、センサの計測値に一時的に大きな誤差が生じただけで、誘拐問題が発生していると判断してしまう可能性がある。α(t)ではなく、過去のαを考慮した誘拐度Eを基準にして誘拐問題が発生しているかどうかを判断することにより、このような可能性を小さくすることができる。
【0100】
変位量計算部9は、Aを0から1の数として、Fi(t)=A・Li(t)−(1−A)Li(t−1)(i=1,…,M)により変位量パーティクルSFi(t)を生成してもよい。この場合、変位量重み計算部10は、重みWFi(t)(i=1,…,M)を、例えばWFi(t)=Wi(t)とする。
【0101】
状態推定装置は、コンピュータによって実現することができる。この場合、この装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、これ装置における各処理機能が、コンピュータ上で実現される。
【0102】
この処理内容を記述した情報生成プログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、これらの装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【0103】
この発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で適宜変更が可能である。
【符号の説明】
【0104】
1 状態パーティクル記憶部
2 変位量パーティクル記憶部
3 状態パーティクル選択部
4 変位量パーティクル選択部
5 状態変位部
51 確率関数計算部
61,62,63,64,65 位置計測センサ
7 総和計算部
8 状態重み計算部
9 変位量計算部
91 状態パーティクル選択部
92 変位量パーティクル選択部
93 合成部
10 変位量重み計算部
101 合成部
102 正規化部
11 状態推定部
12 誘拐度計算部
13 誘拐判定部
14 変位量推定部
15 制御部

【特許請求の範囲】
【請求項1】
対象物の状態Li(t)とその状態Li(t)を取る可能性を示す指標である重みWi(t)との組を状態パーティクルSi(t)とし、
対象物の状態の変位量Fi(t)とその変位量Fi(t)を取る可能性を示す指標である重みWFi(t)との組を変位量パーティクルSFi(t)とし、
各時刻の複数の状態パーティクルを記憶する状態パーティクル記憶部と、
各時刻の複数の変位量パーティクルを記憶する変位量パーティクル記憶部と、
上記状態パーティクル記憶部に記憶された時刻t−1の複数の状態パーティクルから重みの値に比例した確率に従って時刻t−1のM個の状態パーティクルSk(t−1)(k=1,2,…,M)を選択する状態パーティクル選択部と、
上記変位量パーティクル記憶部に記憶された時刻t−1の複数の変位量パーティクルから重みの値に比例した確率に従って時刻t−1のM個の変位量パーティクルSFk(t−1)(k=1,2,…,M)を選択する変位量パーティクル選択部と、
各状態パーティクルSk(t−1)の状態Lk(t−1)を変位量Fk(t−1)に応じて変位させた状態を含む領域から、その変位させた状態に近い状態ほど高い確率で選択されるように時刻tの状態Lk(t)を選択する状態変位部と、
対象物が状態Lk(t)である場合に計測値Z(t)が計測される確率P(Z(t)|Lk(t))に予め定められた一時重みW’k(t)をかけた値の和α(t)=Σk=1P(Z(t)|Lk(t))W’k(t)を計算する総和計算部と、
上記P(Z(t)|Lk(t))W’k(t)を上記和α(t)で割った値を計算して、上記時刻tの状態Lk(t)に対する重みWk(t)とする状態重み計算部と、
上記生成された時刻tの状態パーティクルSi(t)の状態Li(t)と、上記状態パーティクル記憶部に記憶された時刻t−1の状態パーティクルSi(t−1)のLi(t−1)と、上記変位量パーティクル記憶部に記憶された時刻t−1の変位量パーティクルSFi(t−1)の変位量Fi(t−1)の少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の変位量Fi(t)を計算する変位量計算部と、
上記生成された時刻tの状態パーティクルSi(t)の重みWi(t)と、上記状態パーティクル記憶部に記憶された時刻t−1の状態パーティクルSi(t−1)の重みWi(t−1)と、上記変位量パーティクル記憶部に記憶された時刻t−1の変位量パーティクルSFi(t−1)の重みWFi(t−1)の少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の重みWFi(t)を計算する変位量重み計算部と、
複数の状態Lk(t)を重みWk(t)で重み付き加算して対象物の状態の推定値を求める状態推定部と、
を含む状態推定装置。
【請求項2】
請求項1に記載された状態推定装置において、
qを自然数として、α(t),α(t−1),…,α(t−q)についての広義単調増加関数Eに、α(t),α(t−1),…,α(t−q)を入力した出力値E(α(t),α(t−1),…,α(t−q))を計算する誘拐度計算部を更に含み、
誘拐度E(α(t),α(t−1),…,α(t−q))が予め定められた値よりも小さい場合には、上記状態変位部は、先に時刻tの状態Lk(t)を選択したよりも上記変位させた状態に遠い状態が高い確率で選択されるように、時刻tの状態Lk(t)を再度選択する、
ことを特徴とする状態推定装置。
【請求項3】
対象物の状態Li(t)とその状態Li(t)を取る可能性を示す指標である重みWi(t)との組を状態パーティクルSi(t)とし、
対象物の状態の変位量Fi(t)とその変位量Fi(t)を取る可能性を示す指標である重みWFi(t)との組を変位量パーティクルSFi(t)とし、
状態パーティクル記憶部には、各時刻の複数の状態パーティクルが記憶され、
変位量パーティクル記憶部には、各時刻の複数の変位量パーティクルが記憶されており、
状態パーティクル選択部が、上記状態パーティクル記憶部に記憶された時刻t−1の複数の状態パーティクルから重みの値に比例した確率に従って時刻t−1のM個の状態パーティクルSk(t−1)(k=1,2,…,M)を選択する状態パーティクル選択ステップと、
変位量パーティクル選択部が、上記変位量パーティクル記憶部に記憶された時刻t−1の複数の変位量パーティクルから重みの値に比例した確率に従って時刻t−1のM個の変位量パーティクルSFk(t−1)(k=1,2,…,M)を選択する変位量パーティクル選択ステップと、
状態変位部が、各状態パーティクルSk(t−1)の状態Lk(t−1)を変位量Fk(t−1)に応じて変位させた状態を含む領域から、その変位させた状態に近い状態ほど高い確率で選択されるように時刻tの状態Lk(t)を選択する状態変位ステップと、
総和計算部が、対象物が状態Lk(t)である場合に計測値Z(t)が計測される確率P(Z(t)|Lk(t))に予め定められた一時重みW’k(t)をかけた値の和α(t)=Σk=1P(Z(t)|Lk(t))W’k(t)を計算する総和計算ステップと、
状態重み計算部が、上記P(Z(t)|Lk(t))W’k(t)を上記和α(t)で割った値を計算して、上記時刻tの状態Lk(t)に対する重みWk(t)とする状態重み計算ステップと、
変位量計算部が、上記生成された時刻tの状態パーティクルSi(t)の状態Li(t)と、上記状態パーティクル記憶部に記憶された時刻t−1の状態パーティクルSi(t−1)のLi(t−1)と、上記変位量パーティクル記憶部に記憶された時刻t−1の変位量パーティクルSFi(t−1)の変位量Fi(t−1)の少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の変位量Fi(t)を計算する変位量計算ステップと、
変位量重み計算部が、上記生成された時刻tの状態パーティクルSi(t)の重みWi(t)と、上記状態パーティクル記憶部に記憶された時刻t−1の状態パーティクルSi(t−1)の重みWi(t−1)と、上記変位量パーティクル記憶部に記憶された時刻t−1の変位量パーティクルSFi(t−1)の重みWFi(t−1)の少なくとも1つを用いて、時刻tの変位量パーティクルSFi(t)の重みWFi(t)を計算する変位量重み計算ステップと、
状態推定部が、複数の状態Lk(t)を重みWk(t)で重み付き加算して対象物の状態の推定値を求める状態推定ステップと、
を含む状態推定方法。
【請求項4】
請求項1又は2に記載された状態推定装置の各部としてコンピュータを機能させるための状態推定プログラム。
【請求項5】
請求項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