(57)【特許請求の範囲】
【請求項１】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有するシミュレーション装置であって、
前記制御部は、
前記制御プログラムにしたがって、仮想空間において前記機械に対応する仮想機械によって扱われ前記対象物に対応する仮想対象物の位置に基づいて、前記仮想機械を動かすための指令値を計算する第１の計算手段と、
前記第１の計算手段によって計算された前記指令値にしたがった前記仮想機械の動きを計算する第２の計算手段と、
前記第２の計算手段によって計算された前記仮想機械の動きによって動かされる前記仮想対象物の動きを計算する第３の計算手段と、
前記第２の計算手段によって計算された前記仮想機械の動き、または、前記第３の計算手段によって計算された前記仮想対象物の動きを表示するためのデータを作成する表示データ作成手段と、
実空間画像から前記対象物または前記機械の状態を特定する特定手段と、
前記特定手段によって特定された前記状態から前記対象物または前記機械の初期状態を計算する第４の計算手段とを含み、
前記第１の計算手段は、前記第４の計算手段によって計算された前記初期状態をシミュレーションの開始時の状態として前記指令値を計算する、シミュレーション装置。
【請求項２】
前記制御部は、さらに、
前記第２の計算手段によって計算された前記仮想機械の動き、または、前記第３の計算手段によって計算された前記仮想対象物の動きを、仮想的に撮影した場合に得られる仮想空間の所定撮影位置の仮想空間画像を生成する仮想撮影手段を備え、
前記仮想撮影手段は、当該仮想撮影手段に対応する実空間の視覚センサが向けられている実空間の位置に対応する前記所定撮影位置の前記仮想空間画像を生成する、請求項１に記載のシミュレーション装置。
【請求項３】
前記第１の計算手段、前記第２の計算手段、前記第３の計算手段、および、前記仮想撮影手段は、同一の時間軸にしたがって、それぞれ、前記指令値、前記仮想機械の動き、および、前記仮想対象物の動きを計算し、前記仮想空間画像を生成する、請求項２に記載のシミュレーション装置。
【請求項４】
記憶部と、
表示部とをさらに備え、
前記記憶部は、
前記仮想撮影手段に対応する実空間の視覚センサによって撮影された実空間画像と当該実空間画像に対応する前記仮想空間画像とを対応付けて予め記憶する画像記憶部を含み、
前記制御部は、さらに、
前記仮想撮影手段によって生成された前記仮想空間画像に対応して前記画像記憶部に記憶されている前記実空間画像を前記表示部に表示させる表示制御手段を含む、請求項２に記載のシミュレーション装置。
【請求項５】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有するシミュレーション装置で行なわれるシミュレーション方法であって、
前記制御部が、
前記制御プログラムにしたがって、仮想空間において前記機械に対応する仮想機械によって扱われ前記対象物に対応する仮想対象物の位置に基づいて、前記仮想機械を動かすための指令値を計算する第１のステップと、
前記第１のステップで計算された前記指令値にしたがった前記仮想機械の動きを計算する第２のステップと、
前記第２のステップで計算された前記仮想機械の動きによって動かされる前記仮想対象物の動きを計算する第３のステップと、
前記第２のステップで計算された前記仮想機械の動き、または、前記第３のステップで計算された前記仮想対象物の動きを表示するためのデータを作成する表示データ作成ステップと、
実空間画像から前記対象物または前記機械の状態を特定する特定ステップと、
前記特定ステップによって特定された前記状態から前記対象物または前記機械の初期状態を計算する第４のステップとを含み、
前記第１のステップは、前記第４のステップによって計算された前記初期状態をシミュレーションの開始時の状態として前記指令値を計算するステップを含む、シミュレーション方法。
【請求項６】
対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有するシミュレーション装置で実行されるシミュレーションプログラムであって、
前記制御プログラムにしたがって、仮想空間において前記機械に対応する仮想機械によって扱われ前記対象物に対応する仮想対象物の位置に基づいて、前記仮想機械を動かすための指令値を計算する第１のステップと、
前記第１のステップで計算された前記指令値にしたがった前記仮想機械の動きを計算する第２のステップと、
前記第２のステップで計算された前記仮想機械の動きによって動かされる前記仮想対象物の動きを計算する第３のステップと、
前記第２のステップで計算された前記仮想機械の動き、または、前記第３のステップで計算された前記仮想対象物の動きを表示するためのデータを作成する表示データ作成ステップと、
実空間画像から前記対象物または前記機械の状態を特定する特定ステップと、
前記特定ステップによって特定された前記状態から前記対象物または前記機械の初期状態を計算する第４のステップとを前記制御部に実行させ、
前記第１のステップは、前記第４のステップによって計算された前記初期状態をシミュレーションの開始時の状態として前記指令値を計算するステップを含む、シミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、シミュレーション装置、シミュレーション方法、および、シミュレーションプログラムに関し、特に、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行するのに適したシミュレーション装置、シミュレーション方法、および、シミュレーションプログラムに関する。
【背景技術】
【０００２】
従来、検査対象物をカメラで撮影した画像から計測結果を抽出する画像処理装置で用いられる制御プログラムを作成するプログラム作成装置があった。このプログラム作成装置では、実際のカメラで撮影した画像を登録画像として予め保持しておき、この登録画像から計測結果を抽出することで、オフラインでシミュレーションをすることができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−１２３０６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１のオフラインでのシミュレーションにおいては、カメラなどの視覚センサの計測結果および機械の制御が同じ時間軸で同期的に動作するシミュレーションができなかった。
【０００５】
この発明は、上述の問題を解決するためになされたものであり、その目的の１つは、視覚センサを含めた統合的なシミュレーションを実現することが可能なシミュレーション装置、シミュレーション方法、および、シミュレーションプログラムを提供することである。
【課題を解決するための手段】
【０００６】
上述の目的を達成するために、この発明のある局面によれば、シミュレーション装置は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有する装置である。
【０００７】
制御部は、制御プログラムにしたがって、仮想空間において機械に対応する仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータに基づいて、仮想機械を動かせるための指令値を計算する第１の計算部と、第１の計算部によって計算された指令値にしたがった仮想機械の動きを計算する第２の計算部と、第２の計算部によって計算された仮想機械の動きによって動かされる仮想対象物の動きを計算する第３の計算部と、第２の計算部によって計算された仮想機械の動き、または、第３の計算部によって計算された仮想対象物の動きを、仮想的に撮影した場合に得られる仮想空間画像を生成する仮想撮影部とを含む。第１の計算部は、仮想撮影部によって生成された仮想空間画像にさらに基づいて、指令値を計算する。
【０００８】
好ましくは、第１の計算部、第２の計算部、第３の計算部、および、仮想撮影部は、同一の時間軸にしたがって、それぞれ、指令値、仮想機械の動き、および、仮想対象物の動きを計算し、仮想空間画像を生成する。
【０００９】
好ましくは、制御部は、さらに、仮想撮影部に対応する実空間の視覚センサによって撮影された実空間画像から対象物または機械の状態を特定する特定部と、特定部によって特定された状態から対象物または機械の初期状態を計算する第４の計算部とを含む。第１の計算部は、第４の計算部によって計算された初期状態をシミュレーションの開始時の状態として指令値を計算する。
【００１０】
好ましくは、シミュレーション装置は、記憶部と、表示部とをさらに備える。記憶部は、仮想撮影部に対応する実空間の視覚センサによって撮影された実空間画像と当該実空間画像に対応する仮想空間画像とを対応付けて予め記憶する画像記憶部を含む。制御部は、さらに、仮想撮影部によって生成された仮想空間画像に対応して画像記憶部に記憶されている実空間画像を表示部に表示させる表示制御部を含む。
【００１１】
この発明の他の局面によれば、シミュレーション方法は、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有するシミュレーション装置で行なわれる方法である。
【００１２】
シミュレーション方法は、制御部が、制御プログラムにしたがって、仮想空間において機械に対応する仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータに基づいて、仮想機械を動かせるための指令値を計算する第１のステップと、第１のステップで計算された指令値にしたがった仮想機械の動きを計算する第２のステップと、第２のステップで計算された仮想機械の動きによって動かされる仮想対象物の動きを計算する第３のステップと、第２のステップで計算された仮想機械の動き、または、第３のステップで計算された仮想対象物の動きを、仮想的に撮影した場合に得られる仮想空間画像を生成する仮想撮影ステップとを含む。第１のステップは、仮想撮影ステップで生成された仮想空間画像に基づいて、指令値を計算するステップを含む。
【００１３】
この発明のさらに他の局面によれば、シミュレーションプログラムは、対象物を扱う機械の動きを制御するコントローラにおいて実行される制御プログラムのシミュレーションを実行する制御部を有するシミュレーション装置で実行されるプログラムである。
【００１４】
シミュレーションプログラムは、制御プログラムにしたがって、仮想空間において機械に対応する仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータに基づいて、仮想機械を動かせるための指令値を計算する第１のステップと、第１のステップで計算された指令値にしたがった仮想機械の動きを計算する第２のステップと、第２のステップで計算された仮想機械の動きによって動かされる仮想対象物の動きを計算する第３のステップと、第２のステップで計算された仮想機械の動き、または、第３のステップで計算された仮想対象物の動きを、仮想的に撮影した場合に得られる仮想空間画像を生成する仮想撮影ステップとを制御部に実行させる。第１のステップは、仮想撮影ステップで生成された仮想空間画像に基づいて、指令値を計算するステップを含む。
【発明の効果】
【００１５】
この発明に従えば、視覚センサを含めた統合シミュレーションを実現できる。また、視覚センサを用いて機械を制御する場合のテストをすることができる。
【図面の簡単な説明】
【００１６】
【図１】この発明の実施の形態に従う制御システムの構成を説明する図である。
【図２】この発明の実施の形態に従うＰＣのハードウェア構成を説明する図である。
【図３】ＣＰＵがシミュレーションプログラムを実行することにより実現される機能ブロックを説明する図である。
【図４】この発明の実施の形態におけるシミュレーションの状況を示す第１の図である。
【図５】第１の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。
【図６】第１の実施の形態におけるシミュレーションの３Ｄ空間を示す図である。
【図７】第１の実施の形態における仮想視覚センサにより認識された仮想ワークの位置に基づく制御を説明するための図である。
【図８】第２の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。
【図９】第２の実施の形態におけるシミュレーションの３Ｄ空間を示す図である。
【図１０】第２の実施の形態における仮想視覚センサにより認識された仮想ワークの位置に基づく制御を説明するための図である。
【図１１】第３の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。
【図１２】第３の実施の形態におけるシミュレーションの３Ｄ空間を示す図である。
【発明を実施するための形態】
【００１７】
以下、この発明の実施の形態について、図面を参照しながら詳細に説明する。なお、図中の同一または相当部分については、同一符号を付してその説明は繰返さない。
【００１８】
［第１の実施の形態］
図１は、この発明の実施の形態に従う制御システムの構成を説明する図である。図１を参照して、この発明の実施の形態に従う制御システムは、サーバ２と、ネットワーク４と、ＰＣ（Personal Computer）６と、コントローラ１４と、制御対象装置１６とから構成されている。
【００１９】
サーバ２は、ネットワーク４を介してＰＣ６と接続されている。ＰＣ６は、制御対象装置１６を制御するコントローラ１４と通信可能に接続されている。
【００２０】
ＰＣ６は、この発明の一実施形態におけるシミュレーション装置に相当する。ＰＣ６には、シミュレーションプログラムを含むコントローラサポートプログラム８がインストールされており、また、ユーザが作成した制御プログラム１０が記憶されている。ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）１２は、コントローラサポートプログラム８を格納している。ＰＣ６にインストールされているコントローラサポートプログラム８は、このＣＤ−ＲＯＭ１２からインストールされたものである。
【００２１】
コントローラ１４は、制御対象装置１６の動きを制御する。この発明の実施の形態においては、コントローラ１４として一例として、ＰＬＣ（Programmable Logic Controller）が用いられる。すなわち、このＰＬＣには、いわゆるモーションコントロール機能が備えられている。コントローラ１４は、制御対象装置１６に対する制御内容を規定する制御プログラム１５を記憶している。コントローラ１４は、制御周期ごとに制御プログラム１５を一巡実行する。ここで、コントローラ１４に記憶されている制御プログラム１５は、ＰＣ６に記憶されている制御プログラム１０をコピーしたコピーデータであり、ＰＣ６から送信されたものである。
【００２２】
制御対象装置１６は、サーボモータ、ステッピングモータなどのモータ１８およびモータを駆動するモータドライバ１７を含む。
【００２３】
モータ１８はモータドライバ１７から駆動電流を供給される。モータドライバ１７は、制御プログラム１５を実行するコントローラ１４から制御周期ごとに位置の指令値を与えられ、それに応じた駆動電流をモータ１８に供給する。モータ１８がサーボモータである場合、モータ１８にはエンコーダが備えられており、モータ１８の回転位置の実測値がエンコーダによって検出される。モータの回転位置の実測値は、モータドライバ１７がフィードバック制御に利用する。
【００２４】
なお、上記においては、ＣＤ−ＲＯＭ１２を介して、ＰＣ６にシミュレーションプログラムをインストールする場合について説明したが、特にこれに限られず、サーバ２からネットワーク４を介してシミュレーションプログラムをＰＣ６にダウンロードするようにしても良い。制御プログラムについても同様である。
【００２５】
図２は、この発明の実施の形態に従うＰＣ６のハードウェア構成を説明する図である。図２を参照して、この発明の実施の形態に従うＰＣ６は、処理手段であるＣＰＵ９０１と、記憶手段であるＲＯＭ９０２、ＲＡＭ９０３、およびＨＤＤ９０４と、データ読取部であるＣＤ−ＲＯＭ駆動装置９０８と、通信手段である通信ＩＦ９０９と、表示手段であるモニタ９０７と、入力手段であるキーボード９０５およびマウス９０６とを含む。なお、これらの部位は、内部バス９１０を介して互いに接続される。
【００２６】
ＨＤＤ９０４は、典型的には不揮発性の磁気メモリであり、ＣＤ−ＲＯＭ駆動装置９０８によりＣＤ−ＲＯＭ１２から読取られたシミュレーションプログラムを格納する。また、制御プログラム１５も格納している。
【００２７】
ＣＰＵ９０１は、ＨＤＤ９０４に格納されている、本実施の形態に従うコントローラサポートプログラム８をＲＡＭ９０３などに展開して実行する。
【００２８】
ＲＡＭ９０３は、揮発性メモリであり、ワークメモリとして使用される。ＲＯＭ９０２は、一般的に、オペレーティングシステム（ＯＳ：Operating System）等のプログラムを格納している。
【００２９】
通信ＩＦ９０９は、典型的にはイーサネット（登録商標）およびＵＳＢ（Universal Serial Bus）といった汎用的な通信プロトコルをサポートし、ネットワーク４を介してサーバ２との間でデータ通信を提供するとともに、コントローラ１４との間でデータ通信を提供する。
【００３０】
モニタ９０７は、液晶表示装置、ＣＲＴ（Cathode Ray Tube）、プラズマディスプレイ装置などで構成され、ＰＣ６による処理結果などを表示する。キーボード９０５は、ユーザによるキー入力を受付け、マウス９０６は、ユーザによるポインティング操作を受付ける。
【００３１】
図３は、ＣＰＵ９０１がコントローラサポートプログラム８を実行することにより実現される機能ブロックを説明する図である。図３を参照して、ここでは、ユーザインタフェース部８０２と、表示データ作成部８０４と、シミュレーション部８０６と、制御プログラム記憶部８０８と、制御プログラム編集部８１０と、コントローラインタフェース部８１２とが示されている。
【００３２】
ユーザインタフェース部８０２は、ＰＣ６のモニタ９０７に表示するウインドウ画面の内容を作成し、また、キーボード９０５やマウス９０６によるユーザの操作を受け付ける部位である。
【００３３】
制御プログラム編集部８１０は、ユーザに制御プログラムの入力および編集を行わせる。制御プログラムを実行するためにコンパイルが必要である場合はコンパイルも行う。作成された制御プログラムは、コントローラインタフェース部８１２を介してコントローラ１４に送られる。また、作成された制御プログラムは、ＨＤＤ９０４の所定領域である制御プログラム記憶部８０８に格納される。また、制御プログラム編集部８１０は、コントローラインタフェース部８１２を介してコントローラ１４に記憶されている制御プログラム１５を読み出して編集することもできる。
【００３４】
シミュレーション部８０６は、コントローラ１４のシミュレータである。シミュレーション部８０６は、制御プログラム記憶部８０８に記憶された制御プログラム１０に従ってコントローラ１４が制御プログラム１５を実行する動作をシミュレートし、コントローラ１４が制御周期ごとに出力するはずの位置の指令値を算出する。
【００３５】
また、シミュレーション部８０６は、外部からの信号が到来して制御プログラムの動作に影響を与える状態をシミュレートしたり、制御プログラム１５の実行自体によってコントローラ１４のメモリの記憶内容などのコントローラ１４の内部状態が変化して、その変化が制御プログラム１５の動作に影響を与える状態をシミュレートしたりすることができる。
【００３６】
また、シミュレーション部８０６は、ユーザインタフェース部８０２を介してシミュレーション実行に関するユーザの指示を受け付ける。すなわち、ユーザインタフェース部８０２は、シミュレーション部８０６に対するユーザの指示を受け付ける手段としても働く。
【００３７】
表示データ作成部８０４は、シミュレーション部８０６によって作成された実行結果データの時間的な変化を表示するための表示データを作成する。表示データ作成部８０４は、作成した表示データをユーザインタフェース部８０２に送ることによりＰＣ６のモニタ９０７に表示データをグラフや文字の態様や３Ｄ表現の態様で表示する。
【００３８】
図４は、この発明の実施の形態におけるシミュレーションの状況を示す第１の図である。図４を参照して、この実施の形態においては、実空間に対応する仮想的な空間である３Ｄ空間５００には、実空間のコンベアに対応する仮想コンベア５２０と、実空間の視覚センサに対応する仮想視覚センサ５１０と、実空間のワークに対応する仮想ワーク５４０とが配置される。
【００３９】
図３で示したシミュレーション部８０６は、３Ｄシミュレータと、視覚センサシミュレータと、機械制御シミュレータとを実行する。
【００４０】
３Ｄシミュレータは、データトレースで取得した結果に基づいて３Ｄ空間５００にオブジェクト（この実施の形態においては、仮想視覚センサ５１０、仮想コンベア５２０、および、仮想ワーク５４０）を表示する。
【００４１】
視覚センサシミュレータは、３Ｄ空間５００において取得されたオブジェクト（ここでは、仮想ワーク５４０）の仮想画像データ５７０に対して画像処理を行ない、画像処理での判定結果を３Ｄ空間５００における仮想的な機械である仮想機械（この実施の形態においては、仮想コンベア５２０）の制御に反映させる。
【００４２】
機械制御シミュレータは、３Ｄ空間５００における仮想機械を制御する。具体的には、機械制御シミュレータは、仮想機械への制御の指令値を計算して、その指令値に対する仮想機械の動きを計算する。
【００４３】
この仮想画像データ５７０と実画像データ５９０とをマッチングさせることで、３Ｄシミュレータ、視覚センサシミュレータおよび機械制御シミュレータの同期を取ることができる。
【００４４】
具体的には、仮想画像データ５７０と実画像データ５９０とのマッチングの手法としては、仮想画像データ５７０内のワーク（オブジェクト）の輪郭および実画像データ５９０内のワーク（オブジェクト）の輪郭を抽出する画像処理と、抽出した２組の輪郭をマッチングして一致しているかどうかを判別する処理とを組合せた手法がある。また、実画像データ５９０の色データを削減してグレースケール画像に変換する処理と、変換したグレースケール画像と仮想画像データ５７０との近似値を計算して一致しているかどうかを判別する処理とを組合せた手法がある。
【００４５】
また、仮想画像データ５７０と実画像データ５９０とのマッチングの結果を用いた３Ｄシミュレータ、視覚センサシミュレータおよび機械制御シミュレータの同期を取る手法としては、（１）機械制御シミュレータが、撮影指示を行ない、（２）撮影指示に応じて、視覚センサシミュレータが、３Ｄ空間５００の仮想画像データ５７０の取得要求を行ない、（３）取得要求に応じて、３Ｄシミュレータが、所定撮影位置の仮想画像データ５７０を送信し、（４）受信した仮想画像データ５７０に基づいて、視覚センサシミュレータが、仮想画像データ５７０と実画像データ５９０とのマッチングの結果を用いてワーク位置を認識し、認識したワーク位置を送信し、（５）受信したワーク位置に基づいて、機械制御シミュレータが、仮想機械を制御するといった連携を取ることによって同期を取る手法がある。
【００４６】
図５は、第１の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。図５を参照して、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１０１で、キャリブレーション用のサンプルオブジェクトを３Ｄ空間５００の所定キャリブレーション位置に仮想的に配置する。
【００４７】
シミュレーション部８０６は、視覚センサシミュレータを実行することによって、ステップＳ２０１で、３Ｄシミュレータによって３Ｄ空間５００の所定キャリブレーション位置に配置されたサンプルオブジェクトを仮想的に撮影してキャリブレーションを実行する。キャリブレーションにおいては、予め保持されている所定のサンプルオブジェクトの画像と同じ撮影画像が得られるか否かが確認され、同じ撮影画像が得られない場合は、同じ撮影画像が得られるように、得られる画像の範囲などを調整する。
【００４８】
その後、シミュレーション部８０６は、機械制御シミュレータを実行することによって、ステップＳ３１１で、ワークの初期位置を設定する。
【００４９】
図６は、第１の実施の形態におけるシミュレーションの３Ｄ空間５００を示す図である。図６を参照して、この実施の形態においては、仮想ワーク５４０Ａ〜５４０Ｄは、仮想コンベア５２０の上に置かれて、仮想コンベア５２０のベルトが駆動されることによって、図の左から右方向に移動し、実空間のロボットに対応する３Ｄ空間５００における仮想ロボット５３０Ａ，５３０Ｂによってハンドリングされる。また、仮想ワーク５４０Ａ〜５４０Ｄは、仮想視覚センサ５１０によって撮影される。
【００５０】
仮想ワーク５４０Ａ〜５４０Ｄの初期位置は、図において実線で描かれている仮想ワーク５４０Ａ〜５４０Ｄの左側の仮想コンベア５２０の上に設定される。
【００５１】
図５に戻って、次に、シミュレーション部８０６は、機械制御シミュレータを実行することによって、ステップＳ３１２で、制御プログラム１５の実行を開始することによって、仮想機械（ここでは、仮想コンベア５２０、仮想ロボット５３０Ａ，５３０Ｂ）の制御を開始する。
【００５２】
ステップＳ３１３では、シミュレーション部８０６は、ワークの位置に基づいて、シーケンス制御を実行する。ステップＳ３１４では、シミュレーション部８０６は、ワークの位置に基づいて、モーション制御を実行する。
【００５３】
そして、シミュレーション部８０６は、ステップＳ３１５で、モーション制御の結果としての機械およびワークの状態を計算し、ステップＳ３１６で、計算した機械およびワークの状態を、３Ｄシミュレータに送信する。
【００５４】
次いで、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１１２で、機械制御シミュレータから送信された機械およびワークの状態を受信し、ステップＳ１１３で、受信した状態の機械およびワークを、モニタ９０７の３Ｄ空間５００に表示させるために、必要な実行結果データが表示データ作成部８０４に受け渡される。
【００５５】
図６を再び参照して、シーケンス制御およびモーション制御が行なわれることで、仮想ワーク５４０Ａ〜５４０Ｄが、仮想コンベア５２０によって、右方向に運ばれるとともに、仮想ロボット５３０Ａ，５３０Ｂによって、仮想ワーク５４０Ａ〜５４０Ｄが持ち上げられて、別の場所に配置される。この状況が、図６で示されるように、モニタ９０７に表示される。
【００５６】
図５に戻って、次に、シミュレーション部８０６は、機械制御シミュレータを実行することによって、現時点が撮影タイミングであるか否かを判断する。図６においては、仮想コンベア５２０のエンコーダ軸の現在位置が指定位置に到達したか否かが判断されることによって、現時点が撮影タイミングであるか否かが判断される。あるいは、仮想的な光電管センサを別途設けて、仮想ワークが光軸を遮ったときが、撮影タイミングであることとしてもよい。
【００５７】
撮影タイミングでないと判断した場合（ステップＳ３１７でＮＯと判断した場合）、シミュレーション部８０６は、実行する処理をステップＳ３１３の処理に戻す。
【００５８】
一方、撮影タイミングであると判断した場合（ステップＳ３１７でＹＥＳと判断した場合）、シミュレーション部８０６は、ステップＳ３１８で、撮影指示を視覚センサシミュレータに送信する。
【００５９】
シミュレーション部８０６は、視覚センサシミュレータを実行することによって、ステップＳ２１２で、機械制御シミュレータから送信されてきた撮影指示を受信したか否かを判断する。受信していないと判断した場合（ステップＳ２１２でＮＯと判断した場合）、シミュレーション部８０６は、ステップＳ２１２の処理を繰返す。
【００６０】
一方、撮影指示を受信したと判断した場合（ステップＳ２１２でＹＥＳと判断した場合）、シミュレーション部８０６は、視覚センサシミュレータを実行することによって、ステップＳ２１３で、３Ｄ空間５００の仮想画像データ５７０を取得する画像取得要求を、３Ｄシミュレータに送信する。
【００６１】
シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１１４で、視覚センサシミュレータから送信されてきた画像取得要求を受信したか否かを判断する。受信していないと判断した場合（ステップＳ１１４でＮＯと判断した場合）、シミュレーション部８０６は、実行する処理をステップＳ１１２の処理に戻す。
【００６２】
一方、画像取得要求を受信したと判断した場合（ステップＳ１１４でＹＥＳと判断した場合）、シミュレーション部８０６は、ステップＳ１１５で、所定撮影位置の仮想画像データ５７０を視覚センサシミュレータに送信する。所定撮影位置とは、仮想視覚センサ５１０に対応する実空間の視覚センサが向けられている実空間の位置に対応する３Ｄ空間５００の位置である。ステップＳ１１５の後、シミュレーション部８０６は、実行する処理をステップＳ１１２の処理に戻す。
【００６３】
シミュレーション部８０６は、視覚センサシミュレータを実行することによって、ステップＳ２１４で、３Ｄシミュレータから送信されてきた所定撮影位置の仮想画像データ５７０を受信する。
【００６４】
次に、シミュレーション部８０６は、視覚センサシミュレータを実行することによって、ステップＳ２１５で、仮想画像データ５７０からワークの位置を認識し、ステップＳ２１６で、認識したワークの位置を機械制御シミュレータに送信し、実行する処理をステップＳ２１２の処理に戻す。
【００６５】
シミュレーション部８０６は、機械制御シミュレータを実行することによって、ステップＳ３１９で、視覚センサシミュレータから送信されてきたワークの位置を受信し、実行する処理をステップＳ３１３の処理に戻す。この受信されたワークの位置に基づいて、前述したステップＳ３１３およびステップＳ３１４の処理が実行される。
【００６６】
図６を再び参照して、たとえば、仮想視覚センサ５１０の仮想画像データ５７０から認識された仮想ワーク５４０Ａ〜５４０Ｄの位置に基づいて、仮想ロボット５３０Ａ，５３０Ｂは、仮想ワーク５４０Ａ〜５４０Ｄを持ち上げて、別の場所に配置する。
【００６７】
図７は、第１の実施の形態における仮想視覚センサ５１０により認識された仮想ワーク５４０Ａ〜５４０Ｄの位置に基づく制御を説明するための図である。図７を参照して、図５の３ＤシミュレータのステップＳ１１５が実行されることで、仮想視覚センサ５１０で撮影されたこととされる仮想画像データ５７０が作成される。この仮想画像データ５７０には、仮想コンベア５２０の上に仮想ワーク５４０Ａ〜５４０Ｄが配置されている状態が撮影されている。
【００６８】
そして、図５の視覚センサシミュレータのステップＳ２１５が実行されることで、仮想画像データ５７０が認識され、仮想ワーク５４０Ａ〜５４０Ｄの位置が特定される。
【００６９】
次に、図５の機械制御シミュレータのステップＳ３１３，ステップＳ３１４が実行されることで、仮想ロボット５３０Ａ，５３０Ｂへの指令値が計算され、モーション制御が実行される。
【００７０】
次いで、図５の３ＤシミュレータのステップＳ１１３が実行されることで、仮想ロボット５３０Ａ，５３０Ｂによって仮想ワーク５４０Ａ〜５４０Ｄがハンドリングされている状況が、モニタ９０７の３Ｄ空間５００に表示される。
【００７１】
［第２の実施の形態］
図８は、第２の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。図８を参照して、第２の実施の形態においては、第１の実施の形態の図５で説明したステップＳ１０１の後に、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１０２で、仮想視覚センサ５１０に対応する実空間の視覚センサで撮影された所定撮影位置での実画像データ５９０を読込む。
【００７２】
次に、シミュレーション部８０６は、ステップＳ１０３で、読込んだ実画像データ５９０から所定撮影位置（ここでは、３Ｄ空間５００においては、仮想視覚センサ５１０が向けられている位置、実空間においては、視覚センサが向けられている位置）でのワークの位置を特定する。
【００７３】
図９は、第２の実施の形態におけるシミュレーションの３Ｄ空間５００を示す図である。図９を参照して、仮想視覚センサ５１０の所定撮影位置（図では破線の平行四辺形で囲まれている部分）の仮想画像データ５７０に対応する実画像データ５９０からワークの位置が特定される。
【００７４】
図８に戻って、シミュレーション部８０６は、ステップＳ１０４で、ステップＳ１０３で特定されたワークの位置から、ワークの初期位置を算出する。ワークの初期位置は、実画像データ５９０から特定された位置であってもよいし、実画像データ５９０から特定された位置よりも前の位置であってもよい。
【００７５】
次いで、シミュレーション部８０６は、ステップＳ１０５で、ステップＳ１０４で算出されたワークの初期位置を、機械制御シミュレータに送信する。ステップＳ１０５の後のステップＳ１１２以降の処理については、第１の実施の形態の図５の処理と同様であるので重複する説明は繰返さない。
【００７６】
次に、シミュレーション部８０６は、機械制御シミュレータを実行することによって、ステップＳ３０１で、３Ｄシミュレータから送信されてきたワークの初期位置を受信し、ステップＳ３１１Ａで、受信したワークの初期位置を、シミュレーションをするワークの初期位置として設定する。ステップＳ３１１Ａの後のステップＳ３１２以降の処理については、第１の実施の形態の図５の処理と同様であるので重複する説明は繰返さない。
【００７７】
これにより、実画像データ５９０に基づく位置からのシミュレーションを実行することで、実空間での状況を再現することができる。また、ステップＳ１０２で読込まれる実画像データ５９０が、異常発生時の実画像データ５９０であれば、シミュレーションで、異常発生時の状態を再現することができる。たとえば、ワークを持上げるのに失敗した場合の実画像データ５９０を読込ませた場合は、シミュレーションで、ワークの持上げを失敗する状況を再現することができる。
【００７８】
図１０は、第２の実施の形態における仮想視覚センサ５１０により認識された仮想ワーク５４０Ａ〜５４０Ｄの位置に基づく制御を説明するための図である。図１０を参照して、図８の３ＤシミュレータのステップＳ１０３，ステップＳ１０４が実行されることで、実画像データ５９０のワークの輪郭抽出により、ワークの位置や形状などのワークモデルが特定され生成される。その後の流れは、図７で説明した第１の実施の形態における流れと同様であるので、重複する説明は繰返さない。
【００７９】
［第３の実施の形態］
図１１は、第３の実施の形態におけるシミュレーションの制御の流れを示すフローチャートである。図１１を参照して、第３の実施の形態においては、第１の実施の形態の図５で説明したステップＳ１１３の後に、シミュレーション部８０６は、３Ｄシミュレータを実行することによって、ステップＳ１２１で、実空間の視覚センサが向けられている位置に対応する３Ｄ空間５００の所定撮影位置の仮想画像データ５７０に近似する画像データに対応する実画像データ５９０をＨＤＤ９０４から読出す。なお、ＨＤＤ９０４には、３Ｄ空間５００の仮想画像データ５７０とそれに対応する実空間の実画像データ５９０とが対応付けられて予め記憶されている。
【００８０】
次に、シミュレーション部８０６は、ステップＳ１２２で、ステップＳ１２１で読出した実画像データ５９０で示される実画像を、モニタ９０７に表示させるために、必要な実画像データ５９０が表示データ作成部８０４に受け渡される。このステップＳ１２２を含むステップＳ１１２からステップＳ１１５のループ処理は、ごく短い周期（たとえば、数ミリ秒から数十ミリ秒単位）で実行されるため、実画像は、動画としてモニタ９０７に表示される。ステップＳ１２２の後のステップＳ１１４以降の処理については、第１の実施の形態の図５の処理と同様であるので重複する説明は繰返さない。
【００８１】
図１２は、第３の実施の形態におけるシミュレーションの３Ｄ空間５００を示す図である。図１２を参照して、図で示すように、３Ｄ空間５００の仮想画像データ５７０Ａ〜５７０Ｃが、その仮想画像データ５７０Ｃ〜５７０Ｃに近似する画像データと対応して予め記憶されている実画像データ５９０Ａ〜５９０Ｃに置換えられて、実画像の動画として表示される。
【００８２】
［まとめ］
（１）  以上説明したように、上述した実施の形態に係るシミュレーション装置であるＰＣ６は、対象物（たとえば、仮想ワーク５４０，５４０Ａ〜５４０Ｄ）を扱う機械（たとえば、仮想コンベア５２０、仮想ロボット５３０，５３０Ａ，５３０Ｂ）の動きを制御するコントローラ（たとえば、コントローラ１４）において実行される制御プログラム（たとえば、制御プログラム１０，制御プログラム１５）のシミュレーションを実行する制御部（たとえば、ＣＰＵ９０１）を有する装置である。
【００８３】
制御部は、第１の計算部と、第２の計算部と、第３の計算部と、仮想撮影部とを含む。第１の計算部は、制御プログラムにしたがって、仮想空間（たとえば、３Ｄ空間５００）において機械に対応する仮想機械（たとえば、３Ｄ空間５００における仮想コンベア５２０、仮想ロボット５３０，５３０Ａ，５３０Ｂ）によって扱われ対象物に対応する仮想対象物（たとえば、３Ｄ空間におけるワーク）のモデルデータに基づいて、仮想機械を動かせるための指令値を計算する部分である（たとえば、図５のステップＳ３１３，ステップＳ３１４が実行されることでＣＰＵ９０１に形成される部分である）。
【００８４】
第２の計算部は、第１の計算部によって計算された指令値にしたがった仮想機械の動きを計算する部分である（たとえば、図５のステップＳ３１５が実行されることでＣＰＵ９０１に形成される部分である）。
【００８５】
第３の計算部は、第２の計算部によって計算された仮想機械の動きによって動かされる仮想対象物の動きを計算する部分である（たとえば、図５のステップＳ３１５が実行されることでＣＰＵ９０１に形成される部分である）。
【００８６】
仮想撮影部は、第２の計算部によって計算された仮想機械の動き、または、第３の計算部によって計算された仮想対象物の動きを、仮想的に撮影した場合に得られる所定撮影位置の画像を生成する部分である（たとえば、仮想視覚センサ５１０および図５のステップＳ１１５が実行されることでＣＰＵ９０１に形成される部分である）。
【００８７】
第１の計算部は、仮想撮影部によって生成された仮想空間画像にさらに基づいて指令値を計算する（たとえば、ステップＳ２１５で所定撮影位置の仮想画像データ５７０からワークの位置が認識され、ステップＳ３１３，ステップＳ３１４で、ワークの位置に基づいて機械の制御が行なわれ、機械への指令値が計算される）。
【００８８】
このように、制御プログラムにしたがって、仮想空間において機械に対応する仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータに基づいて、仮想機械を動かせるための指令値が計算され、計算された指令値にしたがった仮想機械の動きが計算され、計算された仮想機械の動きによって動かされる仮想対象物の動きが計算され、計算された仮想機械の動き、または、仮想対象物の動きを、仮想的に撮影した場合に得られる仮想空間画像が生成され、生成された仮想空間画像にさらに基づいて、指令値が計算される。
【００８９】
これによれば、実空間の機械に対応する仮想空間における仮想機械が、実空間の視覚センサによって撮影される実空間画像に対応する仮想撮影部によって生成された仮想空間画像に基づいて制御される。仮想撮影部に対応する実空間の視覚センサを含めた機械システムの統合シミュレーションを実現できる。また、視覚センサを用いて機械を制御する場合のテストをすることができる。
【００９０】
（２）  また、第１の計算部、第２の計算部、第３の計算部、および、仮想撮影部は、同一の時間軸にしたがって、それぞれ、指令値、仮想機械の動き、および、仮想対象物の動きを計算し、仮想空間画像を生成する（たとえば、図５の機械制御シミュレータ、３Ｄシミュレータ、および、視覚センサシミュレータは、それぞれ、データをやり取りしながら、それぞれのループ処理を実行するので、それぞれのやり取りのタイミングで同期が取られ、共通の時間軸にしたがって動作する）。これによれば、同期性を持った統合シミュレーションを実現できる。
【００９１】
（３）  また、制御部は、さらに、特定部と、第４の計算部とを含む。特定部は、仮想撮影部に対応する実空間の視覚センサによって撮影された実空間画像から対象物または機械の状態を特定する部分である（たとえば、図８のステップＳ１０３を実行することでＣＰＵ９０１に形成される部分である）。
【００９２】
第４の計算部は、特定部によって特定された状態から対象物または機械の初期状態を計算する部分である（たとえば、図８のステップＳ１０４を実行することでＣＰＵ９０１に形成される部分である）。
【００９３】
第１の計算部は、第４の計算部によって計算された初期状態をシミュレーションの開始時の状態として指令値を計算する（たとえば、図８のステップＳ３１１Ａで初期値が設定されて、図５のステップＳ３１３，ステップＳ３１４で機械の制御が行なわれ、機械への指令値が計算される）。
【００９４】
これによれば、実空間での状態を再現することができる。実空間で異常が発生した場合には異常発生状態の再現をすることができる。
【００９５】
（４）  また、シミュレーション装置は、記憶部（たとえば、ＲＡＭ９０３、ＨＤＤ９０４）と、表示部（たとえば、モニタ９０７）とをさらに備える。記憶部は、仮想撮影部に対応する実空間の視覚センサによって撮影された実空間画像と当該実空間画像に対応する仮想空間画像とを対応付けて予め記憶する画像記憶部（たとえば、３Ｄ空間５００の仮想画像データ５７０とそれに対応する実空間の実画像データ５９０とが対応付けられて予め記憶される記憶領域）を含む。
【００９６】
制御部は、さらに、表示制御部を含む。表示制御部は、仮想撮影部によって生成された仮想空間画像に対応して画像記憶部に記憶されている実空間画像を表示部に表示させる部分である（たとえば、図１１のステップＳ１２１，ステップＳ１２２を実行することでＣＰＵ９０１に形成される部分である）。
【００９７】
これによれば、仮想空間での対象物または機械の動きを実空間での対象物または機械のように表示することができる。
【００９８】
［変形例］
（１）  前述した実施の形態においては、実空間での視覚センサで撮影された実画像データ５９０を用いた機械の制御のシミュレーションとして、仮想空間である３Ｄ空間５００での仮想視覚センサ５１０の仮想画像データ５７０を用いた仮想機械の制御を行なうようにした。この場合に、仮想視覚センサ５１０で、仮想対象物である仮想ワーク５４０，５４０Ａ〜５４０Ｄを撮影することとし、撮影した仮想対象物の仮想画像データ５７０に基づいて仮想機械としての仮想コンベア５２０および仮想ロボット５３０Ａ，５３０Ｂを制御するようにした。
【００９９】
しかし、これに限定されず、仮想視覚センサ５１０で仮想コンベア５２０または仮想ロボット５３０Ａ，５３０Ｂなどの仮想機械を撮影することとし、撮影した仮想機械の仮想画像データ５７０に基づいて仮想機械を制御するようにしてもよい。
【０１００】
また、仮想視覚センサ５１０で仮想機械および仮想対象物の両方を撮影することとし、撮影した仮想機械および仮想対象物の仮想画像データ５７０に基づいて仮想機械を制御するようにしてもよい。
【０１０１】
（２）  前述した実施の形態においては、シミュレーション部８０６が実行するシミュレータが、３Ｄシミュレータ、視覚センサシミュレータ、および、機械制御シミュレータの３つに分かれている場合について説明した。
【０１０２】
しかし、これに限定されず、これらの３つのうちのいずれか２つが統合されていてもよいし、３つが統合されていてもよい。このようにすれば、それぞれのシミュレータ間でのデータのやり取りを行なわずに済むので、効率よくシミュレーションを実行することができる。
【０１０３】
（３）  前述した実施の形態においては、実画像データ５９０を扱う視覚センサに対応する仮想視覚センサ５１０を用いたシミュレーションを行なうことを説明した。しかし、これに限定されず、対象物または機械の状態を認識可能なセンサであれば、視覚センサに限定されず、他のセンサ、たとえば、超音波センサであってもよいし、光センサであってもよいし、赤外線センサであってもよいし、温度センサであってもよいし、変位センサであってもよい。
【０１０４】
（４）  前述した実施の形態においては、シミュレーション装置の発明として説明した。しかし、これに限定されず、シミュレーション装置で行なわれるシミュレーション方法の発明として捉えることができるし、シミュレーション装置で実行されるシミュレーションプログラムの発明として捉えることができる。
【０１０５】
（５）  前述した第３の実施の形態においては、３Ｄ空間５００の仮想画像データ５７０とそれに対応する実空間の実画像データ５９０とが対応付けられて予め記憶されていることとし、図１１のステップＳ１２１で、実空間の視覚センサが向けられている位置に対応する３Ｄ空間５００の所定撮影位置の仮想画像データ５７０に近似する画像データに対応する実画像データ５９０をＨＤＤ９０４から読出すようにした。
【０１０６】
しかし、これに限定されず、実空間の視覚センサで撮影した実画像データ５９０をそのままＨＤＤ９０４に保存しておき、シミュレーション実行時に仮想視覚センサ５１０で撮影された仮想画像データ５７０とマッチングする実画像データ５９０をＨＤＤ９０４からリアルタイムで検索するようにしてもよい。マッチングの手法としては、第１の実施の形態の図４で説明した手法を用いることができる。
【０１０７】
（６）  今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０１０８】
２  サーバ、４  ネットワーク、８  コントローラサポートプログラム、１０，１５  制御プログラム、１２  ＣＤ−ＲＯＭ、１４  コントローラ、１６  制御対象装置、１７  モータドライバ、１８  モータ、５００  ３Ｄ空間、５１０  仮想視覚センサ、５２０  仮想コンベア、５３０，５３０Ａ，５３０Ｂ  仮想ロボット、５４０，５４０Ａ〜５４０Ｄ  仮想ワーク、５７０，５７０Ａ〜５７０Ｃ  仮想画像データ、５９０，５９０Ａ〜５９０Ｃ  実画像データ、８０２  ユーザインタフェース部、８０４  表示データ作成部、８０６  シミュレーション部、８０８  制御プログラム記憶部、８１０  制御プログラム編集部、８１２  コントローラインタフェース部、９０１  ＣＰＵ、９０２  ＲＯＭ、９０３  ＲＡＭ、９０４  ＨＤＤ、９０５  キーボード、９０６  マウス、９０７  モニタ、９０８  ＣＤ−ＲＯＭ駆動装置、９０９  通信ＩＦ、９１０  内部バス。
【図１】
0005838873.tif 000002
【図２】
0005838873.tif 000003
【図３】
0005838873.tif 000004
【図５】
0005838873.tif 000005
【図６】
0005838873.tif 000006
【図７】
0005838873.tif 000007
【図８】
0005838873.tif 000008
【図９】
0005838873.tif 000009
【図１１】
0005838873.tif 000010
【図４】
0005838873.tif 000011
【図１０】
0005838873.tif 000012
【図１２】
0005838873.tif 000013