(57)【要約】      （修正有）【課題】シミュレーションシステムにおいてロボットアプリケーションプログラムのデバッグを容易に行えるようにする。【解決手段】ロボットシステムのシミュレーション装置は、仮想シミュレーション空間におけるロボットの動作をロボットアプリケーションプログラムの１ステップ毎にシミュレーションするロボットシミュレータを含む。シミュレーション装置は、ユーザインタフェースによってオペレータが入力した希望実行速度に応じて、シミュレーションの実行速度を変更可能としている。具体的には、希望実行速度（ｓ’）に基づいた希望実行周期（ｐ）と現実世界での１ステップの実行時間（ｔ）との差の時間だけシミュレーションをスリープさせる。【選択図】図１１
2020157442.tif 000002
【特許請求の範囲】
【請求項１】
仮想シミュレーション空間に投入したロボットエージェントおよび人エージェントの行動をシミュレーションし、その仮想シミュレーション空間をディスプレイに表示するシミュレーションシステムであって、
シミュレーションの１ステップの希望実行速度を設定する希望実行速度設定手段、および
前記希望実行速度に応じてシミュレーションの１ステップの実行時間を設定する実行時間設定手段を備える、シミュレーションシステム。
【請求項２】
前記実行速度設定手段は、前記希望実行速度で決まる希望実行周期およびシミュレーションの１ステップの基本実行時間に基づいて、前記実行時間を設定する、請求項1記載のシミュレーションシステム。
【請求項３】
前記実行時間設定手段は、前記希望実行周期と前記現実世界での実行時間と差に相当する時間をスリープさせるスリープ手段を含む、請求項２記載のシミュレーションシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はシミュレーションシステムに関し、特にたとえば、デバッグ機能を持ったシミュレーションシステムに関する。
【背景技術】
【０００２】
従来のこの種のシミュレーション装置が非特許文献１、２で開示されている。これらの非特許文献１、２のシミュレーション装置では、センサやアクチュエータをシミュレーションして可視化することによって、人との共存環境におけるロボットの適応をより簡単にシミュレーションすることができる。
【０００３】
特許文献１では、本件発明者等は、さらに環境の変化（歩行者や物体の変化など）をシミュレーションすることによって、ロボットの行動決定プログラム（ロボットアプリケーションプログラム）の開発を効率的に行える、シミュレーションシステムを提案している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７‐１７０５８４（B25J 5/00, B25J 13/00）
【非特許文献】
【０００５】
【非特許文献１】https://www.openrobots.org/morse/doc/stable/morse.html
【非特許文献２】http://gazebosim.org/
【発明の概要】
【発明が解決しようとする課題】
【０００６】
街角などで動作するサービスロボットのプログラムは複雑であり、特定の瞬間（たとえばロボットと周囲の歩行者が特定の条件ですれ違った瞬間）にのみ生ずるバグが存在し得る。このような特定の瞬間に生じるバグの原因解明は、シミュレーションだけでは難しく、一般的には、ログファイルを利用する。ログデータにはセンシング情報以外は欠如しているため、開発者には、ログデータへ大量に残されたセンサデータのみから、実世界の状況の様子を想像し、問題解明を行う作業が求められる。特に、特定の瞬間に生じるバグでは、プログラムの内部状態の変化と実世界の状況変化の対応づけをセンサデータのみから想像し、問題の原因を明らかにする作業が必要となる。この作業は困難であり、デバッグに多大な時間を要する。
【０００７】
それゆえに、この発明の主たる目的は、新規な、シミュレーションシステムを提供することである。
【０００８】
この発明の他の目的は、バグの原因追及を容易にし、デバッグを効率的に実行できる、シミュレーションシステムを提供することである。
【課題を解決するための手段】
【０００９】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【００１０】
第１の発明は、仮想シミュレーション空間に投入したロボットエージェントおよび人エージェントの行動をシミュレーションし、その仮想シミュレーション空間をディスプレイに表示するシミュレーションシステムであって、シミュレーションの１ステップの希望実行速度を設定する希望実行速度設定手段、および希望実行速度に応じてシミュレーションの１ステップの実行時間を設定する実行時間設定手段を備える、シミュレーションシステムである。
【００１１】
第１の発明では、シミュレーションシステム（１０：実施例において相当する部分を例示する参照符号。以下、同様。）は、仮想シミュレーション空間（２２）に、ロボット（１２）および人エージェントを投入する。たとえば、ロボット（１２）の動作はロボットシミュレータ（２４）がシミュレートし、人エージェントは人シミュレータ（２６）がそれぞれシミュレートする。実行速度設定手段（１０５、１０９、１１１、１０７）によって希望実行速度（ｓ’）を設定することができ、実行時間設定手段（Ｓ３１、Ｓ３５）が、その希望実行速度に応じたシミュレーションの１ステップの実行時間を設定する。
【００１２】
第１の発明によれば、希望実行速度を設定することによって、それによって１ステップのシミュレーションの実行時間を長くすることができるので、瞬間的に生じるバグの原因追及が容易になり、デバッグを効率的に実行できる。
【００１３】
第２の発明は、第１の発明に従属し、実行速度設定手段は、希望実行速度で決まる希望実行周期およびシミュレーションの１ステップの「現実世界での実行時間」に基づいて、１ステップの実行時間を設定する、シミュレーションシステムである。
【００１４】
第２の発明では、希望実行速度（ｓ’）で決まる実行周期（ｐ＝ｓ’×１／ｆｐｓ）と、現実世界での実行時間（ｔ）とに基づいて、１ステップの実行時間を設定する。
【００１５】
第２の発明によれば、希望実行速度を設定することによって、任意に実行時間を設定できる。
【００１６】
第３の発明は、第２の発明に従属し、実行速度設定手段は、希望実行周期と現実世界での実行時間と差に相当する時間をスリープさせるスリープ手段を含む、シミュレーションシステムである。
【００１７】
第３の発明では、スリープ手段（Ｓ３３、Ｓ１７）が希望実行周期（ｐ）と現実世界での実行時間（ｔ）と差に相当する時間（ｐ--ｔ）、シミュレーションをスリープさせる。
【００１８】
第３の発明によれば、希望実行速度に応じて必要な時間シミュレーションをスリープさせるので、バグの状況を容易に視認することができる。
【発明の効果】
【００１９】
この発明によれば、シミュレーションにおける１ステップを実行する時間を長くすることができるので、特定の瞬間で生じるバグの原因追及が容易になる。そのために、ロボットアプリケーションプログラムのデバッグを効率的に実行できる。
【００２０】
この発明の上述の目的、その他の目的、特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００２１】
【図１】図１はこの発明の一実施例のシミュレーションシステムを示す機能ブロック図である。
【図２】図２はこの発明が適用されるロボットの一例を示す図解図である。
【図３】図３は図２に示すロボットの電気的な構成を示すブロック図である。
【図４】図４は図１の仮想シミュレーション空間の一例を示す図解図である。
【図５】図５は図４の人シミュレータの詳細を示す機能ブロック図である。
【図６】図６は人エージェントの基本オブジェクティブモデルの一例を示す図解図である。
【図７】図７は人エージェントの基本オブジェクティブモデルの他の例を示す図解図である。
【図８】図８は人エージェントのオブジェクティブモデルのその他の例を示す図解図である。
【図９】図９は図４の仮想シミュレーション空間の一部における人エージェントの移動の一例を示す図解図である。
【図１０】図１１は図１実施例のシミュレーションシステムのオブジェクティブに従った動作の一例を示すフロー図である。
【図１１】図１１は図１実施例の動作を示すフロー図である。
【図１２】図１２は減速倍率を入力するためのユーザインタフェースの一例を示す図解図である。
【発明を実施するための形態】
【００２２】
図１を参照して、この実施例のシミュレーションシステム１０は、ロボット１２、ロボット１２を遠隔操作する操作装置１４およびロボット１２をシミュレートしたロボットエージェントや人（歩行者）をシミュレートした人エージェントをシミュレーションするシミュレーション装置１６含む。シミュレーションシステム１０において、ロボット１２を除いて、１台または２台以上のコンピュータ（プロセサ）によって実現される。
【００２３】
この実施例のロボット１２は、たとえば図２に示すコミュニケーションロボットのように、人との共存環境で活動するロボットである。このようなロボット１２は環境の中に存在する人の行動に影響を受けるので、この実施例のシミュレーション装置１６では、ロボット１２の行動をロボットアプリケーションプログラム（ロボット行動決定プログラム）に従ってシミュレーションする際に、人の行動もシミュレーションすることによって、ロボット１２のための安全なロボットアプリケーションプログラムの開発を支援する。
【００２４】
ここで、図２および図３を参照して、この発明の理解に必要な範囲でロボット１２の構成について説明する。ロボット１２は台車３０を含み、台車３０の下面にはロボット１２を移動させる２つの車輪３２および１つの従輪３４が設けられる。２つの車輪３２は車輪モータ３６（図３参照）によってそれぞれ独立に駆動され、台車３０すなわちロボット１２を前後左右の任意方向に動かすことができる。
【００２５】
台車３０の上には、円柱形のセンサ取り付けパネル３８が設けられ、このセンサ取り付けパネル３８には、多数の距離センサ４０が取り付けられる。これらの距離センサ４０は、たとえば赤外線や超音波などを用いてロボット１２の周囲の物体（人や障害物など）との距離を測定するものである。
【００２６】
センサ取り付けパネル３８の上には、胴体４２が直立して設けられる。また、胴体４２の前方中央上部（人の胸に相当する位置）には、上述した距離センサ４０がさらに設けられ、ロボット１２の前方の、主として人との距離を計測する。また、胴体４２には、その側面側上端部のほぼ中央から伸びる支柱４４が設けられ、支柱４４の上には、全方位カメラ４６が設けられる。全方位カメラ４６は、ロボット１２の周囲を撮影するものであり、後述する眼カメラ７０とは区別される。この全方位カメラ４６としては、たとえばＣＣＤやＣＭＯＳのような固体撮像素子を用いるカメラを採用することができる。
【００２７】
胴体４２の両側面上端部（人の肩に相当する位置）には、それぞれ、肩関節４８Ｒおよび肩関節４８Ｌによって、上腕５０Ｒおよび上腕５０Ｌが設けられる。図示は省略するが、肩関節４８Ｒおよび肩関節４８Ｌは、それぞれ、直交する３軸の自由度を有する。すなわち、肩関節４８Ｒは、直交する３軸のそれぞれの軸廻りにおいて上腕５０Ｒの角度を制御できる。肩関節４８Ｒの或る軸（ヨー軸）は、上腕５０Ｒの長手方向（または軸）に平行な軸であり、他の２軸（ピッチ軸およびロール軸）は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節４８Ｌは、直交する３軸のそれぞれの軸廻りにおいて上腕５０Ｌの角度を制御できる。肩関節４８Ｌの或る軸（ヨー軸）は、上腕５０Ｌの長手方向（または軸）に平行な軸であり、他の２軸（ピッチ軸およびロール軸）は、その軸にそれぞれ異なる方向から直交する軸である。
【００２８】
また、上腕５０Ｒおよび上腕５０Ｌのそれぞれの先端には、肘関節５２Ｒおよび肘関節５２Ｌが設けられる。図示は省略するが、肘関節５２Ｒおよび肘関節５２Ｌは、それぞれ１軸の自由度を有し、この軸（ピッチ軸）の軸回りにおいて前腕５４Ｒおよび前腕５４Ｌの角度を制御できる。
【００２９】
前腕５４Ｒおよび前腕５４Ｌのそれぞれの先端には、人の手に相当するハンド５６Ｒおよびハンド５６Ｌがそれぞれ設けられる。これらのハンド５６Ｒおよび５６Ｌは、詳細な図示は省略するが、開閉可能に構成され、それによってロボット１２は、ハンド５６Ｒおよび５６Ｌを用いて物体を把持または挟持することができる。ただし、ハンド５６Ｒ、５６Ｌの形状は実施例の形状に限らず、人の手に酷似した形状や機能を持たせるようにしてもよい。
【００３０】
また、図示は省略するが、台車３０の前面、肩関節４８Ｒと肩関節４８Ｌとを含む肩に相当する部位、上腕５０Ｒ、上腕５０Ｌ、前腕５４Ｒ、前腕５４Ｌ、ハンド５６Ｒおよびハンド５６Ｌには、それぞれ、接触センサ５８（図３で包括的に示す）が設けられる。台車３０の前面の接触センサ５８は、台車３０への人間や他の障害物の接触を検知する。したがって、ロボット１２は、その自身の移動中に障害物との接触が有ると、それを検知し、直ちに車輪３２の駆動を停止してロボット１２の移動を急停止させることができる。また、その他の接触センサ５８は、当該各部位に触れたかどうかを検知する。
【００３１】
胴体４２の中央上部（人の首に相当する位置）には首関節６０が設けられ、さらにその上には頭部６２が設けられる。図示は省略するが、首関節６０は、３軸の自由度を有し、３軸の各軸廻りに角度制御可能である。或る軸（ヨー軸）はロボット１２の真上（鉛直上向き）に向かう軸であり、他の２軸（ピッチ軸、ロール軸）は、それぞれ、それと異なる方向で直交する軸である。
【００３２】
頭部６２には、人の口に相当する位置に、スピーカ６４が設けられる。スピーカ６４は、ロボット１２が、それの周辺の人に対して音声によってコミュニケーションをとるために用いられる。また、人の耳に相当する位置には、マイク６６Ｒおよびマイク６６Ｌが設けられる。以下、右のマイク６６Ｒと左のマイク６６Ｌとをまとめてマイク６６ということがある。マイク６６は、周囲の音、とりわけコミュニケーションを実行する対象である人間の音声を取り込む。
【００３３】
さらに、人の目に相当する位置には、右の眼球部６８Ｒおよび左の眼球部６８Ｌが設けられる。右の眼球部６８Ｒおよび左の眼球部６８Ｌは、それぞれ右の眼カメラ７０Ｒおよび左の眼カメラ７０Ｌを含む。以下、右の眼球部６８Ｒと左の眼球部６８Ｌとをまとめて眼球部６８ということがある。また、右の眼カメラ７０Ｒと左の眼カメラ７０Ｌとをまとめて眼カメラ７０ということがある。
【００３４】
眼カメラ７０は、ロボット１２に接近した人の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。この実施例では、ロボット１２は、この眼カメラ７０からの映像信号によって、人の左右両目のそれぞれの視線方向（ベクトル）を検出する。
【００３５】
また、眼カメラ７０は、上述した全方位カメラ４６と同様のカメラを用いることができる。たとえば、眼カメラ７０は、眼球部６８内に固定され、眼球部６８は、眼球支持部（図示せず）を介して頭部６２内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、２軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この２軸の一方は、頭部６２の上に向かう方向の軸（ヨー軸）であり、他方は、一方の軸に直交しかつ頭部６２の正面側（顔）が向く方向に直行する方向の軸（ピッチ軸）である。眼球支持部がこの２軸の各軸廻りに回転されることによって、眼球部６８ないし眼カメラ７０の先端（正面）側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ６４、マイク６６および眼カメラ７０の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
【００３６】
このように、この実施例のロボット１２は、車輪３２の独立２軸駆動、肩関節４８の３自由度（左右で６自由度）、肘関節５２の１自由度（左右で２自由度）、首関節６０の３自由度および眼球支持部の２自由度（左右で４自由度）の合計１７自由度を有する。
【００３７】
図３はロボット１２の電気的な構成を示すブロック図である。この図３を参照して、ロボット１２は、１つまたは２以上のプロセサ８０を含む。プロセサ８０は、バス８２を介して、メモリ８４、モータ制御ボード８６、センサ入力／出力ボード８８および音声入力／出力ボード９０に接続される。
【００３８】
メモリ８４は、図示は省略をするが、ＲＯＭ、ＨＤＤおよびＲＡＭを含む。ＲＯＭおよびＨＤＤには、各種プログラムが予め記憶される。
【００３９】
モータ制御ボード８６は、たとえばＤＳＰで構成され、各腕や首関節６０および眼球部６８などの各軸モータの駆動を制御する。すなわち、モータ制御ボード８６は、プロセサ８０からの制御データを受け、右眼球部６８Ｒの２軸のそれぞれの角度を制御する２つのモータ（図３では、まとめて「右眼球モータ９２」と示す）の回転角度を制御する。同様にして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、左眼球部６８Ｌの２軸のそれぞれの角度を制御する２つのモータ（図３では、まとめて「左眼球モータ９４」と示す）の回転角度を制御する。
【００４０】
また、モータ制御ボード８６は、プロセサ８０からの制御データを受け、肩関節４８Ｒの直交する３軸のそれぞれの角度を制御する３つのモータと肘関節５２Ｒの角度を制御する１つのモータとの計４つのモータ（図３では、まとめて「右腕モータ９６」と示す）の回転角度を制御する。同様にして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、肩関節４８Ｌの直交する３軸のそれぞれの角度を制御する３つのモータと肘関節５２Ｌの角度を制御する１つのモータとの計４つのモータ（図３では、まとめて「左腕モータ９８」と示す）の回転角度を制御する。
【００４１】
さらに、モータ制御ボード８６は、プロセサ８０からの制御データを受け、首関節６０の直交する３軸のそれぞれの角度を制御する３つのモータ（図３では、まとめて「頭部モータ１００」と示す）の回転角度を制御する。そして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、車輪３２を駆動する２つのモータ（図３では、まとめて「車輪モータ３６」と示す）の回転角度を制御する。
【００４２】
モータ制御ボード８６にはさらにハンドアクチュエータ１０１が結合され、モータ制御ボード８６は、プロセサ８０からの制御データを受け、ハンド５６Ｒ、５６Ｌの開閉を制御する。
【００４３】
センサ入力／出力ボード８８は、モータ制御ボード８６と同様に、ＤＳＰで構成され、各センサからの信号を取り込んでプロセサ８０に与える。すなわち、距離センサ４０のそれぞれからの反射時間に関するデータがこのセンサ入力／出力ボード８８を通じてプロセサ８０に入力される。また、全方位カメラ４６からの映像信号が、必要に応じてセンサ入力／出力ボード８８で所定の処理を施してからプロセサ８０に入力される。眼カメラ７０からの映像信号も、同様にして、プロセサ８０に入力される。また、上述した複数の接触センサ５８（図３では、まとめて「接触センサ５８」と示す）からの信号がセンサ入力／出力ボード８８を介してプロセサ８０に与えられる。音声入力／出力ボード９０もまた、同様に、ＤＳＰで構成され、プロセサ８０から与えられる音声合成データに従った音声または声がスピーカ６４から出力される。また、マイク６６からの音声入力が、音声入力／出力ボード９０を介してプロセサ８０に与えられる。
【００４４】
また、プロセサ８０は、バス８２を介して通信ＬＡＮボード１０２に接続される。通信ＬＡＮボード１０２は、たとえばＤＳＰで構成され、プロセサ８０から与えられた送信データを無線通信モジュール１０４に与え、無線通信モジュール１０４は送信データを、ネットワークを介してサーバ（図示せず）等に送信する。また、通信ＬＡＮボード１０２は、無線通信モジュール１０４を介してデータを受信し、受信したデータをプロセサ８０に与える。
【００４５】
なお、実施例のシミュレーションシステム１０が適用可能なロボットは、図２および図３に示すロボット１２に限定されるものではなく、他の形式、構造のコミュニケーションロボットにもこのシミュレーション装置は適用可能である。
【００４６】
図１に戻って、操作装置１４は、基本的には１または２以上のコンピュータまたはプロセサによって構成され、そのプロセサのメモリ（図示せず）にロボットアプリケーションプログラム１８が設定されていて、そのロボットアプリケーションプログラムがコンピュータからたとえば無線でロボット１２またはシミュレーション装置１６に与えられる。ロボットアプリケーションプログラム１８は、ロボット１２に対すアプリケーションプログラムであり、たとえばロボット１２を案内ロボットとしとて動作させるときには、そのための動作をロボット１２が実行するようなプログラムである。
【００４７】
操作装置１４のメモリにはさらに、環境データ２０を予め記憶している。環境データ２０は主として図４に示す仮想シミュレーション空間２２の地図データおよびその仮想シミュレーション空間２２内での人エージェントの出現率データを含む。環境および環境内のオブジェクトは３次元モデルデータとして表され、３次元仮想空間として視覚化される。
【００４８】
図４に示す仮想シミュレーション空間２２は、図中点線矩形で示す出入口２２ａを有する３次元閉空間を想定している。この仮想シミュレーション空間２２においては黒色太線で示す通路２２ｂが設定されていて、ロボット１２や人エージェントはその通路５０や広場などを通行し、またはそこに存在する。これらの通路２２ｂや広場は建物や壁などオブジェクトによって区画され、図中丸印で示す場所で分岐または合流する。
【００４９】
シミュレーション装置１６は、基本的には1または２以上のプロセサないしコンピュータで構成され、ロボット１２をシミュレートするロボットシミュレータ２４および歩行者のような人エージェントをシミュレートする人シミュレータ２６を含み、それぞれのシミュレーション結果が物理エンジン２８に入力される。
【００５０】
ロボットシミュレータ２４は、たとえば先の非特許文献１として例示したＭＯＲＳＥシミュレータであり、このＭＯＲＳＥシミュレータは、ロボット１２と同様の、多くのセンサ、アクチュエータおよびロボットのモデルを提供し、そのようなモデル用のＡＰＩ（Application Programming Interface）も利用できる。
【００５１】
センサシミュレーションにおいては、たとえば、カメラ画像の場合には、カメラ視点からの光学的な計算を行い、カメラ視点毎の画像情報を生成する。レーザ距離計の場合には、レーザによるスキャンを模して、センサから各方位へ距離計測を行い、その結果をセンサ値として保存する。
【００５２】
開発者がロボットのためのロボットアプリケーションプログラムを準備するとき、それらのプログラムはこれらのＡＰＩにアクセスしてセンサデータ（たとえば、レーザ距離計からの距離の読み取り）およびアクチュエータへのコマンドの送信（たとえば、移動速度）を行う。
【００５３】
人シミュレータ２６は、定期的に新しい歩行者を生成し、それらの位置を更新し、それらがシミュレートされた環境（仮想シミュレーション空間２２）を離れるときにそれらを除去する。歩行者すなわち人は、３次元オブジェクトとして表現され、仮想シミュレータ空間２２内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。
【００５４】
ただし、人シミュレータ２６には図１に示すように環境データ２０が与えられるので、人シミュレータ２６は、その環境データに含まれる出現率と呼ばれる予め定義された確率で新しい歩行者を周期的に生成する。そして、その歩行者は図４に示す出入口２２ａの１つに割り当てられ、他の１つに行くように設定される。
【００５５】
なお、歩行者はしばしばグループとして（家族やカップルのように）生成され、それらがグループで表示される場合、サイズはグループメンバの分布によって定義し、すべてのメンバが同じ目的を共有すると仮定する。
【００５６】
物理エンジン２８は、物理的な力や法則などに基づいて、ロボットや人エージェントがどのような移動経路をたどるかを計算する。詳しくいうと、物理エンジン２８は、ロボットシミュレータ２４および人シミュレータ２６からの各エージェント（ロボット含む）が意図した動きを、仮想シミュレーション空間２２（図４）で実行する処理を実行する。このとき、他の障害物、構造物や他のエージェントとの干渉が何もなければ、意図したとおりの動きを生成する。しかしながら、干渉がある場合、物理学法則（力学法則）に従って、各エージェントの実際の動きを処理する。そして、物理エンジン２８からは統合したシミュレーションデータが出力される。
【００５７】
シミュレーション装置１６には、ディスプレイ１０５設けられていて、このディスプレイ１０５によって、たとえば図４に示すような仮想シミュレーション空間の画像が、その中に存在するシミュレートされたロボットや人エージェントとともに、表示される。たとえば、人エージェントは、３次元オブジェクトとして表現され、仮想シミュレーション空間２２内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。ロボットアプリケーションプログラム１８の開発者は、そのディスプレイ１０５に表示された画像で確認しながら、ロボット１２の行動決定プログラム（アプリケーションプログラム）を作製し、修正する。
【００５８】
さらに、シミュレーション装置１６には入力装置１０７が付設されている。この入力装置１０７は、たとえば、キーボードあるいはタッチパネルであってよく、タッチパネルの場合にはディスプレイ１０５に組み込み、ディスプレイ１０５をタッチディスプレイとして構成することもできる。入力装置１０７は、オペレータが後述する希望実行速度ｓ’を設定する際に利用できる。
【００５９】
図５を参照して、人シミュレータ２６を詳細に説明する。人シミュレータ２６は、ロボットシミュレータ２４と同様に、シミュレーション装置１６のコンピュータないしプロセサによって実現される機能であり、人生成モジュール１１０を含む。この人生成モジュール１１０は、上述のように、環境データ２０に含まれる出現率データ１０８に従って新しい歩行者（人エージェント）を、地図データ１０６が表す、図４に一例を示す仮想シミュレーション空間２２内に、周期的に生成する。
【００６０】
出現率データ１０８は、シミュレーション装置１６の仮想シミュレーション空間２２に投入する人エージェントのための、人の形状、すなわち大人、子供、男性、女性などの人の形状（パターン）やそれぞれの人の出現率が予め設定されているデータベースであり、設定された確率で設定された形状の人エージェントが生成される。
【００６１】
なお、この出現率データ１０８では、曜日や時間ごとに異なるデータセットを保持しておき、曜日や時間を指定してシミュレーションできるようにしてもよい。そうすれば、ある時間帯にロボットを動かすとどうなるのかなど、いろいろシミュレーションすることができる。
【００６２】
ただし、生成される人エージェントがグループを形成することを出現率データ１０８が示していれば、人生成モジュール１１０は、シミュレーションパラメータとして設定されているグループメンバデータ１１２従ったメンバ構成のグループで複数の人エージェントを生成する。
【００６３】
移動モジュール１１４は、人生成モジュール１１０が生成した人エージェントを、オブジェクティブモデル（Objective Model）１１６に基づいて、仮想シミュレーション空間２２（図４）内を移動させる。ここで、オブジェクティブ（Objective）とは、仮想シミュレーション空間２２において、人エージェント（図示せず）の視界にロボットエージェント（図示せず）が入ったときに、人エージェントが示す反応の仕方、つまり人が実空間で実際に執り得る対ロボット行動パターンを規定する命令セットである。この実施例では後述の４つの典型的な反応の態様（オブジェクティブ)をモデルとして設定しておき、移動モジュール１１４は人エージェントを移動させるとき、そのモデルが示すオブジェクティブに従って移動させる。つまり、オブジェクティブ１１６は、仮想シミュレーション空間においてロボットの存在に対する反応行動を人エージェントに行わせる、第１命令セットとして機能する。これらのオブジェクティブはシミュレーションシステム１０の第１メモリ（図示せず）に記憶されている。
【００６４】
なお、このオブジェクティブモデル１１６に予め設定されている利用可能なオブジェクティブは、たとえば上記第１メモリから読み出してそれらの一覧をたとえばディスプレイ１０５などに表示するなどして、デバッグしようとする開発者が知ることができる。開発者は、その中の任意のオブジェクティブを選択して、後述のようにスクリプト(１２２)でそのオブジェクティブを変更（更新）することが可能である。このとき、開発者はシミュレーションシステム１０に設けられているキーボードなどの入力装置（図示せず）を用いて、要変更箇所を変更することができる。そして、その変更（更新）されたオブジェクティブもまた第１メモリに記憶される。つまり、オブジェクティブモデル１１６は，拡張性を有するように設計しているので、別の誰かが更新したオブジェクティブを一覧情報として知るこことができる点は、有効である。
【００６５】
たとえば、ロボットが自分の視野に入ったときに人が執る行動パターン（オブジェクティブ）として、図６および図７に示す、ロボットと対話するパターンと、ロボットを観察するパターンがある。
【００６６】
図６は、人（「i」で示す）が自分の視野内にロボット１２を発見すると、ロボット１２の回りに、ロボット１２から停止距離Ｄstopを隔てて停止し、ロボット１２と対話するオブジェクティブを図解している。
【００６７】
図７は、人（「i」で示す）が自分の視野内にロボット１２を発見すると、ロボット１２の回りに、ロボット１２から停止距離Ｄstopよりもやや大きい観察距離Ｄobserveを隔てて停止し、ロボット１２を観察するオブジェクティブを図解している。
【００６８】
オブジェクティブとしては、その他、ロボットの傍を通りすぎるオブジェクティブ、およびロボットの傍を減速し、見ながら通りすぎるオブジェクティブがあり、移動モジュール１１４では、人エージェントがその登録しているどれかのオブジェクティブに従って移動するようにシミュレーションする。
【００６９】
ただし、移動モジュール１１４は、シミュレーションパラメータに含まれるソーシャルフォースモデル（Social Force Model）１１８およびインタラクションモデル（Interaction with robot model）１２０からのそれぞれのモデルデータを考慮して、人エージェントの移動をシミュレートする。ソーシャルフォースモデルとは、後述の図８に示すように歩行者どうしがいかに影響して挙動が変わるかということを表すモデルである。たとえば、斥力または反力などとして知られている。
【００７０】
仮想シミュレーション空間２２内において、人エージェントの行動は、他のエージェントから影響されて変化するが（たとえば、人同士がぶつからないように避ける、ロボットを見たら近づく、など）。
【００７１】
たとえば図８に示すように、２人の人ｉおよびｊは相互に影響して次のステップでの移動位置を決定する場合がある、人エージェントｉは本来はｄi,jの方向へ移動するのであるが、人エージェントｊが人エージェントｉに対して角度θi,jの方向に速度ｖi,jで移動しようとしているため、人エージェントｉは、結局ｄ’i,jの方向へ移動することになる。
【００７２】
なお、インタラクションモデル１２０とは、人のロボットとの相互作用のパターンを予め設定しているモデルである。
【００７３】
図９は図４に示す仮想シミュレーション環境（空間）の一部を模式的に示していて、仮想シミュレーション空間２２は、出入口２２ａを設けた壁などのオブジェクト１２４で仕切られた閉空間を想定している。ただし、オブジェクト１２４はすべて、障害物として地図データ１０６に書き込まれている。
【００７４】
ロボットシミュレータ２４は、環境データ２０に含まれるロボット（ロボットエージェント）の位置等のデータに基づいて、ロボットアプリケーションプログラム１８に従ったロボットの次のステップでの行動をシミュレーションする。ここで、ロボットアプリケーションプログラム１８は、図３のセンサ入力／出力ボード８８に入力されるセンサ出力に応じて、各モータすなわちアクチュエータを制御してロボットの行動を決定するプログラムである。
【００７５】
図９の例でいえば、ロボットアプリケーションプログラム１８は、たとえば図９において、一方の出入口２２ａからロボット１２が仮想シミュレーション空間２２に入り、他方の出入口２２ａから出るまで、通路２２ｂに従って移動させるように設定されている。なお、図９において参照符号１２６が、シミュレーションのためにこの仮想シミュレーション空間２２に投入された人エージェントを示す。
【００７６】
人シミュレータ２６はさらに、必要な場合、オブジェクティブ１１６ではなく、スクリプト１２２に従ってシミュレーションを実行する。オブジェクティブ１１６は上述のように、予め設定した、定型の対ロボット反応パターンであるが、スクリプト１２２は、シミュレーション装置１６すなわち人シミュレータ２６に非定型の動作を行わせる命令である。ここで、スクリプトとは、コンピュータが理解できる言語への変換作業を省略して、簡単に解釈実行できるようにした簡易プログラム（命令セット）のことである。ソフトウェアの設計などにおいて、コンピュータに命令を与える際には、通常、人間が普通に読み書きできる言語から、コンピュータが理解できる言語、いわゆる機械語への変換が必要であるが、スクリプトは、そのような変換作業を省略して簡単に解釈実行できるようにした簡易プログラムである。これらのスクリプトは、第２命令セットに該当するが、それらはシミュレーションシステム１０の第２メモリ（図示せず）に記憶されている。ただし、第１メモリおよび第２メモリは同じメモリの異なる記憶場所であってよい。
【００７７】
ここで、まず、図１０を参照して、オブジェクティブモデル１１６に従った図１に示すシミュレーション装置１６における動作の一例を説明する。ただし、この図１０に示すシミュレーションは、複数のステップ（Ｓ３‐Ｓ１７）を１ステップとして実行する。実際的な運用において、シミュレーションの１ステップは最速０.１ミリ秒単位で実行可能であるが、ここでは１０ミリ秒単位に設定し、ロボットシミュレーションプログラム１８の実行は１００ミリ秒単位とすることが可能である。この例の場合、ロボットアプリケーションプログラム１８は、シミュレーション装置１６による１０ステップの実行毎に１度、実行される。つまり、この実施例では、このようにロボットアプリケーションプログラムの周期がシミュレーションの１ステップの実行周期より長い場合を想定している。
【００７８】
最初のステップＳ１において、シミュレーション装置１６のコンピュータ（以下、単に「コンピュータ」ということがある。）は、一例として図４（および図９）に示す通路２２ｂ上を移動するように設定されている、ロボットアプリケーションプログラム１８を読み込むとともに、環境データ２０を読み込む。すなわち、ロボット１２の行動をシミュレーションする図４（および図９）のような仮想シミュレーション空間２２の地図データ１０６および出現率データ１０８が示す仮想シミュレーション空間２２に投入する人エージェントの生成に関するパラメータ（出現頻度、移動経路、グループ人数、大人子供や男女の比率、背の高さなど）および各エージェント（ロボット１２を含む）の位置データなどを読み込む。なお、この仮想シミュレーション空間２２が、ロボット１２および人エージェントとともに、ディスプレイ１０５に表示される。
【００７９】
さらに、このステップＳ１では、シミュレーションの初期化を行う。つまり、実行速度ｓ＝１．０、理想実行ステップ数ｆｐｓをｆｐｓ＝３０．０としてそれぞれ設定する。ただし、ｆｐｓは、１秒間に何ステップのシミュレーションを実行するかを示す数値で、この実施例の初期設定では、１秒間に３０ステップのシミュレーションを実行するように、設定される。この場合、理想実行周期ｐはｐ＝１．０×１／ｆｐｓ＝１／３０（≒０．０３３）秒となる。
【００８０】
次のステップＳ３では、コンピュータは、シミュレーション１ステップの実行周期を計測するために、実行開始時間ｔｉｍｅ_ｓとして現在のシステム時刻を、たとえばシミュレーション装置１６のメモリ（図示せず）に、記憶する。
【００８１】
次のステップＳ５では、人シミュレータ２６の人生成モジュール１１０によって、環境データ２０が提示する人エージェントの生成に関する上述のパラメータおよびグループからの人パターンのデータに従って、仮想シミュレーション空間２２内で、１または２以上の人エージェントを生成して配置する。
【００８２】
ステップＳ７でコンピュータすなわち人シミュレータ２６は、環境データ２０が示す現在の人エージェントおよびロボット１２の位置に基づいて、そしてオブジェクティブモデル１１６が示す対ロボット行動パターンに基づいて、人エージェントの次のステップでの行動を決定する。なお、基本的な前述した４つのオブジェクティブの一覧は開発者（操作装置１４のオペレータ）が自由にアクセスできる形で提供される。さらに、他のオブジェクティブモデルを採用することもできる。
【００８３】
ステップＳ９でコンピュータすなわちロボットシミュレータ２４は、ロボットアプリケーションプログラム１８から１ステップ分の行動命令を受け取り、実行する。ただし、ロボットアプリケーションプログラムの周期がシミュレーションの１ステップの実行周期より長い場合には、このステップＳ９でロボットシミュレータ２４が何もしないこともある。
【００８４】
ロボットの行動としては、たとえば、ロボット１２がたとえば搬送ロボットや搭乗型ロボットのように目的地に向かうことが主目的のロボットである場合、他の人々の現在の位置や移動速度から、なるべく他人の移動に干渉しないような移動経路を計算する処理を行う。また、ロボット１２が人々にサービス提供することが目的のロボットである場合には、たとえば、ロボットに興味がありそうな人に接近するために、単純な場合では、ロボットの近傍で止まっている人を選択して、その人に向かって進む、また、人々が集まりがちな場所を選んでそのような場所でやってくる人を待ち受ける、また、混雑を起こさないように過度に人々が通る場所には近づかないようにする、といった処理を行ったりする。
【００８５】
ただし、ロボットの行動は、ステップＳ７で人エージェントの次のステップでの行動を決定しているので、それを考慮して、上述の処理を実行する。そのため、人と共存する実空間で活動するロボットアプリケーションプログラムの当否を、仮想シミュレーション空間内で判断することができる。
【００８６】
その後ステップＳ１１で、コンピュータすなわち物理エンジン２８において、各エージェントの行動を実現する。詳しくいうと、ステップＳ１１では、先に説明したように、各エージェント（ロボット含む）が意図した動きを仮想シミュレーション空間２２内で実施する処理が行われ、他の障害物、構造物や他のエージェントとの干渉が何もなければ、各エージェントは意図したとおりに動く。たとえば、エージェントが１歩前進しようとした場合、その意図通り、エージェントが１歩前進する。
【００８７】
ところが、干渉がある場合、物理学法則（力学法則）に従って各エージェントの実際の動きが処理される。単純な場合、たとえば壁に向かって進もうとすると、壁に衝突し、それ以上前進できないし、一定の反発係数に従って反力を受ける。エージェント同士の衝突の場合、前進する動きと、反力による移動が重なり合って、たとえば、単純な例を考えると、前進中にたとえば側方から衝突すると、斜め前方へと実際には動くことになる。
【００８８】
次のステップＳ１３で、環境データやセンサデータなどを更新する。
【００８９】
ステップＳ１５では、シミュレーション１ステップの実行周期を計測するために、実行完了時間ｔｉｍｅ_ｅとして現在のシステム時刻を、たとえばシミュレーション装置１６のメモリ（図示せず）に、記憶する。
【００９０】
さらに、ステップＳ１７で、実行速度に応じて、シミュレーション装置１６をスリープさせる。ただし、そのスリープ時間は、後に図１１を参照して詳細に説明する。
【００９１】
そして、ステップＳ１９でシミュレーションを終了するかどうか判断し、シミュレーションを続行するなら再び先のステップＳ３に戻り、たとえば行動決定プログラムが終了するなどした場合“ＹＥＳ”が判断され、シミュレーションを終了する。
【００９２】
このように、シミュレーション装置１６においてオブジェクティブ１１６に従ってロボットの周囲の人の行動を再現するようにシミュレーションを行い、その状態をディスプレイ１０５（図１）で確認することにより、ロボットの行動をシミュレーションできるので、ロボットを実空間で実際に動かすことなく、人と共存する実空間で活動するロボットアプリケーションプログラム１８の開発を効率的に行うことができる。
【００９３】
上述のシミュレーション動作において、ロボットアプリケーションプログラム１８の１ステップのシミュレーションを実行する実行速度ｓは、一定かつ高速であり、先に説明した瞬間的なバグの再現や検証は困難である。そこで、この実施例では、実行速度ｓを変更可能にすることによって、たとえば、バグが生じやすい状況でのみシミュレーションを低速で実行することで、プログラムとシミュレートされた状況を同時に視認できるようにし、問題の理解を促進し、効率的なデバッグを可能にする。
【００９４】
図１１はこのような実施例の動作を示すフロー図であり、この図１１の最初のステップＳ２１では、コンピュータは、オペレータが設定（入力）した、希望実行速度ｓ’を読み取る。
【００９５】
たとえば、図１２に示すような入力部１１１を有するユーザインタフェース１０９をディスプレイ１０５に表示する。オペレータは、入力部１１１に希望実行速度ｓ’を入力する。たとえば、その入力部１１１にプルダウンメニューを設定し、希望実行速度ｓ’として、たとえば「２」、「３」、「４」、「５」、…のどれかの数値が設定できるようにしておけばよい。あるいは、入力装置１０７で入力部１１１に直接数値を入力するようにしてもよい。
【００９６】
なお、このユーザインタフェース１０９には、さらに、現在の実行速度ｓと、適用（apply）ボタン１１３が表示されている。入力部１１１に希望実行速度ｓ’を入力した後に、この適用ボタン１１３を操作すると、ステップＳ２１での希望実行速度ｓ’の読取りが可能になる。
【００９７】
そして、ステップＳ２３で、ステップＳ２１で読み取った希望実行速度ｓ’を、実行速度ｓとして設定する。
【００９８】
ステップＳ２５では、コンピュータは、図１０を実行する際にコンピュータのメモリに記憶した、実行開始時間ｔｉｍｅ_ｓとステップＳ１５で記憶した実行完了時間ｔｉｍｅ_ｅに基づいて、基本実行時間ｔ（＝ｔｉｍｅ_ｅ−ｔｉｍｅ_ｓ）を取得する。
【００９９】
次のステップＳ２７で、コンピュータは、希望実行周期ｐを計算する（ｐ＝ｓ×１／ｆｐｓ）。上述のように、ステップＳ２１での初期設定で理想実行ステップ数ｆｐｓが「３０．０」として設定されているので、先のステップＳ２３で希望実行速度ｓ’をたとえば「３」と設定したときには、希望実行周期ｐは、３／３０.０（＝０．１）秒となる。つまり、初期設定による基本実行周期０．０３３秒に比べて、実行周期が３倍にされる。実行周期が３倍ということは、１ステップ当たりの実行時間が１／３に減速されたことを意味する。この意味で、希望実行速度ｓ’は、減速倍率ということもできる。
【０１００】
ステップＳ２９では、コンピュータは、その希望実行周期ｐによってシミュレーションが実行可能かどうか判断する。具体的には、希望実行周期ｐが基本実行時間ｔ秒（ステップＳ２５）より大きいかどうか（ｔ＜ｐ？）を判断する。
【０１０１】
“ＹＥＳ”の場合、すなわち、ｔ＜ｐの場合、コンピュータは、ステップＳ３１で、スリープ時間（ｐ-ｔ）秒を計算し、リターンする。そのスリープ時間に基づいて、先の図１０のステップＳ１７において、コンピュータは、シミュレーションをスリープさせる。つまり、このスリープ時間（ｐ-ｔ）だけ、当該ステップのシミュレーションが止まるため、結果的にシミュレーションの実行速度が減速される。そのため、バグが生じやすい状況でのみこのような減速（低速）シミュレーションを実行することで、プログラムとシミュレートされた状況を同時にディスプレイ１０５で視認することで、問題の理解を促進し、効率的なデバッグを実現することができる。
【０１０２】
上で挙げた例でいえば、実実行時間ｔが０．０１秒であったとすると、スリープ時間は０．１-０．０１＝０．０９秒となり、シミュレーションの次のステップが実行されるまで、０．０９秒スリープされる。
【０１０３】
ただし、ステップＳ２９で“ＮＯ”が判断されたとき、ステップＳ３３で、実行速度ｓおよび実行周期ｐを、それぞれ、実行可能な値、ｓ＝ｆｐｓ*ｔおよびｐ＝ｔとして設定する。
【０１０４】
この実施例では、実行速度を遅くする他、実行速度を早くすることも想定していて、ステップＳ３３は、実行速度を早くするとき（高速化しすぎた場合)を想定した処理を意味する。
【０１０５】
シミュレーション装置１６内で，３次元モデルの位置変更や、センサプロセスのシミュレーションを行った場合、シミュレーションの最大速度を無限大まで上げることはできず、どうしても、最大速度に限界がある。つまり、図１１のステップＳ３３では、最大速度での実行時間を基本実行時間tに制限するために、周期ｐにｔを代入することで、スリープをしないように設定している。そのために、実行速度ｓ＝ｆｐｓ×ｔとし、ステップＳ２７で計算する周期をｔとするようにした。したがって、ステップＳ３１で計算されるスリープ時間は「０」（ゼロ）となり、この場合のステップＳ１７（図１０）ではスリープされない。
【０１０６】
このように、この実施例において、低速実行を必要としないステップは、基本実行周期でシミュレートされる。
【０１０７】
なお、実施例で説明した具体的な数値は単なる例示であり、これらに限定されるものではなく、さらに適宜変更可能である。
【符号の説明】
【０１０８】
１０  …シミュレーションシステム
１２  …ロボット
１４  …操作装置
１６  …シミュレーション装置
１８  …ロボットアプリケーションプログラム
２２  …仮想シミュレーション空間
２４  …ロボットシミュレータ
２６  …人シミュレータ
２８  …物理エンジン
１０５…ディスプレイ
１０７…入力装置
１０９…ユーザインタフェース
１１１…入力部
【図１】
2020157442.tif 000003
【図２】
2020157442.tif 000004
【図３】
2020157442.tif 000005
【図４】
2020157442.tif 000006
【図５】
2020157442.tif 000007
【図６】
2020157442.tif 000008
【図７】
2020157442.tif 000009
【図８】
2020157442.tif 000010
【図９】
2020157442.tif 000011
【図１０】
2020157442.tif 000012
【図１１】
2020157442.tif 000013
【図１２】
2020157442.tif 000014