図1を参照して、この実施例のコミュニケーションロボット(以下、単に「ロボットという)10は、相互作用指向のロボットであり、主として人間のようなコミュニケーションの対象(コミュニケーション対象)との間で、身振り手振りのようなジェスチャ(身体動作)および音声の少なくとも一方を含むコミュニケーション行動を実行する機能を備えている。ロボット10は、受付や案内などの様々なサービスを提供し、たとえば或る会社やイベント会場(ショッピングモール、展示会場)などの様々な場所ないし状況(環境)に配置される。また、ロボット10は、環境内で自走可能である。
なお、後で詳細に説明するように、この実施例では、ロボット10は領域分割装置としても機能する。
図1は、この実施例のロボット10の外観を示す正面図である。ロボット10は台車18を含み、台車18の下面にはロボット10を自律移動させる2つの車輪20および1つの従輪22が設けられる。2つの車輪20は車輪モータ24(図3参照)によってそれぞれ独立に駆動され、台車18すなわちロボット10を前後左右の任意方向に動かすことができる。また、従輪22は車輪20を補助する補助輪である。したがって、ロボット10は、配置された空間内を自律制御によって移動可能である。
台車18の上には、円柱形のセンサ取り付けパネル26が設けられ、このセンサ取り付けパネル26には、多数の距離センサ28が取り付けられる。これらの距離センサ28は、センサ取り付けパネル26すなわちロボット10の周囲の物体(人間や障害物など)との距離を測定するものである。
センサ取り付けパネル26の上には、胴体30が直立するように設けられる。また、胴体30の前方中央上部(人の胸に相当する位置)には、上述したがさらに設けられ、ロボット10の前方の主として人間との距離を計測する。また、胴体30には、その側面側上端部のほぼ中央から伸びる支柱32が設けられ、支柱32の上には、全方位カメラ34が設けられる。全方位カメラ34は、ロボット10の周囲を撮影するものであり、後述する眼カメラ58とは区別される。この全方位カメラ34としては、たとえばCCDやCMOSのような固体撮像素子を用いるカメラを採用することができる。なお、これら距離センサ28および全方位カメラ34の設置位置は、当該部位に限定されず適宜変更され得る。
胴体30の両側面上端部(人の肩に相当する位置)には、それぞれ、肩関節36Rおよび肩関節36Lによって、上腕38Rおよび上腕38Lが設けられる。図示は省略するが、肩関節36Rおよび肩関節36Lは、それぞれ、直交する3軸の自由度を有する。すなわち、肩関節36Rは、直交する3軸のそれぞれの軸廻りにおいて上腕38Rの角度を制御できる。肩関節36Rの或る軸(ヨー軸)は、上腕38Rの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節36Lは、直交する3軸のそれぞれの軸廻りにおいて上腕38Lの角度を制御できる。肩関節36Lの或る軸(ヨー軸)は、上腕38Lの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。
また、上腕38Rおよび上腕38Lのそれぞれの先端には、肘関節40Rおよび肘関節40Lが設けられる。図示は省略するが、肘関節40Rおよび肘関節40Lは、それぞれ1軸の自由度を有し、この軸(ピッチ軸)の軸回りにおいて前腕42Rおよび前腕42Lの角度を制御できる。
前腕42Rおよび前腕42Lのそれぞれの先端には、人の手に相当する球体44Rおよび球体44Lがそれぞれ固定的に設けられる。ただし、指や掌の機能が必要な場合には、人間の手の形をした「手」を用いることも可能である。また、図示は省略するが、台車18の前面,肩関節36Rと肩関節36Lとを含む肩に相当する部位,上腕38R,上腕38L,前腕42R,前腕42L,球体44Rおよび球体44Lには、それぞれ、接触センサ(図3で包括的に示す)46が設けられる。台車18の前面の接触センサ46は、台車18への人間や障害物の接触を検知する。したがって、ロボット10は、その自身の移動中に人間や障害物との接触が有ると、それを検知し、直ちに車輪20の駆動を停止してロボット10の移動を急停止させることができる。また、その他の接触センサ46は、当該各部位に触れたかどうかを検知する。なお、接触センサ46の設置位置は、当該部位に限定されず、適宜な位置(人の胸,腹,脇,背中および腰に相当する位置)に設けられてもよい。
胴体30の中央上部(人の首に相当する位置)には首関節48が設けられ、さらにその上には頭部50が設けられる。図示は省略するが、首関節48は、3軸の自由度を有し、3軸の各軸廻りに角度制御可能である。或る軸(ヨー軸)はロボット10の真上(鉛直上向き)に向かう軸であり、他の2軸(ピッチ軸、ロール軸)は、それぞれ、それと異なる方向で直交する軸である。
頭部50には、人の口に相当する位置に、スピーカ52が設けられる。スピーカ52は、ロボット10が、それの周辺の人間に対して音声ないし音によってコミュニケーションを取るために用いられる。また、人の耳に相当する位置には、マイク54Rおよびマイク54Lが設けられる。以下、右のマイク54Rと左のマイク54Lとをまとめてマイク54ということがある。マイク54は、周囲の音、とりわけコミュニケーションを実行する対象である人間の声を取り込む。さらに、人の目に相当する位置には、眼球部56Rおよび眼球部56Lが設けられる。眼球部56Rおよび眼球部56Lは、それぞれ眼カメラ58Rおよび眼カメラ58Lを含む。以下、右の眼球部56Rと左の眼球部56Lとをまとめて眼球部56ということがある。また、右の眼カメラ58Rと左の眼カメラ58Lとをまとめて眼カメラ58ということがある。
眼カメラ58は、ロボット10に接近した人間の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。また、眼カメラ58は、上述した全方位カメラ34と同様のカメラを用いることができる。たとえば、眼カメラ58は、眼球部56内に固定され、眼球部56は、眼球支持部(図示せず)を介して頭部50内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、2軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この2軸の一方は、頭部50の上に向かう方向の軸(ヨー軸)であり、他方は、一方の軸に直交しかつ頭部50の正面側(顔)が向く方向に直行する方向の軸(ピッチ軸)である。眼球支持部がこの2軸の各軸廻りに回転されることによって、眼球部56ないし眼カメラ58の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ52,マイク54および眼カメラ58の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
このように、この実施例のロボット10は、車輪20の独立2軸駆動,肩関節36の3自由度(左右で6自由度),肘関節40の1自由度(左右で2自由度),首関節48の3自由度および眼球支持部の2自由度(左右で4自由度)の合計17自由度を有する。
図2はロボット10の電気的な構成を示すブロック図である。この図2を参照して、ロボット10は、CPU60を含む。CPU60は、マイクロコンピュータ或いはプロセッサとも呼ばれ、バス62を介して、メモリ64,モータ制御ボード66,センサ入力/出力ボード68および音声入力/出力ボード70に接続される。
メモリ64は、図示は省略をするが、ROM,HDDおよびRAMを含む。ROMおよびHDDには、ロボット10の動作を制御するための制御プログラムが予め記憶される。たとえば、各センサの出力(センサ情報)を検知するための検知プログラム、および外部コンピュータとの間で必要なデータやコマンド(メッセージ)を送受信するための通信プログラムなどが記録される。また、RAMは、ワークメモリやバッファメモリとして用いられる。
モータ制御ボード66は、たとえばDSPで構成され、各腕や首関節および眼球部などの各軸モータの駆動を制御する。すなわち、モータ制御ボード66は、CPU60からの制御データを受け、右眼球部56Rの2軸のそれぞれの角度を制御する2つのモータ(図2では、まとめて「右眼球モータ72」と示す)の回転角度を制御する。同様にして、モータ制御ボード66は、CPU60からの制御データを受け、左眼球部56Lの2軸のそれぞれの角度を制御する2つのモータ(図2では、まとめて「左眼球モータ74」と示す)の回転角度を制御する。
また、モータ制御ボード66は、CPU60からの制御データを受け、右肩関節36Rの直交する3軸のそれぞれの角度を制御する3つのモータと右肘関節40Rの角度を制御する1つのモータとの計4つのモータ(図2では、まとめて「右腕モータ76」と示す)の回転角度を制御する。同様にして、モータ制御ボード66は、CPU60からの制御データを受け、左肩関節36Lの直交する3軸のそれぞれの角度を制御する3つのモータと左肘関節40Lの角度を制御する1つのモータとの計4つのモータ(図2では、まとめて「左腕モータ78」と示す)の回転角度を制御する。
さらに、モータ制御ボード66は、CPU60からの制御データを受け、首関節48の直交する3軸のそれぞれの角度を制御する3つのモータ(図2では、まとめて「頭部モータ80」と示す)の回転角度を制御する。そして、モータ制御ボード66は、CPU60からの制御データを受け、車輪20を駆動する2つのモータ(図2では、まとめて「車輪モータ24」と示す)の回転角度を制御する。なお、この実施例では、車輪モータ24を除くモータは、制御を簡素化するためにステッピングモータ(すなわち、パルスモータ)を用いる。ただし、車輪モータ24と同様に直流モータを用いるようにしてもよい。また、ロボット10の身体部位を駆動するアクチュエータは、電流を動力源とするモータに限らず適宜変更された、たとえば、他の実施例では、エアアクチュエータが適用されてもよい。
センサ入力/出力ボード68もまた、同様に、DSPで構成され、各センサからの信号を取り込んでCPU60に与える。すなわち、距離センサ28のそれぞれからの反射時間に関するデータがこのセンサ入力/出力ボード68を通じてCPU60に入力される。距離センサ28としては、赤外線距離センサまたはレーザ距離センサを用いることができ、それら両方を用いるようにしてもよい。また、全方位カメラ34からの映像信号が、必要に応じてセンサ入力/出力ボード68で所定の処理を施してからCPU60に入力される。眼カメラ58からの映像信号も、同様にして、CPU60に入力される。また、上述した複数の接触センサ(図3では、まとめて「接触センサ46」と示す)からの信号がセンサ入力/出力ボード68を介してCPU60に与えられる。
音声入力/出力ボード70もまた、同様に、DSPで構成され、CPU60から与えられる音声合成データに従った音声または声がスピーカ52から出力される。また、マイク54からの音声入力が、音声入力/出力ボード70を介してCPU60に与えられる。
また、CPU60は、バス62を介して通信LANボード82に接続される。通信LANボード82は、DSPで構成され、CPU60から与えられた送信データを無線通信装置84に与え、無線通信装置84から送信データを、ネットワーク100を介して外部コンピュータ(記憶制御装置102など)に送信する。また、通信LANボード82は、無線通信装置84を介してデータを受信し、受信したデータをCPU60に与える。つまり、ロボット10は、通信LANボード82および無線通信装置84によって、記憶制御装置102と無線通信を行うことができる。
さらに、CPU60は、バス62を介して無線タグ読取装置86が接続される。無線タグ読取装置86は、アンテナ(図示せず)を介して、無線タグ(RFIDタグ)から送信される識別情報の重畳された電波を受信する。そして、無線タグ読取装置86は、受信した電波信号を増幅し、当該電波信号から識別信号を分離し、当該識別情報を復調(デコード)してCPU60に与える。無線タグは、会社やイベント会場などに居る人間に装着されており、無線タグ読取装置86は、通信可能範囲内の無線タグを検出する。なお、無線タグは、アクティブ型であってもよいし、無線タグ読み取り装置86から送信される電波に応じて駆動されるパッシブ型であってもよい。
このようなロボット10は、上述したように、或る環境に配置され、当該環境内において受付や案内などのサービスを提供する。この実施例では、そのようなサービスの提供のうち、或る環境において、その一部の領域を参照しながら、コミュニケーション対象としての人間との間でコミュニケーション行動を実行する場合について説明する。
たとえば、人間同士のコミュニケーションを考えた場合、荷物の置き場所を聞かれると、聞かれた人間(案内人)は、その荷物を置くことができる領域を探し、指差しながら、ここ(そこ、あそこ)やこの辺(その辺、あの辺)などと発話して、荷物の置き場所(領域)を聞き手に伝える。ただし、壁、柱、机、椅子のように環境内に存在する物(オブジェクト)を参照して、たとえば、「机の横」、「柱の前」などのように、指示語に代えて、特定のオブジェクトに対応して決まる表現の言語(以下、「相対言語」ということがある)を発話することもある。
この実施例では、ロボット10に、上記の案内人と同様のコミュニケーション行動を実行させるのである。つまり、或る環境(空間)において、領域を抽出(分割)し、人間からの質問(リクエスト)に対して、適切な領域を選択し、選択した領域をコミュニケーション行動によって伝達するのである。この際、適切な身体動作および発話内容も選択されるのである。
以下、領域を抽出(分割)する方法、領域を選択する方法および領域を参照したコミュニケーション行動の実行について順次説明することにする。
まず、領域を抽出(分割)する場合には、その元となるグリッドマップが生成される。グリッドマップは、オブジェクト地図情報、カメラ画像および距離情報に基づいて生成される。
オブジェクト地図情報は、環境を俯瞰的に真上から見た2次元の地図(見取り図)であり、当該環境に固定的に配置されるオブジェクト(固定オブジェクト)がその形状(大きさ)で記載される。図3では省略するが、オブジェクト地図情報では、各固定オブジェクトの配置位置は2次元座標で管理されている。たとえば、2次元座標の原点Oは、図3に示す環境を規定する四角枠の左下の頂点に設定される。ただし、2次元座標系では、図3の横方向がX軸方向であり、図3の縦方向がY軸方向である。また、図3の右方向がX軸のプラス方向であり、図3の上方向がY軸のプラス方向である。
なお、この実施例では、固定オブジェクトとしては、壁、柱、花壇、カウンタ、書庫などが該当する。つまり、移動できないオブジェクトや滅多に移動することがないオブジェクトが、固定オブジェクトに該当する。
図4には、カメラ画像の一例が示される。たとえば、カメラ画像は、ロボット10が配置される環境を、当該ロボット10の眼カメラ58で撮影した画像である。ロボット10は、環境内でオブジェクト地図情報に設定された座標系と同じ座標系で自身の位置(現在位置)を管理しており、眼カメラ58で画像を撮影した場合には、撮影した画像を撮影した位置に対応付けてメモリ64に記憶する。
この図4に示すカメラ画像から分かるように、図3に示した固定オブジェクトに加えて、環境内には、テーブルおよび椅子のような、移動可能なオブジェクト(以下、「可動オブジェクト」という)も配置される。このような可動オブジェクトは、比較的高い頻度で移動されることがあると考えられるため、オブジェクト地図情報には登録されず、必要に応じて、後述するように、カメラ画像および距離情報から検出される。
なお、この実施例では、可動オブジェクトとしては、机、テーブル、椅子、ソファーなどが該当する。
距離情報は、ロボット10が環境内を移動することにより、或る位置(XY座標)において距離センサ28によって距離が検出されたとき、当該位置に対応づけて、当該距離とその方向(角度)とを含む距離に関する情報(データ)である。このような距離情報によって、何らかの物体(オブジェクト)が存在することとその位置とを知ることができる。
ここで、カメラ画像と距離情報とから可動オブジェクトを検出する方法について説明する。この実施例では、可動オブジェクトの検出には、画像処理のエッジ検出と、セグメンテーションとが用いられる。エッジ検出には、Cannyのエッジ検出法(J.Canny. A computational approach to edge detection. IEEE Trans. on Pattern Analysis and Machine Intelligence, Vol.8, No.6, 11 1986.)が用いられる。また、セグメンテーションには、オブジェクトの境界を検出する距離センサ28からの情報と、つながった領域として抽出されたオブジェクトの領域の情報とが用いられる。この実施例では、つながった領域は、同じ色を有していることが検出される塊(領域)であり、このような領域について距離情報から何らかのオブジェクトが有ることが判断された場合に、オブジェクト(可動オブジェクト)が有ることを認識する。つまり、カメラ画像から同じ色を有する平面的な一定の領域を検出し、距離情報を参照して、その一定の領域の位置において距離が検出されている場合には、その一定の領域は高さを有していることが分かり、したがって、オブジェクトが有ると判断することができる。
ただし、カメラ画像には、上述した固定オブジェクトも含まれるため、当然のことならが、エッジ検出およびセグメンテーションによって、この固定オブジェクトも検出される。
また、図4に示すカメラ画像から分かるように、床面には、タイルなどの継ぎ目による線(床の模様)が入っている。このような床の模様についてもカメラ画像に基づいて取得(検出)される。これは、人間が領域を参照する場合に、模様によって領域を区別することが有るからである。この実施例では、床の模様の抽出には、OpenCV(OpenCV1.0. http://opencv.willowgarage.com/wiki/.)が用いられる。また、ノイズ除去のためにガウシアンフィルタを用い、床の模様を抽出するために、上述したCannyのエッジ検出法が用いられる。
なお、この実施例では、環境として或る屋内を想定してあるため、床面の模様を検出するようにしてあるが、環境が屋外である場合には、地面(またはコンクリートや道路)の模様が検出される。ただし、屋外であっても、アーケード街などでは、床面と同様に、タイルが敷き詰められている場合もある。
ただし、カメラ画像に基づいて得られた可動オブジェクトおよび床の模様は、3次元の現実空間を眼カメラ58によって斜め上方から見た場合の画像において検出されるため、その画像がオブジェクト地図情報と同様に、現実空間を真上から俯瞰的に見た2次元の画像(情報)に変換される。ただし、可動オブジェクトおよび床の模様が検出されたカメラ画像を2次元の画像に変換するとき、眼カメラ58のキャリブレーションを行う過程で作成した変換行列が用いられる。したがって、撮影時の眼カメラ58の角度やレンズの中心のぶれによって、カメラ画像に歪み(画像の端の付近の歪み)が生じている場合であっても、正しく2次元の情報に変換される。
そして、たとえば、オブジェクト地図情報に、検出された可動オブジェクトおよび床の模様を登録し、それを格子状に細分化することにより、グリッドマップが生成される。
このようにして生成されたグリッドマップを用いて、複数の領域(領域群)が抽出(分割)される。図5(A)には、グリッドマップの一例が示されるが、簡単のため、固定オブジェクト、可動オブジェクトおよび床の模様(以下、これらをまとめて「障害物」ということがある)は省略してある。
なお、この実施例では、グリッドに含まれる各桝目(枠)は一辺が現実空間における20cmの長さに相当する大きさに設定されている。したがって、グリッドマップの縮尺に応じて各枠の大きさも変化される。
また、各枠には、図5(B)に示すように、識別情報(インデックス番号)が付されており、インデックス番号に従う順番で、各枠を基準とするバルーン(領域)の生成が実行される。バルーン(領域)の生成方法については、これ以降で詳細に説明する。
この実施例では、グリッドマップが生成されると、このグリッドマップに対応して、図6に示すような参照リストが作成される。この参照リストは、バルーンを生成する際の元になる円(以下、「伸縮円」という)C(g)を描画する際に、参照されるリストである。図6に示すように、参照リストでは、各枠のインデックス番号に対応して、当該枠の中心の座標(点g)と直線Pの傾きdとの組が記述される。図6からも分かるように、1つの枠(点g)に対して、0°から30°ずつ傾きが異なる直線Pが設定される。この実施例では、傾きdは、0°から330°まで、30°単位で設定される。この実施例では、インデックス番号および傾きの角度の両方が小さい順に、点gと傾きdの組が参照される。
なお、傾きdは、もっと細かく設定してもよいが、計算が膨大になってしまう。また、オブジェクトが整然と並んでいるような環境では、傾きdをもっと大雑把に設定してもよいと考えられる。
たとえば、図7(A)に示すように、グリッドの或る枠の点gに傾きdが0°の直線Pが設定されている場合には、まず、当該点gを中心とする伸縮円C(g)が描画される。ただし、伸縮円C(g)が描画された当初では、その半径は0であり、その状態から一段階ずつ半径が長くされる。この実施例では、一段階に相当する長さは、1つの枠の一辺の長さの半分である。したがって、最初に描画される伸縮円C(g)は、図8(A)に示すように、当該点gを中心とする枠に内接する円となる。図8(A)に示す場合において、さらに一段階半径が大きくされると、図8(B)のように示される。このようにして、伸縮円C(g)が拡大される。
この実施例では、伸縮円C(g)の半径は、グリッドマップにおける障害物(固定オブジェクト、可動オブジェクトおよび床の模様)に接触(衝突)するまで、一段階ずつ長くされる。そして、伸縮円C(g)が障害物に衝突すると、この伸縮円C(g)の半径は、衝突する直前の(一段階手前)の長さに戻される。同様にして、傾きdの直線Pに沿って、当該直線Pが通るすべての枠(点g)のそれぞれについて、その点gを中心とする伸縮円C(g)が描画されるのである。図7(A)に示した例では、斜線を付した枠に対して伸縮円C(g)が描画されるのである。
また、この実施例では、1つの伸縮円C(g)を描画すると、次に、その枠(点g)に隣接し、直線Pが通る枠(点g)について伸縮円C(g)が描画され、拡大される。たとえば、参照リストが示す組の枠(点g)を基準として、基本的に右方向(X軸のプラス方向)に隣接し、直線Pが通る枠(点g)に順次伸縮円C(g)を描画する。そして、右方方向への伸縮円C(g)の描画を終えると、参照リストが示す組の枠(点g)を基準として、基本的に左の方向(Y軸のマイナス方向)に隣接し、直線Pが通る枠(点g)に順次伸縮円C(g)を描画する。
したがって、図7(A)に示す場合には、点gが記載された枠について伸縮円C(g)を描画すると、次にその右隣の枠について伸縮円C(g)を描画し、これを繰り返す。右方向への伸縮円C(g)の描画を終えると、点gが記載された枠の左隣の枠について伸縮円C(g)を描画し、次にその左隣の枠について伸縮円C(g)を描画する。
図7(B)は、図7(A)に示した点gに対して傾きd=30°の直線Pを設定した場合の例である。この場合にも、直線Pが通る全ての枠について伸縮円C(g)が描画される。つまり、斜線を付したすべての枠に対して伸縮円Cが描画されるのである。ただし、図7(B)に示す場合には、まず、点gが記載された枠について伸縮円C(g)が描画されると、次にその右隣の枠に伸縮円C(g)が描画され、さらにその上側に隣接する枠に伸縮円C(g)が描画される。上述したように、基本的に右方向に隣接すると言うのは、図8(B)に示すように、上方向に隣接したり、後述するように、下方向に隣接したりする場合があるためである。右方向への伸縮円C(g)の描画を終えると、点gが記載された枠の左隣の枠に伸縮円C(g)が描画され、さらにその下側に隣接する枠に伸縮枠C(g)が描画される。
この実施例では、直線Pが通るすべての枠について伸縮円C(g)を描画したり、隣接する枠の点gが障害物上であったり、隣接する枠に描画された2つの伸縮円C(g)の半径が大きく異なったりする場合には、参照リストが示す現在の組における伸縮円C(g)の描画を終了する。このように、直線Pが通るすべての枠について伸縮円C(g)を描画した場合や隣接する枠の点gが障害物上である場合のみならず、隣接する枠に描画された2つの伸縮円C(g)の半径が大きく異なった場合についても、伸縮円C(g)の描画を終了するのは、このような場合には、障害物等によって領域が分割されていると考えられ、1つの領域として抽出するのは適切でないからである。
参照リストが示す現在の組についての伸縮円C(g)の描画を終了すると、今回の組について描画されたすべての伸縮円C(g)が結合される。この実施例では、今回の組について描画されたすべての伸縮円C(g)に含まれるすべての枠が塗り潰され、塗り潰されたすべての枠の塊によって、1つの領域(バルーン)P(C(g),d)が生成される。
このように、着目する(インデックス番号が示す)枠の点gと直線Pの傾きdとの組において、伸縮円C(g)の描画を終了し、バルーンP(C(g),d)が生成されると、次の組についての伸縮円C(g)の描画が開始される。つまり、直線Pの傾きdが30°回転される。ただし、直前の組の直線Pの傾きdが330°であった場合には、次のインデックス番号が示す枠の点gについての最初の組(d=0°の直線P)についてバルーンP(C(g),d)の生成処理が実行される。
ただし、図6では省略したが、1つの組についてのバルーンP(C(g),d)の生成処理を終了すると、当該組に対応する参照リストの欄にチェックが付される。つまり、当該組について、バルーンP(C(g),d)の生成処理を終了したことが登録される。
図9および図10には、環境に4つの障害物が存在する場合において、或る枠(図示せず)に着目して、伸縮円C(g)を描画および拡大した結果の例を示す図解図である。図9(A)および図9(B)では、直線Pの傾きdが0°の場合について示し、図10(A)および図10(B)では、直線Pの傾きdが30°の場合について示す。ただし、図9および図10では、分かり易く示すために、代表的な伸縮円C(g)のみを示してあるが、実際には、さらに多数の伸縮円C(g)が描画される。
図9(A)では、直線Pの傾きdは0°であり、直線Pの上下に配置される2つの障害物が斜めとなっているため、直線Pの両端に向かうに従って伸縮円C(g)が小さくなっている。したがって、図9(B)に示すように、4つの障害物で囲まれる空間(領域)の形状とは異なり、ひし形に近い形状のバルーンP(C(g),d)が生成される。
一方、図10(A)では、直線Pの傾きdは30°であり、これと平行するように、直線Pの上下に2つの障害物が配置されるため、それらの2つの障害物が配置される間隔と同じ或いはほぼ同じ直径を有する伸縮円C(g)が直線Pに沿って描画される。したがって、図10(B)に示すように、4つの障害物で囲まれる領域と一致ないしほぼ一致するように、バルーンP(C(g),d)が生成される。
このようなバルーンP(C(g),d)は、参照リストの組毎に抽出されるが、抽出されたすべてのバルーンP(C(g),d)から、所定のルールに従って、1のバルーンP(C(g),d)が選択され、分割される領域の候補としての集合(候補の集合)Regions−partに登録(追加)される。ここで、1のバルーンP(C(g),d)を選択する方法について説明する。
一般的に、話し手の近い位置に在る領域は、遠くに在る領域よりも正確に認識されると言える。この知見を表現するために、エネルギの概念を用いることにする。簡単に言うと、近くに在る小さい領域は、遠くにある大きい領域と同程度のエネルギを持つようにする。ロボット10の現在位置と枠(点g)との距離をd(g)とすると、当該枠のエネルギE(g)は数1のように表すことができる。
[数1]
E(g)=1/d(g)2
抽出されたバルーンP(C(g),d)毎に、バルーンP(C(g),d)に含まれるすべての枠についてのエネルギE(g)を算出し、その総和も求める。そして、エネルギE(g)の総和が最大となる1のバルーンP(C(g),d)が選択され、候補の集合Regions−partに登録(追加)される。
1のバルーンP(C(g),d)が候補の集合Region−partに登録されると、当該バルーンP(C(g),d)に含まれる枠を除いた残りの枠について、図6に示したような参照リストが作成され、新しく作成された参照リストに従って伸縮円C(g)の描画処理(バルーンP(C(g),d)の生成処理)が実行される。そして、バルーンP(C(g),d)毎に、エネルギE(g)の総和が求められ、その総和が最大となるバルーンP(C(g),d)が候補の集合Regions−partに登録(追加)される。このような処理が繰り返し実行される。そして、領域の候補としてのバルーンP(C(g),d)を生成することができなくなると、候補の集合Regions−partの生成処理を終了する。この実施例では、グリッドマップに存在する枠の総数の90%に相当する数を超える枠が、バルーンP(C(g),d)を抽出(生成)する対象から除外された場合に、候補の集合Regions−partの生成を終了する。これは、領域として抽出できる枠がほとんど残っていないと考えられるからである。その結果として、無駄な処理の実行を回避することができる。
このような候補の集合Regions−partの生成処理は、カメラ画像からエッジ検出する際のパラメータESを0以上1以下の間で可変的に設定する毎に実行される。ただし、この実施例では、パラメータESは、0から0.3、0.6、0.9、1.0に順次設定される。パラメータESが0に設定された場合には、床の模様が無い場合のグリッドマップが生成される。また、パラメータESが大きくなるにつれて、床の模様がはっきりと現れる。
また、パラメータESが0である場合に生成された候補の集合Regions−partを親階層とし、パラメータESが増加された場合に、生成された候補の集合Regions−partに含まれる領域(バルーンP(C(g),d))のうち、親階層の候補の集合Regions−partに含まれる領域(バルーンP(C(g),d))を子階層の領域として登録する。ただし、親階層の領域に含まれる子階層の領域が当該親階層の領域の80%以上の範囲を占める場合には、実質的に同じ領域であると判断して、子階層の領域から除去する。このようにして、木構造Treeに配列された領域が、分割された領域の集合Regionsとして抽出される。図11には、図4に示したカメラ画像を撮影した環境において、分割された領域R1−R7の例を示す。図11に示すように、領域R1は、R2−R4を含む。これは、領域R1が親階層であり、領域R2−R4がその子階層であることを示す。このように、親階層の領域R1の中に子階層R2−R4が現れるのは、パラメータESを大きくすることにより、床の模様が現れ、それによって伸縮円C(g)を描画する範囲が狭くなるためである。ただし、図11に示すように、環境におけるロボット10の位置は領域R1およびR2の少し下側である。
分割された領域の集合Regionsから、人間からの質問(リクエスト)に応じた1つの領域Rが選択される。たとえば、人間から荷物を置く場所を質問された場合には、分割された領域の集合Regionsに含まれる複数の領域から当該荷物の底面積以上の面積を有する領域を、候補の領域R_Candとして抽出し、抽出した候補のうちから所定の条件を満たす1の領域Rを選択する。この実施例では、所定の条件は、ロボット10(特定の位置)との距離が最短距離であることである。ただし、所定の条件は、質問した人間との距離が最短距離であることでもよい。
領域Rを選択すると、リクエストした人間に対してその領域Rを伝達する場合のロボット10のジェスチャ(身体動作)、発話内容および位置(ジェスチャや発話を実行する場合のロボット10の位置)が決定される。つまり、領域Rを参照したコミュニケーション行動を行うロボット10の制御情報が決定される。
たとえば、領域Rを参照したコミュニケーション行動をロボット10に実行させるために、人間が領域Rを参照する際に、どのようなジェスチャを用い、どのような指示語を用い、どのように領域Rを認識するのかを実験によって導き出した。
実験には、10名の被験者(20代、30代の男性4人と女性6人)が参加した。また、実験では、被験者に、或る建物内の5箇所において、実験者から1m離れて立つように指示した。その際、被験者と実験者とは同じ方向を向いた。各場所においては、必要とする領域のサイズが異なると考えられる6つのタスク(ロボット10に対するリクエストに相当する)を用意した。タスクT1は、「かばんを置く」である。タスクT2は、「人を立って待つ」である。タスクT3は、「立ち話をする」である。タスクT4は、「20個ほどの引っ越しの荷物を置く」である。タスクT5は、「次々に来る幼稚園児を誘導し待機させておく」である。タスクT6は、「ラジコン自動車を走らせる」である。まず、各タスクを実行できると考えられる領域を思い浮かべ、その後に、実験者に領域を伝えるよう、各被験者に指示された。
ただし、この実施例では、領域を参照する際の指示語モデルを構築するために、発話内容を「ここ」、「そこ」、「あそこ」、「この辺」、「その辺」、「あの辺」の6つから選択するように制限した。また、各被験者には、ジェスチャも使用するよう指示された。
このような実験の結果では、領域を参照する場合、腕と人差し指を領域に向けて伸ばし、一時的にその状態を保つ身体動作(説明の都合上、「第1動作」という)と、腕と人差し指を領域に向けて伸ばした後に、領域を指示するように、人差し指で円を描く身体動作(説明の都合上、「第2動作」という)とが大多数を占めた。また、第1動作の回数と第2動作の回数との割合を調べたところ、第2動作によって領域を参照するケースが8割を超えていた。したがって、この実施例では、領域を参照する際には、ロボット10に第2動作を実行させることにする。ただし、ロボット10は、指に相当する部位を有していないため、球状に形成された手の全体によって領域を指示するものとする。
また、領域を第2動作によって参照する場合には、領域の大きさによって、人差し指で描く円の大きさが異なることも、上記の実験の結果に基づいて導き出された。具体的には、実験において、被験者が第2動作で参照し、写真上に描いた領域のピクセル数を数えた。その結果、ピクセル数が0よりも多く50以下である場合には、つまり被験者からの見た目の領域の大きさが小さい場合には、小さな円を描く。また、ピクセル数が50よりも多く400以下である場合には、つまり被験者からの見た目の領域の大きさが中程度である場合には、中程度の大きさの円を描く。さらに、ピクセル数が400よりも多い場合には、つまり被験者からの見た目の領域の大きさが大きい場合には、大きい円を描く。
指示語については、領域の面積が1.7m2よりも大きい場合には、被験者は「辺」の付いた指示語(「この辺」、「その辺」、「あの辺」)を使用する頻度が高い。また、領域の面積が1.7m2以下である場合には、被験者は「辺」の付いていない指示語(「ここ」、「そこ」、「あそこ」)を使用する頻度が高い。したがって、ロボット10に指示語を発話させる場合には、参照する領域の大きさに応じて「辺」を付けるか否かを判別することができる。
また、「こ」、「そ」、「あ」の使い分け(指示語切替)については、上述の実験の結果と、本件の出願人が先に出願し既に公開された特開2006−231497号(参考文献)に開示された指示語決定モデルおよび指示語決定方法とに従って決定される。この実施例の指示語切替モデルは、図12に示される。ただし、この実施例では、領域を参照するため、参照する領域のうち、ロボット10(話し手)に最も近い点(以下、「領域の最近点」という)を、上記の参考文献におけるオブジェクトに置き換えて考えてある。
具体的には、領域の最近点が聞き手(リクエストした人間)よりも話し手(ロボット10)に近い場合には、次のように、「こ(ここ、この辺)」、「そ(そこ、その辺)」、「あ(あそこ、あの辺)」が決定される。パラメータdSOがパラメータfKS(dSL,θSO,θLO)以下である場合には、「ここ」または「この辺」に決定される。パラメータdSOがパラメータfSA(dSL,θSO,θLO)以下である場合には、「そこ」または「その辺」に決定される。パラメータdSOがパラメータfSA(dSL,θSO,θLO)以上である場合には、「あそこ」または「あの辺」に決定される。
また、領域の最近点が話し手よりも聞き手に近い場合には、次のように、「そ」、「あ」が決定される。パラメータdLOがパラメータfSA(dSL,θSO,θLO)以下である場合には、「そこ」または「その辺」に決定される。また、パラメータdLOがパラメータfSA(dSL,θSO,θLO)以上である場合には、「あそこ」または「あの辺」に決定される。
ただし、パラメータdSOは、話し手から領域の最近点までの距離である。パラメータdLOは、聞き手から領域の最近点までの距離である。パラメータfKSは、「こ」と「そ」の境界曲線である。また、パラメータfSAは、「そ」と「あ」の境界曲線である。パラメータdSLは、話し手と聞き手との距離である。パラメータθSOは、話し手と聞き手とを結ぶ線分と、話し手と最近点とを結ぶ線分とがなす角度である。そして、パラメータθLOは、話し手と聞き手とを結ぶ線分と、聞き手と最近点とを結ぶ線分とがなす角度である。
したがって、指示語は、参照する領域の大きさによって、「辺」付きかどうかを決定し、図12に示すような指示語切替モデルに従って、「こ」、「そ」、「あ」のいずれかを決定することにより、決定される。
なお、図12では、「こ」、「そ」、「あ」領域の上半分のみを記載してあるが、それらの領域の下半分は上半分と上下対称に表される。
次に、領域Rを参照する場合のロボット10の位置について説明する。上述したように、ロボット10は、領域Rを参照する際、第2動作を実行するため、図13に示すように、その第2動作によって描かれる円が参照する領域R(図13では、R11)に隣接する他の領域(図13では、R12)までも指示してしまうことがある。このような場合には、相対言語の割り当てられた領域(説明の都合上、「相対言語割り当て領域」という)RErに、参照する領域Rが含まれているかどうかを判断する。ここで、相対言語割り当て領域RErに領域Rが含まれている場合には、指示語に代えて、相対言語を用いた発話によって、領域Rを参照する。ただし、その相対言語割り当て領域RErに、上記した隣接する他の領域(図13では、R12)が含まれている場合には、領域Rを正しく指示することができない。また、相対割り当て領域RErに領域Rが含まれていない場合には、相対言語を用いた発話によって、領域Rを指示することもできない。
かかる場合には、第2動作によって描かれる円が参照する領域Rのみを指示するように、ロボット10の位置を領域Rに近づけるようにしてある。たとえば、ロボット10を、所定距離D(この実施例では、20cm)ずつ、参照する領域Rに近づけて、その都度、第2動作によって描かれる円が参照する領域Rのみを指示するか否かが判断される。ただし、図13に示すように、ロボット10の腕の長手方向の軸を中心とし、角度θPだけ傾斜させるようにして描いた円を2次元平面に投影した円ないし楕円(指示領域AP)が領域Rのみを指示するか、または他の領域も指示するかを判断するのである。ただし、角度θPは、上述したように、領域Rの大きさに従って変化される。
図14には、図2に示したメモリ64(RAM)のメモリマップ200の一例が示される。図14に示すように、メモリ64は、プログラム記憶領域202およびデータ記憶領域204を含む。プログラム記憶領域202には、メイン処理プログラム202a、領域分割プログラム202b、領域選択プログラム202c、制御プログラム202dなどが記憶される。
メイン処理プログラム202aは、ロボット12の全体制御のメインルーチンを処理するためのプログラムである。領域分割プログラム202bは、グリッドマップから木構造の領域群を抽出(分割)するためのプログラムである。領域選択プログラム202cは、人間からのリクエストに応じた1つの領域を木構造の領域群から選択するためのプログラムである。制御プログラム202dは、コミュニケーション行動の行動モジュールに従って、身体動作および発話の少なくとも一方を実行するためのプログラムである。
なお、図示は省略するが、プログラム記憶領域には、上述したように、検知プログラムや通信プログラムが記憶されるとともに、撮影プログラムや音声認識プログラムなども記憶される。撮影プログラムは、全方位カメラ34や眼カメラ56を用いて撮影処理を実行し、撮影した画像(カメラ画像)をメモリ64に記憶するためのプログラムである。音声認識プログラムは、人間が発話した音声をマイク54を通して検出し、辞書データ(図示せず)を用いてDPマッチングやHMM法により、検出した音声を認識するためのプログラムである。
データ記憶領域204には、リクエストバッファ204aが設けられる。リクエストバッファ204aは、人間からの質問(リクエスト)の内容を時系列に従って記憶するための記憶領域である。したがって、人間からのリクエストを処理した後では、当該リクエストはリクエストバッファ204aから削除される。
また、データ記憶領域204には、マップデータ204b、カメラ画像データ204c、距離データ204d、領域群データ204e、指示語切替データ204f、相対言語テーブルデータ204gが記憶される。
マップデータは、図3に示した固定オブジェクトが記述されたオブジェクト地図情報についてのデータである。カメラ画像データ204cは、ロボット10の眼カメラ58で環境内を撮影したときのカメラ画像についてのデータである。距離データ204dは、位置(XY座標)に対応して記憶された方向(角度)および距離についてのデータである。
領域群データ204eは、領域分割プログラム202bに従って取得された木構造の領域群についてのデータである。指示語切替データ204fは、図12に示した指示語切替モデルに対応する指示語を切り替えるためのパラメータ(dSO,dLO,fKS,fSA)についてのデータである。相対言語テーブルデータ204gは、固定オブジェクトに対して予め設定されている領域およびその領域に対応する発話内容についてのデータである。これは、指示語では、領域を参照するのが困難な場合に、領域を簡単に区別するために用いられる発話内容および対応する領域である。図15に、相対言語テーブルの具体例が示される。図15に示す例では、相対言語テーブルは、IDに対応して、相対言語割り当て領域RErを規定する4つの頂点の座標および相対言語表現Erが記述される。たとえば、相対言語割り当て領域RErは、図16の点線枠で示すように、図3に示したオブジェクト地図情報における固定オブジェクトに対応して予め設定されるのである。
図14に戻って、図示は省略するが、データ記憶領域204には、ロボット10の制御に必要な他のデータが記憶されたり、カウンタ(タイマ)やフラグが設けられたりする。
図17は図2に示したCPU60のロボット制御の全体処理を示すフロー図である。たとえば、ロボット10が人間に遭遇したり人間に触られたりすると、CPU60は全体処理を開始する。図17に示すように、CPU60は、全体処理を開始すると、ステップS1で、オブジェクト地図情報を取得する。つまり、CPU60は、マップデータ204bを不揮発性のメモリや外部のコンピュータから読み込む。次のステップ3では、カメラ画像を取得する。つまり、CPU60は、眼カメラ58によって撮影された画像(カメラ画像)を取得し、取得したカメラ画像に対応するカメラ画像データ204cをデータ記憶領域204に記憶する。
なお、ロボット10は、最初に、XY座標が既知である環境の所定の位置に配置され、その後、自走する場合の移動方向および移動距離によって自身の現在位置を更新している。ただし、環境センサを設けておき、現在位置を適宜修正できるようにしてもよい。
次のステップS5では、距離情報を取得する。つまり、CPU60は、予めロボット10を移動させ、距離センサ28によって距離を検出したときのロボット10の位置に対応して、そのときのロボット10の方向(角度)および検出した距離についての距離データ204dを、不揮発性のメモリなどから取得して、データ記憶領域204に記憶する。これは、主として、グリッドマップに、可動オブジェクトの情報を追加するために用いられる。
続いて、ステップS7では、後述する領域分割処理(図18および図19参照)を実行する。次のステップS9では、後述する領域選択処理(図25および図26参照)を実行する。さらに、ステップS11では、後述する制御情報の決定処理(図27および図28参照)を実行する。そして、ステップS13では、ステップS11で決定した制御情報(身体動作G、発話内容E、位置Pos)を実行する。つまり、領域Rを参照したコミュニケーション行動が実行される。
続いて、ステップS15では、他の質問(リクエスト)が有るかどうかを判断する。つまり、CPU60は、リクエストバッファ204aに記憶されたリクエストデータに従うリクエストをすべて処理したかどうかを判断する。ステップS15で“YES”であれば、つまり他の質問があれば、ステップS9に戻る。一方、ステップS15で“YES”であれば、そのまま全体処理を終了する。
図18および図19は、図17に示したステップS7の領域分割処理のフロー図である。図18に示すように、CPU60は、領域群抽出処理を開始すると、ステップS31で、領域の木構造を初期化する。つまり、CPU60は、領域群データ204eをリセットする。続くステップS33では、エッジ検出のパラメータESを初期化する(ES=0)。ただし、パラメータESは0以上1以下の範囲で変化され、この実施例では、後述するように、0.3ずつ変化される。このパラメータESの値が小さい程、領域の境界が検出され難い。
続くステップS35では、カメラ画像からパラメータESでエッジ検出を実行する。次のステップS37では、床の模様を検出する。ただし、パラメータESが0の場合には、床の模様は検出されない。次のステップS39では、カメラ画像と距離情報とから可動オブジェクトを検出する。ただし、ステップS39の処理が実行されることにより、固定オブジェクトも検出される。そして、ステップS41では、グリッドマップを生成する。つまり、オブジェクト地図情報に、可動オブジェクトおよび床の模様の情報が追加され、格子状に細分化される。
次に、ステップS43で、後述する候補の集合取得処理(図20参照)を実行し、図19に示すステップS45で、候補の集合Regions−partから1つの領域Rcを取り出す。次のステップS47では、木構造Treeから領域Rcの上位階層になる領域Rpを探す。つまり、CPU60は、領域Rcを含む領域Rpが有るかどうかを検索するのである。
そして、ステップS49では、領域Rcが領域Rpと閾値以上重なっているいかどうかを判断する。ここでは、閾値は80%であり、領域Rcが領域Rpの80%以上の範囲となっている場合には、それらは同じ或いは略同じ領域であると判断される。したがって、ステップS49で“YES”であれば、つまり領域Rcが領域Rpと閾値以上重なっている場合には、ステップS51で、領域Rcを破棄して、ステップS55に進む。一方、ステップS49で“NO”であれば、つまり領域Rcが領域Rpと閾値以上重なっていない場合には、領域Rcを領域Rpの子階層として登録して、ステップS55に進む。
ステップS55では、候補の集合Regions−part中に領域が残っているかどうかを判断する。ステップS55で“YES”であれば、つまり候補の集合Regions−part中に領域が残っていれば、ステップS45に戻って次の領域Rcを取り出す。一方、ステップS55で“NO”であれば、つまり候補の集合Regions−part中に領域が残っていない場合には、ステップS57で、パラメータESが1であるかどうかを判断する。
ステップS57で“NO”であれば、つまりパラメータESが1でなければ、ステップS59で、パラメータESを所定値増加させて、図18に示したステップS35に戻る。たとえば、所定値は0.3に設定してある。ただし、パラメータESは1(1.0)を超えると、その値は1.0に設定される。したがって、パラメータESは、0.3、0.6、0.9、1.0と設定される。ただし、これは一例であり、パラメータESは、0.1または0.2ずつ増加させてもよい。一方、ステップS57で“YES”であれば、つまりパラメータESが1であれば、ステップS61で、木構造Tree中の領域を、分割された領域の集合Regionsとして抽出し、全体処理にリターンする。つまり、人間に伝達可能な領域が抽出(分割)される。図示は省略したが、この分割された領域の集合Regionsのデータもデータ記憶領域204の作業領域に記憶される。
図20は、図18のステップS43に示した候補の集合取得処理のフロー図である。図20に示すように、CPU60は、候補の集合取得処理を開始すると、ステップS81で、グリッドマップに対応する図6に示したような参照リストを作成する。次のステップS83では、後述するバルーン取得処理(図21ないし図24参照)を実行して、ステップS85で、すべてのバルーンP(C(g),d)のエネルギE(P(C(g),d))を算出する。そして、ステップS87で、最大のエネルギとなるバルーンP(C(g_max),d_max)を抽出する。つまり、ロボット10に、より近く、より大きなバルーンP(C(g),d)が抽出されるのである。
次のステップS89では、候補の集合Regions−partに、抽出したバルーンP(C(g_max),d_max)を登録する。図示は省略したが、候補の集合Regions−partは、メモリ64の作業領域に記憶される。続くステップS91では、グリッドマップからバルーンP(C(g_max),d_max)を削除する。つまり、バルーンP(C(g_max),d_max)に含まれるすべての枠を、グリッドマップにおいて、領域を抽出する範囲から除外するのである。
続くステップS93では、グリッドマップ中に領域を抽出できるだけの枠が残っているかどうかを判断する。この実施例では、CPU60は、全枠数の10%以上の枠数が残っているかどうかを判断しているのである。ステップS93で“YES”であれば、つまりグリッドマップ中に領域を抽出できるだけの枠が残っていれば、ステップS81に戻る。つまり、残りの枠についてインデックス番号が付され、図6に示したような参照リストが作成し直される。一方、ステップS93で“NO”であれば、つまりグリッドマップ中に領域を抽出できるだけの枠が残っていなければ、そのまま全体処理にリターンする。
図21−図24は、図20に示したステップS83のバルーン取得処理のフロー図である。図21に示すように、CPU60は、バルーン取得処理を開始すると、ステップS111で、参照リストの最初の組の点gおよび直線P(d=0°)を設定する。次のステップS113では、点gを中心とする伸縮円C(g)の半径を一段階拡大する。つまり、CPU60は、1つの枠(桝目)の一辺の長さの半分だけ、伸縮円C(g)の半径を延ばす。続くステップS115では、伸縮円C(g)が障害物に当ったかどうかを判断する。つまり、CPU60は、伸縮円C(g)が、少なくとも、障害物が描画された枠に接触してしまったかどうかを判断する。
ステップS115で“NO”であれば、つまり伸縮円C(g)が障害物に当っていなければ、ステップS113に戻る。一方、ステップS115で“YES”であれば、つまり伸縮円C(g)が障害物に当れば、ステップS117で、一段階手前の伸縮円C(g)の半径に設定して、ステップS119で、点gを変数g−preに設定し、伸縮円C(g)の半径を変数r−preに設定する。ただし、変数g−preは、現在の点gについての座標を示し、変数r−preは、変数g−preに設定された点gにおける伸縮円C(g)の半径を示す。
続くステップS121では、傾きdが90°または270°であるかどうかを判断する。ステップS121で“NO”であれば、つまり傾きdが90°または270°でなければ、ステップS123で、傾きdの直線P上の点g−preのX軸のプラス方向またはY軸の方向(プラス方向またはマイナス方向)の隣の点g−curを取得して、図22に示すステップS127に進む。つまり、ステップS123では、点g−preが存在する枠の隣(右側の隣、上側の隣、または下側の隣)であり、直線Pが通る枠の点g−curが取得されるのである。一方、ステップS121で“YES”であれば、つまり傾きdが90°または270°であれば、ステップS125で、傾きdの直線P上の点g−preのY軸のプラス方向の隣の点g−curを取得して、ステップS127に進む。
図22に示すように、ステップS127では、点g−curが有るかどうかを判断する。つまり、当該直線P上において、現在参照リストが示す枠のX軸のプラス方向に隣接する(Y軸方向に隣接する場合もある)すべての枠に伸縮円C(g)を描画したかどうかを判断する。ステップS127で“NO”であれば、つまり点g−curが無ければ、X軸のプラス方向への伸縮円C(g)の描画を終了したと判断して、図23に示すステップS143に進む。一方、ステップS127で“YES”であれば、つまり点g−curが有れば、ステップS129で、点g−curが障害物上であるかどうかを判断する。
ステップS129で“YES”であれば、つまり点g−curが障害物上であれば、X軸のプラス方向への伸縮円C(g)の描画を終了して、ステップS143に進む。これは、障害物によって、領域が分割されている(途切れている)と考えられるためである。一方、ステップS129で“NO”であれば、つまり点g−curが障害物上でなければ、ステップS131で、点p−curを中心とする伸縮円C(g−cur)の半径を一段階拡大する。続くステップS133では、伸縮円C(g−cur)が障害物に当ったかどうかを判断する。
ステップS133で“NO”であれば、つまり伸縮円C(g−cur)が障害物に当ってなければ、そのままステップS131に戻る。一方、ステップS133で“YES”であれば、つまり伸縮円C(g−cur)が障害物に当れば、ステップS135で、伸縮円C(g−cur)の半径を一段階前の半径に設定し、ステップS137で、伸縮円C(g−cur)の半径を変数r−curに設定する。
そして、ステップS139では、r−pre/r−curが第1閾値(たとえば、1.3)以上であるかどうかを判断する。ステップS139で“YES”であれば、つまりr−pre/r−curが第1閾値以上であれば、領域を分割するべきであると判断し、X軸のプラス方向への伸縮円C(g)の描画を終了して、ステップS143に進む。一方、ステップS139で“NO”であれば、つまりr−pre/r−curが第1閾値未満であれば、ステップS141で、r−pre/r−curが第2閾値(たとえば、0.7)以下であるかどうかを判断する。ステップS141で“NO”であれば、つまりr−pre/r−curが第2閾値を超えていれば、図21に示したステップS121に戻って、X軸のプラス方向への伸縮円C(g)の描画を継続する。一方、ステップS141で“YES”であれば、つまりr−pre/r−curが第2閾値(たとえば、0.7)以下であれば、領域を分割するべきであると判断し、X軸のプラス方向への伸縮円C(g)の描画を終了して、ステップS143に進む。
ステップS139およびステップS141では、隣接する枠に描画された伸縮円C(g)の半径(大きさ)が急激に変化したかどうかを判断し、急激に変化している場合には、領域を分割するべきと判断しているのである。
図23に示すように、ステップS143では、参照リストが示す着目する枠の点gに戻す。これは、X軸のプラス方向に続いて、X軸のマイナス方向への伸縮円C(g)の描画を開始するためである。X軸のマイナス方向の伸縮円C(g)の描画処理は、上述したX軸のプラス方向への描画処理と同様の処理が実行されるため、重複する内容については簡単に説明することにする。
次のステップS45では、傾きdが90°または270°であるかどうかを判断する。ステップS145で“NO”であれば、ステップS147で、傾きdの直線P上の点g−preのX軸のマイナス方向またはY軸方向(プラス方向またはマイナス方向)の隣の点g−curを取得して、ステップS151に進む。一方、ステップS145で“YES”であれば、つまり、傾きdの直線P上の点g−preのY軸のマイナス方向の隣の点g−curを取得して、ステップS151に進む。
ステップS151では、点g−curが有るかどうかを判断する。ステップS151で“NO”であれば、図24に示すステップS167にそのまま進む。一方、ステップS151で“YES”であれば、ステップS153で、点g−curが障害物上であるかどうかを判断する。ステップS153で“YES”であれば、そのままステップS167に進む。一方、ステップS153で“NO”であれば、ステップS155で、点g−curを中心とする伸縮円C(g−cur)の半径を一段階拡大する。そして、ステップS157で、伸縮円C(g−cur)が障害物に当ったかどうかを判断する。
ステップS157で“NO”であれば、そのままステップS155に戻る。一方、ステップS157で“YES”であれば、図24に示すステップS159で、伸縮円C(g−cur)の半径を一段階前の半径に設定して、ステップS161で、伸縮円C(g−cur)の半径を変数r−curに設定する。続くステップS163では、r−pre/r−curが第1閾値以上であるかどうかを判断する。ステップS163で“YES”であれば、そのままステップS167に進む。一方、ステップS163で“NO”であれば、ステップS165で、r−pre/r−curが第2閾値以下であるかどうかを判断する。ステップS165で“NO”であれば、図23に示したステップS145に戻って、X軸のマイナス方向への伸縮円C(g)の描画を継続する。一方、ステップS165で“YES”であれば、ステップS167に進む。
ステップS167では、すべての伸縮円C(g)を結合して、バルーンP(C(g),d)を生成する。つまり、参照リストが示す今回の組について描画された伸縮円C(g)に含まれるすべての枠が1つの塊として抽出され、バルーンP(C(g),d)が生成される。
次のステップS169では、参照リストが示す直線Pの傾きdが330°であるかどうかを判断する。ステップS169で“NO”であれば、つまり参照リストが示す直線Pの傾きdが330°でなければ、ステップS171で、現在の枠の点に、次の組が示す傾きdの直線Pを設定して、図21のステップS113に戻る。つまり、ステップS171では、直前の組の枠と同じ枠の点gに、傾きdを30°変えた直線Pが設定される。
一方、ステップS169で“YES”であれば、つまり参照リストが示す直線Pの傾きdが330°であれば、ステップS173で、参照リストのすべての組について伸縮円C(g)の描画処理を実行したかどうかを判断する。ステップS173で“NO”であれば、つまり参照リストにおいて伸縮円C(g)の描画処理を行っていない組が残っている場合には、ステップS175で、次の組が示す枠の点gおよび傾きdの直線Pを設定して、ステップS113に戻る。つまり、ステップS175では、直前の組の枠の次のインデックス番号で示される枠の点gに、傾きd=0°の直線Pが設定される。一方、ステップS175で“YES”であれば、つまり参照リストのすべての組について伸縮円C(g)の描画処理を実行すると、候補の集合取得処理にリターンする。
なお、図示は省略するが、ステップS169で“YES”と判断された場合には、直前に伸縮円C(g)の描画処理を実行した組について、当該描画処理を終了したことが参照リストにおいてチェックされる。
図25および図26は、図17に示したステップS9の領域選択処理のフロー図である。図25に示すように、CPU60は、領域選択処理を開始すると、ステップS191で、人間から荷物についての情報を聞く。ここでは、CPU60は、荷物の大きさについて質問するための合成音声をスピーカ52から出力する。次のステップS193では、荷物の底面積Sizeを取得する。たとえば、CPU60は、人間の返答に対応する音声を、マイク54を通して検出し、その音声を認識することにより、荷物の大きさから底面積Sizeを取得する。図示は省略するが、荷物の大きさに対応する底面積を記載したテーブルについてのデータを記憶しておき、CPU60は、そのテーブルを参照して、荷物の大きさに応じた底面積Sizeを取得する。
なお、この実施例では、ロボット10が人間とインタラクションすることにより、荷物の底面積Sizeを取得するようにしてあるが、眼カメラ58で撮影した画像から荷物の大きさを推定して底面積Sizeを取得するようにしてもよい。または、眼カメラ58で撮影した画像から直接底面積Sizeを推定(取得)するようにしてもよい。
図25に戻って、次のステップS195では、変数iを初期化する(i=1)。この変数iは、分割された領域の集合Regionsに含まれる複数の領域Rを個別に識別するために設定される。続くステップS197では、分割された領域の集合Regionsから領域Riを読み出す。次のステップS199では、領域Riの面積Ri_Sizeが底面積Sizeよりも大きいかどうかを判断する。ただし、領域Ri_Sizeは、それに含まれる枠の数に、1つの枠についての実空間における面積(この実施例では、20cm×20cm)を乗算して求められる。
ステップS199で“NO”であれば、つまり領域Riの面積Ri_Sizeが底面積Size以下であれば、荷物を置ける大きさを有していないと判断して、そのままステップS203に進む。一方、ステップS199で“YES”であれば、つまり領域Riの面積Ri_Sizeが底面積Sizeを超えていれば、荷物を置ける大きさを有していると判断して、ステップS201で、領域Riを選択候補の集合R_candsに登録して、ステップS203に進む。つまり、ステップS201では、領域Riが、参照(人間に指示)する領域Rの候補として選択されるのである。
ステップS203では、変数iを1加算する(i=i+1)。そして、ステップS205で、変数iが最大値を超えたかどうかを判断する。つまり、ステップS205では、分割された領域の集合Regionsに登録されているすべての領域RiについてステップS199の判断処理を実行したかどうかを判断しているのである。ステップS205で“NO”であれば、つまり変数iが最大値以下であれば、そのままステップS197に戻る。つまり、次の領域RiについてステップS199の処理が実行される。一方、ステップS205で“YES”であれば、つまり変数iが最大値を超えると、図26に示すステップS27で、変数jを初期化する(j=1)。この変数jは、選択候補の集合R_candsに含まれる領域を識別するために設定される。
次のステップS209では、変数dminに初期値を設定する(dmin=∞)。この変数dminは、領域Rjと人間との最短距離を検出するために用いられる。続くステップS211では、選択候補の集合R_candsから領域Rjを読み出す。そして、ステップS213で、領域Rjと人間との距離dj(上記したパラメータdLOに相当する)が変数dminよりも小さいかどうかを判断する。ただし、領域Rjと人間との距離djは、領域Rjに含まれる点のうち、最も人間に近い点と人間の現在位置との距離である。
ステップS213で“NO”であれば、つまり領域Rjと人間との距離djが変数dmin以上であれば、距離djは最短距離でないと判断して、そのままステップS219に進む。一方、ステップS213で“YES”であれば、つまり領域Rjと人間との距離djが変数dminよりも小さければ、距離djは現時点において最短距離であると判断して、ステップS215で、変数dminに距離djを代入して、ステップS217で、領域Rjを参照する領域Rに設定(選択)して、ステップS219に進む。
ステップS219では、変数jを1加算する(j=j+1)。続くステップS221では、変数jが最大値を超えたかどうかを判断する。つまり、ステップS221では、選択候補の集合R_candsに登録されたすべての領域RjについてステップS213の処理を実行したかどうかを判断するのである。ステップS221で“NO”であれば、つまり変数jが最大値以下であれば、ステップS211に戻って、次の領域RjについてステップS213の処理を実行する。一方、ステップS221で“YES”であれば、つまり変数jが最大値を超えれば、全体処理にリターンする。
図27および図28は、図17に示したステップS11の制御情報の決定処理のフロー図である。図27に示すように、CPU60は、制御情報の決定処理を開始すると、ステップS241で初期化処理を実行する。ここでは、領域Rを設定し、領域Rを参照するときのロボット10の位置Pos、実行するジェスチャGおよび発話内容Eをクリアする。次のステップS243では、自身の現在位置をPos´に設定する。続いて、ステップS245では、領域Rを参照する場合に実行するジェスチャGを決定する。この実施例では、円を描くように腕を回転させて領域Rを指示するようにしてあるため、領域Rの大きさに応じて手で描く円の大きさ(回転軸に対して腕がなす角θP)が決定され、それを実行する場合に、腕を斜めに保持するためのモータの制御情報および円を描くように腕を回転させるためのモータの制御情報が決定されるのである。
次のステップS247では、ジェスチャGで誤認され得る領域の集合R_wrongを分割された領域の集合Regionsから抽出する。つまり、図13に示したように、ジェスチャGを実行したと仮定して、参照する領域R(図13では、R11)以外の他の領域(図13では、R12)を含んでしまう場合に、他の領域(R12)を誤認され得る領域として、集合R_wrongに登録するのである。つまり、図13に示したように、指示領域APによって指示される、参照(指示)する領域R以外の領域を抽出するのである。
図28に示すように、次のステップS249では、相対言語テーブル内の領域RErに、参照する領域Rが含まれるかどうかを判断する。ステップS249で“YES”であれば、つまり相対テーブル内の領域RErに参照する領域Rが含まれている場合には、後述するステップS257に進む。一方、ステップS249で“NO”であれば、つまり相対言語テーブル内の領域RErに参照する領域Rが含まれていない場合には、ステップS251で、集合R_wrongの要素数が0であるかどうかを判断する。ステップS251で“NO”であれば、つまり集合R_wrongの要素数が1以上であれば、ステップS259に進む。
一方、ステップS251であれば、つまり領域R_wrongの要素数が0であれば、ステップS253で、指示語Eiを決定する。ここでは、上述したように、領域Rの大きさに応じて「辺」を付けるか否かを決定し、ロボット10自身と領域Rとの距離dSOまたは人間と領域Rとの距離dLOに応じて、つまり領域Rの最近点と、ロボット10の現在位置と、人間の現在位置との位置関係に応じて、「こ」、「そ」、「あ」の別を決定する。そして、ステップS255で、発話内容Eに、ステップS253で決定した指示語Eiを設定し、位置Posに現在位置Pos´を設定して、全体処理に戻る。
また、ステップS257では、集合R_wrongに登録された領域のうち、領域RErに含まれる領域が存在するかどうかを判断する。ステップS257で“YES”であれば、つまり集合R_wrongに登録された領域のうち、領域RErに含まれる領域が存在する場合には、ステップS259で、現在位置Pos´を参照する領域Rに距離Dだけ近づけて、図27に示したステップS247に戻る。ただし、この実施例では、距離Dは20cmであり、ステップS259では、実際にロボット10が移動されるのではなく、現在位置Pos´のみが更新され、移動後の現在位置Pos´でジェスチャGを実行したと仮定して、それによって描かれる円を投影した円または楕円つまり指示領域APによって指示される、参照する領域R以外の他の領域を抽出するのである。
一方、ステップS257で“NO”であれば、つまり集合R_wrongに登録された領域のうち、領域RErに含まれる領域が存在しない場合には、ステップS261で、発話内容Eに領域Rを含む領域RErに対応して相対言語テーブルに記載された相対言語表現Erを設定し、位置Poに現在位置Pos´を設定して、全体処理にリターンする。
この実施例によれば、床の模様およびオブジェクトを含む障害物が登録されたグリッドマップを用いて、障害物に接触しないように描画された複数の伸縮円を結合した領域を抽出するので、人間が空間を見た場合に分割する場合と同じように領域を分割することができる。
また、この実施例によれば、エッジ検出の際に、床の模様を検出しないレベルから検出可能なレベルまで段階的にパラメータを変化させるので、廊下のような比較的広い空間の全体を1つの領域として抽出したり、それを床の模様に従って複数に区分した2以上の領域として抽出したりすることができる。つまり、参照する領域に大きさに応じて、適宜参照する領域を変化させることができる。
さらに、この実施例によれば、指示語や特定のオブジェクトに対応付けられた相対言語表現を発話するとともに、指差しの動作を実行することにより、人間のリクエストに応じて、分割した複数の領域の中から選択した1の領域を参照するので、人間と同じようなコミュニケーション行動を実行することができる。
なお、この実施例では、ロボットがグリッドマップを生成するようにしたが、ロボット以外の他のコンピュータによってグリッドマップを生成し、これをロボットが取得するようにしてもよい。かかる場合には、距離センサを環境内に設けて、その距離センサから他のコンピュータが距離情報を取得してもよいし、距離情報をロボットが収集し、それを他のコンピュータに送信するようにしてもよい。
また、この実施例では、ロボットが領域を分割するようにしたが、領域を分割するまでの処理(図17のステップS1−S7)については、他のコンピュータで実行し、その結果(分割された領域の集合Regions)を受けて、ロボットがその後の処理(図17のステップS9−S15)を実行するようにしてもよい。
さらに、この実施例では、ロボットは指差し動作をする場合、円を描くように動作(第2動作)させるようにしたが、発話する内容によっては、腕を伸ばした状態を保持するように指差し動作(第1動作)を実行するようにしてもよい。たとえば、「辺」付きの指示語を発話する場合のみ、第2動作を実行し、「辺」付きでない指示語や相対言語表現により発話する場合には、第1動作を実行するようにしてもよい。または、「辺」付きの指示語や相対言語表現により発話する場合には、第2動作を実行し、「辺」付きでない指示語を発話する場合のみ、第1動作を実行するようにしてもよい。
さらにまた、この実施例では、距離情報をロボットが自身のセンサを用いて予め取得しておくようにしたが、環境にレーザーレンジファインダなどの距離センサを設定して、環境に設置された距離センサから距離情報を取得するようにしてもよい。
また、この実施例では、伸縮円を描画する際に、各枠に対して90°,270°の傾きの直線を設定するようにしたが、この2つの直線は実質的に同じ直線であるため、いずれか一方については設定しなくてもよい。