図1を参照して、この実施例のシミュレーションシステム10は、ロボット12、ロボット12を遠隔操作する操作装置14およびロボット12をシミュレートしたロボットエージェントや人(歩行者)エージェントをシミュレーションするシミュレーション装置16含む。シミュレーションシステム10において、ロボット12を除いて、1台または2台以上のコンピュータ(プロセサ)によって実現される。
この実施例のロボット12は、たとえば図2に示すコミュニケーションロボットのように、人との共存環境で活動するロボットである。このようなロボット12は環境の中に存在する人の行動に影響を受けるので、この実施例のシミュレーション装置16では、ロボット12の行動をロボットアプリケーションプログラム(ロボット行動決定プログラム)に従ってシミュレーションする際に、人の行動もシミュレーションすることによって、ロボット12のための安全なロボットアプリケーションプログラムの開発を支援する。
ここで、図2および図3を参照して、この発明の理解に必要な範囲でロボット12の構成について説明する。ロボット12は台車30を含み、台車30の下面にはロボット12を移動させる2つの車輪32および1つの従輪34が設けられる。2つの車輪32は車輪モータ36(図3参照)によってそれぞれ独立に駆動され、台車30すなわちロボット12を前後左右の任意方向に動かすことができる。
台車30の上には、円柱形のセンサ取り付けパネル38が設けられ、このセンサ取り付けパネル38には、多数の距離センサ40が取り付けられる。これらの距離センサ40は、たとえば赤外線や超音波などを用いてロボット12の周囲の物体(人や障害物など)との距離を測定するものである。
センサ取り付けパネル38の上には、胴体42が直立して設けられる。また、胴体42の前方中央上部(人の胸に相当する位置)には、上述した距離センサ40がさらに設けられ、ロボット12の前方の、主として人との距離を計測する。また、胴体42には、その側面側上端部のほぼ中央から伸びる支柱44が設けられ、支柱44の上には、全方位カメラ46が設けられる。全方位カメラ46は、ロボット12の周囲を撮影するものであり、後述する眼カメラ70とは区別される。この全方位カメラ46としては、たとえばCCDやCMOSのような固体撮像素子を用いるカメラを採用することができる。
胴体42の両側面上端部(人の肩に相当する位置)には、それぞれ、肩関節48Rおよび肩関節48Lによって、上腕50Rおよび上腕50Lが設けられる。図示は省略するが、肩関節48Rおよび肩関節48Lは、それぞれ、直交する3軸の自由度を有する。すなわち、肩関節48Rは、直交する3軸のそれぞれの軸廻りにおいて上腕50Rの角度を制御できる。肩関節48Rの或る軸(ヨー軸)は、上腕50Rの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節48Lは、直交する3軸のそれぞれの軸廻りにおいて上腕50Lの角度を制御できる。肩関節48Lの或る軸(ヨー軸)は、上腕50Lの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。
また、上腕50Rおよび上腕50Lのそれぞれの先端には、肘関節52Rおよび肘関節52Lが設けられる。図示は省略するが、肘関節52Rおよび肘関節52Lは、それぞれ1軸の自由度を有し、この軸(ピッチ軸)の軸回りにおいて前腕54Rおよび前腕54Lの角度を制御できる。
前腕54Rおよび前腕54Lのそれぞれの先端には、人の手に相当するハンド56Rおよびハンド56Lがそれぞれ設けられる。これらのハンド56Rおよび56Lは、詳細な図示は省略するが、開閉可能に構成され、それによってロボット12は、ハンド56Rおよび56Lを用いて物体を把持または挟持することができる。ただし、ハンド56R、56Lの形状は実施例の形状に限らず、人の手に酷似した形状や機能を持たせるようにしてもよい。
また、図示は省略するが、台車30の前面、肩関節48Rと肩関節48Lとを含む肩に相当する部位、上腕50R、上腕50L、前腕54R、前腕54L、ハンド56Rおよびハンド56Lには、それぞれ、接触センサ58(図3で包括的に示す)が設けられる。台車30の前面の接触センサ58は、台車30への人間や他の障害物の接触を検知する。したがって、ロボット12は、その自身の移動中に障害物との接触が有ると、それを検知し、直ちに車輪32の駆動を停止してロボット12の移動を急停止させることができる。また、その他の接触センサ58は、当該各部位に触れたかどうかを検知する。
胴体42の中央上部(人の首に相当する位置)には首関節60が設けられ、さらにその上には頭部62が設けられる。図示は省略するが、首関節60は、3軸の自由度を有し、3軸の各軸廻りに角度制御可能である。或る軸(ヨー軸)はロボット12の真上(鉛直上向き)に向かう軸であり、他の2軸(ピッチ軸、ロール軸)は、それぞれ、それと異なる方向で直交する軸である。
頭部62には、人の口に相当する位置に、スピーカ64が設けられる。スピーカ64は、ロボット12が、それの周辺の人に対して音声によってコミュニケーションをとるために用いられる。また、人の耳に相当する位置には、マイク66Rおよびマイク66Lが設けられる。以下、右のマイク66Rと左のマイク66Lとをまとめてマイク66ということがある。マイク66は、周囲の音、とりわけコミュニケーションを実行する対象である人間の音声を取り込む。
さらに、人の目に相当する位置には、右の眼球部68Rおよび左の眼球部68Lが設けられる。右の眼球部68Rおよび左の眼球部68Lは、それぞれ右の眼カメラ70Rおよび左の眼カメラ70Lを含む。以下、右の眼球部68Rと左の眼球部68Lとをまとめて眼球部68ということがある。また、右の眼カメラ70Rと左の眼カメラ70Lとをまとめて眼カメラ70ということがある。
眼カメラ70は、ロボット12に接近した人の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。この実施例では、ロボット12は、この眼カメラ70からの映像信号によって、人の左右両目のそれぞれの視線方向(ベクトル)を検出する。
また、眼カメラ70は、上述した全方位カメラ46と同様のカメラを用いることができる。たとえば、眼カメラ70は、眼球部68内に固定され、眼球部68は、眼球支持部(図示せず)を介して頭部62内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、2軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この2軸の一方は、頭部62の上に向かう方向の軸(ヨー軸)であり、他方は、一方の軸に直交しかつ頭部62の正面側(顔)が向く方向に直行する方向の軸(ピッチ軸)である。眼球支持部がこの2軸の各軸廻りに回転されることによって、眼球部68ないし眼カメラ70の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ64、マイク66および眼カメラ70の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
このように、この実施例のロボット12は、車輪32の独立2軸駆動、肩関節48の3自由度(左右で6自由度)、肘関節52の1自由度(左右で2自由度)、首関節60の3自由度および眼球支持部の2自由度(左右で4自由度)の合計17自由度を有する。
図3はロボット12の電気的な構成を示すブロック図である。この図3を参照して、ロボット12は、1つまたは2以上のプロセサ80を含む。プロセサ80は、バス82を介して、メモリ84、モータ制御ボード86、センサ入力/出力ボード88および音声入力/出力ボード90に接続される。
メモリ84は、図示は省略をするが、ROM、HDDおよびRAMを含む。ROMおよびHDDには、各種プログラムが予め記憶される。
モータ制御ボード86は、たとえばDSPで構成され、各腕や首関節60および眼球部68などの各軸モータの駆動を制御する。すなわち、モータ制御ボード86は、プロセサ80からの制御データを受け、右眼球部68Rの2軸のそれぞれの角度を制御する2つのモータ(図3では、まとめて「右眼球モータ92」と示す)の回転角度を制御する。同様にして、モータ制御ボード86は、プロセサ80からの制御データを受け、左眼球部68Lの2軸のそれぞれの角度を制御する2つのモータ(図3では、まとめて「左眼球モータ94」と示す)の回転角度を制御する。
また、モータ制御ボード86は、プロセサ80からの制御データを受け、肩関節48Rの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Rの角度を制御する1つのモータとの計4つのモータ(図3では、まとめて「右腕モータ96」と示す)の回転角度を制御する。同様にして、モータ制御ボード86は、プロセサ80からの制御データを受け、肩関節48Lの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Lの角度を制御する1つのモータとの計4つのモータ(図3では、まとめて「左腕モータ98」と示す)の回転角度を制御する。
さらに、モータ制御ボード86は、プロセサ80からの制御データを受け、首関節60の直交する3軸のそれぞれの角度を制御する3つのモータ(図3では、まとめて「頭部モータ100」と示す)の回転角度を制御する。そして、モータ制御ボード86は、プロセサ80からの制御データを受け、車輪32を駆動する2つのモータ(図3では、まとめて「車輪モータ36」と示す)の回転角度を制御する。
モータ制御ボード86にはさらにハンドアクチュエータ101が結合され、モータ制御ボード86は、プロセサ80からの制御データを受け、ハンド56R、56Lの開閉を制御する。
センサ入力/出力ボード88は、モータ制御ボード86と同様に、DSPで構成され、各センサからの信号を取り込んでプロセサ80に与える。すなわち、距離センサ40のそれぞれからの反射時間に関するデータがこのセンサ入力/出力ボード88を通じてプロセサ80に入力される。また、全方位カメラ46からの映像信号が、必要に応じてセンサ入力/出力ボード88で所定の処理を施してからプロセサ80に入力される。眼カメラ70からの映像信号も、同様にして、プロセサ80に入力される。また、上述した複数の接触センサ58(図3では、まとめて「接触センサ58」と示す)からの信号がセンサ入力/出力ボード88を介してプロセサ80に与えられる。音声入力/出力ボード90もまた、同様に、DSPで構成され、プロセサ80から与えられる音声合成データに従った音声または声がスピーカ64から出力される。また、マイク66からの音声入力が、音声入力/出力ボード90を介してプロセサ80に与えられる。
また、プロセサ80は、バス82を介して通信LANボード102に接続される。通信LANボード102は、たとえばDSPで構成され、プロセサ80から与えられた送信データを無線通信モジュール104に与え、無線通信モジュール104は送信データを、ネットワークを介してサーバ(図示せず)等に送信する。また、通信LANボード102は、無線通信モジュール104を介してデータを受信し、受信したデータをプロセサ80に与える。
図1に戻って、操作装置14は、基本的には1または2以上のコンピュータまたはプロセサによって構成され、そのプロセサのメモリ(図示せず)にロボットアプリケーションプログラム18が設定されていて、そのロボットアプリケーションプログラムがコンピュータからたとえば無線でロボット12またはシミュレーション装置16に与えられる。ロボットアプリケーションプログラム18は、ロボット12に対すアプリケーションプログラムであり、たとえばロボット12を案内ロボットとしとて動作させるときには、そのための動作をロボット12が実行するようなプログラムである。
操作装置14のメモリにはさらに、環境データ20を予め記憶している。環境データ20は主として図4に示す仮想シミュレーション空間22の地図データおよびその仮想シミュレーション空間22内での人エージェントの出現率データを含む。環境および環境内のオブジェクトは3次元モデルデータとして表され、3次元仮想空間として視覚化される。
図4に示す仮想シミュレーション空間22は、図中点線矩形で示す出入口22aを有する3次元閉空間を想定している。この仮想シミュレーション空間22においては黒色太線で示す通路22bが設定されていて、ロボット12や人エージェントはその通路50や広場などを通行し、またはそこに存在する。これらの通路22bや広場は建物や壁などオブジェクトによって区画され、図中丸印で示す場所で分岐または合流する。
シミュレーション装置16は、基本的には1または2以上のプロセサで構成され、ロボット12をシミュレートするロボットシミュレータ24および歩行者のような人エージェントをシミュレートする人シミュレータ26を含み、それぞれのシミュレーション結果が物理エンジン28に入力される。
ロボットシミュレータ24は、たとえば先の非特許文献1として例示したMORSEシミュレータであり、このMORSEシミュレータは、ロボット12と同様の、多くのセンサ、アクチュエータおよびロボットのモデルを提供し、そのようなモデル用のAPI(Application Programming Interface)も利用できる。
センサシミュレーションにおいては、たとえば、カメラ画像の場合には、カメラ視点からの光学的な計算を行い、カメラ視点毎の画像情報を生成する。レーザ距離計の場合には、レーザによるスキャンを模して、センサから各方位へ距離計測を行い、その結果をセンサ値として保存する。
開発者がロボットのためのロボットアプリケーションプログラムを準備するとき、それらのプログラムはこれらのAPIにアクセスしてセンサデータ(たとえば、レーザ距離計からの距離の読み取り)およびアクチュエータへのコマンドの送信(たとえば、移動速度)を行う。
人シミュレータ26は、定期的に新しい歩行者を生成し、それらの位置を更新し、それらがシミュレートされた環境(仮想シミュレーション空間22)を離れるときにそれらを除去する。歩行者すなわち人は、3次元オブジェクトとして表現され、仮想シミュレータ空間22内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。
ただし、人シミュレータ26には図1に示すように環境データ20が与えられるので、人シミュレータ26は、その環境データに含まれる出現率と呼ばれる予め定義された確率で新しい歩行者を周期的に生成する。そして、その歩行者は図4に示す出入口22aの1つに割り当てられ、他の1つに行くように設定される。
ただし、歩行者はしばしばグループとして(家族やカップルのように)生成され、 それらがグループで表示される場合、サイズはグループメンバの分布によって定義し、すべてのメンバが同じ目的を共有すると仮定する。
物理エンジン28は、物理的な力や法則などに基づいて、ロボットや人エージェントがどのような移動経路をたどるかを計算する。詳しくいうと、物理エンジン28は、ロボットシミュレータ24および人シミュレータ26からの各エージェント(ロボット含む)が意図した動きを、仮想シミュレーション空間22(図4)で実行する処理を実行する。このとき、他の障害物、構造物や他のエージェントとの干渉が何もなければ、意図したとおりの動きを生成する。しかしながら、干渉がある場合、物理学法則(力学法則)に従って、各エージェントの実際の動きを処理する。そして、物理エンジン28からは統合したシミュレーションデータが出力される。
シミュレーション装置16には、ディスプレイ105設けられていて、このディスプレイ105によって、たとえば図4に示すような仮想シミュレーション空間の画像が、その中に存在するシミュレートされたロボットや人エージェントとともに、表示される。たとえば、人エージェントは、3次元オブジェクトとして表現され、仮想シミュレーション空間22内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。ロボットアプリケーションプログラム18の開発者は、そのディスプレイ105に表示された画像で確認しながら、ロボット12の行動決定プログラム(アプリケーションプログラム)を作製し、修正する。
図5を参照して、人シミュレータ26を詳細に説明する。人シミュレータ26は、ロボットシミュレータ24と同様に、シミュレーション装置16のコンピュータないしプロセサによって実現される機能であり、人生成モジュール110を含む。この人生成モジュール110は、上述のように、環境データ20に含まれる出現率データ108に従って新しい歩行者(人エージェント)を、地図データ106が表す、図4に一例を示す仮想シミュレーション空間22内に、周期的に生成する。
出現率データ108は、シミュレーション装置16の仮想シミュレーション空間22に投入する人エージェントのための、人の形状、すなわち大人、子供、男性、女性などの人の形状(パターン)やそれぞれの人の出現率が予め設定されているデータベースであり、設定された確率で設定された形状の人エージェントが生成される。
なお、この出現率データ108では、曜日や時間ごとに異なるデータセットを保持しておき、曜日や時間を指定してシミュレーションできるようにしてもよい。そうすれば、ある時間帯にロボットを動かすとどうなるのかなど、いろいろシミュレーションすることができる。
ただし、生成される人エージェントがグループを形成することを出現率データ108が示していれば、人生成モジュール110は、シミュレーションパラメータとして設定されているグループメンバデータ112に従ったメンバ構成のグループで複数の人エージェントを生成する。
移動モジュール114は、人生成モジュール110が生成した人エージェントを、オブジェクティブモデル(Objective Model)116に基づいて、仮想シミュレーション空間22(図4)内を移動させる。ここで、オブジェクティブとは、先に述べたように人々のロボットに対する反応ないし振る舞いを意味するが、具体的には、仮想シミュレーション空間22において、人エージェント(図示せず)の視界にロボットエージェント(図示せず)が入ったときに、人エージェントが示す反応の仕方、つまり人が実空間で実際に執り得る対ロボット行動パターンを規定する命令セットである。この実施例では図6に示す4つの典型的な反応の態様(オブジェクティブ)をモデルとして設定しておき、移動モジュール114は人エージェントを移動させるとき、そのモデルが示すオブジェクティブに従って移動させる。つまり、オブジェクティブ116は、仮想シミュレーション空間においてロボットの存在に対する反応行動を人エージェントに行わせる、第1命令セットとして機能する。これらのオブジェクティブはシミュレーションシステム10の第1メモリ(図示せず)に記憶されている。
なお、このオブジェクティブモデル116に予め設定されている利用可能なオブジェクティブは、たとえば上記第1メモリから読み出してそれらの一覧をたとえばディスプレイ105などに表示するなどして、デバッグしようとする開発者が知ることができる。
図6に示す基本オブジェクティブ116は、ロボットが自分の視野に入ったときに人が執る行動パターン(オブジェクティブ)である。図6において、発生尤度は、そのオブジェクティブが再現される確率を示し、オブジェクティブUninterested(興味を持たず、そのまま通り過ぎる)の発生尤度は0.6に設定されている。オブジェクティブSlow(速度を落とし、ロボットを見ながら通り過ぎる)の発生尤度は0.05に設定されている。図7に図解しているオブジェクティブInterest(ロボットに近づき、対話を行う)の発生尤度は0.3に設定されている。図8に図解しているオブジェクティブObserve(やや遠目に立ち止まり、ロボットを見る)の発生尤度は0.05に設定されている。
図7は、人(「i」で示す)が自分の視野内にロボット12を発見すると、ロボット12の回りに、ロボット12から停止距離Dstopを隔てて停止し、ロボット12と対話するオブジェクティブを図解している。
図8は、人(「i」で示す)が自分の視野内にロボット12を発見すると、ロボット12の回りに、ロボット12から停止距離Dstopよりもやや大きい観察距離Dobserveを隔てて停止し、ロボット12を観察するオブジェクティブを図解している。
ただし、移動モジュール114は、シミュレーションパラメータに含まれるソーシャルフォースモデル(Social Force Model)118およびインタラクションモデル(Interaction with robot model)120からのそれぞれのモデルデータを考慮して、人エージェントの移動をシミュレートする。ソーシャルフォースモデルとは、後述の図10に示すように歩行者どうしがいかに影響して挙動が変わるかということを表すモデルである。たとえば、斥力または反力などとして知られている。
仮想シミュレーション空間22内において、人エージェントの行動は、他のエージェントから影響されて変化するが(たとえば、人同士がぶつからないように避ける、ロボットを見たら近づく、など)。
たとえば図9に示すように、2人の人iおよびjは相互に影響して次のステップでの移動位置を決定する場合がある、人エージェントiは本来はdi,jの方向へ移動するのであるが、人エージェントjが人エージェントiに対して角度θi,jの方向に速度vi,jで移動しようとしているため、人エージェントiは、結局d’i,jの方向へ移動することになる。
なお、インタラクションモデル120とは、人のロボットとの相互作用のパターンを予め設定しているモデルである。
図10は図4に示す仮想シミュレーション環境(空間)の一部を模式的に示していて、仮想シミュレーション空間22は、出入口22aを設けた壁などのオブジェクト124で仕切られた閉空間を想定している。ただし、オブジェクト124はすべて、障害物として地図データ106に書き込まれている。
ロボットシミュレータ24は、環境データ20に含まれるロボット(ロボットエージェント)の位置等のデータに基づいて、ロボットアプリケーションプログラム18に従ったロボットの次のステップでの行動をシミュレーションする。ここで、ロボットアプリケーションプログラム18は、図3のセンサ入力/出力ボード88に入力されるセンサ出力に応じて、各モータすなわちアクチュエータを制御してロボットの行動を決定するプログラムである。
図10の例でいえば、ロボットアプリケーションプログラム18は、たとえば図10において、一方の出入口22aからロボット12が仮想シミュレーション空間22に入り、他方の出入口22aから出るまで、通路22bに従って移動させるように設定されている。なお、図10において参照符号126が、シミュレーションのためにこの仮想シミュレーション空間22に投入された人エージェントを示し、参照符号128が障害物を示す。
さらに、図5に示す実施例では、拡張オブジェクティブモデル130が設けられる。この拡張オブジェクティブモデル130は、後述のようにして実世界で発見した人々の反応を、基本オブジェクティブモデル116とは別に、追加して共有するようにしたオブジェクティブである。このような拡張オブジェクティブモデル130を追加でき、その追加した拡張オブジェクティブモデル130に従って人々の振る舞いをシミュレーションすることによって、人エージェントの新しい動きをシミュレータ上で再現させることができる。
ここで、まず、図11を参照して、基本オブジェクティブモデル116に従った図1に示すシミュレーション装置16における動作の一例を説明する。
最初のステップS1において、一例として図4(および図11)に示す通路22b上を移動するように設定されている、ロボットアプリケーションプログラム18を読み込むとともに、環境データ20を読み込む。すなわち、ロボット12の行動をシミュレーションする図4(および図11)のような仮想シミュレーション空間22の地図データ106および出現率データ108が示す仮想シミュレーション空間22に投入する人エージェントの生成に関するパラメータ(出現頻度、移動経路、グループ人数、大人子供や男女の比率、背の高さなど)および各エージェント(ロボット12を含む)の位置データなどを読み込む。
次のステップS3では、人シミュレータ26の人生成モジュール110によって、環境データ20が提示する人エージェントの生成に関する上述のパラメータおよびグループからの人パターンのデータに従って、仮想シミュレーション空間22内で、1または2以上の人エージェントを生成して配置する。
ステップS5で人シミュレータ26は、環境データ20が示す現在の人エージェントおよびロボット12の位置に基づいて、そしてオブジェクティブモデル116が示す対ロボット行動パターンに基づいて、人エージェントの次のステップでの行動を決定する。なお、図6に示す基本オブジェクティブの一覧は開発者(操作装置14のオペレータ)が自由にアクセスできる形で提供される。
ステップS7でロボットシミュレータ24は、環境データ20が示す現在の人エージェントおよびロボット12の位置に基づいて、ロボットアプリケーションプログラム18に従って、次のステップでのロボット12の行動を決定する。
具体的には、ステップS7では、ロボット12がたとえば搬送ロボットや搭乗型ロボットのように目的地に向かうことが主目的のロボットである場合、他の人々の現在の位置や移動速度から、なるべく他人の移動に干渉しないような移動経路を計算する処理を行う。また、ロボット12が人々にサービス提供することが目的のロボットである場合には、たとえば、ロボットに興味がありそうな人に接近するために、単純な場合では、ロボットの近傍で止まっている人を選択して、その人に向かって進む、また、人々が集まりがちな場所を選んでそのような場所でやってくる人を待ち受ける、また、混雑を起こさないように過度に人々が通る場所には近づかないようにする、といった処理を行ったりする。
このステップS7の場合、ステップS5での人エージェントの次のステップでの行動を決定しているので、それを考慮して、上述の処理を実行する。そのため、人と共存する実空間で活動するロボットアプリケーションプログラムの当否を、仮想シミュレーション空間内で判断することができる。
その後ステップS9で、物理エンジン28において、各エージェントの行動を実現する。詳しくいうと、ステップS9では、先に説明したように、各エージェント(ロボット含む)が意図した動きを仮想シミュレーション空間22内で実施する処理が行われ、他の障害物、構造物や他のエージェントとの干渉が何もなければ、各エージェントは意図したとおりに動く。たとえば、エージェントが1歩前進しようとした場合、その意図通り、エージェントが1歩前進する。
ところが、干渉がある場合、物理学法則(力学法則)に従って各エージェントの実際の動きが処理される。単純な場合、たとえば壁に向かって進もうとすると、壁に衝突し、それ以上前進できないし、一定の反発係数に従って反力を受ける。エージェント同士の衝突の場合、前進する動きと、反力による移動が重なり合って、たとえば、単純な例を考えると、前進中にたとえば側方から衝突すると、斜め前方へと実際には動くことになる。
次のステップS11で、環境データやセンサデータなどを更新する。
そして、ステップS13でシミュレーションを終了するかどうか判断し、シミュレーションを続行するなら再び先のステップS3に戻り、たとえば行動決定プログラムが終了するなどした場合“YES”が判断され、シミュレーションを終了する。
このように、シミュレーション装置16においてオブジェクティブモデル116に従ってロボットの周囲の人の行動を再現するようにシミュレーションを行い、その状態をディスプレイ105(図1)で確認することにより、ロボットの行動をシミュレーションできるので、ロボットを実空間で実際に動かすことなく、人と共存する実空間で活動するロボットアプリケーションプログラム18の開発を効率的に行うことができる。
しかしながら、人々の存在する環境でロボットの移動をテストすることで新たなオブジェクティブが発見される現状がある。たとえば、ロボットがちらしを配ると、ちらしだけを受け取って去っていくという人々の振る舞い、移動するロボットが停止すると多くの子供が寄ってくるという振る舞いなどである。そこで、この実施例では、こうした人々の新しい振る舞いを追加して共有可能にしようとする。
そのための動作例が図12に示される。図12のフロー図は操作装置14の1または2以上のコンピュータまたはプロセサのメモリ(図示せず)に予め設定されているロボットアプリケーションプログラムであり、たとえばロボット12を案内ロボットとしとて動作させるときには、そのための動作をロボット12が実行するようなプログラムである。
図12の最初のステップS21では、上記の1または2以上のコンピュータまたはプロセサ(以下の説明では単に、「コンピュータ」とする。)は、図6に示す基本オブジェクティブおよび発生尤度を読み込み、初期オブジェクティブ(目的地に向かう)を設定する。
次のステップS23では、コンピュータは、シミュレーションが実行されているかどうか判断する。このステップS23で“NO”を判断したときには、この図12の処理は終了する。
ステップS23で“YES”が判断されたとき、すなわち、シミュレーションが実行されているとき、続くステップS25で、コンピュータは、現在選択されているオブジェクティブを実行し、人エージェントの動きを出力する。同時に、コンピュータは、オブジェクティブを変更可能な状態かどうか計算する。オブジェクティブ自身は、その継続時間を初期化時に計算でき、その継続時間内に他のオブジェクティブに遷移することはない。たとえば、ロボットを見るというオブジェクティブでは、「ロボットを見ている時間」を実データの確率分布に基づいて決定しており、その継続時間内は他のオブジェクティブに遷移しない。
その計算に基づいて、ステップS27でコンピュータは、オブジェクティブが変更可能な状態、すなわち、実行中のオブジェクティブの継続時間を過ぎたかどうか判断する。
ステップS27で“NO”なら、終了し、“YES”なら、具体的に図13に示す次のステップS29でオブジェクティブを変更する。
図13の最初のステップS31では、コンピュータは、該当する人エージェントからロボットが見えるかどうか、判断する。つまり、オブジェクティブを変更するためには、人エージェントからロボットエージェントが見えることが前提である。したがって、このステップS31で“NO”をコンピュータが判断したとき、そのまま終了する。
ステップS31で“YES”を判断したとき、コンピュータは、次のステップS33で、図6に示す基本オブジェクティブをすべて候補リスト(List_cand)に追加する。
その後、ステップS35を繰り返し実行して、拡張オブジェクティブ(EOi)毎に、拡張オブジェクティブの条件が成立するかどうか判断する。この条件が成立するかどうかは、ロボットの状態(ステータス)、たとえば、ロボットが紙(ちらし)を持っているかどうか、ロボットの移動速度かが所定の速度以上か、以下か、対象が大人か子供か、ロボットが発話中かどうか、などの各パラメータに基づいて判断する。
ステップS35で“YES”が判断されると、ステップS37で、その拡張オブジェティブEOiを候補リストList_candに追加するが、“NO”なら、次の拡張オブジェクティブに対してステップS35を判断する。
このような処理に従って拡張オブジェクティブEOiを候補リストList_candに追加する。
その後、ステップS39において、コンピュータは、候補リストList_cand内に存在するオブジェクティブ(Oi)すなわち基本オブジェクティブもしくは拡張オブジェクティブのうち条件を充足したオブジェクティブ毎に、発生確率(Pj)を計算する。
ステップS39では、具体的には、たとえば図6や図14に示す発生各尤度を正規化し、発生確率を計算する、という方法を採る。たとえば、以下の3つの尤度を持つオブジェクティブが、発生する条件を満たしていた、とする。
01:尤度0.8
02:尤度0.3
03:尤度0.2
これらの総和では1.0にならないので、総和が1.0になるように正規化を実施する。
単純な正規化は、数1のように、3つのオブジェクティブを加算して正規化を行うことである。
[数1]
01:発生確率P1=0.8/(0.8+0.3+0.2)=0.615
02:発生確率P2=0.3/(0.8+0.3+0.2)=0.2307
03:発生確率P3=0.2/(0.8+0.3+0.2)=0.1538
実施例ではこの数1のような正規化を行っているが、別の正規化方法を採用することももちろん可能である。
次のステップS41では、コンピュータは、乱数を使用して次に実行するオブジェクティブ(O_next)を候補リストList_candから選択し、発生尤度として発生確率Pjに基づいて決定する。
たとえば、ステップS41は、0.0‐1.0までの乱数randを発生させ、そのうち、以下の数2のような方法で次に実行するオブジェクティブO_nextを決定する。実施例では、オブジェクティブの発生確率の総和により、どこに分布するかを決定している
[数2]
01:rand <=P1(0.615)
02:P1(0.615) <rand <=P1+P2(0.615+0.2307)
03:P1+P2(0.615+0.2307) <rand <=1+P2+P3(1.0)
そして、ステップS43で、オブジェクティブO_nextを変更する。
このように、この実施例では、オブジェクティブが変更可能な状態かどうか判断し、変更可能な状態であれば、実施可能なオブジェクティブを候補リストに追加する。続いて、各拡張オブジェクティブ毎の条件を確認し、条件が成立した拡張オブジェクティブのみが候補リストへと追加される。最後に、候補リスト内の各オブジェクティブの尤度に基づいて発生確率を計算し、変更するオブジェクティブが決定される。拡張オブジェクティブは,例えば図15に示す拡張オブジェクティブモデル130として、登録されている。この拡張オブジェクティブモデル130は、図6に示す基本オブジェクティブモデル116と同様、オブジェクティブ一覧としてディスプレイ105(図1)に表示され、他の開発者(ユーザ)と共有することができる。
なお、図15に例示する拡張オブジェクティブの1つは、ステップS35でロボットが紙(ちらし)を持っていることという発生条件の成立を判断したとき変更される拡張オブジェクティブTaking paper(ロボットに近づき、紙を取って立ち去る)であり、この拡張オブジェクティブに対しては、ステップS39で計算された発生確率が発生尤度0.4として登録されている。
図15に例示する拡張オブジェクティブの他の1つは、ステップS35でロボットの移動速度が遅い(0.5m/秒以下)こと、ロボットが発話中であること、対象が子供であること、という発生条件の成立を判断したとき変更される拡張オブジェクティブInterrupt(ロボットの前に立ち、移動を邪魔する)であり、この拡張オブジェクティブに対しては、ステップS39で計算された発生確率が発生尤度0.5として登録されている。
ただし、ここでの発生尤度は、ユーザが任意に調整(変更)可能である。
したがって、人シミュレータ26すなわち移動モジュール114は、第1記憶手段としての基本オブジェクティブモデル116に記憶されている基本オブジェクティブおよび第2記憶手段としての拡張オブジェクティブモデル130に記憶された拡張オブジェクティブに従って、人エージェントの移動を制御する。
すなわち、拡張オブジェクティブモデル130も基本オブジェクティブモデル116と同様に人シミュレータ26すなわちシミュレーションシステム10のユーザが等しく利用できるので、ロボットアプリケーションの開発を効率的に行うことが可能である。たとえば、同じチームの誰かが経験した反応を拡張オブジェクティブに記載しておくと、別の誰かのテスト時においても、登録された拡張オブジェクティブのテストが可能となる。こうした,やりとりは,ロボットアプリケーション開発の効率化に寄与する。
そのため、実世界で生じた新しい人々の反応ないし振る舞いを拡張オブジェクティブとして追加、共有することができ、新しい人エージェントの動きをシミュレータ上で再現させることができる。そのため、ロボットのアプリケーションプログラムの開発を効率的に実施することができる。
現場で発見された新たな反応パターンを、シミュレータのユーザが逐次追加していくことは、シミュレータが現場を再現する能力の向上につながる。これによって、シミュレータ上でのロボットシステム(ロボットを用いたアプリケーション)のテストの効果が高まる。
なお、このシミュレーションシステム10が行動をシミュレーションできるロボットは実施例で説明した図3および図4に示すロボット12に限定されるものではない。他の形式、構造のコミュニケーションロボットにもこのシミュレーション装置は適用可能である。