(57)【要約】    【構成】  コミュニケーションロボット１２はＣＰＵを含み、ＣＰＵはコンピュータ２０から指示されたスクリプトファイルを実行する。スクリプトファイルでは、他方のロボット１２から送信される実行タイミングを受信したことに応じて、少なくとも発話を含むコミュニケーション行動を実行する。また、一方のロボット１２は、コミュニケーション行動を実行開始することまたは実行終了することに応じて、他のロボット１２に実行タイミングを送信する。したがって、２台のロボット１２は連鎖的にコミュニケーション行動を実行する。    【効果】  ロボット同士の協調した会話が可能である。【選択図】  図１
2006263858.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも発話を含むコミュニケーション行動を実行するコミュニケーションロボットであって、
他のコミュニケーションロボットから送信された実行タイミングを受信する実行タイミング受信手段、
前記実行タイミング受信手段によって実行タイミングを受信したことに応じて、前記コミュニケーション行動を実行するコミュニケーション実行手段、および
前記コミュニケーション実行手段によってコミュニケーション行動を実行開始することまたは実行終了したことに応じて、他のコミュニケーションロボットに実行タイミングを送信する実行タイミング送信手段を備える、コミュニケーションロボット。
【請求項２】
前記コミュニケーション行動は身体動作をさらに含む、請求項１記載のコミュニケーションロボット。
【請求項３】
外部要因を検出する外部要因検出手段をさらに備え、
前記コミュニケーション実行手段は、前記外部要因検出手段によって検出された外部要因に応じて異なる種類のコミュニケーション行動を実行する、請求項１または２記載のコミュニケーションロボット。
【請求項４】
前記外部要因検出手段は、音および映像の少なくとも一方に基づいて外部要因を検出する、請求項３記載のコミュニケーションロボット。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はコミュニケーションロボットに関し、特にたとえば、少なくとも発話を含むコミュニケーション行動を行う、コミュニケーションロボットに関する。
【背景技術】
【０００２】
背景技術の一例が非特許文献１に開示される。この非特許文献１によれば、対話サーバを通じて複数のロボット間で同期して状況依存モジュールを実行し、音声やジェスチャによりロボット同士が通信（対話）している（連鎖的に会話している）ことを表現している。
【非特許文献１】「人-ロボットの対話におけるロボット同士の対話観察の効果」電子情報通信学会論文誌 D-I, Vol.J85-D-I,No.7, pp. 691-700, Jul. 2002.
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、この背景技術では、各ロボットにおける状況依存モジュールのタイムスケジュールが固定的であり、対話サーバによってすべてのロボットの同期を取るようにしてあるため、たとえば１のロボットの状況依存モジュールやタイムスケジュールを変化させると、他のすべてのロボットについても状況依存モジュールやタイムスケジュール（タイミング）を変化させる必要がある。具体的には、１のロボットが「おはよう」と発話するのを「おはようございます」と発話するように変化させた場合には、発話時間が長くなってしまい、これに伴って、すべてのロボットにおける状況依存モジュールのタイムスケジュールを変化させる必要がある。つまり、非常に手間がかかり、開発労力や修正コストが膨大になってしまう。
【０００４】
それゆえに、この発明の主たる目的は、新規な、コミュニケーションロボットを提供することである。
【０００５】
この発明の他の目的は、連鎖的な会話を低い開発労力で実現できる、コミュニケーションロボットを提供することである。
【課題を解決するための手段】
【０００６】
請求項１の発明は、少なくとも発話を含むコミュニケーション行動を実行するコミュニケーションロボットであって、他のコミュニケーションロボットから送信された実行タイミングを受信する実行タイミング受信手段、実行タイミング受信手段によって実行タイミングを受信したことに応じて、コミュニケーション行動を実行するコミュニケーション実行手段、およびコミュニケーション実行手段によってコミュニケーション行動を実行開始することまたは実行終了したことに応じて、他のコミュニケーションロボットに実行タイミングを送信する実行タイミング送信手段を備える、コミュニケーションロボットである。
【０００７】
請求項１の発明では、コミュニケーションロボットは、たとえば、他のコミュニケーションロボットとの間で、少なくとも発話を含むコミュニケーション行動を実行する。実行タイミング受信手段は、他のコミュニケーションロボットから送信された実行タイミングを受信する。コミュニケーション行動実行手段は、実行タイミング受信手段によって実行タイミングを受信したことに応じて、コミュニケーション行動を実行する。実行タイミング送信手段は、コミュニケーション行動実行手段によってコミュニケーション行動を実行開始すること、または、実行終了したことに応じて、他のコミュニケーションロボットに実行タイミングを送信する。したがって、他のコミュニケーションロボットでは、実行タイミングを受信したことに応じて、コミュニケーション行動を実行する。
【０００８】
請求項１の発明によれば、他のコミュニケーションロボットから実行タイミングを受信したことに応じて、コミュニケーション行動を実行するので、他のコミュニケーションロボットとの間で連鎖的にコミュニケーション行動を実行することができる。したがって、たとえば、コミュニケーションロボット同士で協調した会話が可能である。また、実行タイミングを受信するだけなので、他のコミュニケーションロボットにおけるコミュニケーション行動の内容等は関係がない。このため、コミュニケーション行動を編集（変更、追加、削除）する場合に、他のコミュニケーションロボットのコミュニケーション行動の実行タイミングを考慮する必要がない。つまり、開発労力や修正コストを低減することができる。
【０００９】
請求項２の発明は請求項１に従属し、コミュニケーション行動は身体動作をさらに含む。
【００１０】
請求項２の発明では、コミュニケーションは、発話のみならず、身振り手振りのような身体動作を実行する場合もある。
【００１１】
請求項２の発明によれば、発話のみならず、身体動作も伴うため、人間同士のようなコミュニケーションをコミュニケーションロボット同士でも実現可能である。
【００１２】
請求項３の発明は請求項１または２に従属し、外部要因を検出する外部要因検出手段をさらに備え、コミュニケーション実行手段は、外部要因検出手段によって検出された外部要因に応じて異なる種類のコミュニケーション行動を実行する。
【００１３】
請求項３の発明では、外部要因検出手段は、外部要因を検出する。コミュニケーション実行手段は、外部要因に応じて異なる種類のコミュニケーション行動を実行する。
【００１４】
請求項３の発明によれば、外部要因に応じたコミュニケーション行動を実行するので、状況に応じたコミュニケーションが可能である。
【００１５】
請求項４の発明は請求項３に従属し、外部要因検出手段は、音および映像の少なくとも一方に基づいて外部要因を検出する。
【００１６】
請求項４の発明では、外部要因は、音および映像の少なくとも一方に基づいて検出される。したがって、たとえば、コミュニケーションロボットが存在する環境における音が大きかったり、映像に大きな動きがあったりすれば、周囲がざわついていると判断して、そのような周囲の状況に応じたコミュニケーション行動が実行される。
【００１７】
請求項４の発明によれば、周囲の状況に応じたコミュニケーション行動が実行されるので、人間同士がコミュニケーションしているようにコミュニケーションすることができる。
【発明の効果】
【００１８】
この発明によれば、他のロボットから実行タイミングを受信したことに応じてコミュニケーション行動を実行するので、連鎖的なコミュニケーションが可能である。また、実行タイミングをやり取りするので、１のロボットについての行動プログラムを編集する場合であっても、他のコミュニケーションロボットの実行タイミングを考慮したり変更したりする必要がない。このため、開発労力および修正コストを低減することができる。
【００１９】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００２０】
図１を参照して、この実施例のコミュニケーションロボットシステム（以下、単に「システム」という。）１０は、２台のコミュニケーションロボット（以下、単に「ロボット」という。）１２を含む。このロボット１２は、たとえば他のロボット１２または人間（図示せず）のようなコミュニケーションの対象とコミュニケーションすることを目的とした相互作用指向のものであり、身体動作（身振り、手振り）および発話（音声）の少なくとも一方を用いたコミュニケーションの行動（以下、「コミュニケーション行動」ということがある。）を行う機能を備えている。
【００２１】
なお、この実施例では、簡単のため、図１に示すように、システム１０は２台のロボット１２を備えるようにしてあるが、ロボット１２は３台以上であってもよい。
【００２２】
ロボット１２は、人間のような身体を有し、その身体を用いてコミュニケーションのために必要な複雑な身体動作を生成する。具体的には、図２を参照して、ロボット１２は台車３２を含み、この台車３２の下面には、このロボット１２を自律移動させる車輪３４が設けられる。この車輪３４は、車輪モータ（ロボット１２の内部構成を示す図３において参照番号「３６」で示す。）によって駆動され、台車３２すなわちロボット１２を前後左右任意の方向に動かすことができる。
【００２３】
なお、図２では示さないが、この台車３２の前面には、衝突センサ（図３において参照番号「３８」で示す。）が取り付けられ、この衝突センサ３８は、台車３２への人や他の障害物の接触を検知する。そして、ロボット１２の移動中に障害物との接触を検知すると、直ちに車輪３４の駆動を停止してロボット１２の移動を急停止させる。
【００２４】
また、ロボット１２の背の高さは、この実施例では、人、特に子供に威圧感を与えることがないように、１００ｃｍ程度とされている。ただし、この背の高さは任意に変更可能である。
【００２５】
台車３２の上には、多角形柱のセンサ取付パネル４０が設けられ、このセンサ取付パネル４０の各面には、超音波距離センサ４２が取り付けられる。この超音波距離センサ４２は、取付パネル４０すなわちロボット１２の周囲の主として人との間の距離を計測するものである。
【００２６】
台車３２の上には、さらに、ロボット１２の胴体が、その下部が上述の取付パネル４０に囲まれて、直立するように取り付けられる。この胴体は下部胴体４４と上部胴体４６とから構成され、これら下部胴体４４および上部胴体４６は、連結部４８によって連結される。連結部４８には、図示しないが、昇降機構が内蔵されていて、この昇降機構を用いることによって、上部胴体４６の高さすなわちロボット１２の高さを変化させることができる。昇降機構は、後述のように、腰モータ（図３において参照番号「５０」で示す。）によって駆動される。上で述べたロボット１２の身長１００ｃｍは、上部胴体４６をそれの最下位置にしたときの値である。したがって、ロボット１２の身長は１００ｃｍ以上にすることができる。
【００２７】
上部胴体４６のほぼ中央には、１つの全方位カメラ５２と、１つのマイク１６とが設けられる。全方位カメラ５２は、ロボット１２の周囲を撮影するもので、後述の眼カメラ５４と区別される。マイク１６は、周囲の音、とりわけ人の声を取り込む。
【００２８】
上部胴体４６の両肩には、それぞれ、肩関節５６Ｒおよび５６Ｌによって、上腕５８Ｒおよび５８Ｌが取り付けられる。肩関節５６Ｒおよび５６Ｌは、それぞれ３軸の自由度を有する。すなわち、右肩関節５６Ｒは、Ｘ軸，Ｙ軸およびＺ軸の各軸廻りにおいて上腕５８Ｒの角度を制御できる。Ｙ軸は、上腕５８Ｒの長手方向（または軸）に平行な軸であり、Ｘ軸およびＺ軸は、そのＹ軸に、それぞれ異なる方向から直交する軸である。左肩関節５６Ｌは、Ａ軸，Ｂ軸およびＣ軸の各軸廻りにおいて上腕５８Ｌの角度を制御できる。Ｂ軸は、上腕５８Ｌの長手方向（または軸）に平行な軸であり、Ａ軸およびＣ軸は、そのＢ軸に、それぞれ異なる方向から直交する軸である。
【００２９】
上腕５８Ｒおよび５８Ｌのそれぞれの先端には、肘関節６０Ｒおよび６０Ｌを介して、前腕６２Ｒおよび６２Ｌが取り付けられる。肘関節６０Ｒおよび６０Ｌは、それぞれ、Ｗ軸およびＤ軸の軸廻りにおいて、前腕６２Ｒおよび６２Ｌの角度を制御できる。
【００３０】
なお、上腕５８Ｒおよび５８Ｌならびに前腕６２Ｒおよび６２Ｌ（いずれも図２）の変位を制御するＸ，Ｙ，Ｚ，Ｗ軸およびＡ，Ｂ，Ｃ，Ｄ軸では、「０度」がホームポジションであり、このホームポジションでは、上腕５８Ｒおよび５８Ｌならびに前腕６２Ｒおよび６２Ｌは下方向に向けられる。
【００３１】
また、図２では示さないが、上部胴体４６の肩関節５６Ｒおよび５６Ｌを含む肩の部分や上述の上腕５８Ｒおよび５８Ｌならびに前腕６２Ｒおよび６２Ｌを含む腕の部分には、それぞれ、タッチセンサ（図３において参照番号６４で包括的に示す。）が設けられていて、これらのタッチセンサ６４は、人がロボット１２のこれらの部位に接触したかどうかを検知する。
【００３２】
前腕６２Ｒおよび６２Ｌのそれぞれの先端には、手に相当する球体６６Ｒおよび６６Ｌがそれぞれ固定的に取り付けられる。ただし、指の機能（握る、掴む、摘むなど）が必要な場合には、球体６６Ｒおよび６６Ｌに代えて、人の手の形をした「手」を用いることも可能である。
【００３３】
上部胴体４６の中央上方には、首関節６８を介して、頭部７０が取り付けられる。この首関節６８は、３軸の自由度を有し、Ｓ軸，Ｔ軸およびＵ軸の各軸廻りに角度制御可能である。Ｓ軸は首から真上に向かう軸であり、Ｔ軸およびＵ軸は、それぞれ、このＳ軸に対して異なる方向で直交する軸である。頭部７０には、人の口に相当する位置に、スピーカ７２が設けられる。スピーカ７２は、ロボット１２が、それの周囲の人に対して音声または声によってコミュニケーションを図るために用いられる。ただし、スピーカ７２は、ロボット１２の他の部位たとえば胴体に設けられてもよい。
【００３４】
また、頭部７０には、目に相当する位置に眼球部７４Ｒおよび７４Ｌが設けられる。眼球部７４Ｒおよび７４Ｌは、それぞれ眼カメラ５４Ｒおよび５４Ｌを含む。なお、右の眼球部７４Ｒおよび左の眼球部７４Ｌをまとめて眼球部７４といい、右の眼カメラ５４Ｒおよび左の眼カメラ５４Ｌをまとめて眼カメラ５４ということもある。眼カメラ５４は、ロボット１２に接近した人の顔や他の部分ないし物体等を撮影してその映像信号を取り込む。
【００３５】
なお、上述の全方位カメラ５２および眼カメラ５４のいずれも、たとえばＣＣＤやＣＭＯＳのような固体撮像素子を用いるカメラであってよい。
【００３６】
たとえば、眼カメラ５４は眼球部７４内に固定され、眼球部７４は眼球支持部（図示せず）を介して頭部７０内の所定位置に取り付けられる。眼球支持部は、２軸の自由度を有し、α軸およびβ軸の各軸廻りに角度制御可能である。α軸およびβ軸は頭部７０に対して設定される軸であり、α軸は頭部７０の上へ向かう方向の軸であり、β軸はα軸に直交しかつ頭部７０の正面側（顔）が向く方向に直交する方向の軸である。この実施例では、頭部７０がホームポジションにあるとき、α軸はＳ軸に平行し、β軸はＵ軸に平行するように設定されている。このような頭部７０において、眼球支持部がα軸およびβ軸の各軸廻りに回転されることによって、眼球部７４ないし眼カメラ５４の先端（正面）側が変位され、カメラ軸すなわち視線方向が移動される。
【００３７】
なお、眼カメラ５４の変位を制御するα軸およびβ軸では、「０度」がホームポジションであり、このホームポジションでは、図２に示すように、眼カメラ５４のカメラ軸は頭部７０の正面側（顔）が向く方向に向けられ、視線は正視状態となる。
【００３８】
図３には、ロボット１２の内部構成を示すブロック図が示される。この図３に示すように、ロボット１２は、全体の制御のためにマイクロコンピュータまたはＣＰＵ７６を含み、このＣＰＵ７６には、バス７８を通して、メモリ８０，モータ制御ボード８２，センサ入力／出力ボード８４および音声入力／出力ボード８６が接続される。
【００３９】
メモリ８０は、図示しないが、ＲＯＭやＨＤＤ、ＲＡＭ等を含み、ＲＯＭまたはＨＤＤにはこのロボット１２の制御プログラムおよびデータ等が予め格納されている。ＣＰＵ７６は、このプログラムに従って処理を実行する。具体的には、ロボット１２の身体動作を制御するための複数のプログラム（行動モジュールと呼ばれる。）が記憶される。たとえば、行動モジュールが示す身体動作としては、「握手」、「抱っこ」、「指差し」…などがある。行動モジュールが示す身体動作が「握手」である場合には、当該行動モジュールを実行すると、ロボット１２は、たとえば、右手を前に差し出す。また、行動モジュールが示す身体動作が「抱っこ」である場合には、当該行動モジュールを実行すると、ロボット１２は、たとえば、両手を前に差し出す。さらに、行動モジュールが示す身体動作が「指差し」である場合には、当該行動モジュールを実行すると、ロボット１２は、たとえば、右手（右腕）または左手（左腕）で所望の方向を指示する。また、ＲＡＭは、一時記憶メモリとして用いられるとともに、ワーキングメモリとして利用され得る。
【００４０】
モータ制御ボード８２は、たとえばＤＳＰ(Digital Signal Processor)で構成され、右腕、左腕、頭および眼等の身体部位を駆動するためのモータを制御する。すなわち、モータ制御ボード８２は、ＣＰＵ７６からの制御データを受け、右肩関節５６ＲのＸ，ＹおよびＺ軸のそれぞれの角度を制御する３つのモータと右肘関節６０ＲのＷ軸の角度を制御する１つのモータを含む計４つのモータ（図３ではまとめて、「右腕モータ」として示す。）８８の回転角度を調節する。また、モータ制御ボード８２は、左肩関節５６ＬのＡ，ＢおよびＣ軸のそれぞれの角度を制御する３つのモータと左肘関節６０ＬのＤ軸の角度を制御する１つのモータとを含む計４つのモータ（図３ではまとめて、「左腕モータ」として示す。）９０の回転角度を調節する。モータ制御ボード８２は、また、首関節６８のＳ，ＴおよびＵ軸のそれぞれの角度を制御する３つのモータ（図３ではまとめて、「頭部モータ」として示す。）９２の回転角度を調節する。モータ制御ボード８２は、また、腰モータ５０、および車輪３４を駆動する２つのモータ（図３ではまとめて、「車輪モータ」として示す。）３６を制御する。さらに、モータ制御ボード８２は、右眼球部７４Ｒのα軸およびβ軸のそれぞれの角度を制御する２つのモータ（図３ではまとめて、「右眼球モータ」として示す。）９４の回転角度を調節し、また、左眼球部７４Ｌのα軸およびβ軸のそれぞれの角度を制御する２つのモータ（図３ではまとめて、「左眼球モータ」として示す。）９６の回転角度を調節する。
【００４１】
なお、この実施例の上述のモータは、車輪モータ３６を除いて、制御を簡単化するためにそれぞれステッピングモータまたはパルスモータであるが、車輪モータ３６と同様に、直流モータであってよい。
【００４２】
センサ入力／出力ボード８４も、同様に、ＤＳＰで構成され、各センサやカメラからの信号を取り込んでＣＰＵ７６に与える。すなわち、超音波距離センサ４２の各々からの反射時間に関するデータがこのセンサ入力／出力ボード８４を通して、ＣＰＵ７６に入力される。また、全方位カメラ５２からの映像信号が、必要に応じてこのセンサ入力／出力ボード８４で所定の処理が施された後、ＣＰＵ７６に入力される。眼カメラ５４からの映像信号も、同様にして、ＣＰＵ７６に与えられる。また、タッチセンサ６４からの信号がセンサ入力／出力ボード８４を介してＣＰＵ７６に与えられる。
【００４３】
スピーカ７２には音声入力／出力ボード８６を介して、ＣＰＵ７６から、合成音声データが与えられ、それに応じて、スピーカ７２からはそのデータに従った音声または声が出力される。また、マイク２４からの音声入力が、音声入力／出力ボード８６を介してＣＰＵ７６に取り込まれる。
【００４４】
また、ＣＰＵ７６には、バス７８を通して、通信ＬＡＮボード９８が接続される。この通信ＬＡＮボード９８も、同様に、ＤＳＰで構成され、ＣＰＵ７６から与えられた送信データを無線通信装置１００に与え、無線通信装置１００から送信データを送信させる。また、通信ＬＡＮボード９８は無線通信装置１００を介してデータを受信し、受信データをＣＰＵ７６に与える。
【００４５】
図１に戻って、システム１０はまた、コンピュータ２０を含み、このコンピュータ２０はイントラネットやＬＡＮのようなネットワーク１４を介して２台のロボット１２の各々に接続される。ネットワーク１４は、有線または無線のいずれでもよい。コンピュータ２０は、汎用のＰＣまたはワークステーション或いはサーバである。このコンピュータ２０には、マイク２２、カメラ２４および入力装置２６が接続される。
【００４６】
マイク２２は、集音マイクであり、主として、２台のロボット１２の周囲の音（音声）を検出し、検出した音声に対応する音声信号をコンピュータ２０に入力する。簡単のため、図１では、１つのマイク２２を示してあるが、マイク２２は必要に応じて２つ以上設けるようにしてもよい。
【００４７】
カメラ２４は、たとえばＣＣＤやＣＭＯＳのような固体撮像素子を用いるカメラであり、主として、２台のロボット１２の周囲の映像を撮影し、撮影した映像に対応する映像信号をコンピュータ２０に入力する。簡単のため、図１では、１台のカメラ２４を示してあるが、カメラ２４は２台以上設けるようにしてもよい。
【００４８】
入力装置２６は、キーボードやコンピュータマウスである。ただし、コンピュータマウスに代えて、タッチパネル、タッチパッド、トラックボールなどの他のポインティングデバイスを設けるようにしてもよい。また、コンピュータマウスとともに、他のポインティングデバイスを設けてもよい。入力装置２６は、ユーザによって操作され、操作に応じた操作信号をコンピュータ２０に入力する。
【００４９】
図４はこの実施例で使用するスクリプト（命令）の一覧を示す図解図である。この図４を参照して、スクリプトの一覧では、スクリプト（命令）に対応して、引数が記述されている。具体的には、発話命令（speak文）は、音声（音声データ）を再生開始する。また、再生開始と同じタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。ここで、指定された信号とは、任意の信号であり、スクリプトファイルの作成者が自由に決定できる信号である。以下、同様である。発話命令（speakwait文）は、音声を再生開始する。また、再生が終了したタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。動作命令（motion文）は、モーション（身体動作）を開始する。つまり、指定された動作ファイル（行動モジュール）を実行する。また、モーションの開始と同じタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。動作命令（motionwait文）は、モーションを開始する。また、モーションが終了したタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。
【００５０】
信号命令（signal文）は、指定された信号を送信する。信号待ち命令（signalwait文）は、指定された信号を受信するまで待機する。待ち命令（wait文）は、指定された時間だけ待機する。移動命令（move文）は、指定座標に移動し、指定方向に転回する。また、移動開始と同じタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。移動命令（movewait文）は、指定座標に移動し、指定方向に転回する。また、移動が終了したタイミングで指定された信号を送信する。ただし、この信号の送信は省略できる。
【００５１】
リアクションチェック命令（check_reaction文）は、笑いを判定する。この実施例では、コンピュータ２０に、笑いの判定（たとえば、すべった、大うけ、小うけ）の送信要求を送信する。なお、この実施例では、後で説明するように、２台のロボット１２で漫才を行うため、ロボット１２が存在する環境における外部の要因（外部要因）ないし刺激（外部刺激）としての笑い（ざわめき）を取得（検出）すべく、笑いの判定要求を送信するようにしてある。しかし、リアクションチェック命令は、一般的に言うと、ロボット１２が存在する環境における外部要因ないし外部刺激（以下、「ステータス信号」ということがある。）の送信要求を実行するためのスクリプトである。判断命令文（if文）は、笑い判定の結果（外部要因）に応じたシナリオに移行する。終了（exit文）は、シナリオの最後（終了）である。
【００５２】
このようなスクリプトを用いてスクリプトファイルを作成し、ロボット１２同士による協調した（連鎖的な）インタラクション（コミュニケーション行動）を実現するようにしてある。スクリプトファイルに従うコミュニケーション行動の例については後述するが、ここでは、ロボット１２（ＣＰＵ７６）のスクリプトの読込み処理について説明することにする。
【００５３】
具体的には、各ロボット１２のＣＰＵ７６は、図５〜図７に示すようなスクリプトの読込み処理を実行し、後述するように、スクリプトファイル（シナリオ）に従ったコミュニケーション行動を実行しているのである。図５を参照して、ＣＰＵ７６はスクリプトの読込み処理を開始すると、ステップＳ１で、スクリプトファイルの１行目を読み込む。続くステップＳ３では、speak文であるかどうかを判断する。ステップＳ３で“ＹＥＳ”であれば、つまりspeak文であれば、ステップＳ５で、指定された音声ファイルを再生開始し、図６に示すステップＳ３３に進む。ここで、音声ファイルは、たとえばコミュニケーション行動としての発話の内容を示す音声データ（または音声合成データ）である。この音声データが再生され、ロボット１２が発話する。以下、音声ファイルを再生する場合において、同様である。一方、ステップＳ３で“ＮＯ”であれば、つまりspeak文でなければ、ステップＳ７で、speakwait文であるかどうかを判断する。
【００５４】
ステップＳ７で“ＹＥＳ”であれば、つまりspeakwait文であれば、ステップＳ９で、指定された音声ファイルを再生開始し、ステップＳ１１で、音声ファイルの再生を終了したかどうかを判断する。音声ファイルの再生を終了していなければ、ステップＳ１１で“ＮＯ”となり、そのまま同じステップＳ１１に戻る。しかし、音声ファイルの再生を終了すれば、ステップＳ１１で“ＹＥＳ”となり、ステップＳ３３に進む。
【００５５】
一方、ステップＳ７で“ＮＯ”であれば、つまりspeakwait文でなければ、ステップＳ１３で、motion文であるかどうかを判断する。ステップＳ１３で“ＹＥＳ”であれば、つまりmotion文であれば、ステップＳ１５で、指定された動作ファイルを再生開始し、ステップＳ３３に進む。ここで、動作ファイルは、コミュニケーション行動に含まれる身体動作を制御するためのデータで構成され、視線方向（顔の向き）や各関節角が指定される。したがって、指定された視線方向や関節角になるように、モータ８８，９０，９２，９４，９６が回転制御される。これにより、ロボット１２は身振り手振りを行う。以下、動作ファイルを再生する場合において、同様である。
【００５６】
また、ステップＳ１３で“ＮＯ”であれば、つまりmotion文でなければ、ステップＳ１７で、motionwait文であるかどうかを判断する。ステップＳ１７で“ＹＥＳ”であれば、つまりmotionwait文であれば、ステップＳ１９で、指定された動作ファイルを再生開始し、ステップＳ２１で、動作ファイルの再生を終了したかどうかを判断する。動作ファイルの再生を終了していなければ、ステップＳ２１で“ＮＯ”となり、同じステップＳ２１に戻る。しかし、動作ファイルの再生を終了すれば、ステップＳ２１で“ＹＥＳ”となり、ステップＳ３３に進む。
【００５７】
一方、ステップＳ１７で“ＮＯ”であれば、つまりmotionwait文でなければ、図６に示すステップＳ２３で、move文であるかどうかを判断する。ステップＳ２３で“ＹＥＳ”であれば、つまりmove文であれば、ステップＳ２５で、指定された座標（ｘ，ｙ，θ）に移動を開始し、ステップＳ３３に進む。ここで、座標（ｘ，ｙ）は、ロボット１２が存在する環境において、いずれかの位置を基準（原点）とした場合の位置であり、θはロボット１２の正面方向とたとえばＸ軸とがなす角度すなわちロボット１２の向きである。以下、指定された座標に移動する場合において、同じである。
【００５８】
また、ステップＳ２３で“ＮＯ”であれば、つまりmove文でなければ、ステップＳ２７で、movewait文であるかどかを判断する。ステップＳ２７で“ＹＥＳ”であれば、つまりmovewait文であれば、ステップＳ２９で、指定された座標に移動を開始し、ステップＳ３１で、移動を終了したかどうかを判断する。移動を終了していなければ、ステップＳ３１に“ＮＯ”となり、同じステップＳ３１に戻る。しかし、移動を終了すれば、ステップＳ３１で“ＹＥＳ”となり、ステップＳ３３に進む。
【００５９】
ステップＳ３３では、末尾に信号送信指令があるかどうかを判断する。ステップＳ３３で“ＮＯ”であれば、つまり末尾に信号送信指令がなければ、図７に示すステップＳ６５に進む。しかし、ステップＳ３３で“ＹＥＳ”であれば、つまり末尾に信号送信指令があれば、ステップＳ３７で、指定された信号を送信する。
【００６０】
また、ステップＳ２７で“ＮＯ”であれば、つまりmovewait文でなければ、ステップＳ３５で、signal文であるかどうかを判断する。ステップＳ３５で“ＹＥＳ”であれば、つまりsignal文であれば、ステップＳ３７に進む。一方、ステップＳ３５で“ＮＯ”であれば、つまりsignal文でなければ、ステップＳ３９で、signalwait文であるかどうかを判断する。ステップＳ３９で“ＹＥＳ”であれば、つまりsignalwait文であれば、ステップＳ４１で、指定された信号を受信したかどうかを判断する。ここで，指定された信号を受信していなければ、ステップＳ４１で“ＮＯ”となり、同じステップＳ４１に戻る。つまり、指定された信号の受信を待機する。しかし、指定された信号を受信すれば、ステップＳ４１で“ＹＥＳ”となり、ステップＳ６５に進む。
【００６１】
ステップＳ３９で“ＮＯ”であれば、つまりsignalwait文でなければ、ステップＳ４３で、wait文であるかどうかを判断する。ステップＳ４３で“ＹＥＳ”であれば、つまりwait文であれば、ステップＳ４５で、指定された時間だけ待機して、ステップＳ６５に進む。一方、ステップＳ４３で“ＮＯ”であれば、つまりwait文でなければ、図７に示すステップＳ４７で、check_reaction文であるかどうかを判断する。
【００６２】
ステップＳ４７で“ＹＥＳ”であれば、つまりcheck_reaction文であれば、ステップＳ４９で、ステータス信号の送信要求（笑いの判定要求）をコンピュータ２０に送信する。続くステップＳ５１では、ステータス信号（笑いの判定結果）を受信したかどうかを判断する。ステップＳ５１で“ＮＯ”であれば、つまりステータス信号を受信していなければ、そのままステップＳ５１に戻る。一方、ステップＳ５１で“ＹＥＳ”であれば、つまりステータス信号を受信すれば、ステップＳ５３で、ステータスが“大爆笑（大うけ）”を示すかどうかを判断する。ステップＳ５３で“ＹＥＳ”であれば、つまりステータスが“大爆笑”であれば、ステップＳ５５で、“大爆笑”についてif文で設定されたシナリオに移行する。
【００６３】
しかし、ステップＳ５３で“ＮＯ”であれば、つまりステータスが“大爆笑”でなければ、ステップＳ５７で、“普通の笑い（小うけ）”であるかどうかを判断する。ステップＳ５７で“ＹＥＳ”であれば、つまりステータスが“普通の笑い”であれば、ステップＳ５９で、“普通の笑い”についてif文で設定されたシナリオに移行して、ステップＳ６５に進む。一方、ステップＳ５７で“ＮＯ”であれば、つまり“笑いなし”であれば、ステップＳ６１で、“笑いなし”についてif文で設定されたシナリオに移行して、ステップＳ６５に進む。
【００６４】
一方、ステップＳ４７で“ＮＯ”であれば、つまりcheck_reaction文でなければ、ステップＳ６３で、exit文であるかどうかを判断する。ステップＳ６３で“ＮＯ”であれば、つまりexit文でなければ、ステップＳ６５で、スクリプトファイルの次の行を読み込み、図５に示したステップＳ３に戻る。一方、ステップＳ６３で“ＹＥＳ”であれば、つまりexit文であれば、スクリプトの読込み処理を終了する。
【００６５】
たとえば、図８に示すように、システム１０の２台のロボット１２が舞台上に配置され、全部または一部の観客の声（音または音声）を収集するように、マイク２２が配置され、さらに、全部または一部の観客（顔ないし上半身）を撮影するように、カメラ２４が配置される。
【００６６】
なお、簡単のため、図８ではコンピュータ２０および入力装置２６は省略するが、２台のロボット１２とコンピュータ２０とはネットワーク１４で接続されるとともに、マイク２２およびカメラ２４はコンピュータ２０に接続される。
【００６７】
たとえば、２台のロボット１２（説明の便宜上、一方を「ロボットＡ」と呼び、他方を「ロボットＢ」と呼ぶことがある。）は、舞台上で漫才のようなインタラクションを行う。つまり、２台のロボット１２が連鎖的にインタラクションする。ここでは、ロボットＡが「ぼけ」を担当し、ロボットＢが「つっこみ」を担当することにする。ユーザがコンピュータ２０に接続された入力装置２６を操作して、各ロボット１２に、所望のスクリプトファイルを指示する。この実施例では、スクリプトファイルは、後述するように、ロボット１２が実行する漫才についてのコミュニケーション行動等を順次記述したものである。したがって、「ぼけ」のスクリプトファイルおよび「つっこみ」のスクリプトファイルを、それぞれ、１つの台本（シナリオ）と言うことができる。
【００６８】
なお、後述するように、この実施例では、スクリプトファイルは、各ロボット１２のメモリ８０に予め記憶されており、コンピュータ２０は、ユーザの指示に従って実行するスクリプトファイルのファイル名のような識別情報を各ロボット１２に指示する。
【００６９】
ユーザの指示に従って、コンピュータ２０が各ロボット１２にスクリプトファイルを指示すると、各ロボット１２は、指示されたスクリプトファイルの読込みを開始し、スクリプトファイルに記述されたスクリプトを１行目から順次実行する。つまり、漫才の処理が実行される。
【００７０】
図９（Ａ）および図９（Ｂ）は、２台のロボット１２が漫才する場合に、各ロボット１２で実行されるスクリプトファイルの例を示す図解図である。この実施例では、図９（Ａ）に示すスクリプトファイル８１２ａはロボットＡで実行され、図９（Ｂ）に示すスクリプトファイル８１２ｂはロボットＢで実行される。スクリプトファイル８１２ａは、シナリオＡ（ぼけ）についてのスクリプトファイルである。スクリプトファイル８１２ｂは、シナリオＡとで一対となるシナリオＢ（つっこみ）についてのスクリプトファイルである。
【００７１】
具体的に説明すると、シナリオＡでは、１行目に、信号Ｓ（開始信号）を待機するsignalwait文が記述される。２行目には、後述する音声データ８１４ａ（A01.wav）の発話命令およびその末尾に信号Ａの送信命令が記述される。３行目には、特定の信号（ここでは、信号Ｂ）の待機命令が記述される。ここで、信号Ａは、ロボットＢのコミュニケーション行動の実行タイミングを示す信号であり、ロボットＡがロボットＢに送信する。ここでは、ロボットＡは、音声データ８１４ａを再生した後に、信号Ａを送信するようにしてある。つまり、コミュニケーション行動の実行を終了したタイミングで、実行タイミングを送信するようにしてある。ただし、コミュニケーション行動の実行を開始したタイミングで、実行タイミングを送信する場合もある。また、信号Ｂは、ロボットＡのコミュニケーション行動の実行タイミングを示す信号であり、ロボットＢがロボットＡに送信する。信号Ｂの送信タイミングは、信号Ａの場合と同様であるため、重複した説明は省略する。
【００７２】
また、シナリオＡの４行目には、笑いの判定要求のためのreaction_check文が記述される。このreaction_check文を読み込むと、ロボットＡは笑いの判定要求をコンピュータ２０に送信する。５行目〜７行目には、笑いの判定結果が「大うけ」である場合のシナリオが記述される。笑いの判定結果が「大うけ」の場合には、後述する音声データ８１４ｂ（A02.wav）の発話命令が記述される。また、８行目〜１０行目には、笑いの判定結果が「小うけ」である場合のシナリオが記述される。笑いの判定結果が「小うけ」の場合には、後述する音声データ８１４ｃ（A03.wav）の発話命令が記述される。そして、１１行目には、シナリオＡすなわちスクリプトファイル８１２ａの終了を示すexit文が記述される。
【００７３】
一方、図９（Ｂ）に示すように、スクリプトファイル８１２ｂでは、１行目に、信号Ｓ（開始信号）を待機するsignalwait文が記述される。２行目には、信号Ａ（ロボットＢの実行タイミングについての信号）を待機するsigunalwait文が記述される。３行目には、後述する音声データ８１４ｄを再生するspeakwait文およびその末尾に信号Ｂの送信指示が記述される。そして、４行目には、シナリオＢすなわちスクリプトファイル８１２ｂの終了を示すexit文が記述される。
【００７４】
このように、ロボットＡがスクリプトファイル８１２ａを実行し、ロボットＢがスクリプトファイル８１２ｂを実行すると、ロボットＡが「暑は夏いねぇ〜」と発話すると、これに対して、ロボットＢが「なんでやねん」と発話する。ここで、笑いを判定する。笑いが「大うけ」であれば、ロボットＡは「ええお客さんやなあ」と発話する。一方、笑いが「小うけ」であれば、ロボットＡは「あ、逆や」と発話する。つまり、ロボットＡとロボットＢとが連鎖的に会話し、また、観客の反応（外部要因）に応じたシナリオを展開するのである。
【００７５】
なお、この実施例では、簡単のため、連鎖的な会話の一部のみを示してあるが、スクリプトファイルをさらに長いシナリオを記述することにより、さらに長い漫才を実行できる。
【００７６】
また、この実施例では、簡単のため、ロボットは発話のみを実行するようにしてあるが、適宜身体動作や移動を実行させるように、動作命令（motion, motionwait）のスクリプトや移動命令（move, movewait）のスクリプトを記述するようにしてもよい。
【００７７】
図１０は、ロボット１２（ロボットＡ，ロボットＢ）に内蔵されるメモリ８０のメモリマップを示す図解図である。この図１０を参照して、メモリ８０は、プログラム記憶領域８００およびデータ記憶領域８１０を含む。プログラム記憶領域８００には、ロボット１２についての制御プログラムが記憶され、この制御プログラムはメインプログラム８００ａおよびスクリプト読込みプログラム８００ｂなどによって構成される。
【００７８】
メインプログラム８００ａは、ロボット１２の全体処理を実行するためのプログラムである。スクリプト読込みプログラム８００は、指定されたスクリプトファイルに記述されるスクリプトを１行ずつ読み込み、スクリプトを実行するためのプログラムである。
【００７９】
データ記憶領域８１０には、スクリプトファイル記憶領域８１２、音声データ記憶領域８１４およびその他の領域８１６が設けられる。スクリプトファイル記憶領域８１２には、図９（Ａ）および図９（Ｂ）に示したようなスクリプトファイル８１２ａ，８１２ｂなどの複数のスクリプトファイルが記憶される。上述したように、スクリプトファイル８１２ａとスクリプトファイル８１２ｂとは一対であり、１つの漫才（ネタ）を構成する。図示は省略してあるが、スクリプトファイル記憶領域８１２に記憶されるスクリプトファイルは、１つのネタにつき、ぼけ用とつっこみ用とが用意され、スクリプトファイル８１２ａとスクリプトファイル８１２ｂのように、連続（隣接）して、または、互いに関連づけて、記述されているものとする。
【００８０】
音声データ記憶領域８１４には、複数の音声データ（音声ファイル）が記憶される。ただし、この実施例では、簡単のため、スクリプトファイル８１２ａおよびスクリプトファイル８１２ｂにおいて指定（実行）される音声データのみを示してある。具体的には、音声データ（A01.wav）８１４ａは、「暑は夏いねぇ〜」についての音声合成データである。音声データ（A02.wav）８１４ｂは、「ええお客さんやなあ」についての音声合成データである。音声データ（A03.wav）８１４ｃは、「あ、逆や」についての音声合成データである。音声データ（B01.wav）８１４ｄは、「なんでやねん」についての音声合成データである。
【００８１】
その他の領域８１６は、たとえば、バッファ領域ないしワーク領域であり、図示は省略するが、プログラム（行動モジュール）の実行中に発生するデータを一時記憶したり、他のロボット１２から送信された信号を一時記憶したりするなどに使用される。
【００８２】
図９（Ａ），（Ｂ）および図１０に示したようなスクリプトファイル８１２ａおよび８１２ｂに従って、ロボットＡおよびロボットＢが漫才する場合の処理を図１１〜図１３に示すフロー図を用いて説明する。また、このとき、コンピュータ２０は、図１４に示す全体処理を実行する。
【００８３】
図１１を参照して、ロボットＡのＣＰＵ７６は漫才の処理を開始すると、ステップＳ７１で、スクリプト指定を受信したかどうかを判断する。つまり、読み込むスクリプトファイルが指定されたかどうかを判断する。ステップＳ７１で“ＮＯ”であれば、つまりスクリプト指定を受信していなければ、同じステップＳ７１に戻る。一方、ステップＳ７１で“ＹＥＳ”であれば、つまりスクリプト指定を受信していれば、ステップＳ７３で、指定されたスクリプトファイルを読み込む。ここでは、スクリプトファイル８１２ａを読み込むが、図５〜図７に示したように、スクリプトを１行ずつ読み込み、実行する。ただし、if文が記述されている場合には、条件を満たすスクリプトのみが読み込まれる。以下、同様である。
【００８４】
続くステップＳ７５では、信号Ｓを受信したかどうかを判断する。つまり、ここでは、図９（Ａ）に示したように、スクリプトファイル８１２ａの１行目を読み込み、信号Ｓの待機命令の処理を実行しているのである。ステップＳ７５で“ＮＯ”であれば、つまり信号Ｓ（漫才の開始指示。以下、同じ。）を受信していなければ、同じステップＳ７５に戻って、信号Ｓの受信を待機する。一方、ステップＳ７５で“ＹＥＳ”であれば、つまり信号Ｓを受信すれば、ステップＳ７７で、発話開始する。ここでは、音声データ８１４ａ（A01.wav）を再生する。つまり、ロボットＡは、「暑は夏いねぇ〜」と発話する。続くステップＳ７９では、発話を終了したかどうかを判断する。ステップＳ７９で“ＮＯ”であれば、つまり発話を終了していなければ、ステップＳ７９に戻って、発話が終了するのを待機する。一方、ステップＳ７９で“ＹＥＳ”であれば、つまり発話が終了すれば、ステップＳ８１で、信号ＡをロボットＢに送信する。このように、ステップＳ７７〜Ｓ８１の処理は、図９（Ａ）に示したように、スクリプトファイル８１２ａの２行目を読み込むことにより実行される。
【００８５】
続くステップＳ８３では、信号Ｂを受信したかどうかを判断する。ここでは、図９（Ａ）に示したように、スクリプトファイル８１２ａの３行目を読み込み、信号Ｂの受信を待機しているのである。つまり、ロボットＡについてのコミュニケーション行動の実行タイミングの受信を待機しているのである。
ステップＳ８３で“ＮＯ”であれば、つまり信号Ｂを受信していなければ、ステップＳ８３に戻る。一方、ステップＳ８３で“ＹＥＳ”であれば、つまり信号Ｂを受信すれば、ステップＳ８５で、ステータス信号すなわち笑いの判定要求をコンピュータ２０に送信する。ここでは、図９（Ａ）に示したスクリプトファイル８１２ａの４行目を読み込み、笑いの判定要求を実行しているのである。
【００８６】
続いて、図１２に示すステップＳ８７では、コンピュータ２０から信号Ｌ１を受信したかどうかを判断する。つまり、笑い判定結果を受信し、それが「大うけ」を示しているかどうかを判断する。ステップＳ８７で“ＹＥＳ”であれば、つまり信号Ｌ１を受信すれば、ステップＳ８９で、発話開始して、漫才の処理を終了する。ここでは、音声データ８１４ｂ（A02.wav）を再生する。つまり、ロボットＡは、「ええお客さんやなあ」と発話する。ステップＳ８７およびＳ８９の処理は、図９（Ａ）に示したスクリプトファイル８１２ａの５−７行目を読み込むことにより、実行される。
【００８７】
一方、ステップＳ８７で“ＮＯ”であれば、つまり信号Ｌ１を受信していなければ、ステップＳ９１で、信号Ｌ２を受信したかどかを判断する。つまり、笑い判定結果を受信し、それが「小うけ」を示しているかどうかを判断する。ステップＳ９１で“ＮＯ”であれば、つまり信号Ｌ１およびＬ２のいずれも受信していない場合には、ステップＳ８７に戻る。しかし、ステップＳ９１で“ＹＥＳ”であれば、ステップＳ９３で、発話開始して、漫才の処理を終了する。ここでは、音声データ８１４ｃ（A03.wav）を再生する。つまり、ロボットＡは、「あ、逆や」と発話する。ステップＳ９１および９３の処理は、図９（Ａ）に示したスクリプトファイル８１２ａの８―１０行目を読み込むことにより、実行される。
【００８８】
なお、ステップＳ８９およびＳ９３の終了後に、漫才の処理を終了するのは、図９（Ａ）に示したスクリプトファイル８１２ａの１１行目のexit文を読み込むためである。
【００８９】
一方、図１３に示すように、ロボットＢのＣＰＵ７６は漫才の処理を開始すると、ステップＳ１０１で、スクリプト指示を受信したかどうかを判断する。つまり、読み込むスクリプトファイルが指定されたかどうかを判断する。ステップＳ１０１で“ＮＯ”であれば、つまりスクリプト指定を受信していなければ、同じステップＳ１０１に戻る。一方、ステップＳ１０１で“ＹＥＳ”であれば、つまりスクリプト指定を受信していれば、ステップＳ１０３で、指定されたスクリプトファイルを読み込む。ここでは、スクリプトファイル８１２ｂを読み込が、図５〜図７に示したように、スクリプトを１行ずつ読み込む。
【００９０】
続くステップＳ１０５では、信号Ｓを受信したかどうかを判断する。つまり、ここでは、図９（Ｂ）に示したように、スクリプトファイル８１２ｂの１行目を読み込み、信号Ｓの待機命令の処理を実行しているのである。ステップＳ１０５で“ＮＯ”であれば、つまり信号Ｓを受信していなければ、同じステップＳ１０５に戻って、信号Ｓの受信を待機する。一方、ステップＳ１０５で“ＹＥＳ”であれば、つまり信号Ｓを受信すれば、ステップＳ１０７で、信号Ａを受信したかどうかを判断する。これは、図９（Ｂ）に示したように、スクリプトファイル８１２ｂの２行目を読み込み、信号Ａの待機命令の処理を実行しているのである。つまり、ロボットＢについてのコミュニケーション行動の実行タイミングの受信を待機しているのである。
【００９１】
ステップＳ１０７で“ＮＯ”であれば、つまり信号Ａを受信していなければ、同じステップＳ１０７に戻る。しかし、ステップＳ１０７で“ＹＥＳ”であれば、つまり信号Ａを受信すれば、ステップＳ１０９で、発話開始する。ここでは、音声データ８１４ｂ（B01.wav）を再生する。つまり、ロボットＢは、「なんでやねん」と発話する。次のステップＳ１１１では、発話終了かどうかを判断する。このステップＳ１０９およびＳ１１１の処理は、図９（Ｂ）に示したスクリプトファイル８１２ｂの３行目を読み込むことにより、実行される。
【００９２】
ステップＳ１１１で“ＮＯ”であれば、つまり発話終了でなければ、同じステップＳ１１１に戻る。しかし、ステップＳ１１１で“ＹＥＳ”であれば、つまり発話終了であれば、ステップＳ１１３で、信号ＢをロボットＡに送信して、漫才の処理を終了する。ステップＳ１１３の処理するとともに、漫才の処理を終了するのは、図９（Ｂ）に示したスクリプトファイル８１２ｂの４行目を読み込むことにより、実行される。
【００９３】
また、コンピュータ２０は、図１４に示すような全体処理を実行する。図１４を参照して、コンピュータ２０は全体処理を開始すると、ステップＳ１２１で、シナリオ送信の指示があるかどうかを判断する。ここでは、ユーザが入力装置２６を操作して、シナリオ送信の指示を入力したかどうかを判断する。ステップＳ１２１で“ＮＯ”であれば、シナリオ送信の指示がなければ、同じステップＳ１２１に戻る。一方、ステップＳ１２１で“ＹＥＳ”であれば、つまりシナリオ送信の指示があれば、ステップＳ１２３で、ロボットＡにシナリオＡ（ぼけ）を送信するとともに、ロボットＢにシナリオＢ（つっこみ）を送信する。ただし、上述しように、厳密には、スクリプトファイルのファイル名のような識別情報を指定（指示）する。
【００９４】
なお、図１１〜図１３に示したように、スクリプトファイル８１２ａおよびスクリプトファイル８１２ｂで構成される漫才を実行するため、ステップＳ１２３では、シナリオＡをロボットＡに送信し、シナリオＢをロボットＢに送信するようにしてある。しかし、実際には、ユーザが指定したシナリオが各ロボットに送信されるのである。
【００９５】
続くステップＳ１２５では、開始指示があるかどうかを判断する。つまり、ユーザが入力装置２６を操作して、漫才の開始指示を入力したかどうかを判断する。ステップＳ１２５で“ＮＯ”であれば、つまり開始指示が入力されなければ、ステップＳ１２５に戻る。しかし、ステップＳ１２５で“ＹＥＳ”であれば、つまり開始指示が入力されれば、ステップＳ１２７で、ロボットＡおよびロボットＢに信号Ｓを送信する。上述したように、信号Ｓは漫才の開始指示である。
【００９６】
次のステップＳ１２９では、笑い判定要求を受信したかどうかを判断する。上述したように、この実施例では、ロボットＡが笑い判定要求を送信するようにしてあるが、これはシナリオＡに従うためであり、シナリオによっては、ロボットＢが笑い判定要求を送信する場合もある。ステップＳ１２９で“ＮＯ”であれば、つまり笑い判定要求がなければ、同じステップＳ１２９に戻る。しかし、ステップＳ１２９で“ＹＥＳ”であれば、つまり笑い判定要求を受信すれば、ステップＳ１３１で、音声および映像を取得する。つまり、現時点において、マイク２２から入力された音声信号（音声データ）のレベル（ｄＢ）を検出する。また、現時点から一定時間（数十フレーム〜数百フレーム程度）における、カメラ２４の撮影画像から画像の動きを検出する。
【００９７】
次のステップＳ１３３では、笑いを判定する。たとえば、予め音声信号のレベルについての閾値（第１閾値）および画像の動きについての閾値（第２閾値）を決定しておき、音声信号のレベルが第１閾値を超える、または、画像の動きが第２閾値を超えると、笑いを「大うけ」と判定する。また、音声信号のレベルが第１閾値以下であり、かつ画像の動きが第２閾値以下であると、笑いを「小うけ」と判定する。
【００９８】
なお、この実施例では、音声および映像の両方に基づいて笑い（ざわめき）を判定するようにしてあるが、いずれか一方に基づいて笑いを判定するようにしてもよい。
【００９９】
続いて、ステップＳ１３５では、ロボットＡに信号Ｌを送信する。ただし、ここでは、笑いが「大うけ」であれば、信号Ｌ１を送信し、笑いが「小うけ」であれば、信号Ｌ２を送信する。また、この実施例では、ロボットＡが笑い判定要求を送信したため、信号ＬをロボットＡに送信するよにしてある。つまり、笑い判定要求を送信してきたロボットに信号Ｌを送信するのである。
【０１００】
そして、ステップＳ１３７では、漫才の終了かどうかを判断する。具体的には、ロボットＡおよびロボットＢの両方から、漫才の処理終了を示す信号を受信したかどうかを判断する。詳細な説明等は省略したが、ロボット１２は、スクリプトファイルの実行を終了すると、つまりexit文を読み込むと、シナリオ終了すなわち漫才の処理終了を示す信号をコンピュータ２０に送信するのである。
【０１０１】
ステップＳ１３７で“ＮＯ”であれば、つまり漫才の終了でなければ、ステップＳ１２１に戻る。一方、ステップＳ１３７で“ＹＥＳ”であれば、漫才の終了であれば、そのまま全体処理を終了する。
【０１０２】
このように、ユーザが指定してスクリプトファイル（シナリオ）に従って２台のロボット１２が漫才を実行する。ここで、たとえば、音声データ８１４ａの内容を変化させたり、２行目のスクリプトで再生する音声データを他の音声データに変化させたりすることにより、ロボットＡが「暑は夏いねぇ〜」を発話していたのを、「８月で３２度やったら、１２月には４０度超えるでぇ〜」（説明の便宜上、「音声データ(A04.wab)８１４ｄ」ということがある。）と発話するように変更したと仮定する。かかる場合には、ロボットＡの発話内容が長くなる。しかし、スクリプトファイル８１２ｂの２行目のスクリプト（signalwait）では、指定された信号Ａの受信を待機するようにしてあるため、上述したような音声データの変更は、スクリプトファイル８１２ａの２行目のスクリプト（speakwait）で、指定された音声データの内容を変更するか、指定する音声データを変更するだけでよい。つまり、他のロボット１２（ここでは、ロボットＢ）が実行するコミュニケーション行動の実行タイミング等を考慮する必要がない。つまり、ロボットＡで実行するスクリプトファイル８１２ａのみを変更（編集）すればよいのである。このため、他のロボット（ここでは、ロボットＢ）のコミュニケーション行動の実行タイミングを変更するなどの手間を省くことができる。
【０１０３】
また、音声データ８１４ａを発話した後に、音声データ８１４ｄをさらに発話させるように、スクリプトファイル８１２ａを変更（スクリプトの追加）することもできる。かかる場合には、図９（Ａ）に示した２行目のスクリプトを「speakwait”A01.wav”」に変更し、つまり信号Ａの送信を削除し、２行目と３行目のスクリプトの間に、「speakwait”A04.wav”:A」のスクリプトを追加すればよい。このようにすれば、ロボットＡは、「暑は夏いねぇ〜」、「８月で３２度ったら、１２月には４０度超えるでぇ〜」と発話した後に、信号ＡをロボットＢに送信することができる。このように、スクリプトを追加することもできる。
【０１０４】
さらに、音声データ８１４ａおよび音声データ８１４ｄを発話していたのを、音声データ８１４ａのみを発話するように、スクリプトファイル８１２ａを変更（スクリプトの削除）をする場合には、上述した「speakwait”A04.wav”:A」のスクリプトを削除し、「speakwait”A01.wav”」のスクリプトを図９（Ａ）に示したように、「speakwait”A01.wav”:A」に変更すればよい。このように、スクリプトを削除することもできる。
【０１０５】
なお、これらのことは、ロボット１２に身体動作を実行させたり、ロボット１２を移動させたりするようなスクリプトを変更したり、追加したり、削除したりする場合も同様である。
【０１０６】
この実施例によれば、他のロボットから実行タイミングを受信したことに応じてコミュニケーション行動を実行するので、連鎖的に発話したり、身体動作したりすることができる。また、実行タイミングを受信するようにしてあるため、１のロボットのスクリプトファイルを編集しても、他方のロボットのスクリプトファイルを編集する必要がない。つまり、開発および編集の手間が少なく、それらに掛るコストを低減することができる。
【０１０７】
なお、この実施例では、システムにマイクおよびカメラの両方を設けるようにしたが、いずれか一方からの入力に基づいて笑いを判定するようにしてもよい。つまり、いずれか１つを省略することもできる。
【０１０８】
また、この実施例では、システムにマイクおよびカメラを設けるようにしたが、マイクおよびカメラを省略することもできる。たとえば、ロボットに設けられたマイク１６およびカメラ（全方位カメラ５２，眼カメラ５４）を用いることができる。かかる場合には、音声信号のレベルやフレーム間の動きに基づいて、ロボットで笑い判定することができる。
【０１０９】
さらに、この実施例では、２台のロボットがインタラクションする場合について説明したが、３台以上のロボットがインタラクションするようにすることもできる。かかる場合には、実行タイミングの信号をブローキャストするようにし、ブロードキャストされた実行タイミングの信号を各ロボットが受信し、当該信号の受信を待機しているロボットが、当該信号の受信に応じてスクリプトに従うコミュニケーション行動を実行するようにすればよい。
【図面の簡単な説明】
【０１１０】
【図１】図１はこの発明のコミュニケーションロボットシステムの一例を示す図解図である。
【図２】図２は図１実施例に示すロボットの外観を説明するための図解図である。
【図３】図３は図１および図２に示すロボットの電気的な構成を示す図解図である。
【図４】図４は図１実施例におけるロボットで実行されるスクリプトファイルの作成に用いられるスクリプトの一覧を示す図解図である。
【図５】図５は図３に示すロボットのＣＰＵが実行するスクリプトの読込み処理の一部を示すフロー図である。
【図６】図６は図３に示すロボットのＣＰＵが実行するスクリプトの読込み処理の他の一部であり、図５に後続するフロー図である。
【図７】図７は図３に示すロボットのＣＰＵの実行するスクリプトの読込み処理のその他の一部であり、図５および図６に後続するフロー図である。
【図８】図８は図１に示すコミュニケーションロボットシステムの設置例を示す図解図である。
【図９】図９は図１に示すロボットによって実行されるスクリプトファイルの具体例を示す図解図である。
【図１０】図１０は図３に示すメモリ８０のメモリマップの一例を示す図解図である。
【図１１】図１１は図１に示す一方のロボットの漫才の処理の一部を示すフロー図である。
【図１２】図１２は図１に示す一方のロボットの漫才の処理の他の一部であり、図１１に後続するフロー図である。
【図１３】図１３は図１に示す他方のロボットの漫才の処理を示すフロー図である。
【図１４】図１４は図１に示すコンピュータの全体処理を示すフロー図である。
【符号の説明】
【０１１１】
１０  …コミュニケーションロボットシステム
１２  …コミュニケーションロボット
２０  …コンピュータ
２２  …マイク
２４  …カメラ
２６  …入力装置
３８  …衝突センサ
４２  …超音波距離センサ
５２  …全方位カメラ
５４  …眼カメラ
６４  …タッチセンサ
７６  …ＣＰＵ
８０  …メモリ
８２  …モータ制御ボード
８４  …センサ入力／出力ボード
８６  …音声入力／出力ボード
８８−９６  …モータ
９８  …通信ＬＡＮボード
１００  …無線通信装置
【図１】
2006263858.tif 000003
【図２】
2006263858.tif 000004
【図３】
2006263858.tif 000005
【図４】
2006263858.tif 000006
【図５】
2006263858.tif 000007
【図６】
2006263858.tif 000008
【図７】
2006263858.tif 000009
【図８】
2006263858.tif 000010
【図９】
2006263858.tif 000011
【図１０】
2006263858.tif 000012
【図１１】
2006263858.tif 000013
【図１２】
2006263858.tif 000014
【図１３】
2006263858.tif 000015
【図１４】
2006263858.tif 000016