以下に図面を参照して実施例に係るプログラム、演算装置および演算方法について説明する。
実施例では、ワークの搬送をシミュレートする演算装置について説明する。図1は、実施例に係る演算装置の機能構成の一例を示す図である。図1に示すように、演算装置1は、入力装置2、および出力装置3と接続されている。また、演算装置1は、管理情報記憶部5、動作パラメータ記憶部6、3次元データ管理部7を有する。また、演算装置1は、制御ソフトウェア実行部8、モータ動作演算部9、シミュレーション演算部10、3次元姿勢演算部11、3次元形状表示制御部12を有する。
また、管理情報記憶部5は、搬送部品形状テーブル5a、搬送動作情報テーブル5b、ワーク形状テーブル5c及びワーク姿勢テーブル5dを有する。また、動作パラメータ記憶部6は、接触判定直方体テーブル6a、接触平面テーブル6bを有する。また、シミュレーション演算部10は、動作パラメータ作成部10a、搬送動作演算部10b、接触姿勢演算部10c、ワーク移動演算部10dを有する。
演算装置1は、タイムステップT1、T2、・・・TNまでの各タイムステップにおけるワークの搬送状態をシミュレートし、シミュレートした結果を出力装置2から出力させる。これにより、搬送機器を制御する制御ソフトウェアの開発者などに、制御ソフトウェアによる搬送機器の制御が適切かを検証させることができる。演算装置1は、例えば、入力装置2から、シミュレーション空間上で搬送をシミュレートするワークの形状及びワークの初期(タイムステップT1)のワークの姿勢、および、ワークを搬送する搬送機器の機能や初期の配置等の情報を取得する。例えば、演算装置1は、CAD(Computer Aided Design)によって作成されたワークの3次元モデルデータ及び初期のワークの姿勢データを取得する。また、演算装置1は、CADによって作成されたプッシャー、ベルトコンベア、吸着チャック、リフター等の搬送機器の3次元モデルデータ、および、初期の搬送機器の配置位置等を取得する。そして、演算装置1は、取得した3次元モデルデータ等を用いて、タイムステップT1〜TNまでのワークの搬送シミュレーションを実行し、実行結果をモニタやプリンタである出力装置3に出力させる。例えば、演算装置1は、各種搬送機器によってワークが搬送される映像を出力装置3に出力し表示させる。
ここで、演算装置1は、ワークと、ワークを搬送している搬送機器とが接触した場合に、搬送機器の移動方向の成分のうち、搬送機器の姿勢が変化した方向の成分の移動量を抽出し、抽出した移動量の分だけワークを移動させる。これにより、ワークと搬送機器とを別々にシミュレートすることができる。ここで、ワークの面をすべりながら搬送機器がワークを搬送するような場合に、接触状態にあるワークと搬送機器とを一体化してしまうと、搬送機器がワークの面をすべることができない。そのため、接触状態にあるワークと搬送機器とを一体化するようなシミュレーションでは、精度良くワークの搬送状態をシミュレートすることができない場合がある。しかしながら、演算装置1は、搬送機器の移動方向の成分のうち、搬送機器の姿勢が変化した方向の成分の移動量を抽出し、抽出した移動量の分だけワークを移動させる。このため、演算装置1によれば、ワークの面をすべりながら搬送機器がワークを搬送するような場合であってもシミュレーションを精度良く行うことができる。
ここで、搬送機器とワークとが接触したと判定するタイミングとしては、例えば、搬送機器とワークとの干渉チェックを行って、搬送機器とワークとが干渉し、かつ、干渉した部分の長さが所定の閾値以内となったタイミングが考えられる。しかしながら、かかるタイミングを、搬送機器とワークとが接触したタイミングとする場合には、ワークに対して搬送機器がめり込んだままワークの搬送状態をシミュレートすることになる。すなわち、実際に、搬送機器によってワークを搬送する状況とは異なった状況でワークの搬送状態をシミュレートすることになる。そのため、上述したタイミングを搬送機器とワークとが接触するタイミングとして採用する場合には、シミュレーションにおいて演算されるワークの位置の精度が悪くなる。したがって、上述したタイミングを搬送機器とワークとが接触したタイミングとして採用する場合には、制御プログラムの検証を精度良く行うことができない。
そこで、演算装置1は、以下の処理を実行する。図2Aは、演算装置が実行する、搬送機器とワークとの接触判定の処理の一例について説明するための図である。例えば、図2Aの例に示すように、あるタイムステップにおいて、演算装置1は、プッシャー30が移動して、プッシャー30に設定された搬送可能領域にワーク40の接触判定直方体の重心41が含まれることとなった場合には、次の処理を行う。すなわち、演算装置1は、プッシャー30の接触判定直方体に設定されたワーク40を押し出す面である接触面31とワーク40の面とが平行となる場合の接触判定直方体の回転量を演算するとともに回転方向を決定する。なお、演算装置1は、各搬送機器がワークを押し出す面である接触平面からワークを押し出す方向に向けて所定の搬送可能領域を設定する。例えば、演算装置1は、重心41を中心として、接触面31に最も近いワーク40の接触判定直方体の点42をプッシャー30の移動方向に押した場合にワーク40の接触判定直方体が回転する方向43をワーク40の接触判定直方体を回転させる方向として決定する。また、演算装置1は、接触面31とワーク40の面とが平行となる場合の接触判定直方体の回転量を演算する。そして、演算装置1は、プッシャー30が接触判定直方体の面44と接触する位置まで移動した場合には、ワーク40の接触判定直方体を決定した回転方向に演算した回転量だけ回転させる。そして、演算装置1は、プッシャー30とワーク40とが接触したものとみなす。これにより、演算装置1は、ワーク40に対してプッシャー30がめり込むことなく、プッシャーがワークを搬送する実際の状況と同様の状況でワーク40の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度の低下を抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
また、演算装置1によれば、ワーク40がプッシャー30によって搬送される際の姿勢が、プッシャーがワークを実際に搬送する際のワークの姿勢と同様となる。そのため、演算装置1は、プッシャーがワークを搬送する実際の状況と同様の状況でワーク40の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度の低下を抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
図2Bは、演算装置が実行する、搬送機器とワークとの接触判定の処理の一例について説明するための図である。例えば、図2Aの例に示すように、あるタイムステップにおいて、演算装置1は、リフター60が移動して、リフター60に設定された搬送可能領域にワーク70の接触判定直方体の重心71が含まれることとなった場合には、次の処理を行う。すなわち、演算装置1は、リフター60の接触判定直方体に設定されたワーク70を押し出す面である接触面61とワーク70の面とが平行となる場合の接触判定直方体の回転量を演算するとともに回転方向を決定する。なお、演算装置1は、各搬送機器がワークを上に持ち上げる面である接触平面からワークを持ち上げる方向に向けて所定の搬送可能領域を設定する。例えば、演算装置1は、重心71を中心として、接触面61に最も近いワーク70の接触判定直方体の点72をリフター60の移動方向に押した場合にワーク70の接触判定直方体が回転する方向73をワーク70の接触判定直方体を回転させる方向として決定する。また、演算装置1は、接触面61とワーク70の面とが平行となる場合の接触判定直方体の回転量を演算する。そして、演算装置1は、リフター60が接触判定直方体の面74と接触する位置まで移動した場合には、ワーク70の接触判定直方体を決定した回転方向に演算した回転量だけ回転させる。そして、演算装置1は、リフター60とワーク70とが接触したものとみなす。これにより、演算装置1は、ワーク70に対してリフター60がめり込むことなく、リフターがワークを搬送する実際の状況と同様の状況でワーク70の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度の低下を抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
また、演算装置1によれば、ワーク70がリフター60によって搬送される際の姿勢が、リフターがワークを実際に搬送する際のワークの姿勢と同様となる。そのため、演算装置1は、リフターがワークを搬送する実際の状況と同様の状況でワーク70の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度の低下を抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
次に、先の図1に示す各機能の一例について説明する。搬送部品形状テーブル5aは、入力装置2から入力されたプッシャーやリフターなどの搬送機器の形状を示すデータが格納されたテーブルである。図3は、搬送部品形状テーブルの一例を説明する図である。図3に示す例は、搬送部品形状テーブル5aに、シミュレーション空間上に配置されたプッシャーやリフターなどの形状として、プッシャーやリフターなどの表面を構成する3角形平面(ポリゴン)の頂点座標が格納された場合を示す。
例えば、図3の例は、搬送部品形状テーブル5aが、あるプッシャーの表面を構成する複数のポリゴンの各頂点座標「(XP1、YP1、ZP1)、…」を記憶した場合を示す。なお、図3に示す例では、最も単純なポリゴンデータを記憶する例について記載したが、実施例はこれに限定されるものではなく、例えば、搬送部品形状テーブル5aには、辺データを考慮したポリゴンデータが格納されても良い。また、搬送部品形状テーブル5aには、自由曲面を構成する線、および線を構成する点を階層的に記憶しても良い。すなわち、搬送部品形状テーブル5aには、シミュレーション空間上で搬送機器を表現する任意形式のデータが格納される。
搬送動作情報テーブル5bは、搬送機器の動作を示すデータが格納されたテーブルである。例えば、図4は、搬送動作情報テーブルの一例を説明する図である。図4に示す例では、搬送動作情報テーブルには、演算装置1が実行するシミュレーションでの最新のタイムステップTk(k=1,・・・,N)における各搬送機器の重心位置と移動量及び移動方向を示す移動ベクトルと姿勢角とが対応付けて格納される。
例えば、図4に示す例は、搬送動作情報テーブル5bが、あるタイムステップにおけるあるプッシャーの重心位置「(XP1、YP1、ZP1)」、移動量及び移動方向「(X1、Y1、Z1)」、姿勢角「(θ1、ρ1、φ1)」を記憶した場合を示す。ここで、θ、ρ、φは、3次元空間内の各軸(X軸、Y軸、Z軸)を中心にしてどれだけ回転しているかを示す角度の情報である。なお、タイムステップTkにおいて搬送動作情報テーブル5bに格納される搬送機器の重心位置及び姿勢角については、後述する3次元姿勢演算部11がタイムステップTkにおいて新たに算出した値に更新される。また、タイムステップTkにおいて搬送動作情報テーブル5bに格納される移動ベクトルについては、モータ動作演算部9がタイムステップTkにおいて新たに演算した移動ベクトルに更新される。したがって、タイムステップTkにおいて、モータ動作演算部9により移動ベクトルが登録されてから、3次元姿勢演算部11により搬送機器の重心位置及び姿勢角が登録されるまでの間における搬送動作情報テーブル5bの登録内容は次の内容となる。すなわち、搬送動作情報テーブル5bには、タイムステップTkにおける移動ベクトルと、タイムステップTk−1における搬送機器の位置及び姿勢角とが対応付けて登録される。よって、タイムステップTkにおいて、後述する動作パラメータ作成部10a、搬送動作演算部10b、接触姿勢演算部10c、ワーク移動演算部10dによって参照される搬送動作情報テーブル5bの登録内容は、次の内容となる。すなわち、かかる登録内容は、タイムステップTkにおける移動ベクトル、並びに、タイムステップTk−1における搬送機器の位置及び姿勢角となる。
図1の説明に戻り、ワーク形状テーブル5cは、シミュレーション空間内において各種の搬送機器が搬送を行うワークの形状が格納されている。図5は、ワーク形状テーブルの一例を説明する図である。図5に示す例は、ワーク形状テーブル5cが、ワーク#1の表面を構成する3角形平面(ポリゴン)の頂点座標を記憶した場合を示す。図5の例は、ワーク形状テーブル5cが、ワーク#1の表面を構成するポリゴンの座標データ「(XW1、YW1、ZW1)、・・・」を記憶した場合を示す。なお、ワーク形状テーブル5cは、搬送部品形状テーブル5aと同様に、自由曲面等のデータが格納されていても良い。
ワーク姿勢テーブル5dは、ワークの姿勢を示すデータが格納されたテーブルである。例えば、図6は、ワーク姿勢テーブルの一例を説明する図である。図6に示す例では、ワーク姿勢テーブル5dに、各ワークの接触判定直方体の重心の位置と、各ワークの接触判定直方体の重心を原点として、各接触判定直方体が3次元空間内の各軸を中心にどれだけ回転しているかを示す姿勢の情報が格納されている。
例えば、図6に示す例は、ワーク姿勢テーブル5dが、ワーク#1の接触判定直方体の重心の位置「(X1、Y1、Z1)」、姿勢角(θW1、ρW1、φW1)」を記憶した場合を示す。また、タイムステップTkにおいて、ワーク姿勢テーブル5dに格納される重心位置及び姿勢は、3次元姿勢演算部11がタイムステップTkにおいて新たに演算した重心位置及び姿勢に更新される。したがって、タイムステップTkにおいて、3次元姿勢演算部11によりワークの接触判定直方体の重心位置及び姿勢角が登録されるまでのワーク姿勢テーブル5dの登録内容は次の内容となる。すなわち、ワーク姿勢テーブル5dには、タイムステップTk−1における各ワークの接触判定直方体の重心位置及び姿勢角とが対応付けて登録される。よって、タイムステップTkにおいて、後述する動作パラメータ作成部10a、搬送動作演算部10b、接触姿勢演算部10c、ワーク移動演算部10dによって参照されるワーク姿勢テーブル5dの登録内容は、次の内容となる。すなわち、かかる登録内容は、タイムステップTk−1における各ワークの接触判定直方体の重心位置及び姿勢角となる。
図1に戻って、接触判定直方体テーブル6aは、各ワークに外接する直方体である接触判定直方体の表面を構成するポリゴンデータを記憶するテーブルである。接触判定直方体は、タイムステップTkにおいて、タイムステップTkよりも1つ前のタイムステップTk−1における各ワークの重心位置及び形状に基づいて後述の動作パラメータ作成部12により作成される。図7は、接触判定直方体テーブルの一例を説明する図である。図7に示す例は、接触判定直方体テーブル6aが、タイムステップTkにおいてタイムステップTk−1におけるワーク#1の重心位置及び形状に基づいて作成された接触判定直方体の表面を構成するポリゴンデータ「(XS1、YS1、ZS1)、・・・」を記憶する場合を示す。
接触平面テーブル6bは、各搬送機器の種別ごとに、ワークを搬送する際にワークと接触する面である接触平面の頂点座標を記憶する。図8は、接触平面テーブルの一例を説明する図である。図8に示す例は、接触平面テーブル6bが、あるプッシャーの接触平面の頂点座標「(XP1P、YP1P、ZP1P)、・・・」を記憶した場合を示す。なお、図8では記載を省略したが、搬送機器の接触平面の両側のうちどちらの側がワークと接触するかを示す情報が接触平面テーブル6bに登録されるものとする。また、各タイムステップにおける接触平面の頂点座標は、後述の動作パラメータ作成部10aによって作成される。そして、動作パラメータ作成部10aによって、各タイムステップにおける接触平面の頂点座標が、接触平面テーブル6bに登録され、接触平面テーブル6bが更新される。
図1に戻って、3次元データ管理部7は、シミュレーション画像を作成する際に用いる各種データを記憶する。例えば、3次元データ管理部7は、各ワークや搬送機器のポリゴンデータ、表示する際の色を指定する情報等を記憶する。
制御ソフトウェア実行部8は、デバッグ対象となる制御ソフトウェアを実行する。例えば、制御ソフトウェア実行部8は、シミュレーション対象となる工場において、各搬送機器を動作させるサーボモータの制御信号を生成する制御ソフトを実行する。そして、制御ソフトウェア実行部8は、制御ソフトウェアが生成した制御信号の内容を、タイムステップT1からタイムステップTNまでのタイムステップごとに順番にモータ動作演算部9に出力する。例えば、制御ソフトウェア実行部8は、サーボモータのオンとオフを示すパルス信号がオン状態となるタイミング、オン状態となる時間、パルスの正負等をモータ動作演算部9に通知する。
モータ動作演算部9は、制御ソフトウェア実行部8から受信した制御信号の内容に従って、タイムステップごとに各搬送機器を動作させるサーボモータの回転数等を演算する。そして、モータ動作演算部9は、演算結果を用いて、タイムステップごとに各搬送機器の移動量及び移動方向を示す移動ベクトルを生成し、生成した移動ベクトルを搬送動作情報テーブル5bに格納する。例えば、モータ動作演算部9は、あるタイムステップにおいて、プッシャーを動作させるサーボモータの制御信号の内容を受信すると、受信した制御信号に従ってサーボモータの回転方向や回転数を演算する。そして、モータ動作演算部9は、演算したサーボモータの回転方向や回転数に応じてプッシャーの移動量及び移動方向を示す移動ベクトルを算出し、算出した移動ベクトルを搬送動作情報テーブル5bに格納して、搬送動作情報テーブル5bを更新する。なお、モータ動作演算部9は、各搬送機器の各軸の回転量も演算し、搬送動作情報テーブル5bの図示しない項目に格納する。
動作パラメータ作成部10aは、タイムステップごとに、管理情報記憶部5が記憶する各種情報を用いて、動作パラメータを生成し、生成した動作パラメータを動作パラメータ記憶部6に格納する。
ここで、動作パラメータとは、演算装置1がワークの搬送状態をシミュレートするために用いる情報である。例えば、動作パラメータとは、各ワークと各搬送機器が接触しているか否かを判定する接触判定に用いる情報であり、ワークに外接する接触判定直方体の位置情報と、搬送機器がワークを搬送する際にワークと接触する接触平面の位置情報である。
以下、動作パラメータ作成部10aの動作について説明する。まず、動作パラメータ作成部10aは、タイムステップTkにおいて、ワーク形状テーブル5cとワーク姿勢テーブル5dから、各ワークの形状とタイムステップTk−1におけるワークの接触判定直方体の重心位置及び姿勢とを取得する。そして、動作パラメータ作成部10aは、取得した各ワークの形状、重心位置及び姿勢に基づいて、各ワークに外接する接触判定直方体の表面を構成するポリゴンデータを作成し、作成したポリゴンデータを接触判定直方体テーブル6aに格納する。
図9は、ワークの接触判定直方体を説明する図である。例えば、動作パラメータ作成部10aは、図9中の直線で示すワーク40の接触判定直方体として、図9中の点線で示す直方体50を識別する。すなわち、動作パラメータ作成部10aは、ワーク40に外接する直方体50を識別する。そして、動作パラメータ作成部10aは、識別した直方体50の表面を構成するポリゴンのポリゴンデータを生成し、生成したポリゴンデータを接触判定直方体テーブル6aに格納する。動作パラメータ作成部10aは、上述したポリゴンデータを生成する処理をタイムステップごとに、各ワークに対して行う。
また、動作パラメータ作成部10aは、タイムステップTkにおいて、搬送動作演算部10bから送信されたタイムステップTkにおける各搬送機器の重心位置及び姿勢を受信し取得する。また、動作パラメータ作成部10aは、各搬送機器の形状を示すポリゴンデータを搬送部品形状テーブル5aから取得する。そして、動作パラメータ作成部10aは、取得した各搬送機器の形状とタイムステップTkにおける各搬送機器の重心位置及び姿勢とを用いて、次のデータを生成する。すなわち、動作パラメータ作成部10aは、搬送機器がワークと接触した場合に、接触したワークを押し出す面または持ち上げる面である接触平面の頂点座標を作成し、作成した接触平面の頂点座標を接触平面テーブル6bに格納する。ここで、動作パラメータ作成部10aは、搬送機器がワークを押し出す方向または持ち上げる方向のベクトルを法線ベクトルとする搬送機器の面を接触平面とすることができる。例えば、先の図2Aの例に示すように、動作パラメータ作成部10aは、プッシャー30の接触平面31の頂点座標を作成し、接触平面テーブル6bに格納する。動作パラメータ作成部10aは、上述した接触平面を作成する処理をタイムステップごとに、各搬送機器に対して行う。
搬送動作演算部10bは、シミュレーション空間内の各搬送機器のタイムステップTkにおける重心位置を演算する。例えば、搬送動作演算部10bは、タイムステップTkにおいて、搬送動作情報テーブル5bに格納された各搬送機器のタイムステップTk−1における重心位置とタイムステップTkにおける移動ベクトルとを取得する。
そして、搬送動作演算部10bは、各搬送機器のタイムステップTk−1における重心位置とタイムステップTkにおける移動ベクトルとに基づいて、タイムステップTkにおける各搬送機器の重心位置を演算する。そして、搬送動作演算部10bは、各搬送機器の重心位置、及び、各搬送機器のタイムステップTkにおける移動ベクトルを動作パラメータ作成部10a、接触姿勢演算部10c、ワーク移動演算部10dに出力する。
接触姿勢演算部10cは、動作パラメータ記憶部6が記憶する情報、及び、搬送動作演算部10bから出力された各搬送機器の重心位置を用いて、ワークの接触判定を行う。例えば、接触姿勢演算部10cは、接触判定直方体の形状と、各搬送機器の接触平面の形状とを接触判定直方体テーブル7a及び接触平面テーブル7bから取得する。そして、接触姿勢演算部10cは、各搬送機器の接触平面上に、ワークの搬送を開始するか否かを判定する搬送可能領域を設定する。例えば、接触姿勢演算部10cは、接触平面上に、搬送機器が移動する方向に、所定の搬送可能領域を設定する。図10Aは、プッシャーの搬送可能領域を説明する図である。例えば、図10Aの例に示すように、接触姿勢演算部10cは、プッシャー30の接触平面31上に設定される、ワークの搬送を開始するか否かを判定する搬送可能領域32のポリゴンデータを作成する。図10Aの例に示すように、搬送可能領域32は、プッシャー30の接触平面31の幅と同様の幅33を有し、プッシャー30の移動方向34におけるプッシャー30が搬送を行うワークの接触判定直方体の長さと同様の長さ35を有する。そして、接触姿勢演算部10cは、作成した搬送可能領域32をプッシャー30の接触平面31上に設定する。
図10Bは、リフターの搬送可能領域を説明する図である。例えば、図10Bの例に示すように、接触姿勢演算部10cは、リフター60の接触平面61上に設定される、ワークの搬送を開始するか否かを判定する搬送可能領域62のポリゴンデータを作成する。図10Bの例に示すように、搬送可能領域62は、リフター60の接触平面61の幅と同様の幅63を有し、リフター60の移動方向64におけるリフター60が搬送を行うワークの接触判定直方体の長さと同様の長さ65を有する。そして、接触姿勢演算部10cは、作成した搬送可能領域62をリフター60の接触平面61上に設定する。姿勢接触演算部10bは、上述した搬送可能領域を設定する処理をタイムステップごとに、各搬送機器について行う。
また、接触姿勢演算部10cは、各ワークの接触判定直方体の重心位置を算出する。そして、接触姿勢演算部10cは、ワークごとに、算出した重心位置が、重心位置が算出された接触判定直方体のワークを搬送対象とする搬送機器に設定された搬送可能領域に含まれるか否かを判定する。接触姿勢演算部10cは、あるタイムステップTkにおいて、ある搬送機器に設定された搬送可能領域にワークの接触判定直方体の重心位置が含まれる場合には、次の処理を行う。すなわち、接触姿勢演算部10cは、搬送可能領域にワークの接触判定直方体の重心が含まれると判定した場合には、搬送機器がワークの搬送を開始すると判定する。例えば、接触姿勢演算部10cは、先の図2Aの例に示すように、あるタイムステップTkにおいて、搬送可能領域にワークの接触判定直方体の重心が含まれると判定した場合には、プッシャー30がワーク40の搬送を開始すると判定する。そして、接触姿勢演算部10cは、搬送機器の接触面に最も近い接触判定直方体の点を検出する。続いて、接触姿勢演算部10cは、搬送機器の移動方向にワークの接触判定直方体を押した場合に接触判定直方体が回転する方向を決定する。次に、接触姿勢演算部10cは、搬送機器に設定されたワークを押し出す面または持ち上げる面である接触面とワークの接触判定直方体の面とが平行となる場合の、接触判定直方体の回転量を計算する。
そして、接触姿勢演算部10cは、搬送機器が接触判定直方体の面と接触する位置まで移動した場合に、ワークの接触判定直方体を決定した方向に計算した回転量だけ回転させることを開始する。そして、ワーク移動演算部10dは、接触面とワークの接触判定直方体の面とが平行となった場合に、接触判定直方体の回転を停止する。そして、接触姿勢演算部10cは、搬送機器とワークとが接触している接触状態であると判定する。続いて、接触姿勢演算部10cは、接触状態である搬送機器とワークとをワーク移動演算部10dに通知する。
例えば、先の図2Aの例に示すように、接触姿勢演算部10cは、接触面31に最も近い点42を検出する。そして、接触姿勢演算部10cは、ワーク40の接触判定直方体の重心を中心として、プッシャー30の移動方向にワーク40の接触判定直方体を押した場合に接触判定直方体が回転する方向43を決定する。そして、接触姿勢演算部10cは、プッシャー30が接触判定直方体の面44と接触する位置まで移動した場合に、ワーク40の接触判定直方体を決定した方向43に計算した回転量だけ回転させることを開始する。そして、ワーク移動演算部10dは、接触面31とワーク40の接触判定直方体の面44とが平行となった場合に、接触判定直方体の回転を停止する。そして、接触姿勢演算部10cは、プッシャー30とワーク40とが接触している接触状態であると判定する。続いて、接触姿勢演算部10cは、接触状態であるプッシャー30とワーク40とをワーク移動演算部10dに通知する。
図1に戻り、ワーク移動演算部10dは、搬送に伴うワークの移動を演算する。例えば、ワーク移動演算部10dは、タイムステップTkにおいて、接触状態である搬送機器とワークとを接触姿勢演算部10cから受信すると、次の処理を行う。すなわち、ワーク移動演算部10dは、接触状態である搬送機器のタイムステップTkにおける移動ベクトルの搬送機器の姿勢が変化した方向の成分の移動量を抽出する。そして、ワーク移動演算部10dは、抽出した移動量だけ、搬送機器の姿勢が変化した方向にワークを移動させた場合のワークの位置を算出する。
図11は、ワーク移動演算部が実行する処理の一例について説明するための図である。図11の例に示すように、ワーク移動演算部10dは、タイムステップTkにおいて、プッシャー30とワーク40とが接触状態であることを接触姿勢演算部10cから受信すると、次の処理を行う。すなわち、ワーク移動演算部10dは、接触状態であるプッシャー30のタイムステップTkにおける移動ベクトル39のプッシャー30の姿勢が変化した方向の成分の移動量49を抽出する。そして、ワーク移動演算部10dは、抽出した移動量49だけ、プッシャー30の姿勢が変化した方向にワーク40を移動させて、ワーク40の位置を算出する。その後、ワーク移動演算部10dは、プッシャー30がワーク40を押し出す方向に移動する場合は、プッシャー30とワーク40とが接触状態のままワーク40の位置を演算する。
一方、ワーク移動演算部10dは、プッシャー30がワーク40を押し出す方向とは逆の方向に移動する場合は、逆方向に移動する際にプッシャー30とワーク40との接触状態を解除する。図12は、ワーク移動演算部が実行する処理の一例について説明するための図である。図12に示すように、ワーク移動演算部10dは、プッシャー30の移動ベクトル38が示す移動方向が、プッシャー30がワーク40を押し出す方向とは逆の方向である場合には、プッシャー30とワーク40との接触状態を解除する。そして、ワーク移動演算部10dは、移動ベクトル38に従ってプッシャー30の姿勢を変更する。
また、ワーク移動演算部10dは、タイムステップTkにおいて、リフターとワークとが接触状態であることを接触姿勢演算部10cから受信すると、次の処理を行う。すなわち、ワーク移動演算部10dは、ワークをリフターの支え面である接触面の接触位置に移動させた際のワークの高さ方向(Z軸方向)の座標を内部メモリに格納する。そして、ワーク移動演算部10dは、ワークをリフターの支え面の接触位置に移動させた後、リフターがワークを持ち上げる方向に移動する場合は、リフターのタイムステップTkにおける移動ベクトルのリフターの姿勢が変化した方向の移動量を抽出する。そして、ワーク移動演算部10dは、ワークをリフターの姿勢が変化した方向に、抽出した移動量だけ移動させ、ワークの位置を演算する。一方、ワーク移動演算部10dは、リフターがワークを持ち上げる方向とは逆の方向、すなわち、地面方向に移動する場合は、リフターの高さが内部メモリに格納された高さになった際にリフターとワークとの接触状態を解除する。
そして、ワーク移動演算部10dは、各搬送機器の位置及び姿勢角を3次元姿勢演算部16に通知する。また、ワーク移動演算部10dは、ワークの接触判定直方体の重心位置及び姿勢角を3次元姿勢演算部16に通知する。
図1に戻って、3次元姿勢演算部11は、ワーク移動演算部10dから通知された各搬送機器の位置及び姿勢角を搬送動作上方テーブル5bに格納する。また、3次元姿勢演算部11は、ワーク移動演算部10dから通知された接触判定直方体の重心位置及び姿勢角をワーク姿勢テーブル5dに格納する。
そして、3次元姿勢演算部11は、3次元データ管理部7が記憶する各ワーク、および各搬送機器の形状を読み出す。次に3次元姿勢演算部11は、各ワークの接触判定直方体の重心位置、各搬送機器の重心位置に、読み出した形状を配置したシミュレーション空間を設定する。なお、3次元姿勢演算部11は、シミュレーション空間を設定する際に、各ワーク、及び、各搬送機器がそれぞれ、対応する姿勢角となるようにシミュレーション空間を設定する。そして、3次元姿勢演算部11は、設定したシミュレーション空間の情報を3次元形状表示制御部12に通知する。
3次元形状表示制御部12は、タイムステップごとに、シミュレーション空間を表示する出力装置3が表示する際の画像を生成する。例えば、3次元形状表示制御部12は、シミュレーション空間の情報を3次元姿勢演算部11から受信すると、受信したシミュレーション空間の画像をZバッファ法やスキャンライン等を用いて生成し、生成した画像を出力装置3に送信する。
例えば、制御ソフトウェア実行部8、モータ動作演算部9、シミュレーション演算部10、3次元姿勢演算部11、3次元形状表示制御部12は、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などが挙げられる。
また、管理情報記憶部5、動作パラメータ記憶部6、3次元データ管理部7は、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
次に、図13〜図17を用いて、演算装置1が実行する処理の流れについて説明する。図13は、あるタイムステップにおけるワークと搬送機器との接触を判定する処理の流れを説明するためのフローチャートである。
図13に示すように、接触姿勢演算部10cは、接触判定直方体の形状と、各搬送機器の接触平面の形状とを接触判定直方体テーブル7a及び接触平面テーブル7bから取得する(S101)。そして、接触姿勢演算部10cは、各搬送機器の接触平面上に、ワークの搬送を開始するか否かを判定する搬送可能領域を設定する(S102)。続いて、接触姿勢演算部10cは、各ワークの接触判定直方体の重心位置を算出する(S103)。
そして、接触姿勢演算部10cは、ワークとかかるワークを搬送対象とする搬送機器との組み合わせのうち、未選択の組み合わせがあるか否かを判定する(S104)。未選択の組み合わせがない場合(S104否定)には、処理を終了する。一方、未選択の組み合わせがある場合(S104肯定)には、接触姿勢演算部10cは、未選択の組み合わせを1つ選択する(S105)。そして、接触姿勢演算部10cは、選択した組み合わせに含まれるワークの接触判定直方体の重心位置が、選択した組み合わせに含まれる搬送機器に設定された搬送可能領域に含まれるか否かを判定する(S106)。
そして、接触姿勢演算部10bは、搬送可能領域にワークの接触判定直方体の重心が含まれないと判定した場合(S106否定)には、S104に戻る。一方、搬送可能領域にワークの接触判定直方体の重心が含まれると判定した場合(S106肯定)には、接触姿勢演算部10bは、次の処理を行う。すなわち、接触姿勢演算部10cは、搬送機器の接触面に最も近い接触判定直方体の点を検出する(S107)。続いて、接触姿勢演算部10cは、搬送機器の移動方向にワークの接触判定直方体を押した場合に接触判定直方体が回転する方向を決定する(S108)。次に、接触姿勢演算部10cは、搬送機器に設定されたワークを押し出す面または持ち上げる面である接触面とワークの接触判定直方体の面とが平行となる場合の、接触判定直方体の回転量を計算する(S109)。
そして、接触姿勢演算部10cは、搬送機器が接触判定直方体の面と接触する位置まで移動したか否かを判定する(S110)。搬送機器が接触判定直方体の面と接触する位置まで移動していない場合(S110否定)には、接触姿勢演算部10cは、再び、S110の判定を行う。一方、搬送機器が接触判定直方体の面と接触する位置まで移動した場合(S110肯定)、接触姿勢演算部10cは、ワークの接触判定直方体を決定した方向に計算した回転量だけ回転させる(S111)。そして、接触姿勢演算部10cは、搬送機器とワークとが接触している接触状態であると判定する(S112)。続いて、接触姿勢演算部10cは、接触状態である搬送機器とワークとをワーク移動演算部10dに通知し(S113)、処理を終了する。
図14は、あるタイムステップにおけるワークの位置を演算する処理の流れを説明するためのフローチャートである。図14に示すように、ワーク移動演算部10dは、接触状態である搬送機器とワークとを接触姿勢演算部10cから受信したか否かを判定する(S201)。受信していない場合(S201否定)には、ワーク移動演算部10dは、再び、S201の判定を行う。一方、受信した場合(S201肯定)には、ワーク移動演算部10dは、次の処理を行う。すなわち、ワーク移動演算部10dは、接触状態である搬送機器の移動ベクトルの搬送機器の姿勢が変化した方向の成分の移動量を抽出する(S202)。そして、ワーク移動演算部10dは、抽出した移動量だけ、搬送機器の姿勢が変化した方向にワークを移動させた場合のワークの位置を算出し(S203)、処理を終了する。
図15は、あるタイムステップにおけるワークとリフターとが接触状態である場合にワークの位置を演算する処理の流れを説明するためのフローチャートである。図15に示す処理は、例えば、ワーク移動演算部10dが、リフターとワークとが接触状態であることを接触姿勢演算部10cから受信した場合に実行される。図15に示すように、ワーク移動演算部10dは、ワークをリフターの支え面である接触面の接触位置に移動させた際のワークの高さ方向(Z軸方向)の座標を内部メモリに格納する(S301)。そして、ワーク移動演算部10dは、ワークをリフターの支え面の接触位置に移動させた後、リフターの移動ベクトルのリフターの姿勢が変化した方向の移動量を抽出する(S302)。そして、ワーク移動演算部10dは、ワークをリフターの姿勢が変化した方向に、抽出した移動量だけ移動させ、ワークの位置を演算し(S303)、処理を終了する。
図16は、あるタイムステップにおいて、プッシャーとワークとの接触状態を解除する場合の処理を説明するためのフローチャートである。図16に示す処理は、例えば、プッシャーとワークとが接触状態である場合に、プッシャーの移動ベクトルが示す移動方向が、プッシャーがワークを押し出す方向とは逆の方向であるときに実行される。ワーク移動演算部10dは、プッシャーとワークとの接触状態を解除する(S401)。そして、ワーク移動演算部10dは、移動ベクトルに従ってプッシャーの姿勢を変更し(S402)、処理を終了する。
図17は、あるタイムステップにおいて、リフターとワークとの接触状態を解除する場合の処理を説明するためのフローチャートである。図17に示す処理は、例えば、リフターとワークとが接触状態である場合に、リフターの移動ベクトルが示す移動方向が、リフターがワークを持ち上げる方向とは逆の方向であるときに実行される。図17に示すように、ワーク移動演算部10dは、搬送動作演算部10bから送信されたリフターの位置を示す座標から、リフターの高さ方向の座標を取得する(S501)。そして、ワーク移動演算部10dは、取得したリフターの高さの座標が内部メモリに格納された高さの座標以下であるか否かを判定する(S502)。取得したリフターの高さの座標が内部メモリに格納された高さの座標以下である場合(S502肯定)には、ワーク移動演算部10dは、リフターとワークとの接触状態を解除する(S503)。そして、ワーク移動演算部10dは、移動ベクトルに従ってリフターの姿勢を変更し(S504)、処理を終了する。
一方、取得したリフターの高さの座標が内部メモリに格納された高さの座標以下でない場合(S502否定)には、ワーク移動演算部10dは、リフターの移動ベクトルのリフターの姿勢が変化した方向の移動量を抽出する(S505)。そして、ワーク移動演算部10dは、ワークをリフターの姿勢が変化した方向に、抽出した移動量だけ移動させ、ワークの位置を演算し(S506)、処理を終了する。
上述したように、演算装置1は、次の処理を行う。すなわち、演算装置1は、3次元シミュレーション空間上にワーク40と、プッシャー30の押し出し面31で押すことでワーク40を移動させる動作をするプッシャー30とが配置され、プッシャー30がワーク40を搬送するシミュレーション演算を実行する。また、演算装置1は、3次元シミュレーション空間上にワーク70と、リフター60の支え面61により下から支えることでワーク70を上方に上げる動作をするリフター60とが配置され、リフター60がワーク70を搬送するシミュレーション演算を実行する。そして、演算装置1は、かかるシミュレーション演算を実行する際に、プッシャー30の押し出し面31に設定された搬送可能領域内に、ワーク40の重心が存在することを検出すると、次の処理を行う。演算装置1は、ワーク40をプッシャー30の押し出し面31の接触位置に移動させる。また、演算装置1は、かかるシミュレーション演算を実行する際に、リフター60の支え面61に設定された搬送可能領域内に、ワーク70の重心が存在することを検出すると、次の処理を行う。演算装置1は、ワーク70をリフター60の支え面61の接触位置に移動させる。
よって、演算装置1は、ワーク40、70に対してプッシャー30、リフター60がめり込むことなく、プッシャーやリフターがワークを搬送する実際の状況と同様の状況でワーク40、70の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度が低下することを抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
また、演算装置1によれば、ワーク40がプッシャー30によって搬送される際の姿勢が、プッシャーがワークを実際に搬送する際のワークの姿勢と同様となる。また、演算装置1によれば、ワーク70がリフター60によって搬送される際の姿勢が、リフターがワークを実際に搬送する際のワークの姿勢と同様となる。そのため、演算装置1は、プッシャーやリフターがワークを搬送する実際の状況と同様の状況でワーク40、70の搬送状態をシミュレートすることができる。それゆえ、演算装置1によれば、シミュレーションにおいて演算されるワークの位置の精度が低下することを抑制することができる。したがって、演算装置1によれば、制御プログラムの検証を精度良く行うことができる。
また、演算装置1は、ワークと、ワークを搬送している搬送機器とが接触した場合に、搬送機器の移動方向の成分のうち、搬送機器の姿勢が変化した方向の成分の移動量を抽出し、抽出した移動量の分だけワークを移動させる。これにより、ワークと搬送機器とを別々にシミュレートすることができる。ここで、ワークの面をすべりながら搬送機器がワークを搬送するような場合に、接触状態にあるワークと搬送機器とを一体化してしまうと、搬送機器がワークの面をすべることができない。そのため、接触状態にあるワークと搬送機器とを一体化するようなシミュレーションでは、精度良くワークの搬送状態をシミュレートすることができない場合がある。しかしながら、演算装置1は、搬送機器の移動方向の成分のうち、搬送機器の姿勢が変化した方向の成分の移動量を抽出し、抽出した移動量の分だけワークを移動させる。このため、演算装置1によれば、ワークの面をすべりながら搬送機器がワークを搬送するような場合であってもシミュレーションを精度良く行うことができる。
また、演算装置1は、ワークをプッシャーの押し出し面の接触位置に移動させた後、プッシャーがワークを押し出す方向に移動する場合は、プッシャーとワークとは接触状態のままとしてシミュレーション演算を継続する。また、演算装置1は、プッシャーがワークを押し出す方向とは逆の方向に移動する場合は、逆方向に移動する際にプッシャーとワークとの接触状態を解除し、プッシャーとワークとを別の物体と判定する。
また、演算装置1は、ワークをリフターの支え面の接触位置に移動させた際の高さ座標情報を記憶部に格納する。そして、演算装置1は、ワークをリフターの支え面の接触位置に移動させた後、リフターがワークを持ち上げる方向に移動する場合は、リフターとワークとは接触状態のままとしてシミュレーション演算を継続する。また、演算装置1は、リフターがワークを持ち上げる方向とは逆の方向に移動する場合は、リフターの高さが記憶部に格納された高さになった際にリフターとワークとの接触状態を解除し、リフターとワークとを別の物体と判定する。
また、演算装置1は、ワークに外接する接触判定直方体を用いて、ワークの回転中心、およびワークの回転方向を決定する。このため、演算装置1は、演算量を増加させることなく、ワークの回転を行うことができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では他の実施例を説明する。
[接触判定直方体について]
上述した演算装置1は、各ワークに外接する直方体を接触判定直方体とした。しかし、実施例はこれに限定されるものではない。例えば、演算装置1は、入力装置2から、利用者が任意に設定した接触判定直方体のポリゴンデータを受け付けて、受け付けたポリゴンデータを接触判定直方体テーブル6aに格納することができる。
[ワーク、および搬送機器について]
実施例1で図示したワークおよび各種搬送機器は、あくまで一例であり、演算装置1は、任意の形状を有するワーク、および任意の形状を有する各搬送機器についてシミュレーションを実行することが可能である。また、上述した各種搬送機器は、一例であり、演算装置1は、任意の機能を有する搬送機器のシミュレーションを行うことができる。
[プログラム]
ところで、実施例1に係る演算装置1は、ハードウェアを利用して各種の処理を実現する場合を説明した。しかし、実施例はこれに限定されるものではなく、あらかじめ用意されたプログラムを演算装置1が有するコンピュータで実行することによって実現するようにしてもよい。そこで、以下では、図18を用いて、実施例に示した演算装置1と同様の機能を有するプログラムを実行するコンピュータの一例を説明する。図18は、シミュレートプログラムを実行するコンピュータの一例を説明するための図である。
図18に例示されたコンピュータ100は、ROM(Read Only Memory)110、HDD(Hard Disk Drive)120、RAM(Random Access Memory)130、CPU(Central Processing Unit)140がバス160で接続される。また、図18に例示されたコンピュータ100は、データを送受信するためのI/O(Input Output)150を有する。
HDD120には、シミュレートプログラム121があらかじめ保持される。CPU140がシミュレートプログラム121をHDD120から読み出して実行することによって、図18に示す例では、シミュレートプログラム121は、シミュレートプロセス141として機能するようになる。なお、シミュレートプロセス141は、先の図1に示した制御ソフトウェア実行部8、モータ動作演算部9、シミュレーション演算部10、3次元姿勢演算部11、3次元形状表示制御部12と同様の機能を発揮する。
なお、本実施例で説明したシミュレートプログラム121は、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM(Compact Disc Read Only Memory)、MO(Magneto Optical Disc)、DVD(Digital Versatile Disc)などのコンピュータで読取可能な記録媒体に記録される。また、このプログラムは、コンピュータによって記録媒体から読み出されることによって実行することもできる。