(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0011】
以下、
図1を参照しながら、本発明の実施形態に係る自律移動装置について説明する。自律移動装置100は、用途に応じて自律的に移動する。この用途とは、例えば、警備監視用、屋内掃除用、ペット用、玩具用などである。
【0012】
自律移動装置100は、外観上、撮像部41、駆動部42を備える。
【0013】
撮像部41は、単眼の撮像装置(カメラ)を備える。撮像部41は、例えば、30fpsで画像(フレーム)を取得する。自律移動装置100は、撮像部41が逐次取得した画像に基づいて、自機位置と周囲環境とをリアルタイムに認識しながら、自律移動を行う。
【0014】
駆動部42は、独立2輪駆動型であって、車輪とモータとを備える移動手段である。自律移動装置100は、2つの車輪の同一方向駆動により前後の平行移動(並進移動)を、2つの車輪の逆方向駆動によりその場での回転(向き変更)を、2つの車輪のそれぞれ速度を変えた駆動により旋回移動(並進+回転(向き変更)移動)を、行うことができる。また、各々の車輪にはロータリエンコーダが備えられており、ロータリエンコーダで車輪の回転数を計測し、車輪の直径や車輪間の距離等の幾何学的関係を利用することで並進移動量及び回転量を計算できる。例えば、車輪の直径をD、回転数をR(ロータリエンコーダにより測定)とすると、その車輪の接地部分での並進移動量はπ・D・Rとなる。また、車輪の直径をD、車輪間の距離をI、右車輪の回転数をR
R、左車輪の回転数をR
Lとすると、向き変更の回転量は(右回転を正とすると)360°×D×(R
L−R
R)/(2×I)となる。この並進移動量や回転量を逐次足し合わせていくことで、駆動部42は、いわゆるオドメトリとして機能し、自機位置(移動開始時の位置及び向きを基準とした位置及び向き)を計測することができる。
【0015】
なお、車輪の代わりにクローラを備えるようにしても良いし、複数(例えば二本)の足を備えて足で歩行することによって移動を行うようにしても良い。これらの場合も、二つのクローラの動きや、足の動きに基づいて、車輪の場合と同様に自機の位置や向きの計測が可能である。
【0016】
図2に示すように、自律移動装置100は、撮像部41、駆動部42に加えて、制御部10、記憶部20、センサ部30、入力部43、通信部44、電源45、を備える。
【0017】
制御部10は、CPU(Central Processing Unit)等で構成され、記憶部20に記憶されたプログラムを実行することにより、後述する各部(特徴点取得部11、地図作成部12、位置推定部13、特徴点対応数取得部14、移動方向速度変更部15、移動方向速度決定部16)の機能を実現する。また、制御部10は、タイマー(図示せず)を備え、経過時間をカウントすることができる。
【0018】
記憶部20は、ROM(Read Only Memory)、RAM(Random Access Memory)等で構成され、画像記憶部21、地図記憶部22、特徴点対応数記憶部23、移動履歴記憶部24を含む。ROMには制御部10のCPUが実行するプログラム(例えば、後述するSLAM法の演算や自律移動制御処理に係るプログラム)や、プログラムを実行する上で予め必要なデータが記憶されている。RAMには、プログラム実行中に作成されたり変更されたりするデータが記憶される。
【0019】
画像記憶部21には、撮像部41が撮影した画像が記憶される。ただし、記憶容量の節約のために、撮影したすべての画像を記憶しなくてもよく、また画像自体ではなく、画像の特徴量を記憶するようにしても良い。重要な画像(後述するキーフレーム)については、画像の情報と共に、その画像を撮影した時の自機位置(自機の位置及び向き)の情報が記憶される。
【0020】
地図記憶部22には、後述するSLAM法や障害物センサ31からの情報に基づいて地図作成部12が作成した地図(特徴点や障害物の3次元位置の情報)が記憶される。
【0021】
特徴点対応数記憶部23には、後述する自機位置推定スレッドにおいて、撮像部41が撮影した画像の特徴点と、地図記憶部22に記憶されているMap点との対応数が記憶される。
【0022】
移動履歴記憶部24には、移動方向及び移動距離の履歴が記憶される。移動方向及び移動距離の代わりに、自機の3次元位置及び向きの履歴を記憶しても良い。移動履歴記憶部24は、後入れ先出しのスタックの記憶部になっている。
【0023】
センサ部30として、障害物センサ31を備える。障害物センサ31は、走行中の障害物を検知するセンサであって、例えば、赤外線センサ、超音波センサである。なお、独立した障害物センサ31を搭載せずに、撮像部41を用いて障害物を検知するようにしても良い。また、他の物体に衝突したことを検知するバンパーセンサー(図示せず)、動作を検出する角速度センサや加速度センサ(いずれも図示せず)等を備えても良い。
【0024】
入力部43として、自律移動装置100を操作するための操作ボタンを備える。操作ボタンは、例えば、電源ボタン、モード切替ボタン(掃除モード、ペットモード等を切り替える)、初期化ボタン(地図の作成をやり直しさせる)等を含む。入力部43として、音の入力を行うマイク(図示せず)と、自律移動装置100への操作指示の音声を認識する音声認識部を備えても良い。
【0025】
通信部44は、外部装置と通信するためのモジュールであり、外部装置と無線通信する場合にはアンテナを含む無線モジュールである。例えば、通信部44は、Bluetooth(登録商標)に基づく近距離無線通信を行うための無線モジュールである。通信部44では、自律移動装置100と外部とのデータの受け渡し等を行う。自律移動装置100に目的地を指示する際には、この通信部44を介して目的地の情報を伝える。
【0026】
電源45は、自律移動装置100を動作させる電源であり、一般的には内蔵された充電池であるが、太陽電池であっても良いし、床面から無線で電力供給されるシステムであっても良い。電源45が充電池の場合は、充電ステーション(ホームベース)に自律移動装置100がドッキングすることで充電される。
【0027】
次に、制御部10の機能について説明する。制御部10は、特徴点取得部11、地図作成部12、位置推定部13、特徴点対応数取得部14、移動方向速度変更部15、移動方向速度決定部16を含み、後述するSLAM法の演算や自律移動装置100の移動制御等を行う。また、制御部10は、マルチスレッド機能に対応しており、複数のスレッド(異なる処理の流れ)を並行して進めることができる。
【0028】
特徴点取得部11は、撮像部41が撮影した画像中の2D特徴点を取得する。2D特徴点とは画像中のエッジ部分など、画像内の特徴的な部分であり、SIFT(Scale−Invariant Future Transform)やSURF(Speed−Up Robust Features)等のアルゴリズムを用いて取得することができる。
【0029】
地図作成部12は、画像記憶部21に記憶されている画像の情報並びに該画像撮影時の自機の位置及び向きの情報に基づいてSLAM法を用いて推定された特徴点(Map点)の3次元位置や、障害物センサ31で障害物を検知したときの自機の位置及び向きの情報に基づいて得られた該障害物の3次元位置等を、地図の情報として地図記憶部22に記憶する。
【0030】
位置推定部13は、後述するSLAM法に基づいて、ビジュアルオドメトリとして、自機の位置及び向きを推定する。
【0031】
特徴点対応数取得部14は、特徴点取得部11が取得した特徴点と地図記憶部22に記憶されているMap点との対応数を取得する。
【0032】
移動方向速度変更部15は、特徴点対応数取得部14によって取得された特徴点対応数に基づいて、自機の移動速度を低下させたり、停止させたり、移動方向を変更させたりする。このようにすることによって、特徴点対応数を増やす。
【0033】
移動方向速度決定部16は、自機の移動速度や移動方向を決定する。ここで決定された移動速度や移動方向に基づいて移動するように、制御部10は駆動部42を制御する。なお、移動方向速度変更部15及び移動方向速度決定部16は移動制御部に相当する。
【0034】
自律移動装置100の自律移動制御処理のメインフローを
図3を参照して説明する。制御部10は、まず、移動状態変数に初期値である「通常」をセットし、前回履歴数に初期値である0をセットする(ステップS101)。移動状態変数と前回履歴数はいずれもステップS107の移動制御で使われる変数であり、詳細は移動制御の説明のところで述べる。次に、制御部10は、自機位置推定スレッドを起動する(ステップS102)。そして、地図作成スレッドを起動する(ステップS103)。次に、ループクロージングスレッドを起動する(ステップS104)。自機位置推定スレッドや地図作成スレッドが動作することで、SLAM法に基づいて、地図の情報及びビジュアルオドメトリ(地図と画像とを用いて推定した自機位置の情報)の生成が開始される。その後、制御部10は、動作終了かどうかを判定し(ステップS105)、動作終了なら(ステップS105;Yes)動作を終了し、動作終了でなければ(ステップS105;No)、障害物センサ31とビジュアルオドメトリを利用して地図の更新を行う(ステップS106)。
【0035】
次に制御部10は、自律移動するために駆動部42に動作指示を出す移動制御を行い(ステップS107)、ステップS105に戻る。ここでの自律移動は、地図を作成するために部屋の中をくまなく動き回るような移動の場合もあるし、目的地への移動指示を受けた場合等、指示された目的地への最短経路に沿った移動の場合もある。また、明確な目的地は指示されずにタスク(地図の再作成、掃除、ペット等)が指示されることにより、その時々で、周囲の状況と指示されたタスクに基づき目的地が設定される場合もある。
【0036】
このメインフローの処理により、地図の情報に基づいて自律的に移動を行いつつ、適宜地図の情報を更新することができる。典型的な例としては、自律移動装置100は最初、充電ステーションに置いてある状態で電源を投入すると、障害物センサ31を頼りとして、家の各部屋をくまなく移動し、障害物センサ31によって壁等の障害物位置を特定し、障害物位置を含む地図の情報を作成することができる。地図がある程度作成されると、地図の情報がまだないが移動可能と考えられる領域を知ることができ、その領域に自律的に移動する等して、より広範囲の地図の作成を促すこともできるようになる。そして、移動可能なほぼ全域の地図の情報が作成されれば、地図の情報を利用した効率的な移動動作が可能になる。例えば部屋のどの位置からでも最短経路で充電ステーションに戻ったり、効率的に部屋の掃除をしたりすることが可能になる。
【0037】
自律移動装置100のメインフロー(
図3)のステップS102で起動される自機位置推定スレッドについて、
図4を参照して説明する。このスレッドは、位置推定部13が、最初に初期化処理を行い、その後自機位置推定(撮像部41で取得した画像を用いてビジュアルオドメトリにより自機位置を推定する)を続ける処理である。
【0038】
位置推定部13は、まず、推定状態変数に「初期化中」をセットする(ステップS201)。推定状態変数は、その時点の自機位置推定処理の状態を示し、「初期化中」「追跡成功」「追跡失敗」の三つの値を取る。次に、動作終了か否かを判定する(ステップS202)。動作終了なら(ステップS202;Yes)終了し、動作終了でないなら(ステップS202;No)、推定状態変数が「初期化中」であるか否かを判定する(ステップS203)。初期化中でないなら(ステップS203;No)ステップS221以降の自機位置推定処理を行い、初期化中なら(ステップS203;Yes)ステップS204に進んで初期化処理を行う。まず初期化処理について説明する。
【0039】
初期化処理では位置推定部13はまずフレームカウンタNに−1をセットし(ステップS204)、撮像部41で画像を取得する(ステップS205)。画像は例えば30fpsで取得することができる(取得した画像はフレームとも呼ばれる)。次に、特徴点取得部11は、撮像部41で取得した画像に含まれている2D特徴点を取得する(ステップS206)。
【0040】
取得した2D特徴点の個数が少ないと、後述するTwo−view Structure from Motion法での計算ができないため、位置推定部13は、2D特徴点の取得数と基準値(例えば10個)とを比較し(ステップS207)、基準値未満だった場合(ステップS207;No)はステップS205に戻り、基準値以上の2D特徴点数が得られるまで、画像の取得と2D特徴点の取得とを繰り返す。なお、この時点ではまだ地図の情報は作成できていないが、例えば上述した典型的な例では、障害物センサ31を頼りとして、家の各部屋をくまなく移動し始めているため、この初期化処理で画像取得と2D特徴点取得を繰り返していれば、移動しながら画像取得を繰り返すことになる。従って、様々な画像が取得でき、いずれは2D特徴点数が多い画像を取得できることが期待できる。
【0041】
2D特徴点の取得数が基準値以上だった場合は(ステップS207;Yes)、位置推定部13はフレームカウンタNをインクリメントする(ステップS208)。そして、フレームカウンタNが0かどうかを判定する(ステップS209)。フレームカウンタNが0なら(ステップS209;Yes)画像をまだ一つしか取得していないということになるので、2枚目の画像を取得するためにステップS205に戻る。なお
図4のフローチャートでは記載していないが、1枚目の画像を取得した時の自機の位置と2枚目の画像を取得する時の自機の位置とがある程度離れていた方が、これ以降の処理で推定する姿勢の精度が向上する。そこで、ステップS209からステップS205に戻る際に、メインフロー(
図3)のステップS107での移動制御によりオドメトリによる並進距離が所定の距離(例えば1m)以上となるまで待ってからステップS205に戻るようにしても良い。
【0042】
フレームカウンタNが0でないなら(ステップS209;No)二つの画像を取得したことになるので、位置推定部13は、これら二つの画像間で2D特徴点の対応(実環境上の同一の点がそれぞれの画像中に存在し、その対応が取れるもの)を取得する(ステップS210)。ここで特徴点の対応数が5未満であれば、後述する二つの画像間の姿勢の推定ができないため、位置推定部13は特徴点の対応数が5未満かどうかを判定する(ステップS211)。5未満であれば(ステップS211;Yes)初期画像を取得し直すために、ステップS204に戻る。特徴点の対応数が5点以上であれば(ステップS211;No)、後述するTwo−view Structure from Motion法を用いることで、二つの画像間の姿勢(それぞれの画像を取得した位置の差分(並進ベクトルt)及び向きの差分(回転行列R))を推定することができる(ステップS212)。
【0043】
この、Two−view Structure from Motion法による姿勢の推定は、具体的には、対応する特徴点から基礎行列Eを求め、基礎行列Eを並進ベクトルtと回転行列Rとに分解することによって行う(詳細は非特許文献2を参照)。なお、ここで得られる並進ベクトルt(3次元空間内で移動することを想定すると、最初の画像を取得した位置を原点として、X,Y,Zの3要素を持つ)の各要素の値は実環境上での値とは異なる(Two−view Structure from Motion法では実環境上の値自体を得ることはできず、実環境と相似する空間上での値を得ることになる。)ため、これらをSLAM空間上での値とみなし、以下ではSLAM空間上での座標(SLAM座標)を用いて説明する。
【0044】
二つの画像間の姿勢(並進ベクトルt及び回転行列R)が求まると、その値は、最初の画像を基準(最初の画像を取得した位置をSLAM座標の原点、並進ベクトルは0ベクトル、回転行列は単位行列Iとする。)にした場合の、二枚目の画像の姿勢(二つ目の画像を取得した時の自機の位置(並進ベクトルt)及び向き(回転行列R))となる。ここで、二つの画像それぞれの姿勢(該画像(フレーム)撮影時の自機の位置(並進ベクトルt)及び向き(回転行列R)で、フレーム姿勢とも言う。)が求まっている場合、その二つの画像間で対応が取れている2D特徴点(対応特徴点)のSLAM座標での3D位置を、以下の考え方に基づき、地図作成部12が求める(ステップS213)。
【0045】
2D特徴点の画像中の座標(フレーム座標:既知)を(u,v)とし、その2D特徴点のSLAM座標での3D位置(未知)を(X,Y,Z)とすると、これらを同次座標で表したときのこれらの関係は、透視投影行列Pを用いて下記の式(1)で表される。ここで、「〜」記号は「非零の定数倍を除いて等しい」(つまり、等しいか又は定数(非零)倍になっている)ことを表し、「’」記号は「転置」を表す。
(u v 1)’〜P(X Y Z 1)’…(1)
【0046】
上記の式(1)において、Pは3×4の行列で、カメラの内部パラメータを示す3×3の行列Aと、その画像の姿勢(フレーム姿勢)を示す外部パラメータR及びtから以下の式(2)で表される。ここで、(R|t)は、回転行列Rの右に並進列ベクトルtを並べた行列を表す。
P=A(R|t)…(2)
【0047】
上記の式(2)において、R及びtは上述したようにそのフレーム姿勢として求められている。また、カメラの内部パラメータAは、焦点距離と撮像素子サイズにより決まるので、撮像部41を決めておけば定数となる。
【0048】
二つの画像間で対応が取れている2D特徴点のうちの一つが、一つ目の画像のフレーム座標(u
1,v
1)と、二つ目の画像のフレーム座標(u
2,v
2)に写っているとすると、以下の式(3)及び式(4)ができる。ここで、Iは単位行列、0はゼロベクトル、(L|r)は、行列Lの右に列ベクトルrを並べた行列を表す。
(u
1 v
1 1)’〜A(I|0)(X Y Z 1)’…(3)
(u
2 v
2 1)’〜A(R|t)(X Y Z 1)’…(4)
【0049】
上記の式(3)及び式(4)において、u
1,v
1,u
2,v
2それぞれについての式ができるため、式は4つできるが、未知数はX,Y,Zの3つなので、X,Y,Zを求めることができ、これがその2D特徴点のSLAM座標における3D位置となる。なお、式の個数の方が未知数の個数よりも多いため、例えばu
1,v
1,u
2で求めたX,Y,Zとu
1,v
1,v
2で求めたX,Y,Zとが異なる場合がありうる。このような場合は、過剰条件の連立一次方程式となり、一般には解が存在しないが、地図作成部12は、最小二乗法を用いて、最も確からしいX,Y,Zを求める。
【0050】
2D特徴点のSLAM座標における3D位置(X,Y,Z)が求まったら、それをMap点として、地図作成部12がMap点データベース(Map点DB(Database)とも言い、地図記憶部22に格納される)に登録する(ステップS214)。Map点データベースに登録する要素としては、少なくとも、「2D特徴点のSLAM座標における3D位置であるX,Y,Z」と、「その2D特徴点の特徴量」(例えばSIFT等で得た特徴量)が必要である。
【0051】
そして、地図作成部12は、二つの画像間で対応が取れている2D特徴点(対応特徴点)の全てをMap点データベースに登録したかを判定し(ステップS215)、まだ全ての登録ができていなかったら(ステップS215;No)ステップS213に戻り、全て登録できたら(ステップS215;Yes)ステップS216に進む。
【0052】
そして、位置推定部13は、キーフレーム(後に続くスレッドでの処理対象となる画像を指す)のカウンタNKFを0に初期化し(ステップS216)、二つ目の画像をキーフレームとしてフレームデータベース(フレームDBとも言い、画像記憶部21に格納される)に登録する(ステップS217)。
【0053】
フレームデータベースに登録する要素は、「キーフレーム番号」(登録時点でのキーフレームカウンタNKFの値)、「姿勢」(その画像撮影時の自機のSLAM座標内での位置(並進ベクトルt)及び向き(回転行列R))、「抽出した全ての2D特徴点」、「全ての2D特徴点の中でMap点として3D位置が既知の点」、「キーフレーム自体の特徴」、であるが、これらに加えて「オドメトリで計測した実環境上での姿勢」(実環境での駆動部42による移動距離に基づいて求められる自機の位置及び向き)も登録しても良い。
【0054】
上記中、「キーフレーム自体の特徴」とは、キーフレーム間の画像類似度を求める処理を効率化するためのデータであり、通常は画像中の2D特徴点のヒストグラム等を用いるのが良いが、画像自体を「キーフレーム自体の特徴」としても良い。また、「オドメトリで計測した実環境上での姿勢」は、並進ベクトルtと回転行列Rとで表すこともできるが、通常、本自律移動装置100は2次元平面上を動くので、2次元データに単純化して、移動開始時の位置(原点)及び向きを基準にした2次元座標(X,Y)及び向きφとして表しても良い。
【0055】
次に、位置推定部13は、キーフレームが生成された事を地図作成スレッドに知らせるために、地図作成スレッドのキーフレームキュー(キュー(Queue)は、先入れ先出しのデータ構造になっている)に、キーフレームカウンタNKFをセットする(ステップS218)。
【0056】
以上で自機位置推定スレッドの初期化処理が完了したので、位置推定部13は、推定状態変数に「追跡成功」をセットし(ステップS219)、SLAM座標と実環境座標とのスケール対応を得るために、オドメトリによる並進距離(実環境での座標で求められる)を、上記の処理で推定したSLAM座標での並進距離dで除することによって、スケールSを求める(ステップS220)。
【0057】
そして、ステップS202、ステップS203を経由して、初期化済の場合の処理であるステップS221へ進む。
【0058】
初期化済の場合の処理を説明する。この処理が、自機位置推定スレッドの通常時の処理であり、位置推定部13が、逐次、現在の自機の位置及び向き(SLAM座標内での並進ベクトルtと回転行列R)を推定する処理である。
【0059】
まず、位置推定部13は、撮像部41で画像を撮影し(ステップS221)、フレームカウンタNをインクリメントする(ステップS222)。そして、特徴点取得部11は、撮像部41で撮影した画像に含まれている2D特徴点を取得する(ステップS223)。
【0060】
次に、位置推定部13は、推定状態変数が「追跡成功」か否かを判定する(ステップS224)。「追跡成功」なら(ステップS224;Yes)、特徴点対応数取得部14は、フレームデータベースに登録されている一つ前のキーフレーム(キーフレーム番号がNKFである画像)の情報から、その画像の情報に含まれている2D特徴点のうち、3D位置が既知である(Map点データベースに登録されているMap点になっている)2D特徴点を取得して、その中でステップS223で取得した特徴点と対応が取れる2D特徴点(対応特徴点)の個数(特徴点対応数)を取得し、特徴点対応数記憶部23に記憶する(ステップS225)。
【0061】
推定状態変数の値が「追跡成功」でないなら(ステップS224;No)、特徴点対応数取得部14は、フレームデータベースに登録されている二つ以上前のキーフレーム(キーフレーム番号がNKF未満である画像)の中から、Map点とステップS223で取得した特徴点との対応数が最大となるキーフレームと、その特徴点対応数を取得し、特徴点対応数記憶部23に記憶する(ステップS226)。
【0062】
そして、位置推定部13は、特徴点対応数が閾値(例えば30。以下「基準対応特徴点数」という。)より大きいか否かを判定し(ステップS227)、基準対応特徴点数以下の場合(ステップS227;No)はSLAM法で推定する姿勢の精度が悪くなるので、推定状態変数に「追跡失敗」をセットし(ステップS230)、位置の推定は行わずにステップS202に戻る。
【0063】
特徴点対応数が基準対応特徴点数より大きい場合は(ステップS227;Yes)、ステップS225又はステップS226において特徴点対応数を取得したキーフレームの近傍のキーフレーム(特徴点対応数を取得したキーフレームと、所定の割合以上(例えば30%以上)特徴点の重なりが存在するキーフレーム)に含まれるMap点と対応が取れるステップS223で取得した特徴点(対応特徴点)の個数(特徴点対応数)を特徴点対応数取得部14が取得し、特徴点対応数記憶部23に記憶する(ステップS228)。
【0064】
そして、位置推定部13は、特徴点対応数が閾値(例えば50。以下「第2の基準対応特徴点数」という。)より大きいか否かを判定し(ステップS229)、第2の基準対応特徴点数以下なら(ステップS229;No)、推定状態変数に「追跡失敗」をセットし(ステップS230)、位置の推定は行わずにステップS202に戻る。特徴点対応数が第2の基準対応特徴点数よりも大きければ(ステップS229;Yes)、ステップS231に進む。
【0065】
ステップS231では、位置推定部13は、推定状態変数に追跡成功をセットする(ステップS231)。位置推定部13は、ステップS228で取得した対応特徴点それぞれの3D位置(X
i,Y
i,Z
i)をMap点データベースから取得し、ステップS221で取得した画像に含まれている対応特徴点との対応関係を用いて、現在の自機の姿勢(並進ベクトルt及び回転行列Rで表される自機の位置及び向き)を推定する(ステップS232)。
【0066】
この自機の姿勢の推定方法について、補足説明する。ステップS221で取得した画像に含まれている対応特徴点のフレーム座標を(u
i,v
i)とし、その対応特徴点の3D位置を(X
i,Y
i,Z
i)とする(iは1から特徴点対応数までの値を取る)と、各対応特徴点の3D位置(X
i,Y
i,Z
i)を以下の式(5)によってフレーム座標系に投影した値(ux
i,vx
i)とフレーム座標(u
i,v
i)とは理想的には一致するはずである。
(ux
i vx
i 1)’〜A(R|t)(X
i Y
i Z
i 1)’…(5)
【0067】
しかし、実際には(X
i,Y
i,Z
i)にも(u
i,v
i)にも誤差が含まれているため、(ux
i,vx
i)と(u
i,v
i)とが一致することはめったにない。そして、未知数はRとt(3次元空間ではそれぞれ3次元となり、3+3=6が未知数の個数である)だけなのに、数式は対応特徴点の個数の2倍存在する(対応特徴点一つに対して、フレーム座標のu,vそれぞれに対する式が存在するため)ことになるため、過剰条件の連立一次方程式になり、上述したように最小二乗法で求めることになる。具体的には、位置推定部13は、以下の式(6)のコスト関数E1を最小化する姿勢(並進ベクトルt及び回転行列R)を求めることになる。これがSLAM法で求めたSLAM座標での自機の姿勢(並進ベクトルt及び回転行列Rで表される自機の位置及び向き)となる。このようにして、位置推定部13は自機の姿勢を推定する(ステップS232)。
【数1】
【0068】
SLAM座標での現在の自機の姿勢(並進ベクトルt及び回転行列R)が求められたので、位置推定部13は、これにスケールSを乗算することで、VO(ビジュアルオドメトリ)を求める(ステップS233)。VOは実環境での自機の位置及び向きとして利用できる。
【0069】
次に、位置推定部13は、フレームDBに登録されている直前のキーフレーム(キーフレーム番号がNKFである画像)を撮影した時の自機の位置から所定の距離(例えば1m。以下「基準並進距離」という。)以上移動しているかを判定し(ステップS234)、移動しているなら(ステップS234;Yes)キーフレームカウンタNKFをインクリメントしてから(ステップS235)、現フレームをキーフレームとしてフレームDBに登録する(ステップS236)。基準並進距離未満しか移動していないなら(ステップS234;No)ステップS202に戻る。
【0070】
ここで、基準並進距離と比較する自機の移動距離は、直前のキーフレームから現フレームまでの並進距離(両フレームの並進ベクトルの差のベクトルの絶対値(要素の二乗和の平方根))をオドメトリから取得しても良いし、上述したVOから求めても良い。フレームDBに登録する内容は上述したように、「キーフレーム番号」、「姿勢」、「抽出した全ての2D特徴点」、「全ての2D特徴点の中でMap点として3D位置が既知の点」、「キーフレーム自体の特徴」、である。
【0071】
そして、位置推定部13は、新たなキーフレームが発生したことを地図作成スレッドに知らせるために、地図作成スレッドのキーフレームキューにキーフレームカウンタNKFをセットする(ステップS237)。そして、ステップS202に戻る。なお、キーフレームカウンタNKF、スケールS、Map点DB、フレームDB、特徴点対応数はスレッドをまたいで値を参照することができるように記憶部20に記憶されている。
【0072】
次に、自律移動装置100のメインフロー(
図3)のステップS103で起動される地図作成スレッドについて、
図5を参照して説明する。このスレッドは地図作成部12が、キーフレーム中の対応特徴点の3D位置を計算して、地図の情報(Map点DB)を作成している。
【0073】
まず、地図作成部12は、動作終了かを判定する(ステップS301)。動作終了なら(ステップS301;Yes)終了し、動作終了でないなら(ステップS301;No)、キーフレームキューが空かどうかを判定する(ステップS302)。キーフレームキューが空だったら(ステップS302;Yes)ステップS301に戻り、空でなければ(ステップS302;No)、キーフレームキューからデータを取り出してMKF(地図作成スレッドで処理するキーフレームのキーフレーム番号を表す変数)にセットする(ステップS303)。地図作成部12は、MKFが0より大きいか判定し(ステップS304)、MKFが0である場合は(ステップS304;No)ステップS301に戻ってキーフレームキューにデータが入るのを待つ。MKFが1以上の場合は(ステップS304;Yes)、以下の処理に進む。
【0074】
地図作成部12は、フレームDBを参照し、前キーフレーム(キーフレーム番号がMKF−1のキーフレーム)の2D特徴点と現キーフレーム(キーフレーム番号がMKFのキーフレーム)の2D特徴点とで対応が取れる2D特徴点(対応特徴点)を抽出する(ステップS305)。フレームDBにはそれぞれのキーフレームの姿勢(並進ベクトルtと回転行列R)も登録されているので、自機位置推定スレッドの初期化時の処理の時と同様の方法で対応特徴点の3D位置を計算できる。地図作成部12は、3D位置が計算できた対応特徴点をMap点としてMap点DBに登録する(ステップS306)。地図作成部12は、フレームDB中の他のキーフレームに対しても今回3D位置を計算できた2D特徴点に対して3D位置を登録する(ステップS307)。
【0075】
なお、地図作成部12が抽出した対応特徴点がすでにMap点DBに登録済だった場合は、3D位置計算をスキップして次の対応特徴点(Map点DBに未登録のもの)に対する処理に進んでも良いし、改めて3D位置計算を行って、Map点DBに登録済の3D位置や、フレームDB中の対応特徴点に対する3D位置を更新するようにしても良い。
【0076】
次に、地図作成部12は、キーフレームキューが空かどうかを判定する(ステップS308)。空であれば(ステップS308;Yes)、全キーフレームの姿勢と全Map点の3D位置に対して、バンドルアジャストメント処理を行って、精度向上を図る(ステップS309)。そして、バンドルアジャストメント処理を行った結果、誤差が大きいMap点が見つかったら、それをMap点DBから削除し(ステップS310)、ステップS311に進む。キーフレームキューが空でなければ(ステップS308;No)、何もせずにステップS311に進む。
【0077】
ステップS311では、地図作成部12は、ループクロージングスレッドのキーフレームキューにMKFをセットして(ステップS311)、ステップS301に戻る。
【0078】
なお、バンドルアジャストメント処理とは、カメラ姿勢(キーフレーム姿勢)とMap点の3D位置とを同時に推定する非線形最適化法であり、Map点をキーフレーム上に投影させたときに発生する誤差が最小になるような最適化を行うものである。
【0079】
このバンドルアジャストメントの処理を行うことで、キーフレーム姿勢とMap点の3D位置の精度向上を図ることができる。しかし、この処理を行わなくても精度向上が図れないだけで特別問題が発生するわけではない。したがって、他の処理がない状態のとき(例えば、キーフレームキューが空の状態)であっても、この処理を毎回行う必要はない。
【0080】
また、バンドルアジャストメントの処理を行うと、キーフレーム上に投影させたときの誤差が所定の値よりも大きいMap点が見つかることがある。このような誤差の大きなMap点については、SLAM推定に悪影響を及ぼすため、ステップS310ではMap点DBから削除している。なお、Map点DBから削除するのではなく、Map点DBにおいて、誤差の大きな注意を要するMap点であることを識別するためのフラグを立てておいても良い。
【0081】
次に自律移動装置100のメインフロー(
図3)のステップS104で起動されるループクロージングスレッドについて、
図6を参照して説明する。このスレッドでは制御部10は、ループクロージング処理ができるかどうかをチェックし続け、ループクロージング処理ができる場合にはループクロージング処理を行っている。なお、ループクロージング処理とは、以前来たことのある同じ場所に戻ってきたことを認識した場合に、以前この同じ場所にいた時の姿勢の値と現在の姿勢の値とのずれを用いて、以前来た時から今までの軌跡中のキーフレームや、関連するMap点の3D位置を修正することをいう。
【0082】
まず、制御部10は、動作終了かを判定する(ステップS401)。動作終了なら(ステップS401;Yes)終了する。動作終了でないなら(ステップS401;No)キーフレームキューが空かどうかを判定する(ステップS402)。キーフレームキューが空なら(ステップS402;Yes)ステップS401に戻り、キーフレームキューが空でないなら(ステップS402;No)、キーフレームキューからデータを取り出してLKF(ループクロージングスレッドで処理するキーフレームのキーフレーム番号を表す変数)にセットする(ステップS403)。次に制御部10は、LKFが1より大きいかを判定する(ステップS404)。LKFが0又は1である場合(ステップS404;No)はステップS401に戻ってキーフレームキューにデータが入るのを待つ。そして、LKFが2以上の場合(ステップS404;Yes)は、以下の処理を行う。
【0083】
制御部10は、フレームDBを参照し、現キーフレーム(キーフレーム番号がLKFのキーフレーム)と「キーフレーム自体の特徴」の類似度が所定の類似度(例えば0.9。以下「基準画像類似度」という。)以上になるキーフレームをフレームDBから検索する(ステップS405)。ここで、この類似度は、画像(キーフレーム)の特徴を特徴ベクトルで表している場合は、二つの画像の特徴ベクトルの絶対値(要素の二乗和の平方根)を1に正規化したもの同士の内積を、その二つの画像の類似度とすることができる。また、二つの画像の特徴ベクトル(絶対値を1に正規化したもの)の距離(各要素の差の二乗和の平方根)の逆数を類似度としても良い。
【0084】
制御部10は、「キーフレーム自体の特徴」の類似度が基準画像類似度以上になるキーフレームが発見されたかどうかを判定し(ステップS406)、発見されなければ(ステップS406;No)ステップS401へ戻り、発見されたら(ステップS406;Yes)、発見されたキーフレームから現キーフレームまでの軌跡中のキーフレームの姿勢と、軌跡中のキーフレームに含まれるMap点の3D位置を修正する(ステップS407)。例えば、制御部10は、現キーフレームの姿勢を、発見されたキーフレームの姿勢と同じ姿勢として修正する。そして、発見されたキーフレームの姿勢と現キーフレームの姿勢との差分を用いて、発見されたキーフレームから現キーフレームまでの軌跡中の各キーフレームの姿勢に線形的に補正を加える。さらにこれらの各キーフレームに含まれるMap点の3D位置についても各キーフレームの姿勢の補正量に応じて修正する。そしてステップS401に戻る。
【0085】
次に自律移動装置100のメインフロー(
図3)のステップS107の処理である移動制御について説明する。これは、基本的には自律的に目的地へ移動するために駆動部42に動作指示を出すが、特徴点対応数が少なくなると、速度を低下させたり、停止させたり、移動方向を変更させたりすることによって、特徴点対応数を増やす処理である。
【0086】
なお、移動制御の処理において、
図3のステップS101で簡単に説明した移動状態変数と前回履歴数の二つの変数が使われるので、補足説明しておく。移動状態変数は、「通常」「低速度」「停止」「戻り」のいずれかの値を持ち、移動速度や移動方向の変更に用いられる。前回履歴数は、移動履歴記憶部24に記憶された移動履歴の個数がセットされ、後述する「戻り」の移動後に、別の目的地を設定するか否かを決定する際に使われる。
【0087】
では、移動制御について、
図7を参照して説明する。まず、移動方向速度変更部15は、移動状態変数の値が「戻り」であるか否かを判定する(ステップS501)。移動状態変数の値が「戻り」であるなら(ステップS501;Yes)、ステップS519へ進む。ステップS519以降の処理は後述する。
【0088】
移動状態変数の値が「戻り」でなければ(ステップS501;No)、移動方向速度変更部15は目的地が未設定であるか又は目的地に到着したかを判定する(ステップS502)。目的地が未設定であるか又は目的地に到着したならば(ステップS502;Yes)、制御部10は、目的地を設定し(ステップS503)、ステップS504へ進む。ステップS503において、制御部10は目的地設定部に相当する。目的地が設定されており、かつ、まだ目的地に到着していなければ(ステップS502;No)、ステップS504へ進む。
【0089】
ステップS504では、移動方向速度決定部16は、現在位置、目的地及び地図記憶部22に記憶されている地図の情報に基づき、移動方向を決定する(ステップS504)。
【0090】
次に、移動方向速度変更部15は、特徴点対応数記憶部23に記憶されている特徴点対応数が第1移動変更閾値(例えば100)よりも大きいか否かを判定する(ステップS505)。第1移動変更閾値よりも大きければ(ステップS505;Yes)、移動状態変数に「通常」をセットし(ステップS506)、ステップS509へ進む。
【0091】
移動方向速度変更部15は、特徴点対応数記憶部23に記憶されている特徴点対応数が第1移動変更閾値以下であれば(ステップS505;No)、特徴点対応数が第2移動変更閾値(例えば30)よりも大きいか否かを判定する(ステップS507)。第2移動変更閾値よりも大きければ(ステップS507;Yes)、移動状態変数に「低速度」をセットし(ステップS508)、ステップS509へ進む。なお、第1移動変更閾値と第2移動変更閾値はともに数十以上の任意の値を設定できるが、第1移動変更閾値は第2移動変更閾値よりも大きな値に設定しておく。
【0092】
ステップS509で、移動方向速度決定部16は、ステップS504で決定した移動方向と、移動状態変数の値が示す速度から得られる移動距離と、を移動履歴記憶部24に記憶する。なお、移動方向及び移動距離の代わりに、自機位置推定スレッドで取得している自機の姿勢(位置(並進ベクトルt)及び向き(回転行列R))を移動履歴記憶部24に記憶していくようにしてもよい。
【0093】
そして、移動方向速度決定部16は、ステップS504で決定した移動方向と、移動状態変数の値が示す速度に基づいて、駆動部42を駆動させ(ステップS510)、処理を終了する。
【0094】
特徴点対応数記憶部23に記憶されている特徴点対応数が第2
移動変更閾値以下なら(ステップS507;No)、移動方向速度変更部15は、移動状態変数の値が「停止」であるか否かを判定する(ステップS511)。移動状態変数の値が「停止」でなければ(ステップS511;No)、移動状態変数に「停止」をセットし(ステップS512)、制御部10が備えるタイマーのカウントを開始させ(ステップS513)、終了する。
【0095】
移動状態変数の値が「停止」であるなら(ステップS511;Yes)、移動方向速度変更部15は、ステップS513でスタートさせたタイマーの値が基準停止時間(例えば10秒)よりも大きくなっているかを判定する(ステップS514)。タイマーの値が基準停止時間以下であれば(ステップS514;No)、終了する。
【0096】
タイマーの値が基準停止時間よりも大きければ(ステップS514;Yes)、移動方向速度変更部15は、動作状態変数に「戻り」をセットし(ステップS515)、その時点で移動履歴記憶部24に記憶されている履歴の個数が、前回履歴数より大きいか否かを判定する(ステップS516)。移動履歴記憶部24に記憶されている履歴の個数が、前回履歴数より大きいなら(ステップS516;Yes)、終了する。
【0097】
移動履歴記憶部24に記憶されている履歴の個数が、前回履歴数以下なら(ステップS516;No)、制御部10は、前回履歴数に、移動履歴記憶部24に記憶されている履歴の個数をセットし(ステップS517)、別の目的地を設定する(ステップS518)。ステップS518において、制御部10は、目的地変更部に相当する。ステップS518の後、終了する。
【0098】
ステップS501で動作状態変数が「戻り」だった場合は(ステップS501;Yes)、移動方向速度決定部16は、移動履歴記憶部24に最後に記憶された移動方向と逆の方向を次の移動時の移動方向に決定し、移動履歴記憶部24に最後に記憶された移動距離を次の移動時の移動距離に決定する(ステップS519)。もし、移動履歴記憶部24に記憶されている情報が自機の位置及び向きであった場合は、移動方向速度決定部16は、現在位置から移動履歴記憶部24に最後に記憶された自機の位置及び向きに戻るための移動方向及び移動距離を次の移動時の移動方向及び移動距離に決定する(ステップS519)。
【0099】
次に、移動方向速度変更部15は、所定の数の履歴を戻ったか否かを判定するために、前回履歴数からその時点で移動履歴記憶部24に記憶されている履歴の個数を引いた数が、所定戻り数(例えば10)以上か否かを判定する(ステップS520)。所定戻り数未満であれば(ステップS520;No)、まだ「戻り」の移動を継続するために、そのままステップS522に進む。
【0100】
所定戻り数以上であれば(ステップS520;Yes)、「戻り」の移動を終了させるために、動作状態変数に「通常」をセットし(ステップS521)、ステップS522に進む。
【0101】
ステップS522では、移動方向速度変更部15は、移動履歴記憶部24に最後に記憶された移動履歴を削除する(ステップS522)。そして、移動方向速度決定部16は、ステップS504で決定した移動方向と、移動状態変数の値が示す速度に基づいて、駆動部42を駆動させ(ステップS510)、処理を終了する。
【0102】
ステップS503における目的地の設定は、例えば、通信部44により目的地の情報を取得して設定する。この時、通信部44は目的地取得部に相当する。また、ステップS518における別の目的地の設定も、例えば、通信部44により別の目的地の情報を取得して設定する。
【0103】
以上の処理がメインフロー(
図3)に示すステップS107の移動制御処理として何度も繰り返し実行されることで、自律移動装置100が停止したり、戻ったりする様子を、
図8を参照して具体例で説明する。特徴点対応数が第2移動変更閾値よりも大きければ目的地に向かって移動を続ける(
図8の1.ステップS506又はステップS508)。特徴点対応数が第2移動変更閾値以下になったら停止する(
図8の2.ステップS512)。
【0104】
停止している間にバックグラウンドで動いている地図作成スレッドにより、Map点データベースへのMap点の登録が継続して行われているため、これによって特徴点対応数が第2移動変更閾値よりも大きくなれば、また移動が再開する(ステップS514;Noで終了した後、それ以後の移動制御のステップS506又はステップS508)。しかし、基準停止時間だけ停止していても特徴点対応数が第2移動変更閾値以下のままであったら、所定戻り数だけ戻る(
図8の3.ステップS515、ステップS520)。なお、
図8では、所定戻り数を2としている。
【0105】
所定戻り数だけ戻ると再度目的地に向かって移動する(
図8の4.)。再度目的地に向かっている最中に特徴点対応数が第2移動変更閾値よりも大きい状態が続いていれば、そのまま移動を続ける(
図8の5.ステップS506又はステップS508)。しかし、前回進んだ履歴よりも進まなかった場合には、その目的地に移動しようとしても特徴点対応数が少なくて途中で何度も戻ることになってしまうため、目的地を変更し(
図8の5’.ステップS518)、所定戻り数だけ戻る(
図8の6.ステップS520)。所定戻り数だけ戻った後に、変更された別の目的地に向かって移動する(
図8の7.ステップS506又はステップS508)。
【0106】
以上のような移動制御をすることにより、自機位置推定スレッドによる自機位置の推定が可能な状態をできるだけ長い時間保つことができるようになる。なお、
図7のステップS508では、ステップS504で決定した移動方向を変更するようにしても良い。この変更はランダムな方向に変更しても良いし、自律移動装置100がその場で360度回転しつつ画像を撮影し、撮影した画像の中で最も特徴点の多い画像の方向に移動方向を変更するようにしても良い。また、
図7のステップS518で設定している「別の目的地」は、複数の目的地が存在する場合は、第1候補→第2候補→第3候補と順番に変更していけば良い。また、同じ目的地に対して、複数の経路が存在している場合は、目的地は変えずに経路を変更しても良い。また、特に目的地はなく自由に移動している場合は、ランダムに目的地を設定しても良い。
【0107】
特に目的地がない場合は、特徴点の多い方向に移動するのが望ましい。このような移動方法としては、例えば、自律移動装置100がその場で360度回転しつつ所定の角度毎に目的地候補となる方向の画像を撮影し、撮影した画像の中で最も特徴点の多い画像の方向を新たな目的地として、その方向に向かって移動する方法が挙げられる。ここで、制御部10は、所定の角度毎に目的地候補を選定しているので、目的地候補選定部に相当する。そして、特徴点取得部11は、目的地候補の方向の画像から特徴点を取得しているので、目的地候補特徴点取得部に相当する。このような処理を行うことで、ランダムに移動するよりも、特徴点対応数が多くなる方向に移動できる可能性が高まり、自機位置の推定が可能な状態に復帰しやすくなる。
【0108】
なお、特徴点対応数が少なくなる原因としては、周囲の景色自体に特徴点が少ないこと以外に、周囲が暗くて露光時間が長くなり、撮像部41で撮影した画像にブレが生じてしまうことも挙げられる。
図7の処理では、特徴点対応数が少なくなると速度を低下させたり、停止したりするので、撮影画像中のブレが少なくなるような移動制御になっている。この点に関して、特徴点対応数取得部14で特徴点対応数を取得していない状態でも、周囲の明るさを明るさセンサ(図示せず)や撮像部41で取得し、所定の明るさよりも暗かったら速度を低下させたり停止させたりすることでブレの少ない画像を取得できるようにしても良い。
【0109】
なお、この発明の自律移動装置100の各機能は、通常のPC(Personal Computer)等のコンピュータによっても実施することができる。具体的には、上記実施形態では、自律移動装置100が行う自律移動制御処理のプログラムが、記憶部20のROMに予め記憶されているものとして説明した。しかし、プログラムを、フレキシブルディスク、CD−ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)及びMO(Magneto−Optical Disc)等のコンピュータ読み取り可能な記録媒体に格納して配布し、そのプログラムをコンピュータに読み込んでインストールすることにより、上述の各機能を実現することができるコンピュータを構成してもよい。
【0110】
以上、本発明の好ましい実施形態について説明したが、本発明は係る特定の実施形態に限定されるものではなく、本発明には、特許請求の範囲に記載された発明とその均等の範囲が含まれる。以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
【0111】
(付記1)
撮像部が撮影した複数の画像の情報に基づいて自律的な移動を制御する移動制御部と、
前記撮像部が撮影した画像から特徴点を取得する特徴点取得部と、
前記特徴点取得部が取得した特徴点の位置を記憶する地図記憶部と、
前記特徴点取得部が取得した特徴点と、前記地図記憶部に位置が記憶されている特徴点と、の対応数である特徴点対応数を取得する特徴点対応数取得部と、を備え、
前記移動制御部は、
前記特徴点対応数取得部が取得した特徴点対応数に応じて移動を制御する、
自律移動装置。
【0112】
(付記2)
前記移動制御部は、前記特徴点対応数取得部が取得した特徴点対応数が、第1の閾値以下の場合に、移動方向を変更する、
付記1に記載の自律移動装置。
【0113】
(付記3)
前記移動制御部は、前記特徴点対応数取得部が取得した特徴点対応数が、第1の閾値以下の場合に、移動速度を低下させる、
付記1又は2に記載の自律移動装置。
【0114】
(付記4)
前記移動制御部は、前記特徴点対応数取得部が取得した特徴点対応数が、前記第1の閾値よりも小さい第2の閾値以下の場合に、所定の時間、前記移動速度を0にする、
付記3に記載の自律移動装置。
【0115】
(付記5)
前記自律移動装置は、さらに、過去の移動履歴を記憶する移動履歴記憶部を備え、
前記移動制御部は、前記移動速度を0にしてから前記所定の時間が経過しても、前記特徴点対応数取得部が取得した特徴点対応数が前記第2の閾値以下の場合には、前記移動履歴記憶部に記憶されている移動履歴に基づいて所定の回数だけ過去の位置に戻るように移動方向を変更する、
付記4に記載の自律移動装置。
【0116】
(付記6)
前記自律移動装置は、さらに、移動の目的地を取得する目的地取得部を備え、
前記移動制御部は、前記所定の回数だけ過去の位置に戻るように移動方向を変更した後に、前記目的地取得部が取得した目的地に向かって移動するように移動方向を変更する、
付記5に記載の自律移動装置。
【0117】
(付記7)
前記自律移動装置は、さらに、前記目的地取得部が取得した目的地を変更する目的地変更部を備え、
前記移動制御部が、前記過去の位置に戻るように移動方向を変更した後に、前記目的地取得部が取得した目的地に向かって移動するように移動方向を変更した後、前記過去の位置に戻る前の位置より先に進む前に、前記特徴点対応数取得部が取得した特徴点対応数が前記第2の閾値以下になった場合は、前記目的地変更部が前記目的地を変更する、
付記6に記載の自律移動装置。
【0118】
(付記8)
前記自律移動装置は、さらに、複数の目的地候補を選定する目的地候補選定部と、
前記目的地候補選定部が選定した目的地候補の方向の画像から特徴点を取得する目的地候補特徴点取得部と、を備え、
前記目的地変更部は、前記目的地を、前記目的地候補選定部が選定した複数の目的地候補の中で前記目的地候補特徴点取得部が取得した特徴点の数が最大となる目的地候補に変更する、
付記7に記載の自律移動装置。
【0119】
(付記9)
撮像部が撮影した複数の画像の情報に基づいて自律的に移動するための自律移動方法であって、
前記撮像部が撮影した複数の画像から取得した画像特徴点と、実空間内での位置の推定を行った推定特徴点との対応数に応じて自律的に移動する、
自律移動方法。
【0120】
(付記10)
前記画像特徴点と前記推定特徴点との対応数が第1の閾値以下になると移動速度を低下させる、
付記9に記載の自律移動方法。
【0121】
(付記11)
前記画像特徴点と前記推定特徴点との対応数が前記第1の閾値よりも小さい第2の閾値以下になると、所定の時間停止する、
付記10に記載の自律移動方法。
【0122】
(付記12)
所定の時間停止していても前記画像特徴点と前記推定特徴点との対応数が前記第2の閾値以下の場合には、過去の位置に戻る、
付記11に記載の自律移動方法。
【0123】
(付記13)
撮像部が撮影した複数の画像の情報に基づいて自律的な移動の方向及び速度を決定する移動方向速度決定ステップと、
前記撮像部が撮影した画像から特徴点を取得する特徴点取得ステップと、
前記特徴点取得ステップで取得した特徴点の位置を記憶する地図記憶部に位置が記憶されている特徴点と、前記特徴点取得ステップで取得した特徴点と、の対応数を取得する特徴点対応数取得ステップと、
前記特徴点対応数取得ステップで取得した特徴点対応数に応じて移動を制御する移動制御ステップと、
を備える自律移動方法。
【0124】
(付記14)
コンピュータに、
撮像部が撮影した複数の画像の情報に基づいて自律的な移動の方向及び速度を決定する移動方向速度決定ステップ、
前記撮像部が撮影した画像から特徴点を取得する特徴点取得ステップ、
前記特徴点取得ステップで取得した特徴点の位置を記憶する地図記憶部に位置が記憶されている特徴点と、前記特徴点取得ステップで取得した特徴点と、の対応数を取得する特徴点対応数取得ステップ、
前記特徴点対応数取得ステップで取得した特徴点対応数に応じて移動を制御する移動制御ステップ、
を実行させるためのプログラム。
【解決手段】自律移動装置100の移動方向速度決定部16は、撮像部が撮影した複数の画像の情報に基づいて自律的な移動の方向及び速度を決定する。特徴点取得部11は撮像部が撮影した画像から特徴点を取得する。地図記憶部22は特徴点取得部が取得した特徴点の位置を記憶する。特徴点対応数取得部14は、特徴点取得部が取得した特徴点と地図記憶部に位置が記憶されている特徴点との対応数を取得する。移動方向速度変更部15は、特徴点対応数取得部が取得した特徴点対応数が閾値以下の場合に、特徴点対応数を増加させるために、移動方向速度決定部16による移動方向及び移動速度を変更する。