図1を参照して、この実施例の動作生成システム10は、コミュニケーションロボット(以下、単に「ロボット」ともいう。)12に、人間14の動作(行動)に応じて、協力的な動作を実行させるためのものであり、協力的な動作として特に人間14の身体動作を模倣する(すなわち類似あるいは同一の)動作や、人間14の動作に同調する動作などを実行させるためのものである。この動作生成システム10は、少なくとも腕を含む身体部位を有して身体表現の可能なロボット12、ロボット12に実行させる行動を制御するロボット制御装置16、および身体動作を検出するモーションキャプチャシステム18を含む。
ロボット制御装置16は、パーソナルコンピュータまたはワークステーション等のコンピュータからなり、CPU、RAM、ROMおよびHDD等を備える。ロボット12の行動を制御するためのプログラムおよびデータは主記憶装置としてのHDD等に格納されていて、CPUはこのプログラムに従って処理を実行する。ロボット制御装置16の内部または外部には、行動モジュールデータベース(DB)20、および発話計測データDB22が設けられる。行動モジュールDB20には、後述するように、ロボット12の各行動を実現するためのモジュール化された各プログラム(行動モジュールと呼ばれる。)が記憶される。発話計測データDB22には、マイク24によって取得される人間14の発話に関するデータが記憶される。マイク24は、この実施例ではロボット12に設けられている。ロボット12は、所定周期でマイク24から人間14の発話の音量を計測して、その取得した発話計測データをロボット制御装置16に送信する。ロボット制御装置16は、ロボット12から発話計測データを受信して、発話計測データDB22に格納する。発話計測データは計測時刻(フレーム)に関連付けて格納されている。
なお、ロボット制御装置16とモーションキャプチャシステム18とは、たとえばHUB(図示せず)を介して有線または無線LANで互いに接続される。また、ロボット12は、たとえばHUBに接続されたアクセスポイント(図示せず)を介して無線LANでロボット制御装置16と接続される。
ロボット制御装置16のCPUは、検出した人間14の動作(身体動作および発話)に基づいて、適切な行動モジュールを選択して実行する。人間14の動作に関するデータのうち身体動作に関するデータは、モーションキャプチャシステム18から取得される。行動モジュールの実行の結果、ロボット制御装置16のCPUは、その行動を実現するための指令データをロボット12に送信する。
モーションキャプチャシステム(3次元動作計測装置)18としては、公知のモーションキャプチャシステムが適用される。たとえばVICON社(http://www.vicon.com/)の光学式のモーションキャプチャシステムが適用されてよい。モーションキャプチャシステム18は、パーソナルコンピュータまたはワークステーションなどのコンピュータを含み、その内部または外部には、人間14およびロボット12の身体動作に関する数値データを記憶する3次元動作計測データDB26が設けられる。このモーションキャプチャシステム18においては、図2に示すように、複数(少なくとも3つ)の赤外線照射機能を有するカメラ28が、玄関、廊下、部屋等のような適宜の空間において、ロボット12および人間14に対して互いに異なる方向に配置され、ロボット12と人間14との相互作用における身体動作を検出する。ロボット12と人間14には、複数の赤外線反射マーカ30が取り付けられる。人間14には、たとえば頭頂,眼の上,首,肩,肘,手先(手首)等のような人間14の動作を特徴付ける特徴点すなわち人間14の動作を特定可能な部分に、各マーカ30が取り付けられる。人間14は、たとえば、マーカ30の取り付けられた帽子や服を着用してよい。また、ロボット12にも、同様にして、その動作を特定可能な特徴点(頭頂,眼の上,首,肩,肘,手先等)に各マーカ30が取り付けられる。モーションキャプチャシステム18のコンピュータは、カメラ28から画像データをたとえば60Hz(1秒間に60フレーム)で取得し、画像データの画像処理によって、その計測時のすべての画像データにおける各マーカ30の2次元位置を抽出する。そして、コンピュータは、2次元位置に基づいて、実空間における各マーカ30の3次元位置座標データを算出し、その算出した3次元位置座標データを3次元動作計測データとして3次元動作計測データDB26に格納する。3次元動作計測データは計測時刻(フレーム)に関連付けて格納されている。
ロボット12は、人間のような身体を有し、その身体を用いて、コミュニケーションのために必要な複雑な身体動作を生成する。具体的には、図3を参照して、ロボット12は台車32を含み、この台車32の下面には、このロボット12を自律移動させる車輪34が設けられる。この車輪34は、車輪モータ(ロボット12の内部構成を示す図4において参照番号「36」で示す。)によって駆動され、台車32すなわちロボット12を前後左右任意の方向に動かすことができる。なお、図3では示さないが、この台車32の前面には、衝突センサ(図4において参照番号「38」で示す。)が取り付けられ、この衝突センサ38は、台車32への人や他の障害物の接触を検知する。そして、ロボット12の移動中に障害物との接触を検知すると、直ちに車輪34の駆動を停止してロボット12の移動を急停止させる。
なお、ロボット12の背の高さは、この実施例では、人、特に子供に威圧感をあたえることがないように、100cm程度とされている。ただし、この背の高さは任意に変更可能である。
台車32の上には、多角形柱のセンサ取付パネル40が設けられ、このセンサ取付パネル40の各面には、超音波距離センサ42が取り付けられる。この超音波距離センサ42は、取付パネル40すなわちロボット12の周囲の主として人との間の距離を計測するものである。
台車32の上には、さらに、ロボット12の胴体が、その下部が上述の取付パネル40に囲まれて、直立するように取り付けられる。この胴体は下部胴体44と上部胴体46とから構成され、これら下部胴体44および上部胴体46は、連結部48によって連結される。連結部48には、図示しないが、昇降機構が内蔵されていて、この昇降機構を用いることによって、上部胴体46の高さすなわちロボット12の高さを変化させることができる。昇降機構は、後述のように、腰モータ(図4において参照番号「50」で示す。)によって駆動される。上で述べたロボット12の身長100cmは、上部胴体46をそれの最下位置にしたときの値である。したがって、ロボット12の身長は100cm以上にすることができる。
上部胴体46のほぼ中央には、1つの全方位カメラ52と、1つのマイク24とが設けられる。全方位カメラ52は、ロボット12の周囲を撮影するもので、後述の眼カメラ54と区別される。マイク24は、上述のように、周囲の音、とりわけ人の声を取り込む。
上部胴体46の両肩には、それぞれ、肩関節56Rおよび56Lによって、上腕58Rおよび58Lが取り付けられる。肩関節56Rおよび56Lは、それぞれ3軸の自由度を有する。すなわち、右肩関節56Rは、X軸,Y軸およびZ軸の各軸廻りにおいて上腕58Rの角度を制御できる。Y軸は、上腕58Rの長手方向(または軸)に平行な軸であり、X軸およびZ軸は、そのY軸に、それぞれ異なる方向から直交する軸である。左肩関節56Lは、A軸,B軸およびC軸の各軸廻りにおいて上腕58Lの角度を制御できる。B軸は、上腕58Lの長手方向(または軸)に平行な軸であり、A軸およびC軸は、そのB軸に、それぞれ異なる方向から直交する軸である。
上腕58Rおよび58Lのそれぞれの先端には、肘関節60Rおよび60Lを介して、前腕62Rおよび62Lが取り付けられる。肘関節60Rおよび60Lは、それぞれ、W軸およびD軸の軸廻りにおいて、前腕62Rおよび62Lの角度を制御できる。
なお、上腕58Rおよび58Lならびに前腕62Rおよび62L(いずれも図3)の変位を制御するX,Y,Z,W軸およびA,B,C,D軸では、「0度」がホームポジションであり、このホームポジションでは、上腕58Rおよび58Lならびに前腕62Rおよび62Lは下方向に向けられる。
また、図3では示さないが、上部胴体46の肩関節56Rおよび56Lを含む肩の部分や上述の上腕58Rおよび58Lならびに前腕62Rおよび62Lを含む腕の部分には、それぞれ、タッチセンサ(図4において参照番号64で包括的に示す。)が設けられていて、これらのタッチセンサ64は、人がロボット12のこれらの部位に接触したかどうかを検知する。
前腕62Rおよび62Lのそれぞれの先端には、手に相当する球体66Rおよび66Lがそれぞれ固定的に取り付けられる。なお、この球体66Rおよび66Lに代えて、この実施例のロボット12と異なり指の機能が必要な場合には、人の手の形をした「手」を用いることも可能である。
上部胴体46の中央上方には、首関節68を介して、頭部70が取り付けられる。この首関節68は、3軸の自由度を有し、S軸,T軸およびU軸の各軸廻りに角度制御可能である。S軸は首から真上に向かう軸であり、T軸およびU軸は、それぞれ、このS軸に対して異なる方向で直交する軸である。頭部70には、人の口に相当する位置に、スピーカ72が設けられる。スピーカ72は、ロボット12が、それの周囲の人に対して音声または声によってコミュニケーションを図るために用いられる。ただし、スピーカ72は、ロボット12の他の部位たとえば胴体に設けられてもよい。
また、頭部70には、目に相当する位置に眼球部74Rおよび74Lが設けられる。眼球部74Rおよび74Lは、それぞれ眼カメラ54Rおよび54Lを含む。なお、右の眼球部74Rおよび左の眼球部74Lをまとめて眼球部74といい、右の眼カメラ54Rおよび左の眼カメラ54Lをまとめて眼カメラ54ということもある。眼カメラ54は、ロボット12に接近した人の顔や他の部分ないし物体等を撮影してその映像信号を取り込む。
なお、上述の全方位カメラ52および眼カメラ54のいずれも、たとえばCCDやCMOSのように固体撮像素子を用いるカメラであってよい。
たとえば、眼カメラ54は眼球部74内に固定され、眼球部74は眼球支持部(図示せず)を介して頭部70内の所定位置に取り付けられる。眼球支持部は、2軸の自由度を有し、α軸およびβ軸の各軸廻りに角度制御可能である。α軸およびβ軸は頭部70に対して設定される軸であり、α軸は頭部70の上へ向かう方向の軸であり、β軸はα軸に直交しかつ頭部70の正面側(顔)が向く方向に直交する方向の軸である。この実施例では、頭部70がホームポジションにあるとき、α軸はS軸に平行し、β軸はU軸に平行するように設定されている。このような頭部70において、眼球支持部がα軸およびβ軸の各軸廻りに回転されることによって、眼球部74ないし眼カメラ54の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。
なお、眼カメラ54の変位を制御するα軸およびβ軸では、「0度」がホームポジションであり、このホームポジションでは、図3に示すように、眼カメラ54のカメラ軸は頭部70の正面側(顔)が向く方向に向けられ、視線は正視状態となる。
図4には、ロボット12の内部構成を示すブロック図が示される。図4に示すように、このロボット12は、全体の制御のためにマイクロコンピュータまたはCPU76を含み、このCPU76には、バス78を通して、メモリ80,モータ制御ボード82,センサ入力/出力ボード84および音声入力/出力ボード86が接続される。
メモリ80は、図示しないが、ROMやHDD、RAM等を含み、ROMまたはHDDにはこのロボット12の制御プログラムおよびデータ等が予め格納されている。CPU76は、このプログラムに従って処理を実行する。また、RAMは、一時記憶メモリとして用いられるとともに、ワーキングメモリとして利用され得る。
モータ制御ボード82は、たとえばDSP(Digital Signal Processor)で構成され、右腕、左腕、頭および眼等の身体部位を駆動するためのモータを制御する。すなわち、モータ制御ボード82は、CPU76からの制御データを受け、右肩関節56RのX,YおよびZ軸のそれぞれの角度を制御する3つのモータと右肘関節60Rの軸Wの角度を制御する1つのモータを含む計4つのモータ(図4ではまとめて、「右腕モータ」として示す。)88の回転角度を調節する。また、モータ制御ボード82は、左肩関節56LのA,BおよびC軸のそれぞれの角度を制御する3つのモータと左肘関節60LのD軸の角度を制御する1つのモータとを含む計4つのモータ(図4ではまとめて、「左腕モータ」として示す。)90の回転角度を調節する。モータ制御ボード82は、また、首関節68のS,TおよびU軸のそれぞれの角度を制御する3つのモータ(図4ではまとめて、「頭部モータ」として示す。)92の回転角度を調節する。モータ制御ボード82は、また、腰モータ50、および車輪34を駆動する2つのモータ(図4ではまとめて、「車輪モータ」として示す。)36を制御する。さらに、モータ制御ボード82は、右眼球部74Rのα軸およびβ軸のそれぞれの角度を制御する2つのモータ(図4ではまとめて、「右眼球モータ」として示す。)94の回転角度を調節し、また、左眼球部74Lのα軸およびβ軸のそれぞれの角度を制御する2つのモータ(図4ではまとめて、「左眼球モータ」として示す。)96の回転角度を調節する。
なお、この実施例の上述のモータは、車輪モータ36を除いて、制御を簡単化するためにそれぞれステッピングモータまたはパルスモータであるが、車輪モータ36と同様に、直流モータであってよい。
センサ入力/出力ボード84も、同様に、DSPで構成され、各センサやカメラからの信号を取り込んでCPU76に与える。すなわち、超音波距離センサ42の各々からの反射時間に関するデータがこのセンサ入力/出力ボード84を通して、CPU76に入力される。また、全方位カメラ52からの映像信号が、必要に応じてこのセンサ入力/出力ボード84で所定の処理が施された後、CPU76に入力される。眼カメラ54からの映像信号も、同様にして、CPU76に与えられる。また、タッチセンサ64からの信号がセンサ入力/出力ボード84を介してCPU76に与えられる。
スピーカ72には音声入力/出力ボード86を介して、CPU76から、合成音声データが与えられ、それに応じて、スピーカ72からはそのデータに従った音声または声が出力される。また、マイク24からの音声入力が、音声入力/出力ボード86を介してCPU76に取り込まれる。
通信LANボード98も、同様に、DSPで構成され、CPU76から与えられた送信データを無線通信装置100に与え、無線通信装置100から送信データを送信させる。また、通信LANボード98は無線通信装置100を介してデータを受信し、受信データをCPU76に与える。
この実施例では、たとえば人間14が指差しをしたり、方向を指示する身振り(ジェスチャ)をしたりするような順路案内状況において、人間14に対して協力的な動作(模倣動作や同調動作など)をロボット12に行わせる場合が想定される。なお、模倣動作を含む協力的な動作を行う状況はこの順路案内状況に限定されるものではなく適宜変更され得る。
順路案内状況は、たとえば、ロボット12が人間14に対して「会議室へはどう行けばいいの?」と順路を尋ねる言葉を話し掛けたりすることによって引き起こされる。このような状況において、ロボット12が、人間14の動作に応じて、その動作に協力的な動作を実行する。つまり、たとえば、人間どうしのコミュニケーションでは、順路案内状況で人間が指差しをして方向を示すような特定動作を行った場合に、相手が同じように指差しをするという模倣動作がよく行われる。また、人間が指差しをして方向を示した場合にその方向に顔を向けたり、人間が発話も交えて順路案内を説明した場合には、相槌を打ったりうなずいたりする。このように、人間の動作に同調する動作もよく行われる。人間はこのような相手の動作に協力的な動作を無意識的に行って、円滑で自然なコミュニケーションを実現している。
そこで、この実施例では、模倣動作の一例として、人間14が順路案内状況で特定動作を行ったとき、すなわち、順路を案内するために指差しをして方向を示したとき、ロボット12は、人間14の指した方向と同じ方向に指差し(方向を指し示すジェスチャ)をする。また、人間14が指差しではなく手を動かしているとき、ロボット12は人間14と同じ動きをする。これらの場合において、模倣動作に使用するロボット12の腕は、人間14との衝突の危険性を考慮して選択され、したがって、模倣動作としては、同一の動作ばかりでなく類似する動作も行われる。このように、ロボット12が、人間14の動作の模倣動作、すなわち、人間14の行動に類似するあるいは同一の行動を示すことによって、人間14との間で自然で円滑なコミュニケーションを実現することができる。
また、同調する動作の一例としては、人間14が順路を案内するために指差しをして方向を示したとき、ロボット12は人間14の指した方向を見る(顔を向ける)。また、ロボット12は、指差しがなされていないときなどには、人間14にアイコンタクトをする。また、人間14の発話の状態に応じて、相槌を打ったり、うなづいたりする。
具体的には、人間14およびロボット12の身体動作は、モーションキャプチャシステム18によって計測され、各マーカ取付点の3次元位置座標データとして3次元動作計測データDB26に記憶される。また、人間14の発話は、ロボット12に設けられたマイク24によって取得され、発話計測データとしてロボット制御装置16の発話計測データDB22に記憶される。ロボット制御装置16は、3次元動作計測データDB26に記憶された身体動作データ(3次元動作計測データ)、および発話計測データDB22に記憶された発話に関するデータ(発話計測データ)に基づいて、人間14の状態をほぼリアルタイムに検出し、行動モジュールDB20に格納された複数の行動モジュールの中からロボット12に実行させるべき行動モジュールを選択する。
図5には、行動モジュールDB20に記憶される複数の行動モジュールの内容の一例が示される。行動モジュールは、身体動作および発話を用いた行動をロボット12に実行させるためのプログラムであり、たとえばお辞儀、「こんにちは」と言う、抱っこするといった行動ごとに予め準備されている。この図5では、この実施例の順路案内状況において使用される協力的動作(模倣動作および同調動作)のための行動モジュールを含む複数の行動モジュールの一例が示されている。行動モジュールDB20では、右腕、左腕および頭の動作ならびに発話のための各行動モジュールが、各識別子に関連付けて記憶されている。
右腕の動作に関しては、人間の右手と同じ動きをする行動モジュール(Rsr:識別子)、人間の左手と同じ動きをする行動モジュール(Rsl)、右手で指された方向を指差しする行動モジュール(Rpr)、左手で指された方向を指差しする行動モジュール(Rpl)、および何もしない行動モジュール(Rno)が記憶される。左腕の動作に関しては、人間の左手と同じ動きをする行動モジュール(Lsl)、人間の右手と同じ動きをする行動モジュール(Lsr)、右手で指された方向を指差しする行動モジュール(Lpr)、左手で指された方向を指差しする行動モジュール(Lpl)、および何もしない行動モジュール(Lno)が記憶される。頭の動作に関しては、アイコンタクトをする行動モジュール(Hec)、右手で指された方向を見る行動モジュール(Hrp)、左手で指された方向を見る行動モジュール(Hlp)、および、うなずく行動モジュール(Hnd)が記憶される。また、発話に関しては、「え?」と言う行動モジュール(Seh)、「うん」と言う行動モジュール(Sun)、「うんうん」と言う行動モジュール(Suu)、および「それで」と言う行動モジュール(Ssd)が記憶される。
上記両腕および頭に関連した各行動モジュールでは、モーションキャプチャシステム18によって取得された3次元動作計測データに基づいて、両腕および頭の各関節の各軸モータ(右腕モータ88、左腕モータ90および頭部モータ92)の目標角度(角度制御データ)がそれぞれ算出される。たとえば、人間14の手と同じ動きをする行動モジュール(Rsr、Rsl、Lsl、Lsr)では、まず、3次元動作計測データに基づいて人間14の右手および左手の肩および肘の角度をそれぞれ計算する。そして、人間14がするのと同じ運動をロボット12が示すように、ロボット12の右腕の肩関節56Rおよび肘関節60R、ならびに左腕の肩関節56Lおよび肘関節60Lの各モータ(右腕モータ88および左腕モータ90)の目標角度を、人間14の右手および左手の角度に基づいてそれぞれ算出する。また、人間14が指した方向を指差しする行動モジュール(Rpr、Rpl、Lpr、Lpl)では、同様に、人間14の右手および左手の肩および肘の角度をそれぞれ計算する。そして、人間14が指した方向をロボット12が指差しするように、ロボット12の右腕モータ88または左腕モータ90の目標角度を、人間14の右手および左手の角度に基づいてそれぞれ算出する。また、何もしない行動モジュール(Rno、Lno)では、ロボット12の右腕モータ88および左腕モータ90の目標角度を、それぞれホームポジションを示す角度に変更するか、あるいは、現在と同じ角度に保持する。また、アイコンタクトをする行動モジュール(Hec)では、人間14の頭の方向ベクトルおよびロボット12の頭部70の方向ベクトルを算出して、これら2つのベクトルが反対方向を示すように、ロボット12の頭部70の望ましい角度すなわち頭部モータ92の目標角度を算出する。また、人間14が指差した方向を見る行動モジュール(Hrp、Hlp)では、まず、人間14の右手または左手の肩および肘の角度をそれぞれ算出する。そして、人間14が指した方向をロボット12が見るように、ロボット12の頭部モータ92の目標角度を算出する。なお、発話に関する行動モジュールでは、該当する発話内容を示す合成音声データ(発話内容データ)をHDD等から読み出す。
このような行動モジュールの中から、ロボット制御装置16は、人間14の動作の状態に従って、適切な行動モジュールを選択する。選択の際には、人間14の動作の状態として、現在の動作の状態と過去の動作の状態とが検出される。
現在の動作の状態としては、3次元動作計測データDB26から取得された3次元動作計測データおよび発話計測データDB22から取得された発話計測データに基づいて、この実施例では、次の6つの状態が判別される。
すなわち、(1)人間14は右(または左)手で指差しをしているかが判別される。その結果、右手である場合には、指差しに関する状態を示す変数Pointに右手を示すデータが設定され、左手である場合には変数Pointに左手を示すデータが設定され、または、人間14が指差しをしていない場合には変数Pointに指差し無しを示すデータが設定される。人間14の行動が指差しであることの条件は、たとえば、人間14の肩および肘の角度の値が所定の角度の範囲内にあることである。なお、変数Pointの初期値は無しを示すデータが設定される。(2)人間14はロボット12のどちら側(右または左)の方へ指差しをしているかが判別される。その結果、右である場合には、方向に関する状態を示す変数Directionに右を示すデータが設定され、左である場合には変数Directionに左を示すデータが設定される。なお、変数Directionの初期値は方向無しを示すデータが設定される。(3)右(または左)手は動いているかが判別される。詳しくは、右(または左)手の動きの速度が閾値以上かが判別される。その結果、両手である場合には、動きに関する状態を示す変数Moveに両手を示すデータが設定され、右手である場合には変数Moveに右手を示すデータが設定され、左手である場合には変数Moveに左手を示すデータが設定され、両手とも動いていない場合には変数Moveに動き無しを示すデータが設定される。なお、変数Moveの初期値は無しを示すデータが設定される。(4)人間14は順路案内(指差しまたは方向を示すジェスチャ等)のために右(または左)手を使用しているかが判別される。その結果、右手である場合には、使用に関する状態を示す変数Activeに右手を示すデータが設定され、左手である場合には変数Activeに左手を示すデータが設定され、使用されていない場合には変数Activeに使用無しを示すデータが設定される。詳しくは、この使用または活動の状態は、現在の状態および過去の状態に基づいて判定される。つまり、前回のActiveに設定された手、過去の一定時間における右および左手の動き、および現在のフレームにおける手の肩からの距離の3つの観点に基づいて、判定される。前回のActiveが無しに設定されている場合には、過去一定時間の動きの多い方の手がActiveに設定される。前回のActiveがどちらかの手である場合には、Activeに設定されていない方の手に関してその肩からの距離および過去一定時間の動きの両者が、Activeに設定されている方の手に関してその肩からの距離および過去一定時間の動きの両者よりも大きくなったときにのみ、Activeに設定される手が切り替えられる。なお、変数Activeの初期値は無しを示すデータが設定される。(5)人間14はロボット12の右(または左)腕の当たるかもしれない場所にいるかが判別される。その結果、右手である場合には、衝突に関する状態を示す変数Hitに右手を示すデータが設定され、左手である場合には変数Hitに左手を示すデータが設定され、人間14が当たらない場所にいる場合には変数Hitに衝突無しを示すデータが設定される。なお、変数Hitの初期値は無しを示すデータが設定される。(6)人間14は発話しているかが判別される。詳しくは、発話に掛かった時間が計測されて、発話に関する変数Speechにその計測された発話時間が設定される。また、発話無しで経過している時間が計測されて変数Nospeechに設定される。なお、変数Speechおよび変数Nospeechの初期値はそれぞれゼロが設定される。
また、過去の動作の状態としては、行動モジュールの過去の選出に基づいて、この実施例では、次の4つの状態が判別される。すなわち、(1)腕の動作の選択について、指差しに応ずる行動モジュールRpr、Rpl、LprまたはLplは、過去一定時間続いているかが判別される。(2)頭の動作の選択について、頭に関連した行動モジュールは過去所定時間続いているかが判別される。(3)頭の動作の選択について、指差しに応ずる行動モジュールHrpまたはHlpは過去一定時間続いているかが判別される。(4)発話の選択について、最後に選択された発話に関する行動モジュールは何であったかが判別される。
ロボット制御装置16は、検出された人間14の動作の状態に基づいて、行動選択規則に従って、実行すべき行動モジュールを選択する。行動選択規則は、この実施例では、腕動作、頭動作および発話に関する各選択処理プログラムとしてHDD等に予め記憶されており、各選択処理プログラムに従って腕動作、頭動作および発話の各選択処理が実行される。この行動選択規則は、発明者等の実験によって得た知識に基づいて作成されている。そして、ロボット制御装置16は、選択した行動モジュールを実行することによって、必要に応じて上述のような各モータの目標角度の算出等を行って、当該行動の実行を指示する指令データをロボット12に送信する。送信される指令データには、この実施例では、身体動作に関する行動モジュールの場合には、当該行動を実現するための各モータの角度制御データ(目標角度データ)が含まれ、また、発話に関する行動モジュールの場合には発話の内容を示す発話内容データ(合成音声データ)が含まれる。
ロボット12は、行動モジュール実行時には、ロボット制御装置16からの指令データを受信して、その指令データに基づいて当該行動を実行する。身体動作に関する指令データの場合には角度制御データに従って各モータが制御され、また、発話に関する指令データの場合には音声合成データに従って音声が出力される。このようにして、人間14の行動を模倣する行動あるいは同調する行動がロボット12によって実現される。
図6には、ロボット制御装置16の順路案内状況における動作の一例が示される。図6の最初のステップS1で、ロボット制御装置16のCPUは、状態検出処理を実行する。この処理の動作は図7から図9に詳細に示される。
図7の最初のステップS21で、モーションキャプチャシステム18のコンピュータを介して3次元動作計測データDB26から、人間14の身体動作の状態を検出するために必要な3次元動作計測データを取得する。次に、ステップS23で、人間14が右手で指差しをしているか否かを判断する。たとえば、3次元動作計測データに基づいて人間14の右肩および右肘の角度を算出して、それら角度が指差し状態を示す所定の角度範囲内にあるかどうかが判定される。
ステップS23で“YES”であれば、ステップS25で、指差しの状態を示す変数Pointに右手を示すデータを設定する。続いて、ステップS27で、人間14の右手がロボット12の右側を指しているか否かを判断する。たとえば、人間14の右の前腕の指す方向が、ロボット12の中心から見てロボット12の右腕の存在する側であるか、または左腕の存在する側であるかが判定される。ステップS27で“YES”であれば、方向の状態を示す変数Directionに右を示すデータを設定する。一方、ステップS27で“NO”であれば、つまり、人間14がロボット12の左側を指している場合には、ステップS31で、変数Directionに左を示すデータを設定する。ステップS29またはステップS31を終了すると、処理はステップS45へ進む。
一方、ステップS23で“NO”であれば、ステップS33で、人間14が左手で指差しをしているか否かを判断する。たとえば、人間14の左肩および左肘の角度を算出して、それら角度が指差し状態を示す所定の角度範囲内にあるかどうかが判定される。
ステップS33で“YES”であれば、ステップS35で、変数Pointに左手を示すデータを設定する。続いて、ステップS37で、人間14の左手がロボット12の右側を指しているか否かを判断する。たとえば、人間の左の前腕の指す方向が、ロボット12の中心から見てロボット12の右腕の存在する側であるか、または左腕の存在する側であるかが判定される。ステップS37で“YES”であれば、変数Directionに右を示すデータを設定し、ステップS37で“NO”であれば、変数Directionに左を示すデータを設定する。ステップS39またはステップS41を終了すると、処理はステップS45へ進む。
また、ステップS33で“NO”であれば、つまり、人間14が右手でも左手でも指差しをしていない場合には、ステップS43で、変数Pointに指差し無しを示すデータを設定する。
ステップS45では、人間14の右手が動いているか否かを判定する。たとえば、3次元動作計測データに基づいて人間14の右手の動く速度を算出して、その算出した速度が所定の閾値以上であるか否かが判定される。ステップS45で“NO”であれば、ステップS47で、人間14の左手が動いているか否かを判定する。たとえば、人間の左手の動く速度を算出して、その速度が所定の閾値以上であるかが判定される。ステップS47で“NO”であれば、人間14の両手とも動いていないとみなして、ステップS49で動きの状態を示す変数Moveに動き無しを示すデータを設定する。一方、ステップS47で“YES”であれば、ステップS51で変数Moveに左手を示すデータを設定する。また、ステップS45で“YES”であれば、続くステップS53で、上述のステップS47と同様にして、人間14の左手が動いているか否かを判定する。ステップS53で“YES”であれば、人間14の両手とも動いているとみなして、ステップS55で変数Moveに両手を示すデータを設定する。一方、ステップS53で“NO”であれば、ステップS57で変数Moveに右手を示すデータを設定する。ステップS49、S51、S55またはS57を終了すると、処理は図8のステップS59へ進む。
図8のステップS59では、手の使用状態を示す変数Activeに無しを示すデータが設定されているか否かを判断する。ステップS59で“YES”であれば、つまり、前回の処理の時点では順路案内のためにどちらの手も使用されていないと判定されていた場合等には、ステップS61で、人間14の左手の過去一定時間(たとえば1秒)の動きが、右手の過去一定時間の動きよりも多いか否かを判定する。ステップS61で“YES”であれば、左手が順路案内のために使用されているとみなして、ステップS63で変数Activeに左手を示すデータを設定する。一方、ステップS61で“NO”であれば、ステップS65で、左手の過去一定時間の動きが、右手の過去一定時間の動き以下であるか否かを判定する。ステップS65で“YES”であれば、右手が順路案内ために使用されているとみなして、ステップS67で変数Activeに右手を示すデータを設定する。ステップS65で“NO”であれば、つまり、どちらの手も過去一定時間の間に動きがない場合には、ステップS69で変数Activeに無しを示すデータを設定する。ステップS63、S67またはS69を終了すると、処理は図9のステップS89へ進む。
一方、ステップS59で“NO”であれば、ステップS71で、上述のステップS61と同様にして、左手の動きが右手の動きよりも多いか否かを判断する。ステップS71で“YES”であれば、ステップS73で、現在のフレームの3次元動作計測データに基づいて、左手の肩からの距離が右手の肩からの距離よりも長いか否かを判断する。ここで、手の肩からの距離は、人間14の身体を真上から見た場合の手(手先ないし手首)と肩との距離である。ステップS73で“YES”であれば、つまり、過去一定時間における左手の動きが右手の動きよりも多く、かつ、左手が右手よりも肩から離れている場合には、左手が順路案内のために使用されているものとみなして、ステップS75で変数Activeに左手を示すデータを設定する。
一方、ステップS71で“NO”であれば、ステップS77で、上述のステップS65と同様にして、左手の動きが右手の動き以下であるか否かを判断する。ステップS77で“YES”であれば、ステップS79で、現在のフレームの3次元動作計測データに基づいて、左手の肩からの距離が右手の肩からの距離以下であるか否かを判断する。ステップS79で“YES”であれば、つまり、過去一定時間における右手の動きが左手の動き以上であり、かつ、右手が左手以上に肩から離れている場合には、右手が順路案内のために使用されているものとみなして、ステップS81で変数Activeに右手を示すデータを設定する。ステップS75またはS81を終了すると、処理は図9のステップS89へ進む。
一方、ステップS73で“NO”である場合、ステップS77で“NO”である場合、またはステップS79で“NO”である場合には、処理はステップS83へ進んで、前回と同じ手をActiveに設定する。つまり、ステップS83では、変数Activeに左手を示すデータが設定されているか否かを判断する。ステップS83で“YES”であれば、ステップS85で変数Activeに左手を示すデータを設定し、ステップS83で“NO”であれば、ステップS87で変数Activeに右手を示すデータを設定して、処理は図9のステップS89へ進む。
図9のステップS89では、人間14がロボット12の右手の当たるかもしれない場所にいるか否かを判断する。つまり、たとえば、3次元動作計測データに基づいて、ロボット12の右腕(球体66R、前腕62R、肘関節60R、上腕58Rおよび肩関節56R)の可動範囲に人間14が存在しているか否かが判定される。ステップS89で“YES”であれば、ステップS91で、衝突の状態を示す変数Hitに右手を示すデータを設定する。
一方、ステップS89で“NO”であれば、ステップS93で、人間14がロボット12の左手の当たるかもしれない場所にいるか否かを判断する。たとえば、ロボット12の左腕(球体66L、前腕62L、肘関節60L、上腕58Lおよび肩関節56L)の可動範囲に人間14が存在しているか否かが判定される。ステップS93で“YES”であれば、ステップS95で変数Hitに左手を示すデータを設定する。
また、ステップS93で“NO”であれば、ステップS97で、ロボット12の両手と人間14とが衝突するおそれがないので、変数Hitに無しを示すデータを設定する。
続いて、ステップS99で、発話計測データDB22から人間14の発話状態を検出するために必要な発話計測データを取得する。この発話計測データに基づいて、ステップS101で、人間14が話しているか否かを判断する。
ステップS101で“YES”であれば、ステップS103で発話時間Speechの計測処理を実行する。たとえば、発話開始の検出に応じて発話時間のカウントを開始し、発話終了を検出するまで発話時間のカウントを継続し、発話終了を検出したとき変数Speechに計測した発話時間を設定する。
一方、ステップS101で“NO”であれば、ステップS105で、発話なし時間Nospeechの計測処理を実行する。たとえば、発話終了の検出に応じて発話なし時間のカウントを開始し、発話開始を検出するまで発話なし時間のカウントを継続するとともに、変数Nospeechに発話なし時間を設定する。ステップS103またはS105を終了すると、この状態検出処理を終了する。
図6に戻って、ステップS1を終了すると、ステップS3で腕動作選択処理を実行する。この腕の行動モジュールを選択するための処理の動作は図10から図12に詳細に示される。
図10の最初のステップS131で、腕動作に関する前回の行動モジュールが指差しの何れか(Rpr、Rpl、LprまたはLpl)であったか否かを判断する。ステップS131で“YES”であれば、ステップS133で指差し動作Rpr、Rpl、LprまたはLplが一定時間以上続いているか否かを判断する。ステップS133で“NO”であれば、つまり、指差しの行動モジュールが一定時間以上続いていない場合には、その行動モジュールの実行を継続すべく、ステップS135で、前回と同じ行動モジュールを選択する。ステップS135を終了すると、この腕動作選択処理を終了する。
一方、ステップS133で“YES”であれば、つまり、指差しの行動モジュールが一定時間以上続いている場合には、ステップS1で検出された状態に応じた行動モジュールの再選択を行うべく、処理はステップS137へ進む。これによって、ロボット12が指差しを模倣する動作を長々と続けるようなことがなく、その模倣動作の実現される時間を適切なものにすることができ、自然な模倣動作を実現できる。また、ステップS131で“NO”であれば、同様に、ステップS137へ進む。
ステップS137では、指差しの状態を示す変数Pointに左手を示すデータが設定されているか否かを判断する。ステップS137で“YES”であれば、ステップS139で、使用の状態を示す変数Activeに左手を示すデータが設定されているか否かを判断する。ステップS139で“YES”であれば、衝突の状態を示す変数Hitに左手を示すデータが設定されているか否かを判断する。ステップS141で“YES”であれば、つまり、人間14が左手を使用して指差し動作を行っていて、かつ、ロボット12の左腕の当たり得る位置に存在している場合には、ステップS143で、左手で指された方向を右腕で指差すための行動モジュールRplを選択する。
このように、人間14の身体動作をそのまま真似をすると人間14にぶつかる恐れのある場合には、模倣動作として、使用する腕を変更した類似する動作を選択する。したがって、人間14の動作を模倣する動作を安全に行うことができ、円滑で自然なコミュニケーションを実現できる。
一方、ステップS141で“NO”であれば、ステップS145で変数Hitに右手を示すデータが設定されているか否かを判断する。ステップS145で“YES”であれば、つまり、人間14が左手を使用して指差し動作を行っていて、かつ、ロボット12の右腕の当たり得る位置に存在している場合には、ステップS147で、左手で指された方向を左腕で指差すための行動モジュールLplを選択する。この場合、安全が確保されているので、模倣動作として、同じ腕を使用する同一の動作を選択する。
また、ステップS145で“NO”であれば、つまり、変数Hitに無しを示すデータが設定されている場合には、ステップS149で、指差しの方向を示す変数Directionに右を示すデータが設定されているか否かを判断する。ステップS149で“YES”であれば、つまり、人間14がロボット12の腕の当たり得る位置に存在せず、かつ、左手でロボット12から見て右側を指している場合には、ステップS151で、左手で指された方向を右腕で指差すための行動モジュールRplを選択する。
一方、ステップS149で“NO”であれば、つまり、変数Directionに左を示すデータが設定されている場合、つまり、人間14がロボット12の腕の当たり得る位置に存在せず、かつ、左手でロボット12から見て左側を指している場合には、ステップS153で、左手で指された方向を左腕で指差すための行動モジュールLplを選択する。
このように、安全性が確保されている場合には、人間14の指している方向に対応する側の腕を使用した模倣動作を選択する。したがって、ロボット12は、指差しする方向と同じ側の腕を使用するので、人間14の動作を模倣する動作をより自然な形で行うことができ、自然で円滑なコミュニケーションを実現することができる。
ステップS143、S147、S151またはS153を終了すると、ステップS133等での判断に使用するために指差し動作時間のカウントを開始して、この腕動作選択処理を終了する。
また、ステップS139で“NO”であれば、つまり、左手で指差しをしている状態ではあるが、左手を使用していると認められない場合には、左手による指差しが終わっているとみなして、ステップS155で、右腕および左腕で何もしない動作をするための行動モジュールRnoおよびLnoを選択する。このように、人間14が動作に使用する手を検出するようにしたので、動作が変化するときに的確に対応することができる。つまり、動作が変更されても模倣動作をし続けるようなことがないので、自然で違和感のない模倣動作を実現できる。ステップS155を終了すると、この腕動作選択処理を終了する。
また、ステップS137で“NO”であれば、ステップS157で変数Pointに右手を示すデータが設定されているか否かを判断する。ステップS157で“YES”であれば、処理は図11のステップS159へ進む。
図11のステップS159では、変数Activeに右手を示すデータが設定されているか否かを判断する。ステップS159で“YES”であれば、ステップS161で変数Hitに右手を示すデータが設定されているか否かを判断する。ステップS161で“YES”であれば、つまり、人間14が右手を使用して指差し動作を行っていて、かつ、ロボット12の右腕の当たり得る位置に存在している場合には、ステップS163で、右手で指された方向を左腕で指差すための行動モジュールLprを選択する。このようにして、安全に模倣動作を行うことができる。
一方、ステップS161で“NO”であれば、ステップS165で変数Hitに左手を示すデータが設定されているか否かを判断する。ステップS165で“YES”であれば、つまり、人間14が右手を使用して指差し動作を行っていて、かつ、ロボット12の左腕の当たり得る位置に存在している場合には、ステップS167で、右手で指された方向を右腕で指差すための行動モジュールRprを選択する。
また、ステップS165で“NO”であれば、つまり、変数Hitに無しを示すデータが設定されている場合には、ステップS169で、変数Directionに右を示すデータが設定されているか否かを判断する。ステップS169で“YES”であれば、つまり、人間14がロボット12の腕の当たり得る位置に存在せず、かつ、右手でロボット12から見て右側を指している場合には、ステップS171で、右手で指された方向を右腕で指差すための行動モジュールRprを選択する。
一方、ステップS169で“NO”であれば、つまり、変数Directionに左を示すデータが設定されている場合、つまり、人間14がロボット12の腕の当たり得る位置に存在せず、かつ、右手でロボット12からみて左側を指している場合には、ステップS173で、右手で指された方向を左腕で指差すための行動モジュールLprを選択する。このようにして、自然に模倣動作を行うことができる。
ステップS163、S167、S171またはS173を終了すると、ステップS133等での判断に使用するために指差し動作時間のカウントを開始して、この腕動作選択処理を終了する。
また、ステップS159で“NO”であれば、つまり、右手で指差しをしている状態であるが、右手を使用していると認められない場合には、右手による指差しが終わっているとみなして、図10のステップS155で、行動モジュールRnoおよびLnoを選択する。
また、図10のステップS157で“NO”であれば、つまり、変数Pointに無しを示すデータが設定されている場合には、処理は図12のステップS175へ進む。
図12のステップS175では、変数Hitに無しを示すデータが設定されているか否かを判断する。ステップS175で“YES”であれば、ステップS177で動きの状態を示す変数Moveに両手を示すデータが設定されているか否かを判断する。ステップS177で“YES”であれば、つまり、人間14が指差しではなく両手を動かしていて、かつ、ロボット12の腕の当たり得る位置に存在していない場合には、ステップS179で、右腕で人間14の右手と同じ動きをする行動モジュールRsr、および左腕で人間14の左手と同じ動きをする行動モジュールLslを選択する。このように、この実施例では、人間14が指差しを行っていない場合でも、安全が確保されていれば、模倣動作を実行させる。
一方、ステップS177で“NO”であれば、ステップS181で変数Moveに右手を示すデータが設定されているか否かを判断する。ステップS181で“YES”であれば、つまり、人間14が指差しではなく右手を動かしていて、かつ、ロボット12の腕の当たり得る位置に存在していない場合には、ステップS183で、行動モジュールRsrを選択する。
また、ステップS181で“NO”であれば、ステップS185で変数Moveに左手を示すデータが設定されているか否かが判断される。ステップS185で“YES”であれば、つまり、人間14が指差しではなく左手を動かしていて、かつ、ロボット12の腕の当たり得る位置に存在していない場合には、ステップS187で行動モジュールLslを選択する。なお、ステップS179、S183またはS187を終了すると、この腕動作選択処理を終了する。
また、ステップS185で“NO”であれば、つまり、変数Moveに無しを示すデータが設定されている場合には、人間14が手を動かしていないものとみなして、図10のステップS155へ進んで、行動モジュールRnoおよびLnoを選択する。
一方、図12のステップS175で“NO”であれば、つまり、人間14がロボット12の腕の当たり得る位置に存在している場合には、ステップS189で、変数Activeに右手を示すデータが設定されているか否かを判断する。ステップS189で“YES”であれば、ステップS191で変数Hitに右手を示すデータが設定されているか否かを判断する。ステップS191で“NO”であれば、つまり、人間14が指差しではないが右手を使用していて、かつ、ロボット12の左腕の当たり得る位置に存在している場合には、ステップS193で行動モジュールRsrを選択する。
一方、ステップS191で“YES”であれば、つまり、変数Hitに右手を示すデータが設定されている場合、つまり、人間14が指差しではないが右手を使用していて、かつ、ロボット12の右腕の当たり得る位置に存在している場合には、ステップS195で、左腕で人間14の右手と同じ動きをするための行動モジュールLsrを選択する。この場合にも、使用する腕を変更して模倣動作を安全に行うことができる。ステップS193またはS195を終了すると、この腕動作選択処理を終了する。
一方、ステップS189で“NO”であれば、ステップS197で変数Activeに左手を示すデータが設定されているか否かを判断する。ステップS197で“YES”であれば、ステップS199で変数Hitに左手を示すデータが設定されているか否かを判断する。ステップS199で“YES”であれば、つまり、人間14が指差しではなく左手を使用していて、かつ、ロボット12の左腕の当たり得る位置に存在している場合には、ステップS201で、右腕で人間14の左手と同じ動きをするための行動モジュールRslを選択する。この場合にも、腕を替えて人間14の模倣動作を安全に行うことができる。
一方、ステップS199で“NO”であれば、つまり、変数Hitに右手を示すデータが設定されている場合、つまり、人間14が指差しではなく左手を使用していて、かつ、ロボット12の右腕の当たり得る位置に存在している場合には、ステップS203で行動モジュールLslを選択する。ステップS201またはS203を終了すると、この腕動作選択処理を終了する。
また、ステップS197で“NO”であれば、つまり、変数Activeに無しを示すデータが設定されている場合、つまり、人間14が指差しをせず、かつ、両手とも使用せず、かつ、ロボット12のどちらかの腕に当たり得る位置に存在している場合には、図10のステップS155で行動モジュールRnoおよびLnoを選択する。
図6に戻って、ステップS3の腕動作選択処理を終了すると、ステップS5で頭動作選択処理を実行する。この頭の行動モジュールを選択するための処理の動作は図13に詳細に示される。
図13の最初のステップS221で、頭動作に関する前回の行動モジュールが所定時間以上続いているか否かを判断する。ステップS221で“NO”であれば、前回の行動モジュールの実行を継続すべく、ステップS223で前回と同じ行動モジュールを選択する。ステップS223を終了すると、この頭動作選択処理を終了する。
一方、ステップS221で“YES”であれば、ステップS225で、前回の行動モジュールが、指差しに同調するあるいは協力的な頭動作、すなわち、右手で指された方向を見るための行動モジュールHrpまたは左手で指された方向を見るための行動モジュールHlpであったか否かを判断する。ステップS225で“NO”であれば、人間14の動作状態に応じて行動モジュールを選択すべく、処理はステップS229へ進む。
一方、ステップS225で“YES”であれば、ステップS227で、指差しに応じた行動モジュールHrpまたはHlpは一定時間以上続いているか否かを判断する。なお、ステップS227で判定される一定時間は、ステップS221で判定される所定時間よりも長い時間であって、たとえば人間14の指差し動作に対して同調したとみなされるのに十分な時間が設定されている。ステップS227で“NO”であれば、人間14の状態に応じた動作を行うべく、処理はステップS229へ進む。
ステップS229では、変数Pointに左手を示すデータが設定されているか否かを判断する。ステップS229で“YES”であれば、つまり、行動モジュールHrpまたはHlpが一定時間以上続いておらず、かつ、人間14が左手で指差しを行っている場合には、あるいは、前回の行動モジュールが指差しに同調する動作HrpおよびHlp以外であり、かつ、人間14が左手で指差しを行っている場合には、ステップS231で、行動モジュールHlpを選択する。
一方、ステップS229で“NO”であれば、ステップS233で変数Pointに右手を示すデータが設定されているか否かを判断する。ステップS233で“YES”であれば、つまり、行動モジュールHrpまたはHlpが一定時間以上続いておらず、かつ、人間14が右手で指差しを行っている場合には、あるいは、前回の行動モジュールが指差しに協力的な動作HrpおよびHlp以外であり、かつ、人間14が右手で指差しを行っている場合には、ステップS235で、行動モジュールHrpを選択する。
ステップS231またはS235を終了すると、ステップS221およびステップS227等での判定に使用するために頭動作に関する行動モジュールの実行時間のカウントを開始して、この頭動作選択処理を終了する。ただし、ステップS227で“NO”と判断されていた場合には、カウント開始を実行せずに、この頭動作選択処理を終了する。
また、ステップS233で“NO”であれば、つまり、変数Pointに無しを示すデータが設定されている場合、つまり、人間14が指差しを行っていない場合には、ステップS237で、アイコンタクトをするための行動モジュールHecを選択する。なお、ステップS227で“YES”である場合、つまり、人間14の指差しに十分な時間同調した場合にも、ステップS237で行動モジュールHecを選択する。ステップS237を終了すると、ステップS221等での判定に使用するために頭動作に関する行動モジュールの実行時間のカウントを開始して、この頭動作選択処理を終了する。
図6に戻って、ステップS5を終了すると、ステップS7で、発話選択処理を実行する。この発話の行動モジュールを選択するための処理の動作は図14に詳細に示される。
図14の最初のステップS251で、人間14が発話した時間を示す変数Speechの値がたとえば1秒以上2秒未満であるか否かを判断する。ステップS251で“YES”であれば、ステップS253で発話に関する前回の行動モジュールが「え?」と発話するための行動モジュールSehであるか否かを判断する。ステップS253で“NO”であれば、ステップS255で行動モジュールSehを選択する。この場合、人間14の発話時間が短いので、ロボット12は聞き取れなかったことを表現する。また、ステップS253で“YES”であれば、この発話選択処理を終了する。
一方、ステップS251で“NO”であれば、ステップS257で変数Speechの値がたとえば2秒以上5秒未満であるか否かを判断する。ステップS257で“YES”であれば、ステップS259で、「うん」と発話するための行動モジュールSun、および、うなずくための行動モジュールHndを選択する。この場合、人間14の発話時間が適度な長さであるので、ロボット12は普通に相槌を打つ。なお、ここでは頭動作に関する行動モジュールも一緒に選択される。
また、ステップS257で“NO”であれば、ステップS261で変数Speechがたとえば5秒以上であるか否かを判断する。ステップS261で“YES”であれば、ステップS263で、「うんうん」と発話するための行動モジュールSuu、および、うなずくための行動モジュールHndを選択する。この場合、人間14の発話時間が比較的長いので、ロボット12はその長い発話に応じた相槌を打つ。
一方、ステップS261で“NO”であれば、ステップS265で発話なし時間を示す変数Nospeechがたとえば3秒以上であるか否かを判断する。ステップS265で“YES”であれば、ステップS267で、「それで」と発話するための行動モジュールSsdを選択する。この場合、人間14の無言の時間が長くなったので、ロボット12は人間14の話を先へ促す。
ステップS255、S259、S263またはS267を終了すると、または、ステップS265で“NO”であれば、この発話選択処理を終了する。
図6に戻って、ステップS7を終了すると、ステップS9で、行動モジュールを実行するか否かを判断する。行動モジュールは、たとえば、腕、頭または発話に関する行動モジュールの各選択が変更された場合、または、各行動モジュールの実行に要する所定時間が経過した場合等に実行される。
ステップS9で“NO”であれば、行動モジュールを実行せずに、処理はステップS15へ進む。一方、ステップS9で“YES”であれば、ステップS11で、反応の遅延時間が経過したか否かを判断する。人間14が何かを行うときに、ロボット12がこの種の模倣動作や同調動作(たとえば、人間14が指差しをするときに、ロボット12の頭がすぐに同じ方向を向く)を即座に実行するならば、明らかに不自然である。したがって、発明者等は、人間同士のコミュニケーション実験において取得した反応の遅延時間をこのロボット制御装置16に実装し、ロボット12が所定の遅延時間経過後に模倣動作や同調動作を行うようにしている。発明者等の実験によれば、反応遅延時間は平均的には0.89秒であれば自然な振る舞いに感じられるので、所定の遅延時間としては、この値、あるいはその近傍の値(たとえば1秒程度)を設定する。
ステップS11で“YES”であれば、つまり、実行すべき行動モジュール(すなわち、選択に変更のあった行動モジュール、もしくは所定時間経過した行動モジュール)が選択されてから所定の遅延時間が経過した場合には、ステップS13で、行動モジュール実行処理を実行する。この処理の動作の詳細は図15に示される。
図15の最初のステップS281で、実行すべき行動モジュールを行動モジュールDB20から読み出して、起動する。これによって、腕動作または頭動作に関する行動モジュールの場合には、たとえば3次元動作計測データを用いながら、各モータの目標角度が算出される。また、発話に関する行動モジュールの場合には、発話内容データがHDD等から読み出される。
そして、ステップS283で、各モータの目標角度データ(角度制御データ)または発話内容データを含む指令データを生成して、この指令データをロボット12に送信する。
続いて、ステップS285で実行すべき行動モジュールが残っているか否かを判断して、“YES”であれば、その行動モジュールについて、ステップS281およびS283の処理を実行する。ステップS285で“NO”であれば、この行動モジュール実行処理を終了する。
図6に戻って、ステップS15では、模倣動作ないし同調動作を終了するか否かを判断する。たとえば、人間14が立ち去った等、順路案内状況が終了したか否かが判定される。ステップS15で“NO”であれば、処理はステップS1に戻る。ステップS15で“YES”であれば、この順路案内状況における行動の処理を終了する。
図16には、ロボット12の行動モジュール実行時の動作の一例が示される。ステップS301で、ロボット12のCPU76は、ロボット制御装置16からの指令データを受信したか否かを判断する。ステップS301で“NO”であれば、この行動モジュール実行時の処理を終了する。
一方、ステップS301で“YES”であれば、ステップS303で、指令データが身体動作に関するか否かを判断する。ステップS303で“YES”であれば、ステップS305で、目標角度データをモータ制御ボード82に与えて、各モータ88、90または92を制御する。協力的な動作を実現する行動モジュールが選択されていた場合には、ロボット12の右腕、左腕または頭部は、人間14の動作の状態に応じた模倣動作または同調動作を示すこととなる。
また、ステップS303で“NO”であれば、つまり、指令データが発話に関するデータである場合には、ステップS307で、発話内容データを音声入力/出力ボード86に与えて、スピーカ72からその音声を出力する。これによって、ロボット12は人間14の動作の状態に応じた発話を行う。ステップS305またはS307を終了すると、この処理を終了する。
この実施例によれば、人間14の模倣をする際に、人間14とロボット12の身体動作データを計測して、その身体動作データに基づいて人間14の動作の状態を検出し、その検出された状態に適切な行動モジュールを選択するようにしている。したがって、人間14の動作の状態に応じて適切な模倣動作をロボット12に実行させることができ、自然で円滑なコミュニケーションを実現できる。
また、この実施例では、人間14の動作を模倣する動作に加えて、たとえば指された方向に顔を向ける動作や発話に応じた相槌等のような人間14の動作に同調する動作も、検出された状態に応じて選択するようにしたので、人間14の行動に同調する動作もロボット12に適切に実行させることができる。したがって、人間14に協力的な動作をロボット12に適切に実行させることによって、人間14とロボット12との間で自然かつ円滑なコミュニケーションを実現できる。
被験者を使用した発明者等の実験によれば、ロボット12が相互作用する人間(被験者)に対応する協力的な行動(上述の実施例における模倣動作および同調動作)を実行することによって、人間はロボット12と円滑にコミュニケーションをすることができるということが証明されている。また、この実験では、身体動作因子に関しては、傾聴、共有および共感の観点において重要な効果があり、発話因子に関しては、共有の観点において重要な効果があることが検証されている。さらに、身体動作因子および発話因子の両方が、共感するコミュニケーションの観点、および信頼できるコミュニケーションの観点に影響を及ぼすことが検証されている。したがって、身体動作因子と発話因子の調和によって、共感しかつ信頼できるコミュニケーションが促進され、より円滑なコミュニケーションが実現できるのである。
なお、上述の実施例では、人間14の発話の音量を計測して発話時間の長さに応じて行動モジュールを選択するようにしている。しかしながら、ロボット制御装置16に音声認識のためのプログラムおよびデータを備えさせるようにしてもよい。つまり、この場合には、ロボット制御装置16は、人間14の発話の音声データを取得して音声認識をすることによってその発話内容を検出し、検出した発話内容に応じて発話または身体動作に関する行動モジュールを選択することが可能である。
また、上述の各実施例では、ロボット12の腕、頭、眼などの身体部位を駆動するアクチュエータとして電力を駆動源とするモータを用いた。しかしながら、ロボット12は、たとえば空気圧(または負圧)、油圧、圧電素子あるいは形状記憶合金などによる他のアクチュエータによって身体表現をするロボット12であってもよい。
また、上述の各実施例では、ロボット12に模倣動作などの協力的な動作を実行させるようにしていた。しかしながら、この発明にかかる動作生成システム10では、人間14およびロボット12の動作をたとえばモーションキャプチャシステム18やマイク24でリアルタイムに検出してその動作に関するデータ(身体動作データおよび発話に関するデータ)を生成することが可能であるので、ロボット12には、人間14の動作に協力的な動作よりも広い範囲で、人間14の動作に対応する動作を適切に実行させることができる。たとえば、ロボット12と人間14とがお別れする状況や再会した状況などにおいて、人間14が手を上げたときにロボット12がその人間14に抱きつくようにすることも可能である。もちろんこのような抱きつき動作を実現するための行動モジュールを行動モジュールDB20に予め記憶しておく。また、人間14が手を上げたときに、この抱きつき動作のための行動モジュールが、人間14の動作の状態(Hit、Activeなど)に応じて選択される腕動作選択処理プログラムもロボット制御装置16に記憶される。この場合には、ロボット12の手先の動きの範囲を算出し、人間14との相対位置関係を検出するとともに、手や腕などに配置しているタッチセンサ64の信号によって人間14を適切に抱きしめることができる。また、タッチセンサ64がオン/オフの2値を検出するものでなく、接触の強さ(圧力)を検知可能なセンサである場合、たとえば、本件出願人が平成15年3月24日付けで出願した特願2003−80106号で詳細に示した皮膚センサ等である場合には、抱きつき時のセンサ出力を検出することによって、人間14をきつく締め付けることがないようにすることも可能である。
また、上述の各実施例では、ロボット12とは別個にロボット制御装置16を設けるようにしたが、ロボット制御装置16の機能、すなわち、模倣動作を行うためのプログラム等を、行動モジュールDB20および発話計測データDB22を含めてロボット12に内蔵するようにしてもよい。
また、上述の各実施例では、コミュニケーションの相手は人間14であったが、ロボット12の相手は人間に限られず、たとえば他のコミュニケーションロボットであってもよい。