以下、本発明の実施形態を図面に基づいて詳細に説明する。尚、以下の好ましい実施形態の説明は、本質的に例示に過ぎず、本発明、その適用物或いはその用途を制限することを意図するものではない。
図1は、本発明の実施形態に係るロボットシステム1000の構成例を示す模式図である。この図1は、各種製品の製造工場等にある作業空間に積み上げられた複数のワークWKの中から把持可能な所定のワークWKを、ロボットRBTを用いて順次取り出し、所定の場所に設置されているステージSTGまで搬送して該ステージSTG上に載置するばら積みピッキング動作を行う例について示している。このばら積みピッキング動作は、把持可能なワークWKが無くなるまで繰り返し実行される。
ロボットシステム1000は、ロボットRBTと、ロボットRBTを制御するロボットコントローラ6とを備えている。さらに、この図に示すロボットシステム1000は、ロボットRBT及びロボットコントローラ6の他に、図5に示すようにロボット設定装置100と、センサ部2と、表示部3と、操作部4と、ロボット操作具7とを備える。
図1に示すロボットRBTは、産業用の汎用ロボットであり、工場等の床面に対して固定されるベース部BSを備えている。ロボットRBTは、例えばマニピュレータ等とも呼ばれており、6軸制御が可能に構成されている。このロボットRBTは、ベース部BSから延びるアーム部ARMと、アーム部ARMの先端部に設けられたエンドエフェクタとしてロボットハンドHND(以下、単に「ハンド」という)とを備えている。アーム部ARMは、可動部としての関節部を複数備えた多関節型に構成することができる。アーム部ARMの各関節部の動作及びアーム部ARM自体の回転動作によってハンドHNDを可動範囲内の所望の位置まで移動させることができる。
ハンドHNDは、ワークWKを把持可能に構成されている。ハンドHNDは、図2Aに示すようにワークWKの外側を挟み込んで把持する構造のハンドHND1、図2Bに示すように空洞部を有するワークWK2の内部に爪部を挿入して拡開させることによって保持する構造のハンドHND2、図2Cに示すように板状のワークWK3を吸引して保持するハンドHND3等があり、いずれのエンドエフェクタも使用することができる。また、本明細書で「把持」とは、図2Aに示すワークWKの外側を挟み込む方法、空洞部に爪部を挿入して拡開させる方法、吸引する方法等の全ての例を含む意味で使用する。
図3に示すように、ハンドHNDの先端部には、フランジFLGが固定されている。上述したようにハンドHNDの種類は様々あり、ワークWKに応じて変更する必要があるので、ハンドHNDの交換がユーザ側で自在に行えるように、図4に示すようにフランジFLGにハンドHNDが着脱可能に取り付けられている。ハンドHNDのフランジFLGへの取付位置及び姿勢は設計値通りになるように指定されている。ハンドHNDのフランジFLGへの取付位置及び姿勢が設計値通りになるように、例えばガイドピン(図示せず)などを設けておくこともできるが、ガイドピンなどが設けられていたとしても、実際にピッキング作業が行われる現場では、ハンドHNDが必ずしも設計値通りにフランジFLGに取り付けられているとは限らず、ハンドHNDの取付位置及び姿勢が設計値からずれていることがあり得る。
(座標系の説明)
本実施形態に係るロボットシステム1000では、ロボット座標系と、カメラ座標系と、フランジ座標系と、ツール座標系とが存在している。ロボット座標系は、図1に示すように原点を点ORとした三次元座標系であり、例えばロボットRBTの取付位置を原点としたときの座標系である。ロボット座標系は、ロボットRBTの各部(フランジFLG、アームARM等)の位置の基準となる座標系である。図1では、ロボット座標系の原点ORがロボットRBTの基部の中心である例を示しているが、これに限らず、例えば、ベース部BSの上面の中心をロボット座標系の原点ORとしてもよい。また、一般的に、ロボット座標とは、ロボット座標系におけるフランジFLGの位置を示している。
この実施形態では、詳細は後述するが、センサ部2は、いわゆるカメラを備えた構成とすることもでき、所定の撮像視野内を撮像可能に構成されている。このセンサ部2で撮像された画像内の各点の基準となる座標系としてカメラ座標系(撮像部の座標系)が定義されている。カメラ座標系の一例として、X,Yはセンサ部2の真下を原点OCにし、Zはセンサ部2による計測レンジの中央を原点OCにしているが、これに限られるものではない。
フランジ座標系は、図3に示すようにフランジFLGの取付面の中心を原点OFとした三次元座標系である。また、ハンドHNDをツールと呼ぶこともでき、図4に示すように、ツール座標系はツールの先端を原点OTとした三次元座標系である。ツール座標系の原点OTは、ツールの先端に限られるものではなく、ツールの任意の位置であってもよい。
(ロボットの制御)
ロボットRBTは、図1に示すロボットコントローラ6によって制御される。ロボットコントローラ6はアーム部ARMの動作やハンドHNDの開閉動作等を制御する。またロボットコントローラ6は図5に示すロボット設定装置100から、ロボットRBTの制御に必要な情報を取得する。例えば、図1に示す容器BXに無作為に投入された多数の部品であるワークWKの三次元形状を、三次元カメラや照明等を含むセンサ部2を使用して取得し、ロボット設定装置100でワークWKの位置や姿勢を検出して、その情報をロボットコントローラ6が取得する。
図5に示す操作部4では、後述するピッキング動作時の干渉判定の設定、画像処理に関する各種設定を行う。また、表示部3で、各種設定や、ロボットRBTの動作状態の確認、ロボット設定装置100の動作状態の確認、ハンドHNDの取付状態の確認等を行う。さらに、ロボット設定装置100の内部に設けられている画像処理装置300(図6に示す)が例えば三次元サーチ、干渉判定、把持解の算出等を行う。
一方、ロボットコントローラ6はロボット設定装置100から出力される信号に従い、ロボットRBTの制御を行うように構成された周知の部材である。またロボット操作具7は、ロボットRBTの動作設定を行う。なお、図5の例では操作部4とロボット操作具7を別個の部材としているが、これらを共通の部材としてもよい。
センサ部2は、ロボットビジョンなどと呼ばれる部材であり、撮像対象物を撮像する撮像部と呼ぶこともできる。この実施形態では、ハンドHND及びワークWKが少なくともセンサ部2の撮像対象物となる。ワークWKを撮像する際には、容器BXが撮像対象物として含まれていてもよい。また、ハンドHNDを撮像する際には、フランジFLGやアーム部ARMが撮像対象物として含まれていてもよい。
センサ部2で撮像された画像から、ばら積みされたワークWKの三次元形状を示す三次元形状データを取得することが可能になる。容器BXの三次元形状を示す三次元形状データも、センサ部2で撮像された画像から取得することができる。同様に、ハンドHNDの三次元形状を示す三次元形状データ、フランジFLGの三次元形状を示す三次元形状データ等もセンサ部2で撮像された画像から取得することができる。
尚、上記各三次元形状を取得する方法は、例えば、パターン投影法、ステレオ法、レンズ焦点法、光切断法、光レーダ法、干渉法(白色干渉法)、TOF方式などがあり、これらの方法のうち、どの方法を用いてもよい。各方法は、従来から周知であるため、詳細な説明は省略する。本実施形態においては、パターン投影法のうち、周期的な照度分布を有するパターン光を撮像対象物に照射し、撮像対象物の表面で反射した光を受光する位相シフト法を用いている。
センサ部2は、測定対象物であるワークWKの形状を測定する形状測定装置と呼ぶこともでき、ワークWKが存在する作業空間の三次元計測を行う計測部2a(図6に示す)を備えている。このため、センサ部2によってハンドHND、ワークWKや容器BXの形状を測定することもできる。センサ部2は、ロボット設定装置100の一部とすることができるが、別部材として構成することもできる。センサ部2の具体的な構成は、三次元形状の計測技術に応じて決定される。
本例では、センサ部2は、計測部2aの他に、カメラ、照明又はプロジェクタ等を備える。例えば位相シフト法でワークWKの三次元形状を計測する場合は、センサ部2として図7に示すように、プロジェクタ(投光部)PRJと、複数のカメラ(受光部)CME1、CME2、CME3、CME4とを備える。プロジェクタPRJは、撮像対象物に光を照射するための部材である。カメラCME1、CME2、CME3、CME4は、プロジェクタPRJにより投光されて撮像対象物の表面で反射した光を受光する撮像素子を有する部材である。投光部の光源は、例えば複数の発光ダイオード、液晶パネル、有機ELパネル、デジタルマイクロミラーデバイス(DMD)等で構成することができる。
センサ部2は、カメラCME1、CME2、CME3、CME4やプロジェクタPRJといった複数の部材で構成する他、これらを一体的に構成してもよい。例えばカメラCME1、CME2、CME3、CME4やプロジェクタPRJを統合してヘッド状とした三次元撮像ヘッドを、センサ部2とすることができる。
また三次元形状データの生成自体はセンサ部2の計測部2aで行うことができる。この場合、計測部2aには、三次元形状データの生成機能を実現する画像処理IC等を設けておけばよい。あるいは、三次元形状データの生成を、センサ部2側で行わず、センサ部2で撮像した生画像を、画像処理装置300へ転送し、画像処理装置300内の計測部(図示せず)で画像処理して三次元画像等の三次元形状データを生成する構成としてもよい。センサ部2は、撮像データである三次元形状データを後述する決定部305等に出力することができる。
ロボット設定装置100は、センサ部2で得られたワークWKの三次元形状データに基づいて、三次元サーチ、干渉判定、把持解算出等を行う。このロボット設定装置100は、専用の画像処理プログラムをインストールした汎用のコンピュータや、専用に設計された画像処理コントローラ、専用のハードウェアで構成することができる。また、グラフィックボードなどのハードウェアを画像検査処理に特化させた専用のコンピュータに、画像処理プログラムをインストールした構成とすることもできる。
なお図5の例では、センサ部2やロボットコントローラ6等をロボット設定装置100とは別個の部材で構成する例を示しているが、本発明はこの構成に限られず、例えばセンサ部2と画像処理装置100とを一体化したり、あるいはロボットコントローラ6をロボット設定装置100に組み込むこともできる。このように、図5に示す部材の区分けは一例であって、複数の部材を統合させることもできる。
センサ部2はロボットRBTと別体としている。すなわち、センサ部2をロボット本体5のアーム部ARMに設けない、オフハンド形式と呼ばれる形態となっている。尚、センサ部2をアーム部ARMに設けてもよい。
表示部3は、例えば、液晶モニタや有機ELディスプレイ、CRT等で構成できる。また、操作部4は、例えば、キーボードやマウス、ポインティングデバイス等の各種入力デバイスで構成できる。また、表示部3をタッチパネル式ディスプレイとすることで、操作部4と表示部3とを一体化することもできる。
例えばロボット設定装置100を、画像処理プログラムをインストールしたコンピュータで構成した場合、表示部3上には画像処理プログラムのグラフィカルユーザインターフェース(GUI)画面が表示される。表示部3上に表示されたGUI上から各種の設定を行うことができ、また各種画像や干渉判定結果等の処理結果を表示させることができる。この場合、表示部3を各種の設定を行うための設定部としても利用でき、設定部には操作部4が含まれていてもよい。
ロボットコントローラ6は、センサ部2で撮像した情報に基づいてロボットの動作を制御する。またロボット操作具7は、ロボットRBTの動作設定を行うための部材であり、ペンダントなどが利用できる。
ワークWKは、図1に示すように複数個が容器BXに無作為に収容されている。このような作業空間の上方には、センサ部2が配置されている。ロボットコントローラ6は、センサ部2で得られたワークWKの三次元形状に基づいて、複数のワークWKの内から、把持対象のワークWKを決定するとともに把持候補位置も決定して、この把持対象のワークWKを把持候補位置で把持するよう、ロボットRBTを制御する。そして、ワークWKを把持したまま、アーム部ARMを動作させて予め定められた所定の載置位置、例えばステージSTG上まで移動させ、所定の姿勢でワークWKを載置する。いいかえると、ロボットコントローラ6は、センサ部2及びロボット設定装置100で特定されたピッキング対象のワークWKをハンドHNDで把持して、把持したワークWKを所定の基準姿勢にて、載置場所(ステージSTG)に載置してハンドHNDを開放するようにロボットRBTの動作を制御する。ステージSTGは、例えばコンベアベルト上やパレット等であってもよい。
ここで本明細書において、ばら積みピッキングとは、容器BXに入れられて無作為に積み上げられたワークWKを、ロボットRBTで把持して、所定の位置に載置する他、容器BXを用いずに所定の領域に積み上げられたワークWKに対して把持、載置を行う例、あるいは所定の姿勢で並べられて積み上げられたワークWKを順次把持、載置する例も含む意味で使用する。また、必ずしもワークWK同士が積み重ねられている状態であることは要さず、ワークWK同士の重なりがない状態で平面上にランダムに置かれたワークWKについても、本明細書においてはばら積みと呼ぶ(順次ピッキングされていき、ピッキングの終盤でワークWK同士の重なりがない状態となった場合でも依然としてばら積みピッキングと呼ばれるのと同じ理由である)。なお、本発明はばら積みピッキングに必ずしも限定されるものでなく、ばら積みされていないワークWKを把持して搬送する用途にも適用できる。
また、図1の例ではセンサ部2を作業空間の上方に固定しているが、センサ部2の固定位置は、作業空間を撮像できる位置であればよく、例えば作業空間の斜め上方や側方、下方、斜め下方など、任意の位置に配置することができる。さらにセンサ部2が有するカメラや照明の数も、1個に限らず複数個としてもよい。さらにまたセンサ部2やロボットRBT、ロボットコントローラ6との接続は、有線接続に限られず、周知の無線接続としてもよい。
ロボットシステム1000でばら積みピッキング動作を行うにあたり、予めばら積みピッキング動作を行わせるための設定を含めたティーチングを行うこともできる。具体的には、ワークWKのどの部位を、ハンドHNDがどのような姿勢で把持するのか、把持位置及び姿勢などの登録を行う。このような設定は、ペンダント等のロボット操作具7で行うことができる。また、後述するように、実際のロボットを操作せずに、ビジョン空間上で設定を行うこともできる。
表示部3は、ワークWKの三次元形状を仮想的に表現するワークモデルや、ハンドHNDの三次元形状を仮想的に表現する、三次元CADデータで構成されたエンドエフェクタモデルを、仮想的な三次元空間上でそれぞれ三次元状に表示させることもできる。さらにこの表示部3は、ワークモデルの基本方向画像を六面図として表示させることもできる。これにより、ワークモデルの各姿勢を六面図で表示させて把持位置の設定作業を行えるようになり、従来面倒であった把持位置の設定作業を容易に行えるようになる。
(画像処理装置300の構成)
図6に示すように、ロボット設定装置100は、画像処理装置300を備えている。画像処理装置300は、センサ部2、操作部4及び表示部3を備えた構成とすることができる。また、画像処理装置300は、ワークモデルを入力するワークモデル入力部301と、ハンドモデルを登録する登録部302とを備えている。また、画像処理装置300は、キャリブレーション実行部303と、ロボットRBTの座標を取得する取得部304と、ロボットRBTのフランジFLGに取り付けられたハンドHNDの位置及び姿勢を決定する決定部305と、ハンドHNDの取付位置を算出する算出部306とを備えている。さらに、画像処理装置300は、ワークWKの把持位置をサーチするサーチ部307と、ハンドHNDが周囲の物体と干渉するか否かを判定する干渉判定部308と、経路生成部309とを備えている。以下、画像処理装置300の各部が実行する処理について具体的に説明する。
図8は、画像処理装置300による干渉判定の手順の一例を示すフローチャートである。ステップSA1は、干渉判定を実行する環境の設定ステップである。この設定の主要な手順は、図9に示すワークモデルの登録の手順を示すフローチャートと、図10に示すハンドモデル及び把持位置の登録の手順を示すフローチャートに示す通りである。ワークモデルの登録と、ハンドモデル及び把持位置の登録とは、どちらを先に行ってもよい。
(ワークモデル入力部301の構成)
図6に示すワークモデル入力部301は、ワークモデル及び当該ワークモデル上のハンドHNDによる把持位置情報の入力を受け付ける部分である。具体的には、図9に示すフローチャートに従ってワークモデル及び把持位置情報を入力し、登録することができる。
開始後のステップSB1はワークモデルの入力ステップである。ワークモデルとは、後述するワークWKのサーチ処理を実行する際に使用されるワークWKの形状を表したモデルであり、サーチモデルと呼ぶこともできる。ステップSB1でワークモデルを入力する際には、ワークWKの三次元CADデータ(CADモデル)を読み込んで、画像処理装置300が有する記憶部320(図6に示す)に一旦記憶させておくことができる。この三次元CADデータは、例えば従来から一般的に用いられているフォーマットのデータを使用することができ、任意のタイミングで読み出して使用することができる。
この実施形態では、三次元CADデータのフォーマットとして最もシンプルなSTL形式を用いている。STL形式は、三角形のポリゴン情報(3点の座標とその面の法線ベクトル)の羅列のみで構成されるデータである。あるいはワークモデルとして、三次元情報を有する点群データで構成してもよい。あるいはまた、ワークモデルを、高さ情報を有する画像データ、例えば高さ画像や距離画像で構成してもよい。
ステップSB1でワークモデルを入力した後、ステップSB2に進み、ワークモデルの確認及び登録を行う。例えば、入力したワークモデルのCADデータを表示部3に表示させることにより、画像処理装置300の使用者が、所望のワークモデルであるか否かを確認することができる。その結果、所望のワークモデルである場合には、そのワークモデルを画像処理装置200に登録する。確認の結果、所望のワークモデルでない場合には、別の三次元CADデータを選択して入力し、再び確認する。
ステップSB1で読み込んだ三次元CADモデルの六面、即ち、三次元CADモデルを「上」、「下」、「左」、「右」、「前」、「後」の各方向から見た高さ画像データをステップSB2で生成する。まず、CADモデルの平面図、底面図、左側面図、右側面図、正面図、背面図となるように、6つの高さ画像データを生成する。この高さ画像データから高さ画像が得られる。「上」はZ軸の正方向(プラス側)から見た高さ画像、「下」はZ軸の負方向(マイナス側)から見た高さ画像、「左」はX軸の負方向から見た高さ画像、「右」はX軸の正方向から見た高さ画像、「前」はY軸の負方向から見た高さ画像、「後」はY軸の正方向から見た高さ画像に対応する。ただ、これらは一例であって、異なる座標系を用いてもよいし、X-Y平面におけるX=Yの直線を軸として、この軸と互いに直交する座標系に基づいて、各軸の正負方向から見た高さ画像を用いてもよい。また、三次元CADデータから、高さ画像を生成する際、必ずしもCADデータの軸に直交した方向(「上」、「下」、「左」、「右」、「前」、「後」)から見た高さ画像である必要はなく、例えばワークモデルの姿勢(視点)を任意に変えて、変えた状態の視点から高さ画像を生成するようにしてもよい。
また、CADモデルが三次元CADデータからなるものであるので、三次元CADデータをCADモデルのX、Y、Z座標のそれぞれについてプラス方向及びマイナス方向の各方向から見たときの高さ画像に変換することで、CADモデルの六面について高さ画像を得ることができる。
上述のようにして生成した6つの高さ画像の中で同じ見え方になる高さ画像を削除することもできる。見え方の一致/不一致は、ワークの上下(Z軸の正負方向)、前後(Y軸の正負方向)、左右(X軸の正負方向)から見た、計六面の高さ画像を高さ画像データに基づいて生成し、高さ画像が一致しているか否かを確認する。ここでは90°の刻み角度で回転させて一致しているか否かを確認し、他の面と一致する見え方となる面は、サーチモデルの登録対象から除外する。このような除外は、画像処理装置300の使用者が手動で行うこともできるし、画像処理装置300側で自動で行わせてもよいし、あるいはこれらを組み合わせて行うようにしてもよい。
具体例について説明すると、例えば、ワークWKが直方体であった場合には、三次元CADモデルを上から見た高さ画像と下から見た高さ画像とが同じになり、この場合には、いずれか一方を削除する。三次元CADモデルを左から見た高さ画像と右から見た高さ画像も同じになるので一方を削除する。また、三次元CADモデルを前から見た高さ画像と後から見た高さ画像も同じになるので一方を削除する。ワークWKが複雑な形状であっても、一方向から見た高さ画像と他方向から見た高さ画像が同じになることがあり、この場合も一方の高さ画像を削除することができる。ワークWKが立方体の場合は6面のうち、5面を削除することができる。
同じになる画像の一方を削除した結果、残った高さ画像データを保存する。保存する高さ画像データが三次元CADモデルの上下左右前後のいずれの方向から見た画像であるかを示す情報、即ち方向に関する情報を当該高さ画像データに付与し、この方向に関する情報と高さ画像データとを関連付けて画像処理装置300の記憶部320に保存しておく。これにより、上下左右前後の各面の関係性情報を持った状態で各高さ画像データを保存しておくことができるので、1つのワークモデルを異なる方向から見た複数の高さ画像データを相互に関連付けて画像処理装置300に登録しておくことが可能になる。
したがって、高さ画像データを記憶部320から読み出したときに、例えば、三次元CADモデルの6方向から見た高さ画像を関連付けて得ることができる。以上のように、ワークモデルを異なる方向から見た複数の高さ画像データをワークWKのサーチモデルとして登録することが可能になる。ワークWKのサーチモデルは、複数種登録しておくこともできる。尚、面の関係性情報を保存することなく、高さ画像データのみ保存するようにしてもよい。
以上の方法は、ワークWKの三次元CADデータが存在している場合の方法であるが、仮にワークWKの三次元CADデータが無い場合には、ワークモデルを異なる方向から見た複数の高さ画像データをサーチモデルとして登録するようにしてもよい。すなわち、登録したい面を上向きにしたワークWKを平面上に置き、三次元計測を行う。この三次元計測は、ロボットシステム1000のセンサ部2を利用して行うことができる。センサ部2により得られた計測データが出力され、計測データに基づいて、ワークWKの登録したい面の高さ画像データを得ることができる。
このようにして得られた高さ画像データに基づいて高さ画像を得た後、その高さ画像をワークWKのサーチモデルとして登録する。登録後、サーチに必要な分、登録し終えたか否かを判定する。この判定はユーザが行うことができるが、画像処理装置300に行わせるようにしてもよい。すなわち、ワークWKを上下左右前後の各方向から見た形状が全て異なれば、六面の全てについて高さ画像を取得するのが好ましいが、上述した長方形の場合のように、同じ形状の面がある場合には六面の全てについて行わなくてもよい。サーチに必要な分、登録し終えたら、終了する。
(登録部302の構成)
図6に示すように、登録部302は、ロボットRBTのフランジFLGに取り付けられるハンドHNDの形状を示すハンドモデルを登録する部分である。登録部302によるハンドモデルの登録手順は、図10に示すフローチャートの通りである。開始後のステップSC1は、ロボットRBTのハンドモデルを登録するステップである。ロボットRBTのハンドモデルとは、ハンドHNDの形状を表したモデルである。ロボットRBTのハンドモデルを登録する際には、ハンドHNDのポリゴンデータ(三次元CADデータ)の入力を受け付ける。このステップSC1では、ハンドHNDのポリゴンデータを入力することにより、入力された三次元CADデータで表されるモデルをハンドモデルとして登録する。ハンドHNDの三次元CADデータを入力する際に、当該三次元CADデータの原点位置情報の入力も受け付ける。この原点位置情報の入力は、三次元CADデータに付随するものであるため、ユーザによる入力作業は不要にして、ハンドHNDの三次元CADデータの入力と同時に入力することもできる。
ハンドモデルを登録する際、三次元CADデータ以外にも、直方体や円柱などの三次元形状のパーツを組み合わせてハンドモデルを作成し、この作成したハンドモデルを登録するようにしてもよい。また、三次元CADデータには無いケーブルなどを作成して登録することもできる。
ステップSC2では、ステップSC1で登録したハンドモデルと、そのハンドモデルが装着されるロボットRBTのフランジFLGとの相対的な位置及び姿勢を定義する。具体的には、ハンドモデルにおける取付面と、ロボットRBTのフランジFLGとが一致するように、両者の位置関係を定義しておく。このとき、フランジFLGの座標を基準としたハンドHNDの位置及び姿勢の入力を受け付けることができる。
ステップSC2に続くステップSC3では、ロボットRBTのフランジFLGに装着された状態にあるハンドモデルの先端座標を指定する。この先端座標は、ロボットコントローラ6から取得することも可能であるが、ユーザが設定することも可能である。その後、ステップSC4では、ハンドモデルの登録完了確認を行う。
以上のようにしてロボットRBTのハンドモデルを登録した後、ステップSC5に進む。ステップSC5では、ロボットRBTのハンドHNDで把持するワークモデルの面を選択する。ワークモデルの面は、図9に示すフローチャートで登録した高さ画像で表すことができ、登録されている複数の高さ画像の中から、ロボットRBTのハンドHNDで把持することが可能な面に対応した高さ画像をユーザが選択する。高さ画像の選択にあたっては、高さ画像を表示部3に表示させておき、これら高さ画像の中から使用者が操作部4の操作によって選択することができる。
ステップSC5で高さ画像を選択した後、ステップSC6に進み、ステップSC5で選択した面を把持する時のハンドHNDの位置及び姿勢を登録する。例えば、X軸座標、Y軸座標、Z軸座標、X軸周りの回転角度、Y軸周りの回転角度、Z軸周りの回転角度を個別に入力し、入力された値に対応するように、ハンドモデルを移動させ、高さ画像中の所望位置に配置することができる。これにより、ハンドモデルの位置を調整しながら、ハンドモデルでワークモデルのどの部位をどのような姿勢で把持するか、即ち把持位置及び姿勢を設定することが可能になる。把持位置及び姿勢の設定は、数値を入力する以外にも、例えばハンドモデルを操作部4のマウスで直接的に操作することによっても可能である。
ここで設定する把持位置は、ロボットRBTにより把持される把持候補位置である。ロボットRBTにより把持される把持候補位置は、予め登録されているワークWKの各サーチモデルに対応付けて複数設定することができる。例えば、あるサーチモデルには、2つの把持候補位置を対応付けて設定し、別のサーチモデルには、4つの把持候補位置を対応付けて設定することができる。設定された把持候補位置は、サーチモデルと対応付けられた状態で記憶部320に記憶させておくことができる。
一般に、一のワークWKに対して把持候補位置を複数登録することが多い。これは、把持候補位置を複数登録しておけば、複数の把持解の中から最適な解を選ぶことができるため、仮に得られた把持解候補が、例えばハンドHNDの他の物体との干渉によって最終的な解となり得ない場合、他の把持解候補があれば、把持可能と判定される可能性が高まるからである。このような把持候補位置を複数登録する際、その都度登録を一から行うと、同様の把持候補位置を登録する際に手数が多くなり作業が面倒となる。そこで、既に登録済みの把持候補位置情報をコピーして、この把持候補位置で設定された位置パラメータの一部を変更して、新たな把持候補位置として保存可能とすることで、手間を省いて複数の把持候補位置を容易に登録できるようになる。また、同様に既存の把持候補位置を読み出して、位置パラメータを適宜修正して上書き保存することも可能である。
把持候補位置を登録する際、サーチモデルの原点に対して、ワークWKを把持する際のハンドHNDの相対的な位置及び姿勢を登録する。一方、実際のハンドHNDでワークWKを把持する際には、センサ部2でワークWKを撮像した三次元空間(ビジョン空間)の座標から、ロボットコントローラ6がロボットRBTを実際に動作させる際に用いるロボット座標に変換する必要がある。
具体的には、ワークモデルの位置及び姿勢は、ビジョン空間における位置(X,Y,Z)と姿勢(Rx,Ry,Rz)で求められる(なお姿勢(Rx,Ry,Rz)はZ-Y-X系オイラー角で表現された姿勢を示している)。また、これを把持するハンドHNDの姿勢についても、同様に画像処理装置300の仮想三次元空間における位置(X,Y,Z)と姿勢(Rx,Ry,Rz)として求められる。このようなビジョン空間における位置及び姿勢に基づいて、ロボットコントローラ6がロボットRBTを動作させるには、これらをロボット空間における位置(X’,Y’,Z’)と姿勢(Rx’,Ry’,Rz’)に変換する必要がある。この表示される座標系で算出された位置及び姿勢を、ロボットコントローラ6がハンドHNDを動作させる座標系の位置及び姿勢に座標変換するための変換式を算出する処理は、キャリブレーションと呼ばれる。このキャリブレーションについては後述する。
図10に示すフローチャートのステップSC7では、必要数の把持候補位置を登録できたか否かを判定する。ハンドHNDで把持することが可能な部位が多数あれば、登録すべき把持候補位置の数が多くなるが、これは使用者が判断する事項であるため、ステップSC7の判定は使用者が判定することになる。ステップSC7でNOと判定して必要数の把持候補位置を登録できておらず、登録すべき把持候補位置が他にも残っている場合には、ステップSC5を経てステップSC6に進み、他の把持候補位置を設定し、登録する。一方、ステップSC7でYESと判定して必要数の把持候補位置を登録できている場合には、このフローを終了する。以上の処理を経ることで、図8に示すフローチャートのステップSA1が終了する。
登録部302は、ロボットRBTの形状を示すロボットモデルの登録も受け付ける。ロボットモデルにはロボットRBTのロボットアームの形状を示す情報が含まれている。ロボットモデルの登録は予め準備されたロボットモデルを示すファイルを読み込むことにより実現される。また、ロボットモデルを示すファイルを読み込んだ後、ロボットが設置される空間上の配置を調整することが可能であってもよい。
(キャリブレーションの実行ステップ)
図8に示すフローチャートのステップSA1の後、ステップSA2に進み、図6に示すキャリブレーション実行部303がキャリブレーションを実行する。上述したように、例えばセンサ部2で検出したワークWKはカメラ座標基準での位置及び姿勢が算出されるが、実際にそれをロボットRBTで把持するときはロボット座標基準での位置及び姿勢が必要になる。カメラ座標での位置姿勢をロボット座標での位置姿勢に変換する情報をキャリブレーションデータと呼ぶことができる。
一例として、キャリブレーションデータは2つの座標系間の変換行列として表現される。これを作成するためには、同じ位置姿勢に対するそれぞれの座標基準での位置姿勢の値の組み合わせ列が必要になる。それらを利用して、変換行列を変数として最適化問題を解くことで、2つの座標系間の変換行列を推定できる。
上記組み合わせ列の作成方法として、ロボットRBTに検出対象の物体であるキャリブレーションワークを保持させ、X-Y-Z方向に決まった移動量移動させ、各点でのロボット座標と検出した位置を記録する方法がある。座標変換行列はこの設定範囲内で計算するため、ここで設定される範囲はできるだけ大きくして、ロボットRBTの運用時に検出対象が存在し得る範囲を全てカバーすることが望ましい。計算した範囲外で座標変換を行うと、ずれが大きくなる可能性があるからである。
しかし、設定範囲を大きくすると、その設定範囲がロボットRBTの可動範囲外になったり、ロボットRBTが障害物と干渉してしまったり、検出対象がロボットRBTの陰になり、センサ部2で検出できなくなってしまうといった問題が発生することがある。また、そもそも、ロボットRBTとセンサ部2との位置関係がおおまかにでも分かっていないと、キャリブレーションを行う範囲が適切であるか否か、ハンドHNDが障害物と干渉するか否かといったことを判定できない。
また、ロボットRBTの可動範囲外や、障害物との干渉については事前チェックも可能であるが、検出対象がロボットRBTの陰になってしまう問題については、ロボットRBTとセンサ部2との位置関係が分かっていないとチェックできない。
そこで、本実施形態に係るキャリブレーション実行部303は、第1段階として狭い範囲でキャリブレーションを実行し、これによりロボットRBTとセンサ部2との位置関係を計算しておき、第2段階として、上記第1段階で取得された情報を用いて、上記第1段階で実行した範囲よりも広い範囲でキャリブレーションを実行した時に問題が発生しないかチェックする。一例として、狭い範囲でのキャリブレーションは、例えばユーザが設定した広い範囲でのキャリブレーションを任意の倍率で縮小して、その範囲でキャリブレーションを実行する例を挙げることができる。
キャリブレーションの第1段階として、最初のロボットRBTとセンサ部2との位置関係の計算のためにツール中心算出のデータを利用してもよい。ツール中心算出とは、センサ部2での検出点とロボットRBTの現在地を指すツール中心点とのオフセットを求める計算のことである。ツール中心周りに回転させて各点で検出を行うことで、ツール中心点へのオフセットを計算できる。
以下、図11に示すフローチャートに基づいて、本実施形態のキャリブレーションについて詳細に説明する。スタート後のステップSD1では、中心ロボット位置を設定する。この中心ロボット位置は、キャリブレーション動作を開始する際の開始位置になるため、ステップSD1を開始位置設定ステップと呼ぶこともできる。
ステップSD1では、キャリブレーション実行部303が図12に示すユーザインターフェース画面50を生成して表示部3に表示させる。ユーザインターフェース画面50には、ロボット座標を表示する座標表示領域51と、ロボットモデルを表示するロボットモデル表示領域52と、設定用ウインドウ53とが設けられている。座標表示領域51には、キャリブレーションを行う際の各点の座標が表示される。この例では、点0~点4まで表示しているが、表示の切り替えを行うことで、全ての点(後述する例では27点)の座標を確認することができる。
ロボットモデル表示領域52には、ピッキング動作をさせるロボットRBTの三次元モデルを表示させることができる。このロボットモデルの元になるデータは、例えば外部からロボットRBTの三次元データを読み込むことで取得できる。
設定用ウインドウ53には、開始位置設定ボタン53a、検出ツール設定ボタン53b、ツール中心算出ボタン53c及びキャリブレーション開始ボタン53dが設けられている。さらに、設定用ウインドウ53には、上記ボタン53a~53dのうち、操作されたボタンに対応した処理や動作を説明するためのメッセージや説明図を表示する情報表示領域54も設けられている。
図11に示すステップSD1を実行する際には、ユーザが図12に示す設定用ウインドウ53の開始位置設定ボタン53aを操作する。キャリブレーション実行部303は、開始位置設定ボタン53aが操作されたことを検出すると、情報表示領域54に、開始位置の設定に関する説明を表示するとともに、設定用ウインドウ53に開始位置設定領域55を表示する。
開始位置設定領域55では、「ロボット座標系」と「各軸」のうち、ユーザが一方を選択可能になっている。「ロボット座標系」が選択されると、ロボット座標基準での現在のロボットRBT(フランジFLG)の座標(X,Y,Z,Rx,Ry,Rz)を取得し、これを開始位置として登録する。一方、「各軸」が選択されると、ロボットアームARMの各関節部分の角度を取得し、これによって算出されるフランジFLGの座標を開始位置として登録する。六軸ロボットRBTであるため、J1~J6までの6変数が存在する。これら変数を変更することで、開始位置設定を行うことができる。
続いて、図11に示すフローチャートのステップSD2に進み、検出ツールの設定を行う。検出ツールとは、キャリブレーションを実行する際に使用する物であり、単にツールと呼んだり、ワークと呼んだりすることができる。検出ツールはロボットRBTに把持させ、後述するように移動させる物であり、設定された検出ツールをパターンマッチングで検出してキャリブレーションデータを作成することができる。
図13に示すように、キャリブレーション実行部303は、検出ツール設定ボタン53bが操作されたことを検出すると、情報表示領域54に、検出ツールの設定に関する説明を表示するとともに、設定用ウインドウ53に検出ツール設定領域56を表示する。検出ツール設定領域56では、検出ツールを追加したり、編集することが可能になっている。
続いて、図11に示すフローチャートのステップSD3に進み、検出ツールの中心を算出するツール中心算出ステップを行う。図14に示すように、キャリブレーション実行部303は、ツール中心算出ボタン53cが操作されたことを検出すると、情報表示領域54に、ツール中心算出の設定に関する説明を表示するとともに、設定用ウインドウ53にツール中心算出領域57を表示する。ツール中心算出とは、センサ部2による検出点と、ロボットRBTの現在地を指すツール中心点とのオフセットを求める計算のことであり、検出ツールの中心は、パターンマッチングで検出した検出ツールと、ロボットRBTのフランジFLGとのオフセットを求めるために使用できる。例えば、検出ツールをその中心周りに回転させ、各点で検出を行うことで、ツール中心点へのオフセットを計算できる。尚、ツール中心算出の設定の際、検出ツールを上記狭い範囲で実際に動かして仮設定してもよい。
続くステップSD4では、キャリブレーションを実行する領域の設定を行う。ここでは一例として、移動間隔の設定を行う。移動間隔とは、キャリブレーションの際に移動させる検出ツールの間隔である。まず、図15に示すように、キャリブレーション実行部303は、キャリブレーション開始ボタン53dが操作されたことを検出すると、情報表示領域54に、移動間隔の入力に関する説明を表示するとともに、設定用ウインドウ53にキャリブレーション実行用領域58を表示する。
キャリブレーション実行用領域58には、移動間隔をX方向、Y方向、Z方向で個別表示する移動間隔表示領域58aと、設定ボタン58bと、動作チェックボタン58cとが設けられている。キャリブレーション実行部303は、設定ボタン58bが操作されたことを検出すると、図16に示す移動間隔設定用ウインドウ59を表示部3に表示させる。
移動間隔設定用ウインドウ59には、X方向、Y方向、Z方向の各移動間隔を個別に設定可能な設定領域59aが設けられている。各移動間隔は、ユーザが例えば数値(単位:mm)で入力し、設定できる。移動間隔設定用ウインドウ59には、検出ツールを移動させる位置を示す複数の点と、隣合う2点間の寸法(移動間隔)とを図で表示する図表示領域59bも設けられている。
初期点(図16において1として示されている点)は、センサ部2の中心に設定しておく。初期点と、ユーザによって入力された移動間隔とに基づいて、計測すべき27点(9×3)が決定され、それが図16の図表示領域59bに表示される。設定された移動間隔は、図15に示す移動間隔表示領域58aに表示される。
その後、図11に示すフローチャートのステップSD5に進み、動作チェックを行う。動作チェックは、ステップSD3のツール中心算出で決定されたセンサ部2とロボットRBTとのおおよその位置関係に基づいて、ステップSD4で設定された移動間隔で正しくキャリブレーションができるか否かを確認する。
この確認の前に、動作制限領域の設定を行う。キャリブレーション実行部303は、図15に示す動作チェックボタン58cが操作されたことを検出すると、図17に示すロボット動作チェック用ウインドウ60を表示部3に表示する。動作制限とは、例えばロボットRBTの周りに柵が存在している場合に、ロボットRBTがその柵に接触しないように、ロボットRBTの動作範囲を柵内の領域に制限することである。ロボット動作チェック用ウインドウ60内では、動作制限領域をX方向、Y方向、Z方向で個別に設定可能である。動作制限領域はユーザが設定することで、キャリブレーション実行部303によって受け付けられる。
動作制限領域の設定が完了すると、図17に示すロボット動作チェック用ウインドウ60に設けられているロボット動作チェックボタン60aをユーザが操作する。キャリブレーション実行部303は、ロボット動作チェックボタン60aが操作されたことを検出すると、ステップSD3のツール中心算出で決定されたセンサ部2とロボットRBTとのおおよその位置関係を元に、動作制限領域を考慮して、その範囲内でロボットRBTが他の物体に干渉しないか、検出ツールが影に入らないか、検出ツールがセンサ部2の撮像視野に入っているか等の各チェック項目を確認する。動作制限領域の設定がない場合には、設定された移動間隔から決定された27点について上記チェック項目を確認する。
動作チェックが終わると、図11に示すステップSD6に進み、動作に問題がないか否かを判定する。上記チェック項目の全てに問題が無ければ、ステップSD6でYESと判定されてステップSD7に進む。ステップSD7では、図18に示すように確認結果表示ウインドウ61を表示させ、当該ウインドウ61内で問題がなかったことをユーザに報知する。また、ロボットモデル表示領域52には、ロボットモデルとともに、点が表示される。ロボットモデル表示領域52には、センサ部2で撮像された三次元点群の情報、例えばワークWKや容器BX等も表示することができる。
一方、上記チェック項目のうち、1つでも問題がある場合には、ステップSD6でNOと判定されてステップSD8に進む。ステップSD8では、図19に示すように確認結果表示ウインドウ61を表示させ、当該ウインドウ61内で問題があったことを具体的に特定してユーザに報知する。この場合も、センサ部2で撮像された三次元点群の情報をロボットモデル表示領域52に表示させることができる。また、問題がある点を、問題がない点とは異なる形態でロボットモデル表示領域52に表示させることができる。この場合、問題がある点を強調して表示させる等の表示形態を採用できる。
また、ステップSD9では、問題がある点を回避するように、キャリブレーション実行部303が点の位置座標を自動で計算する。この計算結果は、ユーザが図19に示すウインドウ61内の「推奨設定を確認する」というボタン61aを操作することでロボットモデル表示領域52に表示され、確認可能である。
続いて、図11に示すフローチャートのステップSD10に進む。すなわち、ユーザが図15に示す実行ボタン58dを操作するとステップSD10のキャリブレーションが実行され、このキャリブレーションでは、複数の点の位置座標について、ハンドHNDの実際の位置座標と、画像処理装置300に表示されている画像上の位置座標との間の変換式を算出する。座標変換の方法は、特に限定されるものではなく、例えばアフィン変換で変換することができる。
(式1)に示すように、ハンドHNDの実際の位置座標(x’,y’)と、画像処理装置300に表示されている画像上の位置座標(x、y)とに基づいて、6つの自由度を有する変換式の係数a、b、c、d、e、fを求める。対応する位置座標が6つを超える場合には、最小二乗法を用いれば良い。
キャリブレーション実行部303は、図15に示す実行ボタン58dが操作されたことを検出すると、検出ワークが各点を通過するように、ロボットRBTに対して移動指示及び移動先の位置座標を含む移動命令をロボットコントローラ6へ送信する。ロボットコントローラ6は、移動命令に含まれる位置座標へとハンドHNDを移動させる。
キャリブレーション実行部303は、移動命令に応じて移動したハンドHNDの各位置座標である座標値(x’,y’)を、ロボットコントローラ6から取得する。移動したハンドHNDの位置座標と、撮像された検出ツールの画像上での位置座標との位置ずれを調整することができる。
なお、キャリブレーション実行部303において取得する座標値(x’,y’)は、画像処理装置300からの移動命令に応じてハンドHNDが移動した各位置において、ロボットコントローラ6から取得した座標値としているが、画像処理装置300において事前に設定されたハンドHNDの移動目標座標をそのまま上記座標値としても良い。
キャリブレーション実行部303は、ハンドHNDが移動した各移動先にて検出ツールを撮像するようセンサ部2の動作を制御する。これにより、ロボットコントローラ6から取得した移動先のハンドHNDの位置座標に対応する領域を撮像するよう制御することで、撮像された画像に基づいて検出ツールの実際の位置座標である座標値(x、y)を検出することができる。
キャリブレーション実行部303は、各移動先にて撮像された検出ツールの画像に基づいて検出ツールの位置座標である座標値(x、y)を検出し、取得した複数の座標値(x’,y’)と、検出した複数の座標値(x、y)とに基づいて、両座標間の変換規則を算出する。具体的には上記(式1)に座標値を代入して、係数a、b、c、d、e、fを求める。
検出ツールの移動順は、特に限定されるものではないが、例えば図16の図表示領域59bに表示されているような順とすることができる。すなわち、高さが等しい平面内で複数の点を通るように検出ツールを移動させた後、高さが異なる平面内で同様に複数の点を通るように検出ツールを移動させることができる。
以上のようにして、図8に示すフローチャートのステップSA2のキャリブレーション実行ステップが完了する。キャリブレーションデータは記憶部320等に記憶させておくことができる。
(ハンドの撮像ステップ)
図8に示すフローチャートのステップSA3では、ロボットRBTのフランジFLGに取り付けられたハンドHNDをセンサ部2により撮像する。例えば図4に示すように、フランジFLGにハンドHNDが取り付けられている状態で、フランジFLG及びハンドHNDがセンサ部2の撮像視野に入るようにロボットRBTを制御する。具体的には、画像処理装置300は、図20に示すように、ユーザインターフェース画面70にハンド撮像ウインドウ71を表示させる。ハンド撮像ウインドウ71には、ハンドHNDがセンサ部2の撮像視野に入るようにロボットRBTを動かすことについての説明が表示されている。その後、センサ部2に撮像を実行させると、フランジFLG及びハンドHNDが含まれる画像が取得される。取得された画像は、記憶部320に一旦記憶させておくことができるとともに、ユーザインターフェース画面70に設けられている画像表示領域72に表示させることができる。
(撮像時のロボットの座標取得ステップ)
図8に示すフローチャートのステップSA4では、図6に示す取得部304が、センサ部2によりハンドHNDが撮像された際のロボットRBTの座標を取得する。センサ部2によりハンドHNDが撮像された時点のみ、ロボットRBTの座標を取得してもよいし、センサ部2によりハンドHNDを撮像していない間も継続してロボットRBTの現在位置を取得し続けておき、その位置情報の中から、センサ部2によりハンドHNDが撮像された時点のロボットRBTの座標を取得してもよい。取得したロボットRBTの座標は記憶部320に記憶させておくことができる。
また、撮像時のロボットの座標を取得するステップとしては、上述した方法によるもの以外に、例えば表示部3に表示したユーザインターフェース上でユーザによる入力を受け付ける方法であってもよい。この場合、ロボットの座標の入力領域を備えたユーザインターフェースを取得部304が生成して表示部3に表示させ、ユーザによって入力された数値を撮像時のロボットの座標として取得部304が取得する構成例を挙げることができる。
(ハンドモデルの読み込みステップ)
図8に示すフローチャートのステップSA5では、まず、図10に示すフローチャートのステップSC1で登録されたハンドモデルを読み込む。読み込まれたハンドモデルは、ハンドHNDのサーチモデルとして登録される。このステップは、ハンドモデルの登録要求がある場合のみ実行すればよく、例えば前回登録したデータをそのまま使うなどの場合は省略できる。
(ハンドの位置及び姿勢決定ステップ)
図8に示すフローチャートのステップSA6では、図6に示す決定部305がロボットのフランジFLGに取り付けられたハンドHNDの位置及び姿勢を決定する。まず、決定部305が、登録部302で登録されたハンドモデルを読み込むとともに、センサ部2により撮像されたハンドHNDを含む画像とを読み込む。決定部305は、ハンドモデルと、ハンドHNDを含む画像とを読み込んだ後、ハンドモデルと、ハンドHNDを含む画像とをパターンマッチングする。パターンマッチングの手法は、例えば三次元マッチング、三次元サーチ等とも呼ばれている手法である。
パターンマッチングを行うことにより、フランジFLGに実際に取り付けられている実物のハンドHNDを含む画像中に、ハンドモデルが存在するか否かを判定でき、画像中に実物のハンドHNDが含まれていれば、そのハンドHNDを検出して当該ハンドHNDの位置及び姿勢を決定できる。
(ハンドの取付位置算出ステップ)
図8に示すフローチャートのステップSA7では、図6に示す算出部306が、取得部304により取得された撮像時におけるロボットRBTの座標と、決定部305により決定されたハンドHNDの位置及び姿勢に基づいて、フランジFLGに対するハンドHNDの取付位置を算出する。このとき、ハンドHNDの位置及び姿勢を決定する変数として、カメラ座標系における6変数(X,Y,Z,Rx,Ry,Rz)を算出することができる。
具体的には、まず、カメラ座標系におけるハンドHNDの位置姿勢に関する6変数を、ステップSA2で取得したロボット-カメラのキャリブレーションデータを用いてロボット座標系のハンドHNDの位置及び姿勢に関する6変数に変換する。これにより、撮像時におけるロボットRBTの座標が分かる。
撮像時におけるロボットRBTの座標が分かれば、ロボットRBTのフランジFLGが撮像時にどこに存在していたかが分かる。すなわち、フランジFLGの座標をロボットRBTの座標として取得することができる。ロボットRBTの座標から予想されるフランジFLGの原点の位置及び姿勢と、ロボット座標系のハンドHNDの位置及び姿勢との差分を求める。この差分がフランジ座標基準のハンドHNDの位置及び姿勢を示す情報となる。この差分を、フランジFLGに実際に取り付けられているハンドHNDの取付誤差として設定することができる。ハンドHNDの取付誤差は設計値に対する誤差となる。つまり、ハンドHNDがフランジFLGに対して設計値からずれて取り付けられていた場合に、そのずれを例えば具体的な数値等で取得することが可能になる。算出部306は、上記キャリブレーションデータを使用することで、センサ部2により撮像したハンドHNDの位置及び姿勢をフランジ座標系に変換することができる。フランジ座標系での原点位置からフランジFLGに取り付けられたハンドHNDの取付位置の誤差を算出できる。
また、決定部305により決定されたハンドHNDの位置及び姿勢からハンドHNDの原点位置を算出することができる。ハンドHNDの原点位置は、例えばハンドHNDの三次元CADデータの原点位置とすることができる。また、ハンドHNDが取り付けられるべき位置は設計値によって規定されており、この規定位置は予め取得可能である。算出したハンドHNDの原点位置と、予め規定されているハンドHNDが取り付けられるべき位置を示すロボットの座標との差分を求め、求めた差分に従い、フランジFLGに取り付けられたハンドHNDの取付位置を算出できる。
ハンドHNDの取付位置が算出されると、本来ハンドHNDが取り付けられる位置である規定位置から、求めた差分に従って算出された取付位置へとハンドモデル全体をオフセットさせる。そして、ハンドモデル全体を求めた差分に対応する分だけオフセットさせた位置に仮想ハンドモデルを設定する。この仮想ハンドモデルはフランジFLGに対して算出された取付位置に取り付けられていると仮定したものである。すなわち、仮想ハンドモデルは、実際にハンドHNDが取り付けられている位置に設定されるものであり、仮想ハンドモデルの形状は実際のハンドHND及び登録部302で登録されたハンドモデルの形状と同じであるが、位置及び姿勢が設計値とは異なっていて、実際のハンドHNDの取付位置に対応した位置及び姿勢となっている。この仮想ハンドモデルを用いて、後述する干渉判定を行う。実際にハンドHNDが取り付けられている位置を反映した仮想ハンドモデルを用いて干渉判定を実行することで、ハンドHNDの取付位置及び姿勢が設計値からずれていた場合に、干渉判定において干渉しないと判定された解であるのにハンドHNDが周辺物体に干渉してしまったり、逆に、干渉判定において干渉すると判定された解であるのにハンドHNDが周辺物体に干渉しなかったりといったことが発生するのを解消することができる。
(誤差の表示)
算出部306は、ハンドHNDの位置及び姿勢変数ごとに上記誤差を算出する。変数は、上述したように6つ(X,Y,Z,Rx,Ry,Rz)あるので、キャリブレーション実行部303は、X,Y,Z,Rx,Ry,Rzのそれぞれの誤差を取得することができる。
キャリブレーション実行部303は6つ誤差を取得すると、図21に示すような誤差表示ウインドウ75をユーザインターフェース画面70に表示させる。誤差表示ウインドウ75には、X,Y,Z,Rx,Ry,Rzのそれぞれの誤差を表示する誤差表示領域75aが設けられている。X,Y,Zの単位はmmであり、Rx,Ry,Rzの単位は度(゜)である。6変数を例えば縦や横に並べて表示することができる。つまり、画像処理装置300は、算出部306が算出した誤差を変数ごとに表示する表示部3を備えているので、ユーザは変数ごとに誤差を把握できる。
(別の実施例)
上述した実施例では、ハンドHNDの形状を登録部302で登録しているが、ハンドHNDのロボットRBTに対する位置は登録しなくてもよく、ハンドHNDの位置をセンサ部2が撮像した画像から測定している。この実施例以外の別の実施例も本発明に含まれる。
すなわち、別の実施例は、ハンドHNDの形状を登録するとともに、ハンドHNDのロボットRBTに対する位置も登録する例である。ハンドHNDがロボットRBTに設計値通りに取り付けられていれば、どのような位置及び姿勢でハンドHNDが検出されるべきかが、画像処理装置300側で事前に把握できる。その位置及び姿勢と実際に検出された位置及び姿勢の差分を反映させればよい。
別の実施例に係る手順を図22のフローチャートに示す。ステップSE1では、図8のフローチャートのステップSA1と同様に設定ステップを行う。このとき、ハンドHNDのロボットRBTに対する位置も登録部302で登録する。その後、ステップSE2は、図8のフローチャートのステップSA2と同じである。
ステップSE3は、ハンドモデルを読み込み、ハンドモデルのロボットRBTへの取付位置を仮設定する。続くステップSE4、SE5、SE6、SE7は、図8のフローチャートのステップSA3、SA4、SA5、SA6と同じである。
ステップSE8では、ステップSE5で取得した撮像時のロボットの座標と、ステップSE7で決定されたハンドHNDの位置及び姿勢とに基づいて、ハンドHNDとロボットRBTへの取付位置を算出する。その後、ステップSE9では、現在登録されている取付位置に対する誤差を設定に反映する。
また、初期設定としてハンドHNDの取付位置及びツール座標値の設定が可能に構成されていてもよい。この場合、ハンドHNDの取付位置とツール座標値とを設定した後、上述した手法でハンドHNDの取付位置の誤差を算出する。その後、算出された誤差をツール座標値に反映させるようにしてもよい。
例えばハンドHNDの取付位置が初期設定でX=0(mm)、Y=0(mm)、Z=0(mm)、ツール座標値が初期設定でX=0(mm)、Y=0(mm)、Z=177(mm)であったとする。取得された誤差を反映したハンドHNDの取付位置がX=1(mm)、Y=-2(mm)、Z=3(mm)の場合、ツール座標値をX=1(mm)、Y=-2(mm)、Z=180(mm)にする。これにより、ツール座標値も誤差を自動的に反映させて実際のハンドHNDの取付位置に対応した値にすることができる。
また、ツール座標を設定することで、ワークWKを掴む位置は変えずに回転させることができるため、ワークWKを掴む位置を維持したままハンドHNDの姿勢を変えることができる。
(干渉判定)
図23は、干渉判定の手順の一例を示すフローチャートである。干渉判定は、図8のフローチャートに示す処理、図22のフローチャートに示す処理が終了した後に行われる。
図23のフローチャートのステップSF1では、センサ部2が、上述したようにワークWKの存在する作業空間の三次元計測を行う。三次元計測により、容器BX及びワークWKを含む領域の各部の高さを表す高さ画像データを生成する。高さ画像データから高さ画像を得ることができる。高さ画像は、高さ情報を有する画像であって、距離画像、三次元画像等とも呼ばれる。
その後、ステップSF2では、ステップSF1で取得した三次元計測結果である高さ画像と、ワークモデル入力部301により入力されたワークモデルとに基づいて、作業空間内のワークWKをサーチする。これは、図6に示すサーチ部307が実行する。
具体的には、まず、サーチ部307が記憶部320に記憶されているワークモデルを読み込む。サーチ部307は、読み込んだワークモデルを用いて、各ワークモデルの姿勢と位置を特定する三次元サーチを高さ画像に対して行う。すなわち、ワークモデルの各特徴点が、最も一致する状態の位置及び姿勢(X,Y,Z,Rx,Ry,Rz)を、高さ画像の中から探索する。Rx,Ry,Rzは、それぞれX軸に対する回転角、Y軸に対する回転角、Z軸に対する回転角を表しており、このような回転角度の表現方法は種々提案されているところ、ここではZ-Y-X系オイラー角を用いることができる。また一致する位置及び姿勢は、各サーチモデルに対して、1つである必要はなく、一定以上一致する位置及び姿勢を複数検出してもよい。
サーチ部307が高さ画像中にワークWKが存在するか否かをサーチした結果、高さ画像中にワークWKを検出できない場合には、図23に示すステップSF3においてNOと判定されて終了する。
一方、ステップSF2の三次元サーチの結果、高さ画像の中にワークWKを検出できた場合には、ステップSF4に進み、干渉判定及び把持解を算出する。このステップSF4では、まず、サーチ部307がワークWKの把持位置をサーチする。把持位置を1つも検出できない場合は、把持解を算出できないということであるため、次のステップSF5でNOと判定されて終了するか、別のワークWKに対して把持解の算出を試みる。
ステップSF4で把持位置を検出できた場合は、ロボットRBTによりピッキング動作する際にハンドHNDが周囲の物体と干渉するか否かを、図6に示す干渉判定部308が判定する。つまり、ロボットRBTにピッキング動作を実行させる前に、ハンドHNDが周囲の物体と干渉するか否かの判定を実行することで、周囲の物体との干渉を回避するハンドHNDの姿勢を決定することができる。周囲の物体は、例えば容器BX、把持対象以外のワークWK、その他、ピッキング動作時に障害となる部材等である。
ステップSF4の干渉判定ステップでは、高さ画像の各1点1点のpixelデータが示す三次元点群と、仮想ハンドモデルとが干渉するか否かを判定する。干渉判定の前に、三次元サーチで検出された一のワークWKに対して、このワークWKの位置と、登録してあるワークモデルの把持姿勢とに基づいて、ハンドHNDを配置すべき位置と姿勢を計算する。計算された位置において、ハンドHNDが周囲の物体と干渉しないかどうかを、仮想ハンドモデルを利用して判定する。
ステップSF4の干渉判定ステップでは、高さ画像の各1点1点のpixelデータが示す三次元点群と、ロボットモデルとが干渉するか否かが判定されてもよい。仮想ハンドモデルとロボットモデルとが周囲の物体と干渉するかを判定することにより、干渉判定において干渉しないと判定された解であるのにハンドが周辺物体に干渉してしまったり、逆に、干渉判定において干渉すると判定された解であるのにハンドが周辺物体に干渉しなかったりといったように実運用時とは異なる判定をしてしまうという問題の発生を減らすことができる。
この干渉判定では、仮想ハンドモデルの断面モデルを利用して三次元点群が断面モデルと干渉しているか否かを判定することができる。例えば、断面モデルから全ての三次元点が離れている場合には、三次元点群、すなわち高さ画像と仮想ハンドモデルとが干渉していないと判定し、一方、断面モデルの内側に三次元点が1つでも入っている、または断面モデルの縁部に三次元点が1つでも接している場合には、三次元点群、すなわち高さ画像と仮想ハンドモデルとが干渉していると判定する。干渉していない場合は、このワークWKに対して把持解を算出することができたということであり、ステップSF5においてYESと判定されて終了する。一方、三次元点群と仮想ハンドモデルとが干渉している場合は、このワークWKに対して把持解を算出することができないということであり、ステップSF5においてNOと判定されて終了するか、同じワークWKの別の把持位置や、別のワークWKに対して把持解の算出を試みる。
また、同じ把持位置であっても、ハンドHNDの位置及び姿勢の少なくとも一方を変えることで、周囲の物体との干渉を回避できる場合があるので、干渉すると判定された場合には、干渉判定部308が、仮想ハンドモデルの位置及び姿勢の少なくとも一方を変えて同じ把持位置を把持したときの干渉判定を実行させることができる。これにより、干渉判定部308は、干渉を回避するハンドHNDの位置及び姿勢を決定できる。
干渉判定は、断面モデルを利用して三次元点群が断面モデルと干渉しているか否かを判定する方法に限らず、仮想ハンドモデルやロボットモデルの表面に対応するポリゴンデータと三次元点群と干渉しているか否かを判定する方法であってもよい。
以上の手順では、いずれかのワークWKで把持解が得られると、その時点で把持候補位置を検討する処理を終了して、得られた把持解に該当する把持候補位置でワークWKを把持するように処理している。ただ、この方法に限らず、例えば把持可能なすべての把持候補位置を1つのワークWKについて求めた上で、いずれの把持候補位置を選択するかをユーザが決定するように構成してもよい。また、ワークWKの置かれた高さ情報に注目し、ワークWKが置かれた高さが高いもの、いいかえると、ばら積みされたワークWK群の内で、より上方に位置するものを把持候補位置として選択することもできる。
(経路生成、制御信号出力、ロボット動作の流れ)
図23のフローチャートに示す干渉判定が終了してハンドHNDが周囲の物体と干渉しないと判定された場合には、図24のフローチャートのステップSG1に進む。ステップSG1では、図6に示す経路生成部309が、干渉判定部308による判定結果に基づいて、ハンドHNDが周囲の物体との干渉を回避可能な複数の経由点を決定し、当該経由点を結ぶようにハンドHNDの経路生成を行う。
例えば、経路生成部309は、ロボットハンドHNDの現在位置からアプローチ位置を介してワークWKの把持位置までの当該ロボットハンドHNDの経路を生成するとともに、開始位置である把持位置からステージSTG上への載置位置までのロボットハンドHNDの経路を生成する。
ステップSG1で生成する経路は、複数の経由点を経由する経路であるが、ステップSG1で生成する経路には、経由点を経由しない経路を含むこともできる。
ステップSG1の経路生成処理を経た後、ステップSG2では、経路生成部309が把持位置、載置位置、経由点等の座標を出力する。ロボットコントローラ6は、経路生成部309から出力された把持位置、載置位置、経由点等の座標を受け取って制御信号を生成し、生成した制御信号をロボットRBTに出力する。その後、ステップSF3では、ロボットRBTが制御信号に従って動作してワークWKを所定の経路で搬送する。
経路生成部309がロボットコントローラ6へ出力する点は、固定経由点(ユーザが設定する固定的な点、及び、経路生成部309が自動算出するアプローチ位置、把持位置、退避位置)と、経路生成の途中経由点(経路生成部309が自動算出する点)とがある。ロボットコントローラ6に出力する経由点についてもアーム部ARMの各軸値での出力と、X、Y、Z、Rx、Ry、Rzでの出力との両方が可能である。
仮に、経路生成部309がアプローチ位置や把持位置等を出力するのみだと、ロボットコントローラ6側で容器BXなどの障害物を避けるようプログラムを組む必要があり、これはプログラムの複雑化を招き、ユーザによるプログラムのカスタマイズを難しくしてしまう。これに対し、本例のように、経路生成部309にロボットハンドHNDの動作全体を計画させ、いくつかの途中経由点をロボットコントローラ6へ出力できるようにすることでロボットコントローラ6側のプログラム記述を簡単にすることができるメリットがある。
本例では、経路生成部309が、把持位置を把持するためのロボットハンドHNDのアプローチ位置、把持位置及び把持後の退避位置のうち、任意の1つの属性を有する固定経由点の座標も決定するように構成されている。そして、経路生成部309は、決定した固定経由点の座標、及び固定経由点の属性を示す属性情報をロボットRBTに接続されたロボットコントローラ6に出力することができる。
尚、画像処理装置300にはロボットRBTの機種が入力可能である。ロボットRBTの機種が入力されると、入力されたロボットRBTを制御するロボットコントローラ6との接続が可能になるとともに、入力されたロボットRBTの各種データ(アーム部ARMの可動範囲等)も自動的に読み込むことができる。また、通信形式をロボットRBTのメーカーに応じた形式に自動的に変更することができる。すなわち、例えばロボットRBTの主要なメーカーが製造する主要なロボットRBTの情報、通信形式を予め記憶部320等に記憶させておき、ユーザの入力操作によってそれら情報を読み出して利用することができるようになっているので、設定時にロボットRBTの情報等を個別に入力せずに済む。
(実施形態の作用効果)
以上説明したように、この実施形態によれば、ロボットRBTのフランジFLGに実際に取り付けられている実物のハンドHNDを含む画像中に、ハンドモデルが存在するか否かをパターンマッチングによって判定し、その判定結果に基づいて、フランジFLGに取り付けられた実物のハンドHNDの位置及び姿勢を決定することができる。
決定された実物のハンドの位置及び姿勢と、実物のハンドHNDを撮像したときのロボットRBTの座標とに基づくことで、フランジFLGに実際に取り付けられているハンドHNDの当該フランジFLGに対する取付位置を算出できる。つまり、ハンドHNDがフランジFLGに対して設計値からずれて取り付けられていた場合に、そのずれを取得することができる。
そして、干渉判定部308は、実際のハンドHNDの取付位置を反映させた状態で、当該ハンドHNDが周囲の物体と干渉するか否かを判定することが可能になるので、ユーザが手動で位置や姿勢を調整することなく、実際のハンドHNDの位置及び姿勢を基準とした適切な干渉判定ができる。
この干渉判定に基づいて経路設生成部309が経路を生成するので、生成された経路も、実際のハンドHNDの位置及び姿勢を反映した適切なものになる。
上述の実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。さらに、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。