【国等の委託研究の成果に係る記載事項】(出願人による申告)平成27年度、国立研究開発法人新エネルギー・産業技術総合開発機構「次世代ロボット中核技術開発/革新的ロボット要素技術分野/人共存環境で活動するロボットのためのHRI行動シミュレーション技術」に関する委託研究、産業技術力強化法第19条の適用を受ける特許出願
【文献】
久保田直行、脇阪史帆、小嶋宏幸,情動モデルを用いたパートナーロボットに関する研究:仮想現実空間の構築と人間との相互作用,知能と情報,日本,日本知能情報ファジィ学会,2008年 8月15日,第20巻,第4号(通巻109号),pp.449−460,ISSN 1347-7986
【文献】
野口博史、山田隆基、森 武俊、佐藤知正,大量の人移動計測データに基づく移動ロボットの人回避経路計画,日本ロボット学会誌,日本,一般社団法人日本ロボット学会,2012年 9月15日,第30巻,第7号(通巻225号),pp.684−694,ISSN 0289-1824
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0023】
図1を参照して、この実施例のシミュレーションシステム10は、ロボット12、ロボット12を遠隔操作する操作装置14およびロボット12をシミュレートしたロボットエージェントや人(歩行者)エージェントをシミュレーションするシミュレーション装置16含む。シミュレーションシステム10において、ロボット12を除いて、1台または2台以上のコンピュータ(プロセサ)によって実現される。
【0024】
この実施例のロボット12は、たとえば
図2に示すコミュニケーションロボットのように、人との共存環境で活動するロボットである。このようなロボット12は環境の中に存在する人の行動に影響を受けるので、この実施例のシミュレーション装置16では、ロボット12の行動をロボットアプリケーションプログラム(ロボット行動決定プログラム)に従ってシミュレーションする際に、人の行動もシミュレーションすることによって、ロボット12のための安全なロボットアプリケーションプログラムの開発を支援する。
【0025】
ここで、
図2および
図3を参照して、この発明の理解に必要な範囲でロボット12の構成について説明する。ロボット12は台車30を含み、台車30の下面にはロボット12を移動させる2つの車輪32および1つの従輪34が設けられる。2つの車輪32は車輪モータ36(
図3参照)によってそれぞれ独立に駆動され、台車30すなわちロボット12を前後左右の任意方向に動かすことができる。
【0026】
台車30の上には、円柱形のセンサ取り付けパネル38が設けられ、このセンサ取り付けパネル38には、多数の距離センサ40が取り付けられる。これらの距離センサ40は、たとえば赤外線や超音波などを用いてロボット12の周囲の物体(人や障害物など)との距離を測定するものである。
【0027】
センサ取り付けパネル38の上には、胴体42が直立して設けられる。また、胴体42の前方中央上部(人の胸に相当する位置)には、上述した距離センサ40がさらに設けられ、ロボット12の前方の、主として人との距離を計測する。また、胴体42には、その側面側上端部のほぼ中央から伸びる支柱44が設けられ、支柱44の上には、全方位カメラ46が設けられる。全方位カメラ46は、ロボット12の周囲を撮影するものであり、後述する眼カメラ70とは区別される。この全方位カメラ46としては、たとえばCCDやCMOSのような固体撮像素子を用いるカメラを採用することができる。
【0028】
胴体42の両側面上端部(人の肩に相当する位置)には、それぞれ、肩関節48Rおよび肩関節48Lによって、上腕50Rおよび上腕50Lが設けられる。図示は省略するが、肩関節48Rおよび肩関節48Lは、それぞれ、直交する3軸の自由度を有する。すなわち、肩関節48Rは、直交する3軸のそれぞれの軸廻りにおいて上腕50Rの角度を制御できる。肩関節48Rの或る軸(ヨー軸)は、上腕50Rの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節48Lは、直交する3軸のそれぞれの軸廻りにおいて上腕50Lの角度を制御できる。肩関節48Lの或る軸(ヨー軸)は、上腕50Lの長手方向(または軸)に平行な軸であり、他の2軸(ピッチ軸およびロール軸)は、その軸にそれぞれ異なる方向から直交する軸である。
【0029】
また、上腕50Rおよび上腕50Lのそれぞれの先端には、肘関節52Rおよび肘関節52Lが設けられる。図示は省略するが、肘関節52Rおよび肘関節52Lは、それぞれ1軸の自由度を有し、この軸(ピッチ軸)の軸回りにおいて前腕54Rおよび前腕54Lの角度を制御できる。
【0030】
前腕54Rおよび前腕54Lのそれぞれの先端には、人の手に相当するハンド56Rおよびハンド56Lがそれぞれ設けられる。これらのハンド56Rおよび56Lは、詳細な図示は省略するが、開閉可能に構成され、それによってロボット12は、ハンド56Rおよび56Lを用いて物体を把持または挟持することができる。ただし、ハンド56R、56Lの形状は実施例の形状に限らず、人の手に酷似した形状や機能を持たせるようにしてもよい。
【0031】
また、図示は省略するが、台車30の前面、肩関節48Rと肩関節48Lとを含む肩に相当する部位、上腕50R、上腕50L、前腕54R、前腕54L、ハンド56Rおよびハンド56Lには、それぞれ、接触センサ58(
図3で包括的に示す)が設けられる。台車30の前面の接触センサ58は、台車30への人間や他の障害物の接触を検知する。したがって、ロボット12は、その自身の移動中に障害物との接触が有ると、それを検知し、直ちに車輪32の駆動を停止してロボット12の移動を急停止させることができる。また、その他の接触センサ58は、当該各部位に触れたかどうかを検知する。
【0032】
胴体42の中央上部(人の首に相当する位置)には首関節60が設けられ、さらにその上には頭部62が設けられる。図示は省略するが、首関節60は、3軸の自由度を有し、3軸の各軸廻りに角度制御可能である。或る軸(ヨー軸)はロボット12の真上(鉛直上向き)に向かう軸であり、他の2軸(ピッチ軸、ロール軸)は、それぞれ、それと異なる方向で直交する軸である。
【0033】
頭部62には、人の口に相当する位置に、スピーカ64が設けられる。スピーカ64は、ロボット12が、それの周辺の人に対して音声によってコミュニケーションをとるために用いられる。また、人の耳に相当する位置には、マイク66Rおよびマイク66Lが設けられる。以下、右のマイク66Rと左のマイク66Lとをまとめてマイク66ということがある。マイク66は、周囲の音、とりわけコミュニケーションを実行する対象である人間の音声を取り込む。
【0034】
さらに、人の目に相当する位置には、右の眼球部68Rおよび左の眼球部68Lが設けられる。右の眼球部68Rおよび左の眼球部68Lは、それぞれ右の眼カメラ70Rおよび左の眼カメラ70Lを含む。以下、右の眼球部68Rと左の眼球部68Lとをまとめて眼球部68ということがある。また、右の眼カメラ70Rと左の眼カメラ70Lとをまとめて眼カメラ70ということがある。
【0035】
眼カメラ70は、ロボット12に接近した人の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。この実施例では、ロボット12は、この眼カメラ70からの映像信号によって、人の左右両目のそれぞれの視線方向(ベクトル)を検出する。
【0036】
また、眼カメラ70は、上述した全方位カメラ46と同様のカメラを用いることができる。たとえば、眼カメラ70は、眼球部68内に固定され、眼球部68は、眼球支持部(図示せず)を介して頭部62内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、2軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この2軸の一方は、頭部62の上に向かう方向の軸(ヨー軸)であり、他方は、一方の軸に直交しかつ頭部62の正面側(顔)が向く方向に直行する方向の軸(ピッチ軸)である。眼球支持部がこの2軸の各軸廻りに回転されることによって、眼球部68ないし眼カメラ70の先端(正面)側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ64、マイク66および眼カメラ70の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
【0037】
このように、この実施例のロボット12は、車輪32の独立2軸駆動、肩関節48の3自由度(左右で6自由度)、肘関節52の1自由度(左右で2自由度)、首関節60の3自由度および眼球支持部の2自由度(左右で4自由度)の合計17自由度を有する。
【0038】
図3はロボット12の電気的な構成を示すブロック図である。この
図3を参照して、ロボット12は、1つまたは2以上のプロセサ80を含む。プロセサ80は、バス82を介して、メモリ84、モータ制御ボード86、センサ入力/出力ボード88および音声入力/出力ボード90に接続される。
【0039】
メモリ84は、図示は省略をするが、ROM、HDDおよびRAMを含む。ROMおよびHDDには、各種プログラムが予め記憶される。
【0040】
モータ制御ボード86は、たとえばDSPで構成され、各腕や首関節60および眼球部68などの各軸モータの駆動を制御する。すなわち、モータ制御ボード86は、プロセサ80からの制御データを受け、右眼球部68Rの2軸のそれぞれの角度を制御する2つのモータ(
図3では、まとめて「右眼球モータ92」と示す)の回転角度を制御する。同様にして、モータ制御ボード86は、プロセサ80からの制御データを受け、左眼球部68Lの2軸のそれぞれの角度を制御する2つのモータ(
図3では、まとめて「左眼球モータ94」と示す)の回転角度を制御する。
【0041】
また、モータ制御ボード86は、プロセサ80からの制御データを受け、肩関節48Rの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Rの角度を制御する1つのモータとの計4つのモータ(
図3では、まとめて「右腕モータ96」と示す)の回転角度を制御する。同様にして、モータ制御ボード86は、プロセサ80からの制御データを受け、肩関節48Lの直交する3軸のそれぞれの角度を制御する3つのモータと肘関節52Lの角度を制御する1つのモータとの計4つのモータ(
図3では、まとめて「左腕モータ98」と示す)の回転角度を制御する。
【0042】
さらに、モータ制御ボード86は、プロセサ80からの制御データを受け、首関節60の直交する3軸のそれぞれの角度を制御する3つのモータ(
図3では、まとめて「頭部モータ100」と示す)の回転角度を制御する。そして、モータ制御ボード86は、プロセサ80からの制御データを受け、車輪32を駆動する2つのモータ(
図3では、まとめて「車輪モータ36」と示す)の回転角度を制御する。
【0043】
モータ制御ボード86にはさらにハンドアクチュエータ101が結合され、モータ制御ボード86は、プロセサ80からの制御データを受け、ハンド56R、56Lの開閉を制御する。
【0044】
センサ入力/出力ボード88は、モータ制御ボード86と同様に、DSPで構成され、各センサからの信号を取り込んでプロセサ80に与える。すなわち、距離センサ40のそれぞれからの反射時間に関するデータがこのセンサ入力/出力ボード88を通じてプロセサ80に入力される。また、全方位カメラ46からの映像信号が、必要に応じてセンサ入力/出力ボード88で所定の処理を施してからプロセサ80に入力される。眼カメラ70からの映像信号も、同様にして、プロセサ80に入力される。また、上述した複数の接触センサ58(
図3では、まとめて「接触センサ58」と示す)からの信号がセンサ入力/出力ボード88を介してプロセサ80に与えられる。音声入力/出力ボード90もまた、同様に、DSPで構成され、プロセサ80から与えられる音声合成データに従った音声または声がスピーカ64から出力される。また、マイク66からの音声入力が、音声入力/出力ボード90を介してプロセサ80に与えられる。
【0045】
また、プロセサ80は、バス82を介して通信LANボード102に接続される。通信LANボード102は、たとえばDSPで構成され、プロセサ80から与えられた送信データを無線通信モジュール104に与え、無線通信モジュール104は送信データを、ネットワークを介してサーバ(図示せず)等に送信する。また、通信LANボード102は、無線通信モジュール104を介してデータを受信し、受信したデータをプロセサ80に与える。
【0046】
図1に戻って、操作装置14は、基本的には1または2以上のコンピュータまたはプロセサによって構成され、そのプロセサのメモリ(図示せず)にロボットアプリケーションプログラム18が設定されていて、そのロボットアプリケーションプログラムがコンピュータからたとえば無線でロボット12またはシミュレーション装置16に与えられる。ロボットアプリケーションプログラム18は、ロボット12に対すアプリケーションプログラムであり、たとえばロボット12を案内ロボットとしとて動作させるときには、そのための動作をロボット12が実行するようなプログラムである。
【0047】
操作装置14のメモリにはさらに、環境データ20を予め記憶している。環境データ20は主として
図4に示す仮想シミュレーション空間22の地図データおよびその仮想シミュレーション空間22内での人エージェントの出現率データを含む。環境および環境内のオブジェクトは3次元モデルデータとして表され、3次元仮想空間として視覚化される。
【0048】
図4に示す仮想シミュレーション空間22は、図中点線矩形で示す出入口22aを有する3次元閉空間を想定している。この仮想シミュレーション空間22においては黒色太線で示す通路22bが設定されていて、ロボット12や人エージェントはその通路50や広場などを通行し、またはそこに存在する。これらの通路22bや広場は建物や壁などオブジェクトによって区画され、図中丸印で示す場所で分岐または合流する。
【0049】
シミュレーション装置16は、基本的には1または2以上のプロセサで構成され、ロボット12をシミュレートするロボットシミュレータ24および歩行者のような人エージェントをシミュレートする人シミュレータ26を含み、それぞれのシミュレーション結果が物理エンジン28に入力される。
【0050】
ロボットシミュレータ24は、たとえば先の非特許文献1として例示したMORSEシミュレータであり、このMORSEシミュレータは、ロボット12と同様の、多くのセンサ、アクチュエータおよびロボットのモデルを提供し、そのようなモデル用のAPI(Application Programming Interface)も利用できる。
【0051】
センサシミュレーションにおいては、たとえば、カメラ画像の場合には、カメラ視点からの光学的な計算を行い、カメラ視点毎の画像情報を生成する。レーザ距離計の場合には、レーザによるスキャンを模して、センサから各方位へ距離計測を行い、その結果をセンサ値として保存する。
【0052】
開発者がロボットのためのロボットアプリケーションプログラムを準備するとき、それらのプログラムはこれらのAPIにアクセスしてセンサデータ(たとえば、レーザ距離計からの距離の読み取り)およびアクチュエータへのコマンドの送信(たとえば、移動速度)を行う。
【0053】
人シミュレータ26は、定期的に新しい歩行者を生成し、それらの位置を更新し、それらがシミュレートされた環境(仮想シミュレーション空間22)を離れるときにそれらを除去する。歩行者すなわち人は、3次元オブジェクトとして表現され、仮想シミュレータ空間22内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。
【0054】
ただし、人シミュレータ26には
図1に示すように環境データ20が与えられるので、人シミュレータ26は、その環境データに含まれる出現率と呼ばれる予め定義された確率で新しい歩行者を周期的に生成する。そして、その歩行者は
図4に示す出入口22aの1つに割り当てられ、他の1つに行くように設定される。
【0055】
ただし、歩行者はしばしばグループとして(家族やカップルのように)生成され、 それらがグループで表示される場合、サイズはグループメンバの分布によって定義し、すべてのメンバが同じ目的を共有すると仮定する。
【0056】
物理エンジン28は、物理的な力や法則などに基づいて、ロボットや人エージェントがどのような移動経路をたどるかを計算する。詳しくいうと、物理エンジン28は、ロボットシミュレータ24および人シミュレータ26からの各エージェント(ロボット含む)が意図した動きを、仮想シミュレーション空間22(
図4)で実行する処理を実行する。このとき、他の障害物、構造物や他のエージェントとの干渉が何もなければ、意図したとおりの動きを生成する。しかしながら、干渉がある場合、物理学法則(力学法則)に従って、各エージェントの実際の動きを処理する。そして、物理エンジン28からは統合したシミュレーションデータが出力される。
【0057】
シミュレーション装置16には、ディスプレイ105設けられていて、このディスプレイ105によって、たとえば
図4に示すような仮想シミュレーション空間の画像が、その中に存在するシミュレートされたロボットや人エージェントとともに、表示される。たとえば、人エージェントは、3次元オブジェクトとして表現され、仮想シミュレーション空間22内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。ロボットアプリケーションプログラム18の開発者は、そのディスプレイ105に表示された画像で確認しながら、ロボット12の行動決定プログラム(アプリケーションプログラム)を作製し、修正する。
【0058】
図5を参照して、人シミュレータ26を詳細に説明する。人シミュレータ26は、ロボットシミュレータ24と同様に、シミュレーション装置16のコンピュータないしプロセサによって実現される機能であり、人生成モジュール110を含む。この人生成モジュール110は、上述のように、環境データ20に含まれる出現率データ108に従って新しい歩行者(人エージェント)を、地図データ106が表す、
図4に一例を示す仮想シミュレーション空間22内に、周期的に生成する。
【0059】
出現率データ108は、シミュレーション装置16の仮想シミュレーション空間22に投入する人エージェントのための、人の形状、すなわち大人、子供、男性、女性などの人の形状(パターン)やそれぞれの人の出現率が予め設定されているデータベースであり、設定された確率で設定された形状の人エージェントが生成される。
【0060】
なお、この出現率データ108では、曜日や時間ごとに異なるデータセットを保持しておき、曜日や時間を指定してシミュレーションできるようにしてもよい。そうすれば、ある時間帯にロボットを動かすとどうなるのかなど、いろいろシミュレーションすることができる。
【0061】
ただし、生成される人エージェントがグループを形成することを出現率データ108が示していれば、人生成モジュール110は、シミュレーションパラメータとして設定されているグループメンバデータ112従ったメンバ構成のグループで複数の人エージェントを生成する。
【0062】
移動モジュール114は、人生成モジュール110が生成した人エージェントを、オブジェクティブモデル(Objective Model)116に基づいて、仮想シミュレーション空間22(
図4)内を移動させる。ここで、オブジェクティブ(Objective)とは、仮想シミュレーション空間22において、人エージェント(図示せず)の視界にロボットエージェント(図示せず)が入ったときに、人エージェントが示す反応の仕方、つまり人が実空間で実際に執り得る対ロボット行動パターンを規定する命令セットである。この実施例では後述の4つの典型的な反応の態様(オブジェクティブ)をモデルとして設定しておき、移動モジュール114は人エージェントを移動させるとき、そのモデルが示すオブジェクティブに従って移動させる。つまり、オブジェクティブ116は、仮想シミュレーション空間においてロボットの存在に対する反応行動を人エージェントに行わせる、第1命令セットとして機能する。これらのオブジェクティブはシミュレーションシステム10の第1メモリ(図示せず)に記憶されている。
【0063】
なお、このオブジェクティブモデル116に予め設定されている利用可能なオブジェクティブは、たとえば上記第1メモリから読み出してそれらの一覧をたとえばディスプレイ105などに表示するなどして、デバッグしようとする開発者が知ることができる。開発者は、その中の任意のオブジェクティブを選択して、後述のようにスクリプト(122)でそのオブジェクティブを変更(更新)することが可能である。このとき、開発者はシミュレーションシステム10に設けられているキーボードなどの入力装置(図示せず)を用いて、要変更箇所を変更することができる。そして、その変更(更新)されたオブジェクティブもまた第1メモリに記憶される。つまり、オブジェクティブモデル116は,拡張性を有するように設計しているので、別の誰かが更新したオブジェクティブを一覧情報として知るこことができる点は、有効である。
【0064】
たとえば、ロボットが自分の視野に入ったときに人が執る行動パターン(オブジェクティブ)として、
図6および
図7に示す、ロボットと対話するパターンと、ロボットを観察するパターンがある。
【0065】
図6は、人(「i」で示す)が自分の視野内にロボット12を発見すると、ロボット12の回りに、ロボット12から停止距離Dstopを隔てて停止し、ロボット12と対話するオブジェクティブを図解している。
【0066】
図7は、人(「i」で示す)が自分の視野内にロボット12を発見すると、ロボット12の回りに、ロボット12から停止距離Dstopよりもやや大きい観察距離Dobserveを隔てて停止し、ロボット12を観察するオブジェクティブを図解している。
【0067】
オブジェクティブとしては、その他、ロボットの傍を通りすぎるオブジェクティブ、およびロボットの傍を減速し、見ながら通りすぎるオブジェクティブがあり、移動モジュール114では、人エージェントがその登録しているどれかのオブジェクティブに従って移動するようにシミュレーションする。
【0068】
ただし、移動モジュール114は、シミュレーションパラメータに含まれるソーシャルフォースモデル(Social Force Model)118およびインタラクションモデル(Interaction with robot model)120からのそれぞれのモデルデータを考慮して、人エージェントの移動をシミュレートする。ソーシャルフォースモデルとは、後述の
図8に示すように歩行者どうしがいかに影響して挙動が変わるかということを表すモデルである。たとえば、斥力または反力などとして知られている。
【0069】
仮想シミュレーション空間22内において、人エージェントの行動は、他のエージェントから影響されて変化するが(たとえば、人同士がぶつからないように避ける、ロボットを見たら近づく、など)。
【0070】
たとえば
図8に示すように、2人の人iおよびjは相互に影響して次のステップでの移動位置を決定する場合がある、人エージェントiは本来はdi,jの方向へ移動するのであるが、人エージェントjが人エージェントiに対して角度θi,jの方向に速度vi,jで移動しようとしているため、人エージェントiは、結局d’i,jの方向へ移動することになる。
【0071】
なお、インタラクションモデル120とは、人のロボットとの相互作用のパターンを予め設定しているモデルである。
【0072】
図9は
図4に示す仮想シミュレーション環境(空間)の一部を模式的に示していて、仮想シミュレーション空間22は、出入口22aを設けた壁などのオブジェクト124で仕切られた閉空間を想定している。ただし、オブジェクト124はすべて、障害物として地図データ106に書き込まれている。
【0073】
ロボットシミュレータ24は、環境データ20に含まれるロボット(ロボットエージェント)の位置等のデータに基づいて、ロボットアプリケーションプログラム18に従ったロボットの次のステップでの行動をシミュレーションする。ここで、ロボットアプリケーションプログラム18は、
図3のセンサ入力/出力ボード88に入力されるセンサ出力に応じて、各モータすなわちアクチュエータを制御してロボットの行動を決定するプログラムである。
【0074】
図9の例でいえば、ロボットアプリケーションプログラム18は、たとえば
図9において、一方の出入口22aからロボット12が仮想シミュレーション空間22に入り、他方の出入口22aから出るまで、通路22bに従って移動させるように設定されている。なお、
図9において参照符号126が、シミュレーションのためにこの仮想シミュレーション空間22に投入された人エージェントを示す。
【0075】
人シミュレータ26はさらに、必要な場合、オブジェクティブ116ではなく、スクリプト122に従ってシミュレーションを実行する。オブジェクティブ116は上述のように、予め設定した、定型の対ロボット反応パターンであるが、スクリプト122は、シミュレーション装置16すなわち人シミュレータ26に非定型の動作を行わせる命令である。ここで、スクリプトとは、コンピュータが理解できる言語への変換作業を省略して、簡単に解釈実行できるようにした簡易プログラム(命令セット)のことである。ソフトウェアの設計などにおいて、コンピュータに命令を与える際には、通常、人間が普通に読み書きできる言語から、コンピュータが理解できる言語、いわゆる機械語への変換が必要であるが、スクリプトは、そのような変換作業を省略して簡単に解釈実行できるようにした簡易プログラムである。これらのスクリプトは、第2命令セットに該当するが、それらはシミュレーションシステム10の第2メモリ(図示せず)に記憶されている。ただし、第1メモリおよび第2メモリは同じメモリの異なる記憶場所であってよい。
【0076】
留意すべきは、オブジェクティブ116の上位構造として、スクリプト122が存在し、スクリプト122側からオブジェクティブ116に容易にアクセス可能であるという点である。したがって、オブジェクティブ116は移動モジュール114にのみ命令を与えられるのに対して、スクリプト122は人シミュレータ26全体に命令を与える。そのため、人生成モジュール110も移動モジュール114と同様に、スクリプト122に記述された命令を実行することができる。
【0077】
図1に示すように、ロボットの開発環境に人シミュレータを組み込む、ということは比較的新しく、特に、ロボットが視野に入ったときの人エージェントの定型的な反応行動を予め規定しておき、そのどれかを確率的に実行するというオブジェクティブ116の考え方は新しい。そのうえで、スクリプト122をオブジェクティブ116の上位に置くことが、この実施例の特徴である。
【0078】
考え方としては、オブジェクティブ116とスクリプト122を独立に設計するという考え方もあるが、オブジェクティブ116とスクリプト122を独立したものとして準備してしまうと、不都合が生じる。
【0079】
デバックしようとする開発者がシミュレータ装置16の内部情報を詳しく知っているとは限らず、場合によっては、実施例のオブジェクティブ116に類似する人エージェント行動を開発者自身がアドホックに記述するかもしれない。そうした場合、スクリプト(テストコード)の記述に大きな時間が掛かってしまい、結果としてデバッグが円滑に進まないことになる。
【0080】
これに対して、実施例のように、スクリプト122から,オブジェクティブ116を容易にアクセスできる構造とすることによって、スクリプト122によってオブジェクティブ116を変更して、テストコードとして利用することができるのである。
【0081】
このようなスクリプトの一例が
図11に示される。この実施例では8つの命令を記述した1つのスクリプトが代表的に示されるが、その他のスクリプトも当然利用可能である。
【0082】
このようなスクリプト122は、シミュレーション装置16においてテストモードを実行するためのテストコードであり、たとえばシミュレーション装置16のテストモードボタン(図示せず)が操作されてテストモードが呼び出されたとき、あるいは設定ファイルで起動時にテストモードが呼び出されたとき、
図11のようなスクリプト122の一覧が表示され、それを開発者が選択してシミュレーション装置16、特に人シミュレータ26に実行させる。詳細は、
図12を参照して後述する。
【0083】
ここで、まず、
図10を参照して、オブジェクティブモデル116に従った
図1に示すシミュレーション装置16における動作の一例を説明する。
【0084】
最初のステップS1において、一例として
図4(および
図9)に示す通路22b上を移動するように設定されている、ロボットアプリケーションプログラム18を読み込むとともに、環境データ20を読み込む。すなわち、ロボット12の行動をシミュレーションする
図4(および
図9)のような仮想シミュレーション空間22の地図データ106および出現率データ108が示す仮想シミュレーション空間22に投入する人エージェントの生成に関するパラメータ(出現頻度、移動経路、グループ人数、大人子供や男女の比率、背の高さなど)および各エージェント(ロボット12を含む)の位置データなどを読み込む。
【0085】
次のステップS3では、人シミュレータ26の人生成モジュール110によって、環境データ20が提示する人エージェントの生成に関する上述のパラメータおよびグループからの人パターンのデータに従って、仮想シミュレーション空間22内で、1または2以上の人エージェントを生成して配置する。
【0086】
ステップS5で人シミュレータ26は、環境データ20が示す現在の人エージェントおよびロボット12の位置に基づいて、そしてオブジェクティブモデル116が示す対ロボット行動パターンに基づいて、人エージェントの次のステップでの行動を決定する。なお、基本的な前述した4つのオブジェクティブの一覧は開発者(操作装置14のオペレータ)が自由にアクセスできる形で提供される。さらに、他のオブジェクティブモデルを採用することもできる。
【0087】
ステップS7でロボットシミュレータ24は、環境データ20が示す現在の人エージェントおよびロボット12の位置に基づいて、ロボットアプリケーションプログラム18に従って、次のステップでのロボット12の行動を決定する。
【0088】
具体的には、ステップS7では、ロボット12がたとえば搬送ロボットや搭乗型ロボットのように目的地に向かうことが主目的のロボットである場合、他の人々の現在の位置や移動速度から、なるべく他人の移動に干渉しないような移動経路を計算する処理を行う。また、ロボット12が人々にサービス提供することが目的のロボットである場合には、たとえば、ロボットに興味がありそうな人に接近するために、単純な場合では、ロボットの近傍で止まっている人を選択して、その人に向かって進む、また、人々が集まりがちな場所を選んでそのような場所でやってくる人を待ち受ける、また、混雑を起こさないように過度に人々が通る場所には近づかないようにする、といった処理を行ったりする。
【0089】
このステップS7の場合、ステップS5での人エージェントの次のステップでの行動を決定しているので、それを考慮して、上述の処理を実行する。そのため、人と共存する実空間で活動するロボットアプリケーションプログラムの当否を、仮想シミュレーション空間内で判断することができる。
【0090】
その後ステップS9で、物理エンジン28において、各エージェントの行動を実現する。詳しくいうと、ステップS9では、先に説明したように、各エージェント(ロボット含む)が意図した動きを仮想シミュレーション空間22内で実施する処理が行われ、他の障害物、構造物や他のエージェントとの干渉が何もなければ、各エージェントは意図したとおりに動く。たとえば、エージェントが1歩前進しようとした場合、その意図通り、エージェントが1歩前進する。
【0091】
ところが、干渉がある場合、物理学法則(力学法則)に従って各エージェントの実際の動きが処理される。単純な場合、たとえば壁に向かって進もうとすると、壁に衝突し、それ以上前進できないし、一定の反発係数に従って反力を受ける。エージェント同士の衝突の場合、前進する動きと、反力による移動が重なり合って、たとえば、単純な例を考えると、前進中にたとえば側方から衝突すると、斜め前方へと実際には動くことになる。
【0092】
次のステップS11で、環境データやセンサデータなどを更新する。
【0093】
そして、ステップS13でシミュレーションを終了するかどうか判断し、シミュレーションを続行するなら再び先のステップS3に戻り、たとえば行動決定プログラムが終了するなどした場合“YES”が判断され、シミュレーションを終了する。
【0094】
このように、シミュレーション装置16においてオブジェクティブ116に従ってロボットの周囲の人の行動を再現するようにシミュレーションを行い、その状態をディスプレイ105(
図1)で確認することにより、ロボットの行動をシミュレーションできるので、ロボットを実空間で実際に動かすことなく、人と共存する実空間で活動するロボットアプリケーションプログラム18の開発を効率的に行うことができる。
【0095】
上述のようなシミュレーションでは、予め設定された環境データ20やオブジェクティブモデル116に従って人エージェントの移動をシミュレーションするので、ロボットアプリケーションプログラムをデバッグするときに特殊な状況を再現しにくい。たとえばそのような状況が特定の時間帯でのみ発生する、人数が多いときのみ発生するなど、定型のオブジェクティブモデル116だけでは再現するのが難しいことが多い。したがって、十分なデバッグができず、最終的には実空間で確認しなければならなくなってはしまう。
【0096】
そこで、この実施例のシミュレーション装置16では、定型のオブジェクティブの他に、人エージェントの振る舞いや仕組みを再現するテストコード(ある特定の状況を再現(テスト)するためのスクリプト)を記述して実行可能なフレームワークを提案する。
【0097】
図11に示す例では、「離れた場所にいる子供が少し移動し、その後、ロボットと対話する(前へとやってくる)」というテスト内容を記載したスクリプトで、8つの命令が記述されている。日本語の行は該当のテストコードの意味を示し、次の英数字の行が実際のテストコードを示す。
【0098】
命令1は、「シミュレーション時間において5秒間実行し続ける」、という内容である。
【0099】
命令2は、Boy 02という「子供を生成する」、という内容である。
図5に示す出現率データ108は、予め定めた出現率に従って人生成モジュール110に、人エージェントを生成させる手段であるが、スクリプトのこの命令2は、その出現率に関係なく、任意のタイミングで任意の種類の人エージェントを人生成モジュール110から生成させることができる。それによって、デバッグのために、一度に多人数の人エージェントを仮想シミュレーション空間22に投入して特定の状況を再現させることができるのである。
【0100】
命令3は、人エージェントの位置を設定する、という内容である。
【0101】
命令4は、人エージェントを指定した場所へ移動させる、という内容である。
【0102】
命令5は、人エージェントが指定した目的地に場到着するまで待つ、という内容である。
【0103】
命令6は、人エージェントを新しい目的地へ移動させる、という内容である。
【0104】
命令7は、オブジェクティブを変更する、という内容である。ただし、オブジェクティブを変更するのは、移動モジュール114である。移動モジュール114のみがオブジェクティブモデル116にアクセスできるからである。また、オブジェクティブの前部を変更するのでは、オブジェクティブを利用してデバッグ用の特定状況を再現しようとする趣旨に反する(時間が掛かり過ぎる)ので、スクリプトによるオブジェクティブの変更は、第1命令セットであるオブジェクティブの一部の命令を変更する。
【0105】
命令8は、「シミュレーション時間において5分間実行し続ける」、という内容である。スクリプトの最終行まで到達するとシミュレーションは)終了する、という設定にしているため、「人がロボットに近づいている様子」を開発者が5分間見て、動作を検証する目的でこの命令8を記述している。
【0106】
なお、スクリプトが読み込まれると、人シミュレータ26の各モジュール110および114は、「確率的な遷移」を行わない、特殊な命令モードに移行する。そのため、人エージェントの生成や、目的地の設定、オブジェクティブの決定(とそのタイミング)を全てスクリプトで設定する必要がある。したがって、スクリプト122は、2のモジュール110および114に直接命令を出すことができるようになっている。
【0107】
そして、上述のようにしてテストモードが呼び出されると、シミュレーション装置16のプロセサ(図示せず)は、
図12の最初のステップS21で、スクリプト122のテストコードを1行(
図11の英数字の行)読み込む。
【0108】
読み取ったテストコードに基づいて、ステップS23、S29、S33、S37またはS41(S43)で、テストコードの内容を判断し、その結果に応じて、ステップS25、S31、S35、S39またはS45で所要の処理を、シミュレーション装置16の1または2以上のプロセサが実行する。そして、ステップS27でその結果をディスプレイ105(
図1)に表示するとともに、ネットワーク(図示せず)から操作装置14へ出力する。したがって、開発者すなわちオペレータがそのテストコードに従った人エージェントの生成や行動を確認することができる。
【0109】
詳しく説明すると、ステップS23では、ステップS21で読み取ったテストコードが人エージェントの生成命令であるかどうか、判断する。“YES”なら、ステップS25において、人生成モジュール110によって、人エージェントを初期値に生成させる。ただし、人エージェントは、人シミュレータ26の1ステップ毎に生成される。その後、ステップS27において、ステップS25でのテストコードの実行結果を、ディスプレイ105およびネットワークへ出力する。
【0110】
ステップS27では、ステップS21で読み取ったテストコードが人エージェントの位置変更命令であるかどうか、判断する。“YES”なら、ステップS29において、移動モジュール114によって、指定した人エージェントの現在位置を変更させる。その後、ステップS27において、ステップS31でのテストコードの実行結果を、ディスプレイ105およびネットワークへ出力する。
【0111】
ステップS31では、ステップS21で読み取ったテストコードが人エージェントの移動命令であるかどうか、判断する。“YES”なら、ステップS33において、移動モジュール114によって、指定した人エージェントの移動を開始させる。その後、ステップS27において、ステップS35でのテストコードの実行結果を、ディスプレイ105およびネットワークへ出力する。
【0112】
ステップS35では、ステップS21で読み取ったテストコードがオブジェクティブの設定命令であるかどうか、判断する。“YES”なら、ステップS37において、シミュレーション装置16のプロセサが、オブジェクティブモデル116の中の対応するオブジェクティブを変更する。その後、ステップS27において、ステップS39でのテストコードの実行結果を、ディスプレイ105およびネットワークへ出力する。それによって、開発者は自分の設定したスクリプトに従ったシミュレーションを目視によって確認することができる。ただし、このオブジェクティブの変更は移動モジュール114によって行う。具体的には、先に説明したようにメモリに設定されているオブジェクティブをそのメモリから読み出し、該当する箇所のソースコードをキーボードなどを使って変更することによって、オブジェクティブを変更することができる。
【0113】
ステップS39では、ステップS21で読み取ったテストコードが待機命令であるかどうか、判断する。“YES”なら、次のステップS43において、さらに待機条件(たとえば、テストコード1または8での設定時間の経過)が成立したかどうか判断する。“YES”なら、ステップS45で、ステップS27と同様に、そのテストコードの実行結果を、ディスプレイ105およびネットワークへ出力する。
【0114】
図10および
図12に示すように、スクリプト122とオブジェクティブ116を別々に実行可能とした理由は、スクリプトとオブジェクティブの目的(および抽象度)が異なるためである。
【0115】
すなわち、スクリプト122は、「(複数の人エージェントの生成や行動変化を含む)特定の状況の再現」が目的であって、この中に、特定の状況を再現するための、(複数の)人エージェントの生成のタイミング,移動のタイミング、オブジェクティブの変更タイミングを記載したものであり、(スクリプトを使用しない)通常のシミュレーションでは利用できない。
【0116】
これに対して、オブジェクティブ116は「1人の人エージェントがロボットの存在に対して行う反応行動」を記載して利用することを目的としている。そのため、オブジェクティブ116は、遷移確率さえ定義してしまえば、(スクリプトを使用しない)通常のシミュレーションで容易に使用することができる。
【0117】
また,このように分類をすることで、スクリプトからは、オブジェクティブは下位の変更可能なライブラリとして見ることが可能になる。つまり、スクリプトによってオブジェクティブを使用することで、再現したい状況を簡単に記述することができる。
【0118】
なお、このシミュレーションシステム10が行動をシミュレーションできるロボットは実施例で説明した
図3および
図4に示すロボット12に限定されるものではない。他の形式、構造のコミュニケーションロボットにもこのシミュレーション装置は適用可能である。