(57)【要約】    【課題】  ロボットシミュレータ上での動作と実世界での動作とを簡単に切り替えられるロボットを提供する。    【解決手段】  ロボットシステム１０は、ロボット１２を含み、ロボット１２のプロセサ（８０）は自身のハードウエェアに接続され、またはロボットシミュレータ２４に接続される。時間情報を呼び出す必要があるとき、プロセサがロボットシミュレータに接続されていれば、時間情報としてシミュレータクロックを取得し、プロセサが自身のハードウエェアに接続されていれば、実クロックを取得して、それぞれ、ロボットアプリケーションプログラムを実行する。【選択図】  図１
2018089757.tif 000002
【特許請求の範囲】
【請求項１】
ロボットアプリケーションプログラムに従って動作するプロセサを備えるロボットであって、
前記プロセサがロボットシミュレータに接続されていることを判断する第１判断手段、および
前記第１判断手段が前記プロセサは前記ロボットシミュレータに接続されていると判断したとき、時刻情報として前記ロボットシミュレータのクロックを取得するシミュレータクロック取得手段を備える、ロボット。
【請求項２】
前記第１判断手段が前記プロセサは前記ロボットシミュレータに接続されていると判断しなかったとき、時刻情報として実クロックを取得する実クロック取得手段をさらに備える、請求項１記載のロボット。
【請求項３】
前記ロボットアプリケーションプログラムにおいて時刻情報の取得が命令されたことを判断する第２判断手段をさらに備え、
前記第１判断手段は、前記第２判断手段が時刻情報の取得が命令されたと判断したとき、前記プロセサがロボットシミュレータに接続されていることを判断する、請求項１または２記載のロボット。
【請求項４】
ロボットアプリケーションプログラムに従って動作するプロセサを備えるロボットの前記プロセサによって実行されるロボット制御プログラムであって、
前記プロセサを前記プロセサがロボットシミュレータに接続されていることを判断する第１判断手段、および
前記第１判断手段が前記プロセサは前記ロボットシミュレータに接続されていると判断したとき、時刻情報として前記ロボットシミュレータのクロックを取得するシミュレータクロック取得手段
として機能させる、ロボット制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はロボットおよびロボット制御プログラムに関し、特にたとえば、ロボットシミュレータに接続可能な、ロボットおよびロボット制御プログラムに関する。
【背景技術】
【０００２】
従来のこの種のロボットをシミュレーションするためのシミュレータが非特許文献１、２で開示されている。これらの非特許文献１、２のシミュレータでは、センサやアクチュエータをシミュレーションして可視化することによって、実ロボット（Real robot system：以下、単に「ロボット」という。）の実世界での適応をより簡単にシミュレーションすることができる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】https://www.openrobots.org/morse/doc/stable/morse.html
【非特許文献２】http://gazebosim.org/
【発明の概要】
【発明が解決しようとする課題】
【０００４】
シミュレータを用いた開発プロセスを導入するためには、既存のロボットアプリケーションプログラムをロボットシミュレータと実機（ロボットのハードウェア）との間で切り替える仕組みが必要である。非特許文献１、２においてもハードウェアの特性やセンサ特性のモデルや、ＲＯＳ（Robot Operating System）などの同一接続インタフェースを準備することで、切り替えの簡略化を実現している。
【０００５】
しかしながら、シミュレータとロボットとでは時刻の進み方が異なるので、時刻に依存した実世界で動作したアルコリズムがロボットシミュレータでは動かない、逆にシミュレータで動作したアルコリズムが実世界では動かない、という事態を引き起こすことがある。
【０００６】
このような場合には、その都度プログラムを修正してロボットを動かすようにしなければならないが、時刻情報は様々なモジュールで使用されているので、プログラムの修正には面倒な作業が必要になる。
【０００７】
それゆえに、この発明の主たる目的は、新規な、ロボットおよびロボット制御プログラムを提供することである。
【０００８】
この発明の他の目的は、面倒な作業なしに、ロボットシミュレータに接続された場合でも実世界においても、確実に動作する、ロボットおよびロボット制御プログラムを提供することである。
【課題を解決するための手段】
【０００９】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施の形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【００１０】
第１の発明は、ロボットアプリケーションプログラムに従って動作するプロセサを備えるロボットであって、プロセサがロボットシミュレータに接続されていることを判断する第１判断手段、および第１判断手段がプロセサはロボットシミュレータに接続されていると判断したとき、時刻情報としてロボットシミュレータのクロックを取得するシミュレータクロック取得手段を備える、ロボットである。
【００１１】
第１の発明では、ロボットシステム（１０：実施例において相当する部分を例示する参照符号。以下同様。）のロボット（１２）は、プロセサ（８０）を含み、そのプロセサはロボットアプリケーションプログラム（１８）に従って自身のハードウェアの動作を制御する。第１判断手段（８０、Ｓ９）は、プロセサがロボットシミュレータに接続されているかどうか判断する。シミュレータクロック取得手段（８０、Ｓ１１）は、第１判断手段が、プロセサはロボットシミュレータに接続されていると判断したとき、時刻情報を取得する必要があれば、シミュレータクロックを時刻情報として取得する。したがって、プロセサは、そのシミュレータクロックに基づいて、ロボットアプリケーションプログラムを実行する。
【００１２】
第１の発明によれば，ロボットシミュレータに接続されているときには、必要な場合にはシミュレータクロックを取得し、それに従ってロボットアプリケーションプログラムを実行するので、ロボットがシミュレータに接続されていても、確実に動作する。
【００１３】
第２の発明は、第１の発明に従属し、第１判断手段がプロセサはロボットシミュレータに接続されていると判断しなかったとき、時刻情報として実クロックを取得する実クロック取得手段をさらに備える、ロボットである。
【００１４】
第２の発明では、実クロック取得手段（８０、Ｓ１３）は、たとえばプロセサ（８０）自身のＲＴＣ（Real Time Clock）に由来する実クロックを取得する。したがって、プロセサは、その実クロックに基づいて、ロボットアプリケーションプログラムを実行する。
【００１５】
第３の発明は、第１または第２の発明に従属し、ロボットアプリケーションプログラムにおいて時刻情報の取得が命令されたことを判断する第２判断手段をさらに備え、第１判断手段は、第２判断手段が時刻情報の取得が命令されたと判断したとき、プロセサがロボットシミュレータに接続されていることを判断する、ロボットである。
【００１６】
第３の発明では、第２判断手段（８０、Ｓ５）は、ロボットアプリケーションプログラムを実行しているときに、時刻情報の取得が命令されたかどうか判断する。つまり、シミュレータクロック取得手段（８０、Ｓ１１）は、第２判断手段が時刻情報の取得が命令されたと判断したときであってかつ第１判断手段が、プロセサはロボットシミュレータに接続されていると判断したとき、シミュレータクロックを時刻情報として取得する。
【００１７】
第４の発明は、ロボットアプリケーションプログラムに従って動作するプロセサを備えるロボットのプロセサによって実行されるロボット制御プログラムであって、プロセサをプロセサがロボットシミュレータに接続されていることを判断する第１判断手段、および第１判断手段がプロセサはロボットシミュレータに接続されていると判断したとき、時刻情報としてロボットシミュレータのクロックを取得するシミュレータクロック取得手段として機能させる、ロボット制御プログラムである。
【００１８】
第４の発明によっても第１の発明と同様の効果が期待できる。
【発明の効果】
【００１９】
この発明によれば、ロボットのプロセサに適切な時刻情報（クロック）が与えられるので、面倒な作業なしに、ロボットシミュレータに接続された場合でも実世界においても、ロボットを確実に動作させることができる、
この発明の上述の目的、その他の目的、特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【図面の簡単な説明】
【００２０】
【図１】図１はこの発明の一実施例のロボットシステムを示すブロック図である。
【図２】図２はこの発明が適用されるロボットの一例を示す図解図である。
【図３】図３は図２に示すロボットの電気的なハードウェア構成を示すブロック図である。
【図４】図４は仮想シミュレーション空間の一例を示す図解図である。
【図５】図５は図１実施例のロボットの動作を示すフロー図である。
【発明を実施するための形態】
【００２１】
図１を参照して、この実施例のロボットシステム１０は、ロボット１２、ロボット１２を遠隔操作する操作装置１４およびロボット１２をシミュレートしたロボットエージェントや人（歩行者）エージェントをシミュレーションするシミュレーション装置１６含む。
【００２２】
この実施例のロボット１２は、たとえば図２に示すコミュニケーションロボットのように、人との共存環境で活動するロボットである。このようなロボット１２は環境の中に存在する人の行動に影響を受けるので、この実施例のシミュレーション装置１６では、ロボット１２の行動をロボットアプリケーションプログラム（ロボット行動決定プログラム）に従ってシミュレーションする際に、人の行動もシミュレーションすることによって、ロボット１２のための安全なロボットアプリケーションプログラムの開発を支援する。
【００２３】
ここで、図２および図３を参照して、この発明の理解に必要な範囲でロボット１２の構成について説明する。ロボット１２は台車３０を含み、台車３０の下面にはロボット１２を移動させる２つの車輪３２および１つの従輪３４が設けられる。２つの車輪３２は車輪モータ３６（図３参照）によってそれぞれ独立に駆動され、台車３０すなわちロボット１２を前後左右の任意方向に動かすことができる。
【００２４】
台車３０の上には、円柱形のセンサ取り付けパネル３８が設けられ、このセンサ取り付けパネル３８には、多数の距離センサ４０が取り付けられる。これらの距離センサ４０は、たとえば赤外線や超音波などを用いてロボット１２の周囲の物体（人や障害物など）との距離を測定するものである。
【００２５】
センサ取り付けパネル３８の上には、胴体４２が直立して設けられる。また、胴体４２の前方中央上部（人の胸に相当する位置）には、上述した距離センサ４０がさらに設けられ、ロボット１２の前方の、主として人との距離を計測する。また、胴体４２には、その側面側上端部のほぼ中央から伸びる支柱４４が設けられ、支柱４４の上には、全方位カメラ４６が設けられる。全方位カメラ４６は、ロボット１２の周囲を撮影するものであり、後述する眼カメラ７０とは区別される。この全方位カメラ４６としては、たとえばＣＣＤやＣＭＯＳのような固体撮像素子を用いるカメラを採用することができる。
【００２６】
胴体４２の両側面上端部（人の肩に相当する位置）には、それぞれ、肩関節４８Ｒおよび肩関節４８Ｌによって、上腕５０Ｒおよび上腕５０Ｌが設けられる。図示は省略するが、肩関節４８Ｒおよび肩関節４８Ｌは、それぞれ、直交する３軸の自由度を有する。すなわち、肩関節４８Ｒは、直交する３軸のそれぞれの軸廻りにおいて上腕５０Ｒの角度を制御できる。肩関節４８Ｒの或る軸（ヨー軸）は、上腕５０Ｒの長手方向（または軸）に平行な軸であり、他の２軸（ピッチ軸およびロール軸）は、その軸にそれぞれ異なる方向から直交する軸である。同様にして、肩関節４８Ｌは、直交する３軸のそれぞれの軸廻りにおいて上腕５０Ｌの角度を制御できる。肩関節４８Ｌの或る軸（ヨー軸）は、上腕５０Ｌの長手方向（または軸）に平行な軸であり、他の２軸（ピッチ軸およびロール軸）は、その軸にそれぞれ異なる方向から直交する軸である。
【００２７】
また、上腕５０Ｒおよび上腕５０Ｌのそれぞれの先端には、肘関節５２Ｒおよび肘関節５２Ｌが設けられる。図示は省略するが、肘関節５２Ｒおよび肘関節５２Ｌは、それぞれ１軸の自由度を有し、この軸（ピッチ軸）の軸回りにおいて前腕５４Ｒおよび前腕５４Ｌの角度を制御できる。
【００２８】
前腕５４Ｒおよび前腕５４Ｌのそれぞれの先端には、人の手に相当するハンド５６Ｒおよびハンド５６Ｌがそれぞれ設けられる。これらのハンド５６Ｒおよび５６Ｌは、詳細な図示は省略するが、開閉可能に構成され、それによってロボット１２は、ハンド５６Ｒおよび５６Ｌを用いて物体を把持または挟持することができる。ただし、ハンド５６Ｒ、５６Ｌの形状は実施例の形状に限らず、人の手に酷似した形状や機能を持たせるようにしてもよい。
【００２９】
また、図示は省略するが、台車３０の前面、肩関節４８Ｒと肩関節４８Ｌとを含む肩に相当する部位、上腕５０Ｒ、上腕５０Ｌ、前腕５４Ｒ、前腕５４Ｌ、ハンド５６Ｒおよびハンド５６Ｌには、それぞれ、接触センサ５８（図３で包括的に示す）が設けられる。台車３０の前面の接触センサ５８は、台車３０への人間や他の障害物の接触を検知する。したがって、ロボット１２は、その自身の移動中に障害物との接触が有ると、それを検知し、直ちに車輪３２の駆動を停止してロボット１２の移動を急停止させることができる。また、その他の接触センサ５８は、当該各部位に触れたかどうかを検知する。
【００３０】
胴体４２の中央上部（人の首に相当する位置）には首関節６０が設けられ、さらにその上には頭部６２が設けられる。図示は省略するが、首関節６０は、３軸の自由度を有し、３軸の各軸廻りに角度制御可能である。或る軸（ヨー軸）はロボット１２の真上（鉛直上向き）に向かう軸であり、他の２軸（ピッチ軸、ロール軸）は、それぞれ、それと異なる方向で直交する軸である。
【００３１】
頭部６２には、人の口に相当する位置に、スピーカ６４が設けられる。スピーカ６４は、ロボット１２が、それの周辺の人に対して音声によってコミュニケーションをとるために用いられる。また、人の耳に相当する位置には、マイク６６Ｒおよびマイク６６Ｌが設けられる。以下、右のマイク６６Ｒと左のマイク６６Ｌとをまとめてマイク６６ということがある。マイク６６は、周囲の音、とりわけコミュニケーションを実行する対象である人間の音声を取り込む。
【００３２】
さらに、人の目に相当する位置には、右の眼球部６８Ｒおよび左の眼球部６８Ｌが設けられる。右の眼球部６８Ｒおよび左の眼球部６８Ｌは、それぞれ右の眼カメラ７０Ｒおよび左の眼カメラ７０Ｌを含む。以下、右の眼球部６８Ｒと左の眼球部６８Ｌとをまとめて眼球部６８ということがある。また、右の眼カメラ７０Ｒと左の眼カメラ７０Ｌとをまとめて眼カメラ７０ということがある。
【００３３】
眼カメラ７０は、ロボット１２に接近した人の顔や他の部分ないし物体などを撮影して、それに対応する映像信号を取り込む。この実施例では、ロボット１２は、この眼カメラ７０からの映像信号によって、人の左右両目のそれぞれの視線方向（ベクトル）を検出する。
【００３４】
また、眼カメラ７０は、上述した全方位カメラ４６と同様のカメラを用いることができる。たとえば、眼カメラ７０は、眼球部６８内に固定され、眼球部６８は、眼球支持部（図示せず）を介して頭部６２内の所定位置に取り付けられる。図示は省略するが、眼球支持部は、２軸の自由度を有し、それらの各軸廻りに角度制御可能である。たとえば、この２軸の一方は、頭部６２の上に向かう方向の軸（ヨー軸）であり、他方は、一方の軸に直交しかつ頭部６２の正面側（顔）が向く方向に直行する方向の軸（ピッチ軸）である。眼球支持部がこの２軸の各軸廻りに回転されることによって、眼球部６８ないし眼カメラ７０の先端（正面）側が変位され、カメラ軸すなわち視線方向が移動される。なお、上述のスピーカ６４、マイク６６および眼カメラ７０の設置位置は、当該部位に限定されず、適宜な位置に設けられてよい。
【００３５】
このように、この実施例のロボット１２は、車輪３２の独立２軸駆動、肩関節４８の３自由度（左右で６自由度）、肘関節５２の１自由度（左右で２自由度）、首関節６０の３自由度および眼球支持部の２自由度（左右で４自由度）の合計１７自由度を有する。
【００３６】
図３はロボット１２の電気的な構成を示すブロック図である。この図３を参照して、ロボット１２は、１つまたは２以上のプロセサ８０を含む。プロセサ８０は、バス８２を介して、メモリ８４、モータ制御ボード８６、センサ入力／出力ボード８８および音声入力／出力ボード９０に接続される。
【００３７】
メモリ８４は、図示は省略をするが、ＲＯＭ、ＨＤＤおよびＲＡＭを含む。ＲＯＭおよびＨＤＤには、各種プログラムが予め記憶される。
【００３８】
モータ制御ボード８６は、たとえばＤＳＰで構成され、各腕や首関節６０および眼球部６８などの各軸モータの駆動を制御する。すなわち、モータ制御ボード８６は、プロセサ８０からの制御データを受け、右眼球部６８Ｒの２軸のそれぞれの角度を制御する２つのモータ（図３では、まとめて「右眼球モータ９２」と示す）の回転角度を制御する。同様にして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、左眼球部６８Ｌの２軸のそれぞれの角度を制御する２つのモータ（図３では、まとめて「左眼球モータ９４」と示す）の回転角度を制御する。
【００３９】
また、モータ制御ボード８６は、プロセサ８０からの制御データを受け、肩関節４８Ｒの直交する３軸のそれぞれの角度を制御する３つのモータと肘関節５２Ｒの角度を制御する１つのモータとの計４つのモータ（図３では、まとめて「右腕モータ９６」と示す）の回転角度を制御する。同様にして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、肩関節４８Ｌの直交する３軸のそれぞれの角度を制御する３つのモータと肘関節５２Ｌの角度を制御する１つのモータとの計４つのモータ（図３では、まとめて「左腕モータ９８」と示す）の回転角度を制御する。
【００４０】
さらに、モータ制御ボード８６は、プロセサ８０からの制御データを受け、首関節６０の直交する３軸のそれぞれの角度を制御する３つのモータ（図３では、まとめて「頭部モータ１００」と示す）の回転角度を制御する。そして、モータ制御ボード８６は、プロセサ８０からの制御データを受け、車輪３２を駆動する２つのモータ（図３では、まとめて「車輪モータ３６」と示す）の回転角度を制御する。
【００４１】
モータ制御ボード８６にはさらにハンドアクチュエータ１０８が結合され、モータ制御ボード８６は、プロセサ８０からの制御データを受け、ハンド５６Ｒ、５６Ｌの開閉を制御する。
【００４２】
センサ入力／出力ボード８８は、モータ制御ボード８６と同様に、ＤＳＰで構成され、各センサからの信号を取り込んでプロセサ８０に与える。すなわち、距離センサ４０のそれぞれからの反射時間に関するデータがこのセンサ入力／出力ボード８８を通じてプロセサ８０に入力される。また、全方位カメラ４６からの映像信号が、必要に応じてセンサ入力／出力ボード８８で所定の処理を施してからプロセサ８０に入力される。眼カメラ７０からの映像信号も、同様にして、プロセサ８０に入力される。また、上述した複数の接触センサ５８（図３では、まとめて「接触センサ５８」と示す）からの信号がセンサ入力／出力ボード８８を介してプロセサ８０に与えられる。音声入力／出力ボード９０もまた、同様に、ＤＳＰで構成され、プロセサ８０から与えられる音声合成データに従った音声または声がスピーカ６４から出力される。また、マイク６６からの音声入力が、音声入力／出力ボード９０を介してプロセサ８０に与えられる。
【００４３】
また、プロセサ８０は、バス８２を介して通信ＬＡＮボード１０２に接続される。通信ＬＡＮボード１０２は、たとえばＤＳＰで構成され、プロセサ８０から与えられた送信データを無線通信モジュール１０４に与え、無線通信モジュール１０４は送信データを、ネットワークを介してサーバ（図示せず）等に送信する。また、通信ＬＡＮボード１０２は、無線通信モジュール１０４を介してデータを受信し、受信したデータをプロセサ８０に与える。
【００４４】
図１に戻って、操作装置１４は、基本的には１または２以上のコンピュータまたはプロセサによって構成され、そのプロセサのメモリ（図示せず）にロボットアプリケーションプログラム１８が設定されていて、そのロボットアプリケーションプログラムがコンピュータからたとえば無線でロボット１２またはシミュレーション装置１６に与えられる。ロボットアプリケーションプログラム１８は、ロボット１２に対すアプリケーションプログラムであり、たとえばロボット１２を案内ロボットとしとて動作させるときには、そのための動作をロボット１２が実行するようなプログラムである。
【００４５】
操作装置１４のメモリにはさらに、環境データ２０を予め記憶している。環境データ２０は主として図４に示す仮想シミュレーション空間２２の地図データおよびその仮想シミュレーション空間２２内での人エージェントの出現率データを含む。環境および環境内のオブジェクトは３次元モデルデータとして表され、３次元仮想空間として視覚化される。
【００４６】
図４に示す仮想シミュレーション空間２２は、図中点線矩形で示す出入口２２ａを有する３次元閉空間を想定している。この仮想シミュレーション空間２２においては黒色太線で示す通路２２ｂが設定されていて、ロボット１２や人エージェントはその通路５０や広場などを通行し、またはそこに存在する。これらの通路２２ｂや広場は建物や壁などオブジェクトによって区画され、図中丸印で示す場所で分岐または合流する。
【００４７】
シミュレーション装置１６は、基本的には1または２以上のプロセサで構成され、ロボット１２をシミュレートするロボットシミュレータ２４および歩行者のような人エージェントをシミュレートする人シミュレータ２６を含み、それぞれのシミュレーション結果が物理エンジン２８に入力される。
【００４８】
ロボットシミュレータ２４は、たとえば先の非特許文献１として例示したＭＯＲＳＥシミュレータであり、このＭＯＲＳＥシミュレータは、ロボット１２と同様の、多くのセンサ、アクチュエータおよびロボットのモデルを提供し、そのようなモデル用のＡＰＩ（Application Programming Interface）も利用できる。
【００４９】
センサシミュレーションにおいては、たとえば、カメラ画像の場合には、カメラ視点からの光学的な計算を行い、カメラ視点毎の画像情報を生成する。レーザ距離計の場合には、レーザによるスキャンを模して、センサから各方位へ距離計測を行い、その結果をセンサ値として保存する。
【００５０】
開発者がロボットのためのロボットアプリケーションプログラムを準備するとき、それらのプログラムはこれらのＡＰＩにアクセスしてセンサデータ（たとえば、レーザ距離計からの距離の読み取り）およびアクチュエータへのコマンドの送信（たとえば、移動速度）を行う。
【００５１】
人シミュレータ２６は、定期的に新しい歩行者を生成し、それらの位置を更新し、それらがシミュレートされた環境（仮想シミュレーション空間２２）を離れるときにそれらを除去する。歩行者すなわち人は、３次元オブジェクトとして表現され、仮想シミュレータ空間２２内に配置され、アニメーションエンジンを使用して、その歩行動作がアニメーション化される。
【００５２】
ただし、人シミュレータ２６には図１に示すように環境データ２０が与えられるので、人シミュレータ２６は、その環境データに含まれる出現率と呼ばれる予め定義された確率で新しい歩行者を周期的に生成する。そして、その歩行者は図４に示す出入口２２ａの１つに割り当てられ、他の１つに行くように設定される。
【００５３】
ただし、歩行者はしばしばグループとして（家族やカップルのように）生成され、 それらがグループで表示される場合、サイズはグループメンバの分布によって定義し、すべてのメンバが同じ目的を共有すると仮定する。
【００５４】
物理エンジン２８は、物理的な力や法則などに基づいて、ロボットや人エージェントがどのような移動経路をたどるかを計算する。詳しくいうと、物理エンジン２８は、ロボットシミュレータ２４および人シミュレータ２６からの各エージェント（ロボット含む）が意図した動きを、仮想シミュレーション空間２２（図４）で実行する処理を実行する。このとき、他の障害物、構造物や他のエージェントとの干渉が何もなければ、意図したとおりの動きを生成する。しかしながら、干渉がある場合、物理学法則（力学法則）に従って、各エージェントの実際の動きを処理する。そして、物理エンジン２８からは統合したシミュレーションデータが出力される。
【００５５】
図５に示すフロー図はたとえば図３のメモリ８４に予め設定されているプログラムを示し、その最初のステップＳ１では、ロボット１２のプロセサ８０（図３）は、時計の接続先を変更する。具体的には、たとえばＬｉｎｕｘ（商品名）の環境関数LD_PRELOADなどを使用することによって、関数gettimeofdayやusleepなどの時計関連のシステムコールを上書きすることができる。たとえば関数gettimeofdayは、時刻およびタイムゾーンを取得する。関数usleepはマイクロ秒単位で実行を延期する。
【００５６】
次いで、ステップＳ３において、プロセサ８０は、ロボットアプリケーションプログラム１８を実行しているかどうか判断する。
【００５７】
このステップＳ３で“ＮＯ”を判断したときにはこの処理が終了する。
【００５８】
ステップＳ３で“ＹＥＳ”を判断したときには、続くステップＳ５において、そのプログラムステップで時計の呼び出しが行われたかどうか判断する。このステップＳ５が第２判断手段に相当し、このステップＳ５で“ＮＯ”を判断したとき、クロックを取得する必要がないプログラムステップであるので、続くステップＳ７で当該プログラムを実行し、必要な出力を実行する。
【００５９】
ステップＳ５で“ＹＥＳ”が判断されると、クロックを取得する必要があるので、続くステップＳ９において、ロボット１２のプロセサ８０は、そのときロボット１２のハードウェア（モータ３６、９２‐１００のようなアクチュエータ）がロボットシミュレータ２４に接続されているかどうか判断する。
【００６０】
ロボット１２においてプロセサ８０を自身のハードウェアに接続するかロボットシミュレータ２４に接続するかの切り替えは、設定ファイルで定義されている。その中では、どのハードウェアを使用するのか？という設定に加えて、ロボットシミュレータ２４を使用するという設定（およびロボットシミュレータ２４の接続先やポート番号）項目が存在するので、その項目をオンに設定することによって、プロセサ８０とロボットシミュレータ２４との接続が有効化される。したがって、このステップＳ９では、プロセサ８０が該当の項目がオンに設定されているかどうかチェックすることによって、ロボット１２のプロセサ８０がロボットシミュレータ２４に接続されているのか、どうかを判断することができる。ただし、ロボット１２とロボットシミュレータ２４の接続は有線でも無線でも行えるが、図１では、煩雑さを回避するために、ロボット１２とロボットシミュレータ２４との接続線は図示していない。
【００６１】
たとえば、アルゴリズムの計算量を実際の環境で見積もる必要があるとき、ロボット１２上での接続先をロボットシミュレータ２４に切り替えてロボットアプリケーションプログラムをプロセサ８０によって実行することがある。このような場合に、プロセサ８０がロボットシミュレータ２４に接続される。
【００６２】
ステップＳ９すなわち第１判断手段において“ＹＥＳ”を判断したとき、つまり、プロセサ８０がロボットシミュレータ２４に接続されていると判断したとき、ステップＳ１１で、時刻情報として、図１において矢印で示すように、ロボットシミュレータ２４のプロセサ（図示せず）を動作させるクロック（シミュレータクロック）を取得する。
【００６３】
ロボットシミュレータ２４においては、シミュレーションのステップ毎に決まっている時間（システムクロック）を基準として、そのステップが何ステップ目かということで時刻が決められ、ロボットシミュレータ２４はそれに基づく時間情報に従って動作する。これに対して、ロボット１２は、たとえばプロセサ８０のＲＴＣに由来する実クロックに従って動作する。
【００６４】
したがって、ステップＳ９でロボット１２がロボットシミュレータ２４に接続されていると判断したときには、ステップＳ１１ではシミュレータクロックを取得して、ステップＳ７でのプログラムの実行に進む。
【００６５】
逆に、ステップＳ９で“ＮＯ”を判断したとき、つまりロボットシミュレータ２４には接続されていないと判断したとき、ステップＳ１３で自身が持つ実クロックを取得して、ステップＳ７でのプログラムの実行に進む。
【００６６】
このように、この実施例においては、ロボットアプリケーションプログラム１８においてたとえばgettimeofdayやusleepなどの関数を用いて時刻（時間情報）を呼び出すとき、ロボット１２のプロセサ８０がロボットシミュレータ２４に接続されている場合にシミュレータの時計を呼び出し、それ以外のばあには実世界の時計を呼び出すことにより、既存のロボットとロボットシミュレータの切り替えを簡単に行うことができる。したがって、時間情報を呼び出す多くの場所でプログラムを修正するなどの煩雑な作業は不要となる。
【００６７】
なお、上述の実施例ではロボット１２の設定ファイルで設定することによってロボットの接続をロボットシミュレータ２４に切り替えるようにしたが、このような切り替えは、操作装置１４やシミュレーション装置１６で行うこともできる。たとえば、ロボットとシミュレートしたロボットとの間の接続ＡＰＩをロボットシミュレータ２４で簡単に切り替えることができる。
【００６８】
なお、このロボットシステム１０において利用可能なロボットは実施例で説明した図２および図３に示すコミュニケーションロボット１２に限定されるものではない。他の形式、構造のロボットにも適用可能である。
【符号の説明】
【００６９】
１０  …ロボットシステム
１２  …ロボット
１４  …操作装置
１６  …シミュレーション装置
１８  …ロボットアプリケーションプログラム
２２  …仮想シミュレーション空間
２４  …ロボットシミュレータ
２６  …人シミュレータ
２８  …物理エンジン
８０  …プロセサ
【図１】
2018089757.tif 000003
【図２】
2018089757.tif 000004
【図３】
2018089757.tif 000005
【図４】
2018089757.tif 000006
【図５】
2018089757.tif 000007