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