以下、本開示の実施の形態を図面に基づいて詳細に説明する。なお、以下に説明する種々の実施形態において、同様の要素には同じ符号を付し、重複する説明を省略する。まず、図1及び図2を参照して、一実施形態に係るロボットシステム10について説明する。ロボットシステム10は、ロボット12、視覚センサ14、及び制御装置16を備える。
本実施形態においては、ロボット12は、垂直多関節ロボットであって、ロボットベース18、旋回胴20、下腕部22、上腕部24、手首部26、及びエンドエフェクタ28を有する。ロボットベース18は、作業セルの床又は無人搬送機(AGV)の上に固定されている。旋回胴20は、鉛直軸周りに旋回可能となるように、ロボットベース18に設けられている。
下腕部22は、その基端部が旋回胴20に水平軸周りに回動可能に設けられ、上腕部24は、その基端部が下腕部22の先端部に回動可能に設けられている。手首部26は、互いに直交する2つの軸の周りに回動可能となるように上腕部24の先端部に設けられた手首ベース26aと、手首軸A1の周りに回動可能となるように該手首ベース26aに設けられた手首フランジ26bとを有する。
エンドエフェクタ28は、手首フランジ26bに着脱可能に取り付けられている。エンドエフェクタ28は、例えば、ワーク200を把持可能なロボットハンド、ワーク200を溶接する溶接トーチ、又は、ワーク200をレーザ加工するレーザ加工ヘッド等であって、ワーク200に対して所定の作業(ワークハンドリング、溶接、又はレーザ加工等)を行う。
ロボット12の各コンポーネント(ロボットベース18、旋回胴20、下腕部22、上腕部24、手首部26)には、サーボモータ30(図2)が設けられている。これらサーボモータ30は、制御装置16からの指令に応じて、ロボット12の各駆動軸を回動させる。その結果、ロボット12は、エンドエフェクタ28を移動させて任意の位置に配置することができる。
図1に示すように、ロボット12には、ロボット座標系C1、及びツール座標系C2が設定されている。ロボット座標系C1は、ロボット12の各可動コンポーネント(すなわち、旋回胴20、下腕部22、上腕部24、手首ベース26a、手首部26、及びエンドエフェクタ28)の動作を制御するための制御座標系Cである。本実施形態においては、ロボット座標系C1は、その原点がロボットベース18の中心に配置され、そのz軸が旋回胴20の旋回軸と平行となる(具体的には、一致する)ように、ロボットベース18に対して固定されている。
一方、ツール座標系C2は、作業時にロボット12を制御するためにロボット座標系C1におけるエンドエフェクタ28の位置を規定する制御座標系Cである。本実施形態においては、ツール座標系C2は、その原点(いわゆる、TCP)が、エンドエフェクタ28の作業位置(すなわち、ワーク把持位置、溶接位置、又はレーザ光出射口)に配置され、そのz軸が、手首軸A1と平行となる(具体的には、一致する)ように、エンドエフェクタ28に対して設定されている。
エンドエフェクタ28を移動させるとき、制御装置16は、ロボット座標系C1においてツール座標系C2を設定し、設定したツール座標系C2によって表される位置にエンドエフェクタ28を位置決めするように、ロボット12の各サーボモータ30への指令を生成する。こうして、制御装置16は、ロボット座標系C1における任意の位置にエンドエフェクタ28を位置決めできる。なお、本稿において「位置」とは、位置及び姿勢を表す場合がある。
視覚センサ14は、ワーク200の画像データ140(図15)を撮像する。本実施形態においては、視覚センサ14は、例えば、撮像センサ(CMOS、CCD等)、及び該撮像センサへ被写体像を導光する光学レンズ(コリメートレンズ、フォーカスレンズ等)を有する3次元視覚センサである。視覚センサ14は、ロボットの可動コンポーネント(例えば、エンドエフェクタ28又は手首フランジ26b)に対して固定され、ロボット12によって移動されてもよい。
代替的には、視覚センサ14は、その視野内にワーク200を収めることが可能な位置に定点固定されてもよい。視覚センサ14は、光軸A2に沿って被写体(つまり、ワーク200)を撮像するとともに、該被写体までの距離dを測定するように構成されている。視覚センサ14は、撮像した画像データ140を、制御装置16に供給する。
制御装置16は、ロボット12及び視覚センサ14の動作を制御する。図2に示すように、制御装置16は、プロセッサ32、メモリ34、I/Oインターフェース36、表示装置38、及び入力装置40等を有するコンピュータである。プロセッサ32は、CPU又はGPU等を有し、メモリ34、I/Oインターフェース36、表示装置38、及び入力装置40とバス42を介して通信可能に接続され、これらコンポーネントと通信しつつ、後述する各種機能を実現するための演算処理を行う。
メモリ34は、RAM又はROM等を有し、各種データを一時的又は恒久的に記憶する。メモリ34は、揮発性メモリ、不揮発性メモリ、磁気記憶媒体、又は光記憶媒体等、コンピュータが読取可能な非一時的記憶媒体から構成され得る。I/Oインターフェース36は、例えば、イーサネット(登録商標)ポート、USBポート、光ファイバコネクタ、又はHDMI(登録商標)端子を有し、プロセッサ32からの指令の下、外部機器との間でデータを有線又は無線で通信する。ロボット12の各サーボモータ30、及び視覚センサ14は、I/Oインターフェース36に通信可能に接続されている。
表示装置38は、液晶ディスプレイ又は有機ELディスプレイ等を有し、プロセッサ32からの指令の下、各種データを視認可能に表示する。入力装置40は、押しボタン、スイッチ、キーボード、マウス、又はタッチパネル等を有し、オペレータからデータの入力を受け付ける。なお、表示装置38及び入力装置40は、制御装置16の筐体に一体に組み込まれてもよいし、又は、制御装置16の筐体とは別体の1つのコンピュータ(PC等)として、I/Oインターフェース36に接続されてもよい。
以下、エンドエフェクタ28がロボットハンドであり、プロセッサ32が、ロボット12に実行させる所定の作業として、容器B内にバラ積みにされたワーク200を、エンドエフェクタ28によって、所定の作業位置Pw(つまり、把持位置)で把持して取り上げるワークハンドリングを行う場合について説明する。
オペレータは、この作業(つまり、ワークハンドリング)を実行するための動作プログラムOPを構築するために、該動作プログラムOPの各種パラメータを設定する作業を行う。動作プログラムOPは、ワーク200の画像データ140を画像処理して該画像データ140に写るワーク200を検出する検出プログラムOP1等のコンピュータプログラムを含む。具体的には、オペレータは、ワーク200に対して作業(ワークハンドリング)を行う作業位置Pw(把持位置)を教示する教示プロセスを実行する。
図3に、作業対象となるワーク200の一例を示す。本実施形態においては、ワーク200は、中心軸A3を有する円筒状の部材であって、シャフト202及びフランジ204を有する。ワーク200は、中心軸A3を基準として回転対称となる全体形状を有している。オペレータは、教示プロセスのために、ワーク200の全体形状をモデル化したワークモデル200Mを作成する。ワークモデル200Mは、例えば3次元CADモデルであって、CAD装置(図示せず)を用いてオペレータによって作成される。
なお、以下の説明において、ある部材XX(例えば、ロボット12)のモデルを、部材モデルXXM(ロボットモデル12M)として言及する。したがって、ワークモデル200Mは、シャフトモデル202M、及びフランジモデル204Mを有する。ワークモデル200Mは、ワーク200の全体形状(つまり、ワーク200の全ての面及びエッジ等)を表している。図3に示すように、ワークモデル200Mには、ワーク座標系C3が設定される。
ワーク座標系C3は、作業時にロボット12を制御するために、作業対象のワーク200のロボット座標系C1における位置を規定する制御座標系Cである。本実施形態においては、ワーク座標系C3は、その原点がワークモデル200M(すなわち、ワーク200)の重心に配置され、そのz軸が、中心軸A3と平行となる(具体的には、一致する)ように、ワークモデル200Mに対して設定されている。なお、ワーク座標系C3の原点は、CAD装置でワークモデル200Mを作成するときに基準とするCAD原点であってもよい。
CAD装置によって作成されたワークモデル200Mは、制御装置16にダウンロードされ、メモリ34に記憶される。ワークモデル200Mのデータ(又は、データファイル)には、該ワークモデル200Mを識別するための識別情報Is(例えば、モデル名、ファイル名、又は識別コードを表す文字又は記号)が付帯される。
プロセッサ32は、教示プロセスの開始後、図4に示す教示設定画像データ100を生成し、表示装置38に表示する。教示設定画像データ100は、作業を実行するための動作プログラムOPと、ロボット12のエンドエフェクタとを選択するためのグラフィカルユーザインタフェース(GUI)である。具体的には、教示設定画像データ100は、プログラム選択画像102、ワーク情報画像104、エンドエフェクタ選択画像106、及び、モデル読込ボタン画像108を含む。
プログラム選択画像102は、予め用意された複数の動作プログラムOPの中から、作業に用いる動作プログラムOPを選択するためのGUIである。例えば、オペレータが、入力装置40を操作してプログラム選択画像102を画像上でクリックすると、メモリ34に記憶されている種々の動作プログラムOPの一覧(例えば、プログラム名又はプログラム識別コード等の一覧表)が表示される。
オペレータは、表示された動作プログラムOPの中から、作業時に用いる動作プログラムOPを選択できるようになっている。以下、種々の動作プログラムOPのうち、動作プログラムOPA(図4に示す「動作プログラムA」)が選択され、該動作プログラムOPAのパラメータを設定する場合について説明する。
ワーク情報画像104は、プログラム選択画像102で選択された動作プログラムOPAに関連付けて登録されているワークモデルを表示する。図4に示す例では、動作プログラムOPAに関連付けて、図3に示すワーク200が登録されている例を示している。一方、エンドエフェクタ選択画像106は、予め用意された複数のタイプのエンドエフェクタの中から、実際の作業に用いるエンドエフェクタを選択するためのGUIである。
例えば、オペレータが、入力装置40を操作してエンドエフェクタ選択画像106を画像上でクリックすると、メモリ34に記憶されている種々のタイプのエンドエフェクタの一覧(例えば、型名、型番又は識別コード等の一覧表)が表示される。オペレータは、表示された種々のエンドエフェクタの中から、作業時に用いるエンドエフェクタを選択できるようになっている。以下、エンドエフェクタとして、図1に示すエンドエフェクタ28が選択された場合について説明する。
モデル読込ボタン画像108は、作業位置Pwの教示のために、ワークモデル200Mと、ロボット12をモデル化したロボットモデル12Mと、制御座標系Cとを読み込んで仮想空間VS内に配置するためのGUIである。プロセッサ32は、入力装置40を通してオペレータからモデル読込ボタン画像108をクリック操作する入力を受け付けると、ワークモデル200M、及びロボットモデル12Mを、制御座標系Cとしてのロボット座標系C1、ツール座標系C2、及びワーク座標系C3ととともに、仮想空間VS(図5)に配置する。
プロセッサ32は、プログラム選択画像102で選択された動作プログラムOPAに関連付けて登録されているワークモデル200Mと、エンドエフェクタ選択画像106で選択されたエンドエフェクタ28のエンドエフェクタモデル28Mを有するロボットモデル12Mとを、ロボット座標系C1、ツール座標系C2、及びワーク座標系C3ととともに、仮想空間VSに配置する。
プロセッサ32は、この仮想空間VSにおいて、実機のロボット12と同様に、ロボット座標系C1をロボットベースモデル18Mに設定するとともに、ツール座標系C2をエンドエフェクタモデル28Mに設定する。なお、プロセッサ32は、エンドエフェクタ選択画像106で選択されたエンドエフェクタモデル28Mのみを仮想空間VSに配置する一方、ロボットベースモデル18M、旋回胴モデル20M、下腕部モデル22M、上腕部モデル24M、及び手首部モデル26Mを仮想空間VSに配置しなくてもよい。また、プロセッサ32(モデル配置部52)は、ワークモデル200Mに関連付けて登録されているワーク座標系C3の設定情報を参照し、ワーク座標系C3をワークモデル200Mに設定する。例えば、ワーク座標系C3の原点は、ワークモデル200Mの重心(又は、CAD原点)に配置するように設定される。
このように、本実施形態においては、プロセッサ32は、ワークモデル200M、ロボットモデル12M、及び制御座標系C(具体的には、ロボット座標系C1、ツール座標系C2、ワーク座標系C3)を仮想空間VSに配置するモデル配置部52(図2)として機能する。なお、プロセッサ32(モデル配置部52)は、仮想空間VSにワークモデル200Mを配置したときに、ワーク座標系C3の原点を、該ワークモデル200Mの重心(又は、CAD原点)として自動で計算した上で、該ワーク座標系C3を仮想空間VSに配置してもよい。
次いで、プロセッサ32は、ワークモデル200M、ロボットモデル12M、及び制御座標系C(ロボット座標系C1、ツール座標系C2)が配置された仮想空間VSの画像データ110を生成し、表示装置38に表示する。画像データ110の一例を、図5に示す。このように、本実施形態においては、プロセッサ32は、仮想空間VSの画像データ110を生成する画像生成部54(図2)として機能する。
本実施形態においては、オペレータは、入力装置40を操作して、仮想空間VS内でロボットモデル12Mを模擬的に移動させつつ、該ワークモデル200Mに対して作業位置Pwを教示する。プロセッサ32は、仮想空間VS内でワークモデル200Mに対して作業位置Pwを教示するための入力Fを受け付ける。
具体的には、プロセッサ32は、入力Fとして、仮想空間VSでロボットモデル12M、及び制御座標系C(ロボット座標系C1、ツール座標系C2、ワーク座標系C3)を模擬的に移動させる入力Fmを受け付ける。ここで、プロセッサ32は、画像生成部54として機能して、画像データ110に、移動選択ボタン画像112をさらに表示する。
移動選択ボタン画像112は、エンドエフェクタモデル28Mを、ツール座標系C2とともに、仮想空間VS内で並進移動させるか、又は回転移動させるかを選択するためのGUIである。オペレータは、入力装置40を操作して、移動選択ボタン画像112を画像上でクリックすることで、並進移動又は回転移動を選択可能となっている。
図5に示す画像データ110においては、「並進移動」が選択されている。この場合、オペレータは、入力装置40を操作して、ロボットモデル12M(具体的には、エンドエフェクタモデル28M)及びツール座標系C2を仮想空間VS内で模擬的に並進移動させることができるようになっている。移動選択ボタン画像112によって「並進移動」が選択されているとき、プロセッサ32は、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を並進移動させるための入力Fmtを受け付け可能となる。
一例として、オペレータは、エンドエフェクタモデル28M及びツール座標系C2を並進移動させるために、入力装置40を操作して、仮想空間VS内でエンドエフェクタモデル28M(又は、ツール座標系C2)をドラッグアンドドロップする入力Fmt1を与える。プロセッサ32は、該入力Fmt1を受け付け、仮想空間VS内でロボットモデル12Mの可動コンポーネントモデル(具体的には、旋回胴モデル20M、下腕部モデル22M、上腕部モデル24M、手首部モデル26M)を模擬的に動作させて、エンドエフェクタモデル28M及びツール座標系C2を仮想空間VS内で並進移動させる。
他の例として、オペレータは、仮想空間VS内でエンドエフェクタモデル28M(つまり、ツール座標系C2の原点)を変位させる変位量δを指定する入力Fmt2を与える。例えば、オペレータは、変位量δとして、ロボット座標系C1のx軸方向の変位量δx、y軸方向の変位量δy、z軸方向の変位量δzを入力してもよい。プロセッサ32は、入力Fmt2を受け付け、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を、変位量δ(δx、δy、δz)だけ並進移動させる。
さらに他の例として、オペレータは、ロボット座標系C1におけるツール座標系C2の原点の座標Q(x,y,z)を指定する入力Fmt3を与える。プロセッサ32は、入力Fmt3を受け付け、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を、座標Q(x,y,z)の位置まで並進移動させる。なお、プロセッサ32は、画像生成部54として機能し、上述した変位量δ又は座標Qを入力するための画像を、画像データ110にさらに表示してもよい。
こうして、プロセッサ32は、オペレータから並進移動のための入力Fmtを受け付け、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を模擬的に並進移動させる。このとき、エンドエフェクタモデル28Mの姿勢は変化しない。また、エンドエフェクタモデル28Mの並進移動とともに、ツール座標系C2の原点が変位する一方、ツール座標系C2の各軸方向は変化しない。この並進移動により、図6に示すように、エンドエフェクタモデル28M及びツール座標系C2を、ワークモデル200Mに対して所望の位置に配置させることができる。
一方、オペレータが移動選択ボタン画像112をクリック操作して「回転移動」を選択した場合、プロセッサ32は、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を回転移動させるための入力Fmrを受け付け可能となる。本実施形態においては、プロセッサ32は、「回転移動」が選択されると、画像生成部54として機能して、画像データ110において回転カーソル画像114をツール座標系C2に重畳表示する。
回転カーソル画像114の一例を、図7に示す。回転カーソル画像114は、仮想空間VS内でエンドエフェクタモデル28M及びツール座標系C2を回転移動させる方向を指定するためのGUIである。具体的には、回転カーソル画像114は、x軸回転リング114a、y軸回転リング114b、及びz軸回転リング114cを有する。x軸回転リング114aは、エンドエフェクタモデル28M及びツール座標系C2を、移動前のツール座標系C2のx軸周りに回転移動させるためのGUIである。
オペレータが入力装置40を操作してx軸回転リング114aを画像上で操作(クリック又はドラッグアンドドロップ)する入力Fmr1を与えると、プロセッサ32は、入力Fmr1を受け付けて、仮想空間VS内で、エンドエフェクタモデル28M及びツール座標系C2を、移動前のツール座標系C2のx軸周りに回転させる。一方、オペレータがy軸回転リング114bを画像上で操作する入力Fmr2を与えると、プロセッサ32は、入力Fmr2を受け付けて、エンドエフェクタモデル28M及びツール座標系C2を、移動前のツール座標系C2のy軸周りに回転させる。
また、オペレータがz軸回転リング114cを画像上で操作する入力Fmr3を与えると、プロセッサ32は、入力Fmr3を受け付けて、エンドエフェクタモデル28M及びツール座標系C2を、移動前のツール座標系C2のz軸周りに回転させる。このような回転移動により、図8に示すように、エンドエフェクタモデル28M及びツール座標系C2の姿勢を、ワークモデル200Mに対して任意に変化させることができる。この回転移動によって、エンドエフェクタモデル28Mの姿勢が変化する一方、エンドエフェクタモデル28Mの位置は変位しない。また、エンドエフェクタモデル28Mの回転移動とともに、ツール座標系C2の各軸の方向は変化する一方、原点位置は変位しない。
オペレータは、上述のようにエンドエフェクタモデル28M及びツール座標系C2を仮想空間VS内で模擬的に移動させることで、該エンドエフェクタモデル28M及び該ツール座標系C2を、ワークモデル200Mに対して所望の作業位置Pwに配置させることができる。そして、オペレータは、入力装置40を操作して、作業位置Pwを記憶するための入力Frを与える。プロセッサ32は、入力Frを受け付けると、作業位置Pwをメモリ34に記憶する。
こうして、作業位置Pwがワークモデル200Mに対して教示される。このように、本実施形態においては、プロセッサ32は、オペレータから、作業位置Pwを教示するための入力F(入力Fm及びFr)を受け付けて、該入力Fに応じて、作業位置Pwをワークモデル200Mに対して教示する。したがって、プロセッサ32は、作業位置Pwを教示するための入力Fを受け付ける入力受付部56(図2)として機能する。
プロセッサ32は、オペレータから上述の入力Frを受け付けると、この時点でのツール座標系C2の、ワーク座標系C3における座標Qw(xw,yw,zw,ww,pw,rw)を取得する。この座標Qwは、ワークモデル200Mに対して教示された作業位置Pw(換言すれば、作業実行時のエンドエフェクタ28の位置及び姿勢)を表し、ワークモデル200M(ワーク座標系C3)と作業位置Pwとの位置関係を示すデータとなる。より具体的には、座標Qwのうち、座標(xw,yw,zw)は、ワーク座標系C3(つまり、ワークモデル200M)に対するツール座標系C2(つまり、エンドエフェクタモデル28M)の位置を表し、座標(ww,pw,rw)は、ワーク座標系C3に対するツール座標系C2の姿勢(いわゆる、ヨー、ピッチ、ロール)を表す。
プロセッサ32は、取得した座標Qwを、ワークモデル200Mと作業位置Pwとの位置関係を示す教示位置Pwtとして、メモリ34に記憶する。ここで、本実施形態においては、プロセッサ32は、教示位置Pwtのデータを、ワークモデル200M(例えば、識別情報Is)と関連付けて、メモリ34に記憶する。こうして、教示位置Pwtとワークモデル200Mとは、互いに関連付けられる。
プロセッサ32は、実際の作業時に、上述のように記憶した教示位置Pwtを用いて、ワーク200に対する作業位置Pwを演算により求める。実際の作業において、プロセッサ32は、ワークモデル200Mに基づいて生成されるサーチモデル200Sを用いて、視覚センサ14がワーク200を撮像した画像データ140(図15)から、該画像データ140に写るワーク200を探索する。なお、サーチモデル200Sについては、後述する。
このように、本実施形態においては、プロセッサ32は、ワークモデル200Mに対して教示された作業位置Pwを、教示位置Pwt(具体的には、座標Qw)として、ワークモデル200Mと関連付けて記憶する位置記憶部58(図2)として機能する。なお、プロセッサ32は、教示位置PwtのためのデータベースDBを生成し、取得した教示位置Pwtのデータ(座標Qw)を、該データベースDBに格納してもよい。このデータベースDBは、ワークモデル200M(識別情報Is)と関連付けられて、メモリ34に記憶され得る。このような教示プロセスの結果、実際の作業に使用するエンドエフェクタ28(エンドエフェクタモデル28M)の情報と、教示された教示位置Pwtのデータ(座標Qw)とが登録されることになる。
以上のように、本実施形態においては、プロセッサ32は、モデル配置部52、画像生成部54、入力受付部56、及び位置記憶部58として機能して、作業位置Pwを教示する。したがって、モデル配置部52、画像生成部54、入力受付部56、及び位置記憶部58は、作業位置Pwを教示する装置50(図2)を構成する。
この装置50においては、入力受付部56が、ワークモデル200Mに対して作業位置Pwを教示するための入力F(Fm、Fr)を受け付け、位置記憶部58が、入力Fに応じて教示された作業位置Pwを、ワークモデル200M(又は、ワーク座標系C3)と作業位置Pwとの位置関係を示す教示位置Pwt(座標Qw)として、ワークモデル200Mと関連付けて記憶する。そして、実際の作業において、このように記憶した教示位置Pwtを用いて、サーチモデル200Sによって画像データ140から探索されたワーク200に対する作業位置Pwが演算される。
この構成によれば、オペレータは、サーチモデル200Sではなく、ワークモデル200Mに対して作業位置Pw(教示位置Pwt)を教示することができることから、後述するサーチモデル200Sを生成する毎に、該サーチモデル200Sに作業位置Pwを教示する必要がなくなる。よって、複数の姿勢のサーチモデル200Sを生成した場合においても、これらのサーチモデル200Sの間で作業位置Pwを共有できる。これにより、作業位置Pwを教示する作業を、大幅に簡単化できる。
また、装置50においては、モデル配置部52は、ロボットモデル12M及び制御座標系C(ロボット座標系C1、ツール座標系C2、ワーク座標系C3)の少なくとも一方と、ワークモデル200Mとを仮想空間VSに配置し、画像生成部54は、該仮想空間VSの画像データ110を生成する(図5)。そして、入力受付部56は、教示するための入力Fとして、仮想空間VSでロボットモデル12M又は制御座標系Cを模擬的に移動させる入力Fmを受け付ける。この構成によれば、オペレータは、仮想空間VSの画像データ110を視認しつつ、ロボットモデル12M(具体的には、エンドエフェクタモデル28M)又は制御座標系C(具体的には、ツール座標系C2)を模擬的に操作することで、所望の作業位置Pwを容易に教示することができる。
また、装置50においては、入力受付部56は、入力Fmとして、エンドエフェクタモデル28Mを、該ツール座標系C2の原点が変位するように並進移動させる入力Fmt(Fmt1、Fmt2、Fmt3)、又は、エンドエフェクタモデル28Mを、ツール座標系C2の軸(x軸、y軸又はz軸)の周りに回転移動させる入力Fmr(Fmr1、Fmr2、Fmr3)を受け付ける。この構成によれば、オペレータは、仮想空間VS内でエンドエフェクタモデル28Mを、ツール座標系C2とともに、簡単な操作で、より多様に操作することができる。
また、装置50においては、画像生成部54は、並進移動又は回転移動を選択するための移動選択ボタン画像112を画像データ110にさらに表示する。そして、入力受付部56は、移動選択ボタン画像112によって並進移動が選択されているときは、並進移動させる入力Fmtを受け付け可能となる一方、移動選択ボタン画像112によって回転移動が選択されているときは、回転移動させる入力Fmrを受け付け可能となる。この構成によれば、オペレータによる仮想空間VS内でのエンドエフェクタモデル28M及びツール座標系C2の操作性を、より向上させることができる。
なお、オペレータは、上述の教示プロセスにおいて、1つのワークモデル200Mに対し、複数の作業位置Pw1、Pw2、・・・Pwmを教示してもよい。この場合、プロセッサ32は、教示プロセスにおいて、入力受付部56として機能し、複数の作業位置Pwmを教示するための入力F(Fm、Fr)を受け付ける。そして、プロセッサ32は、位置記憶部58として機能して、複数の教示位置Pwt1、Pwt2、・・・Pwtm(つまり、座標Qw1(xw1,yw1,zw1,ww1,pw1,rw1)、Qw2(xw2,yw2,zw2,ww2,pw2,rw2)、・・・Qwm(xwm,ywm,zwm,wwm,pwm,rwm))を、ワークモデル200Mと関連付けて、メモリ34にそれぞれ記憶する。
この場合において、プロセッサ32は、入力受付部56として機能して、教示した複数の作業位置Pwtm(m=1,2,3,・・・)の優先順位を定める入力Gをさらに受け付けてもよい。例えば、オペレータは、教示位置Pwtmが記憶された後、入力装置40を操作して、記憶された各々の教示位置Pwtmに対し、「高優先度」、「中優先度」、又は「低優先度」というラベル情報によって示される優先順位を付与する入力を与える。プロセッサ32は、優先順位を示すラベル情報を、メモリ34に記憶した教示位置Pwtmに付帯して記憶する。これにより、オペレータは、複数の作業位置Pwtm(つまり、複数の教示位置Pwtm)に対して、所望の優先順位を付与することができる。
なお、上述の実施形態においては、プロセッサ32は、モデル配置部52として機能して、ロボットモデル12Mと、制御座標系Cとしてのロボット座標系C1、ツール座標系C2、及びワーク座標系C3とを、ワークモデル200Mとともに仮想空間VSに配置する場合について述べた。しかしながら、これに限らず、プロセッサ32は、ロボットモデル12M又は制御座標系Cを仮想空間VSに配置しなくてもよい。
例えば、プロセッサ32は、制御座標系Cとしてのツール座標系C2のみを仮想空間VSに配置してもよい。この場合、プロセッサ32は、画像生成部54として機能し、ツール座標系C2のみを配置した仮想空間VSの画像データ110を生成する。また、プロセッサ32は、入力受付部56として機能して、仮想空間VSにおいてツール座標系C2を模擬的に移動させる入力Fmをオペレータから受け付ける。
代替的には、プロセッサ32は、モデル配置部52として機能して、制御座標系Cを仮想空間VSに配置せずに、ロボットモデル12M(例えば、エンドエフェクタモデル28M)のみを仮想空間VSに配置してもよい。この場合、プロセッサ32は、画像生成部54として、ロボットモデル12M(エンドエフェクタモデル28M)のみを配置した仮想空間VSの画像データ110を生成する。
このように、プロセッサ32(モデル配置部52)は、ロボットモデル12M及び制御座標系Cの少なくとも一方と、ワークモデル200Mとを仮想空間VSに配置する。なお、プロセッサ32は、モデル配置部52として、ロボットモデル12M、ロボット座標系C1、ツール座標系C2、ワーク座標系C3、及びワークモデル200Mを仮想空間VSに配置する一方、画像生成部54として、ツール座標系C2のみを表示した仮想空間VSの画像データ110を生成してもよい。
また、上述の本実施形態においては、プロセッサ32(画像生成部54)が、移動選択ボタン画像112で「回転移動」が選択されているときに、回転カーソル画像114(図7、図8)を表示し、該回転カーソル画像114への操作に応じて、ロボットモデル12Mを回転移動させる場合について述べた。しかしながら、プロセッサ32は、回転カーソル画像114を表示することなく、例えば、エンドエフェクタモデル28Mを回転させる回転量と、回転中心とする制御座標系Cの軸とを指定する入力を受け付けてもよい。
また、画像データ110から移動選択ボタン画像112を省略してもよい。この場合において、プロセッサ32は、オペレータによる入力装置40への所定のコマンド入力(例えば、ファンクションキー入力等)に応じて、並進移動と回転移動とを切り替えるように構成されてもよい。なお、装置50から、モデル配置部52及び画像生成部54を省略することもできる。例えば、オペレータは、図5に示すような画像データ110を視認することなく、作業位置Pwの座標Qwを手動で入力してもよい。また、ワークモデル200Mは、2次元CADモデルであってもよい。なお、プロセッサ32は、上述した教示プロセスを、コンピュータプログラムPG1に従って実行してもよい。このコンピュータプログラムPG1は、メモリ34に予め記憶され得る。
次に、図9を参照して、ロボットシステム10の他の機能について説明する。本実施形態においては、プロセッサ32は、ワーク200を撮像した画像データ140から該ワーク200を探索するためのサーチモデル200Sを生成するサーチモデル生成プロセスを実行する。以下、上述の動作プログラムOPAを実行して作業を行うときに用いるサーチモデル200Sを生成する場合について説明する。
サーチモデル生成プロセスの開始後、プロセッサ32は、図10に示すサーチモデル設定画像データ120を生成し、表示装置38に表示する。サーチモデル設定画像データ120は、オペレータによるサーチモデル200Sの生成作業を補助するためのGUIである。具体的には、サーチモデル設定画像データ120は、位置入力画像122、124及び126と、姿勢入力画像128、130及び132と、姿勢間隔入力画像134と、モデル読込ボタン画像136とを含む。
モデル読込ボタン画像136は、メモリ34に記憶された様々なワークモデルの中から、実際の作業対象とするワークのワークモデルを選択するためのGUIである。例えば、オペレータが、入力装置40を操作してモデル読込ボタン画像136を画像上でクリックすると、メモリ34に記憶されている種々のワークモデルの一覧(例えば、ファイル名、モデル名、又はワークの識別コード等の一覧表)が表示される。オペレータは、表示されたワークモデルの中から、作業対象とするワークのワークモデルを選択できるようになっている。本実施形態においては、ワークモデルとして、図3に示すワークモデル200Mが選択されたものとする。
位置入力画像122、124及び126は、ワーク座標系C3の原点位置を設定するためのものである。具体的には、位置入力画像122、124及び126は、それぞれ、初期設定としてのワーク座標系C3の原点(例えば、ワークモデルの重心又はCAD原点)を、該ワーク座標系C3のx軸方向、y軸方向、及びz軸方向へ変位させる変位量を入力可能となっている。
姿勢入力画像128、130及び132は、ワーク座標系C3の姿勢(つまり、各軸の方向)を設定するためのものである。具体的には、姿勢入力画像128、130及び132は、それぞれ、初期設定としてのワーク座標系C3の各軸の方向を、該ワーク座標系C3のx軸周り、y軸周り、及びz軸周りへ回転させる角度を入力可能となっている。これら位置入力画像122、124及び126と、姿勢入力画像128、130及び132とによって、オペレータは、サーチモデル200Sに設定されるワーク座標系C3の位置及び姿勢を任意に調整可能となる。
姿勢間隔入力画像134は、サーチモデル200Sを生成するためにワークモデル200Mの姿勢を仮想空間VS内で変化させる変化量θを入力するためのGUIである。オペレータは、入力装置40を操作して、姿勢間隔入力画像134内に変化量θを、角度θ(図10の例では、θ=9°)として入力可能となっている。プロセッサ32は、入力受付部56として機能して、変位量θ(角度θ)の入力を受け付ける。
オペレータは、位置入力画像122、124及び126と、姿勢入力画像128、130及び132と、姿勢間隔入力画像134とに所望の値を入力した後、モデル読込ボタン画像136をクリック操作し、次いで、ワークモデル200Mを選択する。プロセッサ32は、オペレータによる入力操作に応じて、ワークモデル200Mのモデルデータ(つまり、CADデータ)を読み込み、ワーク座標系C3とともに仮想空間VS内に配置する。このとき、プロセッサ32は、ワーク座標系C3を、位置入力画像122、124及び126と、姿勢入力画像128、130及び132とによって設定された位置及び姿勢に配置する。
次いで、プロセッサ32は、仮想空間VSに配置したワークモデル200Mを、所定の基準視点VP(図3)から見たときの第1の姿勢のサーチモデル200S1を生成する。図11に、基準視点VPから見たときの、第1の姿勢のワークモデル200Mを示す。プロセッサ32は、ワークモデル200Mのモデルデータに基づいて、第1の姿勢のワークモデル200Mのモデルコンポーネント(面、エッジ等のモデル)に点群を付与することで、第1の姿勢のサーチモデル200S1を生成する。
第1の姿勢のサーチモデル200S1の一例を、図12に示す。このサーチモデル200S1においては、仮想空間VS内で基準視点VPから見ることができるワークモデル200Mのモデルコンポーネント(面モデル、エッジモデル)が3次元点群によって表されている。これら点群によって、サーチモデル200S1は、基準視点VPから見た第1の姿勢のワークモデル200Mの形状を表す。また、サーチモデル200S1には、ワーク座標系C3が設定される。なお、プロセッサ32は、ワークモデル200Mを読み込んだときに、基準視点VPを仮想空間VS内の任意の位置に自動で設定してもよい。また、プロセッサ32は、基準視点VPを定める入力をオペレータから受け付けてもよい。
次いで、プロセッサ32は、姿勢間隔入力画像134を通して入力を受け付けた変化量(角度)θに従って、仮想空間VS内でワークモデル200Mの姿勢を模擬的に変化させる演算処理を行う。具体的には、プロセッサ32は、ワークモデル200Mを、ワーク座標系C3のx軸(又はy軸)とz軸との周りに、姿勢間隔入力画像134に入力された角度θだけ回転させる模擬回転動作VRを繰り返し実行することで、ワークモデル200Mの姿勢を仮想空間VS内で変化させる。
例えば、プロセッサ32は、第1の姿勢のサーチモデル200S1を生成した後、基準視点VPから見たワークモデル200M(図11)を、ワーク座標系C3のx軸の周りに角度θ(=9°)だけ回転させる第1の模擬回転動作VRxを実行する。その結果、基準視点VPから見たワークモデル200Mの姿勢が、第1の姿勢から第2の姿勢に変化する。このように、本実施形態においては、入力を受け付けた変化量(角度)θに従って、仮想空間VS内でワークモデル200Mの姿勢を模擬的に変化させるシミュレート部62(図9)として機能する。
そして、プロセッサ32は、第2の姿勢のワークモデル200Mに基づいて、基準視点VPから見た第2の姿勢のワークモデル200Mの形状を表す第2の姿勢のサーチモデル200S2を生成する。その後、プロセッサ32は、ワークモデル200Mをワーク座標系C3のx軸周りに角度θだけ回転させる第1の模擬回転動作VRxを繰り返し実行し、該第1の模擬回転動作VRxを実行する毎にサーチモデル200Snを生成する。例えば、プロセッサ32は、ワークモデル200Mをワーク座標系C3のx軸周りに、図11に示す第1の姿勢を0°として、0°~π(例えば、π=180°又は360°)の範囲で、角度θずつ回転させてもよい。
第1の模擬回転動作VRxに加えて、プロセッサ32は、基準視点VPから見たワークモデル200Mを、ワーク座標系C3のz軸の周りに角度θだけ回転させる第2の模擬回転動作VRzを繰り返し実行する。そして、プロセッサ32は、第2の模擬回転動作VRzを実行する毎に、サーチモデル200Snを生成する。例えば、プロセッサ32は、ワークモデル200Mを、ワーク座標系C3のz軸周りに、図11に示す第1の姿勢を0°として、-π~π(例えば、π=180°)の範囲で、角度θずつ回転させてもよい。
こうして、プロセッサ32は、模擬回転動作VR(VRx、VRz)を繰り返し実行することで、基準視点VPから見たワークモデル200Mの姿勢を、第1の姿勢、第2の姿勢、第3の姿勢、・・・第nの姿勢に変化させ、第1の姿勢のサーチモデル200S1、第2の姿勢のサーチモデル200S2、第3の姿勢のサーチモデル200S3、・・・第nの姿勢のサーチモデル200Snを生成する。
その結果、プロセッサ32は、計n個:n=(π/θ+1)・(2πsinφ/θ+1)のサーチモデル200Snを生成する。なお、φは、ワークモデル200Mを、ワーク座標系C3のz軸周りに回転させた角度を示す。このように、本実施形態においては、プロセッサ32は、ワークモデル200Mに基づいてサーチモデル200Snを生成するサーチモデル生成部64(図9)として機能する。このように生成されたサーチモデル200Snは、実際の作業のために視覚センサ14が撮像したワーク200の画像データ140から該ワーク200を探索するために用いられる。実際の作業のフローについては、後述する。
なお、プロセッサ32は、サーチモデル200Snを生成するとき、仮想空間VS内で基準視点VPから見ることができる表側のモデルコンポーネントの点群データを生成する一方で、基準視点VPから見ることができない裏側のモデルコンポーネント(例えば、図11のワークモデル200Mのモデルコンポーネントのうち、紙面裏側のエッジモデル及び面モデル)の点群データを生成しなくてもよい。この構成によれば、サーチモデル200Snのデータ量を削減できる。
上述のサーチモデル生成プロセスの結果、モデル読込ボタン画像136の操作によって選択されたワークモデル200Mのデータが、その識別情報Isとともに、動作プログラムOPAに関連付けて登録される。また、サーチモデル200Snのデータが、動作プログラムOPA及びワークモデル200M(識別情報Is)と関連付けて登録される。こうして、動作プログラムOPA、教示位置Pwt、ワークモデル200M、及びサーチモデル200Snは、互いに関連付けられる。
以上のように、本実施形態においては、プロセッサ32は、入力受付部56、シミュレート部62、及びサーチモデル生成部64として機能して、サーチモデル200Snを生成する。したがって、入力受付部56、シミュレート部62、及びサーチモデル生成部64は、サーチモデル200Snを生成する装置60(図9)を構成する。
この装置60においては、入力受付部56は、ワークモデル200Mの姿勢を仮想空間VS内で変化させる変化量θの入力を受け付け、シミュレート部62は、入力受付部56が受け付けた変化量θに従って、仮想空間VS内でワークモデル200Mの姿勢を模擬的に変化させる。そして、サーチモデル生成部64は、シミュレート部62が姿勢を変化させたときに、仮想空間VS内の所定の視点VPから見たワークモデル200Mの形状を表すサーチモデル200Snを、ワークモデル200Mに基づいて生成する。
この構成によれば、オペレータは、変化量θを入力するだけで、様々な姿勢のサーチモデル200Snを自動で生成することができる。これにより、サーチモデル200Snを用意する作業を、大幅に簡単化できる。また、オペレータは、変化量θを適宜選択することによって、生成するサーチモデル200Snの姿勢及びその数を、任意に設計できる。したがって、サーチモデル200Snの設計自由度を高めることもできる。
また、装置60においては、入力受付部56は、変化量θとして、仮想空間VSに設定された座標系C(ワーク座標系C3)の軸(x軸、y軸、z軸)の周りにワークモデル200Mを回転させる角度θの入力を受け付け、シミュレート部62は、ワークモデル200Mを該軸の周りに角度θだけ回転させる模擬回転動作VRを繰り返し実行することで、ワークモデル200Mの姿勢を変化させる。
そして、サーチモデル生成部64は、シミュレート部62が模擬回転動作VRを実行する毎に、サーチモデル200Snを生成する。この構成によれば、オペレータは、仮想空間VSに設定した座標系Cの軸を基準として、ワークモデル200Mの姿勢を変化させることができる。よって、生成するサーチモデル200Snの姿勢を、効果的に設計することができる。
また、装置60においては、シミュレート部62は、ワークモデル200Mを第1の軸(例えば、ワーク座標系C3のx軸)の周りに回転させる第1の模擬回転動作VRxと、ワークモデル200Mを、第1の軸と直交する第2の軸(例えば、ワーク座標系C3のz軸)の周りに回転させる第2の模擬回転動作VRzとを実行する。この構成によれば、生成するサーチモデル200Snの姿勢を、より多様且つ簡単に設計できる。
なお、上述の実施形態においては、プロセッサ32(入力受付部56)が、変位量θとして、ワーク座標系C2の軸周りにワークモデル200Mを回転させる角度θの入力を受け付ける場合について述べた。しかしながら、これに限らず、変位量θは、所要値(例えば、θ=9°)として、予め定められてもよい。
また、図10に示すサーチモデル設定画像データ120は、一例であって、他の如何なるGUIが採用されてもよい。例えば、変位量θは、ワークモデル200Mを、ワーク座標系C3のx軸(又はy軸)の周りに回転させる角度θxと、ワーク座標系C3のz軸の周りに回転させる角度θzとを有し、サーチモデル設定画像データ120は、角度θxを入力するための姿勢間隔入力画像134xと、角度θzを入力するための姿勢間隔入力画像134zとを有してもよい。なお、プロセッサ32は、上述したサーチモデル生成プロセスを、コンピュータプログラムPG2に従って実行してもよい。このコンピュータプログラムPG2は、メモリ34に予め記憶され得る。
次に、図13を参照して、ロボットシステム10のさらに他の機能について説明する。プロセッサ32は、上述の装置50(つまり、モデル配置部52、画像生成部54、入力受付部56、及び位置記憶部58)として機能し、上述の教示プロセスを実行して、ワークモデル200Mに対して作業位置Pw(すなわち、教示位置Pwt)を教示する。
ここで、本実施形態においては、この教示プロセスにおいて、1つのワークモデル200Mに対し、計3つの作業位置Pw1、Pw2及びPw3が教示されたとする。すなわち、この場合、プロセッサ32は、入力受付部56として機能して、1つのワークモデル200Mに対し、計3つの作業位置Pw1、Pw2及びPw3を教示する入力Fを受け付ける。そして、プロセッサ32は、位置記憶部58として機能して、第1の教示位置Pwt1(座標Qw1)、第2の教示位置Pwt2(座標Qw2)、及び、第3の教示位置Pwt3(座標Qw3)を、ワークモデル200Mと関連付けて、メモリ34に予め記憶する。
また、この教示プロセスにおいて、オペレータは、記憶した3つの教示位置Pwtm(m=1,2,3)に対し、第1の教示位置Pwt1に「高優先度」の優先順位を付与し、第2の教示位置Pwt2に「中優先度」の優先順位を付与し、第3の教示位置Pwt3に「低優先度」の優先順位を付与したものとする。すなわち、この場合、プロセッサ32は、入力受付部56として機能して、3つの作業位置Pwtmの優先順位(「高優先度」、「中優先度」、「低優先度」)を定める入力Gを受け付ける。
また、プロセッサ32は、上述の装置60(つまり、入力受付部56、シミュレート部62、及びサーチモデル生成部64)として機能し、上述のサーチモデル生成プロセスを実行して、ワークモデル200Mに基づいて、様々な姿勢のサーチモデル200Snを生成する。生成されたサーチモデル200Snは、メモリ34に予め記憶される。
プロセッサ32は、教示プロセス及びサーチモデル生成プロセスの実行後に、図14に示すフローを実行する。図14のフローは、容器B内のワーク200に対して作業(ワークハンドリング)を行うためのものである。オペレータは、入力装置40を操作して、図14のフローを実行するための動作プログラムOPとして、上述の教示プロセス及びサーチモデル生成プロセスによって各種パラメータを設定した動作プログラムOPAを指定する。
プロセッサ32は、オペレータ又は上位コントローラから作業開始指令を受け付けたときに、動作プログラムOPAを実行し、これにより、図14のフローを開始する。ステップS1において、プロセッサ32は、ワークモデル200Mに教示された教示位置Pwtm(m=1,2,3)を取得する。具体的には、プロセッサ32は、実行中の動作プログラムOPA及びワークモデル200Mに関連付けられて登録されている教示位置Pwtmのデータを、メモリ34から読み出して取得する。
ステップS2において、プロセッサ32は、容器B内のワーク200を視覚センサ14によって撮像する。具体的には、プロセッサ32は、視覚センサ14を動作させて、ワーク200の画像データ140を撮像させる。プロセッサ32は、撮像された画像データ140を視覚センサ14から取得する。画像データ140の一例を、図15に示す。
図15に示すように、本実施形態においては、画像データ140は、3次元点群画像データであって、撮像されたワーク200の視覚的特徴(つまり、面、エッジ等)は、点群によって表されている。また、該点群を構成する各点は、上述の距離dの情報を有している。なお、図15は、画像データ140に、計3個のワーク200が写っている例を示しているが、実際は3個以上のワークが写り得る点、理解されたい。
ステップS3において、プロセッサ32は、直近のステップS2で取得した画像データ140に写るワーク200を、予め生成したサーチモデル200Snを用いて探索することによって、該画像データ140に写るワーク200の検出位置Pdを取得する。具体的には、プロセッサ32は、画像データ140に写るワーク200を表す点群に、様々な姿勢のサーチモデル200Snを順にマッチングし、該マッチングを実行する毎に、マッチングの結果としてのスコアSCを計算する。
このスコアSCは、ワーク200を表す点群とサーチモデル200Snとの類似度(又は、相違度)を表し、スコアSCが高いほど(又は、低いほど)、両者が類似していることを示す。プロセッサ32は、計算したスコアSCが所定の閾値を超えたときに、ワーク200の点群とサーチモデルSnとが高度にマッチングしたと判定する。図16に、ワーク200の点群に対してサーチモデル200S1、200S11及び200S21が高度にマッチングした状態を示す。
ワーク200の点群にマッチングしたサーチモデル200S1、200S11及び200S21の各々には、上述のしたように、ワーク座標系C3が設定されている。プロセッサ32は、マッチングしたサーチモデル200S1、200S11及び200S21に設定されたワーク座標系C3の、ロボット座標系C1における座標Qd1、Qd11及びQd21をそれぞれ取得する。
ここで、ロボット座標系C1における視覚センサ14の位置は、キャリブレーションによって既知とされている。よって、視覚センサ14が撮像した画像データ140に写る点群の、ロボット座標系C1における座標も既知となる。そのため、プロセッサ32は、図16に示すようにサーチモデル200S1、200S11及び200S21を点群にマッチングしたときの、各々のワーク座標系C3のロボット座標系C1における座標Qd1、Qd11及びQd21を取得できる。
こうして、プロセッサ32は、サーチモデル200Snを用いて、画像データ140に写るワーク200を探索する。プロセッサ32は、探索の結果として取得した座標Qd1、Qd11及びQd21を、画像データ140の撮像時におけるワーク200の位置を示す検出位置Pd1、Pd11及びPd21として、メモリ34に記憶する。
このように、本実施形態においては、プロセッサ32は、画像データ140に写るワーク200を、サーチモデル200Snを用いて探索することによって、該ワーク200の位置を、検出位置Pd1、Pd11及びPd21(具体的には、座標Qd1、Qd11及びQd21)として取得する位置検出部66(図13)として機能する。
ステップS4において、プロセッサ32は、ステップS1で取得した教示位置Pwtmと、直前のステップS3で取得した検出位置Pdq(q=1,11,21)とに基づいて、該検出位置Pdqを検出したワーク200に対する作業の目標位置Ptを求める。具体的には、プロセッサ32は、検出位置Pd1を表すロボット座標系C1の座標Qd1と、第1の教示位置Pwt1を表すワーク座標系C3の座標Qw1と、ロボット座標系C1とワーク座標系C3との変換行列MX(例えば、同次変換行列、又はヤコビ行列)とを用いて所定の演算(具体的には、座標と変換行列との乗算)をすることで、座標Qw1をロボット座標系C1に表した座標Qr1_1を求める。
この座標Qr1_1は、検出位置Pd1を検出したワーク200(つまり、図16中のサーチモデル200S1をマッチングしたワーク200)に対して教示された第1の教示位置Pwt1の、ロボット座標系C1における座標を表している。プロセッサ32は、この座標Qr1_1を、検出位置Pd1のワークWに対する第1の作業位置Pw1を表す第1の目標位置Pt1_1として求める。
同様にして、プロセッサ32は、検出位置Pd1について、第2の教示位置Pwt2に対応する第2の目標位置Pt1_2(ロボット座標系C1の座標Qr1_2)を求めるとともに、第3の教示位置Pwt3に対応する第3の目標位置Pt1_3(ロボット座標系C1の座標Qr1_3)を求める。こうして、プロセッサ32は、ステップS3で検出された1つのワーク200の検出位置Pd1について、3つの目標位置Pt1_1、Pt1_2及びPt1_3を求める。
同様に、プロセッサ32は、検出位置Pd11(つまり、図16中のサーチモデル200S11をマッチングしたワーク200)について、第1の教示位置Pwt1に対応する第1の目標位置Pt11_1(ロボット座標系C1の座標Qr2_1)と、第2の教示位置Pwt2に対応する第2の目標位置Pt11_2(ロボット座標系C1の座標Qr11_2)と、第3の教示位置Pwt3に対応する第3の目標位置Pt11_3(ロボット座標系C1の座標Qr11_3)とを求める。
また、プロセッサ32は、検出位置Pd21(つまり、図16中のサーチモデル200S21をマッチングしたワーク200)について、第1の教示位置Pwt1に対応する第1の目標位置Pt21_1(ロボット座標系C1の座標Qr21_1)と、第2の教示位置Pwt2に対応する第2の目標位置Pt21_2(ロボット座標系C1の座標Qr21_2)と、第3の教示位置Pwt3に対応する第3の目標位置Pt21_3(ロボット座標系C1の座標Qr21_3)とを求める。
このように、プロセッサ32は、ステップS3で3つの検出位置Pdq(q=1,11,21)を取得した場合、計9つの目標位置Ptq_m(q=1,11,21 m=1,2,3)を演算により求めることになる。プロセッサ32は、求めた目標位置Ptq_mを、メモリ34に記憶する。このように、本実施形態においては、プロセッサ32は、ステップS1で取得した教示位置Pwtmと、ステップS3で取得した検出位置Pdq(座標Qdq)とに基づいて目標位置Ptq_m(座標Qrq_m)を演算により求める位置演算部68(図13)として機能する。
ステップS5において、プロセッサ32は、直前のステップS4で求めた複数の目標位置Ptq_mをリスト形式で並べたリストデータ150を生成する。このリストデータ150の一例を、図17に示す。図17に示すリストデータ150において、「No」と示される列152は、目標位置Ptq_mの順序を表している。また、「検出位置ID」と示される列154は、ステップS3で求められた検出位置Pdq(q=1,11,21)の識別ID:「q」を表す。
また、「教示位置ID」と示される列156は、予め教示された教示位置Pwtm(m=1,2,3)の識別ID:「m」を表す。また、「優先順位」と示される列158は、教示位置Pwtmの各々に予め付与された優先順位を表す。また、「目標位置」と示される列160は、ステップS4で求められた目標位置Ptq_m(つまり、座標Qrq_m)を示す。また、「ステータス」と示される列152は、作業の状態を表す。この列162の「作業待ち」は、ワーク200に対する作業が未完であって、該作業を実行する予定である状態を表している。
ここで、プロセッサ32は、図17のリストデータ150に含まれる目標位置Ptq_mを、「優先順位」に従って並べ替える。その結果、プロセッサ32は、図18に示すようにリストデータ150を更新する。更新後のリストデータ150においては、複数の目標位置Ptq_mが、高優先度、中優先度、及び低優先度の順で並べ替えられている。
図18に示すリストデータ150には、高優先度の目標位置Ptq_mとして、3つの目標位置Pt1_1(座標Qr1_1)、Pt11_1(座標Qr11_1)、及びPt21_1(座標Qr21_1)が含まれている。中優先度及び低優先度についても同様に、3つの目標位置Ptq_mがそれぞれ含まれている。そこで、プロセッサ32は、同じ優先度が付与された3つの目標位置Ptq_mに対して作業の順序の優先順位をさらに定めるべく、同じ優先度の目標位置Ptq_mを、ロボット座標系C1のz座標の大きさ(換言すれば、鉛直方向の高さ)に従ってさらに並べ替える。
仮に、高優先度の目標位置Pt1_1のz座標:z1_1と、目標位置Pt11_1のz座標:z11_1と、目標位置Pt21_1のz座標:z21_1との間で、z21_1>z1_1>z11_1の関係が成り立つとする。また、中優先度の目標位置Pt1_2、t11_2及びt21_2のz座標について、z21_2>z1_2>z11_2の関係が成り立つとする。さらに、低優先度の目標位置Pt1_3、t11_3及びt21_3のz座標について、z21_3>z1_3>z11_3の関係が成り立つとする。
この場合、プロセッサ32は、同じ優先度の目標位置Ptq_mをz座標に従って並べ替えて、図19に示すようにリストデータ150をさらに更新する。こうして、プロセッサ32は、複数の目標位置Ptq_mを並べたリストデータ150を生成する。したがって、プロセッサ32は、リストデータ150を生成するリスト生成部70(図13)として機能する。
再度、図14を参照し、ステップS6において、プロセッサ32は、干渉検証プロセスを実行する。このステップS6について、図20を参照して説明する。ステップS21において、プロセッサ32は、ロボット12を目標位置Ptq_mに位置決めしたときに該ロボット12と環境物E(図示せず)との間で干渉が生じるか否かを判定する。
具体的には、プロセッサ32は、この時点で図19のリストデータ150において「ステータス」が「作業待ち」となっている目標位置Ptq_mのうち、列152に示す順序が最上位(つまり、列158の優先順位が最上位)である目標位置Ptq_mについて干渉が生じるか否かを判定する。仮に、このステップS21を第1回目に実行する場合、プロセッサ32は、図19のリストデータ150の最上位(順序No.1)にある「高優先度」の目標位置Pt21_1:座標Qr21_1(x21_1,y21_1,z21_1,w21_1,p21_1,r21_1)に関する干渉判定を行うことになる。
より具体的には、プロセッサ32は、ステップS2で取得した画像データ140と、座標Qr21_1と、ロボットモデル12Mとに基づいて、ロボットモデル12Mのエンドエフェクタモデル28Mを、ロボット座標系C1の座標Qr21_1に位置決めしたときに、該エンドエフェクタモデル28Mが環境物E(例えば、容器B又は他のワーク200)のモデルと干渉するか否かを計算する。
プロセッサ32は、干渉が生じる場合はYESと判定し、ステップS22へ進む一方、NOと判定した場合は、図14中のステップS7へ進む。このように、本実施形態においては、プロセッサ32は、ロボット12を目標位置Ptq_mに位置決めしたときに該ロボット12と環境物Eとの間で干渉が生じるか否かを判定する干渉判定部72(図13)として機能する。
ステップS22において、プロセッサ32は、ロボット12と環境物Eとの干渉を回避可能か否か判定する。具体的には、プロセッサ32は、予め定めた干渉回避条件CDに従って、ロボット座標系C1において、直近のステップS21で干渉判定した目標位置Ptq_m(例えば、目標位置Pt21_1)を、干渉を回避可能、且つ作業を実行可能な位置まで変位させた補正位置Ptq_m’を計算する。
干渉回避条件CDは、例えば、目標位置Ptq_mからの変位量(具体的には、位置及び姿勢の変化量)の許容範囲を含む。プロセッサ32は、このステップS22において、補正位置Ptq_m’を計算できた場合はYESと判定し、ステップS23へ進む一方、NOと判定した場合はステップS24へ進む。ステップS23において、プロセッサ32は、直近のステップS21で干渉判定した目標位置Ptq_mを、直前のステップS22で計算した補正位置Ptq_m’へ補正する。そして、プロセッサ32は、図14中のステップS7へ進む。このように、本実施形態においては、プロセッサ32は、目標位置Ptq_mを補正する位置補正部74(図13)として機能する。
ステップS24において、プロセッサ32は、ステータスを更新する。具体的には、プロセッサ32は、リスト生成部70として機能し、図19に示すリストデータ150において、直近のステップS21で干渉判定した目標位置Ptq_m(例えば、目標位置Pt21_1)の「ステータス」を、ステップS22で干渉回避の計算に失敗したことを表す「干渉回避計算失敗」に変更する。なお、プロセッサ32は、「干渉回避計算失敗」とした目標位置Ptq_mを、リストデータ150から削除してもよい。
そして、プロセッサ32は、ステップS21へ戻り、図19に示すリストデータ150中の列152の順序が次位であり、且つ、ステータスが「作業待ち」となっている目標位置Ptq_m(例えば、順序No.2の目標位置Pt1_1)について、ステップS21~S24のフローを順次実行する。こうして、プロセッサ32は、図19のリストデータ150の列152に示す順序(換言すれば、列158の優先順位)に従って、目標位置Ptq_mに関して干渉判定を順に行う。
再度、図14を参照し、ステップS7において、プロセッサ32は、ワーク200に対する作業を実行する。例えば、プロセッサ32が、直前のステップS21で、図19のリストデータ150で最上位の目標位置Pt21_1についてNOと判定したとする。この場合、このステップS7において、プロセッサ32は、目標位置Pt21_1のデータ(座標Qr21_1)に基づいて、ロボット12の各サーボモータ30への指令を生成し、該指令に従ってロボット12を制御することで、ロボット座標系C1においてエンドエフェクタ28を座標Qr21_1に位置決めする。
そして、プロセッサ32は、エンドエフェクタ28を動作させて、図16中のサーチモデル200S21をマッチングしたワーク200を、第1の作業位置Pw1で把持する。こうして、ロボット12は、ワーク200に対して作業(ワークハンドリング)を実行する。このように、本実施形態においては、プロセッサ32は、リストデータ150において優先順位が最上位の目標位置Pt21_1に基づいてロボット12を制御し、該ロボット12を該最上位の目標位置Pt21_1に位置決めする動作指令部76(図13)として機能する。
一方、プロセッサ32が、直前のステップS23で、目標位置Ptq_mを補正位置Ptq_m’へ補正したとする。この場合、プロセッサ32は、このステップS7において、補正位置Ptq_m’に基づいてロボット12を制御し、ロボット座標系C1においてエンドエフェクタ28を該補正位置Ptq_m’に位置決めする。そして、プロセッサ32は、エンドエフェクタ28を動作させて、ワーク200を、補正位置Ptq_m’に対応する作業位置Pw1’で把持する。
ステップS8において、プロセッサ32は、直前のステップS7で実行した作業が適切に完了したか否かを判定する。プロセッサ32は、YESと判定した場合はステップS9へ進む一方、NOと判定した場合はステップS10へ進む。ステップS9において、プロセッサ32は、リスト生成部70として機能し、図19のリストデータ150において、直近のステップS7の作業に用いた目標位置Ptq_mの「ステータス」を、作業が適切に完了したことを表す「作業成功」に変更する。
例えば、図19のリストデータ150の最上位の目標位置Pt21_1を用いてステップS7の作業を完了した場合、プロセッサ32は、リストデータ150において、最上位の目標位置Pt21_1の「ステータス」を「作業成功」に変更する。このとき、プロセッサ32は、リストデータ150の列154において、目標位置Pt21_1と同じ識別ID:m=21が付された順序No.4の目標位置Pt21_2と、順序No.7の目標位置Pt21_3の「ステータス」も、併せて「作業成功」に変更する。なお、プロセッサ32は、「作業成功」とした目標位置Ptq_m(例えば、目標位置Pt21_1、Pt21_2及びPt21_3)を、リストデータ150から削除してもよい。
ステップS10において、プロセッサ32は、リスト生成部70として機能し、図19のリストデータ150において、直近のステップS7の作業に用いた目標位置Ptq_mの「ステータス」を、作業が適切に完了しなかったことを表す「作業失敗」に変更する。例えば、プロセッサ32が、直近のステップS7において、順序No.1の目標位置Pt21_1を用いて作業を実行した結果、ステップS8でNOと判定したとする。この場合、プロセッサ32は、このステップS10において、順序No.1の目標位置Pt21_1の「ステータス」を「作業失敗」に変更する。
このとき、プロセッサ32は、目標位置Pt21_1と同じ識別ID:m=21が付された順序No.4の目標位置Pt21_2、及び、順序No.7の目標位置Pt21_3の「ステータス」も併せて「作業失敗」に変更してもよい。なお、プロセッサ32は、「作業失敗」とした目標位置Ptq_mを、リストデータ150から削除してもよい。
ステップS11において、プロセッサ32は、この時点でリストデータ150において列152の「ステータス」が「作業待ち」となっている目標位置Ptq_mが在るか否かを判定する。プロセッサ32は、YESと判定した場合は、ステップS6へ戻り、「作業待ち」の目標位置Ptq_mのうち、列152に示す順序が最上位(つまり、列158の優先順位が最上位)である目標位置Ptq_mについて、ステップS6~S10を順次実行する。一方、プロセッサ32は、NOと判定した場合はステップS12へ進む。
ステップS12において、プロセッサ32は、容器B内の全てのワーク200に対して作業を完了したか否かを判定する。プロセッサ32は、YESと判定した場合は、図14に示すフローを終了する一方、NOと判定した場合はステップS2へ戻る。そして、プロセッサ32は、ステップS2で再度、容器B内のワーク200を視覚センサ14に撮像させ、新たに撮像した画像データ140に基づいて、ステップS2~S12のフローを実行する。
以上のように、本実施形態においては、制御装置16は、装置50及び60、位置検出部66、位置演算部68、リスト生成部70、干渉判定部72、位置補正部74、並びに、動作指令部76の機能を備える。位置検出部66は、視覚センサ14が撮像した画像データ140に写るワーク200を、サーチモデル生成部64が生成したサーチモデル200Snを用いて探索することによって、該画像データ140に写る該ワーク200の位置を、検出位置Pdq(座標Qdq)として取得する(ステップS3)。
位置演算部68は、位置記憶部58が記憶した教示位置Pwtmと、位置検出部66が取得した検出位置Pdqとに基づいて、該検出位置Pdqを検出したワーク200に対する作業位置Pwmを、目標位置Ptq_mとして演算により求める(ステップS4)。この構成によれば、上述した利点を有する様々な姿勢のサーチモデル200Snを用いて、画像データ140からワーク200を効果的に探索できる。また、ワークモデル200Mに対して教示した教示位置Pwtmを、様々な姿勢のサーチモデル200Snの間で共有して使用し、該サーチモデル200Snによって検出したワーク200に対する作業の目標位置Ptq_mを効果的に演算できる。
また、本実施形態においては、リスト生成部70は、位置演算部68が求めた複数の目標位置Ptq_mをリスト形式で並べたリストデータ150を生成する(ステップS5)。この構成によれば、リストデータ150において複数の目標位置Ptq_mを効果的に管理し、これにより、ワーク200に対する作業の順序を効果的に管理できる。その結果、作業を円滑に進めることができる。
また、本実施形態においては、入力受付部56は、教示された作業位置Pwmの優先順位を定める入力Gをさらに受け付け、リスト生成部70は、入力受付部56が受け付けた優先順位に従って複数の目標位置Ptq_mを並べたリストデータ150(図18、図19)を生成する。そして、動作指令部76は、リストデータ150において優先順位が最上位の目標位置Ptq_m(例えば、目標位置Pt21_1)に基づいてロボット12を制御し、作業を実行するために該ロボット12を該最上位の目標位置Ptq_mに位置決めする(ステップS7)。この構成によれば、オペレータは、ロボット12が作業をし易い目標位置Ptq_mを優先するように、該優先順位を任意に定めることが可能となる。これにより、作業が失敗する可能性を減少させ、以って、作業効率を向上させることができる。
また、本実施形態においては、干渉判定部72は、ロボット12を目標位置Ptq_mに位置決めしたときに該ロボット12と環境物Eとの間で干渉が生じるか否かを判定する(ステップS21)。ここで、干渉判定部72は、リストデータ150に含まれる複数の目標位置Ptq_mについて、優先順位に従って干渉の判定を順に行う。
そして、動作指令部76は、リストデータ150に含まれる複数の目標位置Ptq_mのうち、干渉判定部72によって干渉が生じない(つまり、ステップS21でNO)と判定された最上位の目標位置Ptq_m(例えば、目標位置Pt21_1)に基づいて、ロボット12を制御する。この構成によれば、オペレータが定めた優先順位で干渉判定を行い、干渉が発生しない、より上位の目標位置Ptq_mを用いて、作業を実行できる。これにより、作業効率を、より効果的に向上させることができる。
なお、上述のステップS10において、プロセッサ32は、リスト生成部70として機能して、「ステータス」を「作業失敗」に変更した目標位置Ptq_mの近傍の目標位置Ptの「ステータス」も、併せて「作業失敗」(又は、「作業保留」)に変更してもよい。例えば、プロセッサ32は、直近のステップS7において、図19のリストデータ150の順序No.1の目標位置Pt21_1を用いて作業を実行した結果、ステップS8でNOと判定したとする。
この場合、プロセッサ32は、上述したように、順序No.1の目標位置Pt21_1、順序No.4の目標位置Pt21_2、及び、順序No.7の目標位置Pt21_3の「ステータス」を併せて「作業失敗」に変更する。このとき、プロセッサ32は、順序No.1の目標位置Pt21_1を取得したワーク200(つまり、図16中のサーチモデル200S21をマッチングしたワーク200)から所定の距離Δの範囲内のワーク200について求めた目標位置Ptq_mの「ステータス」も、「作業失敗」(又は、「作業保留」)に変更する。
例えば、図16において、サーチモデル200S21をマッチングしたワーク200から所定の距離Δの範囲内に、サーチモデル200S11をマッチングしたワーク200が存在していたとする。この場合、プロセッサ32は、図19のリストデータ150において、このワーク200について求めた順序No.3の目標位置Pt11_1、順序No.6の目標位置Pt11_2、及び、順序No.9の目標位置Pt11_3の「ステータス」も、「作業失敗」(又は、「作業保留」)に変更する。
ここで、1つのワーク200に対する作業が失敗した場合、その近傍に在る別のワーク200の位置が変化し得る。このような該別のワーク200の位置の変化が生じた場合、該別のワーク200について求めた目標位置Ptq_mにエンドエフェクタ28を位置決めして作業を実行したとしても、該作業が失敗する可能性が高くなる。よって、作業が失敗した目標位置Ptq_mの近傍の目標位置Ptの「ステータス」も「作業失敗」に変更することによって、作業の失敗が頻発する可能性を低減し、以って、作業効率を高めることができる。
なお、図14に示すフローでは、プロセッサ32は、フロー開始後にステップS1を実行する場合について述べた。しかしながら、これに限らず、プロセッサ32は、例えば、ステップS3の後にステップS1を実行してもよいし、ステップS4の実行前の如何なるタイミングでステップS1を実行してもよい。また、図14のフローから、ステップS8~S11を省略することもできる。
なお、上述の実施形態においては、プロセッサ32(装置60)が、図14のフローの実行前に、サーチモデル200Snを予め生成する場合について述べた。しかしながら、これに限らず、プロセッサ32は、図14のフローの実行中に、サーチモデル200Snを生成してもよい。例えば、オペレータは、図14のフローの前に、図10に示すサーチモデル設定画像データ120を通して、ワーク座標系C3の原点位置、及び変化量(角度)θといったパラメータを入力するとともに、モデル読込ボタン画像136を通してワークモデル200Mを選択しておく。そして、プロセッサ32は、図14のフローの開始後、例えばステップS1又はS2の直後に、サーチモデル200Snを生成してもよい。
なお、図13に示す制御装置16から、リスト生成部70を省略してもよい。この場合、図14のフローからステップS5が省略される。この場合において、プロセッサ32は、ステップS3で1つのワーク200を探索し、ステップS4で1つの目標位置Ptq_mを求めてもよい。代替的には、ステップS3で複数の検出位置Pdqを取得した場合において、プロセッサ32は、ステップS4において、取得した複数の検出位置Pdqのうち、ロボット座標系C1のz座標が最も大きい検出位置Pdqについて、1つの目標位置Ptq_mを求めてもよい。
また、上述の実施形態においては、プロセッサ32(入力受付部56)が、教示された作業位置Pwtmの優先順位を定める入力Gを受け付ける場合について述べた。しかしながら、これに限らず、作業位置Pwtmに優先順位を付与しなくてもよい。この場合において、プロセッサ32は、図17のリストデータ150の列152に示す順序に従って、図14中のステップS6及びS7を実行してもよい。
代替的には、プロセッサ32は、ステップS5において、図17のリストデータ150に含まれる目標位置Ptq_mを、ロボット座標系C1のz座標の大きさに従って並べ替えてもよいし、又は、容器Bの壁面からの距離等、他の如何なる基準に従って並べ替えてもよい。なお、図13の制御装置16から、干渉判定部72を削除してもよい。この場合、図14のフローから、ステップS6が省略される。
次に、図21を参照して、ロボットシステム10のさらに他の機能について説明する。本実施形態においては、装置60は、ワークモデル200Mの対称性に関する対称性情報Imを取得する情報取得部78をさらに備える。具体的には、プロセッサ32は、上述のサーチモデル生成プロセスにおいて、図10に示すモデル読込ボタン画像136への入力操作に応じて選択されたワークモデル200Mを読み込み、仮想空間VSに配置する。
このとき、プロセッサ32は、情報取得部78として機能して、ワークモデル200Mのモデルデータ(つまり、CADデータ)を解析し、対称性情報Imを取得する。ここで、ワークは、その全体形状において、所定の対称性を有し得る。例えば、図3に示すワーク200の場合、その全体形状は、中心軸A3を基準とする回転対称性を有している。また、円筒状のワーク200に限らず、例えば正i角形(i=3,4,5,・・・)の全体形状(正4角柱、正3角錐等)を有するワークの場合、その中心軸を基準とした、i回対称性を有することになる。
本実施形態においては、プロセッサ32は、情報取得部78として機能して、ワークモデル200Mのモデルデータを解析し、該ワークモデル200Mの中心軸A3(又は、対称軸)のワーク座標系C3における位置及び方向を示す位置データβと、i回対称性の情報γとを、対称性情報Imとして自動で取得する。例えば、プロセッサ32は、対称性の情報γとして、角度α(=360°/i)を取得する。
例えば、図3に示すワーク200の場合は、α=0°(又は∞)である一方、正4角柱のワークの場合は、α=90°である。プロセッサ32は、取得した対称性情報Im(位置データβ、情報γ:角度α)を、教示された教示位置Pwtのデータ(座標Qw)ととともに、ワークモデル200Mに関連付けて、メモリ34に記憶する。
次に、図14及び図22を参照して、図21に示す制御装置16が実行する動作フローについて説明する。本実施形態においては、プロセッサ32は、図14中のステップS6として、図22に示すフローを実行する。図22のフローにおいては、ステップS21でYESと判定した場合、ステップS31において、プロセッサ32は、直前のステップS21で干渉性を判定した目標位置Ptq_mと対称となる対称位置Ptq_mt”が、ロボット12と環境物Eとの干渉を回避可能か否か判定する。
具体的には、プロセッサ32は、ワークモデル200Mの対称性情報Im(位置データβ、角度α)を入手する。そして、プロセッサ32は、対称性情報Imに含まれる位置データβ及び角度αと、干渉を判定した目標位置Ptq_mとに基づいて、該目標位置Ptq_mと対称となる対称位置Ptq_m”を演算する。
この対称位置Ptq_m”について、図23を参照して説明する。図23に示す例では、プロセッサ32が、直前のステップS21において、ワーク200Aに対する作業の目標位置Ptq_mについて干渉を判定し、NOと判定された場合を示している。この目標位置Ptq_mにエンドエフェクタ28を位置決めした場合、エンドエフェクタ28は、容器B及び他のワーク200と干渉する。
そこで、プロセッサ32は、このステップS31において、位置データβに基づいて、直近のステップS3でワーク200Aにマッチングしたサーチモデル200Snに設定されたワーク座標系C3に対する中心軸A3の位置を求める。そして、プロセッサ32は、角度αに基づいて、目標位置Ptq_mを中心軸A3周りに回転させる回転角度α’を、0°~αの範囲内で、自動で決定する。
本実施形態においては、ワークモデル200Mに関する角度αは、α=0°(又は∞)であるので、プロセッサ32は、0°~360°の範囲内で任意の回転角度α’を自動で定める。そして、プロセッサ32は、目標位置Ptq_mを、中心軸A3の周りに回転角度α’だけ回転させた対称位置Ptq_m”を演算する。図23の例では、回転角度α’は、α’=180°として決定されている。なお、仮に角度αが、α=90°(つまり、正4角形の外形のワークモデル)である場合、プロセッサ32は、0°~90°の範囲内で任意の回転角度α’を自動で定める。このとき、プロセッサ32は、回転角度α’=α=90°に決定してもよい。
こうして、プロセッサ32は、中心軸A3を基準として目標位置Ptq_mと対称となる対称位置Ptq_m”を求めることができる。次いで、プロセッサ32は、干渉判定部72として機能し、この対称位置Ptq_m”について、再度、干渉判定を行う。対称位置Ptq_m”にエンドエフェクタ28を位置決めした場合、図23に示すように、エンドエフェクタ28は、容器B及び他のワーク200と干渉しない。よって、この場合、プロセッサ32は、このステップS31でYESと判定することになる。
仮に、この対称位置Ptq_m”について干渉が依然として発生すると判定された場合、プロセッサ32は、0°~αの範囲内(α=0°の場合は、0°~360°の範囲内)で回転角度α’を新たに決定し、新たな対称位置Ptq_m”を演算して干渉判定を行う。こうして、回転角度α’を0°~αの範囲内で選択して対称位置Ptq_m”を演算する毎に干渉判定を行うことで、干渉が生じない対称位置Ptq_m”を検索する。一方、このステップS31において、干渉が生じない対称位置Ptq_m”を計算できなかった場合、プロセッサ32は、NOと判定し、ステップS22へ進み、上述したステップS22~S24を順次実行する。
ステップS32において、プロセッサ32は、位置補正部74として機能して、直近のステップS21で干渉判定した目標位置Ptq_mを、直前のステップS31で計算した対称位置Ptq_m”へ補正する。そして、プロセッサ32は、図14中のステップS7へ進み、このステップS7において、動作指令部76として機能して、対称位置Ptq_m”に基づいてロボット12を制御し、図23に示すようにエンドエフェクタ28を該対称位置Ptq_m”に位置決めして、ワーク200Aに対する作業を実行する。
以上のように、本実施形態においては、情報取得部78は、ワーク200(つまり、ワークモデル200M)の対称性に関する対称性情報Im(位置データβ、情報γ:角度α)を取得する。そして、位置補正部74は、情報取得部78が取得した対称性情報Imに基づいて、ステップS4で位置演算部68が求めた目標位置Ptq_mを、該目標位置Ptq_mと対称となる位置Ptq_m”へ補正する。
ここで、本実施形態のように、ワークモデル200Mに対して作業位置Pwmを教示し、複数のサーチモデル200Snの間で該作業位置Pwmを共有した場合、サーチモデル200Sn毎に作業位置Pwmを教示する場合と比べて、目標位置Ptq_mを求めたときに図23で説明したような干渉が発生し易い。本実施形態によれば、ワークモデル200Mに対して作業位置Pwmを教示した場合において、対称性情報Imを利用して目標位置Ptq_mを対称位置Ptq_m”へ補正できるので、このような干渉を効果的に回避することができる。
なお、図22のフローにおいて、プロセッサ32は、図20のフローと同様に、ステップS21でYESと判定したときにステップS22を実行し、該ステップS22でNOと判定したときに、ステップS31を実行してもよい。そして、該ステップS31でYESと判定したときは、ステップS32を実行する一方、NOと判定したときはステップS24へ進んでもよい。
なお、プロセッサ32は、入力受付部56として機能して、対称性の情報γの入力を受け付けてもよい。例えば、オペレータは、入力装置40を操作して、ワーク座標系C3における中心軸A3(又は、対称軸)の位置データβ、該中心軸A3の位置又は方向を調整させる調整量λ、及び角度α(又は、回転角度α’)の少なくとも1つを入力する。
プロセッサ32は、入力受付部56として機能して、位置データβ、調整量λ、及び角度αの入力Hを受け付ける。一方、プロセッサ32は、情報取得部78として取得した位置データβ及び角度αを、オペレータから受け付けた位置データβ、調整量λ及び角度αに基づいて更新し、更新した位置データβ及び角度αを、対称性情報Imとして登録してもよい。この場合において、プロセッサ32は、位置データβ、調整量λ、及び角度αの入力Hを受け付けるためのGUIの画像データを生成してもよい。例えば、プロセッサ32は、このGUIを、図10に示すサーチモデル設定画像データ120に表示してもよい。
なお、上述の実施形態においては、装置60が情報取得部78を備える場合について述べたが、装置50が情報取得部78の機能を備えてもよい。この場合、プロセッサ32は、上述の教示プロセスにおいて、モデル配置部52として機能して、図4に示すモデル読込ボタン画像108への入力操作に応じてワークモデル200Mを読み込み、仮想空間VSに配置する。
このとき、プロセッサ32は、情報取得部78として機能して、ワークモデル200Mのモデルデータを解析し、対称性情報Imを取得してもよい。この場合において、プロセッサ32は、オペレータから位置データβ、調整量λ、及び角度αの入力Hを受け付けるためのGUIの画像データを生成し、例えば、図4に示す教示設定画像データ100に表示してもよい。
なお、制御装置16は、少なくとも2つのコンピュータから構成されてもよい。このような形態を図24及び図25に示す。本実施形態においては、制御装置16は、ロボットコントローラ16A、及びパーソナルコンピュータ(PC)16Bを有する。ロボットコントローラ16Aは、プロセッサ32A、メモリ34A、I/Oインターフェース36A、表示装置38A、及び入力装置40A等を有する。PC16Bは、プロセッサ32B、メモリ34B、I/Oインターフェース36B、表示装置38B、及び入力装置40B等を有する。I/Oインターフェース36A及び36Bは、互いに通信可能に接続される。
本実施形態においては、装置50及び60の機能は、PC16Bに実装されており、プロセッサ32Bが、上述の教示プロセス、及びサーチモデル生成プロセスを実行する。一方、位置検出部66、位置演算部68、リスト生成部70、干渉判定部72、及び位置補正部74の機能は、ロボットコントローラ16Aに実装され、プロセッサ32Aが、動作プログラムOPAを実行することで、図14のフローを実行する。
なお、装置50及び60の機能(つまり、モデル配置部52、画像生成部54、入力受付部56、位置記憶部58、情報取得部78、シミュレート部62、サーチモデル生成部64)の少なくとも1つが、ロボットコントローラ16Aに実装されてもよい。又は、位置検出部66、位置演算部68、リスト生成部70、干渉判定部72、及び位置補正部74の機能の少なくとも1つが、PC16Bに実装されてもよい。
なお、上述の実施形態においては、図14中のステップS3において、プロセッサ32が、検出位置Pdqとして、サーチモデル200Snをマッチングしたときのロボット座標系C1におけるワーク座標系C3の座標Qdqを取得する場合について述べた。しかしながら、これに限らず、プロセッサ32は、検出位置Pdqとして、ロボット座標系C1に設定したユーザ座標系C4おけるワーク座標系C3の座標を取得してもよい。ユーザ座標系C4は、例えばオペレータによってロボット座標系C1の任意の位置(容器Bの角等)に設定される制御座標系Cである。
この場合において、図14中のステップS4において、プロセッサ32は、目標位置Ptq_mを、ユーザ座標系C4の座標として取得し、ステップS7を実行するときに、ユーザ座標系C4の該座標をロボット座標系C1の座標に変換してもよい。なお、プロセッサ32は、ステップS3及びS4において、検出位置Pdq及び目標位置Ptq_mを、ユーザ座標系C4以外の如何なる制御座標系Cの座標として取得してもよい。
以上、本開示について詳述したが、本開示は上述した個々の実施形態に限定されるものではない。これらの実施形態は、本開示の要旨を逸脱しない範囲で、または、特許請求の範囲に記載された内容とその均等物から導き出される本開示の趣旨を逸脱しない範囲で、種々の追加、置き換え、変更、部分的削除等が可能である。また、これらの実施形態は、組み合わせて実施することもできる。例えば、上述した実施形態において、各動作の順序や各処理の順序は、一例として示したものであり、これらに限定されるものではない。また、上述した実施形態の説明に数値又は数式が用いられている場合も同様である。
本開示は、以下の態様を開示する。
(態様1)ワーク200を撮像した画像データ140から該ワーク200を探索するためのサーチモデル200Snを生成する装置60であって、ワーク200をモデル化したワークモデル200Mの姿勢を仮想空間VS内で変化させる変化量θの入力を受け付ける入力受付部56と、入力受付部56が受け付けた変化量θに従って、仮想空間VS内でワークモデル200Mの姿勢を模擬的に変化させるシミュレート部62と、シミュレート部62が姿勢を変化させたときに、仮想空間VS内の所定の視点VPから見たワークモデル200Mの形状を表すサーチモデル200Snを、ワークモデル200Mに基づいて生成するサーチモデル生成部64とを備える、装置60。
(態様2)入力受付部56は、変化量θとして、仮想空間VSに設定された座標系C(ワーク座標系C3)の軸(x軸、y軸、z軸)の周りにワークモデル200Mを回転させる角度θの入力を受け付け、シミュレート部62は、ワークモデル200Mを軸の周りに角度θだけ回転させる模擬回転動作VRを繰り返し実行することで、姿勢を変化させ、サーチモデル生成部64は、シミュレート部62が模擬回転動作VRを実行する毎に、サーチモデル200Snを生成する、態様1に記載の装置60。
(態様3)シミュレート部62は、ワークモデル200Mを第1の軸(ワーク座標系C3のx軸、y軸)の周りに回転させる第1の模擬回転動作VRxと、ワークモデルを、第1の軸と直交する第2の軸(ワーク座標系C3のz軸)の周りに回転させる第2の模擬回転動作VRzとを実行する、態様2に記載の装置60。
(態様4)ワークは、対称性を有し、装置60は、対称性に関する対称性情報Isを取得する情報取得部78をさらに備える、態様1~3のいずれかに記載の装置60。
(態様5)態様1~4のいずれかに記載の装置60と、画像データ140に写るワーク200を、サーチモデル生成部64が生成したサーチモデル200Snを用いて探索することによって、該画像データ140に写る該ワーク200の位置Pdを取得する位置検出部66とを備える、制御装置16。
(態様6)ワーク200を撮像した画像データ140から該ワーク200を探索するためのサーチモデル200Snを生成する方法であって、プロセッサ32が、ワーク200をモデル化したワークモデル200Mの姿勢を仮想空間VS内で変化させる変化量θの入力を受け付け、受け付けた変化量θに従って、仮想空間VS内でワークモデル200Mの姿勢を模擬的に変化させ、姿勢を変化させたときに、仮想空間VS内の所定の視点VPから見たワークモデル200Mの形状を表すサーチモデル200Snを、ワークモデル200Mに基づいて生成する、方法。
(態様7)ロボット12がワーク200に対して作業を行う作業位置Pwを教示する装置50であって、ワーク200の全体形状をモデル化したワークモデル200Mに対して作業位置Pwを教示するための入力F(Fm、Fr)を受け付ける入力受付部56と、入力受付部56が受け付けた入力Fに応じて教示された作業位置Pwを、ワークモデル200Mと作業位置Pwちび位置関係を示す教示位置Pwt(座標Qw)として、ワークモデル200Mと関連付けて記憶する位置記憶部58であって、記憶した該教示位置Pwtを用いて、ワークモデル200Mに基づいて生成されるサーチモデル200Snによって画像データ140から探索されたワーク200に対する作業位置Pwが演算される、位置記憶部58とを備える、装置50。
(態様8)ロボット12をモデル化したロボットモデル12M及びロボット12を制御するための制御座標系C(ロボット座標系C1、ツール座標系C2、ワーク座標系C3)の少なくとも一方と、ワークモデル200Mとを仮想空間VSに配置するモデル配置部52と、ワークモデル200Mと、該少なくとも一方とが配置された仮想空間VSの画像データ110を生成する画像生成部54とを備え、入力受付部56は、教示するための入力Fとして、仮想空間VSで該少なくとも一方を模擬的に移動させる入力Fmを受け付ける、態様7に記載の装置60。
(態様9)ロボット12は、ワーク200に対して作業を行うエンドエフェクタ28を有し、制御座標系Cは、エンドエフェクタ28の位置を規定するツール座標系C2を有し、モデル配置部52は、エンドエフェクタ28をモデル化したエンドエフェクタモデル28Mとツール座標系C2とを仮想空間VSに配置し、入力受付部56は、移動させる入力Fmとして、エンドエフェクタモデル28Mを、ツール座標系C2の原点が変位するように並進移動させる入力Fmt(Fmt1、Fmt2、Fmt3)、又は、エンドエフェクタモデル28Mを、ツール座標系C2の軸(x軸、y軸、z軸)の周りに回転移動させる入力Fmr(Fmr1、Fmr2、Fmr3)を受け付ける、態様8に記載の装置60。
(態様10)画像生成部54は、並進移動又は回転移動を選択するための移動選択ボタン画像112を画像データ110にさらに表示し、入力受付部56は、移動選択ボタン画像112によって並進移動が選択されているときは、並進移動させる入力Fmtを受け付け可能となる一方、移動選択ボタン画像112によって回転移動が選択されているときは、回転移動させる入力Fmrを受け付け可能となる、態様9に記載の装置60。
(態様11)態様7~10のいずれかに記載の装置60と、画像データ140に写るワーク200を、サーチモデル200Snを用いて探索することによって、該画像データ140に写る該ワーク200の位置を検出位置Pdq(座標Qdq)として取得する位置検出部66と、位置記憶部58が記憶した教示位置Pwtmと、位置検出部66が取得した検出位置Pdqとに基づいて、該検出位置Pdqを検出したワーク200に対する作業位置Pwmを、目標位置Ptq_mとして演算により求める位置演算部68とを備える、制御装置16。
(態様12)位置演算部68が求めた複数の目標位置Ptq_mをリスト形式で並べたリストデータ150を生成するリスト生成部70をさらに備える、態様11に記載の制御装置16。
(態様13)入力受付部56は、教示された作業位置Pwmの優先順位を定める入力Gをさらに受け付け、リスト生成部70は、入力受付部56が受け付けた優先順位に従って複数の目標位置Ptq_mを並べたリストデータ150を生成し、制御装置16は、リストデータ150において優先順位が最上位の目標位置Ptq_mに基づいてロボット12を制御し、作業を実行するために該ロボット12を該最上位の目標位置Ptq_mに位置決めする動作指令部76をさらに備える、態様12に記載の制御装置16。
(態様14)ロボット12を目標位置Ptq_mに位置決めしたときに該ロボット12と環境物Eとの間で干渉が生じるか否かを判定する干渉判定部72をさらに備え、干渉判定部72は、リストデータ150に含まれる複数の目標位置Ptq_mについて、優先順位に従って干渉の判定を順に行い、動作指令部76は、リストデータ150に含まれる複数の目標位置Ptq_mのうち、干渉判定部72によって干渉が生じないと判定された最上位の目標位置Ptq_mに基づいて、ロボット12を制御する、態様13に記載の制御装置16。
(態様15)全体形状は、対称性を有し、制御装置16は、該対称性に関する対称性情報Isに基づいて、位置演算部68が求めた目標位置Ptq_mを、該目標位置Ptq_mと対称となる位置Ptq_m”へ補正する位置補正部74をさらに備える、態様11~14のいずれかに記載の制御装置16。
(態様16)ロボット12がワーク200に対して作業を行う作業位置Pwを教示する方法であって、プロセッサ32が、ワーク200の全体形状をモデル化したワークモデル200Mに対して作業位置Pwを教示するための入力F(Fm、Fr)を受け付け、受け付けた入力Fに応じて教示された作業位置Pwを、教示位置Pwt(座標Qw)として、ワークモデル200Mと関連付けて記憶し、記憶した教示位置Pwtを用いて、ワークモデル200Mに基づいて生成されるサーチモデル200Snによって画像データ140から探索されたワーク200に対する作業位置Pwが演算される、方法。