図1を参照して、この実施例のシステム10は、複数のコミュニケーションロボット(以下、単に「ロボット」という。)12で構成される。各ロボット12は、音声および身体動作(ジェスチャ)の少なくとも一方を用いて、人間や他のロボット12(ロボット12以外のロボットでもよい)とコミュニケーションを行うことができる。また、各ロボット12は、他のロボット12と無線通信することができる。
なお、図1では、3台のロボット12を図示するが、ロボット12は、2台以上であれば、4台以上であってもよい。
また、図1では省略するが、操作者は、端末(PCなどの汎用のコンピュータである)を用いてロボット12にコマンドを送信することにより、遠隔でロボット12を操作することもできる。以下、この明細書において、ロボット12を遠隔で操作する操作者を「ユーザ」と呼ぶことにする。また、この「ユーザ」に対して、ロボット12またはロボット12のユーザのコミュニケーション対象を「人間」または「人」と呼ぶことにする。
なお、遠隔に設けられた端末を用いてロボット12を操作等することは既に周知であり、また、本願の本質的な内容ではないため、この明細書においては、ユーザが使用する端末および遠隔操作についての詳細な説明は省略する。
この実施例のロボット12は、自律行動型のロボットであり、地下街、ショッピングモール、イベント会場、遊園地および美術館などの不特定多数の人間が存在する環境または日常空間に配置され、人間の道案内または誘導を行ったり、荷物を運搬したりするなどの様々なサービスを提供する。このロボット12は、自身が配置される環境について予め記憶した地図(間取り図)の情報および自身に備わる各種センサからの情報に基づいて自律的に行動する(移動および動作する)ことができる。ただし、この実施例では、図1に示す複数のロボット12は、同じ環境または日常空間に配置される。以下、ロボット12の構成について具体的に説明する。
図2を参照して、ロボット12のハードウェアの構成について説明する。図2は、この実施例のロボット12の外観を示す正面図である。ロボット12は台車30を含み、台車30の下面にはロボット12を自律移動させる2つの車輪32および1つの従輪34が設けられる。2つの車輪32は車輪モータ36(図3参照)によってそれぞれ独立に駆動され、台車30すなわちロボット12を前後左右の任意方向に動かすことができる。また、従輪34は車輪32を補助する補助輪である。したがって、ロボット12は、配置された空間内を自律制御によって移動可能である。
台車30の上には、円柱形のセンサ取り付けパネル38が設けられ、このセンサ取り付けパネル38には、多数の赤外線距離センサ40が取り付けられる。これらの赤外線距離センサ40は、センサ取り付けパネル38すなわちロボット12の周囲の物体(人間や障害物など)との距離を測定するものである。
なお、この実施例では、距離センサとして、赤外線距離センサを用いるようにしてあるが、赤外線距離センサに代えて、超音波距離センサやミリ波レーダなどを用いることもできる。
センサ取り付けパネル38の上には、胴体42が直立するように設けられる。また、胴体42の前方中央上部(人の胸に相当する位置)には、上述した赤外線距離センサ40がさらに設けられ、ロボット12の前方の主として人間との距離を計測する。また、胴体42には、その側面側上端部のほぼ中央から伸びる支柱44が設けられ、支柱44の上には、全方位カメラ46が設けられる。全方位カメラ46は、ロボット12の周囲を撮影するものであり、後述する眼カメラ70とは区別される。この全方位カメラ46としては、たとえばCCDやCMOSのような固体撮像素子を用いるカメラを採用することができる。なお、これら赤外線距離センサ40および全方位カメラ46の設置位置は、当該部位に限定されず適宜変更され得る。
胴体42の両側面上端部(人の肩に相当する位置)には、それぞれ、肩関節48Rおよび肩関節48Lによって、上腕50Rおよび上腕50Lが設けられる。図示は省略するが、肩関節48Rおよび肩関節48Lは、それぞれ、直交する3軸の自由度を有する。すなわち、肩関節48Rは、直交する3軸のそれぞれの軸廻りにおいて上腕50Rの角度を制御できる。肩関節48Rの或る軸(ヨー軸)は、上腕50Rの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節48Lは、直交する3軸のそれぞれの軸廻りにおいて上腕50Lの角度を制御できる。肩関節48Lの或る軸(ヨー軸)は、上腕50Lの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。
また、上腕50Rおよび上腕50Lのそれぞれの先端には、肘関節52Rおよび肘関節52Lを介して、前腕54Rおよび前腕54Lが設けられる。図示は省略するが、肘関節52Rおよび肘関節52Lは、それぞれ1軸の自由度を有し、この軸(ピッチ軸)の軸回りにおいて前腕54Rおよび前腕54Lの角度を制御できる。
前腕54Rおよび前腕54Lのそれぞれの先端には、人の手に相当する球体56Rおよび球体56Lがそれぞれ設けられる。ただし、指や掌の機能が必要な場合には、人間の手に酷似した形状および機能を持たせた「手」を設けることも可能である。
また、図示は省略するが、台車30の前面、肩関節48Rと肩関節48Lとを含む肩に相当する部位、上腕50R、上腕50L、前腕54R、前腕54L、球体56Rおよび球体56Lには、それぞれ、接触センサ58(図3で包括的に示す)が設けられる。台車30の前面の接触センサ58は、台車30への人間や他の障害物の接触を検知する。したがって、ロボット12は、その自身の移動中に障害物との接触が有ると、それを検知し、直ちに車輪32の駆動を停止してロボット12の移動を急停止させることができる。また、その他の接触センサ58は、当該各部位に触れたかどうかを検知する。なお、接触センサ58の設置位置は、当該部位に限定されず、適宜な位置(人の胸、腹、脇、背中および腰に相当する位置)に設けられてもよい。
胴体42の中央上部(人の首に相当する位置)には首関節60が設けられ、さらにその上には頭部62が設けられる。図示は省略するが、首関節60は、3軸の自由度を有し、3軸の各軸廻りに角度制御可能である。或る軸(ヨー軸)はロボット12の真上(鉛直上向き)に向かう軸であり、他の2軸(ピッチ軸、ロール軸)は、それぞれ、それと異なる方向で直交する軸である。
頭部62には、人の口に相当する位置に、スピーカ64が設けられる。スピーカ64は、ロボット12が、それの周辺の人間に対して音声ないし音によってコミュニケーションを取るために用いられる。また、人の耳に相当する位置には、マイク66Rおよびマイク66Lが設けられる。以下、右のマイク66Rと左のマイク66Lとをまとめてマイク66ということがある。マイク66は、周囲の音、とりわけコミュニケーションを実行する対象(以下、「コミュニケーション対象」ということある)である人間の声を取り込む。さらに、人の目に相当する位置には、眼球部68Rおよび眼球部68Lが設けられる。眼球部68Rおよび眼球部68Lは、それぞれ眼カメラ70Rおよび眼カメラ70Lを含む。以下、右の眼球部68Rと左の眼球部68Lとをまとめて眼球部68ということがある。また、右の眼カメラ70Rと左の眼カメラ70Lとをまとめて眼カメラ70ということがある。
眼カメラ70は、ロボット12に接近した人間の顔または人間の他の部分或いは物体などを撮影して、それに対応する映像信号を取り込む。また、眼カメラ70は、上述した全方位カメラ46と同様のカメラを用いることができる。たとえば、眼カメラ70は、眼球部68内に固定され、眼球部68は、眼球支持部(図示せず)を介して頭部62内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、2軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この2軸の一方は、頭部62の上に向かう方向の軸(ヨー軸)であり、他方は、一方の軸に直交しかつ頭部62の正面側(顔)が向く方向に直行する方向の軸(ピッチ軸)である。眼球支持部がこの2軸の各軸廻りに回転されることによって、眼球部68ないし眼カメラ70の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ64、マイク66および眼カメラ70の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
このように、この実施例のロボット12は、車輪20の独立2軸駆動,肩関節48の3自由度(左右で6自由度),肘関節52の1自由度(左右で2自由度),首関節60の3自由度および眼球支持部の2自由度(左右で4自由度)の合計17自由度を有する。
図3はロボット12の電気的な構成を示すブロック図である。この図3を参照して、ロボット12は、CPU80を含む。CPU80は、マイクロコンピュータ或いはプロセッサとも呼ばれ、バス82を介して、メモリ84、モータ制御ボード86、センサ入力/出力ボード88および音声入力/出力ボード90に接続される。
メモリ84は、図示は省略をするが、ROM、HDDおよびRAMを含む。ROMおよびHDDには、ロボット12の行動を制御(タスクを実行)するための制御プログラム(ロボット制御プログラム)が予め記憶される。たとえば、ロボット制御プログラムは、各センサの出力(センサ情報)を検知するための検知プログラムや、他のロボット12およびユーザの端末などの外部コンピュータとの間で必要なデータおよびコマンドを送受信するための通信プログラムなどを含む。また、RAMは、CPU80のワークメモリおよびバッファメモリとして用いられる。
さらに、この実施例では、ロボット12は、人間とのコミュニケーションをとるために発話したり、ジェスチャしたりできるように構成されているが、メモリ84に、このような発話およびジェスチャのための辞書(発話/ジェスチャ辞書)のデータが記憶されている。
モータ制御ボード86は、たとえばDSPで構成され、各腕や首関節などの各軸モータの駆動を制御する。すなわち、モータ制御ボード86は、CPU80からの制御データを受け、肩関節48Rの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Rの角度を制御する1つのモータとの計4つのモータ(図3では、まとめて「右腕モータ96」と示す)の回転角度を制御する。同様にして、モータ制御ボード86は、CPU80からの制御データを受け、肩関節48Lの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Lの角度を制御する1つのモータとの計4つのモータ(図3では、まとめて「左腕モータ98」と示す)の回転角度を制御する。
さらに、モータ制御ボード86は、CPU80からの制御データを受け、首関節60の直交する3軸のそれぞれの角度を制御する3つのモータ(図3では、まとめて「頭部モータ100」と示す)の回転角度を制御する。そして、モータ制御ボード86は、CPU80からの制御データを受け、車輪32を駆動する2つのモータ(図3では、まとめて「車輪モータ36」と示す)の回転角度を制御する。
なお、この実施例では、車輪モータ36を除くモータは、制御を簡素化するためにステッピングモータ(すなわち、パルスモータ)を用いる。ただし、車輪モータ36と同様に直流モータを用いるようにしてもよい。また、ロボット12の身体部位を駆動するアクチュエータは、電流を動力源とするモータに限らず適宜変更された、たとえば、他の実施例では、エアアクチュエータが適用されてもよい。
センサ入力/出力ボード88は、モータ制御ボード86と同様に、DSPで構成され、各センサからの信号を取り込んでCPU80に与える。すなわち、赤外線距離センサ40のそれぞれからの反射時間に関するデータがこのセンサ入力/出力ボード88を通じてCPU80に入力される。また、全方位カメラ46からの映像信号が、必要に応じてセンサ入力/出力ボード88で所定の処理を施してからCPU80に入力される。眼カメラ70からの映像信号も、同様にして、CPU80に入力される。また、上述した複数の接触センサ58(図3では、まとめて「接触センサ58」と示す)からの信号がセンサ入力/出力ボード88を介してCPU80に与えられる。
音声入力/出力ボード90もまた、同様に、DSPで構成され、CPU80から与えられる音声合成データに従った音声または声がスピーカ64から出力される。また、マイク66からの音声入力が、音声入力/出力ボード90を介してCPU80に与えられる。
また、CPU80は、バス82を介して通信LANボード102に接続される。通信LANボード102は、たとえばDSPで構成され、CPU80から与えられた送信データを無線通信装置104に与え、無線通信装置104は送信データを、外部コンピュータに送信する。また、通信LANボード102は、無線通信装置104を介して外部コンピュータからデータを受信し、受信したデータ(受信データ)をCPU80に与える。
また、CPU80は、バス82を介して、2次元距離計測装置106および3次元距離計測装置108に接続される。図2では省略したが、2次元距離計測装置106および3次元距離計測装置108は、ロボット12の台車30、センサ取り付けパネル38または胴体42の適宜の位置に取り付けられる。
2次元距離計測装置106は、水平方向にレーザーを照射し、物体(人間も含む)に反射して戻ってくるまでの時間から当該物体までの距離を計測するものである。たとえば、トランスミッタ(図示せず)から照射したレーザーを回転ミラー(図示せず)で反射させて、前方を扇状に一定角度(たとえば、0.5度)ずつスキャンする。ここで、2次元距離計測装置106としては、SICK社製のレーザーレンジファインダ(型式 LMS200)を用いることができる。このレーザーレンジファインダを用いた場合には、距離8mを±15mm程度の誤差で計測可能である。
この実施例では、ロボット12は、2次元距離計測装置106で検出された障害物までの2次元(または水平方向)の距離情報と、ロボット12が配置される環境(たとえば、場所ないし領域)についての地図をマッチングすることで、ロボット12自身の位置すなわちロボット12の現在位置を推定する。ただし、より正確な現在位置を推定するために、パーティクルフィルタを用いて計算されたロボット12のオドメトリ(移動情報)も入力として利用される。ロボット12の現在位置を推定する手法としては、文献「D. Fox, W. Burgard and S. Thrun, Markov Localization for Mobile Robots in Dynamic Environments, Journal of Artificial Intelligence Research, vol. 11, pp. 391-427, 1999.」に開示される手法を用いることができる。ロボット12の現在位置を推定すること自体は本願の本質的な内容ではないため、詳細な説明は省略する。
また、3次元距離計測装置108は、水平方向を基準(0°)として上下40°(+30°〜−10°)の検知角度(垂直視野角)を有する3次元全方位レーザ距離計である。この3次元距離計測装置108は、0.1秒に1回転して、およそ100mまでの距離を計測し、ロボット12周辺の3次元距離情報を格納した点群情報を取得することができる。ここでは、3次元距離計測装置108としては、Velodine社製のイメージングユニットLiDAR(HDL-32E)(商品名)を用いることができる。
この実施例では、ロボット12は、3次元距離計測装置108で検出された3次元の距離情報に基づいて人間を検出するとともに、当該人間の位置を計測する。具体的には、3次元距離計測装置108から得られる3次元の距離情報と上記の地図を用いて、ロボット12が環境内のどの位置に存在しているか、およびどの方向を向いているかが推定される。次に、3次元距離計測装置108から取得した3次元の距離情報と、地図に基づく環境内の3次元の距離情報と比較し、近似する3次元の距離情報を格納した点群情報が示す点群を背景としてフィルタリングする。続いて、3次元距離計測装置108から取得した3次元の距離情報を格納した点群情報が示す点群のうち、閾値(Zmin, Zmax)を用いて一定の高さに存在しない点群をフィルタリングする。この実施例では、Zminが5cmに設定され、Zmaxが220cmに設定され、極端な高さの点群は、人間でないと判断し、人間の位置を計測する処理から除外される。
一定の高さに存在しない点群がフィルタリングされると、フィルタリング後のすべての点群に含まれる高さ情報を0に設定した2次元の点群情報が生成される。生成された2次元の点群情報は、ユークリッド距離を用いてクラスタリングされる。一例として、Point Cloud Libraryに実装されているクラスタリング手法が利用される。
さらに、クラスタリングされた点群情報に含まれる元々の高さ情報を利用し、高さの最大値から高さの最小値を引いた値が30cm未満であるもの、および点群の数が閾値以下であるもの(ここでは4個と設定した)がフィルタリングされる。つまり、小さすぎる物または壁などの人間以外の物と判断されたクラスタが除去される。そして、フィルタリング後の各クラスタの重心位置が各人間の位置情報として設定される。つまり、ロボット12の周囲に存在する人間が検出されるとともに、検出された人間の位置が計測される。ロボット12の周囲に複数の人間が存在することが検出された場合には、ロボット12のコミュニケーション対象の一人の人間が所定のルールに従って選択される。一例として、所定のルールは、ロボット12からの距離が最短距離であること、または、ロボット12のユーザが自身の端末を用いて指定したことである。ただし、ユーザからコミュニケーション対象が指定された場合には、ロボット12からの距離に基づいて決定されたコミュニケーション対象よりも優先される。
なお、ロボット12の位置を推定したり、人間の位置を計測したりするために、ロボット12は、2次元距離計測装置106および3次元距離計測装置108を備えているが、これらの計測装置は、ロボット12に備えずに、または、ロボット12に備えるとともに、ロボット12が配置される環境内に設置されてもよい。また、床センサなどの他のセンサを用いて、ロボット12の位置を推定したり、人間の位置を計測(推定)したりしてもよい。
また、この実施例では、ロボット12は、2次元距離計測装置106および3次元距離計測装置108を備えるようにしてあるが、3次元距離計測装置108の計測結果を用いてロボット12自身の位置を推定することもできるため、2次元距離計測装置106は省略することもできる。
上記のようなロボット12は、人間とのコミュニケーションに基づく行動を実行したり、当該ロボット12のユーザの命令に従う行動を実行したりする。ロボット12の行動すなわちタスクは、当該ロボット12が提供するサービスについての行動である。ただし、人間とのコミュニケーションに基づく行動は、人間との会話を認識(音声認識)し、会話に含まれる人間の要求に応じた行動である。また、ユーザの命令に従う行動は、ユーザの端末から送信されたコマンドに従う行動である。
図1では省略したが、ユーザの端末は、直接、または、ネットワークを介して、ロボット12と通信可能である。ただし、複数のロボット12はそれぞれ識別可能であり、ユーザは、端末を用いて、選択した一台のロボット12と通信する。一例として、ロボット12に識別情報(ロボットID)を割り当てておき、ロボット12から送信する送信データおよびロボット12が受信する受信データ(すなわち、ユーザの端末から送信する送信データ)にロボットIDを付加するようにすればよい。この場合、ロボット12は、自身のロボットIDを付加した送信データをユーザの端末に送信する。また、ロボット12は、ユーザの端末から受信データを受信すると、受信データに含まれるロボットIDを検出して、ロボット12自身への受信データ(またはコマンド)であるかどうかを判断する。
なお、ロボット12がユーザの端末に送信する送信データは、ユーザの端末からのコマンドに従うタスクの実行を終了したことの通知などのデータである。
図1を用いて説明したように、複数のロボット12が同じ環境(場所または領域)に配置されるため、各ロボット12が移動する場合には、ロボット12同士の衝突を避ける必要がある。
したがって、ロボット12が移動する経路(以下、「移動経路」という)を算出する場合に、少なくとも他のロボット12と同時に同じ位置(空間)に存在しないように調整する必要がある。この調整のために、一般的には、各ロボット12の移動経路を算出する中央制御装置が設けられる。中央制御装置は、複数のロボット12が配置される環境の地図情報を記憶し、各ロボット12とネットワークを介して通信可能に接続され、各ロボット12の現在位置および各ロボット12の移動の目的地を把握し、ロボット12からの移動経路の生成要求に応じて、他のロボット12との衝突を避けるように移動経路を生成する。
しかし、このような中央制御装置を設けた場合には、設置および管理の費用がかかり、また、ロボット12の数が増えるに従って中央制御装置の処理負荷が増大する。このため、効率的にロボット12間の移動計画を調整するのが困難である。
これを回避するため、この実施例では、別々のタスクを実行している複数のロボット12間における移動の調整を分散的に実現するようにしてある。つまり、複数のロボット12がタスクを実行する場合に、効率的にロボット12間の移動計画を調整するようにしてある。
日常空間においては、この実施例のロボット12は、道案内、誘導、運搬などの様々なタスク(行動)を実行する。この場合、複数のロボット12のうち、近距離にいるロボット12間で、ロボット12同士の衝突が発生しないように、移動計画が決定(算出)される。ただし、この明細書において、ロボット12の行動は、単に、ロボット12が目的地に移動することを含む。また、この実施例では、近距離は、ロボット12の現在位置(2次元平面上の位置)を中心とする所定範囲(たとえば、半径10mの円)である。
ここで、ロボット12同士の衝突が発生する場合には、空間リソースの競合が発生していると言える。したがって、ロボット12同士が衝突しないように移動するための移動経路を計画することは、空間リソースの競合の解決プロセスとみなすことができる。
また、この実施例では、大量のルールをロボット12の行動に記述するのではなく、ロボット12同士が同じ空間を占有したい状況が発生した場合に、優先度の低いタスクを実行する方が自身の利益の最大化を行うのではなく、むしろ自分の利益を差し引き、より優先度の高いタスクを実行する方の利益に寄与する行動を選択するように、ロボット12が実行可能な形で定式化し、空間リソースの競合を回避するようにしてある。つまり、一連の空間の譲り合いは、ロボット12同士の間における相互利益を最大化する、ロボット12同士の振る舞いとして表現される。
ロボット12自身(着目するロボット12)をエージェントiとし、所定範囲内に存在する他のロボット12をエージェントjとした場合に、空間の譲り合いというエージェントiおよびエージェントjが協調および/または連携する行動は、エージェントiとエージェントjの間における空間リソースの競合の解決プロセスとみなすことができる。エージェントiが、合理的な振る舞いを行うとすれば、エージェントiにおける行動の選択は、自身の利益最大化として表現される。具体的には、数1で表現することができる。
[数1]
また、pは、エージェントiが取り得る移動計画を示し、Ui(p)は、移動計画pを選択したときにエージェントiが得る利益を示す。この明細書において、利益とは、タスクの目的を達成する度合を意味する。この実施例では、タスクの目的を達成する度合が高い程、利益が大きい。したがって、移動するエージェントiでは、目的地に早く到達できるほど利益が大きい。また、Pはエージェントiが取り得る全ての移動計画の集合である。これらのことは、エージェントjについても同様である。
仮に、エージェントiのみが存在する場合には、数1によって、エージェントiの目的を達成する最適な移動計画が算出(または決定)される。ただし、エージェントiおよびエージェントjが存在する場合には、お互いの利益間に競合が生じると、数1を同時に満足する解は存在しなくなってしまう。この場合、エージェントiとエージェントjの間で移動の調整が必要である。
このため、この実施例では、タスク(行動)毎に優先度を予め決定しておき、優先度の高低で利益間の競合を回避するようにしてある。また、この実施例では、空間リソースの競合または利益競合の解決方法を、相互利益を最大化する行動の選択として、数2のように定式化した。
[数2]
ここで、αは、エージェントiが実行するタスクの優位性についての係数であり、係数αの値は0から1の間で設定される。数2からも明らかなように、係数αが1に近づけば、エージェントjは、よりエージェントjの利益を差し引き、エージェントiの利益を最大化するための行動(この実施例では、迂回または待機(停止))が選択される。
なお、この実施例では、簡単のため、エージェントの数が2である場合について説明するが、エージェントの数が3以上である場合には、エージェントiの移動計画pは数3に従って算出される。ただし、αi+αj+αk+ … =1である。また、係数αi、αj、αk、…の値は、各エージェントi、j、k、…が実行するタスクに割り当てられた優先度を、各エージェントi、j、k、…が実行するタスクに割り当てられた優先度を加算した値(合計値)で割ることにより決定される。
[数3]
ここで、上述したのように、各ロボット12は、自律行動し、道案内、誘導、運搬などの様々なタスクを実行(またはサービスを提供)する。道案内とは、たとえば、目的地までの経路が分からない、つまり道に迷った人間を目的地まで案内することを意味する。また、誘導とは、たとえば、環境内の或る場所(目的地)まで人間を誘導すること意味する。運搬とは、たとえば、人間の依頼によって荷物を目的地まで運搬することを意味する。ただし、ロボット12が提供するこれらのサービスは単なる一例であり、移動を伴うサービスであれば、その具体的態様は限定されない。
なお、道案内および誘導についてのタスクを実行するロボットの詳細については、本願の出願人が先に出願し、既に公開された特開2007−260822号および特開2011−656号に開示されており、本願発明の本質的な内容とは異なるため、ここでは詳細な説明は省略する。
また、運搬のサービスは、「速達運搬」と、「通常運搬」の2種類に分類される。「速達運搬」は、目的地に速達郵便のような急ぎの書類を運搬するサービスである。また、「通常運搬」は、目的地に小包のような荷物を単に運搬するサービスである。
各タスクには、優先度が予め設定されている。一例として、優先度は、サービスの緊急度に応じて設定される。他の例では、優先度は、ロボット12が配置される環境におけるサービスの提供のし易さに応じて設定される。これらの両方およびさらに他の条件(理由)を加味して優先度が設定されてもよい。この実施例では、優先度は0から10までの整数で表わされ、数値が大きいほど優先度が高い。ただし、優先度の数値は一例であり、限定されるべきではなく、ロボット12が配置される環境、同じ環境に配置されるロボット12の数などの状況に応じて適宜変更されてよい。
図4は、優先度についてのテーブル(以下、「優先度テーブル」という)の一例を示す。ロボット12は、図4に示すような優先度テーブルのデータを記憶しており、経路計画を作成する場合には、この優先度テーブルを参照して、係数αを算出する。
図4の優先度テーブルに示すように、各タスクには、識別情報(タスクID)が割り当てられており、タスクIDに対応して、タスク名および優先度が記述される。図4に示す例では、タスクID「AAAA」に対応して、タスク名「道案内」が記述され、優先度「5」が設定される。説明は省略するが、他のタスクについても同様である。したがって、タスクIDが分ければ、ロボット12が実行中のタスクおよびその優先度を知ることができる。
なお、図4に示す優先度テーブルは単なる例示であり、限定されるべきでない。たとえば、ロボットIDは、人間が解読できない記号が用いられてもよい。
ただし、この実施例では、少なくとも所定範囲内に存在する複数のロボット12は互いに行動情報を送受信(交換)する。ここで、行動情報は、ロボット12の現在位置、ロボット12が実行中のタスクの情報(タスク情報)、ロボット12が実行中のタスクについての利益Uを算出するための関数(以下、「利益関数」という)およびロボット12の目的地の情報を意味する。現在位置および目的地は、2次元座標である。ただし、タスク情報は、タスク情報は、タスクの識別情報および実行中のタスクにおける移動の目的地の情報を含む。また、ロボット12が配置される環境に対応する地図には、所定の位置を原点とした2次元座標系が設定されており、環境内の目印(柱、扉、部屋、交差点、鑑賞物、展示品など)の配置位置の2次元座標も事前に登録されている。
なお、ロボット12は、自身の現在位置と、受信した他のロボット12の行動情報に含まれる他のロボット12の現在位置の距離を算出し、所定距離(この実施例では、10m)を超える場合には、当該他のロボット12は所定範囲内に存在しないため、受信した他のロボット12の行動情報を削除する。 環境内を移動するロボット12(エージェントi)と他のロボット12(エージェントj)が狭い幅の通路を挟んだ位置に存在し、エージェントiとエージェントjが逆向きに通路を通り抜けたい場合には、同時に通路を移動すると、すれ違うことができないため、立ち往生してしまう。ここでは、エージェントiが「速達運搬」のタスクを実行中であり、エージェントjが「通常運搬」のタスクを実行中であると仮定する。
この場合、タスクの優先度に応じて、たとえば、優先度の低いタスクを実行しているエージェントjは、優先度の高いタスクを実行しているエージェントiが狭い幅の通路を通り抜けるのを待機し、エージェントiが狭い幅の通路を通り抜けると、狭い幅の通路に侵入し、当該通路を通り抜ける。
図5(A)は、エージェントi(着目するロボット12)とエージェント(他のロボット12)が狭い幅の通路を挟んだ位置に存在する様子の概略を真上方向から見た概略図である。図5(A)において(図5(B)、図6(A)、図6(B)および図9(A)も同じ)、エージェントi(着目するロボット12)とエージェント(他のロボット12)の頭部を丸で示し、頭部に記載した目の付いている方が前方(図9(A)の(6)で示す方向)であり、その反対方向が後方(図9(A)の(4)で示す方向)である。ここでは、壁で挟まれた狭い幅の通路を、エージェントiが一方から他方に通り抜けたい状況であり、エージェントjが他方から一方に通り抜けたい状況である。ただし、狭い幅の通路は、エージェントiとエージェントjがすれ違うことができないため、同時に通り抜けようとした場合、立ち往生が発生する。
上記のとおり、エージェントiが実行するタスクの優先度が、エージェントjが実行するタスクの優先度よりも高い場合には、先に、エージェントiが狭い幅の通路を通り抜けて、その後、エージェントjがその通路を通り抜けることにより、タスクの優先度を考慮したロボット12の移動を実行(実現)することができる。つまり、空間の譲り合いが実現される。
具体的には、図5(B)および図6(A)に示すように、エージェントiが狭い幅の通路を移動し、さらに、狭い幅の通路を通り抜けるまで、エージェントjは停止して、エージェントiが通路を通り抜けるのを待機する。そして、図6(A)および図6(B)に示すように、エージェントiが狭い幅の通路を通り抜けると、エージェントjはエージェントiとは逆向きに狭い幅の通路を移動し、通り抜ける。
このように、特別な制約または条件が存在しない場合には、エージェントiは、遠回りせずに目的地に向けて、適切な移動速度で移動する。この行動は、(1)移動によって、より目的地に近付くほど利益が高く、(2)適切な速度で移動できる程利益が高いという2つの要素に分類することができる。
これらの要素を利用した移動を伴う行動についてのタスクに関する利益関数は数3で示される。ただし、上記の「道案内」、「誘導」、「速達運搬」および「普通運搬」の各行動には、「移動」が含まれる。また、数3をまとめると、数4となる。ただし、数3および数4において、Uは利益であり、tは経路計画で使用する予測時間であり、posはt秒後の予測位置であり、posnowは現在位置であり、Gは目的地であり、Distは距離(または差分)であり、xは移動距離であり、vprefは適切な速度を意味する。この実施例では、移動のタスクを実行する場合には、10秒(後述する予測時間t)分の予測を実施する。また、エージェントiの経路計画を算出する場合には、エージェントiとエージェントjのそれぞれの利益Uが時間間隔Δt毎(たとえば、0.5秒毎)に、数4に従って算出される。
この明細書においては、「経路計画」は、予測時間t分について予測されるエージェントiの移動経路(以下、「予測時間t分の移動経路」ということがある)を意味し、「移動計画」は、時間間隔Δt後に予測されるエージェントiの位置を意味する。
適切な速度vprefは、エージェントiまたはエージェントjが移動するときに望ましい移動速度を意味し、行動(またはタスク)に応じて設定される。緊急性の無い行動であれば、通常の移動速度が適切な速度vprefとして設定される。通常の移動速度は、成人が歩く速度の平均値であり、エージェントiまたはエージェントjは、減速距離を考慮して、その平均値よりも少し低く設定される。緊急性の高い行動であれば、通常の移動速度よりも早い速度が適切な速度vprefとして設定される。最徐行する必要のある行動であれば、通常の移動速度よりも遅い速度が適切な速度vprefとして設定される。たとえば、エージェントiおよびエージェントjのそれぞれについて、高、中(通常の移動速度)、低の3段階の速度が予め想定されており、行動に応じて、適切な速度vprefが設定される。以下、この明細書において同じである。
[数3]
U(G, t, pos)=f(Dist(posnow, G)-Dist(pos, G))
ただし、f(d)=-|d-vpref*t|である。
[数4]
U(G, t, pos)=-|(Dist(posnow, G)-Dist(pos, G))-vpref*t|
この実施例では、利益Uの最大値は0になるように調整されている。数3において、(Dist(posnow, G)-Dist(pos, G))は、目的地Gへの近接項であり、現在位置posnowから、t秒後の位置posが目的地Gに近い程、大きい値となり、大きい値程、利益Uが大きくなる。
また、数3において、f(d)=-|d-vpref*t|は、ロボット12の移動制約項を示し、t秒の間に、望ましい速度vprefで移動できるときに最大値(すなわち、f(d)=0)となり、望ましい速度vprefからずれるに従ってf(d)の値は小さくなる。
目的地Gへの近接項とエージェントiの移動制約項を組み合わせることで、目的地Gに近づきつつ、望ましい速度vprefでエージェントiが移動されるように、利益Uが最大化されるように設計されている。
なお、図示は省略するが、エージェントjの優先度がエージェントiの優先度よりも高い場合には、たとえば、エージェントjが先に狭い幅の通路を通り抜け、その後、エージェントiが狭い幅の通路を通り抜ける。
また、この実施例では、各行動(タスク)は移動を伴うため、利益Uを算出するための利益関数は同じにしてあるが、限定される必要はない。たとえば、複数の人間を誘導する場合には、比較的幅の広い通路を移動した方が良いと考えられるため、見通しの条項を利益関数に加えても良いと考えられる。
図7は、或る展示会場に複数の展示物が配置されている様子を真上方向から見た概略図である。図7を参照して、エージェントiとエージェントjが空間を譲り合う他の例について説明する。ただし、ここでは、エージェントiは鑑賞者である人間を誘導するタスクを実行し、エージェントjは鑑賞者である人間を道案内するタスクを実行するものとする。この場合、図4に示したように、エージェントiが実行するタスクの優先度がエージェントjが実行するタスクの優先度よりも高い。
なお、図7では、簡単のため、誘導または道案内される人間については図示を省略してある。
図7に示すように、展示会場には、6つの展示物A、展示物B、展示物C、展示物D、展示物Eおよび展示物Fがそれぞれ壁面の前に展示されている。エージェントiは、展示物Eおよび展示物Fの前方の位置から展示物Bに人間を誘導するタスクを実行し、エージェントjは展示物Dの前に居る人間を展示物Aまで道案内するタスクを実行する。この場合、実線の矢印で示すように、エージェントiおよびエージェントjがそれぞれの目的地である展示物Bおよび展示物Aに向けて直線的に移動すると、バツ印で示す位置でエージェントiとエージェントjが衝突してしまう。つまり、空間リソースが競合する。
この場合、たとえば、エージェントiが実行するタスクの優先度よりも低い優先度のタスクを実行するエージェントjは、点線の矢印で示すように、迂回する。ただし、点線の矢印で示す移動経路は例示であり、実際の移動経路は、経路計画を算出し、算出した結果に従ってロボット12(ここでは、エージェントj)が移動することにより決定される。
図8はロボット12の経路計画を作成する方法を説明するための図である。また、図9(A)はロボット12の移動方向を示す図であり、図9(B)は移動候補点を説明するための図である。
なお、図8では、エージェントiとエージェントjが一列に並び、その前方に目的地としての展示物が配置されている場合について示してある。このような状態は、ロボット12の経路計画を作成する方法を説明するための単なる例示である。
着目するロボット12(エージェントi)の経路計画を作成する、すなわち予測時間t分の移動経路を算出する場合には、エージェントiの現在位置(以下、「自己位置」ということがある)を推定するとともに、他のロボット12(エージェントj)の現在位置を検出(または取得)し、現在位置からΔt秒後の位置(以下、「移動候補点」)に移動したと仮定した場合におけるエージェントiの利益とエージェントjの利益をそれぞれ算出し、各利益に優先度に基づいて算出した係数αを掛けて、相互利益を算出する。ただし、図8では、エージェントjについての係数αjは、1からエージェントiについての係数αiを減算した値で示してある。また、係数αiは、エージェントiが実行中のタスクの優先度を、エージェントiが実行中のタスクの優先度とエージェントjが実行中のタスクの優先度の和で割った数値である。同様の方法で、係数αjについても算出してもよい。
図9(A)に示すように、Δt秒後のエージェントiおよびエージェントjの位置は(1)−(9)で示す方向における位置である。この実施例では、予測時間t分の移動経路を算出する場合には、エージェントiおよびエージェントjが存在する環境についての地図が所定長さ(たとえば、0.4mまたは0.5m)のグリッド状に分解され、エージェントiおよびエージェントjがグリッド単位で移動されるように、時間間隔Δt分移動した位置すなわち移動候補点が決定される。ただし、上記の所定長さは、エージェントiおよびエージェントjが、それぞれ、適切な速度vprefでΔt秒間移動した場合に移動可能な距離に決定される。
図9(B)に示すように、上記の(1)−(9)で示す移動方向における移動候補点は、9つの升目の各々の中心位置である。つまり、現在の移動方向(正面方向)を基準に、前後左右および斜め方向に移動した場合の位置に対応する8つの移動候補点に、中央の升目の中心位置(現在位置)に対応する1つの移動候補点が追加される。ただし、(5)で示す中央の升目の中心位置は、エージェントiおよびエージェントjが移動しない(静止している)場合の位置である。
図8に戻って、相互利益は、エージェントiが複数(この実施例では、9つ)の移動候補点(Δt秒後の位置)の各々に移動した場合(「第1移動計画を選択した場合」に相当する)における各利益と、エージェントjが複数(この実施例では、9つ)の移動候補点の各々に移動した場合(「第2移動計画を選択した場合」に相当する)における各利益の全ての組み合わせについて、それぞれ算出される。つまり、エージェントiの複数の移動候補点と、エージェントjの複数の移動候補点のすべての組み合わせ(9×9=81)について、相互利益が算出される。
ただし、図8に示す例では、エージェントiとエージェントjの前方に目的地となる展示物が配置されているものとする。また、移動前のエージェントiとエージェントjを実線で示し、移動後のエージェントiとエージェントjを点線で示す。なお、エージェントiまたはエージェントjは移動しない(すなわち待機する)場合もある。
算出された全ての相互利益から最大の相互利益の組み合わせが選択され、選択された組み合わせのエージェントiの移動候補点がΔt秒後のエージェントiの位置として記憶される。ただし、エージェントiとエージェントjが衝突する場合の組み合せについては、最大の相互利益の組み合わせを選択する前に選択の候補(または選択肢)から除外される。この実施例では、エージェントiとエージェントjの距離が所定距離(たとえば、1m)以下である場合に、これらが衝突すると判断するようにしてある。
また、最大の相互利益の組み合わせが選択されると、選択された組み合わせにおけるΔt秒後のエージェントiの位置とエージェントjの位置を基準として、さらにΔt秒後(つまり、2×Δt秒後)にエージェントiが複数の移動候補点の各々に移動した場合の各利益と、2×Δt秒後にエージェントjが複数の移動候補点の各々に移動した場合の各利益との全ての組み合わせについて、それぞれ相互利益が算出される。つまり、前の回で選択されたエージェントiの位置とエージェントjの位置をそれぞれ現在位置として、Δt秒後の移動候補点がエージェントiおよびエージェントjのそれぞれについて算出される。
なお、図8に示す例では、Δt秒後および2×Δt秒後のいずれの場合にも中段に記載された移動候補点の組み合わせについての相互利益が最大である。
このようにして、エージェントiとエージェントjのΔt秒毎の位置(移動候補点)が予測時間t分選択または決定される。つまり、予測時間t分のエージェントiの移動経路すなわち経路計画が算出される。予測時間tは、実行されるタスクに応じて予め決定されており、たとえば、ロボット12が任意の目的地Gまで移動するタスクを実行する場合には、ロボット12は移動するエージェントiであり、この場合には、予測時間tは10秒である。
ただし、実際にロボット12を移動させている場合に、人間または障害物に衝突する可能性がある場合には、ロボット12は移動を停止する。ロボット12は、自身の位置を算出する場合に、2次元距離計測装置106の出力に基づいて周囲に存在する人間または障害物との距離を計測しているため、人間または障害物に衝突する可能性があることを知ることができる。
なお、上記のように作成される経路計画では、何度も同じ場所を通る冗長な経路計画が作成されてしまうことがある。冗長な経路計画が作成された場合には、利益の総和が減少せず、かつエージェントiとエージェントjが衝突しない範囲で、冗長部分が削除される。
詳細な説明は省略するが、エージェントjの数が2である場合には、エージェントiの複数の移動候補点と、一方のエージェントj1の複数の移動候補点と、他方のエージェントj2の複数の移動候補点のすべての組み合わせ(9×9×9=729)について、相互利益が算出される。この場合には、相互利益が最大となる組み合わせが選択され、選択された組み合わせのエージェントiの移動候補点がΔt秒後のエージェントiの位置として記憶される。
また、最大の相互利益の組み合わせが選択されると、選択された組み合わせにおけるΔt秒後のエージェントiの位置とエージェントj1の位置とエージェントj2の位置を基準として、さらにΔt秒後(つまり、2×Δt秒後)にエージェントiが複数の移動候補点の各々に移動した場合の各利益と、2×Δt秒後にエージェントj1が複数の移動候補点の各々に移動した場合の各利益と、2×Δt秒後にエージェントj2が複数の移動候補点の各々に移動した場合の各利益の全ての組み合わせについて、それぞれ相互利益が算出される。つまり、前の回で選択されたエージェントiの位置とエージェントj1の位置とエージェントj2の位置をそれぞれ現在位置として、Δt秒後の移動候補点がエージェントiとエージェントj1とエージェントj2のそれぞれについて算出される。
なお、説明は省略するが、エージェントjの数が3以上の場合も、エージェントjの数が2の場合と同様にして、エージェントiの経路計画が算出される。
図10は図3に示したメモリ84(RAM)のメモリマップ500を示す図である。図10に示すように、メモリ84は、プログラム記憶領域502およびデータ記憶領域504を含む。プログラム記憶領域502は、ロボット制御プログラムを記憶する。ロボット制御プログラムは、自己位置推定プログラム502a、通信プログラム502b、係数算出プログラム502c、移動候補点算出プログラム502d、相互利益算出プログラム502e、経路計画作成プログラム502fおよび行動制御プログラム502gを含む。
なお、ロボット制御プログラムは、ロボット12が起動されたときに、HDDから読み出され、RAMに記憶される。
自己位置推定プログラム502aは、2次元距離計測装置106の出力と地図データ504aに基づいて、ロボット12自身の位置すなわち自己位置を推定(または検出)するためのプログラムである。通信プログラム502bは、他のロボット12およびユーザの端末などの外部コンピュータと無線通信するためのプログラムである。
係数算出プログラム502cは、ロボット12自身(エージェントi)が実行中のタスクの優先度と、所定範囲内に存在する他のロボット12(エージェントj)が実行中のタスクの優先度から係数αを算出するためのプログラムである。移動候補点算出プログラム502dは、エージェントiのΔt秒後の複数の移動候補点とのエージェントjのΔt秒後の複数の移動候補点を、それぞれ算出するためのプログラムである。ただし、移動候補点は、エージェントiが、基準位置からΔt秒分移動した場合の位置である。また、基準位置の初期値は、エージェントiの現在位置であり、時間間隔Δt秒毎に更新される。これらのことは、エージェントjについても同様である。
相互利益算出プログラム502eは、エージェントiが複数の移動候補点に移動した場合の各利益と、エージェントjが複数の移動候補点に移動した場合の各利益に基づいて、エージェントiの複数の移動候補点とエージェントjの複数の移動候補点の各組み合わせについての相互利益をそれぞれ算出するためのプログラムである。ただし、利益関数は、HDDに予め記憶されており、実行中のタスクに応じて決定される。
経路計画作成プログラム502fは、移動候補点算出プログラム502dおよび相互利益算出プログラム502eを予測時間t分繰り返し実行し、各回において、相互利益算出プログラム502eに従って算出される複数の相互利益から最大の相互利益を選択し、選択した相互利益を有する組におけるエージェントiおよびエージェントjの移動候補点をそれぞれ記憶して、ロボット12の経路計画を作成するためのプログラムである。ただし、上述したように、冗長な経路計画が作成されないために、エージェントiの移動候補点とエージェントjの移動候補点の組み合わせと同じ組み合わせについては、選択肢から除外される。また、上述したように、最大の相互利益を選択する前に、エージェントiとエージェントjが衝突する場合の移動候補点の組み合わせについては選択肢から除外される。
行動制御プログラム502gは、人間とのコミュニケーションに基づくタスクを実行したり、ユーザの命令に従うタスクを実行するためのプログラムであって、ロボット12自身(エージェントi)の行動を制御する。ただし、上述したように、タスクを実行する場合、ロボット12は、作成した経路計画に従って移動する。
図示は省略するが、プログラム記憶領域502には、センサ情報を検知するための検知プログラム、3次元距離計測装置108の出力に基づいて、ロボット12の周囲に存在する人間を検出するとともに、検出した人間の位置を検出するための人間位置検出プログラム、コミュニケーション対象の人間の音声を認識するための音声認識プログラム、およびコミュニケーション対象の人間に音声を出力するための音声出力プログラムなどの他のプログラムも記憶される。
また、データ記憶領域504には、地図データ504a、優先度テーブルデータ504b、係数データ504c、第1行動情報データ504d、第2行動情報データ504e、相互利益データ504fおよび経路計画データ504gが記憶される。
地図データ504aは、ロボット12が配置される環境を上方から見た2次元の地図についてのデータである。上述したように、地図には、所定の位置を原点とする2次元座標が割り当てられており、平面上の位置は座標で表される。また、地図には、通路、壁、柱および固定的に配置されている障害物(たとえば、消火器、ごみ箱など)が記載される。さらに、展示物(A、B、C、D、E、Fなど)が配置された環境においては、展示物も地図に記載される。障害物および展示物の位置(2次元座標)は予め知ることができる。
なお、ユーザの端末は、地図データ504aと同じまたは同等の地図データを記憶しており、または、参照可能であり、ユーザは、端末を介してこの地図データに対応する地図を参照し、ロボット12の目的地Gを指定したり、コミュニケーション対象として選択する人間が存在する位置を指定したりする。
優先度テーブルデータ504bは、図4に示したような優先度テーブルについてのデータであり、予め設定される。係数データ504cは、係数算出プログラム502cに従って算出された係数αについての数値データである。
第1行動情報データ504dは、ロボット12自身(エージェントi)の行動情報についてのデータである。第2行動情報データ504eは、エージェントiの所定範囲内に存在する他のロボット12(エージェントj)の行動情報についてのデータである。
なお、エージェントjの数が2以上の場合には、各エージェントjについての行動情報が識別可能に記憶される。
相互利益データ504fは、相互利益算出プログラム502eに従って算出される複数の相互利益についてのデータである。上述したように、移動候補点算出プログラム502dおよび相互利益算出プログラム502eは、予測時間t分繰り返し実行されるため、相互利益データ504fは各回で更新される。
経路計画データ504gは、Δt秒毎に(各回で)相互利益が最大となるエージェントiの位置(移動候補点)を、予測時間t分時系列に従って並べた移動経路すなわち経路計画についてのデータである。この経路計画データ504gは、後述する展開済みの移動計画リストLcloseに含まれるエージェントiの移動予測軌跡P.Piのデータに相当する。
図示は省略するが、データ記憶領域504には、他のデータが記憶されたり、フラグおよび/またはタイマ(カウンタ)が設けられたりする。
図11および図12は、図3に示したCPU80のロボット制御処理を示すフロー図である。図11に示すように、CPU80は、ロボット制御処理を開始すると、ステップS1で、終了かどうかを判断する。ここでは、CPU80は、ユーザの端末から停止コマンドを受信したかどうかを判断する。ステップS1で“YES”であれば、つまり、終了であれば、ロボット制御処理を終了する。
一方、ステップS1で“NO”であれば、つまり、終了でなければ、ステップS3で、自己位置を推定(検出)し、ステップS5で、第1行動情報を送信し、ステップS7で、第2行動情報を受信し、ステップS9に進む。
ただし、ステップS3では、第1行動情報データ504dにおけるロボット12自身の現在位置の位置情報が更新される。また、ステップS5では、CPU80は、通信LANボード102および無線通信装置104を介して、第1行動情報データ504dをブロードキャスト(送信)する(後述するステップS21も同様である)。なお、ステップS5では、行動の内容が決定されていないため、行動情報には、タスク情報および利益関数は含まれない。さらに、ステップS7では、CPU80は、無線通信装置104を介して他のロボット12から受信した受信データとしての第2行動情報データ504eを、通信LANボード102から取得する(後述するステップS23も同様である)。
なお、図示は省略するが、人間とコミュニケーションしていない場合またはユーザの端末から何らコマンドを受信していない場合には、ロボット12は停止していても良く、また、自由に移動しても良い。
ステップS9では、行動の内容が決定されたかどうかを判断する。つまり、CPU80は、人間とのコミュニケーションに基づいて行動(タスク)を決定したり、ユーザの端末からタスクの実行を指示するコマンドを受信したりしたかどうかを判断する。ただし、ユーザは、端末を用いてコマンドを入力するともに、目的地Gを指定する。
ステップS9で“NO”であれば、つまり、行動の内容が決定されていなければ、ステップS1に戻る。一方、ステップS9で“YES”であれば、つまり、行動の内容が決定されれば、ステップS11、係数αを算出する。つまり、CPU80は、優先度テーブルデータ504bを参照して、実行する(実行中)のタスクに対応する優先度を取得し、第2行動情報データ504eに含まれるタスクIDが示すタスクに対応する優先度を取得し、係数αを算出する。このとき、算出された係数αの数値データすなわち係数データ504cがデータ記憶領域504に記憶される。
続くステップS13では、後述する経路計画の作成処理(図13および図14参照)を実行して、図12に示すステップS15で、行動を開始する。ロボット12は、ロボット制御処理と並行して、ステップS9において、決定された行動すなわちタスクを実行することにより、移動を含む行動を実行し、移動するときに、作成した経路計画に従って(後述する、展開済みの移動計画リストLcloseに含まれるエージェントiの移動予測軌跡P.Piを参照して)移動する。
次のステップS17では、行動を完了したかどうかを判断する。つまり、CPU80は、タスクの実行を終了したかどうかを判断する。ステップS17で“YES”であれば、つまり、行動を完了すれば、図11に示したステップS1に戻る。
一方、ステップS17で“NO”であれば、つまり、行動を完了していなければ、ステップS19で、自己位置を推定し、ステップS21で、第1行動情報を送信し、ステップS23で、第2行動情報を受信し、ステップS25で、他のロボット12(エージェントj)の行動が変化したかどうかを判断する。つまり、CPU80は、ステップS23で受信した第2行動情報データ504eに含まれるタスクIDが変化したかどうかを判断する。
ステップS25で“NO”であれば、つまり、他のロボット12の行動が変化していなければ、ステップS29に進む。一方、ステップS25で“YES”であれば、ステップS27で、係数αを算出し、ステップS29に進む。つまり、ステップS27では、エージェントjの行動の変化に応じて、係数αが再計算される。ステップS29では、経路計画の作成処理を実行し、ステップS17に戻る。
図13、図14および図15は、図11のステップS13および図12のステップS29に示した経路計画の作成処理を示すフロー図である。図13に示すように、CPU80は、経路計画の作成処理を開始すると、ステップS51で、展開済みの移動計画リストLcloseと、展開前の移動計画リストLopenを初期化する。次のステップS53では、初期移動計画P0を作成する。
ここで、移動計画Pは、時間間隔Δtの累積値P.t、エージェントiの移動予測軌跡P.Pi、エージェントjの移動予測軌跡P.Pjおよび累積値P.tにおける利益P.Uを含む。
また、上記の初期移動計画P0は、移動計画Pの初期値である。したがって、初期移動計画P0では、累積値P.t=0であり、エージェントiの移動予測軌跡P.Piはエージェントiの現在位置のみであり、エージェントjの移動予測軌跡P.Pjはエージェントjの現在位置のみであり、利益P.Uは、エージェントiの現在位置とエージェントjの現在位置に基づいて算出される。ただし、エージェントiの移動予測軌跡P.Piは、時間間隔Δt毎のエージェントiの位置を時系列順に並べた集合(またはリスト)である。また、エージェントjの移動予測軌跡P.Pjは、時間間隔Δt毎のエージェントjの位置を時系列順に並べた集合(またはリスト)である。
次に、ステップS55で、初期移動計画を展開前の移動計画リストLopenの先頭に追加し、ステップS57で、展開前の移動計画リストLopenの先頭にある移動計画Pを取り出し、展開済みの移動計画リストLcloseに追加した後に、ステップS59で、取り出した移動計画Pを、展開前の移動計画リストLopenから削除する。
図14に示すように、続くステップS61では、累積値P.tが予測時間tと一致するかどうかを判断する。つまり、予測時間t分の移動経路が算出されたかどうかを判断する。上述したように、予測時間tは、実行中のタスクによって予め決定されている。
ステップS61で“YES”であれば、つまり、累積値P.tが予測時間tと一致すれば、経路計画の作成処理を終了して、図11および図12に示したロボット制御処理にリターンする。
一方、ステップS61で“NO”であれば、つまり、累積値P.tが予測時間tと一致しなければ、ステップS63で、基準位置を中心としたエージェントiの移動候補点をすべて算出する。ただし、基準位置は、移動候補点を算出するためのエージェントiの位置であり、初回はエージェントiの現在位置であり、2回目以降は、Δt秒毎に予測されたエージェントiの位置である。
次のステップS65では、基準位置を中心としたエージェントjの移動候補点をすべて算出する。ただし、基準位置は、移動候補点を算出するためのエージェントjの位置であり、初回はエージェントjの現在位置であり、2回目以降は、Δt秒毎に予測されたエージェントjの位置である。
続いて、ステップS67で、変数mを初期化し(m=1)、ステップS69で、変数nを初期化する(n=1)。変数mは、エージェントiの移動候補点を個別に識別するための変数であり、変数nは、エージェントjの移動候補点を個別に識別するための変数である。
次に、ステップS71で、m番目のエージェントiの移動候補点を読出し、ステップS73で、n番目のエージェントjの移動候補点を読み出す。そして、図15に示すステップS75で、時間間隔Δt後の移動計画P(以下、「移動計画P´」という)を作成する。移動計画P´では、累積値P.t=P.t+Δtであり、エージェントiの移動予測軌跡P.Piにはエージェントiのm番目の移動候補点が追加され、エージェントjの移動予測軌跡P.Pjにはエージェントjのn番目の移動候補点が追加され、相互利益P.Uは、エージェントiのm番目の移動候補点と、エージェントjのn番目の移動候補点に基づいて算出される。つまり、エージェントiがm番目の移動候補点に移動した場合の利益と、エージェントjがn番目の移動候補点に移動した場合の利益の相互利益P.Uが数2に従って算出される。このとき、ステップS11またはステップS27で算出された係数αが用いられる。
次のステップS77では、移動計画P´が展開済みの移動計画リストLcloseに存在するかどうかを判断する。ステップS77で“YES”であれば、つまり、移動計画P´が展開済みの移動計画リストLcloseに存在すれば、ステップS85に進む。このように、重複する移動計画P´については、展開前の移動計画リストLopenに含まれない。つまり、エージェントiの移動候補点とエージェントjの移動候補点の組み合わせと同じ組み合わせについては、選択肢から除外される。このため、冗長な経路計画が作成されるのが防止される。一方、ステップS77で“NO”であれば、つまり、移動計画P´が展開済みの移動計画リストLcloseに存在しなければ、ステップS79で、移動計画P´で、エージェントiとエージェントjの衝突が発生するかどうかを判断する。
ステップS79で“YES”であれば、つまり、移動計画P´で、エージェントiとエージェントjの衝突が発生する場合には、ステップS85に進む。つまり、エージェントiとエージェントjが衝突する場合の移動計画P´は、展開前の移動計画リストLopenに含まれない。一方、ステップS79で“NO”であれば、つまり、移動計画P´で、エージェントiとエージェントjの衝突が発生しない場合には、ステップS81で、移動計画P´を展開前の移動計画リストLopenに追加して、ステップS83で、展開前の移動計画リストLopenの要素を相互利益P.Uの大きい順に並べる。
続いて、ステップS85で、変数nが9であるかどかを判断する。つまり、CPU80は、累積値P.tにおいて、m番目のエージェントiの移動候補点と、すべてのエージェントjの移動候補点の組み合わせのそれぞれについての相互利益P.Uを算出したかどうかを判断する。
ステップS85で“NO”であれば、つまり、変数nが9でなければ、ステップS87で、変数nを1加算して(n=n+1)、図14に示したステップS73に戻る。一方、ステップS85で“YES”であれば、つまり、変数nが9であれば、ステップS89で、変数mが9であるかどうかを判断する。つまり、CPU80は、累積値P.tにおいて、エージェントiの複数の移動候補点とエージェントjの複数の移動候補点のすべての組み合わせのそれぞれについての相互利益P.Uを算出したかどうかを判断する。
ステップS89で“NO”であれば、つまり、変数mが9でなければ、ステップS91で、変数mを1加算して(m=m+1)、図14に示したステップS69に戻る。一方、ステップS89で“YES”であれば、つまり、変数mが9であれば、図13に示したステップS57に戻る。
この実施例によれば、ロボット同士で行動情報を送受信し、空間リソースの競合を回避するように、ロボットの経路計画を作成し、作成した経路計画に従ってロボットを移動させるので、各ロボットの経路計画を算出するための中央制御装置を設ける必要がなく、別々のタスクを実行している複数のロボット間における移動の調整を分散的に実現することができる。このように、各タスクの利益関数および優先度を複数のロボットで共有することで、複数のロボットが互いの移動計画を分散的に計算し、それぞれ協調した移動計画の決定および実行が可能になる。つまり、異なるタスクの移動を行うロボット間の移動計画の協調を効率的に実施することができる。
なお、この実施例では、各ロボットが経路計画を作成するようにしたが、各ロボットは、ロボット自身(エージェントi)の経路計画のみならず、他のロボット(エージェントj)の経路計画も算出しているため、エージェントiが、エージェントiの経路計画とエージェントjの経路計画を算出し、エージェントjに経路計画を送信するようにしてもよい。このようにしても、中央制御装置を設けずに、効率的にロボット間の移動計画を調整することができる。
また、この実施例では、各エージェントについて、9つの移動候補点に移動した場合の利益を算出し、相互利益を算出するようにしたが、移動候補点の数は9に限定される必要はない。CPUまたはコンピュータの処理能力が高い場合には、移動候補点の数は10以上であってもよい。また、CPUまたはコンピュータの処理能力が低い場合には、移動候補点の数は9未満にしてもよいが、移動候補点の数を減らし過ぎるのは好ましくない。