(57)【要約】【課題】機械に扱われる対象物の追従動作をより精度よくシミュレーションすることが可能なシミュレーション装置を提供する。【解決手段】シミュレーション装置は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。プロセッサは、制御プログラムに従って、仮想空間において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する動作制御手段と、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する判断手段と、体積が基準値以上である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させる追従手段とを含む。【選択図】図８
2014063327.tif 000002
【特許請求の範囲】
【請求項１】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを備え、
前記プロセッサは、
前記制御プログラムに従って、仮想空間において前記機械に対応する仮想機械を動かすための動作指令に基づいて前記仮想機械の動きを制御する動作制御手段と、
前記仮想機械によって扱われ前記対象物に対応する仮想対象物のモデルデータと、前記仮想機械のモデルデータとに基づいて、前記仮想機械が作用可能な作用空間と前記仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する判断手段と、
前記体積が前記基準値以上である場合に、前記仮想対象物を前記動作指令に基づく前記仮想機械の動きに追従させる追従手段とを含む、シミュレーション装置。
【請求項２】
前記判断手段は、
前記作用空間を複数の単位領域に分割し、前記分割された各単位領域が前記仮想対象物を含む領域であるか否かを判定し、前記仮想対象物を含む領域であると判定された単位領域の個数に基づいて前記作用空間の体積のうち、前記仮想対象物が占める部分の体積を計算する、請求項１に記載のシミュレーション装置。
【請求項３】
前記判断手段は、
前記仮想対象物を複数の単位領域に分割し、前記分割された各単位領域が前記作用空間に含まれるか否かを判定し、前記含まれると判定された単位領域の個数に基づいて前記仮想対象物の体積のうち、前記作用空間に重なる部分の体積を計算する、請求項１に記載のシミュレーション装置。
【請求項４】
前記基準値は、前記仮想対象物のモデルデータごとに定められている、請求項３に記載のシミュレーション装置。
【請求項５】
前記作用空間は、前記機械の可動範囲に対応するように予め定められた前記仮想機械の可動範囲を含む、請求項１〜４のいずれか１項に記載のシミュレーション装置。
【請求項６】
コンピュータで行なわれるシミュレーション方法であって、
前記コンピュータは、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを備えており、
前記プロセッサが、前記制御プログラムに従って、仮想空間内において前記機械に対応する仮想機械を動かすための動作指令に基づいて前記仮想機械の動きを制御するステップと、
前記プロセッサが、前記仮想機械によって扱われ前記対象物に対応する仮想対象物のモデルデータと、前記仮想機械のモデルデータとに基づいて、前記仮想機械が作用可能な作用空間と前記仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断するステップと、
前記プロセッサが、前記体積が前記基準値以上である場合に、前記仮想対象物を前記動作指令に基づく前記仮想機械の動きに追従させるステップとを含む、シミュレーション方法。
【請求項７】
コンピュータで実行されるシミュレーションプログラムであって、
前記コンピュータは、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを備えており、
前記シミュレーションプログラムは、前記プロセッサに、
前記制御プログラムに従って、仮想空間内において前記機械に対応する仮想機械を動かすための動作指令に基づいて前記仮想機械の動きを制御するステップと、
前記仮想機械によって扱われ前記対象物に対応する仮想対象物のモデルデータと、前記仮想機械のモデルデータとに基づいて、前記仮想機械が作用可能な作用空間と前記仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断するステップと、
前記体積が前記基準値以上である場合に、前記仮想対象物を前記動作指令に基づく前記仮想機械の動きに追従させるステップとを実行させる、シミュレーションプログラム。
【請求項８】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを備え、
前記プロセッサは、
前記制御プログラムに従って、仮想空間内において前記機械に対応する仮想機械を動かすための動作指令に基づいて前記仮想機械の動きを制御する動作制御手段と、
前記仮想機械によって扱われ前記対象物に対応する仮想対象物のモデルデータと、前記仮想機械のモデルデータとに基づいて、前記仮想機械が作用可能な作用空間と前記仮想対象物とが重なる部分の前記仮想対象物の表面積が予め定められた基準値以上であるか否かを判断する判断手段と、
前記表面積が前記基準値以上である場合に、前記仮想対象物を前記動作指令に基づく前記仮想機械の動きに追従させる追従手段とを含む、シミュレーション装置。
【請求項９】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを備え、
前記プロセッサは、
前記制御プログラムに従って、仮想空間内において前記機械に対応する仮想機械を動かすための動作指令に基づいて前記仮想機械の動きを制御する動作制御手段と、
前記仮想機械によって扱われ前記対象物に対応する仮想対象物のモデルデータと、前記仮想機械のモデルデータとに基づいて、前記仮想機械が作用可能な作用空間と前記仮想対象物とが重ならない領域の体積が予め定められた基準値未満であるか否かを判断する判断手段と、
前記体積が前記基準値未満である場合に、前記仮想対象物を前記動作指令に基づく前記仮想機械の動きに追従させる追従手段とを含む、シミュレーション装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション装置、シミュレーション方法およびシミュレーションプログラムに関し、特に、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するのに適したシミュレーション装置、シミュレーション方法、および、シミュレーションプログラムに関する。
【背景技術】
【０００２】
従来、物体の動作をシミュレーションする際に、モデルを他のモデルに追従させて動作させる方式として、モデルから抽出したモデル間の依存関係に基づいて、モデルの追従動作を実現する技術が知られている。
【０００３】
例えば、特開平９−２５８８１５号公報（特許文献１）は、運動連鎖模擬システムを開示している。運動連鎖模擬システムは、計算機内に物体のモデルを有し、モデルに関して互いに作用するものと作用されるものの主従関係を設定し、主従関係に従って運動するモデルの運動連鎖を模擬する。運動連鎖模擬システムは、主従関係を設定すべきモデルを自動抽出するモデル抽出部と、モデル間の関係を基に主従関係を自動設定する主従関係設定部と、主従関係に従ってモデルを動作させる追従動作処理部とを含む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−２５８８１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１における技術によると、機械に扱われる対象物を当該機械に追従させる追従動作をシミュレーションする際に、実際には当該機械の動きに追従させることができない対象物まで追従させてしまうシミュレーション結果となる場合も多かった。
【０００６】
本発明は、上記のような問題を解決するためになされたものであって、その目的の１つは、機械に扱われる対象物の追従動作をより精度よくシミュレーションすることが可能なシミュレーション装置、シミュレーション方法、およびシミュレーションプログラムを提供することである。
【課題を解決するための手段】
【０００７】
ある実施の形態に従うシミュレーション装置は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。プロセッサは、制御プログラムに従って、仮想空間において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する動作制御手段と、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する判断手段と、体積が基準値以上である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させる追従手段とを含む。
【０００８】
好ましくは、判断手段は、作用空間を複数の単位領域に分割し、分割された各単位領域が仮想対象物を含む領域であるか否かを判定し、仮想対象物を含む領域であると判定された単位領域の個数に基づいて作用空間の体積のうち、仮想対象物が占める部分の体積を計算する。
【０００９】
好ましくは、判断手段は、仮想対象物を複数の単位領域に分割し、分割された各単位領域が作用空間に含まれるか否かを判定し、含まれると判定された単位領域の個数に基づいて仮想対象物の体積のうち、作用空間に重なる部分の体積を計算する。
【００１０】
好ましくは、基準値は、仮想対象物のモデルデータごとに定められている。
好ましくは、作用空間は、機械の可動範囲に対応するように予め定められた仮想機械の可動範囲を含む。
【００１１】
別の実施の形態に従うと、コンピュータで行なわれるシミュレーション方法が提供される。コンピュータは、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。シミュレーション方法は、プロセッサが、制御プログラムに従って、仮想空間内において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御するステップと、プロセッサが、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断するステップと、プロセッサが、体積が基準値以上である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させるステップとを含む。
【００１２】
さらに別の実施の形態に従うと、コンピュータで実行されるシミュレーションプログラムが提供される。コンピュータは、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。シミュレーションプログラムは、プロセッサに、制御プログラムに従って、仮想空間内において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御するステップと、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断するステップと、体積が基準値以上である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させるステップとを実行させる。
【００１３】
さらに別の実施の形態に従うシミュレーション装置は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。プロセッサは、制御プログラムに従って、仮想空間内において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する動作制御手段と、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重なる部分の仮想対象物の表面積が予め定められた基準値以上であるか否かを判断する判断手段と、表面積が基準値以上である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させる追従手段とを含む。
【００１４】
さらに別の実施の形態に従うシミュレーション装置は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するプロセッサを含む。プロセッサは、制御プログラムに従って、仮想空間内において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する動作制御手段と、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間と仮想対象物とが重ならない領域の体積が予め定められた基準値未満であるか否かを判断する判断手段と、体積が基準値未満である場合に、仮想対象物を動作指令に基づく仮想機械の動きに追従させる追従手段とを含む。
【発明の効果】
【００１５】
機械に扱われる対象物の追従動作をより精度よくシミュレーションすることが可能となる。
【図面の簡単な説明】
【００１６】
【図１】実施の形態１に従う制御システムの構成を説明するための図である。
【図２】実施の形態１に従うＰＣ６のハードウェア構成を説明するための図である。
【図３】ＣＰＵがコントローラサポートプログラムを実行することにより実現される機能ブロック図である。
【図４】実施の形態１に従うシミュレーション部の機能を説明するための詳細なブロック図である。
【図５】実施の形態１に従うシミュレーションの３Ｄ空間を示す図である。
【図６】実施の形態１に従うシミュレーションの状況を示す図である。
【図７】実施の形態１に従うシミュレーションの制御の流れを示すフローチャートである。
【図８】実施の形態１に従う追従条件の判定処理の流れを示すフローチャートである。
【図９】実施の形態１に従う仮想ロボットの把持空間の分割方式を説明するための図である。
【図１０】図８に示すステップＳ５０６の判断処理方式を説明するための図である。
【図１１】実施の形態２におけるシミュレーションの３Ｄ空間を示す図である。
【図１２】実施の形態２に従うシミュレーションの状況を示す図である。
【図１３】実施の形態２に従う追従条件の判定処理の流れを示すフローチャートである。
【図１４】実施の形態２に従う仮想ワークの分割方式を説明するための図である。
【図１５】図１４に示すステップＳ６０６の判定処理方式を説明するための図である。
【図１６】比較例のシミュレーションの状況を示す図である。
【図１７】実施の形態２の変形例に従う仮想エアシリンダの可動空間の分割方式を説明するための図である。
【図１８】実施の形態２の変形例に従う単位領域が仮想ワークを含む領域であるか否かの判断方式を説明するための図である。
【図１９】実施の形態３に従う追従条件の判定処理の流れを示すフローチャートである。
【図２０】実施の形態３に従う仮想ワークの分割方式を説明するための図である。
【図２１】図２０に示すステップＳ７０６の判定処理方式を説明するための図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００１８】
［実施の形態１］
＜制御システムの全体構成＞
図１は、実施の形態１に従う制御システムの構成を説明するための図である。図１を参照して、実施の形態１に従う制御システムは、サーバ２と、ネットワーク４と、ＰＣ（Personal  Computer）６と、コントローラ１４と、制御対象装置１６とを含む。
【００１９】
サーバ２は、ネットワーク４を介してＰＣ６と接続されている。ＰＣ６は、制御対象装置１６を制御するコントローラ１４と通信可能に構成されている。
【００２０】
ＰＣ６は、一実施形態におけるシミュレーション装置に相当する。ＰＣ６には、シミュレーションプログラムを含むコントローラサポートプログラム８がインストールされており、また、ユーザが作成した制御プログラム１０が記憶されている。ＣＤ−ＲＯＭ（Compact  Disc-Read  Only  Memory）１２は、コントローラサポートプログラム８を格納している。ＰＣ６にインストールされているコントローラサポートプログラム８は、このＣＤ−ＲＯＭ１２からインストールされたものである。
【００２１】
コントローラ１４は、制御対象装置１６の動きを制御する。コントローラ１４は、一例として、ＰＬＣ（Programmable  Logic  Controller）が用いられる。このＰＬＣには、いわゆるモーションコントロール機能を含む。コントローラ１４は、制御対象装置１６に対する制御内容を規定する制御プログラム１５を記憶している。コントローラ１４は、制御周期ごとに制御プログラム１５を一巡実行する。ここで、コントローラ１４に記憶されている制御プログラム１５は、ＰＣ６に記憶されている制御プログラム１０をコピーしたコピーデータであり、ＰＣ６から送信されたものである。
【００２２】
制御対象装置１６は、サーボモータ、ステッピングモータなどのモータ１８およびモータを駆動するモータドライバ１７を含む。
【００２３】
モータ１８にはモータドライバ１７から駆動電流が供給される。モータドライバ１７は、制御プログラム１５を実行するコントローラ１４から制御周期ごとに位置の指令値を与えられ、それに応じた駆動電流をモータ１８に供給する。モータ１８が、例えば、サーボモータである場合、モータ１８にはエンコーダが備えられており、モータ１８の回転位置の実測値がエンコーダによって検出される。モータの回転位置の実測値は、モータドライバ１７がフィードバック制御に利用する。
【００２４】
なお、上記においては、ＣＤ−ＲＯＭ１２を介して、ＰＣ６にシミュレーションプログラムがインストールされる場合について説明したが、インストールの態様は、特にこれに限られない。例えば、サーバ２からネットワーク４を介してシミュレーションプログラムがＰＣ６にダウンロードされるようにしても良い。これは、制御プログラムについても同様である。
【００２５】
＜ＰＣのハードウェア構成＞
図２は、実施の形態１に従うＰＣ６のハードウェア構成を説明するための図である。図２を参照して、ＰＣ６は、処理手段であるＣＰＵ９０１と、記憶手段であるＲＯＭ９０２、ＲＡＭ９０３、およびＨＤＤ９０４と、データ読取部であるＣＤ−ＲＯＭ駆動装置９０８と、通信手段である通信ＩＦ９０９と、表示手段であるモニタ９０７と、入力手段であるキーボード９０５およびマウス９０６とを含む。なお、これらの部位は、内部バス９１０を介して互いに接続される。
【００２６】
ＣＰＵ９０１は、ＲＯＭ９０２、ＲＡＭ９０３、ＨＤＤ９０４に記憶されているプログラムおよびデータを読み出し、プログラムを実行することによって、ＰＣ６の各部を制御する。ＣＰＵ９０１は、典型的にはマイクロプロセッサである。なお、当該ハードウェアは、ＣＰＵ以外のＦＰＧＡ（Field  Programmable  Gate Array）、ＡＳＩＣ（Application  Specific  Integrated  Circuit）およびその他の演算機能を有する回路などであってもよい。
【００２７】
ＨＤＤ９０４は、典型的には不揮発性の磁気メモリであり、ＣＤ−ＲＯＭ駆動装置９０８によりＣＤ−ＲＯＭ１２から読取られたシミュレーションプログラムを格納する。また、ＨＤＤ９０４は、制御プログラム１５も格納している。
【００２８】
なお、シミュレーションプログラムがＣＤ−ＲＯＭ１２以外の他の記憶媒体に格納されており、ＣＰＵ９０１が記憶媒体に対応するメモリインターフェイス（ＩＦ）を介して当該シミュレーションプログラムを読み取る形態であってもよい。例えば、ＤＶＤ（Digital  Versatile  Disk）−ＲＯＭ駆動装置を介してＤＶＤ−ＲＯＭから当該シミュレーションプログラムが読み取られる場合であってもよいし、ＵＳＢ（Universal  Serial  Bus）インターフェイスを介してＵＳＢメモリから当該シミュレーションプログラムが読み取られる場合であってもよい。
【００２９】
ＣＰＵ９０１は、ＨＤＤ９０４に格納されている、コントローラサポートプログラム８をＲＡＭ９０３などに展開して実行する。
【００３０】
ＲＡＭ９０３は、揮発性メモリであり、ワークメモリとしての機能を有する。ＲＯＭ９０２は、一般的に、オペレーティングシステム（ＯＳ）等のプログラムを格納している。
【００３１】
通信インターフェイス（ＩＦ）９０９は、典型的にはイーサネット（登録商標）およびＵＳＢといった汎用的な通信プロトコルをサポートし、ネットワーク４を介してサーバ２との間でデータ通信を提供するとともに、コントローラ１４との間でデータ通信を提供する。
【００３２】
モニタ９０７は、液晶表示装置、ＣＲＴ（Cathode  Ray  Tube）、有機ＥＬ（Electro  Luminescence）装置、プラズマディスプレイ装置などで構成され、ＰＣ６による処理結果などを表示する。キーボード９０５は、ユーザによるキー入力を受付け、マウス９０６は、ユーザによるポインティング操作を受付ける。
【００３３】
＜機能構成＞
図３は、ＣＰＵ９０１がコントローラサポートプログラム８を実行することにより実現される機能ブロック図である。図３を参照して、ここでは、ユーザインターフェイス部８０２と、表示データ作成部８０４と、シミュレーション部８０６と、制御プログラム記憶部８０８と、制御プログラム編集部８１０と、コントローラインターフェイス部８１２とが示されている。
【００３４】
ユーザインターフェイス部８０２は、ＰＣ６のモニタ９０７に表示するウインドウ画面の内容を作成し、また、キーボード９０５やマウス９０６によるユーザの操作を受け付ける。
【００３５】
制御プログラム編集部８１０は、ユーザによる制御プログラムの入力および編集を受け付ける。制御プログラムを実行するためにコンパイルが必要である場合はコンパイルも行う。作成された制御プログラムは、コントローラインターフェイス部８１２を介してコントローラ１４に送られる。また、作成された制御プログラムは、ＨＤＤ９０４の所定の領域である制御プログラム記憶部８０８に格納される。また、制御プログラム編集部８１０は、コントローラインターフェイス部８１２を介してコントローラ１４に記憶されている制御プログラム１５を読み出して編集することもできる。
【００３６】
シミュレーション部８０６は、コントローラ１４のシミュレータである。シミュレーション部８０６は、制御プログラム記憶部８０８に記憶された制御プログラム１０に従ってコントローラ１４が制御プログラム１５を実行する動作をシミュレートし、コントローラ１４が制御周期ごとに出力するはずの位置の指令値を算出する。
【００３７】
また、シミュレーション部８０６は、外部信号が到来して制御プログラム１５の動作に影響を与える状態をシミュレートしたり、制御プログラム１５が実行されることによってコントローラ１４のメモリの記憶内容などのコントローラ１４の内部状態が変化して、その変化が制御プログラム１５の動作に影響を与える状態をシミュレートしたりすることができる。
【００３８】
また、シミュレーション部８０６は、ユーザインターフェイス部８０２を介してシミュレーション実行に関するユーザの指示を受け付ける。すなわち、ユーザインターフェイス部８０２は、シミュレーション部８０６に対するユーザの指示を受け付ける手段としても機能する。
【００３９】
表示データ作成部８０４は、シミュレーション部８０６によって作成された実行結果データの時間的な変化を表示するための表示データを作成する。表示データ作成部８０４は、作成した表示データをユーザインターフェイス部８０２に送ることによりＰＣ６のモニタ９０７に表示データをグラフや文字の態様や３Ｄ表現の態様で表示する。
【００４０】
＜シミュレーション部の機能構成＞
図４は、実施の形態１に従うシミュレーション部８０６の機能を説明するための詳細なブロック図である。
【００４１】
シミュレーション制御部８２０は、制御プログラム記憶部８０８から制御プログラム１０を読み込み、制御プログラム１０のシミュレーションを実行し、または、途中からシミュレーションを再実行する。それに伴って、シミュレーション制御部８２０は、実行結果データ記憶部８３０とモデルデータ記憶部８４０との間の流れを制御する。実行結果データ記憶部８３０およびモデルデータ記憶部８４０は、それぞれＲＡＭ９０３あるいはＨＤＤ９０４で実現される機能である。
【００４２】
また、シミュレーション制御部８２０は、主な機能として、動作制御部８２２と、判断部８２４と、追従制御部８２６とを含む。なお、動作制御部８２２は、シミュレーション部８０６が、後述する機械制御シミュレータを実行することによって実現される機能である。また、判断部８２４および追従制御部８２６は、シミュレーション部８０６が後述する３Ｄシミュレータを実行することによって実現される機能である。
【００４３】
動作制御部８２２は、制御プログラム１０に従って、仮想空間において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する。
【００４４】
判断部８２４は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間（実施の形態１においては後述する把持空間）と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する。より具体的には、判断部８２４は、作用空間を複数の単位領域に分割し、分割された各単位領域が仮想対象物を含む領域であるか否かを判定する。そして、判断部８２４は、仮想対象物を含む領域であると判定された単位領域の個数に基づいて作用空間の体積のうち、仮想対象物が占める部分の体積を計算する。なお、作用空間とは、機械が対象物に対して作用することが可能な空間である。
【００４５】
追従制御部８２６は、当該体積が基準値以上であるとの判断結果に基づいて、仮想対象物を当該動作指令に基づく仮想機械の動きに追従させる。
【００４６】
実行結果データ記憶部８３０は、表示に用いる実行結果データを記憶する。
モデルデータ記憶部８４０は、実空間のロボット、ワーク、コンベア、スタンド等の物体をモデル化したモデルデータを格納する。より具体的には、モデルデータ記憶部８４０は、実空間の物体に対応する仮想空間における仮想物体の形状、動作の特徴、機能、性能、位置、向き等に関するモデルデータを格納している。
【００４７】
＜シミュレーション制御の流れ＞
（概略）
図５は、実施の形態１に従うシミュレーションの３Ｄ空間を示す図である。図５を参照して、実施の形態１においては、実空間に対応する仮想空間である３Ｄ空間には、実空間のロボットに対応する仮想ロボット５００と、実空間のワーク（対象物）に対応する仮想ワーク（仮想対象物）５３０と、実空間のワークを載せるためのスタンドに対応する仮想スタンド５５０とが配置される。なお、典型的には、ロボットは、ワークを把持する把持機構を有するロボットハンドである。
【００４８】
シミュレーション部８０６は、仮想機械と仮想対象物のモデルデータを参照しながら、３Ｄシミュレータと、機械制御シミュレータとを実行する。
【００４９】
３Ｄシミュレータは、データトレースで取得した結果に基づいて３Ｄ空間にオブジェクト（実施の形態１においては、仮想ロボット５００、仮想ワーク５３０および仮想スタンド５５０）を表示する。また、３Ｄシミュレータは、仮想ロボット５００によって扱われる仮想ワーク５３０を仮想ロボット５００の動きに追従させる追従条件が成立したか否かを判断する。換言すると、３Ｄシミュレータは、仮想ロボット５００によって扱われる仮想ワーク５３０を、仮想ロボット５００の動きに追従させるか否かを判断する。３Ｄシミュレータは、追従条件が成立した場合には、仮想ロボット５００の動きに仮想ワーク５３０を追従させる追従動作制御を開始する。追従動作制御が開始されている場合には、３Ｄシミュレータは、仮想ロボット５００に追従させる仮想ワーク５３０の状態を計算する。
【００５０】
機械制御シミュレータは、３Ｄ空間における仮想機械（実施の形態１においては、仮想ロボット５００、仮想スタンド５５０）を制御する。より具体的には、機械制御シミュレータは、仮想機械への制御の指令値を計算して、その指令値に対する仮想機械の動きを計算する。機械制御シミュレータは、例えば、ユーザインターフェイス部８０２を介したユーザからの動作指令（または、プログラムに従って出力される動作指令）に基づいて仮想機械の動きを計算する。
【００５１】
実施の形態１に従うシミュレーションの制御は、３Ｄシミュレータおよび機械制御シミュレータが、概略として以下のような処理を実行することによって実現される。まず、（１）機械制御シミュレータが、計算した仮想機械、仮想対象物の状態を３Ｄシミュレータに送信する。次に、（２）３Ｄシミュレータが、当該受信した仮想機械の状態および仮想対象物の状態に基づいて仮想機械および仮想対象物を３Ｄ空間に表示する。次に、（３）３Ｄシミュレータが、仮想機械に仮想対象物を追従させる追従条件が成立するか否かを判断し、追従条件が成立したと判断した場合は、仮想機械の動きに仮想対象物を追従させる追従動作制御を開始する。
【００５２】
ここで、実施の形態１に従うシミュレーションの状況を時系列で説明する。
図６は、実施の形態１に従うシミュレーションの状況を示す図である。
【００５３】
図６を参照して、仮想ロボット５００は、動作指令に従って、仮想スタンド５５０の上に置かれている仮想ワーク５３０を把持するために図の下方向に移動していく（図６の状態（ａ））。図６の状態（ａ）から一定時間が経過すると、仮想ロボット５００が仮想ワーク５３０を把持するためにさらに仮想ワーク５３０に接近する（図６の状態（ｂ））。そして、図６の状態（ｂ）から一定時間が経過すると、仮想ロボット５００の把持用のアームで挟まれた（対象物を把持する）把持空間と、仮想ワーク５３０とが重なる状態となる。ここで、把持空間の体積のうち、仮想ワーク５３０によって占められる体積が予め定められた基準値以上（例えば、５割以上）となった場合に、仮想ロボット５００の動きに仮想ワーク５３０を追従させる追従条件が成立する。そして、仮想ロボット５００が図の上方向に移動すると、仮想ワーク５３０は仮想ロボット５００の動きに追従して図の矢印（上）方向に移動していく（図６の状態（ｃ））。仮想ロボット５００が仮想ワーク５３０を把持していることを示すシミュレーション結果が表示される。なお、仮想ロボット５００の把持空間は、実空間のロボットの把持空間に対応するように予め設定されている。
【００５４】
（フローチャート）
図７は、実施の形態１に従うシミュレーションの制御の流れを示すフローチャートである。なお、図７に示す各ステップは、基本的には、ＣＰＵ９０１が、制御プログラム１０のシミュレーションを実行することで実現される。
【００５５】
図７を参照して、シミュレーション部８０６は、機械制御シミュレータを実行することによって、仮想ワーク（図６における仮想ワーク５３０）の初期位置を設定する（ステップＳ３０２）。図６を例に説明すると、仮想ワーク５３０の初期位置は、仮想スタンド５５０の中心近傍に設定される。
【００５６】
次に、シミュレーション部８０６は、機械制御シミュレータを実行することによって、制御プログラム１０に従って、仮想機械（図６における仮想ロボット５００）の制御を開始する（ステップＳ３０４）。
【００５７】
シミュレーション部８０６は、機械制御シミュレータを実行することによって、仮想機械に対する動作指令に基づいて、シーケンス制御を実行する（ステップＳ３０６）。続いて、シミュレーション部８０６は、機械制御シミュレータを実行することによって、仮想機械に対する動作指令に基づいて、モーション制御を実行する（ステップＳ３０８）。より具体的には、シミュレーション部８０６は、ユーザインターフェイス部８０２を介したユーザからの動作指令に基づく指令値を計算する。
【００５８】
そして、シミュレーション部８０６は、モーション制御の結果としての仮想機械および仮想ワークの状態を計算し（ステップＳ３１０）、計算した仮想機械および仮想ワークの状態を示す情報を３Ｄシミュレータに送信する（ステップＳ３１２）。そして、シミュレーション部８０６は、機械制御シミュレータを実行することによって、ステップＳ３０６からの処理を繰り返す。
【００５９】
次に、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、機械制御シミュレータから送信された仮想機械および仮想ワークの状態を示す情報を受信する（ステップＳ１１０）。
【００６０】
次に、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想機械の動きに仮想ワークを追従させる追従動作制御を実行しているか否かを判断する（ステップＳ１１１）。より具体的には、シミュレーション部８０６は、後述するステップＳ１２０における追従動作制御が開始されているか否かを判断する。
【００６１】
追従動作制御が開始されていない場合には（ステップＳ１１１においてＮＯの場合）、シミュレーション部８０６は、後述するステップＳ１１４からの処理を実行する。これに対して、追従動作制御が開始されている場合には（ステップＳ１１１においてＹＥＳの場合）、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想機械に追従させる仮想ワークの状態（仮想機械の動きによって動かされる仮想ワークの状態）を計算する（ステップＳ１１２）。
【００６２】
そして、仮想機械の状態および仮想ワークの状態に基づいて、仮想機械および仮想ワークをモニタ９０７の３Ｄ空間に表示させる（ステップＳ１１４）。このとき、当該表示に必要な実行結果データが表示データ作成部８０４に受け渡される。
【００６３】
上述したシーケンス制御およびモーション制御などが行なわれることによって、図６に示したような各状態がモニタ９０７に表示される。より具体的には、仮想ロボット５００に仮想ワークを追従させる追従動作制御が開始されていない場合には（ステップＳ１１１においてＮＯの場合）、仮想スタンド５５０の中心付近に配置されている仮想ワーク５３０に対して、仮想ロボット５００が図の下方向に移動している状態（図６の状態（ａ））や、仮想ロボット５００が仮想ワーク５３０に接近した状態（図６の状態（ｂ））がモニタ９０７に表示される。すなわち、仮想ワーク５３０が仮想ロボット５００に追従していない状態がモニタ９０７に表示される。
【００６４】
これに対して、後述するステップＳ１２０で追従動作制御が開始されている場合には（ステップＳ１１１においてＹＥＳの場合）、仮想ワーク５３０が仮想ロボット５００に追従している（把持されている）状態（図６の状態（ｃ））がモニタ９０７に表示される。
【００６５】
図７を再び参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想機械の動きに仮想ワークを追従させるための追従条件が成立したか否かを判定する処理を実行する（ステップＳ１１６）。
【００６６】
図８は、実施の形態１に従う追従条件の判定処理の流れを示すフローチャートである。ここでは、図６で示した仮想ロボット５００の動きに仮想ワーク５３０を追従させる際の追従条件について説明する。
【００６７】
図８を参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想ロボット５００の把持用の２つのアームで挟まれた把持空間を予め定められた大きさの単位領域（例えば、直方体）に分割する（ステップＳ５０２）。
【００６８】
図９は、実施の形態１に従う仮想ロボット５００の把持空間の分割方式を説明するための図である。
【００６９】
図９を参照して、シミュレーション部８０６は、仮想ロボット５００のモデルデータに基づいて、仮想ロボット５００の把持空間を抽出する。そして、シミュレーション部８０６は、抽出した把持空間を単位領域に分割する。この例は、把持空間が、７５個の単位領域に分割される場合について示している。
【００７０】
再び、図８を参照して、シミュレーション部８０６は、仮想ワーク５３０を含む単位領域の個数を示す変数ｔを０にセットする（ステップＳ５０４）。すなわち、変数ｔは、把持空間の体積のうち、仮想ワーク５３０が占める（重なる）部分の体積を示している。したがって、把持空間が全て仮想ワーク５３０によって占められている場合には、変数ｔの値は７５となり、把持空間に仮想ワーク５３０が存在しない（把持空間に仮想ワーク５３０が全く含まれていない）場合には、変数ｔの値は０となる。
【００７１】
次に、シミュレーション部８０６は、記憶手段（例えば、ＲＡＭ９０３）に格納された変数ｎに１をセットする（ステップＳ５０５）。実施の形態１では、ＲＡＭ９０３には、変数Ｎとして、把持空間を分割した単位領域の個数が保持されている。換言すると、変数Ｎは、把持空間の全体積を示している。
【００７２】
次に、シミュレーション部８０６は、ｎ番目の単位領域が、仮想ワーク５３０を含む領域であるか否か（仮想ワーク５３０によって占められているか否か）を判断する（ステップＳ５０６）。
【００７３】
図１０は、図８に示すステップＳ５０６の判断処理方式を説明するための図である。
図１０を参照して、シミュレーション部８０６は、例えば、８番目（ｎ＝８）の単位領域は、仮想ワーク５３０を含む領域であると判定し（判定ＹＥＳ）、２３番目（ｎ＝２３）の単位領域は、仮想ワーク５３０を含む領域ではないと判定する（判定ＮＯ）。
【００７４】
再び、図８を参照して、ｎ番目の単位領域が仮想ワーク５３０を含む領域ではない場合には（ステップＳ５０６においてＮＯ）、シミュレーション部８０６は、ステップＳ５１０の処理を実行する。これに対して、ｎ番目の単位領域が仮想ワーク５３０を含む領域である場合には（ステップＳ５０６においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値をインクリメントして（ステップＳ５０８）、ステップＳ５１０の処理を実行する。
【００７５】
次に、シミュレーション部８０６は、変数ｎが変数Ｎと一致するか否かを判断する（ステップＳ５１０）。より具体的には、ステップＳ５０６の判断処理が全ての単位領域について実行されたか否かを判断する。
【００７６】
変数ｎが変数Ｎと一致していない場合には（ステップＳ５１０においてＮＯ）、シミュレーション部８０６は、変数ｎの値をインクリメントして（ステップＳ５１１）、ステップＳ５０６以降の処理を繰り返す。これに対して、変数ｎが変数Ｎと一致している場合には（ステップＳ５１０においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値が予め定められた基準値以上か否かを判断する（ステップＳ５１２）。より具体的には、例えば、仮想ロボット５００の動きに仮想ワーク５３０を追従させる追従条件として、仮想ワーク５３０が把持空間の体積のうちの５割以上を占めていることを条件とする場合には、基準値は、把持空間の体積の半分の値に設定される。ここでは、把持空間の体積が７５であるため基準値としては３８が設定される。
【００７７】
変数ｔの値が基準値以上である場合には（ステップＳ５１２においてＹＥＳ）、シミュレーション部８０６は、追従条件が成立したと判定して（ステップＳ５１４）、処理をメイン処理に戻す（リターン）。これに対して、変数ｔの値が基準値以上ではない（未満である）場合には（ステップＳ５１２においてＮＯ）、シミュレーション部８０６は、追従条件が不成立と判定して（ステップＳ５１６）、処理をメイン処理に戻す（リターン）。
【００７８】
なお、上記では、シミュレーション部８０６が、把持空間の体積のうち仮想ワーク５３０が占めている部分の体積を計算することによって追従条件の成否を判定する場合について説明したが、把持空間の全体積のうち仮想ワーク５３０が占めていない（重ならない）部分の体積を計算する場合であってもよい。より具体的には、シミュレーション部８０６は、ｎ番目の単位領域が仮想ワーク５３０を含む領域であると判断した場合に、仮想ワーク５３０を含まない単位領域の個数を示す変数ｉをインクリメントする。ただし、この場合には、シミュレーション部８０６は、変数ｉの値が基準値未満であるときに追従条件が成立したと判定し、基準値以上である場合に追従条件が成立しないと判定する。
【００７９】
再び、図７を参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１１６の判定処理に基づいて追従条件が成立しているか否かを判断する（ステップＳ１１８）。換言すると、シミュレーション部８０６は、仮想ワークを仮想機械の動きに追従させるべきか否かを判断する。追従条件が成立した場合には（ステップＳ１１８においてＹＥＳ）、シミュレーション部８０６は、仮想機械の動きに仮想ワークを追従させる追従動作制御を開始して（ステップＳ１２０）、ステップＳ１１０からの処理を実行する。
【００８０】
これに対して、追従条件が成立していない場合には（ステップＳ１１８においてＮＯ）、シミュレーション部８０６は、ステップＳ１１０からの処理を実行する。すなわち、シミュレーション部８０６は、上述した追従動作制御を開始せずに、ステップＳ１１０からの処理を実行する。
【００８１】
ステップＳ１２０において、仮想機械の動きに仮想ワークを追従させる追従動作制御が開始された場合には、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、当該追従動作制御を反映した仮想機械および仮想ワークの状態がモニタ９０７の３Ｄ空間に表示される。すなわち、例えば、図６の状態（ｃ）のように、仮想ロボット５００の動きに仮想ワーク５３０を追従させて、仮想ロボット５００が仮想ワーク５３０を把持している状況がモニタ９０７の３Ｄ空間に表示される。
【００８２】
実施の形態１によると、仮想ロボットの把持空間が一定以上仮想ワークによって占められた場合に、仮想ロボットの動きに仮想ワークを追従させることとした。したがって、実空間におけるロボットが把持することが可能なワークは、把持されるようにシミュレーションし、実空間においてロボットが把持不可能なワークは、把持されないようにシミュレーションすることができる。すなわち、実空間におけるロボットおよびワークの動きをより精度良くシミュレーションすることが可能となる。
【００８３】
［実施の形態２］
実施の形態１では、機械がロボットである場合のシミュレーションを行なう例について説明した。実施の形態２では、機械がエアシリンダである場合のシミュレーションについて説明する。なお、実施の形態２は、実施の形態１と比較して、図８で説明した追従条件の判定方式が異なる。
【００８４】
実施の形態２において、＜制御システムの全体構成＞、＜ＰＣ６のハードウェア構成＞および＜機能構成＞については、実施の形態１と基本的に同様であるため、その詳細な説明は繰り返さない。
【００８５】
＜シミュレーション部の機能構成＞
実施の形態２に従うシミュレーション部８０６の機能を説明する。シミュレーション制御部８２０における判断部８２４の機能が若干異なること以外は、実施の形態１と同様であるため、同一部分についてはその詳細な説明は繰り返さない。
【００８６】
実施の形態２において、判断部８２４は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間（実施の形態２においては後述する可動空間）と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する。より具体的には、判断部８２４は、仮想対象物を複数の単位領域に分割し、分割された各単位領域が作用空間に含まれるか否かを判定する。そして、判断部８２４は、作用空間に含まれると判定された単位領域の個数に基づいて仮想対象物の体積のうち、作用空間に重なる部分の体積を計算する。
【００８７】
＜シミュレーション制御の流れ＞
（概略）
図１１は、実施の形態２におけるシミュレーションの３Ｄ空間を示す図である。
【００８８】
図１１を参照して、実施の形態２においては、実空間に対応する仮想的な空間である３Ｄ空間には、実空間のエアシリンダに対応する仮想エアシリンダ６００と、実空間のワークに対応する仮想ワーク６３０と、実空間のコンベアに対応する仮想コンベア６５０、６５５とが配置される。より具体的には、仮想ワーク６３０は、基本的には、仮想コンベア６５０の上に置かれて、仮想コンベア６５０のベルトが駆動されることによって、ベルトが駆動される方向（図の搬送方向）に移動する。しかしながら、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させる条件が成立した場合には、仮想エアシリンダ６００がピストンを図の右方向（押し出し方向）に押し出すと、仮想ワーク６３０が図の右方向に押し出される。その後は、仮想ワーク６３０は仮想コンベア６５５の上に置かれて図の右下方向に移動していく。典型的には、エアシリンダは、エア圧が加圧されることによりピストンが押し出される機構を有する。
【００８９】
概略として、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、３Ｄ空間にオブジェクト（実施の形態２においては、仮想エアシリンダ６００、仮想ワーク６３０および仮想コンベア６５０、６５５）を表示する。また、３Ｄシミュレータは、仮想エアシリンダ６００によって扱われる仮想ワーク６３０を仮想エアシリンダ６００の動きに追従させる追従条件が成立したか否かを判断する。より具体的には、３Ｄシミュレータは、仮想ワーク６３０の体積のうち、仮想エアシリンダ６００の可動空間に重なる（含まれる）部分の体積が一定以上の場合には（追従条件が成立した場合には）、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させる。すなわち、３Ｄシミュレータは、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させる追従動作制御を開始する。
【００９０】
また、シミュレーション部８０６は、機械制御シミュレータを実行することによって、仮想エアシリンダ６００および仮想コンベア６５０を制御する。
【００９１】
図１２は、実施の形態２に従うシミュレーションの状況を示す図である。
図１２を参照して、仮想エアシリンダ６００は、ピストンを押し出す動作指令に従って、ピストンを図の右方向に押し出す。このとき、仮想エアシリンダ６００の（ピストンの）可動範囲（可動空間）に仮想ワーク６３０がほとんど含まれていない場合には（図１２の状態（ａ）、（ｃ）に対応）、仮想エアシリンダ６００のピストンが押し出されても、仮想ワーク６３０は右方向に移動しない。これに対して、仮想エアシリンダ６００の可動空間に仮想ワーク６３０が一定以上含まれている場合には（図１２の状態（ｂ）に対応）、仮想エアシリンダ６００のピストンが押し出されると、仮想ワーク６３０は右方向に移動して、仮想コンベア６５５によって搬送される。すなわち、仮想ワーク６３０の体積のうち、可動空間に含まれる部分の体積が一定以上の場合には、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させる追従条件が成立する。なお、仮想エアシリンダ６００の可動空間は、実空間のエアシリンダの可動空間に対応するように予め設定されている。
【００９２】
上記のシミュレーション結果は、実空間において、エアシリンダの可動空間にワークがほとんど含まれていない場合には（３Ｄ空間における図１２の状態（ａ）、（ｃ）に対応）、ピストンを押し出したとしても、ワークの向きが変わったりするだけで、押し出されないことを反映している。また、エアシリンダのピストンの可動空間にワークが一定以上含まれている場合には（３Ｄ空間における図１２の状態（ｂ）に対応）、ピストンを押し出すと、ワークが押し出されることを反映している。
【００９３】
（追従条件の判定処理）
ここでは、実施の形態２における追従条件の判定処理の流れ（図７におけるステップＳ１１６に相当する部分）について説明する。なお、シミュレーション部８０６の全体の制御の流れについては、実施の形態１における図７と基本的に同様であるため、その詳細な説明は繰り返さない。
【００９４】
図１３は、実施の形態２に従う追従条件の判定処理の流れを示すフローチャートである。実施の形態２のステップＳ６００は、実施の形態１のステップＳ１１６に相当する。
【００９５】
図１３を参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想ワーク６３０を予め定められた大きさの単位領域（例えば、直方体）に分割する（ステップＳ６０２）。
【００９６】
図１４は、実施の形態２に従う仮想ワーク６３０の分割方式を説明するための図である。
【００９７】
図１４を参照して、シミュレーション部８０６は、仮想ワーク６３０のモデルデータに基づいて、仮想ワーク６３０を複数の単位領域に分割する。この例は、仮想ワーク６３０が２４個の単位領域に分割される場合について示している。
【００９８】
再び、図１３を参照して、シミュレーション部８０６は、仮想エアシリンダ６００の可動空間に含まれる単位領域の個数を示す変数ｔを０にセットする（ステップＳ６０４）。変数ｔは、仮想ワーク６３０の体積のうち可動空間に含まれる部分の体積を示している。例えば、仮想ワーク６３０の全部が可動空間に含まれる場合には、変数ｔの値は２４となり、仮想ワーク６３０が可動空間に存在しない場合には、変数ｔの値は０となる。
【００９９】
次に、シミュレーション部８０６は、ＲＡＭ９０３に格納された変数ｎに１をセットする（ステップＳ６０５）。実施の形態２においては、ＲＡＭ９０３には、変数Ｎとして仮想ワーク６３０を分割した単位領域の個数が保持されている。換言すると、変数Ｎは、仮想ワーク６３０の全体積を示している。
【０１００】
次に、シミュレーション部８０６は、ｎ番目の単位領域が可動空間に含まれているか否かを判断する（ステップＳ６０６）。
【０１０１】
図１５は、図１４に示すステップＳ６０６の判定処理方式を説明するための図である。
図１５を参照して、シミュレーション部８０６は、例えば、１１番目（ｎ＝１１）の単位領域は、可動空間に含まれると判定し、１番目（ｎ＝１）の単位領域は、可動空間に含まれないと判定する。
【０１０２】
再び、図１３を参照して、ｎ番目の単位領域が可動空間に含まれていない場合には（ステップＳ６０６においてＮＯ）、ステップＳ６１０の処理を実行する。これに対して、ｎ番目の単位領域が可動空間に含まれている場合には（ステップＳ６０６においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値をインクリメントして（ステップＳ６０８）、ステップＳ６１０の処理を実行する。
【０１０３】
次に、シミュレーション部８０６は、変数ｎが変数Ｎと一致するか否かを判断する（ステップＳ６１０）。より具体的には、シミュレーション部８０６は、ステップＳ６０６における判断処理が全ての単位領域について実行されたか否かを判断する。
【０１０４】
変数ｎが変数Ｎと一致していない場合には（ステップＳ６１０においてＮＯ）、シミュレーション部８０６は、変数ｎの値をインクリメントして（ステップＳ６１１）、ステップＳ６０６からの処理を繰り返す。これに対して、変数ｎが変数Ｎと一致している場合には（ステップＳ６１０においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値が基準値以上か否かを判断する（ステップＳ６１２）。より具体的には、例えば、追従条件として、仮想ワーク６３０の体積のうち５割以上が可動空間に含まれていることを条件とする場合には、基準値は仮想ワーク６３０の体積の半分の値に設定される。ここでは、仮想ワーク６３０の体積が２４であるため基準値としては１２が設定される。
【０１０５】
変数ｔの値が基準値以上である場合には（ステップＳ６１２においてＹＥＳ）、シミュレーション部８０６は、追従条件が成立したと判定して（ステップＳ６１４）、処理をメイン処理に戻す（リターン）。これに対して、変数ｔの値が基準値以上ではない（未満である）場合には（ステップＳ６１２においてＮＯ）、シミュレーション部８０６は、追従条件が不成立と判定して（ステップＳ６１６）、処理をメイン処理に戻す（リターン）。
【０１０６】
なお、実施の形態１と同様な考え方で、仮想ワーク６３０の全体積のうち、可動空間に含まれない体積を計算する場合であってもよい。より具体的には、シミュレーション部８０６は、ｎ番目の単位領域が可動空間に含まれないと判断した場合に、可動空間に含まれない体積を示す変数ｉをインクリメントしていく。この場合には、シミュレーション部８０６は、変数ｉの値が基準値未満であるときに追従条件が成立したと判定し、基準値以上であるときに追従条件が成立しないと判定する。
【０１０７】
また、仮想ワーク６３０の形状（球、直方体、三角錐）、種類、重さなどの仕様に応じて、ステップＳ６０６における基準値を変更して判断が行なわれてもよい。より具体的には、仮想ワーク６３０ごとに、当該基準値をモデルデータとして記憶させておき、シミュレーション部８０６は、当該基準値に基づいて、ステップＳ６１２の処理を実行してもよい。
【０１０８】
上記のように追従条件の判定処理を実行することによって、実空間におけるエアシリンダとワークの動きをより精度良く仮想空間においてシミュレーションすることが可能となる。例えば、本実施の形態に従う追従条件の判定処理の比較例として、仮想エアシリンダ６００と仮想ワーク６３０とが一定距離以下になったことを条件として、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させるような場合について考えてみる。
【０１０９】
図１６は、比較例のシミュレーションの状況を示す図である。
図１６を参照して、仮想エアシリンダ６００は、ピストンを押し出す動作指令に従って、ピストンを図の右方向に押し出す。このとき、仮想エアシリンダ６００と仮想ワーク６３０との最短距離ｄは、図１６の状態（ａ）〜（ｃ）ですべて同じである。すなわち、仮想エアシリンダ６００の可動空間に仮想ワーク６３０が少しでも含まれると、最短距離ｄは同じ値になる。ここで、最短距離ｄが一定距離以下である場合には追従条件が成立するため、仮想エアシリンダ６００の動きに仮想ワーク６３０を追従させることになる。したがって、図１６の状態（ａ）〜（ｃ）の全てにおいて、仮想エアシリンダ６００のピストンが右方向に押し出されると、仮想ワーク６３０が右方向に移動する状況が示されている。
【０１１０】
したがって、上記の比較例では、実際（実空間上では）にはエアシリンダの可動範囲にワークがほとんど含まれていない場合には（図１６の状態（ａ）、（ｃ））、ピストンを押し出したとしても、（ワークの向きが変わるだけで）ワークは適切に押し出されないにもかかわらず、図１６の状態（ａ）、（ｃ）では仮想エアシリンダ６００の動きに追従して仮想ワーク６３０が押し出されてしまうシミュレーション結果となっている。したがって、比較例においては、実空間のエアシリンダおよびワークの動きを精度よくシミュレーションできていないことがわかる。
【０１１１】
これに対して、実施の形態２に従う追従条件の判定処理においては、図１２に示したように、実空間にエアシリンダおよびワークの動きをより精度よくシミュレーションできる。さらに、実施の形態２によると、可動空間に含まれる仮想ワーク６３０の体積を基準に追従条件を判定しているため、シミュレーション結果は、仮想ワーク６３０の形状、あるいは搬送されてくる仮想ワーク６３０の向きにも依存しにくく、より精度良く仮想機械および仮想ワークの動きをシミュレーションすることが可能となる。
【０１１２】
（追従条件の判定処理の変形例）
なお、実施の形態１で把持空間を単位領域に分割した場合と同様な考え方で、変形例として実施の形態２における可動空間を単位領域に分割する場合であってもよい。すなわち、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想エアシリンダ６００の可動空間を単位領域（例えば、直方体）に分割する。
【０１１３】
図１７は、実施の形態２の変形例に従う仮想エアシリンダ６００の可動空間の分割方式を説明するための図である。
【０１１４】
図１７を参照して、シミュレーション部８０６は、仮想エアシリンダ６００のモデルデータに基づいて、仮想エアシリンダ６００の可動空間を複数の単位領域（例えば、直方体）に分割する。この例は、単位領域が、４０個の単位領域に分割される場合について示されている。
【０１１５】
上記の場合には、シミュレーション部８０６は、ｎ番目の単位領域が仮想ワーク６３０を含む領域であるか否かを判断する。
【０１１６】
図１８は、実施の形態２の変形例に従う単位領域が仮想ワーク６３０を含む領域であるか否かの判断方式を説明するための図である。
【０１１７】
図１８を参照して、シミュレーション部８０６は、例えば、３番目（ｎ＝３）の単位領域は、仮想ワーク６３０を含む領域であると判断し、１８番目（ｎ＝１８）の単位領域は、仮想ワーク６３０を含まない領域であると判断する。
【０１１８】
［実施の形態３］
実施の形態１では、図８で説明した追従条件の判定処理において、単位領域として直方体に分割する例について説明した。実施の形態３では、追従条件の判定処理において、仮想ワーク５３０の表面を複数の単位領域（例えば、長方形）に分割する場合について説明する。
【０１１９】
実施の形態３において、＜制御システムの全体構成＞、＜ＰＣ６のハードウェア構成＞および＜機能構成＞については、実施の形態１と基本的に同様であるため、その詳細な説明は繰り返さない。すなわち、実施の形態３は、実施の形態１と比較して図８で説明した追従条件が異なる。
【０１２０】
＜シミュレーション部の機能構成＞
実施の形態３に従うシミュレーション部８０６の機能を説明する。シミュレーション制御部８２０における判断部８２４の機能が若干異なること以外は、実施の形態１と同様であるため、同一部分についてはその詳細な説明は繰り返さない。
【０１２１】
実施の形態３において、判断部８２４は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間（実施の形態３においては把持空間）と仮想対象物とが重なる部分の仮想対象物の表面積が基準値以上であるか否かを判断する。より具体的には、判断部８２４は、仮想対象物の表面を複数の単位領域に分割し、分割された各単位領域が作用空間に含まれるか否かを判定する。そして、判断部８２４は、含まれると判定された単位領域の個数に基づいて仮想対象物の全表面積のうち、作用空間に重なる部分の表面積を計算する。
【０１２２】
＜シミュレーション制御の流れ＞
実施の形態３においては、実施の形態１における図５の場面を想定する。また、シミュレーション部８０６の全体の制御の流れについては、実施の形態１における図７と基本的に同様であるため、その詳細な説明は繰り返さない。
【０１２３】
以下、実施の形態３に従う追従条件の判定処理の流れ（図７におけるステップＳ１１６に相当する部分）について説明する。
【０１２４】
（追従条件の判定処理）
図１９は、実施の形態３に従う追従条件の判定処理の流れを示すフローチャートである。実施の形態３のステップＳ７００は、実施の形態１のステップＳ１１６に相当する。
【０１２５】
図１９を参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想ワーク５３０の表面を予め定められた大きさの単位領域（例えば、長方形）に分割する（ステップＳ７０２）。
【０１２６】
図２０は、実施の形態３に従う仮想ワーク５３０の分割方式を説明するための図である。
【０１２７】
図２０を参照して、シミュレーション部８０６は、仮想ワーク５３０のモデルデータに基づいて、仮想ワーク５３０の表面を複数の単位領域に分割する。この例では、単位領域が、５２個の単位領域に分割される例について示されている。
【０１２８】
再び、図１９を参照して、シミュレーション部８０６は、仮想ロボット５００の把持空間に含まれる単位領域の個数を示す変数ｔを０にセットする（ステップＳ７０４）。変数ｔは、仮想ワーク５３０の全部の表面積のうち、把持空間に含まれる部分の表面積を示している。例えば、仮想ワーク５３０の全部の表面が把持空間に含まれる場合には、変数ｔの値は５２となり、把持空間に仮想ワーク５３０が全く含まれない場合には、変数ｔの値は０となる。
【０１２９】
次に、シミュレーション部８０６は、ＲＡＭ９０３に格納された変数ｎに１をセットする（ステップＳ７０５）。実施の形態３においては、ＲＡＭ９０３には、変数Ｎとして仮想ワーク５３０の表面を分割した単位領域の個数が保持されている。換言すると、変数Ｎは、仮想ワーク５３０の全表面積を示している。
【０１３０】
次に、シミュレーション部８０６は、ｎ番目の単位領域が把持空間に含まれているか否かを判断する（ステップＳ７０６）。
【０１３１】
図２１は、図２０に示すステップＳ７０６の判定処理方式を説明するための図である。
図２１を参照して、シミュレーション部８０６は、例えば、１２番目（ｎ＝１２）の単位領域は、把持空間に含まれていると判定し、１番目（ｎ＝１）の単位領域は、把持空間に含まれていないと判定する。
【０１３２】
再び、図１９を参照して、ｎ番目の単位領域が把持空間に含まれていない場合には（ステップＳ７０６においてＮＯ）、シミュレーション部８０６は、ステップＳ７１０の処理を実行する。これに対して、ｎ番目の単位領域が把持空間に含まれている場合には（ステップＳ７０６においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値をインクリメントして（ステップＳ７０８）、ステップＳ７１０の処理を実行する。
【０１３３】
次に、シミュレーション部８０６は、変数ｎが変数Ｎと一致するか否かを判断する（ステップＳ７１０）。より具体的には、シミュレーション部８０６は、ステップＳ７０６における判断処理が全ての単位領域について実行されたか否かを判断する。
【０１３４】
変数ｎが変数Ｎと一致していない場合には（ステップＳ７１０においてＮＯ）、変数ｎの値をインクリメントして（ステップＳ７１１）、シミュレーション部８０６は、ステップＳ７０６以降の処理を繰り返す。これに対して、変数ｎが変数Ｎと一致している場合には（ステップＳ７１０においてＹＥＳ）、シミュレーション部８０６は、変数ｔの値が基準値以上か否かを判断する（ステップＳ７１２）。より具体的には、例えば、追従条件として、仮想ワーク５３０の表面のうちの５割以上が把持空間に含まれていることを条件とする場合には、基準値は仮想ワーク５３０の表面積の半分の値に設定される。ここでは、仮想ワーク５３０の表面積が５２であるため基準値としては２６が設定される。
【０１３５】
変数ｔの値が基準値以上である場合には（ステップＳ７１２においてＹＥＳ）、シミュレーション部８０６は、追従条件が成立したと判定して（ステップＳ７１４）、処理をメイン処理に戻す（リターン）。これに対して、変数ｔの値が基準値以上ではない（未満である）場合には（ステップＳ７１２においてＮＯ）、シミュレーション部８０６は、追従条件が不成立と判定して（ステップＳ７１６）、処理をメイン処理に戻す（リターン）。
【０１３６】
実施の形態３によると、仮想ロボットの把持空間に仮想ワークの表面が一定以上含まれた場合に、仮想ロボットの動きに仮想ワークを追従させることとした。したがって、実空間においてロボットが把持可能なワークは、把持されるようにシミュレーションし、実空間においてロボットが把持不可能なワークは、把持されないようにシミュレーションすることができる。すなわち、実空間におけるロボットおよびワークの動きをより精度良くシミュレーションすることが可能となる。
【０１３７】
［その他の実施の形態］
上述の実施の形態１では、追従条件の判定処理において把持空間を単位領域に分割する場合について説明したが、実施の形態２と同様な考え方で、仮想ワーク５３０を単位領域に分割する場合であってもよい。すなわち、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、仮想ワーク５３０を単位領域（例えば、直方体）に分割する。シミュレーション部８０６は、ｎ番目の単位領域が把持空間に含まれているか否かの判断処理を実行する。そして、シミュレーション部８０６は、仮想ワーク５３０の体積のうち、把持空間に含まれる部分の体積が一定以上の場合には追従条件が成立したと判定し、基準値未満である場合には追従条件が成立しないと判定する。
【０１３８】
また、上述した実施の形態においては、仮想機械は、実空間の機械に対応し、仮想対象物は、実空間の対象物（ワーク）に対応するものであることとした。しかしながら、これに限定されず、仮想空間である３Ｄ空間のみに存在するものであってもよい。これによると、例えば、実際の装置を製作する前に、制御プログラムのシミュレーションにおいて機械の動きに対象物が追従するか否かを検証することができる。
【０１３９】
また、上述した実施の形態においては、シミュレーション部８０６が実行するシミュレータが、３Ｄシミュレータ、および、機械制御シミュレータの２つに分かれている場合について説明した。しかし、これに限定されず、これらの２つが統合されていてもよい。このようにすれば、それぞれのシミュレータ間でのデータのやり取りを行なわずに済むので、効率よくシミュレーションを実行することができる。
【０１４０】
なお、コンピュータを機能させて、上述のフローチャートで説明したような制御を実行させるプログラムを提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭおよびメモリカードなどの一時的でないコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０１４１】
プログラムは、コンピュータのオペレーティングシステム（ＯＳ）の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずＯＳと協働して処理が実行される。このようなモジュールを含まないプログラムも、本実施の形態にかかるプログラムに含まれ得る。
【０１４２】
また、本実施の形態にかかるプログラムは他のプログラムの一部に組込まれて提供されるものであってもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、本実施の形態にかかるプログラムに含まれ得る。
【０１４３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１４４】
２  サーバ、４  ネットワーク、８  コントローラサポートプログラム、１０，１５  制御プログラム、１２，９０２  ＲＯＭ、１４  コントローラ、１６  制御対象装置、１７  モータドライバ、１８  モータ、５００  仮想ロボット、５３０，６３０  仮想ワーク、５５０  仮想スタンド、６００  仮想エアシリンダ、６５０，６５５  仮想コンベア、８０２  ユーザインターフェイス部、８０４  表示データ作成部、８０６  シミュレーション部、８０８  制御プログラム記憶部、８１０  制御プログラム編集部、８１２  コントローラインターフェイス部、８２０  シミュレーション制御部、８２２  動作制御部、８２４  判断部、８２６  追従制御部、８３０  実行結果データ記憶部、８４０  モデルデータ記憶部、９０１  ＣＰＵ、９０３  ＲＡＭ、９０４  ＨＤＤ、９０５  キーボード、９０６  マウス、９０７  モニタ、９０８  ＣＤ−ＲＯＭ駆動装置、９０９  通信ＩＦ、９１０  内部バス。
【図１】
2014063327.tif 000003
【図２】
2014063327.tif 000004
【図３】
2014063327.tif 000005
【図４】
2014063327.tif 000006
【図５】
2014063327.tif 000007
【図６】
2014063327.tif 000008
【図７】
2014063327.tif 000009
【図８】
2014063327.tif 000010
【図９】
2014063327.tif 000011
【図１０】
2014063327.tif 000012
【図１１】
2014063327.tif 000013
【図１２】
2014063327.tif 000014
【図１３】
2014063327.tif 000015
【図１４】
2014063327.tif 000016
【図１５】
2014063327.tif 000017
【図１６】
2014063327.tif 000018
【図１７】
2014063327.tif 000019
【図１８】
2014063327.tif 000020
【図１９】
2014063327.tif 000021
【図２０】
2014063327.tif 000022
【図２１】
2014063327.tif 000023