以下、本発明の実施形態を図面に基づいて詳細に説明する。尚、以下の好ましい実施形態の説明は、本質的に例示に過ぎず、本発明、その適用物或いはその用途を制限することを意図するものではない。
図1は、本発明の実施形態に係るロボットシステム1000の構成例を示す模式図である。この図1は、各種製品の製造工場等にある作業空間に積み上げられた複数のワークWKを、ロボットRBTを用いて順次取り出し、所定の場所に設置されているステージSTGまで搬送して該ステージSTG上に載置するばら積みピッキングを行う例について示している。
ロボットシステム1000はロボットRBTとロボットRBTを制御するロボットコントローラ6とを備えている。ロボットRBTは、産業用の汎用ロボットであり、ベース部が工場等の床面に対して固定されている。ロボットRBTは、例えばマニピュレータ等とも呼ばれており、6軸制御が可能に構成されている。このロボットRBTは、ベース部から延びるアーム部ARMと、アーム部ARMの先端部に設けられたエンドエフェクタEETとを備えている。アーム部ARMは、可動部としての関節部を複数備えた多関節型に構成することができる。アーム部ARMの各関節部の動作及びアーム部ARM自体の回転動作によってエンドエフェクタEETを可動範囲内の所望の位置まで移動させることができる。
エンドエフェクタEETは、ワークWKを把持するハンド部等で構成することができる。エンドエフェクタEETは、図5Aに示すようにワークWKの外側を挟み込んで把持する構造のエンドエフェクタEET1、図5Bに示すように空洞部を有するワークWK2の内部に爪部を挿入して拡開させることによって保持する構造のエンドエフェクタEET2、図5Cに示すように板状のワークWK3を吸引して保持するエンドエフェクタEET3等があり、いずれのエンドエフェクタも使用することができる。また、本明細書で「把持」とは、図5Aに示すワークWKの外側を挟み込む方法、空洞部に爪部を挿入して拡開させる方法、吸引する方法等の全ての例を含む意味で使用する。
ロボットRBTは、ロボットコントローラ6によって制御される。ロボットコントローラ6はアーム部ARMの動作やエンドエフェクタEETの開閉動作等を制御する。またロボットコントローラ6は図2に示すロボット設定装置100から、ロボットRBTの制御に必要な情報を取得する。例えば、図1に示す容器BXに無作為に投入された多数の部品であるワークWKの三次元形状を、三次元カメラや照明等のセンサ部2を使用して取得し、ロボット設定装置100でワークWKの位置や姿勢を検出して、その情報をロボットコントローラ6が取得する。
ロボットシステム1000の機能ブロック図を図2に示す。この図に示すロボットシステム1000は、ロボットRBT及びロボットコントローラ6の他に、ロボット設定装置100と、センサ部2と、表示部3と、操作部4と、ロボット操作具7とを備える。
操作部4では、後述する物理シミュレーション、ピッキング動作シミュレーション、画像処理に関する各種設定を行う。またセンサ部2で、ワークWKを撮像してワークWKの三次元形状を取得する。さらに表示部3で、各種設定や、ロボットRBTの動作状態の確認、ロボット設定装置100の動作状態の確認、物理シミュレーションの確認、ピッキング動作シミュレーションの確認等を行う。さらに、ロボット設定装置100の内部に設けられているロボットピッキングシミュレーション装置200や画像処理装置300が各種シミュレーション、三次元サーチ、干渉判定、把持解の算出等を行う。
一方、ロボットコントローラ6はロボット設定装置100から出力される信号に従い、ロボットRBTの制御を行うように構成された周知の部材である。またロボット操作具7は、ロボットRBTの動作設定を行う。なお、図2の例では操作部4とロボット操作具7を別個の部材としているが、これらを共通の部材としてもよい。
センサ部2は、ロボットビジョンなどと呼ばれる、作業空間やワークWKを撮像する部材であり、この実施形態では、ワークWKが少なくとも撮像対象物となり、撮像対象物には容器BXが含まれていてもよい。センサ部2で撮像された画像から、ばら積みされたワークWKの三次元形状を示す三次元形状データを取得することが可能になる。容器BXの三次元形状を示す三次元形状データも、センサ部2で撮像された画像から取得することができる。
尚、ワークWKや容器BXの三次元形状を取得する方法は、例えば、パターン投影法、ステレオ法、レンズ焦点法、光切断法、光レーダ法、干渉法(白色干渉法)、TOF方式などがあり、これらの方法のうち、どの方法を用いてもよい。各方法は、従来から周知であるため、詳細な説明は省略する。本実施形態においては、パターン投影法のうち、周期的な照度分布を有するパターン光を撮像対象物に照射し、撮像対象物の表面で反射した光を受光する位相シフト法を用いている。
センサ部2は、測定対象物であるワークWKの形状を測定する形状測定装置400の一構成要素でもある。形状測定装置400によって容器BXの形状を測定することもできる。形状測定装置400は、ロボット設定装置100の一部とすることができるが、別部材として構成することもできる。センサ部2の具体的な構成は、三次元形状の計測技術に応じて決定される。この例では、センサ部2は、カメラ、照明又はプロジェクタ等を備える。例えば位相シフト法でワークWKの三次元形状を計測する場合は、センサ部2として図4に示すように、プロジェクタ(投光部)PRJと、複数のカメラ(受光部)CME1、CME2、CME3、CME4とを備える。プロジェクタPRJは、ワークWKに光を照射する部材である。カメラCME1、CME2、CME3、CME4は、プロジェクタPRJにより投光されてワークWKの表面で反射した光を受光する撮像素子を有する部材である。投光部の光源は、例えば複数の発光ダイオード、液晶パネル、有機ELパネル、デジタルマイクロミラーデバイス(DMD)等で構成することができる。
センサ部2は、カメラCME1、CME2、CME3、CME4やプロジェクタPRJといった複数の部材で構成する他、これらを一体的に構成してもよい。例えばカメラCME1、CME2、CME3、CME4やプロジェクタPRJを統合してヘッド状とした3D撮像ヘッドを、センサ部2とすることができる。
また三次元形状データの生成自体を、センサ部2で行うこともできる。この場合、センサ部2に三次元形状データの生成機能を実現する画像処理IC等を設ける。あるいは、三次元形状データの生成を、画像処理装置300側で行わず、センサ部2で撮像した生画像を、画像処理装置300側で画像処理して三次元画像等の三次元形状データを生成する構成としてもよい。
さらに、センサ部2で撮像された画像に基づいて、キャリブレーションを実行することにより、実際のワークWKの位置座標(エンドエフェクタEETの移動位置の座標)と、表示部3上に表示された画像上の位置座標とをリンクさせることができる。
ロボット設定装置100は、センサ部2で得られたワークWKの三次元形状データに基づいて、三次元サーチ、干渉判定、把持解算出等を行う。このロボット設定装置100は、専用の画像処理プログラムをインストールした汎用のコンピュータや、専用に設計された画像処理コントローラ、専用のハードウェアで構成することができる。また、グラフィックボードなどのハードウェアを画像検査処理に特化させた専用のコンピュータに、画像処理プログラムをインストールした構成とすることもできる。
なお図2の例では、センサ部2やロボットコントローラ6等をロボット設定装置100とは別個の部材で構成する例を示しているが、本発明はこの構成に限られず、例えばセンサ部2と画像処理装置100とを一体化したり、あるいはロボットコントローラ6をロボット設定装置100に組み込むこともできる。このように、図2に示す部材の区分けは一例であって、複数の部材を統合させることもできる。例えばロボット設定装置100を操作する操作部4と、ロボットコントローラ6を操作するロボット操作具7とを、共通の部材としてもよい。
センサ部2はロボットRBTと別体としている。すなわち、センサ部2をロボット本体5のアーム部ARMに設けない、オフハンド形式と呼ばれる形態となっている。尚、センサ部2をアーム部ARMに設けてもよい。
表示部3は、ロボット設定装置100で取得されたワークWKの三次元形状を表示させたり、各種シミュレーション画像を表示させたり、各種設定や動作状態の確認を行うための部材であり、例えば、液晶モニタや有機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をエンドエフェクタEETで把持して、把持したワークWKを所定の基準姿勢にて、載置場所(ステージSTG)に載置してエンドエフェクタEETを開放するようにロボットRBTの動作を制御する。ステージSTGは、例えばコンベアベルト上やパレット等を挙げることができる。
ここで本明細書において、ばら積みピッキングとは、容器BXに入れられて無作為に積み上げられたワークWKを、ロボットRBTで把持して、所定の位置に載置する他、容器を用いずに所定の領域に積み上げられたワークWKに対して把持、載置を行う例、あるいは所定の姿勢で並べられて積み上げられたワークWKを順次把持、載置する例も含む意味で使用する。また、必ずしもワークWK同士が積み重ねられている状態であることは要さず、ワークWK同士の重なりがない状態で平面上にランダムに置かれたワークWKについても、本明細書においてはばら積みと呼ぶ(順次ピッキングされていき、ピッキングの終盤でワークWK同士の重なりがない状態となった場合でも依然としてばら積みピッキングと呼ばれるのと同じ理由である)。なお、本発明はばら積みピッキングに必ずしも限定されるものでなく、ばら積みされていないワークWKをピックアップする用途にも適用できる。
また、図1の例ではセンサ部2を作業空間の上方に固定しているが、センサ部2の固定位置は、作業空間を撮像できる位置であればよく、例えば作業空間の斜め上方や側方、下方、斜め下方など、任意の位置に配置することができる。ただし、アーム部ARM上のような、可動する不定位置にセンサ部2を配置する態様は除かれる。さらにセンサ部2が有するカメラや照明の数も、1個に限らず複数個としてもよい。さらにまたセンサ部2やロボットRBT、ロボットコントローラ6との接続は、有線接続に限られず、周知の無線接続としてもよい。
ロボットシステム1000でばら積みピッキング動作を行うにあたり、予めばら積みピッキング動作を行わせるための設定を含めたティーチングを行うこともできる。具体的には、ワークWKのどの部位を、エンドエフェクタEETがどのような姿勢で把持するのか、把持位置及び姿勢などの登録を行う。このような設定は、ペンダント等のロボット操作具7で行うことができる。また、後述するように、実際のロボットを操作せずに、ビジョン空間上で設定を行うこともできる。
表示部3は、ワークWKの三次元形状を仮想的に表現するワークモデルや、エンドエフェクタEETの三次元形状を仮想的に表現する、三次元CADデータで構成されたエンドエフェクタモデルを、仮想的な三次元空間上でそれぞれ三次元状に表示させる。さらにこの表示部3は、ワークモデルの基本方向画像を六面図として表示させることもできる。これにより、ワークモデルの各姿勢を六面図で表示させて把持位置の設定作業を行えるようになり、従来面倒であった把持位置の設定作業を容易に行えるようになる。
(ロボットピッキングシミュレーション)
ロボットシステム1000は、作業空間に積み上げられた複数のワークWKをロボットRBTによって順次取り出すばら積みピッキング動作をシミュレーションするためのロボットピッキングシミュレーション装置200を備えている。ロボットピッキングシミュレーション装置200は、画像処理装置300と一体化することができ、画像処理装置300と共にロボット設定装置100の内部に設けることができる。画像処理装置300は、作業空間に積み上げられた複数のワークWKを把持して順次取り出すピッキング動作を行うロボットRBTの制御に用いられる装置である。
図3に示すように、ロボット設定装置100は、設定部20、データ容量圧縮部21、物理シミュレーション部22、ばら積みデータ生成部23、サーチ処理部24、ピッキング動作シミュレーション部25、表示制御部26、サーチモデル登録部27、把持位置設定部28、三次元計測部30、干渉判定部31、把持位置決定部32、高さ画像生成部33、画素判定部34、ハンド部形状入力部35、露光制御部40及び露光時間設定部41を備えている。これら各部は、ロボットピッキングシミュレーション装置200または画像処理装置300を構成する部分であり、ハードウェアで構成することもできるし、ソフトウェアで構成することもできる。また、これら各部を全て一体化して1つの装置にすることもできるし、任意の一部分を他の部分と別にして複数の装置でロボット設定装置100を構成することもできる。また、これら各部を例えばマイクロプロセッサ(MPU)やCPU、LSI、FPGAやASIC等のゲートアレイ、DSP等のハードウェアやソフトウェア、あるいはこれらの混在により実現できる。また必ずしも各構成要素が図3等に示した構成と同一でなくてもよく、その機能が実質的に同一であるもの、及び一つの要素が図3に示す構成における複数の要素の機能を備えるものは、本発明に含まれる。
例えば、露光制御部40及び露光時間設定部41は、センサ部2に設けることができる。また、表示制御部26は表示部3に設けることができる。また、ロボット設定装置100には各種情報を記憶するための記憶部42も設けられている。記憶部42は、半導体メモリやハードディスク等で構成することができる。また、記憶部42には、CD-ROMやDVD-ROM等の各種記憶媒体に記憶されている情報を読み取り可能な読み取り装置を設けることもできる。
ロボットシステム1000の運用前、即ち、実際の作業現場でワークWKの把持及び載置作業を行う前に、ロボットピッキングシミュレーション装置200によってロボットRBTの把持動作や載置動作のシミュレーションを三次元的に行うことができるように構成されている。また、ロボットRBTやワークWKを用意しなくても、ロボットRBTによりワークWKのピッキング動作を確認することができるように構成されている。
ロボットピッキングシミュレーションでは、複数のワークモデルWKM(図17Aや図23等にその一例を示す)を無作為に積み上げたばら積み状態を生成する物理シミュレーションと、物理シミュレーションで生成されたばら積み状態のデータを利用してワークモデルWKMの位置及び姿勢を検出し、ロボットRBTによるピッキング動作のシミュレーションを実行するピッキング動作シミュレーションとが行われる。
以下、ロボットピッキングシミュレーション装置200の構成及びロボットピッキングシミュレーション装置200によって実現されるロボットシミュレーション方法について図6に示すロボットシミュレーションフローチャートに基づいて具体的に説明する。
ロボットシミュレーションを開始する際には、図6に示すロボットシミュレーションフローチャートの開始後、ステップSA1においてシミュレーションを実行する環境(シミュレーション環境)を設定する。シミュレーション環境の設定項目としては、ばら積みをさせるワークの数、容器BXの情報、床の情報、センサ部2を構成するカメラCMEやプロジェクタPRJの設計情報等が挙げられる。また、ピッキング動作シミュレーション時には、容器BXに対して、実運用上発生し得る、ランダムな位置ずれを発生させることもでき、この際の位置ずれの範囲等をシミュレーション環境の設定に含めることもできる。また、ワークの質量、重心、反発係数、摩擦係数、容器BXの底面や側壁の反発係数、摩擦係数等もシミュレーション環境に含めることができる。
シミュレーション環境の主要な設定手順は、図7に示すサーチモデル及び容器モデルの設定の手順を示すフローチャートと、図8に示すハンドモデル及び把持位置の設定の手順を示すフローチャートに示す通りである。サーチモデル及び容器モデルの設定と、ハンドモデル及び把持位置の設定とは、どちらを先に行ってもよい。サーチモデル及び容器モデルの設定と、ハンドモデル及び把持位置の設定とは、図3に示す設定部20で行うことができる。
図7に示すサーチモデル及び容器モデルの設定の手順を示すフローチャートの開始後のステップSB1では、ワークWKのサーチモデルを登録する。ワークWKのサーチモデルとは、後述するサーチ処理を実行する際に使用されるワークWKの形状を表したモデルである。ステップSB1でワークWKのサーチモデルを登録する際には、ワークWKの三次元CADデータ(CADモデル)を読み込んで、ロボットピッキングシミュレーション装置200が有する記憶部42に一旦記憶させておく。CADデータは、ワークモデルのデータであり、従来から一般的に用いられているフォーマットのデータを使用することができる。
この実施形態では、CADデータのフォーマットとして最もシンプルなSTL形式を用いている。STL形式は、三角形のポリゴン情報(3点の座標とその面の法線ベクトル)の羅列のみで構成されるデータである。あるいはワークモデルとして、三次元情報を有する点群データで構成してもよい。あるいはまた、ワークモデルを、高さ情報を有する画像データ、例えば高さ画像や距離画像で構成してもよい。
ステップSB1は、ワークの三次元形状をモデル化したワークモデルを設定するワークモデル設定ステップでもあり、図3に示すロボット設定装置100が有する設定部20で行われる。このステップSB1で読み込んだCADデータのポリゴン数は、数千個から数万個ある場合がある。
ステップSB1でサーチモデルのCADデータを読み込んだ後、ステップSB2に進み、サーチモデルの確認及び登録を行う。例えば、読み込んだサーチモデルのCADデータを表示部3に表示させることにより、ロボットピッキングシミュレーション装置200の使用者が、所望のサーチモデルであるか否かを確認することができる。その結果、所望のサーチモデルである場合には、そのサーチモデルをロボットピッキングシミュレーション装置200に登録する。確認の結果、所望のサーチモデルでない場合には、別のCADデータを読み込み、再び確認する。
ステップSB2では、サーチモデルの登録の際、CADモデルの外接直方体を規定し、この外接直方体の中心をCADの原点に補正する原点補正処理を行う。ワークモデルの原点は、三次元CADデータが有する座標情報から、ロボット設定装置100が自動的に決定する。例えばワークモデルの三次元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°の刻み角度で回転させて一致しているか否かを確認し、他の面と一致する見え方となる面は、サーチモデルの登録対象から除外する。このような除外は、ロボットピッキングシミュレーション装置200の使用者が手動で行うこともできるし、ロボットピッキングシミュレーション装置200または画像処理装置300側で自動で行わせてもよいし、あるいはこれらを組み合わせて行うようにしてもよい。
具体例について説明すると、例えば、ワークWKが直方体であった場合には、CADモデルを上から見た高さ画像と下から見た高さ画像とが同じになり、この場合には、いずれか一方を削除する。CADモデルを左から見た高さ画像と右から見た高さ画像も同じになるので一方を削除する。また、CADモデルを前から見た高さ画像と後から見た高さ画像も同じになるので一方を削除する。これにより、サーチモデルの数を減らすことができるので、後述する各処理の速度を向上させることができる。ワークWKが複雑な形状であっても、一方向から見た高さ画像と他方向から見た高さ画像が同じになることがあり、この場合も一方の高さ画像を削除することができる。ワークWKが立方体の場合は6面のうち、5面を削除することができる。
同じになる画像の一方を削除した結果、残った高さ画像データを保存する。保存する高さ画像データがCADモデルの上下左右前後のいずれの方向から見た画像であるかを示す情報、即ち方向に関する情報を当該高さ画像データに付与し、この方向に関する情報と高さ画像データとを関連付けてロボットピッキングシミュレーション装置200の記憶部42に保存しておく。これにより、上下左右前後の各面の関係性情報を持った状態で各高さ画像データを保存しておくことができるので、1つのワークモデルを異なる方向から見た複数の高さ画像データを相互に関連付けてロボットピッキングシミュレーション装置200または画像処理装置300に登録しておくことが可能になる。
したがって、高さ画像データを記憶部42から読み出したときに、例えば、CADモデルの6方向から見た高さ画像を関連付けて得ることができる。以上のように、ワークモデルを異なる方向から見た複数の高さ画像データをサーチモデルとして登録することが可能になる。サーチモデルは、作業空間に積み上げられたワークWKの位置及び姿勢を検出するサーチ処理に用いられるモデルであり、複数種登録しておくこともできる。尚、面の関係性情報を保存することなく、高さ画像データのみ保存するようにしてもよい。
以上の方法は、ワークWKのCADデータが存在している場合の方法であるが、仮にワークWKのCADデータが無い場合には、ワークモデルを異なる方向から見た複数の高さ画像データをサーチモデルとして登録するようにしてもよい。すなわち、登録したい面を上向きにしたワークWKを平面上に置き、三次元計測を行う。この三次元計測は、ロボットシステム1000のセンサ部2及び三次元計測部30を利用して行うことができる。三次元計測により得られた計測データは三次元計測部30から出力され、計測データに基づいて、ワークWKの登録したい面の高さ画像データを得ることができる。
このようにして得られた高さ画像データに基づいて高さ画像を得た後、その高さ画像をサーチモデルとして登録する。登録後、サーチに必要な分、登録し終えたか否かを判定する。この判定は使用者が行うことができるが、ロボットピッキングシミュレーション装置200または画像処理装置300に行わせるようにしてもよい。すなわち、ワークWKを上下左右前後の各方向から見た形状が全て異なれば、六面の全てについて高さ画像を取得するのが好ましいが、上述した長方形の場合のように、同じ形状の面がある場合には六面の全てについて行わなくてもよい。サーチに必要な分、登録し終えたら、終了する。
以上のようにしてワークモデルを異なる方向から見た複数の高さ画像データをサーチモデルとして登録するサーチモデル登録ステップを行うことができる。サーチモデル登録ステップは、図3に示すロボット設定装置100が有するサーチモデル登録部27で行われる。
その後のステップSB3では、容器モデルを指定する。常に固定されている箱が容器である場合には、容器モデルを固定箱とする。ステップSB3に続くステップSB4では、容器モデルのサイズ、位置、姿勢を指定する。このステップSB4では、図9に示すようなユーザーインターフェース画面50を設定部20が生成し、表示部3に表示させる。ユーザーインターフェース画面50には、ばら積み状態のワークモデルの高さ画像や、ピッキング動作のシミュレーション画像を表示する画像表示領域50aが設けられている。容器モデルのサイズ、位置、姿勢を指定する際には、容器モデル設定用ウインドウ60が、ユーザーインターフェース画面50に重畳表示される。容器モデル設定用ウインドウ60には、容器モデルのサイズとして、横寸法、縦寸法、深さ寸法をそれぞれ入力可能な寸法入力領域60aが設けられている。操作部4を操作して寸法入力領域60aに各寸法を入力することができる。容器モデル設定用ウインドウ60には、容器モデルの位置を入力可能な位置入力領域60bが設けられている。位置入力領域60bには、システム上の原点に対する容器モデルの相対的な位置として、原点からのX方向の距離、Y方向の距離、Z方向の距離をそれぞれ入力することができる。X方向は横方向とし、Y方向は縦方向とし、Z方向は高さ方向とすることができる。容器モデル設定用ウインドウ60には、容器モデルの姿勢を入力可能な姿勢入力領域60cが設けられている。姿勢入力領域60cには、X軸周りの角度Rx、Y軸周りの角度Ry、Z軸周りの角度Rzをそれぞれ入力することができる。容器モデル設定用ウインドウ60に設けられているOKボタン60dを押せば、入力された値が確定されて反映される。一方、容器モデル設定用ウインドウ60に設けられているキャンセルボタン60eを押せば、入力した内容が反映されないようにキャンセルされる。
容器モデルのサイズ、位置を使用者が入力する以外にも、例えば、容器BXをセンサ部2で撮像し、取得された容器BXの画像に基づいて容器モデルのサイズ、位置を指定することもできる。例えば、平面視で四角形の容器BXの場合、容器BXの画像上で、内側の4つの角部を操作部4によって指定すると、その指定された位置の座標に基づいて容器BXの4辺の長さを設定部20で演算することができる。これにより、容器モデルのサイズ、位置を自動で入力することができる。また、通い箱など、ワークWKを収容する容器BXをモデル化した容器モデルを設定できるようにしてもよい。
図7に示すフローチャートのステップSB4に続くステップSB5では、サーチ条件を設定する。サーチ条件には、例えば、サーチ時に検出可能なワークの数、サーチモデルとワークとの相関値の下限、特徴抽出条件(エッジ抽出の閾値等)等が含まれている。サーチ条件は使用者が設定することで、設定部20により受け付けられる。
次に、図8に示すハンドモデル及び把持位置の設定の手順を示すフローチャートについて説明する。開始後のステップSC1では、ロボットRBTのハンドモデルを登録する。ロボットRBTのハンドモデルとは、ハンド部(エンドエフェクタEET)の形状を表したモデルである。ロボットRBTのハンドモデルを登録する際には、ハンド部のポリゴンデータ(CADデータ)を読み込む。このステップSC1では、ハンド部のポリゴンデータを読み込むことから、ハンド部の形状を入力することができるステップであり、このハンド部形状入力ステップは、図3に示すロボット設定装置100が有するハンド部形状入力部35で行われる。また、ハンドモデルを登録する際、CADデータ以外にも、直方体や円柱などのパーツを組み合わせてハンドモデルを作成し、この作成したハンドモデルを登録するようにしてもよい。また、CADデータには無いケーブルなどを作成することもできる。
その後、ステップSC2に進み、ステップSC1で登録したハンドモデルと、そのハンドモデルが装着されるロボットのフランジ面との相対的な位置及び姿勢を定義する。具体的には、ハンドモデルにおける取付面と、ロボットのフランジ面とが一致するように、両者の位置関係を定義しておく。
ステップSC2に続くステップSC3では、ロボットのフランジ面に装着された状態にあるハンドモデルの先端座標を指定する。この先端座標は、ロボットコントローラ6から取得することも可能であるが、使用者が設定することも可能である。その後、ステップSC4では、ハンドモデルの登録完了確認を行う。
以上のようにしてロボットRBTのハンドモデルを登録した後、ステップSC5に進む。ステップSC5では、ロボットRBTのハンド部で把持するワークモデルの面を選択する。ワークモデルの面は、図7に示すフローチャートで登録した高さ画像で表すことができ、登録されている複数の高さ画像の中から、ロボットRBTのハンド部で把持することが可能な面に対応した高さ画像をユーザが選択する。高さ画像の選択にあたっては、高さ画像を表示部3に表示させておき、これら高さ画像の中から使用者が操作部4の操作によって選択することができる。
ステップSC5で高さ画像を選択した後、ステップSC6に進み、ステップSC5で選択した面を把持する時のハンド部の位置及び姿勢を登録する。例えば、X軸座標、Y軸座標、Z軸座標、X軸周りの回転角度、Y軸周りの回転角度、Z軸周りの回転角度を個別に入力し、入力された値に対応するように、ハンドモデルを移動させ、高さ画像中の所望位置に配置することができる。これにより、ハンドモデルの位置を調整しながら、ハンドモデルでサーチモデルのどの部位をどのような姿勢で把持するか、即ち把持位置及び姿勢を設定することが可能になる。把持位置及び姿勢の設定は、数値を入力する以外にも、例えばハンドモデルを操作部4のマウスで直接的に操作することによっても可能である。
ここで設定する把持位置は、ロボットRBTにより把持される把持候補位置である。ロボットRBTにより把持される把持候補位置は、サーチモデル登録部27で登録されている各サーチモデルに対応付けて複数設定することができる。例えば、あるサーチモデルには、2つの把持候補位置を対応付けて設定し、別のサーチモデルには、4つの把持候補位置を対応付けて設定することができる。設定された把持候補位置は、サーチモデルと対応付けられた状態でロボット設定装置100が有する把持位置設定部28の記憶部42に登録することができる。
一般に、一のワークに対して把持候補位置を複数登録することが多い。これは、把持候補位置を複数登録しておけば、複数の把持解の中から最適な解を選ぶことができるため、仮に得られた把持解候補が、例えばハンド部の他の物体との干渉によって最終的な解となり得ない場合、他の把持解候補があれば、把持可能と判定される可能性が高まるからである。このような把持候補位置を複数登録する際、その都度登録を一から行うと、同様の把持候補位置を登録する際に手数が多くなり作業が面倒となる。そこで、既に登録済みの把持候補位置情報をコピーして、この把持候補位置で設定された位置パラメータの一部を変更して、新たな把持候補位置として保存可能とすることで、手間を省いて複数の把持候補位置を容易に登録できるようになる。また、同様に既存の把持候補位置を読み出して、位置パラメータを適宜修正して上書き保存することも可能である。
把持候補位置を登録する際、サーチモデルの原点に対して、ワークモデルを把持する際のエンドエフェクタモデルの相対的な位置及び姿勢を登録する。一方、実際のエンドエフェクタEETでワークWKをピッキングする際には、センサ部2でワークWKを撮像した三次元空間(ビジョン空間)の座標であるビジョン座標から、ロボットコントローラ6がロボットRBTを実際に動作させる際に用いるロボット座標に変換する必要がある。
具体的には、ワークモデルの位置及び姿勢は、ビジョン空間における、位置(X、Y、Z)と姿勢(RX、RY、RZ)で求められる(なお姿勢(RX、RY、RZ)はZ-Y-X系オイラー角で表現された姿勢を示している)。また、これを把持するエンドエフェクタモデルの姿勢についても、同様にロボット設定装置100の仮想三次元空間における位置(X、Y、Z)と姿勢(RX、RY、RZ)として求められる。このようなビジョン空間における位置及び姿勢に基づいて、ロボットコントローラ6がロボットRBTを動作させるには、これらをロボット空間における位置(X’、Y’、Z’)と姿勢(RX’、RY’、RZ’)に変換する必要がある。この表示される座標系で算出された位置及び姿勢を、ロボットコントローラ6がエンドエフェクタEETを動作させる座標系の位置及び姿勢に座標変換するための変換式を算出する処理は、キャリブレーションと呼ばれる。このキャリブレーションは従来から周知の手法で行うことができる。
図8に示すフローチャートのステップSC7では、必要数の把持候補位置を登録できたか否かを判定する。ハンド部で把持することが可能な部位が多数あれば、登録すべき把持候補位置の数が多くなるが、これは使用者が判断する事項であるため、ステップSC7の判定は使用者が判定することになる。ステップSC7でNOと判定して必要数の把持候補位置を登録できておらず、登録すべき把持候補位置が他にも残っている場合には、ステップSC5を経てステップSC6に進み、他の把持候補位置を設定し、登録する。一方、ステップSC7でYESと判定して必要数の把持候補位置を登録できている場合には、このフローを終了する。
図6に示すステップSA1のシミュレーション環境設定ステップでは、上述のようにサーチモデルの設定及び登録、ハンドモデルの設定及び登録を行うことができるが、これら以外にもシミュレーションを行う上で必要な各種情報の入力や設定を行うことが可能である。
(物理シミュレーション)
ステップSA1に続くステップSA2は、物理シミュレーションの実行ステップである。物理シミュレーションの手順の詳細については、図10及び図14に示すフローチャートに示している。まず、物理シミュレーションを実行する前に、図10のフローチャートに示す物理シミュレーションの設定を行う。ステップSD1では、ピッキングシミュレータを起動する。例えば表示部3にピッキングシミュレータの起動用アイコンを表示させておき、この起動用アイコンがクリックされた時にピッキングシミュレータを起動する等の方法によってステップSD1を実現できる。
シミュレータが起動されると、図11に示すピッキングシミュレータの起動後に表示されるピッキングシミュレーション画面50を表示制御部26が表示部3に表示させる。ピッキングシミュレーション画面50には、第1画像表示領域50aが設けられている。第1画像表示領域50aには、物理シミュレーションで生成されたばら積み状態のワークモデル及び容器モデルの高さ画像、サーチ結果、ワークモデルをハンドモデルで把持する様子等が表示される。ピッキングシミュレーション画面50には、シミュレータの設定用ウインドウ52も表示可能になっている。設定用ウインドウ52には、画像生成方法の設定ボタン52a、閉じるボタン52b、画像生成ボタン52c等が設けられている。
また、ピッキングシミュレータの起動後には、物理シミュレーションの様子を表示する物理シミュレーション表示画面51を表示制御部26が表示部3に表示させる。物理シミュレーション表示画面51は、ピッキングシミュレーション画面50と同時に表示させることができるが、どちらか一方の画面のみを使用者に選択させて表示するように構成することもできる。
ピッキングシミュレータの起動後、図10に示すステップSD2に進む。ステップSD2では、図12に示すような積み方設定ウインドウ53を表示制御部26が表示部3に表示させる。積み方設定ウインドウ53には、ワークの積み方の選択を行うための積み方選択領域53aと、ワークモデルの読み込みを行うファイル選択ボタン53bと、ワークの配置設定を行うワーク配置設定領域53cとが設けられている。積み方選択領域53aでは、ばら積みのシミュレーションを行うか、段積みのシミュレーションを行うかの選択が行えるようになっている。ファイル選択ボタン53bは、ワークモデルWKMの読み込みを開始する場合に操作するボタンである。ワークモデルWKMの読み込みは、図7に示すフローチャートのステップSB1と同様に、ワークWKの三次元CADデータ(CADモデル)を読み込んで、ロボットピッキングシミュレーション装置200が有する記憶部42に一旦記憶させておくことで可能になる。これにより、ワークの三次元形状をモデル化したワークモデルの形状を設定することができる。この設定は、シミュレーション環境の一つであり、設定部20で行われる。この設定を行うステップは設定ステップである。
積み方設定ウインドウ53には、読み込んだワークモデルを表示させるワークモデル表示ボタン53eが設けられている。ワークモデル表示ボタン53eが押されると、表示制御部26は図13に示すように、ワークモデル表示ウインドウ54を生成して表示部3に表示させる。ワークモデル表示ウインドウ54には、ワークモデルWKMが表示される領域54aと、閉じるボタン54bとが設けられている。領域54aに表示されているワークモデルWKMを使用者が見て、所望のワークモデルが読み込まれているか否かを確認することができる。閉じるボタン54bを押すことで、ワークモデル表示ウインドウ54が閉じる。
ワークモデルの読み込みが完了すると、図10に示すフローチャートのステップSD3に進む。ステップSD3では、ばら積みシミュレーションで使用するワークモデルの個数Nを設定する。具体的には、図12に示す積み方設定ウインドウ53のワーク配置設定領域53cを使用する。ワーク配置設定領域53cには、ワークモデルの個数入力部53dが設けられている。個数入力部53dには、使用者がマウスやキーボード等を利用して任意の数を入力することができるようになっている。入力された数が、ばら積みシミュレーションで使用するワークモデルの個数Nになる。よって、個数入力部53dに数を入力するステップは、ワークモデルの個数Nを設定する設定ステップであり、設定部20で行われる。また、ワークモデルの個数Nは、シミュレーション環境の一つである。図12に示す積み方設定ウインドウ53のOKボタン53fを押すと、設定が反映されて積み方設定ウインドウ53が閉じる一方、キャンセルボタン53gを押すと、設定が反映されずに積み方設定ウインドウ53が閉じる。
ワークモデルの個数Nの設定が完了すると、図10に示すフローチャートのステップSD4に進み、容器モデルを読み込む。ここでは、図7に示すフローチャートのステップSB3で指定した容器モデルを読み込むことで容器モデルに関するシミュレーション環境の設定が可能になる。また、図7に示すフローチャートのステップSB4で指定された容器モデルのサイズ、位置、姿勢も容器モデルに関するシミュレーション環境であり、図10に示すフローチャートのステップSD4で同様に読み込む。このステップは、容器モデルに関するシミュレーション環境を設定する設定ステップであり、設定部20で行われる。
次いで、図14に示すフローチャートのステップSE1に進む。ステップSE1の物理シミュレーション開始操作は、例えば、図11に示すシミュレータの設定用ウインドウ52に設けられている画像生成ボタン52cを押す操作である。これにより、上述したように設定されたシミュレーション環境に基づいて物理シミュレーションが開始される。画像生成ボタン52cが押されると、図15に示すように、容器モデルBXMが表示された物理シミュレーション表示画面51を表示制御部26が表示部3に表示させる。
物理シミュレーション部22は、設定部20により設定された個数Nよりも少ない個数SのワークモデルWKMを容器モデルBMX内に投入する第1物理シミュレーションを実行するとともに、当該第1物理シミュレーションにより生成されたばら積み状態となっている複数のワークモデルWKMをコピーして容器モデルBXMの上方から容器モデルBXM内に投入する第2物理シミュレーションを実行することにより、ピッキングシミュレーション用のばら積み状態を生成するように構成されている。尚、この実施形態では、ワークモデルWKMの投入をワークモデルWKMの落下として説明するが、投入は落下に限定されるものではない。
以下、物理シミュレーション部22による具体的なシミュレーション手順について説明する。図14に示すフローチャートのステップSE2では、落下個数S、コピー数M及び余分個数Rを以下の式により求める。落下個数Sは、第1物理シミュレーションで容器モデルBXM内に落下させるワークモデルWKMの数である。落下個数Sは、ステップSE1の後に使用者が設定できる他、物理シミュレーション部22が、設定部20により設定された個数Nに基づいて当該個数Nよりも小さな数に自動的に設定することもできる。第1物理シミュレーションで容器モデルBXM内に落下させるワークモデルWKMの全てに連番(1、2、3、…)を付与しておく。
M=ceil(N/X)
R=M×N-X
ただし、X>Nが前提。また、NがX以下であれば上記計算は不要であるので、省略できる。
図14に示すフローチャートのステップSE3~SE5はX回ループする。現在のワークモデルWKMの番号をi(i=1、2、3、…)とし、ステップSE3では、i番目に容器モデルBXM内に落下させるワークモデルWKMの落下姿勢及び位置をランダムに決める。落下させる前の位置は、容器モデルBXMの底面から上方に離れたところであればよく、平面視における容器モデルBXMの中心であってもよいし、中心から水平方向にオフセットしていてもよい。
ステップSE4では、ステップSE3で決定した落下姿勢及び位置からワークモデルWKMを1つだけ容器モデルBXM内に落下させる。このときに物理シミュレーション部22が物理シミュレーションを実行する。物理シミュレーションは、従来から周知の物理シミュレーションエンジンを用いて実行することができる。ステップSE5では、i番目に容器モデルBXM内に落下させたワークモデルWKMが静止するまで待つ。全てのワークモデルWKMの高さが所定の高さ以下になったらワークモデルWKMが落下完了したと判定してもよいし、一定時間が経過したらワークモデルWKMが落下完了したと判定してもよいし、ワークモデルWKMの速度が所定以下になったらワークモデルWKMが落下完了したと判定してもよいし、他のワークとのコリジョン判定を利用してもよい。
ステップSE3~SE5を繰り返すことで、ワークモデルWKMを1つずつ容器モデルBXM内に落下させて物理シミュレーションを行うことができる。ワークモデルWKMを落下させる際、ワークモデルWKMに対して落下方向に初速を与えるように、物理シミュレーション部22が構成されていてもよい。
物理シミュレーションでは、ワークモデルWKM同士の衝突による作用、容器モデルBXM等の障害物の情報に基づいてワークモデルWKMを仮想的に配置していく。また、物理シミュレーションでは、例えばワークモデルWKM同士が衝突した場合に、予め設定された反発係数や摩擦係数を考慮して、その後、ワークモデルWKMがどのような動きになるかが示される。また、例えば、容器モデルBXMに複数のワークモデルWKMを上方から投下または投入して容器モデルBXMの内部にばら積み状態を生成する場合を挙げることができる。「投入」や「投下」とは、物理的に高所から落下させる動作に限られず、例えば転がりを検証するため、所定の高さから水平方向に押し出しながら落下させたり、放物線状に投げ上げて落下させたり、あるいは容器モデルBXMや床面にワークモデルWKMを載置、あるいは静置する動作も含む意味で使用する。さらに、物理シミュレーションは、ワークモデルWKMを1つずつ作業空間内に順次投入する他、複数のワークモデルWKMを同時に投入、例えば落下させたり静置させる動作をシミュレーションすることもできる。
図16に示すように、S個のワークモデルWKMを容器モデルBXM内に落下させることにより、第1物理シミュレーションが終了する。これにより、S個のワークモデルWKMが容器モデルBXM内で干渉状態になる。ワークモデルWKMが干渉した部分、即ちワークモデルWKM同士が接触している部分や、ワークモデルWKMと容器モデルBXMとが干渉している部分を丸印で示す。第1物理シミュレーション後、図14に示すフローチャートのステップSE6に進み、容器モデルBXM内のS個のワークモデルWKMのそれぞれの位置及び姿勢を取得し、保存する。容器モデルBXM内のS個のワークモデルWKMの全体をワークモデル群500(図16参照)とする。尚、第1物理シミュレーションの結果を三次元画像として表示部3に表示させてもよいし、表示させなくてもよい。表示させない場合、第1物理シミュレーションは、使用者がその実行動作を知らない状況において実行されることになるので、あくまでも内部的な処理として完結する。これにより、第1物理シミュレーションの実行に要する時間を使用者が感じないようにすることができる。
その後、図14に示すフローチャートのステップSE7に進み、ワークモデル群500の厚みZt(図16に示す)を取得し、保存する。厚みZtは、容器モデルBXMの底面からワークモデル群500の上端までの寸法で定義することができる。ステップSE6及びSE7を経ることで、第1物理シミュレーションにより生成されたばら積み状態となっている複数のワークモデルWKM(ワークモデル群500)をコピーすることができる。コピーしたワークモデル群500は、記憶部42に一旦記憶させておくことができる。
その後、ステップSE8に進む。ステップSE8~SE10はM-1回ループする。現在の落下層をj(j=1、2、3、…)とする。落下層は、1つのワークモデル群500で形成されるものである。ステップSE8では以下の処理を行う。
S’=S (j<(M-R)の場合。ただし、R=0を除く。)
X’=X-1 (上記以外)
続くステップSE9では、コピーしたワークモデル群500の位置補正及び姿勢補正を行う。ステップSE9では、まず、jが奇数であるか否かを判定する。jが奇数である場合の位置補正は、(Xj(i),Yj(i),Zj(i))=(-Xorg(i),-Yorg(i),Zorg(i)+j×Zt)である。また、jが奇数である場合の姿勢補正は、(Rxj(i),Ryj(i),Rzj(i))=(Rxorg(i),Ryorg(i),Rzorg(i)+180度)である。
jが偶数である場合の位置補正は、(Xj(i),Yj(i),Zj(i))=(Xorg(i),Yorg(i),Zorg(i)+j×Zt)である。また、jが偶数である場合の姿勢補正は、(Rxj(i),Ryj(i),Rzj(i))=(Rxorg(i),Ryorg(i),Rzorg(i))である。
Xorg、Yorg及びZorgは、最初に落下したS個のワークモデルWKMの位置を示す。Rxorg、Ryorg及びRzorgは、最初に落下したS個のワークモデルWKMの姿勢を示す。Xj、Yj、Zj、Rxj、Ryj及びRzjは、落下層jの位置を示す。上記位置補正及び姿勢補正の式では、落下層ごとにZ軸に対して回転させている。
また、物理シミュレーション部22は、落下層jを落下させる第2物理シミュレーションの実行の際、落下層jの最下部を、その前に落下しているワークモデルWKMの最上部よりも所定距離以上上方に離れた所から容器モデルBXM内に落下させるように構成されている。所定距離とは、落下前の落下層jの最下部と、既に落下しているワークモデルWKMの最上部とが接触しない距離とすることができる。
また、落下層同士が干渉しないように、落下層同士を少なくともZtだけ離して順次落下させるようにする。上記位置補正及び姿勢補正の式は、その前提として、容器モデルBXMの中心がX=0、Y=0となっている。姿勢補正はRz回転のみだが、上下反転や90度回転(RxまたはRy方向)してもよい。図17Aは、コピーしたワークモデル群500を姿勢補正せずに、上方へ位置補正しただけで落下させる場合を模式的に示している。図17Bは、コピーしたワークモデル群500を上下反転させ、かつ、上方へ位置補正して落下させる場合を模式的に示している。コピーしたワークモデル群500を落下させる際には、ワークモデルWKMに対して落下方向に初速を与えるように、物理シミュレーション部22が構成されていてもよい。上記初速は、使用者が任意に調整することができるようになっている。また、初速を付与する、付与しないの選択も使用者が任意に行えるようになっている。
図14に示すフローチャートのステップSE10では、コピーしたワークモデル群500を、ステップSE9で算出した位置姿勢となるように補正し、ワークモデルWKMをN’個落下させる。これが第2物理シミュレーションである。その後、ステップSE11に進み、容器モデルBXM内に落下させたワークモデルWKMが静止するまで待つ。このステップSE11は、ステップSE5と同じである。図18は、N個のワークモデルWKMを容器モデルBXMに落下させた場合のばら積みシミュレーション結果を模式的に示している。以上が、ピッキングシミュレーション用のばら積み状態を生成する物理シミュレーション工程である。
物理シミュレーションを行うことで、明らかに不自然な姿勢のワークモデルを除外するなど、使用者の実運用環境に合わせたばら積みデータを生成して後述するピッキング動作シミュレーションを行うことができるため、実物のワークを用意することなく、実運用時に近い形で事前に適切な設定調整や、検証を行うことができるようになる。物理シミュレーション部22は、物理的に発生確率が低いワークモデルを排除したバラ積みデータを生成するよう構成してもよい。
物理シミュレーション部22は、第2物理シミュレーション時にコピーした複数のワークモデルWKMを容器モデルBXM内に落下させる第1落下処理(j=1のときの落下処理)と、当該第1落下処理の後、再度、複数のワークモデルWKMを容器モデルBXM内に落下させる第2落下処理(j=2のときの落下処理)とを行うように構成されている。また、第2落下処理の後、複数のワークモデルWKMを容器モデルBXM内に落下させる第3落下処理(j=3のときの落下処理)、第3落下処理の後、複数のワークモデルWKMを容器モデルBXM内に落下させる第4落下処理(j=4のときの落下処理)を行うように構成されていてもよい。同様に、j=5のときの第5落下処理、j=6のときの第6落下処理、…を行うように構成されていてもよい。
また、物理シミュレーション部22は、設定された個数よりも少ない個数のワークモデルWKMを容器モデルBXM内に落下させる第1物理シミュレーションの後、ワークモデルWKMをコピーして落下させる第2物理シミュレーションを実行する前に、容器モデルBXM内にばら積みされているワークモデルWKMに対して所定の力を与える物理シミュレーションを実行するように構成されていてもよい。すなわち、第1物理シミュレーションを実行すると、ワークモデルWKMが容器モデルBXM内にばら積みされた状態になっており、このワークモデルWKMに対して水平方向や鉛直方向、斜め方向、水平軸周りの回転方向、鉛直軸周りに回転方向に力を与える。ワークモデルWKMに与える力の大きさは、ワークモデルが少なくとも重力に抗して動く大きさに設定することができる。力を与える時間は、容器モデル内にばら積みされているほぼ全てのワークモデルが当初の位置からずれる程度の時間に設定することができ、例えば瞬間的なものであってもよい。このような力を容器モデルBXM内のワークモデルWKMに与えると、ワークモデルWKMが容器モデルBXM内で振り動かされるようになり、より一層自然なばら積み状態になる。ワークモデルWKMに対して力を複数回与えるようにしてもよい。全てのワークモデルWKMに対して力を付与してもよいし、任意の1または2以上のワークモデルWKMに対して力を付与してもよい。
また、物理シミュレーション部22は、設定された個数よりも少ない個数のワークモデルWKMを容器モデルBXM内に落下させる第1物理シミュレーションの後、ワークモデルWKMをコピーして落下させる第2物理シミュレーションを実行する前に、ワークモデルWKMがばら積みされている容器モデルBXMに対して所定の力を与える物理シミュレーションを実行するように構成されていてもよい。ワークモデルWKMがばら積みされている容器モデルBXMに対して力が与えられることで、内部のワークモデルWKMを振り動かすことができ、これにより、より一層自然なばら積み状態になる。容器モデルBXMに対する力の大きさは、内部のワークモデルWKMが少なくとも重力に抗して動く大きさに設定することができる。力の方向は上方向であってもよいし、水平方向であってもよい。力を与える時間は、容器モデルBXM内にばら積みされているほぼ全てのワークモデルWKMが当初の位置からずれる程度の時間に設定することができ、例えば瞬間的なものであってもよい。
図19は、実際のワークモデルWKMを使用して物理シミュレーションを行った場合を示しており、容器モデルBXMの上方に、コピーしたワークモデル群500を1つだけ配置した状態である。図20に示すように、複数のワークモデル群500を容器モデルBXMの上方に配置してもよい。この場合、複数のワークモデル群500が干渉しないように、上下方向に並ぶワークモデル群500の間に隙間を設けておくのが好ましい。図19や図20に示すようなワークモデル群500を配置した状態の画像を使用者に提示してもよいし、そのような画像を使用者に提示しないようにしてもよい。
図21は、仮想壁60が設けられた容器モデルBXMを使用して物理シミュレーションを行った場合を示している。すなわち、物理シミュレーション部22は、ワークモデルWKMをコピーして落下させる第2物理シミュレーションの実行の際、容器モデルBXMの側壁を上方へ延長した仮想壁60を設定するように構成することができる。仮想壁60は、容器モデルBXMの全ての側壁に設定してもよいし、一部の側壁にのみ設定してもよい。仮想壁60は表示部3に表示されていてもよいし、表示されていなくてもよい。仮想壁60を表示する場合には、容器モデルBXMの側壁とは異なる形態で表示するのが好ましい。仮想壁60の高さは任意に設定することができる。
仮想壁60を設定することで、図21に示すように、ワークモデルWKMが容器モデルBXMの側壁よりも高く積み上がることになる。そして、全個数のワークモデルWKMを落下させた後、図22に示すように仮想壁60を消去することで、容器モデルBXMの側壁よりも上に積まれていたワークモデルWKMは転がり落ちる。これも物理シミュレーション部22でシミュレーションすることができる。物理シミュレーション結果を図23に示す。この図に示すように、全てのワークモデルWKMが静止すると、各ワークモデルWKMの位置及び姿勢を検出するサーチ処理を実行する際に使用される角度に近い角度で容器モデルBXMを俯瞰した画像を表示制御部26が生成し、物理シミュレーション表示画面51に表示させる。尚、ワークモデルWKMが容器モデルBXMの外に出たか否かを判定するステップを設けることもでき、このステップにおいてワークモデルWKMが容器モデルBXMの外に出たと判定される場合には、無駄なシミュレーションを省くため、当該容器モデルBXMの外に出たワークモデルWKMを消す処理を行うことができる。
図23では、ワークモデルWKMの数が容器モデルBXMの大きさに対して多く、一部のワークモデルWKMが容器モデルBXMからあふれている。これは実際の運用時には想定されない状況であるため、図24に示すように、ワークモデルWKMの全数が容器モデルBXM内に入るように、ワークモデルWKMの個数Nを設定すればよい。
使用者は、物理シミュレーション表示画面51を見て、物理シミュレーションの結果が、後述するピッキング動作シミュレーションに不適な結果であると思われる場合には、その物理シミュレーションの結果を破棄して改めて物理シミュレーションを実行することができる。
図25は、物理シミュレーション部22による物理シミュレーションの別の例に係る実行手順を示すフローチャートである。この例では、最初にN個のワークモデルWKMを干渉状態とし、それらをコピーして落下させて既に落下しているワークモデルWKMと干渉状態とし、次に、容器モデルBXM内で干渉しているワークモデルWKMをコピーして落下させることを繰り返し行う。つまり、この例の物理シミュレーション部22は、設定された個数よりも少ない個数のワークモデルWKMを落下させる第1落下処理を実行した後、容器モデルBXM内でばら積み状態となっている複数のワークモデルWKMをコピーして容器モデルBXMの上方から当該複数のワークモデルを容器モデルBXM内に落下させるように構成されている。
図25に示すフローチャートのステップSF1は、図10に示すフローチャートのステップSD4の後に行われるステップである。ステップSF1は、図14に示すフローチャートのステップSE1と同様に、物理シミュレーション開始操作のステップである。その後、ステップSF2に進む。ステップSF2では、N個落下したらそれらをコピーするとし、N×2^(M-1)<X<=N×2^Mとなるコピー回数Mを求める。落下個数Nは、第1物理シミュレーションで容器モデルBXM内に落下させるワークモデルWKMの数である。
ステップSF3~SF6はX回ループする。現在のワークモデルWKMの番号をi(i=1、2、3、…)とする。ステップSF3~SF5は、図14に示すフローチャートのステップSE3~SE5と同様な処理である。ステップSF6では、落下済みワークモデルWKMの総数をYとする(Y=X)。全てのワークモデルWKMを容器モデルBXM内に落下させることにより、第1物理シミュレーションが終了する。これにより、全てのワークモデルWKMが容器モデルBXM内で干渉状態になる。
第1物理シミュレーション後、ステップSF7に進む。ステップSF7~SF13はM-1回ループする。現在の落下層をj(j=1、2、3、…)とする。ステップSF7では、容器モデルBXM内のY個のワークモデルWKMのそれぞれの位置及び姿勢を取得し、保存する。その後、ステップSF8に進み、Y個のワークモデルWKMからなるワークモデル群500の厚みZtを取得し、保存する。
ステップSF8に続くステップSF9では、以下の処理を行う。
Y’=Y (X<=2Y)の場合。)
Y’=N-Y (上記以外)
続くステップSF10では、コピーしたワークモデル群500の位置補正を行う。具体的には、コピーしたワークモデル群500をZt分だけ上方へ移動させる。この位置補正は、(Xj(i),Yj(i),Zj(i))=(Xorg(i),Yorg(i),Zorg(i)+j×Zt)である。ただし、i=1~Y’とする。このとき、コピーしたワークモデル群500の姿勢補正を実行してもよい。
続くステップSF11では、コピーしたワークモデル群500を、ステップSF10で算出した位置姿勢となるように補正し、ワークモデルWKMをY’個落下させる。これが第2物理シミュレーションである。その後、ステップSF12に進み、容器モデルBXM内に落下させたワークモデルWKMが静止するまで待つ。ステップSF12の後、ステップSF13に進み、Y=2YとしてステップSF14に進む。ステップSF14は、図14に示すフローチャートのステップSE11と同じである。
以上のようにして、図6に示すフローチャートのステップSA2の物理シミュレーション実行ステップが完了する。物理シミュレーションの実行前、ワークモデルWKMのデータを圧縮するデータ容量圧縮ステップを実行してもよい。データ容量圧縮ステップは、図3に示すデータ容量圧縮部21で行うことができ、例えばCADデータで表されるワークモデルWKMの形状を極力保ちながら、ポリゴン数を削減したワークモデルを作成して、物理シミュレーション部22による物理シミュレーション時の演算負荷の軽減するために行うステップである。CADデータのポリゴン数を削減するということは、ワークモデルのデータ容量が圧縮されて小さくなるということである。また、ワークモデルのデータを間引くことによってデータ容量を圧縮することも可能である。
三次元CADデータは、一般に、三角形の面情報の集合体として表されるポリゴンデータで表され、ワークモデルの形状を極力保ちながらポリゴン数を削減する方法としては、例えば、Hoppeらが提案するプログレッシブメッシュ法や、Garlandらが提唱するQEM(Quadratic Error Metirc)法という手法があり、これら従来から周知の手法のうち、いずれの手法を用いてポリゴン数の削減処理を行ってもよい。
例えば、QEM法では、隣接するポリゴンのエッジを消去し、2つの頂点を結合して新たな頂点を生成し、この操作を繰り返すことで、CADデータ全体を構成するポリゴン数を大幅に削減し、データ容量を圧縮することができる。また、CADデータのデータ容量を圧縮することができればよいので、ポリゴン数を削減する方法以外にも、各種方法によってデータ容量を圧縮するようにしてもよい。
衝突判定を軽量化するため、例えば、凸包分解(Convex-Hull Decomposition)法を利用することができる。すなわち、凸包形状の衝突判定は高速化アルゴリズム(GJKアルゴリズム等)が存在するものの、実ワークは必ずしも凸包形状ではなく、高速化アルゴリズムを採用できないケースがある。ワーク全体を凸包形状に変換して衝突判定を実施する手法もあるが、ワークによっては形状に大きな差が発生し自然な物理シミュレーションができないことがある。そこで、ワーク全体を複数の凸包形状に分解する凸包分解法を採用し、衝突判定時は複数の凸包形状の相対的な結合として扱うことで、自然かつ高速なシミュレーションが可能になる。尚、正確な凸包分解の方法の代わりに、疑似凸包分解の方法を採用してもよい。
(高さ画像生成)
図6に示すフローチャートのステップSA2の物理シミュレーション実行ステップを経て、ステップSA3に進む。ステップSA3では、物理シミュレーションで得られたばら積み状態のワークモデルWKMの各部の高さを表す高さ画像データを生成する。高さ画像データから得られる高さ画像の一例を図26に示す。高さ画像は、高さ情報を有する画像であって、距離画像、三次元画像等とも呼ばれる。サーチ処理用データにはワークモデルWKMの高さに関する情報が含まれているので、これに基づいて周知の手法によって高さ画像データを得ることができる。高さ画像データに基づいて得ることができる高さ画像は、物理シミュレーションの結果を示す画像と共に表示部3に表示することができる。
図24に示す物理シミュレーション表示画面51に表示する物理シミュレーション結果画像と、図26に示すピッキング動作のシミュレーション画像を表示する画像表示領域50aに表示する高さ画像とは、視点、即ち見る角度を互いに変えた画像にすることができる。図24の物理シミュレーション結果画像と、図26の高さ画像とは、1つの表示画面上の任意の位置にそれぞれ配置することができる。また、物理シミュレーション結果画像は、例えば物理シミュレーションの実行開始から終了までを動画として表示可能にしてもよい。この場合、容器モデルBXMの上方から複数のワークモデルWKMを容器モデルBXMに投下する様子、ワークモデルWKM同士が衝突する様子、ワークモデルWKMが容器モデルBXMの側壁や底面に衝突する様子も見ることができ、最終的にどのようしてばら積み状態が生成されたのかを使用者が把握できる。
物理シミュレーション前にワークモデルWKMのデータ容量を削減している場合、ワークモデルWKMのばら積み状態データを生成した後、ワークモデルWKMのばら積み状態データの中のワークモデルWKMをポリゴン数削減前のCADデータと置換する。すなわち、物理シミュレーション部22で生成されたばら積み状態のデータの中の各ワークモデルWKMの位置及び姿勢にしたがって、物理シミュレーション部22で用いたワークモデルWKMよりもデータ容量が大きくかつ実際のワークの三次元形状に近いワークモデルWKMを配置する。このようにして、各ワークモデルWKMの位置及び姿勢を検出するサーチ処理を実行するためのサーチ処理用データが生成される。物理シミュレーション部22で用いたワークモデルよりもデータ容量が大きくかつワークWKの三次元形状に近いワークモデルというのは、データの圧縮量が低く、物理シミュレーションステップで用いたワークモデルよりも精緻な形状を持ったワークモデルである。このワークモデルに置き換えることで、後述するピッキング動作シミュレーションの結果の再現性を高めることができる。このサーチ処理用データの生成は、図3に示すロボット設定装置100が有するばら積みデータ生成部23で行われる。尚、物理シミュレーション前にワークモデルWKMのデータ容量を削減していない場合には、この処理は不要である。
ばら積みデータ生成部23は、物理シミュレーション部22で生成されたばら積み状態のデータの中の各ワークモデルWKMの位置及び姿勢にしたがって、データ容量圧縮部21による圧縮処理を行う前のワークモデルWKMを配置することによってサーチ処理用データを生成することもできる。こうすれば後述するピッキング動作シミュレーションの結果がより一層再現性の高い結果になる。
(サーチ処理)
図6に示すステップSA3で高さ画像を生成した後、ステップSA4に進み、ばら積みデータ生成部23により生成されたサーチ処理用データに対し、各ワークモデルWKMの位置及び姿勢を検出するサーチ処理を実行する。これはサーチ処理ステップであり、図3に示すロボット設定装置100が有するサーチ処理部24が行う。
サーチ処理は高さ情報を含むサーチ処理用データに対してサーチをかけるので、三次元サーチと呼ぶことができる。具体的には、サーチモデル登録部27で登録されたサーチモデルを用いて、各ワークモデルWKMの姿勢と位置を特定する三次元サーチを行う。まずサーチモデルの各特徴点が、最も一致する状態の位置及び姿勢(X、Y、Z、RX、RY、RZ)を、高さ画像の中から探索する。ここでRX、RY、RZは、それぞれX軸に対する回転角、Y軸に対する回転角、Z軸に対する回転角を表す。このような回転角度の表現方法は種々提案されているところ、ここではZ-Y-X系オイラー角を用いることができる。また一致する位置及び姿勢は、各サーチモデルに対して、1つである必要はなく、一定以上一致する位置及び姿勢を、複数検出してもよい。
たとえば、図27に示すように、高さ画像の中で特徴点の一致に基づいてワークモデルWKMを検出した場合には、その検出位置にサーチモデルの特徴点を、周囲よりも明るい色で重畳表示させることができる。このように三次元サーチに用いるサーチモデルとして、ワークを六面図のように、面ごとに見た画像を用いることで、斜視図などを用いる場合と比べ、三次元サーチの演算処理を簡素化でき、処理を軽負荷、高速化できる利点が得られる。また、サーチモデルの登録作業に際しても表示された状態が見易くなり、使用者にも視覚的に判り易くできる。また、三次元サーチの結果の位置に、サーチモデルの各特徴点を重畳表示させた結果を二次元表示することや、三次元表示することもできる。対応する特徴点が、高さ画像中に対してどの程度存在したか(例えば、高さ画像に対し、一定の距離以下の誤差で対応した特徴点の点数割合など)によって、サーチ結果をスコア付けすることができる。
サーチ処理部24が高さ画像中にサーチモデル登録部27で登録されたサーチモデルが存在するか否かをサーチした結果、高さ画像中に、サーチモデルが存在しない場合、即ちワークモデルを検出できない場合には、図6に示すステップSA5においてNOと判定されてステップSA6に進み、残ったワークモデルWKMの情報を抽出し、このフローを終了する。
(ピッキング動作シミュレーション)
ステップSA4の三次元サーチの結果、高さ画像の中にワークモデルWKMを検出できた場合には、ステップSA5でYESと判定されてステップSA7に進み、干渉判定及び把持解を算出する。このステップSA7~SA10は、サーチ処理部24によりサーチに成功したワークモデルWKMに対して、ロボットRBTによりピッキング動作のシミュレーションを実行するピッキング動作シミュレーション部25が行うピッキング動作シミュレーションステップである。三次元サーチの結果、高さ画像の中に複数のワークモデルWKMを検出できる場合もある。尚、ピッキング動作シミュレーション部25に物理シミュレーションの機能や高さ画像生成機能を持たせてもよい。
このように、ピッキング動作シミュレーション部25は、生成されたばら積みデータに対して、仮想作業空間内のワークモデルWKMのばら積みピッキング動作を検証するための部分である。ピッキング動作シミュレーションを行うことにより、実際のワークの三次元位置及び姿勢の検出可否など、手間のかかる確認作業や設定調整を、ワークを用意することなく、実運用に近い形で事前に行うことができる。
特に物理シミュレーション部22は、ピッキング動作シミュレーション部25による一のワークモデルWKMをハンドモデルで把持し少なくとも取り出し動作を開始した後、このワークモデルWKMが取り出された後の状態のばら積みデータに対して物理シミュレーションを再度実行するように構成することができる。物理シミュレーションを再度実行するタイミングは、ワークモデルWKMをハンドモデルで把持し、載置位置にプレースされた後とする他、ワークモデルWKMの取り出し作業の途中であってもよい。すなわち、ハンドモデルでワークモデルWKMを把持して、このワークモデルWKMが持ち上げられた状態では、一のワークモデルWKMが除去されたことで、このワークモデルWKMの周辺にあった他のワークモデルWKMが移動可能となるため、把持されたワークモデルWKMが載置されるまで待つ必要はない。よって、物理シミュレーションの再実行のタイミングは、一のワークモデルWKMがハンドモデルで把持されて持ち上げられたタイミング、あるいはその後、他のワークモデルWKMの状態が重力の作用で移動して安定するまで待った後のタイミングとすることができる。例えば、ワークモデルWKMが把持されて持ち上げられた時点から所定の時間の経過後(例えば10秒後)としてもよい。物理シミュレーションを再度実行した後、ばら積みデータを更新する。
したがって、ピッキング動作シミュレーション中にばら積みデータからワークモデルWKMが一つ取り出されると、これに応じてバラ積みされたワークモデル群が崩れるといった動作も物理シミュレーション部22により演算され、この演算後のばら積みデータを利用してピッキング動作シミュレーション部25がその後のピッキング動作シミュレーションを実行するので、より正確なばら積みピッキングのシミュレーションが実現される。
ステップSA7の干渉判定ステップでは、高さ画像の各1点1点のpixelデータが示す三次元点群と、ハンド部形状入力部35で予め入力されているハンドモデルとが干渉するか否かを判定する。干渉判定の前に、三次元サーチで検出された一のワークモデルWKMに対して、このワークモデルWKMの位置と、登録してあるワークモデルWKMの把持姿勢とに基づいて、エンドエフェクタEETを配置すべき位置と姿勢を計算する。計算された位置において、エンドエフェクタEETが周囲の物体と干渉しないかどうかを、ハンドモデルを利用して判定する。この干渉判定では、ハンドモデルの断面モデルを利用して三次元点群が断面モデルと干渉しているか否かを判定することができる。例えば、断面モデルから全ての三次元点が離れている場合には、三次元点群、すなわち高さ画像とハンドモデルとが干渉していないと判定し、一方、断面モデルの内側に三次元点が1つでも入っている、または断面モデルの縁部に三次元点が1つでも接している場合には、三次元点群、すなわち高さ画像とハンドモデルとが干渉していると判定する。干渉していない場合は、このワークモデルWKMに対して把持解を算出することができたということであり、ステップSA8においてYESと判定されてステップSA9に進む。一方、三次元点群とハンドモデルとが干渉している場合は、このワークモデルWKMに対して把持解を算出することができないということであり、ステップSA8においてNOと判定されてステップSA6に進み、このフローを終了する。
一方、把持解を算出することができてステップSA9に進むと、ワークモデルWKMの数を1つ減らす。このステップSA9で減らすワークモデルWKMは把持解を算出することができたワークモデルWKMである。ワークモデルWKMを1つ減らした後、ステップSA10に進み、三次元サーチで得られた他のワークモデルWKMがあればステップSA7に進む。他のワークモデルWKMが無ければステップSA10でNOと判定されてステップSA6に進み、このフローを終了する。
このようにして、ワークモデルWKMを把持可能な把持解の有無を検出されたワークモデルWKM毎に判定する。そして、ワークモデルWKMに把持解が得られた場合は、そのワークモデルWKMの把持候補位置をハンド部でもってピックし、容器モデルBXMの外部へ搬送するシミュレーションを行う。
ピッキング動作シミュレーションの実行結果は、必要に応じて表示部3に表示させることができる。使用者は表示部3に表示されたピッキング動作シミュレーションの実行結果に基づいて、現在の設定の適否を判断できる。また必要に応じて、各種の設定を変更することができる。例えばロボットRBTの設置位置や容器BXを置く位置、センサ部2の姿勢などを調整する。変更した設定を、シミュレーション環境として入力し直して、再度ピッキング動作シミュレーションを実行し、その適否を確認するという作業を繰り返して、使用者の環境に応じた適切な設定条件を決定できる。
また、物理シミュレーション部22は、物理シミュレーションを繰り返して行うことができるが、毎回、ワークモデルWKMが同じ配置にならないようにランダムにばら積みすることができるように構成されている。従って、物理シミュレーション部22は、以前行った物理シミュレーションで得られたばら積み状態と同じ状態を作ることができない。すなわち、物理シミュレーションの度毎にランダムなばら積みデータが生成されるため、物理シミュレーションの結果に再現性がない。
一方、使用者がピッキング動作の環境設定の見直しなどを行い、その効果を確認しようとする場合、以前のピッキング動作シミュレーションでうまくいかなかった状態を再現して、このばら積みデータに対して確認するのが最も効率的である。例えば、あるワークモデルWKMに対するエンドエフェクタEETのモデルの把持解が見つからずに全てのワークモデルWKMを取り出せなかった場合に、その対策として使用者が把持候補位置や把持姿勢を増やした場合を考える。この場合、使用者が変更した設定が、前回発生した問題に対して有効な解決策であったか否かを判断するためには、前回うまく行かなかった状態、又はこれと近い状態を再現して確認することが最も有効である。
加えて、問題が発生した状態だけでなく、その問題が発生するに至った途中の状態からピッキング動作シミュレーションを開始できるようにしてもよい。例えば問題が発生したばら積みデータを、ワークモデルWKMを順次追加して構成している場合は、問題が発生した段階の数回前の、ワークモデルWKMの数が数回分少ない状態で、対応できるかどうかを確認することが考えられる。
これらを実現するために、本実施形態においては、ばら積みデータの初期状態や終了状態、あるいは中間状態等、使用者が再利用したいと考える状態のばら積みデータを保存しておき、環境設定をし直した後に、このような保存済みのばら積みデータを呼び出して、検証することを可能としている。ばら積みデータは、記憶部42に保存しておくことができ、使用者の指定によって呼び出すことができる。
以上の手順では、いずれかのワークモデルWKMで把持解が得られると、その時点で把持候補位置を検討する処理を終了して、得られた把持解に該当する把持候補位置でワークモデルWKMを把持するように処理している。ただ、この方法に限らず、例えば把持可能なすべての把持候補位置を1つのワークモデルWKMについて求めた上で、いずれの把持候補位置を選択するかを使用者が決定するように構成してもよい。また、ワークモデルWKMの置かれた高さ情報に注目し、ワークモデルWKMが置かれた高さが高いもの、いいかえると、ばら積みされたワークモデルWKM群の内で、より上方に位置するものを把持候補位置として選択することもできる。
以上のようにしてピッキング動作シミュレーションを行うことができ、このピッキング動作シミュレーションは複数回行うのが好ましい。つまり、サーチ処理部24によりサーチに成功したワークモデルWKMに対応付けられた把持候補位置のそれぞれについて、ロボットRBTによる把持が可能か否かを判定し、把持が可能と判定された把持候補位置をロボットRBTにより把持するピッキング動作シミュレーションを繰り返し実行するように、ピッキング動作シミュレーション部25が構成されている。ピッキング動作シミュレーションが終了すると、物理シミュレーション部22は自動的に新たな物理シミュレーションを実行し、この新たな物理シミュレーション結果を利用してピッキング動作シミュレーションが行われる。
また、ピッキング動作シミュレーション部22は、サーチ処理部24によりサーチに成功したワークモデルWKMをハンド部形状入力部35で入力されたハンド部により把持するピッキング動作シミュレーションを、各ハンド部を用いて繰り返し実行するように構成されている。ハンド部の形状を複数入力した場合には、それらのうち、一のハンド部のハンドモデルを用いてピッキング動作シミュレーションを行った後、他のハンド部のハンドモデルを用いてピッキング動作シミュレーションを行う。全てのハンド部についてピッキング動作シミュレーションが終了した後、再び全てのハンド部のハンドモデルを用いてピッキング動作シミュレーションを行う。これを繰り返して行うことができる。また、一のハンド部のハンドモデルを用いてピッキング動作シミュレーションを複数回行った後、他のハンド部のハンドモデルを用いてピッキング動作シミュレーションを複数回行うこともできる。ピッキング動作シミュレーションは、ハンド部毎に数百回~1000回程度行うことができる。ピッキング動作シミュレーションを複数回行ってその結果を蓄積することができる。
(露光時間の設定)
形状測定装置400は、図3に示すように、カメラCME1、CME2、CME3、CME4の露光時間(シャッタースピード)を段階的に変化させるための露光制御部40を備えている。露光制御部40は、露光時間を等比で増加させるように構成されているが、これに限られるものではない。この実施形態では、露光時間を1.5倍ずつ伸ばすように構成されているが、この倍率は任意に設定することができる。
形状測定装置400は高さ画像データ生成部33を備えている。高さ画像データ生成部33は、露光制御部40が段階的に変化させた各露光時間においてカメラCME1、CME2、CME3、CME4から出力された受光量を得て、得られた受光量に基づいて、各画素値が測定対象物表面(ワークWKの表面)の各部位の高さを示す高さ画像データを生成するように構成されている。これは例えば位相シフト法等の手法によって生成することができる。
(画素判定部の構成)
形状測定装置400は図3に示す画素判定部34を備えている。画素判定部34は、露光制御部40が段階的に変化させた各露光時間において受光部が受光した受光量を得て、得られた受光量に基づいて、高さ画像データ生成部33により生成される各高さ画像の各画素が有効か無効かを判定するように構成されている。プロジェクタPRJが周期的な照度分布を有するパターン光を照射するように構成されている場合、画素判定部34は、カメラCME1、CME2、CME3、CME4の撮像によって得られた各画素の光量のコントラストが閾値以上の画素を有効と判定するように構成されている。また、三次元形状を取得する方法として、光切断法を用いる場合には、各画素の光量が小さすぎるか、飽和している場合には、当該画素が無効であると判定し、その他の画素を有効と判定する。つまり、高さ画像を生成した際に高さを表示することができない画素(画面上で黒く潰れたようになってしまう画素や白く飛んでしまう画素)が無効であると判定し、一方、高さを表示することができる画素を有効と判定する。画素判定部34は、カメラCME1、CME2、CME3、CME4による撮像範囲内に設定される注目領域内の各画素が有効か無効かを判定するように構成することができる。
(露光時間設定部の構成)
形状測定装置400は図3に示す露光時間設定部41を備えている。露光時間設定部41は、画素判定部34により有効と判定された画素の数が所定条件を満たしている高さ画像に対応する露光時間を設定値として設定する。設定値とは、ロボットシステム1000の実運用を行う際に用いる露光時間のことである。露光時間は手動操作によって調整することもできるが、手動操作の場合、使用者は自分で設定した露光時間で得られた高さ画像を見ながら、最適な露光時間の範囲を探索していくプロセスが必要になる。また、最適な露光時間を絞り込むための探索を手作業で行う場合、属人性があるとともに再現性が悪く、様々なケースで適切な露光時間を得ることは難しい。さらに、高さ画像を構成する画素の場合は、見た目で有効画素であるか否かを判定するのは難しく、特に手作業で決定した露光時間が妥当な時間であるか否かを短時間で検証して判断することは困難である。よって、この実施形態では、適切な露光時間を自動で設定することができるようになっている。
例えば、ある固定されたワークを、カメラCME1、CME2、CME3、CME4の露光時間を段階的に変えながら撮像して高さ画像を得て、その高さ画像に含まれる有効画素数を露光時間毎に得る。ある露光時間の範囲内では、露光時間が変化しても有効画素数は殆ど変化せず、その範囲外では、有効画素数が急激に少なくなる場合がある。例えば、有効画素が最大値の95%となる露光時間を設定値として設定することで、有効と判定された画素の数が最も多くなる露光時間以下の所定時間を設定値として設定することができる。
高さ画像生成部33での高さ画像の生成方法の一例について説明する。高さ画像とは、画像を構成する各画素値に、高さの値が格納されている画像である。典型的には、高さを輝度値で表現した画像である。高さ画像の生成方法については、Zバッファ法が好適に利用できる。
すなわち、ワークのCADデータであるワークモデルで構成された三次元のバラ積みデータに基づいて、陰影を消去するレンダリングによって二次元の高さ画像を描画する。レンダリング方法には、Zバッファ法、Zソート法、スキャンライン法、レイトレーシング法等が利用できる。ここではZバッファ法を用いて、複数のワークモデルを高さ画像に描画していく。Zバッファ法では、Zバッファ=高さ画像として実現される。また、Zバッファの初期化を、無限遠で行うのではなく、床面や箱の情報で最小に初期化する形を取る。Zバッファ法の過程で、画素毎にワークモデルの面の法線情報を保持した、法線画像も同時に作成する。ここではZバッファを上書きした画素について、法線データも更新する。なお、本明細書中では、高さ画像への変換方法としてZバッファ法を例示するが、本発明はZバッファ法に限定するものでなく、上述の通り、他の方法も適宜利用できる。このようにして三次元のばら積みデータから高さ画像に描画し直す。
(三次元計測部)
三次元計測部30は、画像処理装置300に設けることができる。三次元計測部30は、実運用時に複数のワークが積み上げられた作業空間を三次元計測し、その計測データを出力するように構成されている。センサ部2は三次元計測部30の一構成要素とすることができる。計測手法は上述したとおりであり、特に限定されるものではない。三次元計測部30をセンサ部2に設けて一体化することもできる。
(サーチ処理部)
サーチ処理部24は、上述したピッキング動作シミュレーションで使用されているが、実運用時でも使用することができる。サーチ処理部24をピッキング動作シミュレーションで使用したものとは別に構成することもできる。
すなわち、サーチ処理部24は、サーチモデル登録部27に登録された複数のサーチモデルを用いて、三次元計測部30から出力された計測データの中に含まれる複数のワークの位置及び姿勢を検出するサーチ処理を行う。サーチ処理を行う際には、三次元計測部30から出力された計測データに基づいて高さ画像生成部33によって高さ画像を生成し、この高さ画像中にサーチモデル登録部27で登録されたサーチモデルが存在するか否かをサーチする。この手法はピッキング動作シミュレーションで行った手法と同じにすることができる。
また、サーチ処理部24は、サーチモデルの形状を表す複数の特徴点を用いて、三次元計測部30から出力された計測データの中に含まれる複数のワークの位置及び姿勢を検出することができる。すなわち、三次元計測部30から出力された計測データに基づいて高さ画像を生成し、この高さ画像の中で、サーチモデルの形状を表す複数の特徴点と一致する形状をサーチする。
また、サーチ処理部24は、サーチモデル登録部27に登録されている関連付けられた高さ画像データを用いて、三次元計測部30から出力された計測データの中に含まれる複数のワークの位置及び姿勢を検出するように構成することができる。
(干渉判定部)
干渉判定部31は、画像処理装置300に設けることができる。干渉判定部31は、サーチ処理部24でサーチ処理に成功したサーチモデルに対応付けられたワーク表面に設定された把持候補位置をロボットRBTが周囲の物体と干渉することなく把持が可能か判定する。この干渉判定部31による判定手法は、ピッキング動作シミュレーションで行った手法と同じにすることができる。
(把持位置決定部)
把持位置決定部32は、画像処理装置300に設けることができる。把持位置決定部32は、干渉判定部31により周囲の物体と干渉することなく把持が可能と判定された把持候補位置を実際の把持位置として決定するように構成されている。
(実運用時の手順)
次に、実運用時には、まず、図1に示すようにセンサ部2を用いて容器BXにばら積みされているワークWKを三次元計測する。そして、三次元計測部30から出力された計測データに基づいて高さ画像生成部33で高さ画像を生成しておく。
その後、高さ画像に対して上述した三次元サーチを実施し、ワークの位置及び姿勢を検出した後、ワークモデルの位置と、登録してあるワークモデルの把持姿勢とに基づいて、ハンド部を配置すべき位置と姿勢を計算する。
計算された位置において、ハンド部が周囲の物体と干渉しないかどうかを、ハンドモデルの断面モデルを利用して判定する。具体的には、高さ画像の各1点1点のpixelデータが示す三次元点群と、ハンド部形状入力部35で予め入力されているハンドモデルとが干渉するか否かを、ハンドの断面モデルを用いて判定する。ハンド部が周囲の物体と干渉していない場合には、把持解有りとする。この把持解がロボットコントローラ6に送信され、ロボットコントローラ6がアーム部ARM及びハンド部を制御してワークWKをピックして搬送する。
一方、ハンド部が周囲の物体と干渉している場合には、登録されている別の把持候補位置があるか否かを判定する。別の把持候補位置がある場合には、干渉判定を行う。別の把持候補位置がない場合には、ワークが他にもあるか否かを判定する。別のワークがある場合には、把持可能か否かを判定する。別のワークがない場合には把持解無しとして終了する。このように三次元サーチで複数のワークが検出された場合、検出されたワークを1つずつ把持可能か否かを判定していく。
(実施形態の作用効果)
以上説明したように、この実施形態によれば、ばら積みピッキング動作のシミュレーションに使用されるワークモデルWKMの形状及び個数と、容器モデルBXMに関するシミュレーション環境を使用者が設定部22で設定することができる。物理シミュレーション部22は、設定部20により設定された個数よりも少ない個数のワークモデルWKMを容器モデルBXM内に落下させる第1物理シミュレーションを実行する。第1物理シミュレーションにより、容器モデルBXM内では、複数のワークモデルWKMがばら積み状態で存在することになる。物理シミュレーション部22は、このばら積み状態となっている複数のワークモデルWKMをコピーして容器モデルBXMの上方から該容器モデルBXM内に落下させる第2物理シミュレーションを実行する。設定部20により設定された個数のワークモデルWKMが容器モデルBXM内にばら積みされるまで、コピーした複数のワークモデルWKMを落下させることで、ワークモデルWKMのばら積みシミュレーションが完了する。
コピーしたワークモデルWKMを落下させる際には、複数のワークモデルWKMを一度に落下させることになるので、ワークモデルWKMを1つずつ落下させる場合に比べて、ばら積みシミュレーションの結果の正確性が高まるだけでなく、物理シミュレーションに要する時間が短縮される。
また、落下開始位置(初期位置)に配置するワークモデルWKMの個数が設定部20により設定された個数よりも少ないので、初期位置においてワークモデルWKM同士の干渉が起こり難くなり、従来例のようにワークモデルが収まる球体を想定する必要が無くなる。よって、初期位置におけるワークモデルWKMの配置が自然な配置になり、このことによってもばら積みシミュレーションの結果の正確性が高まる。
さらに、従来例の球体を想定しなくて済む分、複数のワークモデルWKMを初期位置に配置するのに要する空間を小さくすることが可能になり、このことによっても物理シミュレーションに要する時間が短縮される。
したがって、シミュレーション時間が長引くのを抑制しながら、シミュレーション結果の正確性を高めることができる。
上述の実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。さらに、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。