(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0017】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【0018】
[実施の形態1]
<制御システムの全体構成>
図1は、実施の形態1に従う制御システムの構成を説明するための図である。
図1を参照して、実施の形態1に従う制御システムは、サーバ2と、ネットワーク4と、PC(Personal Computer)6と、コントローラ14と、制御対象装置16とを含む。
【0019】
サーバ2は、ネットワーク4を介してPC6と接続されている。PC6は、制御対象装置16を制御するコントローラ14と通信可能に構成されている。
【0020】
PC6は、一実施形態におけるシミュレーション装置に相当する。PC6には、シミュレーションプログラムを含むコントローラサポートプログラム8がインストールされており、また、ユーザが作成した制御プログラム10が記憶されている。CD−ROM(Compact Disc-Read Only Memory)12は、コントローラサポートプログラム8を格納している。PC6にインストールされているコントローラサポートプログラム8は、このCD−ROM12からインストールされたものである。
【0021】
コントローラ14は、制御対象装置16の動きを制御する。コントローラ14は、一例として、PLC(Programmable Logic Controller)が用いられる。このPLCには、いわゆるモーションコントロール機能を含む。コントローラ14は、制御対象装置16に対する制御内容を規定する制御プログラム15を記憶している。コントローラ14は、制御周期ごとに制御プログラム15を一巡実行する。ここで、コントローラ14に記憶されている制御プログラム15は、PC6に記憶されている制御プログラム10をコピーしたコピーデータであり、PC6から送信されたものである。
【0022】
制御対象装置16は、サーボモータ、ステッピングモータなどのモータ18およびモータを駆動するモータドライバ17を含む。
【0023】
モータ18にはモータドライバ17から駆動電流が供給される。モータドライバ17は、制御プログラム15を実行するコントローラ14から制御周期ごとに位置の指令値を与えられ、それに応じた駆動電流をモータ18に供給する。モータ18が、例えば、サーボモータである場合、モータ18にはエンコーダが備えられており、モータ18の回転位置の実測値がエンコーダによって検出される。モータの回転位置の実測値は、モータドライバ17がフィードバック制御に利用する。
【0024】
なお、上記においては、CD−ROM12を介して、PC6にシミュレーションプログラムがインストールされる場合について説明したが、インストールの態様は、特にこれに限られない。例えば、サーバ2からネットワーク4を介してシミュレーションプログラムがPC6にダウンロードされるようにしても良い。これは、制御プログラムについても同様である。
【0025】
<PCのハードウェア構成>
図2は、実施の形態1に従うPC6のハードウェア構成を説明するための図である。
図2を参照して、PC6は、処理手段であるCPU901と、記憶手段であるROM902、RAM903、およびHDD904と、データ読取部であるCD−ROM駆動装置908と、通信手段である通信IF909と、表示手段であるモニタ907と、入力手段であるキーボード905およびマウス906とを含む。なお、これらの部位は、内部バス910を介して互いに接続される。
【0026】
CPU901は、ROM902、RAM903、HDD904に記憶されているプログラムおよびデータを読み出し、プログラムを実行することによって、PC6の各部を制御する。CPU901は、典型的にはマイクロプロセッサである。なお、当該ハードウェアは、CPU以外のFPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)およびその他の演算機能を有する回路などであってもよい。
【0027】
HDD904は、典型的には不揮発性の磁気メモリであり、CD−ROM駆動装置908によりCD−ROM12から読取られたシミュレーションプログラムを格納する。また、HDD904は、制御プログラム15も格納している。
【0028】
なお、シミュレーションプログラムがCD−ROM12以外の他の記憶媒体に格納されており、CPU901が記憶媒体に対応するメモリインターフェイス(IF)を介して当該シミュレーションプログラムを読み取る形態であってもよい。例えば、DVD(Digital Versatile Disk)−ROM駆動装置を介してDVD−ROMから当該シミュレーションプログラムが読み取られる場合であってもよいし、USB(Universal Serial Bus)インターフェイスを介してUSBメモリから当該シミュレーションプログラムが読み取られる場合であってもよい。
【0029】
CPU901は、HDD904に格納されている、コントローラサポートプログラム8をRAM903などに展開して実行する。
【0030】
RAM903は、揮発性メモリであり、ワークメモリとしての機能を有する。ROM902は、一般的に、オペレーティングシステム(OS)等のプログラムを格納している。
【0031】
通信インターフェイス(IF)909は、典型的にはイーサネット(登録商標)およびUSBといった汎用的な通信プロトコルをサポートし、ネットワーク4を介してサーバ2との間でデータ通信を提供するとともに、コントローラ14との間でデータ通信を提供する。
【0032】
モニタ907は、液晶表示装置、CRT(Cathode Ray Tube)、有機EL(Electro Luminescence)装置、プラズマディスプレイ装置などで構成され、PC6による処理結果などを表示する。キーボード905は、ユーザによるキー入力を受付け、マウス906は、ユーザによるポインティング操作を受付ける。
【0033】
<機能構成>
図3は、CPU901がコントローラサポートプログラム8を実行することにより実現される機能ブロック図である。
図3を参照して、ここでは、ユーザインターフェイス部802と、表示データ作成部804と、シミュレーション部806と、制御プログラム記憶部808と、制御プログラム編集部810と、コントローラインターフェイス部812とが示されている。
【0034】
ユーザインターフェイス部802は、PC6のモニタ907に表示するウインドウ画面の内容を作成し、また、キーボード905やマウス906によるユーザの操作を受け付ける。
【0035】
制御プログラム編集部810は、ユーザによる制御プログラムの入力および編集を受け付ける。制御プログラムを実行するためにコンパイルが必要である場合はコンパイルも行う。作成された制御プログラムは、コントローラインターフェイス部812を介してコントローラ14に送られる。また、作成された制御プログラムは、HDD904の所定の領域である制御プログラム記憶部808に格納される。また、制御プログラム編集部810は、コントローラインターフェイス部812を介してコントローラ14に記憶されている制御プログラム15を読み出して編集することもできる。
【0036】
シミュレーション部806は、コントローラ14のシミュレータである。シミュレーション部806は、制御プログラム記憶部808に記憶された制御プログラム10に従ってコントローラ14が制御プログラム15を実行する動作をシミュレートし、コントローラ14が制御周期ごとに出力するはずの位置の指令値を算出する。
【0037】
また、シミュレーション部806は、外部信号が到来して制御プログラム15の動作に影響を与える状態をシミュレートしたり、制御プログラム15が実行されることによってコントローラ14のメモリの記憶内容などのコントローラ14の内部状態が変化して、その変化が制御プログラム15の動作に影響を与える状態をシミュレートしたりすることができる。
【0038】
また、シミュレーション部806は、ユーザインターフェイス部802を介してシミュレーション実行に関するユーザの指示を受け付ける。すなわち、ユーザインターフェイス部802は、シミュレーション部806に対するユーザの指示を受け付ける手段としても機能する。
【0039】
表示データ作成部804は、シミュレーション部806によって作成された実行結果データの時間的な変化を表示するための表示データを作成する。表示データ作成部804は、作成した表示データをユーザインターフェイス部802に送ることによりPC6のモニタ907に表示データをグラフや文字の態様や3D表現の態様で表示する。
【0040】
<シミュレーション部の機能構成>
図4は、実施の形態1に従うシミュレーション部806の機能を説明するための詳細なブロック図である。
【0041】
シミュレーション制御部820は、制御プログラム記憶部808から制御プログラム10を読み込み、制御プログラム10のシミュレーションを実行し、または、途中からシミュレーションを再実行する。それに伴って、シミュレーション制御部820は、実行結果データ記憶部830とモデルデータ記憶部840との間の流れを制御する。実行結果データ記憶部830およびモデルデータ記憶部840は、それぞれRAM903あるいはHDD904で実現される機能である。
【0042】
また、シミュレーション制御部820は、主な機能として、動作制御部822と、判断部824と、追従制御部826とを含む。なお、動作制御部822は、シミュレーション部806が、後述する機械制御シミュレータを実行することによって実現される機能である。また、判断部824および追従制御部826は、シミュレーション部806が後述する3Dシミュレータを実行することによって実現される機能である。
【0043】
動作制御部822は、制御プログラム10に従って、仮想空間において機械に対応する仮想機械を動かすための動作指令に基づいて仮想機械の動きを制御する。
【0044】
判断部824は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間(実施の形態1においては後述する把持空間)と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する。より具体的には、判断部824は、作用空間を複数の単位領域に分割し、分割された各単位領域が仮想対象物を含む領域であるか否かを判定する。そして、判断部824は、仮想対象物を含む領域であると判定された単位領域の個数に基づいて作用空間の体積のうち、仮想対象物が占める部分の体積を計算する。なお、作用空間とは、機械が対象物に対して作用することが可能な空間である。
【0045】
追従制御部826は、当該体積が基準値以上であるとの判断結果に基づいて、仮想対象物を当該動作指令に基づく仮想機械の動きに追従させる。
【0046】
実行結果データ記憶部830は、表示に用いる実行結果データを記憶する。
モデルデータ記憶部840は、実空間のロボット、ワーク、コンベア、スタンド等の物体をモデル化したモデルデータを格納する。より具体的には、モデルデータ記憶部840は、実空間の物体に対応する仮想空間における仮想物体の形状、動作の特徴、機能、性能、位置、向き等に関するモデルデータを格納している。
【0047】
<シミュレーション制御の流れ>
(概略)
図5は、実施の形態1に従うシミュレーションの3D空間を示す図である。
図5を参照して、実施の形態1においては、実空間に対応する仮想空間である3D空間には、実空間のロボットに対応する仮想ロボット500と、実空間のワーク(対象物)に対応する仮想ワーク(仮想対象物)530と、実空間のワークを載せるためのスタンドに対応する仮想スタンド550とが配置される。なお、典型的には、ロボットは、ワークを把持する把持機構を有するロボットハンドである。
【0048】
シミュレーション部806は、仮想機械と仮想対象物のモデルデータを参照しながら、3Dシミュレータと、機械制御シミュレータとを実行する。
【0049】
3Dシミュレータは、データトレースで取得した結果に基づいて3D空間にオブジェクト(実施の形態1においては、仮想ロボット500、仮想ワーク530および仮想スタンド550)を表示する。また、3Dシミュレータは、仮想ロボット500によって扱われる仮想ワーク530を仮想ロボット500の動きに追従させる追従条件が成立したか否かを判断する。換言すると、3Dシミュレータは、仮想ロボット500によって扱われる仮想ワーク530を、仮想ロボット500の動きに追従させるか否かを判断する。3Dシミュレータは、追従条件が成立した場合には、仮想ロボット500の動きに仮想ワーク530を追従させる追従動作制御を開始する。追従動作制御が開始されている場合には、3Dシミュレータは、仮想ロボット500に追従させる仮想ワーク530の状態を計算する。
【0050】
機械制御シミュレータは、3D空間における仮想機械(実施の形態1においては、仮想ロボット500、仮想スタンド550)を制御する。より具体的には、機械制御シミュレータは、仮想機械への制御の指令値を計算して、その指令値に対する仮想機械の動きを計算する。機械制御シミュレータは、例えば、ユーザインターフェイス部802を介したユーザからの動作指令(または、プログラムに従って出力される動作指令)に基づいて仮想機械の動きを計算する。
【0051】
実施の形態1に従うシミュレーションの制御は、3Dシミュレータおよび機械制御シミュレータが、概略として以下のような処理を実行することによって実現される。まず、(1)機械制御シミュレータが、計算した仮想機械、仮想対象物の状態を3Dシミュレータに送信する。次に、(2)3Dシミュレータが、当該受信した仮想機械の状態および仮想対象物の状態に基づいて仮想機械および仮想対象物を3D空間に表示する。次に、(3)3Dシミュレータが、仮想機械に仮想対象物を追従させる追従条件が成立するか否かを判断し、追従条件が成立したと判断した場合は、仮想機械の動きに仮想対象物を追従させる追従動作制御を開始する。
【0052】
ここで、実施の形態1に従うシミュレーションの状況を時系列で説明する。
図6は、実施の形態1に従うシミュレーションの状況を示す図である。
【0053】
図6を参照して、仮想ロボット500は、動作指令に従って、仮想スタンド550の上に置かれている仮想ワーク530を把持するために図の下方向に移動していく(
図6の状態(a))。
図6の状態(a)から一定時間が経過すると、仮想ロボット500が仮想ワーク530を把持するためにさらに仮想ワーク530に接近する(
図6の状態(b))。そして、
図6の状態(b)から一定時間が経過すると、仮想ロボット500の把持用のアームで挟まれた(対象物を把持する)把持空間と、仮想ワーク530とが重なる状態となる。ここで、把持空間の体積のうち、仮想ワーク530によって占められる体積が予め定められた基準値以上(例えば、5割以上)となった場合に、仮想ロボット500の動きに仮想ワーク530を追従させる追従条件が成立する。そして、仮想ロボット500が図の上方向に移動すると、仮想ワーク530は仮想ロボット500の動きに追従して図の矢印(上)方向に移動していく(
図6の状態(c))。仮想ロボット500が仮想ワーク530を把持していることを示すシミュレーション結果が表示される。なお、仮想ロボット500の把持空間は、実空間のロボットの把持空間に対応するように予め設定されている。
【0054】
(フローチャート)
図7は、実施の形態1に従うシミュレーションの制御の流れを示すフローチャートである。なお、
図7に示す各ステップは、基本的には、CPU901が、制御プログラム10のシミュレーションを実行することで実現される。
【0055】
図7を参照して、シミュレーション部806は、機械制御シミュレータを実行することによって、仮想ワーク(
図6における仮想ワーク530)の初期位置を設定する(ステップS302)。
図6を例に説明すると、仮想ワーク530の初期位置は、仮想スタンド550の中心近傍に設定される。
【0056】
次に、シミュレーション部806は、機械制御シミュレータを実行することによって、制御プログラム10に従って、仮想機械(
図6における仮想ロボット500)の制御を開始する(ステップS304)。
【0057】
シミュレーション部806は、機械制御シミュレータを実行することによって、仮想機械に対する動作指令に基づいて、シーケンス制御を実行する(ステップS306)。続いて、シミュレーション部806は、機械制御シミュレータを実行することによって、仮想機械に対する動作指令に基づいて、モーション制御を実行する(ステップS308)。より具体的には、シミュレーション部806は、ユーザインターフェイス部802を介したユーザからの動作指令に基づく指令値を計算する。
【0058】
そして、シミュレーション部806は、モーション制御の結果としての仮想機械および仮想ワークの状態を計算し(ステップS310)、計算した仮想機械および仮想ワークの状態を示す情報を3Dシミュレータに送信する(ステップS312)。そして、シミュレーション部806は、機械制御シミュレータを実行することによって、ステップS306からの処理を繰り返す。
【0059】
次に、シミュレーション部806は、3Dシミュレータを実行することによって、機械制御シミュレータから送信された仮想機械および仮想ワークの状態を示す情報を受信する(ステップS110)。
【0060】
次に、シミュレーション部806は、3Dシミュレータを実行することによって、仮想機械の動きに仮想ワークを追従させる追従動作制御を実行しているか否かを判断する(ステップS111)。より具体的には、シミュレーション部806は、後述するステップS120における追従動作制御が開始されているか否かを判断する。
【0061】
追従動作制御が開始されていない場合には(ステップS111においてNOの場合)、シミュレーション部806は、後述するステップS114からの処理を実行する。これに対して、追従動作制御が開始されている場合には(ステップS111においてYESの場合)、シミュレーション部806は、3Dシミュレータを実行することによって、仮想機械に追従させる仮想ワークの状態(仮想機械の動きによって動かされる仮想ワークの状態)を計算する(ステップS112)。
【0062】
そして、仮想機械の状態および仮想ワークの状態に基づいて、仮想機械および仮想ワークをモニタ907の3D空間に表示させる(ステップS114)。このとき、当該表示に必要な実行結果データが表示データ作成部804に受け渡される。
【0063】
上述したシーケンス制御およびモーション制御などが行なわれることによって、
図6に示したような各状態がモニタ907に表示される。より具体的には、仮想ロボット500に仮想ワークを追従させる追従動作制御が開始されていない場合には(ステップS111においてNOの場合)、仮想スタンド550の中心付近に配置されている仮想ワーク530に対して、仮想ロボット500が図の下方向に移動している状態(
図6の状態(a))や、仮想ロボット500が仮想ワーク530に接近した状態(
図6の状態(b))がモニタ907に表示される。すなわち、仮想ワーク530が仮想ロボット500に追従していない状態がモニタ907に表示される。
【0064】
これに対して、後述するステップS120で追従動作制御が開始されている場合には(ステップS111においてYESの場合)、仮想ワーク530が仮想ロボット500に追従している(把持されている)状態(
図6の状態(c))がモニタ907に表示される。
【0065】
図7を再び参照して、シミュレーション部806は、3Dシミュレータを実行することによって、仮想機械の動きに仮想ワークを追従させるための追従条件が成立したか否かを判定する処理を実行する(ステップS116)。
【0066】
図8は、実施の形態1に従う追従条件の判定処理の流れを示すフローチャートである。ここでは、
図6で示した仮想ロボット500の動きに仮想ワーク530を追従させる際の追従条件について説明する。
【0067】
図8を参照して、シミュレーション部806は、3Dシミュレータを実行することによって、仮想ロボット500の把持用の2つのアームで挟まれた把持空間を予め定められた大きさの単位領域(例えば、直方体)に分割する(ステップS502)。
【0068】
図9は、実施の形態1に従う仮想ロボット500の把持空間の分割方式を説明するための図である。
【0069】
図9を参照して、シミュレーション部806は、仮想ロボット500のモデルデータに基づいて、仮想ロボット500の把持空間を抽出する。そして、シミュレーション部806は、抽出した把持空間を単位領域に分割する。この例は、把持空間が、75個の単位領域に分割される場合について示している。
【0070】
再び、
図8を参照して、シミュレーション部806は、仮想ワーク530を含む単位領域の個数を示す変数tを0にセットする(ステップS504)。すなわち、変数tは、把持空間の体積のうち、仮想ワーク530が占める(重なる)部分の体積を示している。したがって、把持空間が全て仮想ワーク530によって占められている場合には、変数tの値は75となり、把持空間に仮想ワーク530が存在しない(把持空間に仮想ワーク530が全く含まれていない)場合には、変数tの値は0となる。
【0071】
次に、シミュレーション部806は、記憶手段(例えば、RAM903)に格納された変数nに1をセットする(ステップS505)。実施の形態1では、RAM903には、変数Nとして、把持空間を分割した単位領域の個数が保持されている。換言すると、変数Nは、把持空間の全体積を示している。
【0072】
次に、シミュレーション部806は、n番目の単位領域が、仮想ワーク530を含む領域であるか否か(仮想ワーク530によって占められているか否か)を判断する(ステップS506)。
【0073】
図10は、
図8に示すステップS506の判断処理方式を説明するための図である。
図10を参照して、シミュレーション部806は、例えば、8番目(n=8)の単位領域は、仮想ワーク530を含む領域であると判定し(判定YES)、23番目(n=23)の単位領域は、仮想ワーク530を含む領域ではないと判定する(判定NO)。
【0074】
再び、
図8を参照して、n番目の単位領域が仮想ワーク530を含む領域ではない場合には(ステップS506においてNO)、シミュレーション部806は、ステップS510の処理を実行する。これに対して、n番目の単位領域が仮想ワーク530を含む領域である場合には(ステップS506においてYES)、シミュレーション部806は、変数tの値をインクリメントして(ステップS508)、ステップS510の処理を実行する。
【0075】
次に、シミュレーション部806は、変数nが変数Nと一致するか否かを判断する(ステップS510)。より具体的には、ステップS506の判断処理が全ての単位領域について実行されたか否かを判断する。
【0076】
変数nが変数Nと一致していない場合には(ステップS510においてNO)、シミュレーション部806は、変数nの値をインクリメントして(ステップS511)、ステップS506以降の処理を繰り返す。これに対して、変数nが変数Nと一致している場合には(ステップS510においてYES)、シミュレーション部806は、変数tの値が予め定められた基準値以上か否かを判断する(ステップS512)。より具体的には、例えば、仮想ロボット500の動きに仮想ワーク530を追従させる追従条件として、仮想ワーク530が把持空間の体積のうちの5割以上を占めていることを条件とする場合には、基準値は、把持空間の体積の半分の値に設定される。ここでは、把持空間の体積が75であるため基準値としては38が設定される。
【0077】
変数tの値が基準値以上である場合には(ステップS512においてYES)、シミュレーション部806は、追従条件が成立したと判定して(ステップS514)、処理をメイン処理に戻す(リターン)。これに対して、変数tの値が基準値以上ではない(未満である)場合には(ステップS512においてNO)、シミュレーション部806は、追従条件が不成立と判定して(ステップS516)、処理をメイン処理に戻す(リターン)。
【0078】
なお、上記では、シミュレーション部806が、把持空間の体積のうち仮想ワーク530が占めている部分の体積を計算することによって追従条件の成否を判定する場合について説明したが、把持空間の全体積のうち仮想ワーク530が占めていない(重ならない)部分の体積を計算する場合であってもよい。より具体的には、シミュレーション部806は、n番目の単位領域が仮想ワーク530を含む領域であると判断した場合に、仮想ワーク530を含まない単位領域の個数を示す変数iをインクリメントする。ただし、この場合には、シミュレーション部806は、変数iの値が基準値未満であるときに追従条件が成立したと判定し、基準値以上である場合に追従条件が成立しないと判定する。
【0079】
再び、
図7を参照して、シミュレーション部806は、3Dシミュレータを実行することによって、ステップS116の判定処理に基づいて追従条件が成立しているか否かを判断する(ステップS118)。換言すると、シミュレーション部806は、仮想ワークを仮想機械の動きに追従させるべきか否かを判断する。追従条件が成立した場合には(ステップS118においてYES)、シミュレーション部806は、仮想機械の動きに仮想ワークを追従させる追従動作制御を開始して(ステップS120)、ステップS110からの処理を実行する。
【0080】
これに対して、追従条件が成立していない場合には(ステップS118においてNO)、シミュレーション部806は、ステップS110からの処理を実行する。すなわち、シミュレーション部806は、上述した追従動作制御を開始せずに、ステップS110からの処理を実行する。
【0081】
ステップS120において、仮想機械の動きに仮想ワークを追従させる追従動作制御が開始された場合には、シミュレーション部806は、3Dシミュレータを実行することによって、当該追従動作制御を反映した仮想機械および仮想ワークの状態がモニタ907の3D空間に表示される。すなわち、例えば、
図6の状態(c)のように、仮想ロボット500の動きに仮想ワーク530を追従させて、仮想ロボット500が仮想ワーク530を把持している状況がモニタ907の3D空間に表示される。
【0082】
実施の形態1によると、仮想ロボットの把持空間が一定以上仮想ワークによって占められた場合に、仮想ロボットの動きに仮想ワークを追従させることとした。したがって、実空間におけるロボットが把持することが可能なワークは、把持されるようにシミュレーションし、実空間においてロボットが把持不可能なワークは、把持されないようにシミュレーションすることができる。すなわち、実空間におけるロボットおよびワークの動きをより精度良くシミュレーションすることが可能となる。
【0083】
[実施の形態2]
実施の形態1では、機械がロボットである場合のシミュレーションを行なう例について説明した。実施の形態2では、機械がエアシリンダである場合のシミュレーションについて説明する。なお、実施の形態2は、実施の形態1と比較して、
図8で説明した追従条件の判定方式が異なる。
【0084】
実施の形態2において、<制御システムの全体構成>、<PC6のハードウェア構成>および<機能構成>については、実施の形態1と基本的に同様であるため、その詳細な説明は繰り返さない。
【0085】
<シミュレーション部の機能構成>
実施の形態2に従うシミュレーション部806の機能を説明する。シミュレーション制御部820における判断部824の機能が若干異なること以外は、実施の形態1と同様であるため、同一部分についてはその詳細な説明は繰り返さない。
【0086】
実施の形態2において、判断部824は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間(実施の形態2においては後述する可動空間)と仮想対象物とが重なる領域の体積が予め定められた基準値以上であるか否かを判断する。より具体的には、判断部824は、仮想対象物を複数の単位領域に分割し、分割された各単位領域が作用空間に含まれるか否かを判定する。そして、判断部824は、作用空間に含まれると判定された単位領域の個数に基づいて仮想対象物の体積のうち、作用空間に重なる部分の体積を計算する。
【0087】
<シミュレーション制御の流れ>
(概略)
図11は、実施の形態2におけるシミュレーションの3D空間を示す図である。
【0088】
図11を参照して、実施の形態2においては、実空間に対応する仮想的な空間である3D空間には、実空間のエアシリンダに対応する仮想エアシリンダ600と、実空間のワークに対応する仮想ワーク630と、実空間のコンベアに対応する仮想コンベア650、655とが配置される。より具体的には、仮想ワーク630は、基本的には、仮想コンベア650の上に置かれて、仮想コンベア650のベルトが駆動されることによって、ベルトが駆動される方向(図の搬送方向)に移動する。しかしながら、仮想エアシリンダ600の動きに仮想ワーク630を追従させる条件が成立した場合には、仮想エアシリンダ600がピストンを図の右方向(押し出し方向)に押し出すと、仮想ワーク630が図の右方向に押し出される。その後は、仮想ワーク630は仮想コンベア655の上に置かれて図の右下方向に移動していく。典型的には、エアシリンダは、エア圧が加圧されることによりピストンが押し出される機構を有する。
【0089】
概略として、シミュレーション部806は、3Dシミュレータを実行することによって、3D空間にオブジェクト(実施の形態2においては、仮想エアシリンダ600、仮想ワーク630および仮想コンベア650、655)を表示する。また、3Dシミュレータは、仮想エアシリンダ600によって扱われる仮想ワーク630を仮想エアシリンダ600の動きに追従させる追従条件が成立したか否かを判断する。より具体的には、3Dシミュレータは、仮想ワーク630の体積のうち、仮想エアシリンダ600の可動空間に重なる(含まれる)部分の体積が一定以上の場合には(追従条件が成立した場合には)、仮想エアシリンダ600の動きに仮想ワーク630を追従させる。すなわち、3Dシミュレータは、仮想エアシリンダ600の動きに仮想ワーク630を追従させる追従動作制御を開始する。
【0090】
また、シミュレーション部806は、機械制御シミュレータを実行することによって、仮想エアシリンダ600および仮想コンベア650を制御する。
【0091】
図12は、実施の形態2に従うシミュレーションの状況を示す図である。
図12を参照して、仮想エアシリンダ600は、ピストンを押し出す動作指令に従って、ピストンを図の右方向に押し出す。このとき、仮想エアシリンダ600の(ピストンの)可動範囲(可動空間)に仮想ワーク630がほとんど含まれていない場合には(
図12の状態(a)、(c)に対応)、仮想エアシリンダ600のピストンが押し出されても、仮想ワーク630は右方向に移動しない。これに対して、仮想エアシリンダ600の可動空間に仮想ワーク630が一定以上含まれている場合には(
図12の状態(b)に対応)、仮想エアシリンダ600のピストンが押し出されると、仮想ワーク630は右方向に移動して、仮想コンベア655によって搬送される。すなわち、仮想ワーク630の体積のうち、可動空間に含まれる部分の体積が一定以上の場合には、仮想エアシリンダ600の動きに仮想ワーク630を追従させる追従条件が成立する。なお、仮想エアシリンダ600の可動空間は、実空間のエアシリンダの可動空間に対応するように予め設定されている。
【0092】
上記のシミュレーション結果は、実空間において、エアシリンダの可動空間にワークがほとんど含まれていない場合には(3D空間における
図12の状態(a)、(c)に対応)、ピストンを押し出したとしても、ワークの向きが変わったりするだけで、押し出されないことを反映している。また、エアシリンダのピストンの可動空間にワークが一定以上含まれている場合には(3D空間における
図12の状態(b)に対応)、ピストンを押し出すと、ワークが押し出されることを反映している。
【0093】
(追従条件の判定処理)
ここでは、実施の形態2における追従条件の判定処理の流れ(
図7におけるステップS116に相当する部分)について説明する。なお、シミュレーション部806の全体の制御の流れについては、実施の形態1における
図7と基本的に同様であるため、その詳細な説明は繰り返さない。
【0094】
図13は、実施の形態2に従う追従条件の判定処理の流れを示すフローチャートである。実施の形態2のステップS600は、実施の形態1のステップS116に相当する。
【0095】
図13を参照して、シミュレーション部806は、3Dシミュレータを実行することによって、仮想ワーク630を予め定められた大きさの単位領域(例えば、直方体)に分割する(ステップS602)。
【0096】
図14は、実施の形態2に従う仮想ワーク630の分割方式を説明するための図である。
【0097】
図14を参照して、シミュレーション部806は、仮想ワーク630のモデルデータに基づいて、仮想ワーク630を複数の単位領域に分割する。この例は、仮想ワーク630が24個の単位領域に分割される場合について示している。
【0098】
再び、
図13を参照して、シミュレーション部806は、仮想エアシリンダ600の可動空間に含まれる単位領域の個数を示す変数tを0にセットする(ステップS604)。変数tは、仮想ワーク630の体積のうち可動空間に含まれる部分の体積を示している。例えば、仮想ワーク630の全部が可動空間に含まれる場合には、変数tの値は24となり、仮想ワーク630が可動空間に存在しない場合には、変数tの値は0となる。
【0099】
次に、シミュレーション部806は、RAM903に格納された変数nに1をセットする(ステップS605)。実施の形態2においては、RAM903には、変数Nとして仮想ワーク630を分割した単位領域の個数が保持されている。換言すると、変数Nは、仮想ワーク630の全体積を示している。
【0100】
次に、シミュレーション部806は、n番目の単位領域が可動空間に含まれているか否かを判断する(ステップS606)。
【0101】
図15は、
図14に示すステップS606の判定処理方式を説明するための図である。
図15を参照して、シミュレーション部806は、例えば、11番目(n=11)の単位領域は、可動空間に含まれると判定し、1番目(n=1)の単位領域は、可動空間に含まれないと判定する。
【0102】
再び、
図13を参照して、n番目の単位領域が可動空間に含まれていない場合には(ステップS606においてNO)、ステップS610の処理を実行する。これに対して、n番目の単位領域が可動空間に含まれている場合には(ステップS606においてYES)、シミュレーション部806は、変数tの値をインクリメントして(ステップS608)、ステップS610の処理を実行する。
【0103】
次に、シミュレーション部806は、変数nが変数Nと一致するか否かを判断する(ステップS610)。より具体的には、シミュレーション部806は、ステップS606における判断処理が全ての単位領域について実行されたか否かを判断する。
【0104】
変数nが変数Nと一致していない場合には(ステップS610においてNO)、シミュレーション部806は、変数nの値をインクリメントして(ステップS611)、ステップS606からの処理を繰り返す。これに対して、変数nが変数Nと一致している場合には(ステップS610においてYES)、シミュレーション部806は、変数tの値が基準値以上か否かを判断する(ステップS612)。より具体的には、例えば、追従条件として、仮想ワーク630の体積のうち5割以上が可動空間に含まれていることを条件とする場合には、基準値は仮想ワーク630の体積の半分の値に設定される。ここでは、仮想ワーク630の体積が24であるため基準値としては12が設定される。
【0105】
変数tの値が基準値以上である場合には(ステップS612においてYES)、シミュレーション部806は、追従条件が成立したと判定して(ステップS614)、処理をメイン処理に戻す(リターン)。これに対して、変数tの値が基準値以上ではない(未満である)場合には(ステップS612においてNO)、シミュレーション部806は、追従条件が不成立と判定して(ステップS616)、処理をメイン処理に戻す(リターン)。
【0106】
なお、実施の形態1と同様な考え方で、仮想ワーク630の全体積のうち、可動空間に含まれない体積を計算する場合であってもよい。より具体的には、シミュレーション部806は、n番目の単位領域が可動空間に含まれないと判断した場合に、可動空間に含まれない体積を示す変数iをインクリメントしていく。この場合には、シミュレーション部806は、変数iの値が基準値未満であるときに追従条件が成立したと判定し、基準値以上であるときに追従条件が成立しないと判定する。
【0107】
また、仮想ワーク630の形状(球、直方体、三角錐)、種類、重さなどの仕様に応じて、ステップS606における基準値を変更して判断が行なわれてもよい。より具体的には、仮想ワーク630ごとに、当該基準値をモデルデータとして記憶させておき、シミュレーション部806は、当該基準値に基づいて、ステップS612の処理を実行してもよい。
【0108】
上記のように追従条件の判定処理を実行することによって、実空間におけるエアシリンダとワークの動きをより精度良く仮想空間においてシミュレーションすることが可能となる。例えば、本実施の形態に従う追従条件の判定処理の比較例として、仮想エアシリンダ600と仮想ワーク630とが一定距離以下になったことを条件として、仮想エアシリンダ600の動きに仮想ワーク630を追従させるような場合について考えてみる。
【0109】
図16は、比較例のシミュレーションの状況を示す図である。
図16を参照して、仮想エアシリンダ600は、ピストンを押し出す動作指令に従って、ピストンを図の右方向に押し出す。このとき、仮想エアシリンダ600と仮想ワーク630との最短距離dは、
図16の状態(a)〜(c)ですべて同じである。すなわち、仮想エアシリンダ600の可動空間に仮想ワーク630が少しでも含まれると、最短距離dは同じ値になる。ここで、最短距離dが一定距離以下である場合には追従条件が成立するため、仮想エアシリンダ600の動きに仮想ワーク630を追従させることになる。したがって、
図16の状態(a)〜(c)の全てにおいて、仮想エアシリンダ600のピストンが右方向に押し出されると、仮想ワーク630が右方向に移動する状況が示されている。
【0110】
したがって、上記の比較例では、実際(実空間上では)にはエアシリンダの可動範囲にワークがほとんど含まれていない場合には(
図16の状態(a)、(c))、ピストンを押し出したとしても、(ワークの向きが変わるだけで)ワークは適切に押し出されないにもかかわらず、
図16の状態(a)、(c)では仮想エアシリンダ600の動きに追従して仮想ワーク630が押し出されてしまうシミュレーション結果となっている。したがって、比較例においては、実空間のエアシリンダおよびワークの動きを精度よくシミュレーションできていないことがわかる。
【0111】
これに対して、実施の形態2に従う追従条件の判定処理においては、
図12に示したように、実空間にエアシリンダおよびワークの動きをより精度よくシミュレーションできる。さらに、実施の形態2によると、可動空間に含まれる仮想ワーク630の体積を基準に追従条件を判定しているため、シミュレーション結果は、仮想ワーク630の形状、あるいは搬送されてくる仮想ワーク630の向きにも依存しにくく、より精度良く仮想機械および仮想ワークの動きをシミュレーションすることが可能となる。
【0112】
(追従条件の判定処理の変形例)
なお、実施の形態1で把持空間を単位領域に分割した場合と同様な考え方で、変形例として実施の形態2における可動空間を単位領域に分割する場合であってもよい。すなわち、シミュレーション部806は、3Dシミュレータを実行することによって、仮想エアシリンダ600の可動空間を単位領域(例えば、直方体)に分割する。
【0113】
図17は、実施の形態2の変形例に従う仮想エアシリンダ600の可動空間の分割方式を説明するための図である。
【0114】
図17を参照して、シミュレーション部806は、仮想エアシリンダ600のモデルデータに基づいて、仮想エアシリンダ600の可動空間を複数の単位領域(例えば、直方体)に分割する。この例は、単位領域が、40個の単位領域に分割される場合について示されている。
【0115】
上記の場合には、シミュレーション部806は、n番目の単位領域が仮想ワーク630を含む領域であるか否かを判断する。
【0116】
図18は、実施の形態2の変形例に従う単位領域が仮想ワーク630を含む領域であるか否かの判断方式を説明するための図である。
【0117】
図18を参照して、シミュレーション部806は、例えば、3番目(n=3)の単位領域は、仮想ワーク630を含む領域であると判断し、18番目(n=18)の単位領域は、仮想ワーク630を含まない領域であると判断する。
【0118】
[実施の形態3]
実施の形態1では、
図8で説明した追従条件の判定処理において、単位領域として直方体に分割する例について説明した。実施の形態3では、追従条件の判定処理において、仮想ワーク530の表面を複数の単位領域(例えば、長方形)に分割する場合について説明する。
【0119】
実施の形態3において、<制御システムの全体構成>、<PC6のハードウェア構成>および<機能構成>については、実施の形態1と基本的に同様であるため、その詳細な説明は繰り返さない。すなわち、実施の形態3は、実施の形態1と比較して
図8で説明した追従条件が異なる。
【0120】
<シミュレーション部の機能構成>
実施の形態3に従うシミュレーション部806の機能を説明する。シミュレーション制御部820における判断部824の機能が若干異なること以外は、実施の形態1と同様であるため、同一部分についてはその詳細な説明は繰り返さない。
【0121】
実施の形態3において、判断部824は、仮想機械によって扱われ対象物に対応する仮想対象物のモデルデータと、仮想機械のモデルデータとに基づいて、仮想機械が作用可能な作用空間(実施の形態3においては把持空間)と仮想対象物とが重なる部分の仮想対象物の表面積が基準値以上であるか否かを判断する。より具体的には、判断部824は、仮想対象物の表面を複数の単位領域に分割し、分割された各単位領域が作用空間に含まれるか否かを判定する。そして、判断部824は、含まれると判定された単位領域の個数に基づいて仮想対象物の全表面積のうち、作用空間に重なる部分の表面積を計算する。
【0122】
<シミュレーション制御の流れ>
実施の形態3においては、実施の形態1における
図5の場面を想定する。また、シミュレーション部806の全体の制御の流れについては、実施の形態1における
図7と基本的に同様であるため、その詳細な説明は繰り返さない。
【0123】
以下、実施の形態3に従う追従条件の判定処理の流れ(
図7におけるステップS116に相当する部分)について説明する。
【0124】
(追従条件の判定処理)
図19は、実施の形態3に従う追従条件の判定処理の流れを示すフローチャートである。実施の形態3のステップS700は、実施の形態1のステップS116に相当する。
【0125】
図19を参照して、シミュレーション部806は、3Dシミュレータを実行することによって、仮想ワーク530の表面を予め定められた大きさの単位領域(例えば、長方形)に分割する(ステップS702)。
【0126】
図20は、実施の形態3に従う仮想ワーク530の分割方式を説明するための図である。
【0127】
図20を参照して、シミュレーション部806は、仮想ワーク530のモデルデータに基づいて、仮想ワーク530の表面を複数の単位領域に分割する。この例では、単位領域が、52個の単位領域に分割される例について示されている。
【0128】
再び、
図19を参照して、シミュレーション部806は、仮想ロボット500の把持空間に含まれる単位領域の個数を示す変数tを0にセットする(ステップS704)。変数tは、仮想ワーク530の全部の表面積のうち、把持空間に含まれる部分の表面積を示している。例えば、仮想ワーク530の全部の表面が把持空間に含まれる場合には、変数tの値は52となり、把持空間に仮想ワーク530が全く含まれない場合には、変数tの値は0となる。
【0129】
次に、シミュレーション部806は、RAM903に格納された変数nに1をセットする(ステップS705)。実施の形態3においては、RAM903には、変数Nとして仮想ワーク530の表面を分割した単位領域の個数が保持されている。換言すると、変数Nは、仮想ワーク530の全表面積を示している。
【0130】
次に、シミュレーション部806は、n番目の単位領域が把持空間に含まれているか否かを判断する(ステップS706)。
【0131】
図21は、
図20に示すステップS706の判定処理方式を説明するための図である。
図21を参照して、シミュレーション部806は、例えば、12番目(n=12)の単位領域は、把持空間に含まれていると判定し、1番目(n=1)の単位領域は、把持空間に含まれていないと判定する。
【0132】
再び、
図19を参照して、n番目の単位領域が把持空間に含まれていない場合には(ステップS706においてNO)、シミュレーション部806は、ステップS710の処理を実行する。これに対して、n番目の単位領域が把持空間に含まれている場合には(ステップS706においてYES)、シミュレーション部806は、変数tの値をインクリメントして(ステップS708)、ステップS710の処理を実行する。
【0133】
次に、シミュレーション部806は、変数nが変数Nと一致するか否かを判断する(ステップS710)。より具体的には、シミュレーション部806は、ステップS706における判断処理が全ての単位領域について実行されたか否かを判断する。
【0134】
変数nが変数Nと一致していない場合には(ステップS710においてNO)、変数nの値をインクリメントして(ステップS711)、シミュレーション部806は、ステップS706以降の処理を繰り返す。これに対して、変数nが変数Nと一致している場合には(ステップS710においてYES)、シミュレーション部806は、変数tの値が基準値以上か否かを判断する(ステップS712)。より具体的には、例えば、追従条件として、仮想ワーク530の表面のうちの5割以上が把持空間に含まれていることを条件とする場合には、基準値は仮想ワーク530の表面積の半分の値に設定される。ここでは、仮想ワーク530の表面積が52であるため基準値としては26が設定される。
【0135】
変数tの値が基準値以上である場合には(ステップS712においてYES)、シミュレーション部806は、追従条件が成立したと判定して(ステップS714)、処理をメイン処理に戻す(リターン)。これに対して、変数tの値が基準値以上ではない(未満である)場合には(ステップS712においてNO)、シミュレーション部806は、追従条件が不成立と判定して(ステップS716)、処理をメイン処理に戻す(リターン)。
【0136】
実施の形態3によると、仮想ロボットの把持空間に仮想ワークの表面が一定以上含まれた場合に、仮想ロボットの動きに仮想ワークを追従させることとした。したがって、実空間においてロボットが把持可能なワークは、把持されるようにシミュレーションし、実空間においてロボットが把持不可能なワークは、把持されないようにシミュレーションすることができる。すなわち、実空間におけるロボットおよびワークの動きをより精度良くシミュレーションすることが可能となる。
【0137】
[その他の実施の形態]
上述の実施の形態1では、追従条件の判定処理において把持空間を単位領域に分割する場合について説明したが、実施の形態2と同様な考え方で、仮想ワーク530を単位領域に分割する場合であってもよい。すなわち、シミュレーション部806は、3Dシミュレータを実行することによって、仮想ワーク530を単位領域(例えば、直方体)に分割する。シミュレーション部806は、n番目の単位領域が把持空間に含まれているか否かの判断処理を実行する。そして、シミュレーション部806は、仮想ワーク530の体積のうち、把持空間に含まれる部分の体積が一定以上の場合には追従条件が成立したと判定し、基準値未満である場合には追従条件が成立しないと判定する。
【0138】
また、上述した実施の形態においては、仮想機械は、実空間の機械に対応し、仮想対象物は、実空間の対象物(ワーク)に対応するものであることとした。しかしながら、これに限定されず、仮想空間である3D空間のみに存在するものであってもよい。これによると、例えば、実際の装置を製作する前に、制御プログラムのシミュレーションにおいて機械の動きに対象物が追従するか否かを検証することができる。
【0139】
また、上述した実施の形態においては、シミュレーション部806が実行するシミュレータが、3Dシミュレータ、および、機械制御シミュレータの2つに分かれている場合について説明した。しかし、これに限定されず、これらの2つが統合されていてもよい。このようにすれば、それぞれのシミュレータ間でのデータのやり取りを行なわずに済むので、効率よくシミュレーションを実行することができる。
【0140】
なお、コンピュータを機能させて、上述のフローチャートで説明したような制御を実行させるプログラムを提供することもできる。このようなプログラムは、コンピュータに付属するフレキシブルディスク、CD−ROM、ROM、RAMおよびメモリカードなどの一時的でないコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【0141】
プログラムは、コンピュータのオペレーティングシステム(OS)の一部として提供されるプログラムモジュールのうち、必要なモジュールを所定の配列で所定のタイミングで呼出して処理を実行させるものであってもよい。その場合、プログラム自体には上記モジュールが含まれずOSと協働して処理が実行される。このようなモジュールを含まないプログラムも、本実施の形態にかかるプログラムに含まれ得る。
【0142】
また、本実施の形態にかかるプログラムは他のプログラムの一部に組込まれて提供されるものであってもよい。その場合にも、プログラム自体には上記他のプログラムに含まれるモジュールが含まれず、他のプログラムと協働して処理が実行される。このような他のプログラムに組込まれたプログラムも、本実施の形態にかかるプログラムに含まれ得る。
【0143】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。