以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。本明細書で説明する実施の形態は、本発明を、ペット型エージェント、人間型エージェントなどの生命を模擬し、ユーザとのインタラクションを可能とするロボット装置に適用したものである。以下では先ず、このようなロボット装置の構成について説明し、次にロボット装置の制御システムのうち、行動選択を行う行動選択制御システムについて説明し、最後にそのような行動選択制御システムを含むロボット装置の制御システムについて説明する。
A.ロボット装置の構成
図1には、本発明の実施に供されるロボット装置の外観を示している。同図に示すように、ロボット装置1は、体幹部ユニット2の所定の位置に頭部ユニット3が連結されるとともに、左右2つの腕部ユニット4R/Lと、左右2つの脚部ユニット5R/Lが連結されて構成されている(但し、R及びLの各々は、右及び左の各々を示す接尾辞である。以下において同じ。)。
図2は、本発明の実施に供されるロボット装置1の機能構成を模式的に示している。同図に示すように、ロボット装置1は、全体の動作の統括的制御及びその他のデータ処理を行なう制御ユニット20と、入出力部40と、駆動部50と、電源部60とで構成される。以下、各部について説明する。
入出力部40は、入力部として人間の目に相当し、外部の状況を撮影するCCD(Charge Coupled Device)カメラ15、及び耳に相当するマイクロフォン16や頭部や背中などの部位に配設され、所定の押圧を受けるとこれを電気的に検出することで、ユーザの接触を感知するタッチ・センサ18、前方に位置する物体までの距離を測定するための距離センサ、五感に相当するその他、ジャイロセンサなど、各種のセンサを含む。また、出力部として、頭部ユニット3に備えられ、人間の口に相当するスピーカ17、及び人間の目の位置に設けられ、感情表現や視覚認識状態を表現する例えばLED(Light Emitting Device)インジケータ(目ランプ)19などを装備している。これら出力部は、音声やLEDインジケータ19の点滅、脚による機械運動パターン以外の形式でもロボット装置1からのユーザ・フィードバックを表現することができる。
例えば頭部ユニットの頭頂部の所定箇所に複数のタッチ・センサ18を設け、各タッチ・センサ18における接触検出を複合的に活用して、ユーザからの働きかけ、ロボット装置1の頭部を「撫でる」「叩く」「軽く叩く」などを検出することができる。また、押圧センサのうちの幾つかが所定時間をおいて順次接触したことを検出した場合、これを「撫でられた」と判別し、短時間のうちに接触を検出した場合、「叩かれた」と判別する等場合分けし、これに応じて内部状態も変化し、このような内部状態の変化を上述の出力部などにより表現することができる。
駆動部50は、制御ユニット20が指令する所定の運動パターンに従ってロボット装置1の機体動作を実現する機能ブロックであり、行動制御による制御対象である。駆動部50は、ロボット装置1の各関節における自由度を実現するための機能モジュールであり、それぞれの関節におけるロール、ピッチ、ヨーの各軸に設けられた複数の駆動ユニット541〜54nで構成される。各駆動ユニット541〜54nは、所定軸回りの回転動作を行なうモータ511〜51nと、モータ511〜51nの回転位置を検出するエンコーダ521〜52nと、エンコーダ521〜52nの出力に基づいてモータ511〜51nの回転位置や回転速度を適応的に制御するドライバ531〜53nとの組み合わせで構成される。
本実施形態に係るロボット装置1は、2足歩行としたが、駆動ユニットの組み合わせ方によって、ロボット装置1を例えば4足歩行などの脚式移動ロボット装置として構成することもできる。
電源部60は、その字義通り、ロボット装置1内の各電気回路などに対して給電を行う機能モジュールである。本実施形態に係るロボット装置1は、バッテリを用いた自律駆動式であり、電源部60は、充電バッテリ61と、充電バッテリ61の充放電状態を管理する充放電制御部62とで構成される。
充電バッテリ61は、例えば、複数本のリチウムイオン2次電池セルをカートリッジ式にパッケージ化した「バッテリ・パック」の形態で構成される。
また、充放電制御部62は、バッテリ61の端子電圧や充電/放電電流量、バッテリ61の周囲温度等を測定することでバッテリ61の残存容量を把握し、充電の開始時期や終了時期などを決定する。充放電制御部62が決定する充電の開始及び終了時期は制御ユニット20に通知され、ロボット装置1が充電オペレーションを開始及び終了するためのトリガとなる。
制御ユニット20は、「頭脳」に相当し、例えばロボット装置1の機体頭部、あるいは胴体部に搭載されている。
図3には、制御ユニット20の構成をさらに詳細に示している。図3に示すように、制御ユニット20は、メイン・コントローラとしてのCPU(Central Processing Unit)21が、メモリ及びその他の各回路コンポーネントや周辺機器とバス接続された構成となっている。バス28は、データ・バス、アドレス・バス、コントロール・バスなどを含む共通信号伝送路である。バス28上の各装置にはそれぞれに固有のアドレス(メモリ・アドレス又はI/Oアドレス)が割り当てられている。CPU21は、アドレスを指定することによってバス28上の特定の装置と通信することができる。
RAM(Random Access Memory)22は、DRAM(Dynamic RAM)などの揮発性メモリで構成された書き込み可能メモリであり、CPU21が実行するプログラム・コードをロードしたり、実行プログラムによる作業データの一時的に保存したりするために使用される。
ROM(Read Only Memory)23は、プログラムやデータを恒久的に格納する読み出し専用メモリである。ROM23に格納されるプログラム・コードには、ロボット装置1の電源投入時に実行する自己診断テスト・プログラムや、ロボット装置1の動作を規定する動作制御プログラムなどが挙げられる。
ロボット装置1の制御プログラムには、カメラ15やマイクロフォン16などのセンサ入力を処理してシンボルとして認識する「センサ入力・認識処理プログラム」、短期記憶や長期記憶などの記憶動作(後述)を司りながらセンサ入力と所定の行動制御モデルとに基づいてロボット装置1の行動を制御する「行動制御プログラム」、行動制御モデルに従って各関節モータの駆動やスピーカ17の音声出力を制御する「駆動制御プログラム」などが含まれる。
不揮発性メモリ24は、例えばEEPROM(Electrically Erasable and Programmable ROM)のように電気的に消去再書き込みが可能なメモリ素子で構成され、逐次更新すべきデータを不揮発的に保持するために使用される。逐次更新すべきデータには、暗号鍵やその他のセキュリティ情報、出荷後にインストールすべき装置制御プログラムなどが挙げられる。
インターフェース25は、制御ユニット20外の機器と相互接続し、データ交換を可能にするための装置である。インターフェース25は、例えば、カメラ15、マイクロフォン16、又はスピーカ17等との間でデータ入出力を行う。また、インターフェース25は、駆動部50内の各ドライバ531〜53nとの間でデータやコマンドの入出力を行なう。
また、インターフェース25は、RS(Recommended Standard)−232Cなどのシリアル・インターフェース、IEEE(Institute of Electrical and Electronics Engineers)1284などのパラレル・インターフェース、USB(Universal Serial Bus)インターフェース、i−Link(IEEE1394)インターフェース、SCSI(Small Computer System Interface)インターフェース、PCカードやメモリ・スティックを受容するメモリ・カード・インターフェース(カード・スロット)などのような、コンピュータの周辺機器接続用の汎用インターフェースを備え、ローカル接続された外部機器との間でプログラムやデータの移動を行なうようにしてもよい。
また、インターフェース25の他の例として、赤外線通信(IrDA)インターフェースを備え、外部機器と無線通信を行なうようにしてもよい。
さらに、制御ユニット20は、無線通信インターフェース26やネットワーク・インターフェース・カード(NIC)27等を含み、Bluetoothのような近接無線データ通信や、IEEE 802.11に代表される無線ネットワーク、あるいはインターネットなどの広域ネットワークを経由して、外部のさまざまなホスト・コンピュータとデータ通信を行なうことができる。
このようなロボット装置1とホスト・コンピュータ間におけるデータ通信により、遠隔のコンピュータ資源を用いて、ロボット装置1の複雑な動作制御を演算したり、リモート・コントロールしたりすることができる。
B.ロボット装置の行動制御方法
次に、ロボット装置の行動制御方法について詳細に説明する。上述したロボット装置1は、自己及び周囲の状況や、使用者からの指示及び働きかけに応じて自律的に行動し得るようになされている。すなわち、ロボット装置1は、外部刺激及び内部状態に応じて自律的に行動を選択して発現することができる。
本実施の形態におけるロボット装置の行動制御方法では、ロボット装置は、行動に対する行動価値AL(アクティベーション・レベル:Activation Level)に基づいて選択される行動記述モジュール(後述)に記述された行動を発現される、という形態で行動が生成される。ここでは、特に、ロボット装置の行動制御のうち、自身の内部状態と外部からの刺激に対して発現する行動を選択して出力するまでの行動選択制御について説明するが、先ず、行動選択の基準となる行動価値ALの算出方法について説明する。なお、ロボット装置の制御システムの全体の構成についての詳細は後述する。
B−1.ロボット装置の行動選択制御
図4には、本実施形態に係るロボット装置の制御システムにおいて、各行動に対応する行動価値を算出してこれに基づき行動出力する処理を行なう行動選択制御システム部分を示している。同図に示すように、行動選択制御システム100は、本能や感情といった数種類の情動を数式モデル化して管理する内部状態管理部91と、外部環境におけるセンサ入力などの外部刺激を認識する外部刺激認識部80と、内部状態及び外部刺激に基づき選択されると行動を出力するモジュールである複数の要素行動132と、各要素行動132の行動価値ALを算出する行動価値算出部120と、行動価値ALに基づいて発現する要素行動132を選択する行動選択部130と、行動発現後の結果を基に学習して行動価値データベースを更新する学習部140を備え、選択された要素行動132が行動を出力することでロボット装置が行動を発現するようになっている。
要素行動132とは、内部状態及び外部刺激から行動出力を決定するモジュール(以下では、「行動記述モジュール」とも呼ぶ)として構成され、モジュール毎にステートマシンを備え、それ以前の行動(動作)や状況に依存して、センサ入力された外部情報の認識結果を分類し、動作を機体上で発現する。図4では、要素行動A乃至Dのみ図示しているが、これに限定されるものではない。行動記述モジュールは、外部刺激や内部状態に応じた状況判断を行ない、行動価値ALを算出するMonitor機能と、行動実行に伴う状態遷移(ステートマシン)を実現するAction機能とを備えたスキーマ(Schema)として記述されるが、スキーマの詳細については後述する。
各要素行動132は、自身に記述された行動に応じて所定の内部状態及び外部刺激が定義されている。
ここで外部刺激とは、外部刺激認識部80におけるロボット装置の知覚情報などであり、例えばカメラから入力された画像に対して処理された色情報、形情報、顔情報等の対象物情報等が挙げられる。具体的には、例えば、色、形、顔、3D一般物体、及びハンドジェスチャー、その他、動き、音声、接触、距離、場所、時間、及びユーザとのインタラクション回数等が挙げられる。
また、内部状態とは、上述した如く、内部状態管理部91にて管理される本能や感情といった情動であり、例えば、疲れ(FATIGUE)、痛み(PAIN)、栄養状態(NOURISHMENT)、乾き(THURST)、愛情(AFFECTION)、好奇心(CURIOSITY)などが挙げられる。
図4に示すように、各要素行動は、行動出力と、行動出力に応じて定義された内部刺激並びに外部刺激を扱う。外部刺激は、該当する対象物のプロパティとして扱われる。例えば、行動出力が「食べる」である要素行動Aは、外部刺激として対象物の種類(OBJECT_ID)、対象物の大きさ(OBJECT_SIZE)、対象物の距離(OBJECT_DISTANCE)などを扱い、内部状態として「NOURISHMENT」(「栄養状態」)、「FATIGUE」(「疲れ」)などを扱う。このように、要素行動毎に、扱う外部刺激及び内部状態の種類が定義され、該当する外部刺激及び内部状態に対応する行動(要素行動)に対する行動価値が算出される。なお、1つの内部状態、又は外部刺激は、1つの要素行動だけでなく、複数の要素行動に対応付けられていてもよいことは勿論である。
また、内部状態管理部91は、外部刺激並びに例えば自身のバッテリの残量及びモータの回転角などの情報を入力とし、上述のような複数の内部状態に対応した内部状態の値(内部状態ベクトルIntV)を算出し、管理する。具体的には、例えば、内部状態「栄養状態」は、バッテリの残量を基に決定し、内部状態「疲れ」は、消費電力を基に決定することができる。
行動価値算出部120は、入力される外部刺激と、行動発現後に変化すると予想される予想内部状態変化が対応付けられた行動価値算出データベース121(後述)を参照し、ある時刻での外部刺激と内部状態とからその時刻での各要素行動A〜Dにおける行動価値ALをそれぞれ算出する。この行動価値算出部120は、図4に示す実施形態では要素行動A〜D毎に個別に設けられるものとするが、行動価値算出部120によりすべての要素行動についての行動価値を算出するように構成してもよい。
ここで言う行動価値ALとは、その要素行動をロボット装置がどれくらいやりたいか(実行優先度)を示すものである。行動選択部130は、候補となる要素行動の中から、それぞれについて算出された行動価値ALに基づいて選択する。そして、選択された要素行動は自身に記述された行動を出力する。すなわち、各要素行動が自身の行動価値算出部120により、行動価値ALの算出を行ない、その行動価値ALが例えば最も高い要素行動を行動選択部130が選択する。行動選択部130における行動価値ALに基づく要素行動の選択方法については、後に詳解する。
各要素行動に対する行動価値ALは、現在の各内部状態に対応する各行動に対する欲求値と、現在の各内部状態に基づく満足度と、外部刺激により変化すると予想される内部状態の変化量、すなわち、外部刺激が入力され行動を発現した結果、変化すると予想される内部状態の変化量を示す予想内部状態変化に基づく予想満足度変化とに基づいて算出される。
ここで、要素行動における行動価値ALを算出する方法について、ある「種類」、「大きさ」の対象物がある「距離」に存在するとき、行動出力が「食べる」である要素行動Aの行動価値ALを要素行動Aに定義された内部状態「栄養状態」、「疲れ」とから算出する例をとって、具体的に説明する。
B−2.行動価値算出部
図5には、行動価値算出部120が内部状態及び外部刺激から行動価値ALを算出する処理の流れを示している。本実施形態では、要素行動毎に、1以上の内部状態の値を成分として有する内部状態ベクトルIntV(Internal Variable)が定義されており、内部状態管理部91から各要素行動に応じた内部状態ベクトルIntVを得る。すなわち、内部状態ベクトルIntVの各成分は、例えば上述した情動などを示す1つの内部状態の値(内部状態パラメータ)を示すもので、内部状態ベクトルIntVが有する各成分に応じた要素行動の行動価値算出に使用される。具体的には、上記行動出力「食べる」を有する要素行動Aは、例えば内部状態ベクトルIntV{IntV_NOURISHMENT「栄養状態」,IntV_FATIGUE「疲れ」}が定義されている。
また、内部状態毎に、1以上の外部刺激の値を成分として有する外部刺激ベクトルExStml(External Stimulus)が定義されており、外部刺激認識部80から各内部状態、すなわち各要素行動に応じた外部刺激ベクトルExStmlを得る。すなわち、外部刺激ベクトルExStmlの各成分は、例えば上述した対象物の大きさ、対象物の種類、対象物までの距離などの認識情報を示すもので、外部刺激ベクトルExStmlが有する各成分に応じた内部状態値の算出に使用される。具体的には、内部状態IntV_NOURISHMENT「栄養状態」には、例えば、外部刺激ベクトルExStml{OBJECT_ID「対象物の種類」,OBJECT_SIZE「対象物の大きさ」}が定義され、内部状態IntV_FATIGUE「疲れ」には、例えば外部刺激ベクトルExStml{OBJECT_DISTANCE「対象物までの距離」}が定義されている。
行動価値算出部120は、この内部状態ベクトルIntV及び外部刺激ベクトルExStmlを入力とし、行動価値ALを算出する。具体的には、行動価値算出部120は、内部状態ベクトルIntVから、該当する要素行動について、どれだけやりたいかを示すモチベーション・ベクトル(MotivationVector)を求める第1の算出部MVと、内部状態ベクトルIntV及び外部刺激ベクトルExStmlから、該当する要素行動をやれるか否か示すリリーシング・ベクトル(ReleasingVector)を求める第2の算出部RVとを備え、これら2つのベクトルから行動価値ALを算出する。
B−2−1.モチベーション・ベクトルの算出
行動価値ALを算出する一方の要素であるモチベーション・ベクトルは、要素行動に定義されている内部状態ベクトルIntVから、その要素行動に対する欲求を示す欲求値ベクトルInsV(Instinct Variable)として求められる。例えば、行動出力「食べる」を有する要素行動Aは、内部状態ベクトルIntV{IntV_NOURISHMENT,IntV_FATIGUE}を備え、これより、欲求値ベクトルInsV{InsV_NOURISHMENT,InsV_FATIGUE}をモチベーション・ベクトルとして求める。すなわち、欲求値ベクトルInsVは、行動価値ALを算出するためのモチベーション・ベクトルとなる。
欲求値ベクトルInsVの計算方法としては、例えば内部状態ベクトルIntVの値が大きいほど、欲求が満たされているものと判断され欲求値は小さくなり、内部状態ベクトルIntVがある値より大きくなると欲求値は負になるような関数を用いることができる。
具体的には、以下の式(1)及び図6に示すような関数が挙げられる。図6には、横軸に内部状態ベクトルIntVの各成分をとり、縦軸に欲求値ベクトルInsVの各成分をとって、以下の式(1)で示される内部状態と欲求値との関係をグラフで示している。
欲求値ベクトルInsVは、上記の式(1)及び図6に示すように、内部状態ベクトルIntVの値のみで決まる。ここでは、内部状態の大きさを0乃至100とし、そのときの欲求値の大きさが−1乃至1となるような関数を示している。例えば、内部状態が8割満たされているときに、欲求値が0となるような内部状態−欲求値曲線L1を設定することで、ロボット装置は、常に内部状態の満足度が8割の状態を維持するように行動を選択するようになる。これにより、例えば、内部状態「栄養状態」(IntV_NORISHMENT)に対応する欲求が「食欲」(InsV_NORISFMENT)である場合、お腹が減っていれば食欲が大きくなり、腹八分目以上では食欲がなくなることを示し、これを利用すればそのような情動を表出するような行動を発現させるようにすることができる。
上記の式(1)における定数A乃至Fを種々変更することで、内部状態毎に異なる欲求値が求まる。例えば、内部状態が0乃至100の間において、欲求値が1乃至0に変化するようにしてもよいし、また、内部状態毎に上記の式(1)とは異なる内部状態−欲求値関数を用意してもよい。
B−2−2.リリーシング・ベクトルの算出
一方、行動価値ALを算出する他方の要素であるリリーシング・ベクトルは、内部状態ベクトルIntVから求められる満足度ベクトルS(Satisfaction)と、外部刺激ベクトルExStmlから求められる予想満足度変化ベクトルとから算出される。
先ず、各要素行動に定義されている内部状態と、この内部状態に定義されている外部刺激とから、行動発現後に得ることが予想される内部状態と現在の内部状態との差を示す予想内部状態変化量ベクトルを以下の式(2)により求める。
予想内部状態変化量ベクトルとは、現在の内部状態ベクトルからの、行動発現後に変化すると予想される変化量を示すもので、行動価値算出部120が参照可能な行動価値算出データベース121の行動価値算出データを参照して求めることができる。行動価値算出データは、外部刺激ベクトルと行動発現後に変化すると予想される予想内部状態変化量ベクトルとの対応が記述されたものであり、このデータベースを参照することで、行動価値算出部120は、入力された外部刺激ベクトルに応じた予想内部状態変化量ベクトルを取得することができる。
なお、行動価値算出データベース121の構成についての詳細は後述する。また、本実施形態に係るロボット装置の行動選択制御システム100では、学習部140が、行動発現前に予想する予想内部状態変化を行動発現後に実際に変化した内部状態変化から学習し、行動価値算出データベースを更新する機能を有するが、この学習機能に関しての詳細も後述する。ここでは、先ず、行動価値算出データベースから予想内部状態変化、予想欲求値変化を求める方法について説明する。
行動価値算出データベースに登録される行動価値算出データとしては、例えば図7(a)及び図7(b)に示すものが考えられる。
図7(a)に示す例では、内部状態「栄養状態」(「NOURISHMENT」)に関しては、その要素行動の行動出力である「食べる」を発現した結果、対象物の大きさ(OBJECT_SIZE)が大きいほど、内部状態「栄養状態」が満たされる量が大きく、栄養を満たすであろうと予想される場合を示している。同様に、対象物の種類(OBJECT_ID)がOBJECT_ID=0に対応する対象物M1より、OBJECT_ID=1に対応する対象物M2が、また、OBJECT_ID=1に対応する対象物M2より、OBJECT_ID=2に対応する対象物M3の方が内部状態「栄養状態」が満たされる量が大きく、栄養を満たすであろうと予想される場合を示している。
また、図7(b)に示す例では、内部状態「疲れ」(「FATIGUE」)に関しては、その要素行動の行動出力である「食べる」を発現した結果、対象物の距離「OBJECT_DISTANCE」が大きいほど、内部状態「FATIGUE」が満たされる量が大きく、疲れるであろうと予想される場合を示している。
すなわち、上述したように、各行動要素に対して内部状態ベクトルIntV及び外部刺激ベクトルExStmlが定義されているので、外部刺激ベクトルExStmlの各成分として対象物の大きさ及び対象物の種類を有するベクトルが供給された場合には、この外部刺激ベクトルExStmlが定義されている内部状態IntV_NOURISHMENT(「栄養状態」)を有する内部状態ベクトルが定義されている要素行動Aの行動結果に対する予想内部状態変化が求められる。同様に、対象物の距離を有するベクトルが供給された場合、この外部刺激ベクトルExStmlが定義されている内部状態IntV_FATIGUE(「疲れ」)を有する内部状態ベクトルが定義されている要素行動Aの行動結果に対する予想内部状態変化が求められる。
次に、内部状態ベクトルIntVから以下の式(3)に示す満足度ベクトルSを算出し、上記の式(2)に示す予想内部状態変化量ベクトルから、以下の式(4)に示す予想満足度変化ベクトルを求める。
内部状態ベクトルIntVに対する満足度ベクトルSの計算法としては、要素行動Aに定義されている内部状態ベクトル{IntV_NOURISHMENT,IntV_FATIGUE}の各成分IntV_NOURISHMENT「栄養状態」及びIntV_FATIGUE「疲れ」に対して、それぞれ下記の式(5−1)及び(5−2)に示すような関数が考えられる。
図8及び図9は、上記の式(5−1)及び(5−2)に示す関数をそれぞれグラフで示している。図8では、横軸にIntV_NOURISHMENT「栄養状態」、縦軸に内部状態「栄養状態」に対する満足度S_NOURISHMENTをとり、図9は、横軸にIntV_FATIGUE「疲れ」、縦軸に内部状態「疲れ」に対する満足度S_FATIGUEをとって、内部状態と満足度との関係を示している。
図8に示す関数は、内部状態「栄養状態」の値IntV_NOURISHMENTが0乃至100の値を有し、これに対応する満足度S_NOURISHMENTが0乃至1ですべて正の値を有するものであって、内部状態の値が0から80近傍までは満足度が0から増加し、それ以降は減少して内部状態の値が100で再び満足度0になるような曲線L2を示している。すなわち、内部状態「栄養状態」に関しては、現在(ある時刻)の内部状態「栄養状態」の値(IntV_NOURISHMENT=40)から計算される満足度S_NOURISHMENT、図7(a)によって得られる内部状態「栄養状態」の予想内部状態変化(40から80までの20)に対応する予想満足度変化はともに正である。
また、上述の図5には関数L2のみを示しているが、図9に示すような関数を用いることもできる。すなわち、内部状態「疲れ」の値IntV_FATIGUEが0乃至100の値を有し、これに対応する満足度S_FATIGUEが0乃至−1ですべて負の値をするものであって、内部状態が大きくなるほど、満足度が小さくなるような曲線L3を示す関数である。現在の内部状態「疲れ」の内部状態の値から計算される満足度S_FATIGUEは負であり、図7(a)によって得られる内部状態「疲れ」の予想内部状態変化が正であれば、予想満足度変化ベクトルは負になる。
上記の式(5−1)、(5−2)で示される関数において、各定数A〜Fを可変に設定することで、さまざまな内部状態に対応して異なる満足度を得るための関数を設定することができる。
そして、以下の式(6)により、外部刺激に応じて行動発現後にどのくらい内部状態を満足させるかの値を決定することで、行動価値ALを算出するための他方の要素であるリリーシング・ベクトルを求めることができる。
ここで、上記の式(6)におけるαが大きいと、リリーシング・ベクトルは行動を発現した結果、どれくらいの満足度が得られるかを示す予想満足度変化、すなわちどれくらい満足度が増えるかを示す値に強く依存し、αが小さいと、予想満足度、すなわち、行動を発現した結果、満足度がどのくらいになるかを示す値に強く依存するという傾向を有することになる。
B−2−3.行動価値ALの算出
以上のようにして求められたモチベーション・ベクトルと、リリーシング・ベクトルとから、最終的に行動価値ALが下記の式(7)のように算出される。
ここで、βが大きいと、行動価値ALは内部状態(欲求値)に強く依存し、βが小さいと外部刺激(予想満足度変化及び予想満足度)に強く依存する傾向を有する。このようにして、内部状態の値(内部状態ベクトルIntV)と外部刺激の値(外部刺激ベクトルExStml)とから欲求値、満足度、予想満足度を計算し、これら欲求値、満足度、予想満足度に基づいて行動価値ALを算出することができる。
そして、この行動価値ALに基づいて、行動選択部130が行動を選択することにより、例えば同じ外部刺激が入力された場合であっても、そのときの内部状態の値によって異なる行動が選択される。
B−2−4.行動価値算出データベース
次に、行動価値算出データベース121の行動価値算出データの構造及び、データベースの参照方法(予想内部状態変化の求め方)について説明する。
上述したように、行動価値算出データは、入力された外部刺激に対して予想内部状態変化量ベクトルを求めるためのデータであり、各要素行動に定義された内部状態に対して、外部刺激ベクトル空間上に代表点(外部刺激の値)が定義されているとともに、その代表点上に予想される内部状態の変化量を示す予想内部状態変化が定義されている。そして、入力された外部刺激が、定義された外部刺激ベクトル空間の代表点上の値であった場合、予想内部状態変化はその代表点上に定義された値となる。
図10(a)及び図10(b)は、行動価値算出データ構造の一例を示している。
図10(a)に示すように、内部状態「栄養状態」(「NOURISHMENT」)の予想内部状態変化を求める場合、外部刺激ベクトル空間上の代表点{OBJECT_ID,OBJECT_SIZE}及びこの代表点に対応する予想内部状態変化を例えば以下の表1のように定義しておく。
また、図10(b)に示すように、内部状態「疲れ」(「FATIGUE」)の予想内部状態変化量ベクトルを求める場合、外部刺激ベクトル空間上の代表点{OBJECT_DISTANCE}及びこの代表点に対応する予想内部状態変化を例えば以下の表2のように定義しておく。
このように、予想内部状態変化は、外部刺激ベクトル空間上の代表点にのみ定義されているため、外部刺激の種類(例えば、OBJECT_DISTANCEやOBJECT_SIZEなど)によっては、定義された外部刺激ベクトル空間の代表点以外の値が入力されることが考えられる。その場合、予想内部状態変化は、入力された外部刺激の近傍の代表点から線形補間により求めることができる。
図11及び図12には、1次元及び2次元の外部刺激の線形補間方法についてそれぞれ図解している。
上述の図10(b)に示すように1つの外部刺激(OBJECT_DISTANCE)から予想内部状態変化を求める場合、すなわち、内部状態に対し1つの外部刺激が定義されている場合には、図11に示すように、横軸に外部刺激をとり、縦軸にこの外部刺激に対する予想内部状態変化をとって、外部刺激(OBJECT_DISTANCE)のパラメータである代表点D1及び代表点D2に定義された予想内部状態変化となるような直線L4により、入力される外部刺激Dnの予想内部状態変化量Inを求めることができる。
また、図12に示すように、内部状態に対して入力となる外部刺激が2つの成分から外部刺激ベクトルが定義されている場合、例えば内部状態に対しOBJECT_DISTANCEに加え、さらにOBJECT_WEIGHTという外部刺激が定義されている場合、各外部刺激の所定のパラメータである代表点(D1,W1)、(D1,W2)、(D2,W1)、(D2,W2)が定義され、これに対応する予想内部状態変化を有している場合において、上記の代表点とは異なる外部刺激Enm(Dn,Wn)が入力された場合、例えば先ず、OBJECT_DISTANCE=D1において、OBJECT_WEIGHTの代表点W1並びにW2に定義された予想内部状態変化を通る直線L5を求め、同じく、OBJECT_DISTANCE=D2において、OBJECT_WEIGHTの代表点W1並びにW2に定義された予想内部状態変化を通る直線L6を求める。そして、入力される外部刺激Enmの2つの入力のうち、例えばWnに対応する2つの直線L5及びL6における予想内部状態変化を求め、さらにこの2つの予想内部状態変化を結んだ直線L7を求め、この直線L7において入力される外部刺激Enmの他方の外部刺激Dnに対応する予想内部状態変化量Inmを求めることで、外部刺激Enmに対応した予想内部状態変化を線形補間により求めることができる。
このように、行動価値算出データベースにはないデータが入力された場合は、線形モデルを使用し線形補間を行って予想内部状態変化を算出することができ、各外部刺激が有するすべての値に対応する予想内部状態変化を持つ必要がなくデータ量を低減することができる。
本実施形態に係る行動価値算出データベースは、図10に示したように、各行動記述モジュールに記述された行動と、外部刺激としての対象物が持つプロパティと、内部状態の組からなるデータ形式により、行動価値算出データを記憶している。
この場合、各行動記述モジュール(スキーマ)に記述された行動をインデックスとして行動価値算出データベース121を検索し、外部刺激としての対象物が持つプロパティから内部状態を決定することができる。
また、行動価値算出データベース121の他の利用方法として、外部刺激としての対象物が持つあるプロパティをインデックスとして行動価値算出データベース121を検索し、内部状態を決定するようにしてもよい。この場合、行動又は外部刺激としての対象物が持つその他の特性をプロパティに値に設定し又は平均化し、対象物に抽象的な価値を与えることができる。この場合の行動価値算出データベース121の利用方法について、図29を参照しながら説明する。
各要素行動の行動価値データベースから、ある要素行動が注目する対象物のプロパティにおいて、その対象物のプロパティに対する行動に依存しない抽象的な内部状態変化を算出する。例えば、要素行動「震える」の注目する対象物のプロパティを「色」、内部状態を「PAIN」とする。そのとき、その他の要素行動(食べる、蹴る、話す…)で対象物のプロパティ「色」、内部状態「PAIN」に注目しているものの行動価値データベースを用い、色から予想内部状態変化を算出する。
その際の算出方法としては、COLORに対するdIntV_PAINの平均値ΣdIntV_PAIN(COLOR)/nとする。ある要素行動の行動価値データベースにおいてdIntV_PAINがCOLORに対して一意に決定しない場合、例えば、dIntV_PAIN(COLOR, OBJECT_ID, DISTANCE)などのような場合、OBJECT_IDは代表値、DISTANCEは平均値を用いる。そして、内部状態の値IntVとその予想変化量dIntVから行動価値ALを算出する。
このような行動価値ALの算出を行なう結果、「赤いボールを蹴ると痛くなる」、「赤い人に話しかけると痛くなる」といった行動価値データベースを持っている場合には、赤い色を見ただけで「PAINが想起され震える」といったことが実現され、行動の種類に依らない対象物のプロパティの抽象的な価値(内部状態変化)を決定することができる。
B−2−5.行動選択
従来の行動規範型ロボットの行動選択方法は、ヒューリスティックな方法により活性度を決定し、その活性どの最大値を与える行動モジュールを選択し、行動の発現を行なうものが主流である。しかし、この活性度の計算方法が人手によるものであり、且つこの計算を以下にうまく設定するかによって、自立型ロボットの行動が適切なものになったり、不適切なものになったりする。
これに対し、本実施形態では、内部状態の変化を外部刺激から連想することで、適切な行動選択を新しい外部刺激に対して行なう、という行動規範型システムを構成している。さらに、連想した内部状態の変化を各行動モジュールにおいて記憶し、これを快不快すなわち内部状態に基づく満足度の評価を用いて行動価値ALとして数値化し、それを強化学習の価値関数とみなして、最大値選択あるいはSoftMax選択による強化学習のフレームワークで適切な行動選択がなされることを実現する。
本実施形態では、各要素行動が自身の行動価値算出部120により、行動価値ALの算出を行なう。
上述したように、行動価値算出データベース121では、外部刺激ESが入力されたことに応答してそれぞれの要素行動Biを実行したときの予想内部状態変化量ΔI(ES,Bi)を外部刺激ESと関連付けて記憶している。そして、要素行動Biによって、予想内部状態変化量ΔIに基づく内部状態I(ΔI)が想起され、そのときの満足度pを内部状態から評価することができる(すなわち、p=f(I+ΔI))。ここで、満足度は、価値関数、あるいは要素行動Biに対する報酬若しくは期待値と捉えることができ、本明細書では行動価値ALとして取り扱っている。
このようにして、候補となるすべての要素行動Biについて行動価値ALを算出し、行動選択部130では、算出された行動価値ALに基づいて、候補なる要素行動の中から発現すべきものを選択する。例えば同じ外部刺激が入力された場合であっても、そのときの内部状態の値によって異なる行動が選択される。
行動選択部130により例えばk番目の要素行動Bkが選択され、実際に発現される。このとき、システムでは、要素行動Bkを実際に発現し手得られる現実の内部状態の変化量ΔIを得ることができるが、この実測値に基づいて、行動価値算出データベース121内における該当する予想内部状態変化量ΔIを更新、すなわち学習することができる。この行動価値算出データベースの学習作用により、すべての行動について適当な行動価値を算出する関数を設定することが可能となる。
行動価値算出データベースの学習については後述に譲る。この項では、行動選択部130による選択方法について説明する。
算出された行動価値ALに基づいて行動選択部130が各要素行動を選択する。その行動選択のポリシーとして、本発明者らは例えば以下のものを考えている。
(1)Greedy
行動選択部は候補である要素行動のうち行動価値が最大の要素行動を常に選択する。
(2)Random
行動選択部130は、行動価値によらず無作為に要素行動を選択する。この結果行動選択が探索的になり、行動価値算出データベース121を更新する可能性が大きくなる。
(3)SoftMax
行動選択部130は、算出された行動価値ALに応じた確率に従って、候補である行動の中から選択する。具体的には、候補である要素行動のうち、行動価値が大きい要素行動をより大きい確率で選択する。例えば、要素行動iの行動価値をALiとしたとき、その選択確率P(i)は以下の式により計算される。
但し、上式において、Tはボルツマン温度と呼ばれるパラメータであり、SoftMaxによる選択方法の特性を調節することができる。すなわち、上式は、上記のGreedyに対しRandom性を与えた形であり、ボルツマン温度Tはランダム性の尺度となる。Tが十分小さいとき行動選択ポリシーはGreedyになり、十分大きいときRandomとなる(図30を参照のこと)。
但し、上記(1)〜(3)において、対象物が存在しないと成立しない要素行動(例えば、サッカーボールに対するシュート)は行動選択部の選択肢から除外する。
B−3.行動価値算出データベースの学習
次に、このような行動価値算出データの予想内部状態変化量ベクトルを、行動発現後の内部状態変化ベクトルから学習する学習方法について説明する。
上述したように、本実施形態に係るロボット装置は学習機能を有するため、行動価値算出データベースがユーザとのインタラクションや、外部環境に応じて随時更新される。したがって、ロボット装置の学習結果によっては、同じ外部刺激を受けても異なる行動を発現するなどユーザを飽きさせない行動生成が実現される。
このような行動価値算出データの学習を行なうためには教師信号が必要である。本実施形態では、行動を発現した結果から得られる実際の内部状態変化を教師信号として、外部刺激に対応する予想内部状態変化を学習する。そこで、前述の図4に示したように、行動選択制御システム100は、行動価値算出部120に接続された学習部140を備えている。
図13には、外部刺激が入力されてから行動価値算出データベースの学習を行なうまでの流れを示している。図5を参照しながら説明したように、行動選択部130は、行動価値算出データベース121を参照して、予想した予測内部状態変化ベクトルを生徒信号とし、行動価値ALを算出し、この値に基づき、例えば行動価値ALが最も大きい要素行動を選択する。選択された要素行動は、行動を出力し、ロボット装置は行動を発現する。
ロボット装置が実際に行動を発現した結果、図4に示す内部状態管理部91は、自身の内部状態を変化させる。すなわち、例えば行動発現後の時間経過に応じて内部状態を変更したり、行動の結果に応じて内部状態を変更したりする。具体的には、例えば、上述したように、内部状態「栄養状態」はバッテリの残量を基に決定され、内部状態「疲れ」は消費電力を基に決定されるものとすると、行動を発現した結果、バッテリの残量が減少することで内部状態「栄養状態」も減少し、また、行動を発現することにより消費された消費電力量の大きさに比例して内部状態「疲れ」が増大する。
こうして実際に行動を発現した結果、ロボット装置の内部状態が変化し、実際の行動発現前後の内部状態の変化量を求めることができる。そして、図13に示すように、行動発現後に得られた内部状態変化ベクトルdIntVが教師信号となり、学習部140にて行動発現前に予想される予想内部状態変化量ベクトルの学習が行なわれ、行動価値算出データベース121が学習に応じて更新される。
ここで入力された外部刺激が代表点上の値であるか否かで学習方法が異なる。先ず、ある選択された要素行動において、行動価値を算出するにあたって必要とした外部刺激が、代表点上の値であった場合、下記式(8)によって実際の内部状態変化量を基に代表点上の予想内部状態変化を更新する。
また、ある選択された要素行動において、行動価値を算出するに際して必要とした外部刺激が代表点以外の値の場合、外部刺激近傍の代表点、すなわち線形補間に使用した代表点における予想内部状態変化が学習対象となる。各外部刺激について、外部刺激と代表点までの距離の比が上記式(8)に乗じられ、予想内部状態変化を更新する。
図14及び図15には、1次元及び2次元外部刺激の予想内部状態変化の更新例をそれぞれ示している。図14に示すように、外部刺激Dnが入力され、外部刺激Dnが代表点上にない場合は、上述したように、外部刺激Dn近傍の代表点D1,D2を使用して線形補間されることで行動発現前の予想内部状態変化Inが求められる。そして、行動発現後に、実際の内部状態変化量(dIntV_Fatigure)が求められ、代表点D1,D2と外部刺激Dnとの間の距離と学習率γとから、代表点D1,D2における予想内部状態変化の学習が行われ、下記式(9−1)及び(9−2)に従って夫々代表点D1及びD2の予想内部状態変化が更新される。
また、2つの外部刺激が入力される場合には、図15に示したように、線形補間により行動発現前の外部刺激Enm(Dn,Wn)に対応する予想内部状態変化量Inmを求める際に使用した、入力される外部刺激近傍の代表点(D1,W1)(D1,W2)、(D2,W1)、(D2,W2)に対応する予想内部状態変化が、以下の式(10−1)乃至(10−4)により学習され更新される。すなわち、行動発現後に求められる実際の内部状態変化ベクトル、代表点と外部刺激との距離及び学習率γにより、学習が行なわれ、各代表点に対応する予想内部状態変化が更新される。
B−4.行動価値算出方法及び行動価値算出データベースの学習方法
次に、図5に示した行動価値算出部120における行動価値算出方法、及び図13に示した学習部140により発現された行動に応じて行動価値算出データベースを更新する方法について、図16及び図17に示すフローチャートを参照しながら説明する。
図16に示すように、先ず、図4に示す外部刺激認識部80により外部刺激が認識されると、これが行動価値算出部120に供給される。この際、例えば外部刺激認識部80からの通知により、内部状態管理部91から各内部状態が供給されるようになされている(ステップS1)。
次に、上述したように、供給された各内部状態から、例えば上記の式(1)などの関数を使用して対応する欲求値を算出することで、内部状態ベクトルIntVからモチベーション・ベクトルとなる欲求値ベクトルを算出する(ステップS2)。
また、行動価値算出部120は、供給された各内部状態から上記の式(5−1)、(5−2)などの関数を使用して対応する満足度を算出することで、内部状態ベクトルIntVから、満足度ベクトルSを算出する(ステップS3)。
一方、供給された外部刺激(外部刺激ベクトル)から、上述したように、行動を発現した結果、得られると予想される予想内部状態変化を求める(ステップS4)。そして、ステップS3と同様の関数を用いて、この予想内部状態変化に対応する予想満足度変化を求め(ステップS5)、得られた予想満足度変化と、ステップS3で求めた満足度ベクトルとから上記式(6)により、リリーシング・ベクトルを算出する(ステップS6)。
最後に、ステップS2にて求めたモチベーション・ベクトルと、ステップS6にて、求めたリリーシング・ベクトルとから、上記の式(7)より行動価値ALを算出する(ステップS7)。
なお、上記のステップS1乃至ステップS7では、外部刺激を認識する毎に行動価値算出部120において行動価値ALの算出を行なうものとして説明したが、例えば所定のタイミングで行動価値を算出するようにしてもよい。
その後、ステップS7にて算出された行動価値ALに基づいて、図17に示すように、行動選択部130がすべての要素行動に対する行動価値算出結果をモニタし、例えば最も行動価値ALが高い要素行動を選択することで、当該要素行動から行動が出力される(ステップS8)。要素行動の選択には、上述したように、Greedyの他に、Random、SoftMaxといった手法を採り入れることができる。
ロボット装置は、行動を発現することによって例えばバッテリの残量が変化し、これに基づき算出される内部状態が行動前に比べて変化する。また、行動を発現した際に使用された消費電力などに基づいて算出される内部状態が行動発現前に比べて変化する。図4に示した内部状態管理部91は、このような行動前後の内部状態の変化を算出し、学習部140に供給する(ステップS9)。学習部140は、上述したように、行動前後の内部状態の実際の変化と、行動価値算出データベースに保存されている予想内部状態変化とから、上記の式(9−1)、(9−2)又は(10−1)乃至(10−4)により、新しく予想内部状態変化を算出し、行動価値算出データベースを更新する(ステップS10)。
C.ロボット装置の制御システム
この項では、行動価値ALを算出して行動を出力する処理を行なう行動選択制御システムをロボット装置の制御システムに適用した具体例について詳細に説明する。
図18には、上述の行動選択制御システム100を含む制御システム10の機能構成を模式的に示している。図示のロボット装置1は、上述したように、外部刺激の認識結果や内部状態の変化に応じて、行動制御を行なうことができるものである。さらには、長期記憶機能を備え、外部刺激から内部状態の変化を連想記憶することにより、外部刺激の認識結果や内部状態の変化に応じて行動制御を行なうことができる。
すなわち、上述したように、例えば、カメラ15から入力された画像に対して処理された色情報、形情報、顔情報等であり、より具体的には、色、形、顔、3D一般物体、ハンドジェスチャー、動き、音声、接触、匂い、味等の構成要素からなる外部刺激と、ロボット装置の身体に基づいた本能や感情等の情動を指す内部状態とに応じて行動価値ALを算出し、行動を選択(生成)し、発現する。
内部状態の本能的要素は、例えば、疲れ(fatigue)、熱あるいは体内温度(temperature)、痛み(pain)、食欲あるいは飢え(hunger)、乾き(thirst)、愛情(affection)、好奇心(curiosity)、排泄(elimination)又は性欲(sexual)のうちの少なくとも1つである。また、情動的要素は、幸せ(happiness)、悲しみ(sadness)、怒り(anger)、驚き(surprise)、嫌悪(disgust)、恐れ(fear)、苛立ち(frustration)、退屈(boredom)、睡眠(somnolence)、社交性(gregariousness)、根気(patience)、緊張(tense)、リラックス(relaxed)、警戒(alertness)、罪(guilt)、悪意(spite)、誠実さ(loyalty)、服従性(submission)又は嫉妬(jealousy)などが挙げられる。
図示の制御システム10には、オブジェクト指向プログラミングを採り入れて実装することができる。この場合、各ソフトウェアは、データとそのデータに対する処理手続きとを一体化させた「オブジェクト」というモジュール単位で扱われる。また、各オブジェクトは、メッセージ通信と共有メモリを使ったオブジェクト間通信方法によりデータの受け渡しとInvokeを行なうことができる。
本実施形態に係る行動制御システム10は、外部環境(Environments)70を認識するために、視覚認識機能部81、聴覚認識機能部82、及び接触認識機能部83などからなる機能モジュールである上述の図4に示す外部刺激認識部80を備えている。
視覚認識機能部(Video)81は、例えば、CCDカメラのような画像入力装置を介して入力された撮影画像を基に、顔認識や色認識等の画像認識処理や特徴抽出を行なう。
聴覚認識機能部(Audio)82は、マイク等の音声入力装置を介して入力される音声データを音声認識して、特徴抽出したり、単語セット(テキスト)認識を行なったりする。
接触認識機能部(Tactile)83は、例えば機体の頭部等に内蔵された接触センサによるセンサ信号を認識して、「なでられた」とか「叩かれた」という外部刺激を認識する。
内部状態管理部(ISM:Internal Status Manager)91は、本能や感情といった数種類の情動を数式モデル化して管理する感情・本能モデルを有しており、上述の視覚認識機能部81、聴覚認識機能部82、及び接触認識機能部83によって認識された外部刺激(ES:ExternalStimula)に応じてロボット装置1の本能や情動といった内部状態を管理する。
この感情・本能モデルは、それぞれ認識結果と行動履歴を入力に持ち、夫々感情値と本能値を管理している。行動モデルは、これら感情値や本能値を参照することができる。
また、外部刺激の認識結果や内部状態の変化に応じて行動制御を行なうために、時間の経過とともに失われる短期的な記憶を行なう短期記憶部(STM:Short Term Memory)92と、情報を比較的長期間保持するための長期記憶部(LTM:Long Term Memory)93を備えている。短期記憶と長期記憶という記憶メカニズムの分類は神経心理学に依拠する。
短期記憶部92は、上述の視覚認識機能部81、聴覚認識機能部82及び接触認識機能部83によって外部環境から認識されたターゲットやイベントを短期間保持する機能モジュールである。例えば、図2に示すカメラ15からの入力画像を約15秒程度の短い期間だけ記憶する。
長期記憶部93は、物の名前等学習により得られた情報を長期間保持するために使用される。長期記憶部93は、例えば、ある行動記述モジュールにおいて外部刺激から内部状態の変化を連想記憶することができる。
また、本ロボット装置1の行動制御は、反射行動部(Reflexive Situated Behaviors Layer)103によって実現される「反射行動」と、状況依存行動階層(SBL:Situated Behaviors Layer)102によって実現される「状況依存行動」と、熟考行動階層(Deliberative Layer)101によって実現される「熟考行動」に大別される。
反射行動部103は、上述の視覚認識機能部81、聴覚認識機能部82、及び接触認識機能部83によって認識された外部刺激に応じて反射的な機体動作を実現する機能モジュールである。反射行動とは、基本的に、センサ入力された外部情報の認識結果を直接受けて、これを分類して、出力行動を直接決定する行動のことである。例えば、人間の顔を追いかけたり、うなずいたりといった振る舞いは反射行動として実装することが好ましい。
状況依存行動階層102は、短期記憶部92及び長期記憶部93の記憶内容や、内部状態管理部91によって管理される内部状態を基に、ロボット装置1が現在置かれている状況に即応した行動を制御する。
この状況依存行動階層102は、各行動(要素行動)毎にステートマシンを用意しており、それ以前の行動や状況に依存して、センサ入力された外部情報の認識結果を分類して、行動を機体上で発現する。また、状況依存行動階層102は、内部状態をある範囲に保つための行動(「ホメオスタシス行動」とも呼ぶ)も実現し、内部状態が指定した範囲内を越えた場合には、その内部状態を当該範囲内に戻すための行動が出現し易くなるようにその行動を活性化させる(実際には、内部状態と外部環境の両方を考慮した形で行動が選択される)。状況依存行動は、反射行動に比し、反応時間が遅い。この状況依存行動階層102が上述した図4に示す行動選択制御システム100における要素行動131、行動価値算出部120、行動選択部130に相当し、上述した如く、内部状態と外部刺激とから行動価値ALを算出し、これに基づき行動出力を行なう。
熟考行動階層101は、短期記憶部92及び長期記憶部93の記憶内容に基づいて、ロボット装置1の比較的長期にわたる行動計画等を行なう。熟考行動とは、与えられた状況あるいは人間からの命令により、推論やそれを実現するための計画を立てて行なわれる行動のことである。例えば、ロボット装置の位置と目標の位置から経路を探索することは熟考行動に相当する。このような推論や計画は、ロボット装置1がインタラクションを保つための反応時間よりも処理時間や計算負荷を要する(すなわち処理時間がかかる)可能性があるので、上記の反射行動や状況依存行動がリアルタイムで反応を返しながら、熟考行動は推論や計画を行なう。
熟考行動階層101、状況依存行動階層102、及び反射行動部103は、ロボット装置1のハードウェア構成に非依存の上位のアプリケーション・プログラムとして記述することができる。これに対し、ハードウェア依存層制御部(Configuration Dependent Actions And Reactions)104は、これら上位アプリケーション、即ち、行動記述モジュール(スキーマ)からの命令に応じて、関節アクチュエータの駆動等の機体のハードウェア(外部環境)を直接操作する。このような構成により、ロボット装置1は、制御プログラムに基づいて自己及び周囲の状況を判断し、使用者からの指示及び働きかけに応じて自律的に行動できる。
次に、行動制御システム10について更に詳細に説明する。図19は、本具体例における行動制御システム10のオブジェクト構成を示す模式図である。同図に示すように、視覚認識機能部81は、Face Detector114、Mulit Color Tracker113、Face Identify115という3つのオブジェクトで構成される。
Face Detector114は、画像フレーム中から顔領域を検出するオブジェクトであり、検出結果をFace Identify115に出力する。Mulit Color Tracker113は、色認識を行なうオブジェクトであり、認識結果をFace Identify115及びShort Term Memory(STM)92に出力する。また、Face Identify115は、検出された顔画像を手持ちの人物辞書で検索する等して人物の識別を行ない、顔画像領域の位置、大きさ情報とともに人物のID情報をSTM92に出力する。
聴覚認識機能部82は、Audio Recog111とSpeech Recog112という2つのオブジェクトで構成される。Audio Recog111は、マイクなどの音声入力装置からの音声データを受け取って、特徴抽出と音声区間検出を行なうオブジェクトであり、音声区間の音声データの特徴量及び音源方向をSpeech Recog112やSTM92に出力する。Speech Recog112は、Audio Recog111から受け取った音声特徴量と音声辞書及び構文辞書を使って音声認識を行なうオブジェクトであり、認識された単語のセットをSTM92に出力する。
触覚認識記憶部83は、接触センサからのセンサ入力を認識するTactile Sensor119というオブジェクトで構成され、認識結果はSTM92や内部状態を管理するオブジェクトであるInternal State Model(ISM)91に出力する。
STM92は、短期記憶部を構成するオブジェクトであり、上述の認識系の各オブジェクトによって外部環境から認識されたターゲットやイベントを短期間保持(例えばカメラ15からの入力画像を約15秒程度の短い期間だけ記憶する)する機能モジュールであり、STMクライアントであるSBL102に対して外部刺激の通知(Notify)を定期的に行なう。
LTM93は、長期記憶部を構成するオブジェクトであり、物の名前等学習により得られた情報を長期間保持するために使用される。LTM93は、例えば、ある行動記述モジュール(スキーマ)において外部刺激から内部状態の変化を連想記憶することができる。
ISM91は、内部状態管理部を構成するオブジェクトであり、本能や感情といった数種類の情動を数式モデル化して管理しており、上述の認識系の各オブジェクトによって認識された外部刺激(ES:External Stimula)に応じてロボット装置1の本能や情動といった内部状態を管理する。
SBL102は状況依存型行動階層を構成するオブジェクトである。SBL102は、STM92のクライアント(STMクライアント)となるオブジェクトであり、STM92からは定期的に外部刺激(ターゲットやイベント)に関する情報の通知(Notify)を受け取ると、スキーマ(Schema)すなわち実行すべき行動記述モジュールを決定する(後述)。
ReflexiveSBL103は、反射的行動部を構成するオブジェクトであり、上述した認識系の各オブジェクトによって認識された外部刺激に応じて反射的・直接的な機体動作を実行する。例えば、人間の顔を追いかけたり、うなずく、障害物の検出により咄嗟に避けたりといった振る舞いを行なう。
SBL102は外部刺激や内部状態の変化等の状況に応じた動作を選択する。これに対し、ReflexiveSBL103は、外部刺激に応じて反射的な動作を選択する。これら2つのオブジェクトによる行動選択は独立して行なわれるため、互いに選択された行動記述モジュール(スキーマ)を機体上で実行する場合に、ロボット装置1のハードウェア・リソースが競合して実現不可能なこともある。RM(Resource Manager)116というオブジェクトは、SBL102とReflexiveSBL103とによる行動選択時のハードウェアの競合を調停する。そして、調停結果に基づいて機体動作を実現する各オブジェクトに通知することにより機体が駆動する。
Sound Performer172、Motion Controller173、LEDController174は、機体動作を実現するオブジェクトである。Sound Performer172は、音声出力を行なうためのオブジェクトであり、RM116経由でSBL102から与えられたテキスト・コマンドに応じて音声合成を行ない、ロボット装置1の機体上のスピーカから音声出力を行なう。また、Motion Controller173は、機体上の各関節アクチュエータの動作を行なうためのオブジェクトであり、RM116経由でSBL102から手や脚等を動かすコマンドを受けたことに応答して、該当する関節角を計算する。また、LEDController174は、LED19の点滅動作を行なうためのオブジェクトであり、RM116経由でSBL102からコマンドを受けたことに応答してLED19の点滅駆動を行なう。
C−1.状況依存行動制御
次に、行動価値ALを算出し、発現する行動を選択する状況依存行動階層についてさらに詳細に説明する。図20には、状況依存行動階層(SBL)(但し、反射行動部を含む)による状況依存行動制御の形態を模式的に示している。
視覚認識機能部81、聴覚認識機能部82、及び接触認識機能部83からなる外部刺激認識部80における外部環境70の認識結果(センサ情報)182は、外部刺激183として状況依存行動階層(反射行動部103を含む)102aに与えられる。また、外部刺激認識部80による外部環境70の認識結果に応じた内部状態の変化184も状況依存行動階層102aに与えられる。そして、状況依存行動階層102aでは、外部刺激183や内部状態の変化184に応じて状況を判断して、行動選択を実現することができる。
状況依存行動階層102aでは、上述したように、外部刺激183や内部状態の変化184によって各行動記述モジュール(スキーマ)の行動価値ALを算出して、行動価値ALの大きさに応じてスキーマを選択して行動(動作)を実行する。行動価値ALの算出には、例えばライブラリを利用することにより、すべてのスキーマについて統一的な計算処理を行なうことができる。
このライブラリには、例えば上述したように、内部状態ベクトルから欲求値ベクトルを算出する関数、内部状態ベクトルから満足度ベクトルを算出する関数、及び外部刺激から予想内部状態変化ベクトルを予想するための行動評価データベースなどが保存されている。
C−2.スキーマ
図21には、状況依存行動階層102が複数のスキーマ(要素行動)132によって構成されている様子を模式的に示している。状況依存行動階層102は、上述した要素行動として、行動記述モジュールを有し、行動記述モジュール毎にステートマシンを用意しており、それ以前の行動(動作)や状況に依存して、センサ入力された外部情報の認識結果を分類し、動作を機体上で発現する。
要素行動となる行動記述モジュールは、外部刺激や内部状態に応じた状況判断を行なうMonitor機能と、行動実行に伴う状態遷移(ステートマシン)を実現するAction機能とを備えたスキーマ132として記述される。
状況依存行動階層102b(より厳密には、状況依存行動階層102のうち、通常の状況依存行動を制御する階層)は、複数のスキーマ132が階層的に連結されたツリー構造として構成され、外部刺激や内部状態の変化に応じてより最適なスキーマ131を統合的に判断して行動制御を行なうようになっている。このツリー131は、例えば動物行動学的(Ethological)な状況依存行動を数式化した行動モデルや、感情表現を実行するためのサブツリーなど、複数のサブツリー(又は枝)を含んでいる。
図22には、状況依存行動階層102におけるスキーマのツリー構造を模式的に示している。同図に示すように、状況依存行動階層102は、短期記憶部92から外部刺激の通知(Notify)を受けるルート・スキーマ2011、2021、2031を先頭に、抽象的な行動カテゴリから具体的な行動カテゴリに向かうように、階層毎にスキーマが配設されている。
例えば、ルート・スキーマの直近下位の階層では、「探索する(Investigate)」、「食べる(Ingestive)」、「遊ぶ(Play)」というスキーマ2012、2022、2032が配設される。そして、スキーマ2012「探索する(Investigate)」の下位には、「InvestigativeLocomotion」、「HeadinAirSniffing」、「InvestigativeSniffing」というより具体的な探索行動を記述した複数のスキーマ2013が配設されている。
同様に、スキーマ2022「食べる(Ingestive)」の下位には「Eat」や「Drink」などのより具体的な飲食行動を記述した複数のスキーマ2023が配設され、スキーマ2032「遊ぶ(Play)」の下位には「PlayBowing」、「PlayGreeting」、「PlayPawing」などのより具体的な遊ぶ行動を記述した複数のスキーマ2033が配設されている。
図示の通り、各スキーマは外部刺激と内部状態を入力している。また、各スキーマは、少なくともMonitor関数とAction関数を備えている。
図31には、スキーマの内部構成を模式的に示している。同図に示すように、スキーマは、所定の事象の発生に従がって状態(又はステート)が移り変わっていく状態遷移モデル(ステートマシン)の形式で機体動作を記述したAction関数と、外部刺激や内部状態に応じてAction関数の各状態を評価して活動度レベル値として返すMonitor関数と、スキーマの状態を記憶管理する状態管理部で構成されている。図示の通り、状態管理部は、Action関数のステートマシンを、READY(準備完了)、ACTIVE(活動中),SLEEP(待機中)いずれかの状態としてスキーマの状態を記憶管理している。
Monitor関数は、外部刺激と内部状態に応じて当該スキーマの活動度レベルである行動価値ALを算出する関数である。図22に示すようなツリー構造を構成する場合、上位(親)のスキーマは外部刺激と内部状態を引数として下位(子供)のスキーマのMonitor関数をコールすることができ、子供のスキーマはAL値を返り値とする。また、スキーマは自分のAL値を算出するために、さらに子供のスキーマのMonitor関数をコールすることができる。そして、ルートのスキーマには各サブツリーからのAL値が返されるので、外部刺激と内部状態の変化に応じた最適なスキーマすなわち行動を統合的に判断することができる。
例えばAL値が最も高いスキーマを選択したり、AL値が所定の閾値を越えた2以上のスキーマを選択して並列的に行動実行したりするようにしてもよい(但し、並列実行するときは各スキーマ同士でハードウェア・リソースの競合がないことを前提とする)。
図32には、Monitor関数の内部構成を模式的に示している。同図に示すように、Monitor関数は、当該スキーマで記述されている行動を誘発する評価値を活動度レベルとして算出する行動誘発評価値演算器と、使用する機体リソースを特定する使用リソース演算器を備えている。図31で示す例では、Monitor関数は、スキーマすなわち行動モジュールの管理を行なう行動状態制御部(仮称)からコールされると、Action関数のステートマシンを仮想実行して、行動誘発評価値(すなわち活動度レベル)と使用リソースを演算して、これを返すようになっている。
また、Action関数は、スキーマ自身が持つ行動を記述したステートマシン(又は状態遷移モデル)(後述)を備えている。図22に示すようなツリー構造を構成する場合、親スキーマは、Action関数をコールして、子供スキーマの実行を開始したり中断させたりすることができる。本実施形態では、ActionのステートマシンはReadyにならないと初期化されない。言い換えれば、中断しても状態はリセットされず、スキーマが実行中の作業データを保存することから、中断再実行が可能である(後述)。
図31で示す例では、スキーマすなわち行動モジュールの管理を行なう行動状態制御部(仮称)は、Monitor関数からの戻り値に基づいて、実行すべき行動を選択し、該当するスキーマのAction関数をコールし、あるいは状態管理部に記憶されているスキーマの状態の移行を指示する。例えば行動誘発評価値としての活動度レベルが最も高いスキーマを選択したり、リソースが競合しないように優先順位に従って複数のスキーマを選択したりする。また、行動状態制御部は、より優先順位の高いスキーマが起動し、リソースの競合が生じた場合、優先順位が下位のスキーマの状態をACTIVEからSLEEPに退避させ、競合状態が解かれるとACTIVEに回復するなど、スキーマの状態を制御する。
行動状態制御部は、図33に示すように、状況依存行動階層102において1つだけ配設し、同階層102を構成するすべてのスキーマを一元的に集中管理するようにしてもよい。図33に示す例では、行動状態制御部は、行動評価部と、行動選択部と、行動実行部を備えている。
行動評価部は、例えば所定の制御周期で各スキーマのMonitor関数をコールし、各々の活動度レベルと使用リソースを取得する。
行動選択部は、各スキーマによる行動制御と機体リソースの管理を行なう。例えば、集計された活動度レベルの高い順にスキーマを選択するとともに、使用リソースが競合しないように2以上のスキーマを同時に選択する。
行動実行部は、選択されたスキーマのAction関数に行動実行命令を発行したり、スキーマの状態(READY,ACTIVE,SLEEP)を管理して、スキーマの実行を制御したりする。例えば、より優先順位の高いスキーマが起動し、リソースの競合が生じた場合、優先順位が下位のスキーマの状態をACTIVEからSLEEPに退避させ、競合状態が解かれるとACTIVEに回復する。
あるいは、このような行動状態制御部の機能を、状況依存行動階層108内のスキーマ毎に配置するようにしてもよい。例えば、図22に示したように、スキーマがツリー構造を形成している場合(図34を参照のこと)、上位(親)のスキーマの行動状態制御は、外部刺激と内部状態を引数として下位(子供)のスキーマのMonitor関数をコールし、子供のスキーマから活動度レベルと使用リソースを返り値として受け取る。また、子供のスキーマは、自分の活動度レベルと使用リソースを算出するために、さらに子供のスキーマのMonitor関数をコールする。そして、ルートのスキーマの行動状態制御部には、各サブツリーからの活動度レベルと使用リソースが返されるので、外部刺激と内部状態の変化に応じた最適なスキーマすなわち行動を統合的に判断して、Action関数をコールして、子供スキーマの実行を開始したり中断させたりする。本実施形態では、ActionのステートマシンはReadyにならないと初期化されない。言い換えれば、中断しても状態はリセットされず、スキーマが実行中の作業データを保存することから、中断再実行が可能である。
図23には、状況依存行動階層102において通常の状況依存行動を制御するためのメカニズムを模式的に示している。同図に示すように、状況依存行動階層(SBL)102には、短期記憶部(STM)92から外部刺激183が入力(Notify)されるとともに、内部状態管理部91から内部状態の変化184が入力される。
状況依存行動階層102は、例えば動物行動学的な状況依存行動を数式化した行動モデルや、感情表現を実行するためのサブツリーなど、複数のサブツリーで構成されており、ルート・スキーマは、外部刺激183の通知(Notify)に応答して、各サブツリーのMonitor関数をコールし、その返り値としての行動価値ALを参照して、統合的な行動選択を行ない、選択された行動を実現するサブツリーに対してAction関数をコールする。
また、状況依存行動階層102において決定された状況依存行動は、リソース・マネージャRM116により反射行動部103による反射的行動とのハードウェア・リソースの競合の調停を経て、機体動作(Motion Controller)に適用される。
また、反射的行動部103は、上述した認識系の各オブジェクトによって認識
された外部刺激183に応じて、例えば、障害物の検出により咄嗟に避ける等、反射的・直接的な機体動作を実行する。このため、図22に示す通常の状況依存行動を制御する場合とは相違し、図21に示すように、認識系の各オブジェクトからの信号を直接入力する複数のスキーマ133が階層化されずに並列的に配置されている。
図24には、反射行動部103におけるスキーマの構成を模式的に示している。同図に示すように、反射行動部103には、聴覚系の認識結果に応答して動作するスキーマとしてAvoid Big Sound204、Face to Big Sound205及びNodding Sound209、視覚系の認識結果に応答して動作するスキーマとしてFace to Moving Object206及びAvoid Moving Object207、並びに、触覚系の認識結果に応答して動作するスキーマとして手を引っ込める208が、それぞれ対等な立場で(並列的に)配設されている。
図示の通り、反射的行動を行なう各スキーマは外部刺激183を入力に持つ。また、各スキーマは、少なくともMonitor関数とAction関数を備えている。Monitor関数は、外部刺激183に応じて当該スキーマの行動価値ALを算出して、これに応じて該当する反射的行動を発現すべきかどうかが判断される。また、Action関数は、スキーマ自身が持つ反射的行動を記述したステートマシン(後述)を備えており、コールされることにより、該当する反射的行動を発現するとともにActionの状態を遷移させていく。
図25には、反射行動部103において反射的行動を制御するためのメカニズムを模式的に示している。図24にも示したように、反射行動部103内には、反応行動を記述したスキーマや、即時的な応答行動を記述したスキーマが並列的に存在している。認識系の機能モジュール80を構成する各オブジェクトから認識結果が入力されると、対応する反射行動スキーマがAonitor関数により行動価値ALを算出し、その値に応じてActionを軌道すべきかどうかが判断される。そして、反射行動部103において起動が決定された反射的行動は、リソース・マネージャRM116により状況依存行動階層102による状況依存行動とのハードウェア・リソースの競合の調停を経て、機体動作(Motion Controller173)に適用される。
このような状況依存行動階層102及び反射行動部103を構成するスキーマは、例えばC++言語ベースで記述される「クラス・オブジェクト」として記述することができる。図26には、状況依存行動階層102において使用されるスキーマのクラス定義を模式的に示している。同図に示されている各ブロックはそれぞれ1つのクラス・オブジェクトに相当する。
図示の通り、状況依存行動階層(SBL)102は、1以上のスキーマと、SBL102の入出力イベントに対してIDを割り振るEvent Data Handler(EDH)211と、SBL102内のスキーマを管理するSchema Handler(SH)212と、外部オブジェクト(STMやLTM、リソース・マネージャ、認識系の各オブジェクトなど)からデータを受信する1以上のReceive Data Handler(RDH)213と、外部オブジェクトにデータを送信する1以上のSend Data Handler(SDH)214を備えている。
Schema Handler212は、状況依存行動階層(SBL)102や反射行動部103を構成する各スキーマやツリー構造等の情報(SBLのコンフィギュレーション情報)をファイルとして保管している。例えばシステムの起動時等に、Schema Handler212は、このコンフィギュレーション情報ファイルを読み込んで、図22に示したような状況依存行動階層102のスキーマ構成を構築(再現)して、メモリ空間上に各スキーマのエンティティをマッピングする。
各スキーマは、スキーマのベースとして位置付けられるOpenR_Guest215を備えている。OpenR_Guest215は、スキーマが外部にデータを送信するためのDsubject216、並びに、スキーマが外部からデータを受信するためのDObject217というクラス・オブジェクトをそれぞれ1以上備えている。例えば、スキーマが、SBL102の外部オブジェクト(STMやLTM、認識系の各オブジェクト等)にデータを送るときには、Dsubject216はSend Data Handler214に送信データを書き込む。また、DObject217は、SBL102の外部オブジェクトから受信したデータをReceive Data Handler213から読み取ることができる。
Schema Manager218及びSchema Base219はともに、OpenR_Guest215を継承したクラス・オブジェクトである。クラス継承は、元のクラスの定義を受け継ぐことであり、この場合、OpenR_Guest215で定義されているDsubject216やDObject217などのクラス・オブジェクトをSchema Manager Base218やSchema Base219も備えていることを意味する(以下、同様)。例えば図22に示すように複数のスキーマがツリー構造になっている場合、Schema Manager Base218は、子供のスキーマのリストを管理するクラス・オブジェクトSchema List220を持ち(子供のスキーマへのポインタを持ち)、子供スキーマの関数をコールすることができる。また、Schema Base219は、親スキーマへのポインタを持ち、親スキーマからコールされた関数の返り値を戻すことができる。
Schema Base219は、State Machine221及びPronome222という2つのクラス・オブジェクトを持つ。State Machine221は当該スキーマの行動(Action関数)についてのステートマシンを管理している。親スキーマは子供スキーマのAction関数のステートマシンを切り替える(状態遷移させる)ことができる。また、Pronome222には、当該スキーマが行動(Action関数)を実行又は適用するターゲットを代入する。後述するように、スキーマはPronome222に代入されたターゲットによって占有され、行動(動作)が終了(完結、異常終了等)するまでスキーマは解放されない。新規のターゲットのために同じ行動を実行するためには同じクラス定義のスキーマをメモリ空間上に生成する。この結果、同じスキーマをターゲット毎に独立して実行することができ(個々のスキーマの作業データが干渉し合うことはなく)、後述する行動のReentrance性が確保される。
Parent Schema Base223は、Schema Manager218及びSchema Base219を多重継承するクラス・オブジェクトであり、スキーマのツリー構造において、当該スキーマ自身についての親スキーマ及び子供スキーマすなわち親子関係を管理する。
Intermediate Parent Schema Base224は、Parent Schema Base223を継承するクラス・オブジェクトであり、各クラスのためのインターフェース変換を実現する。また、Intermediate Parent Schema Base224は、Schema Status Info225を持つ。このSchema Status Info225は、当該スキーマ自身のステートマシンを管理するクラス・オブジェクトである。親スキーマは、子供スキーマのAction関数をコールすることによってそのステートマシンの状態を切り換えることができる。また、子供スキーマのMonitor関数をコールしてそのステートマシンの常態に応じた行動価値ALを問うことができる。但し、スキーマのステートマシンは、前述したAction関数のステートマシンとは異なるということを留意されたい。
And Parent Schema226、Num Or Parent Schema227、Or Parent Schema228は、Intermediate Parent Schema Base224を継承するクラス・オブジェクトである。And Parent Schema226は、同時実行する複数の子供スキーマへのポインタを持つ。Or Parent Schema228は、いずれか択一的に実行する複数の子供スキーマへのポインタを持つ。また、Num Or Parent Schema227は、所定数のみを同時実行する複数の子供スキーマへのポインタを持つ。
Parent Schema229は、これらAnd Parent Schema226、Num Or Parent Schema227、Or Parent Schema228を多重継承するクラス・オブジェクトである。
図27には、状況依存行動階層(SBL)102内のクラスの機能的構成を模式的に示している。
状況依存行動階層(SBL)102は、STMやLTM、リソース・マネージャ、認識系の各オブジェクトなど外部オブジェクトからデータを受信する1以上のReceive Data Handler(RDH)213と、外部オブジェクトにデータを送信する1以上のSend Data Handler(SDH)214とを備えている。
Event Data Handler(EDH)211は、SBL102の入出力イベントに対してIDを割り振るためのクラス・オブジェクトであり、RDH213やSDH214から入出力イベントの通知を受ける。
Schema Handler212は、スキーマを管理するためのクラス・オブジェクトであり、SBL102を構成するスキーマのコンフィギュレーション情報をファイルとして保管している。例えばシステムの起動時などに、Schema Handler212は、このコンフィギュレーション情報ファイルを読み込んで、SBL102内のスキーマ構成を構築する。
各スキーマは、図26に示したクラス定義に従って生成され、メモリ空間上にエンティティがマッピングされる。各スキーマは、OpenR_Guest215をベースのクラス・オブジェクトとし、外部にデータ・アクセスするためのDSubject216やDObject217などのクラス・オブジェクトを備えている。
スキーマが主に持つ関数とステートマシンを以下に示しておく。以下の関数は、Schema Base219で記述されている。
ActivationMonitor():スキーマがReady時にActiveになるための評価関数
Actions():Active時の実行用ステートマシン
Goal():Active時にスキーマがGoalに達したかを評価する関数
Fail():Active時にスキーマがfail状態かを判定する関数
SleepActions():Sleep前に実行されるステートマシン
SleepMonitor():Sleep時にResumeするための評価関数
ResumeActions():Resume前にResumeするためのステートマシン
DestroyMonitor():Sleep時にスキーマがfail状態か判定する評価関数
MakePronome():ツリー全体のターゲットを決定する関数
C−3.状況依存行動階層の機能
状況依存行動階層(SBL)102は、短期記憶部92及び長期記憶部93の記憶内容や、内部状態管理部91によって管理される内部状態を基に、ロボット装置1が現在置かれている状況に即応した動作を制御する。
前項で述べたように、本実施形態に係る状況依存行動階層102は、スキーマのツリー構造(図22を参照のこと)で構成されている。各スキーマは、自分の子供と親の情報を知っている状態で独立性を保っている。このようなスキーマ構成により、状況依存行動階層102は、Concurrentな評価、Concurrentな実行、Preemption、Reentrantという主な特徴を持っている。以下、これらの特徴について詳解する。
C−3−1.Concurrentな評価:
行動記述モジュールとしてのスキーマは外部刺激や内部状態の変化に応じた状況判断を行なうMonitor機能を備えていることは既に述べた。Monitor機能は、スキーマがクラス・オブジェクトSchema BaseでMonitor関数を備えていることにより実装されている。Monitor関数とは、外部刺激と内部状態に応じて当該スキーマの行動価値ALを算出する関数である。
図22に示したようなツリー構造を構成する場合、上位(親)のスキーマは外部刺激183と内部状態の変化184を引数として下位(子供)のスキーマのMonitor関数をコールすることができ、子供のスキーマは行動価値ALを返り値とする。また、スキーマは自分の行動価値ALを算出するために、更に子供のスキーマのMonitor関数をコールすることができる。そして、ルートのスキーマ2011〜2031には各サブツリーからの行動価値ALが返されるので、外部刺激183と内部状態の変化184に応じた最適なスキーマすなわち動作を統合的に判断することができる。
このようにツリー構造になっていることから、外部刺激183と内部状態の変化184による各スキーマの評価は、まずツリー構造の下から上に向かってConcurrentに行なわれる。すなわち、スキーマに子供スキーマがある場合には、選択した子供のMonitor関数をコールしてから、自身のMonitor関数を実行する。次いで、ツリー構造の上から下に向かって評価結果としての実行許可を渡していく。評価と実行は、その動作が用いるリソースの競合を解きながら行なわれる。
本実施形態に係る状況依存行動階層102は、スキーマのツリー構造を利用して、並列的に行動の評価を行なうことができるので、外部刺激183や内部状態の変化184などの状況に対しての適応性がある。また、評価時には、ツリー全体に関しての評価を行ない、このとき算出される行動価値ALによりツリーが変更されるので、スキーマすなわち実行する動作を動的にプライオリタイズすることができる。
C−3−2.Concurrentな実行:
ルートのスキーマには各サブツリーからの行動価値ALが返されるので、外部刺激183と内部状態の変化184に応じた最適なスキーマすなわち動作を統合的に判断することができる。例えば行動価値ALが最も高いスキーマを選択したり、行動価値ALが所定の閾値を越えた2以上のスキーマを選択して並列的に行動実行したりするようにしてもよい(但し、並列実行するときは各スキーマどうしでハードウェア・リソースの競合がないことを前提とする)。
選択され、実行許可をもらったスキーマは実行される。すなわち、実際にそのスキーマは更に詳細の外部刺激183や内部状態の変化184を観測して、コマンドを実行する。実行に関しては、ツリー構造の上から下に向かって順次すなわちConcurrentに行なわれる。即ち、スキーマに子供スキーマがある場合には、子供のActions関数を実行する。
Action関数は、スキーマ自身が持つ行動(動作)を記述したステートマシンを備えている。図22に示したようなツリー構造を構成する場合、親スキーマは、Action関数をコールして、子供スキーマの実行を開始したり中断させたりすることができる。
本実施形態に係る状況依存行動階層(SBL)102は、スキーマのツリー構造を利用して、リソースが競合しない場合には、余ったリソースを使う他のスキーマを同時に実行することができる。但し、Goalまでに使用するリソースに対して制限を加えないと、ちぐはぐな行動出現が起きる可能性がある。状況依存行動階層102において決定された状況依存行動は、リソース・マネージャにより反射行動部(ReflexiveSBL)103による反射的行動とのハードウェア・リソースの競合の調停を経て、機体動作(Motion Controller)に適用される。
C−3−3.Preemption:
1度実行に移されたスキーマであっても、それよりも重要な(優先度の高い)行動があれば、スキーマを中断してそちらに実行権を渡さなければならない。また、より重要な行動が終了(完結又は実行中止等)したら、元のスキーマを再開して実行を続けることも必要である。
このような優先度に応じたタスクの実行は、コンピュータの世界におけるOS(オペレーティング・システム)のPreemptionと呼ばれる機能に類似している。OSでは、スケジュールを考慮するタイミングで優先度のより高いタスクを順に実行していくという方針である。
これに対し、本実施形態に係るロボット装置1の制御システム10は、複数のオブジェクトにまたがるため、オブジェクト間での調停が必要になる。例えば反射行動を制御するオブジェクトである反射行動部103は、上位の状況依存行動を制御するオブジェクトである状況依存行動階層102の行動評価を気にせずに物を避けたり、バランスをとったりする必要がある。これは、実際に実行権を奪い取り実行を行なう訳であるが、上位の行動記述モジュール(SBL)に、実行権利が奪い取られたことを通知して、上位はその処理を行なうことによってPreemptiveな能力を保持する。
また、状況依存行動層102内において、外部刺激183と内部状態の変化184に基づく行動価値ALの評価の結果、あるスキーマに実行許可がなされたとする。更に、その後の外部刺激183と内部状態の変化184に基づく行動価値ALの評価により、別のスキーマの重要度の方がより高くなったとする。このような場合、実行中のスキーマのActions関数を利用してSleep状態にして中断することにより、Preemptiveな行動の切り替えを行なうことができる。
実行中のスキーマのActions()の状態を保存して、異なるスキーマのActions()を実行する。また、異なるスキーマのActions()が終了した後、中断されたスキーマのActions()を再度実行することができる。
また、実行中のスキーマのActions()を中断して、異なるスキーマに実行権が移動する前に、SleepActions()を実行する。例えば、ロボット装置1は、対話中にサッカーボールを見つけると、「ちょっと待ってね」と言って、サッカーすることができる。
C−3−4.Reentrant:
状況依存行動階層102を構成する各スキーマは、一種のサブルーチンである。スキーマは、複数の親からコールされた場合には、その内部状態を記憶するために、それぞれの親に対応した記憶空間を持つ必要がある。
これは、コンピュータの世界では、OSが持つReentrant性に類似しており、本明細書ではスキーマのReentrant性と呼ぶ。図27に示したように、スキーマはクラス・オブジェクトで構成されており、クラス・オブジェクトのエンティティすなわちインスタンスをターゲット(Pronome)毎に生成することによりReentrant性が実現される。
スキーマのReentrant性について、図28を参照しながらより具体的に説明する。Schema Handler212は、スキーマを管理するためのクラス・オブジェクトであり、SBL102を構成するスキーマのコンフィギュレーション情報をファイルとして保管している。システムの起動時に、Schema Handler212は、このコンフィギュレーション情報ファイルを読み込んで、SBL102内のスキーマ構成を構築する。図28に示す例では、Eat221やDialog222などの行動(動作)を規定するスキーマのエンティティがメモリ空間上にマッピングされているとする。
ここで、外部刺激183と内部状態の変化184に基づく行動価値ALの評価により、スキーマDialog222に対してAというターゲット(Pronome)が設定されて、Dialog222が人物Aとの対話を実行するようになったとする。
そこに、人物Bがロボット装置1と人物Aとの対話に割り込み、その後、外部刺激183と内部状態の変化184に基づく行動価値ALの評価を行なった結果、Bとの対話を行なうスキーマ223の方がより優先度が高くなったとする。
このような場合、Schema Handler212は、Bとの対話を行なうためのクラス継承した別のDialogエンティティ(インスタンス)をメモリ空間上にマッピングする。別のDialogエンティティを使用して、先のDialogエンティティとは独立して、Bとの対話を行なうことから、Aとの対話内容は破壊されずに済む。従って、DialogAはデータの一貫性を保持することができ、Bとの対話が終了すると、Aとの対話を中断した時点から再開することができる。
Readyリスト内のスキーマは、その対象物(外部刺激183)に応じて評価すなわち行動価値ALの計算が行なわれ、実行権が引き渡される。その後、Readyリスト内に移動したスキーマのインスタンスを生成して、これ以外の対象物に対して評価を行なう。これにより、同一のスキーマをactive又はsleep状態にすることができる。
以上のような制御システムを実現する制御プログラムは、上述したように、予めフラッシュROM23に格納されており、ロボット装置1の電源投入初期時において読み出される。このようにしてこのロボット装置1においては、自己及び周囲の状況や、使用者からの指示及び働きかけに応じて自律的に行動し得るようになされている。