図1を参照して、本発明の実施の形態の一例である道案内ロボット(以下、単に「ロボット」と言う。)10は、主として人間のようなコミュニケーションの対象とコミュニケーションを実行することを目的とした相互作用指向のものである。このロボット10は、音声ならびに腕および体による身体動作を用いて人間に所望の目的地までの経路を説明して案内する。
ロボット10は、たとえば、地下街やイベント会場などの当該場所に不慣れな人間が存在する場所に配置され、道案内を求める人間に対して道案内のサービスを提供する。
図1はロボット10の外観を示す正面図であり、この図1を参照して、ロボット10のハードウェアの構成について説明する。ロボット10は台車20を含み、この台車20の下面にはロボット10を自律移動させる2つの車輪22および1つの従輪24が設けられる。2つの車輪22は車輪モータ26(図2参照)によってそれぞれ独立に駆動され、台車20すなわちロボット10を前後左右任意の方向に動かすことが可能であり、またロボット10を旋回させてその場で体の向きを変えることができる。また、従輪24は車輪22を補助する補助輪である。このように、ロボット10は、配置された空間内を移動可能である。
台車20の上には、円柱形のセンサ取付パネル28が設けられ、このセンサ取付パネル28には、赤外線距離センサ30が取り付けられる。この赤外線距離センサ30は、センサ取付パネル28すなわちロボット10の周囲の物体(人間や障害物など)との距離を計測するものである。
また、センサ取付パネル28の上には、胴体32が直立するように設けられる。胴体32の前方中央上部(胸に相当する位置)には、上述した赤外線距離センサ30がさらに設けられる。これは、ロボット10の前方の主として人間との距離を計測するものである。また。胴体32には、1つの全方位カメラ34が設けられる。全方位カメラ34は、たとえば背面側上端部のほぼ中央から延びる支柱36上に設けられる。全方位カメラ34は、ロボット10の周囲を撮影するものであり、後述する眼カメラ60とは区別される。この全方位カメラ34としては、たとえばCCD(Charge Coupled Devices)やCMOS(Complementary Metal Oxide Semiconductor)のような固体撮像素子を用いるカメラを採用することができる。なお、これら赤外線距離センサ30および全方位カメラ34の設置位置は当該部位に限られず適宜変更され得る。
胴体32の両側面上端部(肩に相当する位置)には、それぞれ、肩関節38Rおよび38Lによって、上腕40Rおよび40Lが設けられる。図示は省略するが、肩関節38Rおよび38Lは、それぞれ、直交する3軸の自由度を有する。すなわち、肩関節38Rは、直交する3軸のそれぞれの軸廻りにおいて上腕40Rの角度を制御できる。肩関節38Rのある軸(ヨー軸)は、上腕40Rの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸、ロール軸)は、それにそれぞれ異なる方向から直交する軸である。同様に、肩関節38Lは、直交する3軸のそれぞれの軸廻りにおいて上腕40Lの角度を制御できる。肩関節38Lのある軸(ヨー軸)は、上腕40Lの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸、ロール軸)は、それにそれぞれ異なる方向から直交する軸である。
また、上腕40Rおよび40Lのそれぞれの先端には、肘関節42Rおよび42Lを介して、前腕44Rおよび44Lが設けられる。図示は省略するが、肘関節42Rおよび42Lは、それぞれ1軸の自由度を有し、この軸(ピッチ軸)の軸廻りにおいて前腕44Rおよび44Lの角度を制御できる。
前腕44Rおよび44Lのそれぞれの先端には、手に相当する球体46Rおよび46Lがそれぞれ固定的に設けられる。ただし、指や掌の機能が必要な場合には、人間の手の形をした「手」を用いることも可能である。
このように、ロボット10は、上腕40Rおよび40L、肘関節42Rおよび42L、並びに前腕44Rおよび44Lからなる腕を供えているので、道案内に際して、進む方向や角を曲がる方向などを腕で示すことができる。以下において、上腕40Rおよび40L、肘関節42Rおよび42L、並びに前腕44Rおよび44Lを単に腕と言う場合がある。
また、図示は省略するが、台車20の前面、肩関節38R,38Lを含む肩に相当する部位、上腕40R,40L、前腕44R,44Lおよび球体46R,46Lには、それぞれ、接触センサ(図2で包括的に示す。:48)が設けられている。台車20の前面の接触センサ48は、台車20への人間や他の障害物の接触を検知する。したがって、ロボット10の移動中に障害物との接触があると、それを検知し、直ちに車輪22の駆動を停止してロボット10の移動を急停止させることができる。また、その他の接触センサ48は、主に、人間がロボット10の当該各部位に触れたかどうかを検知する。なお、接触センサ48の設置位置はこれらに限定されず、適宜な位置(胸、腹、脇、背中、腰など)に設けられてよい。
胴体32の中央上部(首に相当する位置)には首関節50が設けられ、さらにその上には頭部52が設けられる。図示は省略するが、首関節50は、3軸の自由度を有し、3軸の各軸廻りに角度制御可能である。ある軸(ヨー軸)はロボット10の真上(鉛直上向き)に向かう軸であり、他の2軸(ピッチ軸、ロール軸)は、それぞれ、それと異なる方向で直交する軸である。
頭部52には、口に相当する位置に、スピーカ54が設けられる。スピーカ54は、ロボット10が、それの周辺の人間に対して音声ないし音によってコミュニケーションを取るために用いられる。また、耳に相当する位置には、マイク56Rおよび56Lが設けられる。以下、右耳に相当するマイク56Rと左耳に相当するマイク56Lとをまとめてマイク56ということがある。マイク56は、周囲の音、とりわけコミュニケーションを実行する対象である人間の声を取り込む。さらに、目に相当する位置には、眼球部58Rおよび58Lが設けられる。眼球部58Rおよび58Lは、それぞれ眼カメラ60Rおよび60Lを含む。以下、右の眼球部58Rと左の眼球部58Lとをまとめて眼球部58ということがあり、また、右の眼カメラ60Rと左の眼カメラ60Lとをまとめて眼カメラ60ということがある。
眼カメラ60は、ロボット10に接近した人間の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。眼カメラ60としては、上述した全方位カメラ34と同様のカメラを用いることができる。たとえば、眼カメラ60は眼球部58内に固定され、眼球部58は眼球支持部(図示せず)を介して頭部52内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、2軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この2軸の一方は、頭部52の上へ向かう方向の軸(ヨー軸)であり、他方は、一方の軸に直交しかつ頭部52の正面側(顔)が向く方向に直交する方向の軸(ピッチ軸)である。眼球支持部がこの2軸の各軸廻りに回転されることによって、眼球部58ないし眼カメラ60の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。
なお、上述のスピーカ54、マイク56および眼カメラ60の設置位置は、これらに限定されず、適宜な位置に設けてられてよい。
図2はロボット10の電気的な構成を示すブロック図であり、この図2を参照して、ロボット10は、全体を制御するCPU62を含む。CPU62は、マイクロコンピュータあるいはプロセサとも呼ばれ、バス64を介して、メモリ66、モータ制御ボード68、センサ入力/出力ボード70および音声入力/出力ボード72に接続される。
メモリ66は、図示は省略するが、ROMやHDDおよびRAMを含む。ROMやHDDには、ロボット10の主制御プログラムが予め記憶されるとともに、音声出力による発話ならびに腕や体による身体動作によって目的地までの経路を説明して案内するための案内プログラム、および外部コンピュータとの間で必要な情報を送受信するための通信プログラムなどが記録される。
また、ROMやHDDには、ロボット10による音声出力ならびに腕や体による身体動作のそれぞれの動作を実行するためのデータの集まりである行動モジュールが各行動毎に記憶されている。この行動モジュールは、音声を発話する行動の行動モジュールであれば音声データなどが含まれ、腕を動かしたり体の向きを変えたりといった物理的動きを伴う行動の行動モジュールであれば各モータを制御するためのモータ制御データなどが含まれる。なお、物理的動きを伴う行動の行動モジュールには、モータについての角度データを含むものと、角度データを引数としてその都度に取り込むものがある。また、RAMは、ワークメモリやバッファメモリとして用いられる。
モータ制御ボード68は、たとえばDSPで構成され、各腕や首関節50および眼球部58などの各軸モータの駆動を制御する。すなわち、モータ制御ボード68は、CPU62からの制御データを受け、右眼球部58Rの2軸のそれぞれの角度を制御する2つのモータ(図2では、まとめて「右眼球モータ」と示す。)74の回転角度を制御する。同様に、モータ制御ボード68は、CPU62からの制御データを受け、左眼球部58Lの2軸のそれぞれの角度を制御する2つのモータ(図2では、まとめて「左眼球モータ」と示す。)76の回転角度を制御する。
また、モータ制御ボード68は、CPU62からの制御データを受け、右肩関節38Rの直交する3軸のそれぞれの角度を制御する3つのモータと右肘関節42Rの角度を制御する1つのモータとの計4つのモータ(図2では、まとめて「右腕モータ」と示す。)78の回転角度を調節する。同様に、モータ制御ボード68は、CPU62からの制御データを受け、左肩関節38Lの直交する3軸のそれぞれの角度を制御する3つのモータと左肘関節42Lの角度を制御する1つのモータとの計4つのモータ(図2では、まとめて「左腕モータ」と示す。)80の回転角度を調節する。
さらに、モータ制御ボード68は、CPU62からの制御データを受け、首関節50の直交する3軸のそれぞれの角度を制御する3つのモータ(図2では、まとめて「頭部モータ」と示す。)82の回転角度を制御する。さらにまた、モータ制御ボード68は、CPU62からの制御データを受け、車輪22を駆動する2つのモータ(図2では、まとめて「車輪モータ」と示す。)26の回転角度を制御する。
なお、この実施例では、車輪モータ26を除くモータは、制御を簡素化するために、ステッピングモータあるいはパルスモータを用いるようにしてある。ただし、車輪モータ26と同様に、直流モータを用いるようにしてもよい。
センサ入力/出力ボード70もまた、同様に、DSPで構成され、各センサからの信号を取り込んでCPU62に与える。すなわち、赤外線距離センサ30のそれぞれからの反射時間に関するデータがこのセンサ入力/出力ボード70を通してCPU62に入力される。また、全方位カメラ34からの映像信号が、必要に応じてこのセンサ入力/出力ボード70で所定の処理を施された後、CPU62に入力される。眼カメラ60からの映像信号も、同様にして、CPU62に入力される。また、上述した複数の接触センサ(図2では、まとめて「接触センサ48」と示す。)からの信号がセンサ入力/出力ボード70を介してCPU62に与えられる。
音声入力/出力ボード72もまた、同様に、DSPで構成され、CPU62から与えられる音声合成データに従った音声または声がスピーカ54から出力される。また、マイク56からの音声入力が、音声入力/出力ボード72を介してCPU62に取り込まれる。
また、CPU62は、バス64を介して通信LANボード84に接続される。通信LANボード84は、DSPで構成され、CPU62から送られる送信データを無線通信装置86に与え、無線通信装置86から送信データを、たとえば、無線LANのようなネットワークを介して外部コンピュータに送信する。また、通信LANボード84は、無線通信装置86を介してデータを受信し、受信したデータをCPU62に与える。つまり、この通信LANボード84および無線通信装置86によって、ロボット10は外部コンピュータなどと無線通信を行うことができる。
さらに、CPU62は、バス64を介して地図情報データベース(以下、「地図情報DB」という。)88に接続される。地図情報DB88は、ロボット10が現在地から人間が所望する目的地までの経路を特定し、その経路を案内するために必要な、環境内の地図データをはじめとする地図に関する情報を記憶するデータベースである。この地図情報DB88には、ダイクストラ法やウォーシャルフロイド法などの既存の経路探索アルゴリズムを用いて、現在地から目的地までの最短経路を特定するために必要な情報が記憶されている。また、地図情報DB88には、経路探索アルゴリズムによって特定された最短経路に含まれる通路(道)の方向を特定するための情報や、経路上において目印となるランドマークの情報も記憶されている。CPU62は、現在地の情報と目的地の情報とを元にこの地図情報DB88を参照して、目的地までの最短経路に含まれる通路(道)、曲がり角、曲がり角において曲がる角度(方向)、曲がる方向の目印となるランドマーク、階移動の手段のリストを得ることができる。このリストを「経路リスト」と呼ぶ。なお、曲がり角において曲がる角度(方向)は、たとえば、曲がり角によって接続される経路上の2つの通路(道)のそれぞれの方向から特定することができる。
図3は、ロボット10が道案内を行う、たとえば、イベント会場の地図を示すものであり、現在地Sから目的地Gまでの最短経路が示されている。このような図3に示す条件の場合、経路リストは「L1C1α1LM1+L2C2α2LM2+L3Gα3」となる。ここで、「Li(iは自然数。以下同じ)」は通路(道)、「Ci」は曲がり角、「αi」は曲がる角度(方向)、「LMi」はランドマーク、「G」は目的地をそれぞれ示している。なお、「L3Gα3」のように目的地「G」に続く「αi」(ここでは「α3」)は、進行方向において目的地が存在する方向(の角度)を示している。
また、図4に示すような条件の場合、経路リストは「L1C1α1LM1+L2C2α2LM2+L3C3α3LM3+L4C4α4LM4+L5C5α5LM5+L6Gα6」となる。
さらに、図5の(a)および(b)に示すような条件の場合、経路リストは「L1C1α1LM1+L2C2α2LM2+L3E3α3+L4C4α4LM4+L5Gα5」となる。ここで、「Ei」はエレベータを示している。なお、「L3E3α3」のようにエレベータ「Ei」(ここでば「E3」)に続く「αi」(ここでは「α3」)は、エレベータ内での向きの変更を示している。図5の(a)および(b)の例では、エレベータの入口と出口は同じでありエレベータ内では向きを反転するので「αi」は「180°」である。しかし、停止する階によって出口として開くドアが異なる特殊なエレベータが存在するので、このような場合には「αi」は停止する階によって異なったものとなる。
ところで、ロボット10は、このような経路リストに基づいて人間に現在地から目的地までの経路を説明する場合、2つの車輪22を互いに逆の方向に駆動させるなどして旋回して体の向きを変えることによって、体の向きで進行方向や曲がり角で曲がる方向を人間に示すことができる。しかし、旋回して体の向きを変える動作には時間がかかって人間を待たせることになるし、多くの電気エネルギーを必要とする。そのため、旋回して体の向きを変える動作は極力控える方がよい。しかし、体の向きによって方向を指示する動作を省略すると、人間が進行方向や曲がり角での曲がる方向を認識しづらくなる。
そこで、ロボット10が案内する経路が簡単で難易度が低い場合は体の向きによって方向を指示する動作を省略し、経路が複雑で難易度が高い場合は体の向きによって方向を指示する動作を実行する。たとえば、図3に示した場合の経路リストのように、案内する経路に含まれる曲がり角「Ci」の数が5個未満の場合には経路が簡単であり難易度が低いとし、図4に示した場合の経路リストのように、案内する経路に含まれる曲がり角「Ci」の数が5個以上の場合には経路が複雑であり難易度が高いとする。
また、曲がり角「Ci」の数が5個未満であっても、図5の(a)および(b)に示した場合の経路リストのように、案内する経路にエレベータ「Ei」が含まれて階を移動する場合は経路が複雑であり難易度が高いとする。このようにすることによって、旋回して体の向きを変える動作を必要な場合のみ実行して極力省略することができる。
次に、図6から図11に示すフロー図を用いて、ロボット10が道案内をする場合に、CPU62が実行する処理について説明する。なお、CPU62は、メモリ66に記憶されている所定のプログラムに基づいて図6から図11に示すフロー図の処理を実行する。なお、以下の説明において、上述の経路リストにおける「Li」や「Ci」などの経路リストを構成する要素のそれぞれを「項目」と呼ぶことにする。
まず、CPU62は、ステップS1において、周囲に人間が存在するか否かを判断する。ロボット10は、上述したように、自身が配置された環境の地図データを地図情報DB88に記憶しているため、この環境内に存在する壁、柱、置物などの障害物の位置を把握している。したがって、たとえば、赤外線距離センサ30の検出結果に基づいて地図データに存在しない物を検出すると、それを人間とみなすことによって、自身の周囲に存在する人間を認識することができる。
ただし、人間を検出する方法はこれに限定されず、赤外線距離センサ30に代えて、あるいは赤外線距離センサとともに、レーザレンジファインダや超音波距離センサを備えるようにし、これらを用いて人間を検出するようにしてもよい。また、ロボット10自身が備えるセンサによって人間を検出する必要は無く、たとえば、外部コンピュータが管理する、環境に設置された床センサや天井カメラなどのセンサによって人間を検出し、その検出結果を外部コンピュータからロボット10に与えるようにしてもよい。人間を検出する方法は、この他にも適宜な方法が採用され得る。
CPU62がステップS1で人間が周囲に存在すると判断すると(ステップS1:YES)、次に、CPU62は、ステップS3で存在する(検出された)人間が道案内を必要としているか否かを判断する。道案内が必要か否かを確認するのは、検出されたすべての人間が道案内を必要としているとは限らないからである。
たとえば、ロボット10は、「道案内は必要ですか?」などと人間に問いかけ、この問いかけに対する人間の返答を音声認識することによって当該人間が道案内を必要としているか否かを判断する。「道案内は必要ですか?」の発話は、メモリ66から「道案内は必要ですか?」に対応する行動モジュールを読み出し、さらに、読み出した行動モジュールから取り出した音声合成データを、音声入力/出力ボート72を介してスピーカ54から出力することによって行う。以下における各発話はこれと同様にして行われる。また、たとえば、「道案内が必要な場合は僕の肩に触れてね」などと人間に対して発話し、それに応じて人間がロボット10の肩に触れた場合、すなわち肩部の接触センサ48がオンになった場合に、当該人間が道案内を必要としていると判断するようにしてもよい。
検出した人間が道案内を必要としていると判断すると(ステップS3:YES)、次に、CPU62は、ステップS5で人間から目的地の情報を取得する。たとえば、「どこに行きたいの?」などと発話することによって人間に目的地を質問し、人間の返答した音声を音声認識することによって目的地の情報を取得する。
そして、次に、ステップS7で、ステップ5において取得した目的地の情報が地図情報DB88に存在するか否かを判断する。目的地の情報が地図情報DB88に存在しないと判断すると(ステップS7:NO)、ステップS9で、「ご案内できません」と発話して頭を下げる。つまり、目的地までの経路が分からず道案内サービスを提供することができないので、その旨を人間に伝える。このとき、メモリ66から頭を下げる動作のための行動モジュールを読み出し、読み足した行動モジュールに含まれる頭部モータ82についてのモータ制御データと角度データとに基づいて、頭を下げるように頭の角度を制御する。
一方、目的地の情報が地図情報DB88に存在すると判断すると(ステップS7:YES)、CPU62は、ステップS11で自身の現在地の情報を取得する。ロボット10は、上述したように、配置される環境内の地図データを予め地図情報DB88に記憶しており、この地図データを参照して自律移動を行う。つまあり、ロボット10は、現在、自身がどの地点にいてどの方向を向いているかを、たとえば、内蔵されたあるいは環境に配置されたセンサの情報に基づいて、常に把握している。したがって、ロボット10のCPU62は、当該地図データとセンサ情報を参照して現在地の情報および現在の向きの情報を取得することができる。
目的地の情報と現在地の情報とを取得すると、CPU62は、ステップS13で目的地の情報と現在地の情報とを基に地図情報DB88を利用して上述の経路リストを作成する。経路リストの作成には、上述したように、ウォーシャルフロイド法やダイクストラ法などの既存の経路探索アルゴリズムが用いられる。なお、経路リストの作成は、必ずしもロボット10で実行する必要は無く、たとえば、外部コンピュータで経路リストを生成して、これを外部コンピュータからロボット10に与えるようにしてもよい。したがって、地図情報DB88も外部コンピュータなどが備えるようにしてもよい。
そして、経路リストが作成されると、CPU62は、ステップS15において経路の難易度を評価し、ステップS17でこの経路の難易度の評価と経路リストに基づいて道案内を行う。
経路の難易度の評価の処理は、具体的には、図7のフロー図に示す処理に従って実行される。まず、CPU62は、ステップS21でフラグHをオフ状態に設定し、ステップS23でフラグEをオフ状態に設定してそれぞれのフラグを初期化する。フラグHは、経路リストに基づいて案内する経路が複雑であり難易度が高いと評価したか否かを示すフラグであり、複雑であり難易度が高いと評価した場合にオン状態に設定される。また、フラグEは経路リストに基づいて案内する経路においてエレベータが存在するか否か、つまり階移動が行われるか否かを示すフラグであり、エレベータが存在する場合(階移動が行われる場合)にオン状態に設定される。なお、この実施の形態ではエレベータの使用により階移動するものとするが、階段の使用により階移動してもかまわない。
次に、CPU62は、案内する経路上にエレベータが存在するか否かを判断する。つまり、経路リストに「Ei」の項目が含まれるか否かを判断する。そして、経路上にエレベータが存在すると判断すると(ステップS25:YES)、ステップS27でフラグEをオン状態に設定し、ステップS29でフラグHをオン状態に設定する。
一方、経路上にエレベータが存在しないと判断すると(ステップS25:NO)、ステップS31において経路上に曲がり角が5つ以上存在するか否かを判断する。つまり、経路リストに「Ci」の項目が5つ以上含まれるか否かを判断する。経路上に曲がり角が5つ以上存在すると判断すると(ステップS31:YES)、ステップS29でフラグHをオン状態とする。一方、曲がり角が5つ以上存在しないと判断すると(ステップS31:NO)、そのまま経路の難易度の評価の処理を終了してリターンする。
また、道案内の処理は、具体的には、図8ないし図11のフロー図に示す処理に従って実行される。まず、CPU62は、ステップS41において、フラグEがオン状態であるか否か、つまり経路にエレベータが存在し階移動を伴うか否かを判断する。ステップS41において経路にエレベータが存在すると判断すると(ステップS41:YES)、CPU62は、目的地は現在地のある階とは異なる階にあることを示すために、ステップS43において、たとえば、「目的地は2階にあります」と発話する。一方、経路にエレベータが存在しないと判断すると(ステップS41:NO)、ステップS43をスキップする。
そして、ステップS45で、「そこに行くには」と発話して経路の案内を開始し、ステップS47において、ポインタpの値を「1」として初期化する。このポインタpは、経路リストに含まれる項目を順にポイントするためのものである。なお、経路リストの先頭の項目は常に通路(道)を示す「L1」である。
ステップS49では、地図情報DB88でポインタpが示している1番目の項目である「L1」の通路を参照して通路「L1」の方向の情報を取得し、この情報に基づいて特定される進行方向にロボット10の体の向きを変える。このとき、メモリ66から体の向きを変えるための行動モジュールを読み出し、この行動モジュールに含まれる車輪モータ26についてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信してロボット10の体が旋回するように車輪22を制御する。なお、引数としての角度データは、ロボット10の現在の向きと通路「L1」の方向とから算出した現在の向きから通路「L1」の方向への角度に基づいて決定される。このステップS49では、経路の難易度の評価の結果とは無関係に、つまりフラグHの状態とは無関係にロボット10を旋回させて体の向きを進行方向に向ける。
次に、ステップS51では、経路リストについてポインタpがポイントしているp番目の項目が通路「Li」であるか否かを判断する。p番目の項目が通路「Li」でないと判断した場合には(ステップS51:NO)、ステップS67でエラー処理を行う。ステップS67のエラー処理では、「エラーが発生しました。プログラムを初期化します。」と発話してプログラムカウンターを初期化してステップS1に戻る。
一方、p番目の項目が通路「Li」であると判断すると(ステップS51:YES)、ステップS52において、地図情報DB88でポインタpが示しているp番目の項目である「Li」の通路の情報を参照して通路「Li」の方向をの情報を取得し、この情報に基づいて特定される進行方向をたとえば右腕で示す。このとき、メモリ66から右腕で方向を指し示すための行動モジュールを読み出し、この行動モジュールに含まれる右肩関節38Rを制御するモータについてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信して右腕で方向を指し示すように制御する。なお、引数としての角度データは、腕の現在の向きと通路「Li」の方向とから算出された現在の腕の向きから通路「Li」の方向への角度に基づいて決定される。そして、ステップS53で、ポインタpの値を「1」だけインクリメントする。
次に、CPU62は、ステップS55で、現在経路リストにおいてポインタpがポイントしているp番目の項目が曲がり角「Ci」であるか否かを判断する。p番目の項目が曲がり角「Ci」であると判断すると(ステップS55:YES)、ステップS57でポインタpの値を「1」だけインクリメントし、さらに図9のステップS71で、ポインタpがポイントしているp番目の項目が、曲がる角度を示す角度「αi」であるか否かを判断する。
ステップS71で角度「αi」でないと判断すると(ステップS71:NO)、図8のステップS67において上述したようなエラー処理を行う。一方、角度「αi」であると判断すると(ステップS71:YES)、ステップS75で「この方向を曲がり角まで進んでください」を発話する。なお、先のステップS55において判断した曲がり角「Ci」に対応つけて曲がり角の態様についての情報を地図情報DB88に記憶しておき、ここではその態様の情報に従って、「この方向を十字路まで進んでください」や「この方向をT字路まで進んでください」などと発話してもよい。
次に、CPU62は、ステップS77で「曲がり角に来たら」を発話し、ステップS79でフラグHがオン状態であるか否か、つまり経路の難易度の評価において難易度が高いと評価したか否かを判断する。
フラグHがオン状態である、つまり経路の難易度が高いと判断すると(ステップS79:YES)、ステップS71で、ポインタpがポイントしている角度「αi」に基づいて曲がり角で曲がる角度(方向)を特定し、その方向にロボット10を旋回して体を向ける。このとき、メモリ66から体の向きを変えるための行動モジュールを読み出し、この行動モジュールに含まれる車輪モータ26についてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信してロボット10の体が旋回するように車輪22を制御する。なお、引数として与えられる角度データは、ステップS71でポインタpがポイントしている角度「αi」に基づいて決定される。
ここで、角度「αi」は、たとえば、ロボット10の正面を基準として時計回りの角度であり、曲がり角「Ci」において右側に曲がる場合は角度「αi」は「90°」であり、左側に曲がる場合は角度「αi」は「270°」である。また、十字路で直進する場合は角度「αi」は「0°」である。
次に、ステップS83では、現在ロボット10の体が向いている方向、つまり曲がる方向であるロボット10の正面を右腕で指し示す。このとき、メモリ66から右腕で方向を指し示すための行動モジュールを読み出し、この行動モジュールに含まれる右肩関節38Rを制御するモータについてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信して右腕で方向を指し示すように制御する。なお、引数としての角度データは、腕がロボット10の正面を指し示すように予め設定された値によって与えられる。
一方、ステップS79においてフラグHがオン状態でない、つまり経路の難易度が高くないと判断すると(ステップS79:NO)、ステップS85で、ポインタpがポイントしている角度「αi」に基づいて曲がり角で曲がる角度(方向)を特定し、その方向を右腕で指し示す。このとき、メモリ66から右腕で方向を指し示すための行動モジュールを読み出し、この行動モジュールに含まれる右肩関節38Rを制御するモータについてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信して右腕で方向を指し示すように制御する。なお、引数としての角度データは、ステップS71でポインタpがポイントしている角度「αi」に基づいて決定される。
そして、ステップS87では、ポインタpの値を「1」だけインクリメントし、ステップS89で経路リストにおいてポインタpがポイントしているp番目の項目がランドマーク「LMi」であるか否かを判断する。
p番目の項目がランドマークであると判断すると(ステップS89:YES)、ステップS91で、たとえば、「赤い看板が見える右に曲がってください」を発話する。この発話の例は、ステップS89で判断されたランドマークが「赤い看板」であり、ステップS71で判断された角度「αi」が「90°」である場合である。なお、角度「αi」が「270°」である場合には「赤い看板が見える左に曲がってください」と発話し、角度「αi」が「0°」である場合には「赤い看板が見える前方に直進してください」と発話する。そして、ステップS93では、ポインタpの値を「1」だけインクリメントして、図8のステップS51に戻る。
一方、ステッ89でp番目の項目がランドマークでないと判断すると(ステップS89:NO)、ステップS95で、たとえば、「右に曲がってください」と発話する。この発話の例は、ステップS71で判断された角度「αi」が「90°」である場合である。なお、角度「αi」が「270°」である場合には「左に曲がってください」と発話し、角度「αi」が「0°」である場合には「前方に直進してください」と発話する。そして、図8のステップS51に戻る。
図8のステップS55に戻って、現在ポインタpがポイントしている経路リストのp番目の項目が曲がり角「Ci」でないと判断すると(ステップS55:NO)、ステップS59でp番目の項目がエレベータ「Ei」であるか否かを判断する。p番目の項目がエレベータであると判断すると(ステップS59:YES)、ポインタpの値を「1」だけインクリメントする。
次に、図10のステップS101で、ポインタpが現在ポイントしている経路リストのp番目の項目が角度「αi」であるか否かを判断する。p番目の項目が角度「αi」でないと判断すると(ステップS101:NO)、図8のステップS67で上述したようなエラー処理を実行する。
一方、p番目の項目が角度「αi」であると判断すると(ステップS101:YES)、ステップS105で、たとえば、「前方にあるエレベータに乗って2階を目指してください」を発話する。そして、ステップS101で判断した「αi」に基づいて、ステップS107で体の向きを「αi」だけ変えて、ステップS109で、たとえば、「2階に到着したらエレベータを降りてください」を発話する。
このとき、メモリ66から体の向きを変えるための行動モジュールを読み出し、この行動モジュールに含まれる車輪モータ26についてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信してロボット10の体が旋回するように車輪22を制御する。なお、引数として与えられる角度データは、ステップS101でポインタpがポイントしている角度「αi」に基づいて決定される。
なお、エレベータを降りるときの出口の扉が、エレベータに乗り込んだときの入口の扉と異なる場合には、先のステップ109で、たとえば、「2階に到着したら、乗り込んだときの入口の扉の右側にある扉からエレベータを降りてください」などとと発話するようにするとよい。ここで、出口の扉が入口の扉のたとえば右側にあることは、ステップS101で判断した「αi」の値から判断することができる。
ステップS111では、ポインタpの値を「1」だけインクリメントして、図8のステップS51に戻る。
図8のステップS59に戻って、p番目の項目がエレベータ「Ei」でないと判断すると(ステップS59:NO)、ステップS63において、p番目の項目は目的地「G」であるか否かを判断する。p番目の項目が目的地「G」でないと判断すると(ステップS63:NO)、ステップS67で上述したようなエラー処理を実行する。
一方、p番目の項目が目的地「G」であると判断すると(ステップS63:YES)、ステップS65でポインタpの値を「1」だけインクリメントする。
次に、図11のステップS121で、経路リストにおいてポインタpがポイントしているp番目の項目が角度「αi」であるか否かを判断する。p番目の項目が角度「αi」でないと判断すると(ステップS121:NO)、図8のステップS67で上述したようなエラー処理を実行する。
一方、p番目の項目が角度「αi」であると判断すると(ステップS121:YES)、ステップS125で、「この方向を真っ直ぐ目的地まで進んでください」を発話する。
そして、ステップS127で、フラグHがオン状態であるか否か、つまり経路の難易度が高いか否かを判断する。フラグHがオン状態であると判断すると(ステップS127:YES)、ステップS129で、ステップS121において判断した角度「αi」に基づいて目的地がある方向を判断し、その方向にロボット10を旋回して体を向ける。
このとき、メモリ66から体の向きを変えるための行動モジュールを読み出し、この行動モジュールに含まれる車輪モータ26についてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信してロボット10の体が旋回するように車輪22を制御する。なお、引数として与えられる角度データは、ステップS121でポインタpがポイントしている角度「αi」に基づいて決定される。
さらに、ステップS131で、目的地の方向、つまりロボット10の正面を右腕で指し示す。このとき、メモリ66から右腕で方向を指し示すための行動モジュールを読み出し、この行動モジュールに含まれる右肩関節38Rを制御するモータについてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信して右腕で方向を指し示すように制御する。なお、引数としての角度データは、腕がロボット10の正面を指し示すように予め設定された値によって与えられる。
一方、ステップS127で、フラグHがオン状態でないと判断すると(ステップS127:NO)、ステップS121において判断した角度「αi」に基づいて目的地がある方向を判断し、その方向を右腕で指し示す。このとき、メモリ66から右腕で方向を指し示すための行動モジュールを読み出し、この行動モジュールに含まれる右肩関節38Rを制御するモータについてのモータ制御データと引数として与えられた角度データとをモータ制御ボード68へ送信して右腕で方向を指し示すように制御する。なお、引数として与えられる角度データは、ステップS121でポインタpがポイントしている角度「αi」に基づいて決定される。
そして、ステップS135では、たとえば、「目的地は左側にあります」を発話する。なお、この発話の例は、ステップS121において判断した角度「αi」が「270°」の場合である。角度「αi」が「90°」の場合は「目的地は右側にあります」と発話し、角度「αi」が「0°」の場合は「目的地は正面にあります」と発話する。ステップS135の後はリターンして道案内の処理を終了する。
以上に説明したように、この実施例のロボット10は、人間に目的地までの経路を案内する際に、目的地までの経路が複雑であり難易度が高いか否かを判断する。そして、難易度が高くない場合は、人間が容易に経路の説明を理解できるため、腕による方向の指示と音声とによって経路を説明して案内し、難易度が高い場合は、人間の理解を助けるため、腕による方向の指示および音声に、体の向きによる方向の指示を加えて経路を説明して案内する。
このように、人間の理解を助けるために必要な場合にのみ体の向きによる方向の指示を行うことによって、人間による経路の理解の容易化と、ロボット10の旋回による体の向きの変更に伴う無駄な待ち時間の発生やエネルギーの消費の防止とを両立することができる。