以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の1つである。
[第1の実施形態]
本実施形態では、対象物体群におけるそれぞれの対象物体の認識順序を取得し、該対象物体群を含む領域内に、該認識順序に応じた探索範囲を設定し、該設定した探索範囲内の対象物体を検出し、該検出した対象物体の位置姿勢を認識する情報処理装置の一例について説明する。
先ず、本実施形態に係る情報処理装置のハードウェア構成例について、図2のブロック図を用いて説明する。なお、図2の構成を有する装置には、例えば、一般のPC(パーソナルコンピュータ)が適用可能であるが、以下に説明する各処理を実現可能な装置であれば、如何なる装置に適用しても構わない。例えば、図2に示す構成を、撮像装置等の装置に組み込んでも構わない。また、図2の構成を、ネットワークを介して互いにデータ通信が可能な複数の装置で構成しても構わない。
CPU201は、ROM202やRAM203に格納されているコンピュータプログラムやデータを用いて処理を実行することで、情報処理装置全体の動作制御を行うと共に、情報処理装置が行うものとして後述する各処理を実行若しくは制御する。
ROM202には、ブートプログラムや設定データなどが格納されている。
RAM203は、ROM202や2次記憶装置204からロードされたコンピュータプログラムやデータ、I/Oデバイス209から入力されたデータ、等を格納するためのエリアを有する。更に、RAM203は、CPU201が各種の処理を実行する際に用いるワークエリアを有する。このように、RAM203は、各種のエリアを適宜提供することができる。
2次記憶装置204は、ハードディスクドライブ装置などの大容量情報記憶装置である。2次記憶装置204には、OS(オペレーティングシステム)211や、情報処理装置が行うものとして後述する各処理をCPU201に実行させるためのコンピュータプログラムやデータが保存されている。このコンピュータプログラムには、モジュール213やアプリケーション212などが含まれる。また、このデータには、データ214が含まれている。また、2次記憶装置204には、以下の説明において既知の情報として取り扱う情報も保存されている。2次記憶装置204に保存されているコンピュータプログラムやデータは、CPU201による制御に従って適宜RAM203にロードされ、CPU201による処理対象となる。
ディスプレイ206は、CRTや液晶画面等により構成されており、CPU201による処理結果を画像や文字などでもって表示することができる装置である。なお、ディスプレイ206の代わりに、プロジェクタなど、CPU201による処理結果を画像や文字として投影する装置を用いても構わない。
キーボード207やマウス208は、情報処理装置の操作者が操作することで各種の指示をCPU201に対して入力することができる、ユーザインターフェースとして機能する装置である。
I/Oデバイス209は、情報処理装置に対して様々な情報を入力する機器、様々な情報を情報処理装置から外部の装置に対して出力する機器、を含むものである。本実施形態では、I/Oデバイス209は、少なくとも、距離計測範囲内の各位置までの3次元距離を計測可能な機器を含んでいる。
例えば、I/Oデバイス209が3次元距離計測を行う機器(例えば、TOFセンサ装置等の3次元入力装置)である場合には、該機器の距離計測範囲内の各位置までの3次元距離を計測することができる。
また例えば、I/Oデバイス209が2台のステレオカメラである場合には、該2台のステレオカメラのそれぞれは対象物体を含む撮像画像を撮像し、CPU201は該2台のステレオカメラのそれぞれによる撮像画像を用いて三角測量技術を適用することで、該撮像画像に写っている空間の各位置までの3次元距離を求めることができる。
また例えば、I/Oデバイス209が1台のパターン光投影装置(プロジェクタ)と、1台以上の撮像装置と、を有する場合、パターン光投影装置は、投影パターン(例えば、空間符号化画像や位相シフト法に用いられる空間的三角関数画像)を対象物体に投影し、撮像装置は該投影パターンが投影された対象物体の画像を撮像し、CPU201は該画像を用いて周知の技術を適用することで、対象物体までの距離の計測を行うことができる。また、同様の目的のために、パターン光投影装置でランダムドットパターンを対象物体に投影し、該対象物体を2台の撮像装置で撮影する方法もある。また、同様の目的のために、レーザースリット光を用いた光切断法を用いても良い。
また、I/Oデバイス209は、情報処理装置が後述する各処理により求めた様々な情報(例えば対象物体の位置姿勢)を、該対象物体を把持するためのロボット等の外部の機器に対して送出する機器をも含む。
CPU201、ROM202、RAM203、2次記憶装置204、ディスプレイ206、キーボード207、マウス208、I/Oデバイス209、は何れも、バス205に接続されている。
次に、山積みされた対象物体群等、対象物体の集合に含まれているそれぞれの対象物体の位置姿勢を認識して、その認識結果を出力するために情報処理装置が行う処理について、同処理のフローチャートを示す図1を用いて説明する。以下では、対象物体が部品である場合について説明するが、対象物体が他のものであったとしても、以下の説明は同様に適用することができる。また、以下では、対象物体に対する認識処理が、該対象物体の位置姿勢を認識する処理、である場合について説明するが、認識する対象が位置のみ、姿勢のみ、の何れであっても良いし、他の情報であってもよい。
また、図1のフローチャートに従った処理は、情報処理装置において部品の認識要求が発生するたびに行われる処理であって、情報処理装置は、部品の認識要求を受けるたびに部品の位置姿勢の認識処理を行って、該認識処理の結果としての部品の位置姿勢を出力する。なお、図1のフローチャートに従った処理は、CPU201が対応するコンピュータプログラムやデータを2次記憶装置204からRAM203にロードし、該ロードしたコンピュータプログラムやデータを用いて処理を実行することでなされるものである。
先ず、図1のフローチャートに従った処理の開始前に、I/Oデバイス209の測定範囲内に含まれているそれぞれの部品に対する認識順序(認識方向)が指定されているものとする。情報処理装置は、I/Oデバイス209の測定範囲内に収まっているそれぞれの部品を、該指定された認識順序に従って順番に認識し、該認識した結果(部品の位置姿勢)を出力する。認識の結果の出力先が、部品を把持するロボット(厳密にはロボットを制御する制御部)である場合、該ロボットは、情報処理装置から出力された部品の位置姿勢に応じて該部品を把持するため、結果として該ロボットは、それぞれの部品を、上記の認識順序に従って順番に把持することになる。然るに、上記の認識順序は、「部品把持順序」でもある。
ここで、上記の認識順序の幾つかの例について、図3を用いて説明する。図3では、部品群を直上から見下ろした場合に該部品群のそれぞれに対する認識順序の幾つかの例を示している。
図3(a)、(b)は、認識順序を2つの方向で指定した例を示しており、図3(c)、(d)は、認識順序を1つの方向で指定した例を示している。以下の説明において、図3(a)や図3(b)に示したような認識順序を指定した場合、大局的な方向を第1優先方向と呼び、局所的な方向を第2優先方向と呼ぶ。図3(a)では、第1優先方向が上から下の方向で、第2優先方向が左から右の方向となる。図3(b)では、第1優先方向が右から左の方向で、第2優先方向が上から下の方向となる。第1優先方向が上から下、下から上、右から左、左から右の4通りあり、そのそれぞれに対して第2優先方向が2通りあり得るので、全部で認識順序は8通りのバリエーションができる。
一方、第1優先方向が決定しており、第2優先方向、つまり局所的な方向が不確定な例を図3(c)、(d)に示す。図3(c)の順序301と順序302は左右対称の形となっており、局所的に右から左へ把持する場合と、左から右へ把持する場合が交互に繰り返す構造となっている。図3(d)に示した例は、第1優先方向のみを指定し、第2優先方向は方向すら存在しない例である。
このように、認識順序には様々なものが考えられ、図3に示した認識順序に限るものではない。例えば、図3に示すように縦方向、横方向だけでなく、斜め方向に認識順序を指定するようにしても構わない。
然るに、図1のフローチャートに従った処理の開始前に、このような幾つかの認識順序のうち1つを指定する。なお、様々な認識順序のうち1つを指定する方法には様々な方法が考えられ、特定の方法に限るものではない。例えば、幾つかの認識順序を表すアイコン(画像/文字)をディスプレイ206に表示し、ユーザがキーボード207やマウス208を用いて、ディスプレイ206に表示されているアイコンのうち1つを指定する方法を採用しても良い。また、部品群とロボットとの位置関係や部品の形状、配置状況など、様々な状況に応じてCPU201が幾つかの認識順序のうち1つを指定するようにしても構わない。また、ユーザがキーボード207やマウス208を操作して認識順序を示す軌跡(例えば、図3に示したような第1優先方向のみ、若しくは第1優先方向及び第2優先方向の組み合わせによる認識順序を示す方向)を作成し、該作成した認識順序を以降の処理で使用する認識順序として指定しても構わない。
上記の通り、認識の結果の出力先が、部品を把持するロボットである場合、該ロボットは、それぞれの部品を、指定した認識順序に従って順番に把持することになる。然るに、認識順序は、ロボットが部品を把持しやすい把持順序にすることが好ましい。例えば、ロボットが図3の上方向に設置されていたとする。すると第1優先方向が図3(a)、(c)、(d)に示した方向となるように認識順序を設定すれば、ロボットの手前部分から部品を把持することになるので、まだ把持していない部品と干渉・接触する危険性が低くなる。このようにロボットと部品との位置関係や部品の形状・置き方によって、把持しやすくなるように認識順序を設定するのがよい。
以下では、具体的な説明を行うために、図3(a)に示した認識順序が指定されたものとして説明するが、他の認識順序が指定された場合であっても、当業者であれば以下の説明を適宜変形させれば、同様の目的を達成することができるであろう。
以上のように、図1のフローチャートに従った処理の開始前に認識順序を指定した後、I/Oデバイス209は、該I/Oデバイス209の測定範囲内を撮像する。本実施形態では、I/Oデバイス209は、部品群を収容した部品格納容器やトレイを含む画像を撮像し、CPU201は、I/Oデバイス209による撮像画像を用いて、該撮像画像内に写っているそれぞれの部品の位置姿勢を認識するものとする。
I/Oデバイス209による撮像画像の一例を図4に示す。図4において416は撮像画像であり、撮像画像416は、部品が3行×5列=15個(部品401,402,…,415)並んでいる状態を撮像した画像である。なお、図4ではそれぞれの位置に部品が1つしか配置されていないが、それぞれの位置に複数個の部品が重ね置きされていてもよい。撮像画像は上記の通り、部品群を収容した部品格納容器やトレイを含む画像であり、通常は、部品格納容器やトレイの内部を撮像した画像である。なお、部品群は部品格納容器やトレイの内部に配置することに限るものではなく、単に机の上等、天板の上に配置するようにしても構わない。このような場合、撮像画像は、天板上の部品群を撮像した画像となる。
以下では、I/Oデバイス209によって図4に示した撮像画像416が撮像されたものとし、図4〜7に沿って、図1のフローチャートに従った処理を具体的に説明する。なお、図4〜7において点線で示した部品は既にロボットによってピッキングされた部品を示しており、図には描画されているが、実際には存在していないことを意味する。
ステップS102では、CPU201は、撮像画像416上に、部品を探索するための探索領域(部分領域)417が設定されているか否かを判断する。認識順序として図3(a)に示した認識順序が指定された場合、撮像画像416上に初めて探索領域417を設定する場合は、図4(a)に示す如く、撮像画像416において第1優先方向及び第2優先方向の開始点の位置、即ち、撮像画像416の左上隅の位置に探索領域417の左上隅を合わせるようにして該探索領域417を設定する。図4(a)では、探索領域417のサイズは横が部品約3個分、縦が部品約2個分の大きさとなっているが、基本的に探索領域417のサイズは、少なくとも1つの部品が入るようなサイズであれば如何なるサイズであっても構わない。但し、第1優先方向のサイズよりも第2優先方向のサイズが大きくなるような探索領域を設定すると、ユーザが指定した認識順序で安定して部品検出が出来る可能性が高くなる。
ステップS102における判断の結果、撮像画像416上にすでに探索領域417が設定されている場合には、処理はステップS104に進み、まだ設定されていない場合には、処理はステップS103に進む。
ステップS103では、CPU201は、撮像画像416上に探索領域417を設定する。
ステップS104では、CPU201は、探索領域417から部品を検出する。図4(a)のように探索領域417を設定した場合、該探索領域417内には部品401〜403、406〜408が含まれているので、部品401〜403、406〜408が検出されることになる。
ステップS105では、CPU201は、ステップS104における検出処理で1以上の部品が検出されたか否かを判断する。この判断の結果、1以上の部品が検出された場合には、処理はステップS106に進み、検出されていない場合は、ステップS112に進む。第1回目のステップS104では、探索領域417からは部品401〜403、406〜408が検出されるので、このような場合は、処理はステップS106に進むことになる。
ステップS106では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。部品存在ラインとは、認識対象となる部品が並んでいるであろうとおぼしき帯状の領域である。この判断の結果、部品存在ラインが設定されている場合には、処理はステップS109に進み、設定されていない場合は、処理はステップS107に進む。
ステップS107では、CPU201は、第1優先方向にy軸をとった場合に、ステップS104における検出処理で検出した部品のうちy座標値が最も小さい部品(検出されたそれぞれの部品の検出y座標のうち最も小さい検出y座標の部品)を基準部品として特定する。図4(a)の場合、探索領域417から部品401〜403、406〜408が検出され、そのうちy座標値が最も小さい部品は部品402となるため、部品402が基準部品として特定されることになる。
ステップS108では、CPU201は、第1優先方向における基準部品の上端と、第1優先方向における基準部品の下端と、を検出し、該検出した上端を通り且つ第2優先方向と平行な線分と、該検出した下端を通り且つ第2優先方向と平行な線分と、に挟まれた領域を部品存在ラインとして設定する。図4(a)の場合、検出した上端を通り且つ第2優先方向と平行な線分は線分418に相当し、検出した下端を通り且つ第2優先方向と平行な線分は線分419に相当し、線分418と線分419とに挟まれた領域が部品存在ラインとして設定される。
なお、部品存在ラインの設定方法はこのような設定方法に限るものではなく、様々な設定方法が考え得る。例えば、基準部品の重心位置を中心として部品サイズの定数倍の幅(第1優先方向の長さ)を有する帯状の領域を部品存在ラインとして設定しても良い。
ステップS109では、CPU201は、部品存在ライン内に、ステップS104で検出した部品の何れかが含まれているか否かを判断する。この判断の結果、部品存在ライン内に、ステップS104で検出した部品の何れかが含まれている場合には、処理はステップS110に進み、含まれていない場合には、処理はステップS112に進む。図4(a)の場合、部品存在ライン内には、ステップS104で検出した部品401〜403が含まれている。
ステップS110では、CPU201は、ステップS104で検出した部品のうち部品存在ライン内に含まれている部品を対象とし、該対象となる部品のうちx座標値が最も小さい部品を、これから位置姿勢を認識する対象の部品として決定する。図4(a)の場合、部品存在ライン内に含まれている部品401〜403のうちx座標値が最も小さい部品は部品401となるため、部品401を、これから位置姿勢を認識する対象の部品として決定する。
ステップS111では、CPU201は、ステップS110で決定した部品の位置姿勢を認識する。撮像画像中の部品の位置姿勢を認識する方法については、撮像画像が2台のステレオカメラによる撮像画像である場合や、撮像画像が投影パターンが投影された部品の撮像画像である場合など、それぞれの場合に応じて異なり、それぞれの場合における位置姿勢認識方法は周知技術であるため、これに係る詳細な説明は省略する。
CPU201は、ステップS111で認識した位置姿勢を出力するのであるが、以下では出力先は部品を把持するロボットであるものとする。然るにロボットは、CPU201により出力された位置姿勢を受けると、該位置姿勢を有する部品を把持することになる。
ステップS111の処理が完了すると、処理はステップS102に戻る。なお、ステップS111からステップS102へは即座に移行しても構わないし、ロボットが部品を把持して作業を完了するたびにCPU201が部品の認識要求を発行し、該発行に応じてステップS102に移行しても構わない。
図4(a)の場合、部品401の位置姿勢が認識されてロボットに出力されるので、ロボットは部品401を把持して作業を行う。そして再度、ステップS102以降の処理を行うと、2回目のステップS102では、探索領域417はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域417から部品を検出する。図4(a)の場合、探索領域417内には部品402,403,406〜408が含まれている(部品401はロボットによって探索領域417から取り除かれている)のであるから、結果としてステップS104では、部品402,403,406〜408が検出されることになる。
そして処理はステップS105,S106,S109,S110,S111と進み、その結果、部品402の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
ステップS111の処理が完了すると、処理はステップS102に戻る。3回目のステップS102では、探索領域417はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域417から部品を検出する。図4(a)の場合、探索領域417内には部品403、406〜408が含まれている(部品401,402はロボットによって探索領域417から取り除かれている)のであるから、結果としてステップS104では、部品403,406〜408が検出されることになる。
そして処理はステップS105,S106,S109,S110,S111と進み、その結果、部品403の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
ステップS111の処理が完了すると、処理はステップS102に戻る。4回目のステップS102では、探索領域417はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域417から部品を検出する。図4(a)の場合、探索領域417内には部品406〜408が含まれている(部品401〜403はロボットによって探索領域417から取り除かれている)のであるから、結果としてステップS104では、部品406〜408が検出されることになる。
そして処理はステップS105,S106,S109と進む。ステップS109では、部品存在ライン内に、ステップS104で検出した部品、すなわち、部品406〜408の何れかが含まれているか否かを判断するのであるが、部品406〜408の何れも部品存在ライン内に含まれていないので、処理はステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域417の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図4(a)の場合は設定可能と判断されるため、処理はステップS113に進む。
ステップS113では、CPU201は、図4(b)に示す如く、図4(a)の探索領域417を第2優先方向に移動させた探索領域420を設定する。なお、探索領域420において、撮像画像416からはみ出した部分421を取り除いた残りの部分が実際には探索領域として使用されることになる。図4(b)では、最近位置姿勢を認識した部品403に隣接するように、探索領域417の右隣に探索領域420を設定している。
なお、ステップS113における新たな探索領域の設定方法には、これ以外の方法も考えられる。例えば、最近位置姿勢を認識した部品の外接矩形と、該部品と第2優先方向に隣り合う部品の外接矩形と、が互いに重なりあうような部品形状・配置の場合、最近位置姿勢を認識した部品の左端(該部品において第2優先方向における一端)が左辺となるような探索領域を設定することが有効なこともある。
ステップS113の後はステップS104に処理が移行する。ステップS104では、CPU201は、探索領域420に含まれている部品404,405,409,410を検出する。そして処理はステップS105,S106,S109,S110と移行し、ステップS110では、CPU201は、部品404,405のうちx座標値が最も小さい部品404を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品404の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域420はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域420から部品を検出する。図4(a)の場合、探索領域420内には部品405,409,410が含まれている(部品404はロボットによって探索領域420から取り除かれている)のであるから、結果としてステップS104では、部品405,409,410が検出されることになる。
そして処理はステップS105,S106,S109,S110と進み、ステップS110では、部品405を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品405の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域420はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域420から部品を検出する。図4(b)の場合、探索領域420内には部品409,410が含まれている(部品404,405はロボットによって探索領域420から取り除かれている)のであるから、結果としてステップS104では、部品409,410が検出されることになる。
そして処理はステップS105,S106,S109と進む。ステップS109では、部品存在ライン内に、ステップS104で検出した部品、すなわち、部品409,410の何れかが含まれているか否かを判断するのであるが、部品409,410の何れも部品存在ライン内に含まれていないので、処理はステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域420の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図4(b)の場合は設定不可能と判断されるため、処理はステップS114に進む。
ステップS114では、CPU201は、現在設定している探索領域420よりも第1優先方向に新たな探索領域が設定可能であるか否か(撮像画像416において探索領域420よりも第1優先方向にまだ探索領域を設定していない領域が残っているか否か)を判断する。この判断の結果、設定可能と判断した場合には、処理はステップS115に進み、設定不可能と判断した場合には、処理はステップS116に進む。図4(b)の場合は設定可能と判断されるため、処理はステップS115に進む。
ステップS115では、CPU201は、図5(a)に示す如く、上端が現在設定している部品存在ラインの下端(線分419)と一致し且つ左辺が撮像画像416の左辺と一致するような新たな探索領域501を設定する。更にステップS115では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
なお、新たな探索領域501の設定方法は上記の設定方法に限るものではない。例えば、部品間でそれぞれの外接矩形が互いに重なりあうような部品形状・配置の場合、上端が現在設定している部品存在ラインの上端(線分418)と一致し且つ左辺が撮像画像416の左辺と一致するような新たな探索領域を設定することが有効なこともある。なお、上記の通り、ここでは、認識順序として図3(a)に示した認識順序が指定されたものとしているが、認識順序として図3(c)の順序301が指定された場合、上端が現在設定している部品存在ラインの上端若しくは下端と一致し且つ右辺が撮像画像416の右辺と一致するような新たな探索領域を設定する。
ステップS115の後はステップS104に処理が移行する。ステップS104では、探索領域501から部品を検出する。図5(a)の場合、探索領域501内には部品406〜408,411〜413が含まれているので、結果としてステップS104では、部品406〜408,411〜413が検出されることになる。
そして処理はステップS105,S106と進む。ステップS106では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。先のステップS115で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップS107に進む。
ステップS107では、CPU201は、ステップS104における検出処理で検出した部品406〜408,411〜413のうちy座標値が最も小さい部品408を基準部品として特定する。
ステップS108では、CPU201は、第1優先方向における部品408の上端と、第1優先方向における部品408の下端と、を検出し、該検出した上端を通り且つ第2優先方向と平行な線分(線分502)と、該検出した下端を通り且つ第2優先方向と平行な線分(線分503)と、に挟まれた領域を部品存在ラインとして設定する。
そして処理はステップS109,S110と進み、ステップS110では、CPU201は、ステップS104で検出した部品406〜408,411〜413のうち部品存在ラインに含まれている部品406〜408のうち、x座標値が最も小さい部品406を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品406の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域501はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域501から部品を検出する。図5(a)の場合、探索領域501内には部品407〜408,411〜413が含まれている(部品406はロボットによって探索領域501から取り除かれている)のであるから、結果としてステップS104では、部品407〜408,411〜413が検出されることになる。
そして処理はステップS105,S106,S109,S110と進み、ステップS110では、部品407を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品407の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域501はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域501から部品を検出する。図5(a)の場合、探索領域501内には部品408,411〜413が含まれている(部品406,407はロボットによって探索領域501から取り除かれている)のであるから、結果としてステップS104では、部品408,411〜413が検出されることになる。
そして処理はステップS105,S106,S109,S110と進み、ステップS110では、部品408を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品408の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域501はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域501から部品を検出する。図5(a)の場合、探索領域501内には部品411〜413が含まれている(部品406〜408はロボットによって探索領域501から取り除かれている)のであるから、結果としてステップS104では、部品411〜413が検出されることになる。
そして処理はステップS105,S106,S109と進む。ステップS109では、部品存在ライン内に、ステップS104で検出した部品、すなわち、部品411〜413の何れかが含まれているか否かを判断するのであるが、部品411〜413の何れも部品存在ライン内に含まれていないので、処理はステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域501の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図5(a)の場合は設定可能と判断されるため、処理はステップS113に進む。
ステップS113では、CPU201は、図5(b)に示す如く、図5(a)の探索領域501を第2優先方向に移動させた探索領域504を設定する。なお、探索領域504において、撮像画像416からはみ出した部分505を取り除いた残りの部分が実際には探索領域として使用されることになる。図5(b)では、最近位置姿勢を認識した部品408に隣接するように、探索領域501の右隣に探索領域504を設定している。
ステップS113の後はステップS104に処理が移行する。ステップS104では、CPU201は、探索領域504に含まれている部品409,410,414,415を検出する。そして処理はステップS105,S106,S109,S110と移行し、ステップS110では、CPU201は、部品409,410のうちx座標値が最も小さい部品409を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品409の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域504はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域504から部品を検出する。図5(b)の場合、探索領域504内には部品410,414,415が含まれている(部品409はロボットによって探索領域504から取り除かれている)のであるから、結果としてステップS104では、部品410,414,415が検出されることになる。
そして処理はステップS105,S106,S109,S110と進み、ステップS110では、部品410を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品410の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域504はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域504から部品を検出する。図5(b)の場合、探索領域504内には部品414,415が含まれている(部品409,410はロボットによって探索領域504から取り除かれている)のであるから、結果としてステップS104では、部品414,415が検出されることになる。
そして処理はステップS105,S106,S109と進む。ステップS109では、部品存在ライン内に、ステップS104で検出した部品、すなわち、部品414,415の何れかが含まれているか否かを判断するのであるが、部品414,415の何れも部品存在ライン内に含まれていないので、処理はステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域504の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図5(b)の場合は設定不可能と判断されるため、処理はステップS114に進む。
ステップS114では、CPU201は、現在設定している探索領域504よりも第1優先方向に新たな探索領域が設定可能であるか否か(撮像画像416において探索領域504よりも第1優先方向にまだ探索領域を設定していない領域が残っているか否か)を判断する。この判断の結果、設定可能と判断した場合には、処理はステップS115に進み、設定不可能と判断した場合には、処理はステップS116に進む。図5(b)の場合は設定可能と判断されるため、処理はステップS115に進む。
ステップS115では、CPU201は、図6(a)に示す如く、上端が現在設定している部品存在ラインの下端(線分503)と一致し且つ左辺が撮像画像416の左辺と一致するような新たな探索領域601を設定する。なお、探索領域601において、撮像画像416からはみ出した部分602を取り除いた残りの部分が実際には探索領域として使用されることになる。更にステップS115では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
なお、新たな探索領域601の設定方法は上記の設定方法に限るものではない。例えば、部品間でそれぞれの外接矩形が互いに重なりあうような部品形状・配置の場合、上端が現在設定している部品存在ラインの上端(線分502)と一致し且つ左辺が撮像画像416の左辺と一致するような新たな探索領域を設定することが有効なこともある。
ステップS115の後はステップS104に処理が移行する。ステップS104では、探索領域601から部品を検出する。図6(a)の場合、探索領域601内には部品411〜413が含まれているので、結果としてステップS104では、部品411〜413が検出されることになる。
そして処理はステップS105,S106と進む。ステップS106では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。先のステップS115で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップS107に進む。
ステップS107では、CPU201は、ステップS104における検出処理で検出した部品411〜413のうちy座標値が最も小さい部品411を基準部品として特定する。
ステップS108では、CPU201は、第1優先方向における部品411の上端と、第1優先方向における部品411の下端と、を検出し、該検出した上端を通り且つ第2優先方向と平行な線分603と、該検出した下端を通り且つ第2優先方向と平行な線分604と、に挟まれた領域を部品存在ラインとして設定する。
そして処理はステップS109,S110と進み、ステップS110では、CPU201は、ステップS104で検出した部品411〜413のうち部品存在ラインに含まれている部品411〜413のうち、x座標値が最も小さい部品411を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品411の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域601はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域601から部品を検出する。図6(a)の場合、探索領域601内には部品412〜413が含まれている(部品411はロボットによって探索領域601から取り除かれている)のであるから、結果としてステップS104では、部品412〜413が検出されることになる。
そして処理はステップS105,S106,S109,S110,S111と進み、その結果、部品412の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域601はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域601から部品を検出する。図6(a)の場合、探索領域601内には部品413が含まれている(部品411,412はロボットによって探索領域601から取り除かれている)のであるから、結果としてステップS104では、部品413が検出されることになる。
そして処理はステップS105,S106,S109,S110,S111と進み、その結果、部品413の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域601はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域601から部品を検出する。図6(a)の場合、探索領域601内には部品は存在しない(部品411〜413はロボットによって探索領域601から取り除かれている)ので、結果としてステップS104では、部品が検出されないことになる。このような場合、処理はステップS112に進む。
ステップS112では、CPU201は、現在設定している探索領域601の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図6(a)の場合は設定可能と判断されるため、処理はステップS113に進む。
ステップS113では、CPU201は、図6(b)に示す如く、図6(a)の探索領域601を第2優先方向に移動させた探索領域605を設定する。なお、探索領域605において、撮像画像416からはみ出した部分606を取り除いた残りの部分が実際には探索領域として使用されることになる。図6(b)では、最近位置姿勢を認識した部品413に隣接するように、探索領域601の右隣に探索領域605を設定している。
ステップS113の後はステップS104に処理が移行する。ステップS104では、CPU201は、探索領域605に含まれている部品414,415を検出する。そして処理はステップS105,S106,S109,S110と移行し、ステップS110では、CPU201は、部品414,415のうちx座標値が最も小さい部品414を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品414の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域605はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域605から部品を検出する。図6(b)の場合、探索領域605内には部品415が含まれている(部品414はロボットによって探索領域605から取り除かれている)のであるから、結果としてステップS104では、部品415が検出されることになる。
そして処理はステップS105,S106,S109,S110と進み、ステップS110では、部品415を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS111では、CPU201は、部品415の位置姿勢を認識して出力する。
ステップS111の処理が完了すると、処理はステップS102に戻る。ステップS102では、探索領域605はすでに設定されていると判断されるので、処理はステップS104に進み、該探索領域605から部品を検出する。図6(b)の場合、探索領域605内には部品は存在しない(部品414,415はロボットによって探索領域605から取り除かれている)ので、結果としてステップS104では、部品が検出されないことになる。このような場合、処理はステップS112に進む。
ステップS112では、CPU201は、現在設定している探索領域605の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図6(b)の場合は設定不可能と判断されるため、処理はステップS114に進む。
ステップS114では、CPU201は、現在設定している探索領域605よりも第1優先方向に新たな探索領域が設定可能であるか否か(撮像画像416において探索領域605よりも第1優先方向にまだ探索領域を設定していない領域が残っているか否か)を判断する。この判断の結果、設定可能と判断した場合には、処理はステップS115に進み、設定不可能と判断した場合には、処理はステップS116に進む。図6(b)の場合は設定可能と判断されるため、処理はステップS115に進む。
ステップS115では、CPU201は、図7(a)に示す如く、上端が現在設定している部品存在ラインの下端(線分604)と一致し且つ左辺が撮像画像416の左辺と一致するような新たな探索領域701を設定する。なお、探索領域701において、撮像画像416からはみ出した部分702を取り除いた残りの部分が実際には探索領域として使用されることになる。更にステップS115では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
ステップS115の後はステップS104に処理が移行する。ステップS104では、探索領域701から部品を検出する。図7(a)の場合、探索領域701内には1つも部品が含まれていないので、結果としてステップS104では、部品は1つも検出されなかったことになる。このような場合、処理はステップS105を介してステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域701の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図7(a)の場合は設定可能と判断されるため、処理はステップS113に進む。
ステップS113では、CPU201は、図7(b)に示す如く、図7(a)の探索領域701を第2優先方向に移動させた探索領域703を設定する。なお、探索領域703において、撮像画像416からはみ出した部分704を取り除いた残りの部分が実際には探索領域として使用されることになる。図7(b)では、最近位置姿勢を認識した部品が存在しないため、探索領域701の位置から規定量だけ第2優先方向に移動させた位置に探索領域703を設定している。
ステップS113の後はステップS104に処理が移行する。ステップS104では、探索領域703から部品を検出する。図7(b)の場合、探索領域703内には1つも部品が含まれていないので、結果としてステップS104では、部品は1つも検出されなかったことになる。このような場合、処理はステップS105を介してステップS112に進むことになる。
ステップS112では、CPU201は、現在設定している探索領域703の位置から第2優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS113に進み、設定不可能と判断した場合には、処理はステップS114に進む。図7(b)の場合は設定不可能と判断されるため、処理はステップS114に進む。
ステップS114では、CPU201は、現在設定している探索領域703よりも第1優先方向に新たな探索領域が設定可能であるか否か(撮像画像416において探索領域703よりも第1優先方向にまだ探索領域を設定していない領域が残っているか否か)を判断する。この判断の結果、設定可能と判断した場合には、処理はステップS115に進み、設定不可能と判断した場合には、処理はステップS116に進む。図7(b)の場合は設定不可能と判断されるため、処理はステップS116に進む。
ステップS116では、CPU201は、撮像画像416からこれ以上位置姿勢を認識する部品がないと判断して処理を終了させる。なお、ステップS116では、これ以上の処理を行っても良く、例えば、CPU201は、撮像画像416中の全ての部品の位置姿勢の認識が完了した旨をディスプレイ206に表示しても構わないし、認識が完了した位置姿勢をディスプレイ206に一覧表示しても構わない。
このように、本実施形態によれば、部品配置が少々崩れたとしても、ユーザが指定した順序に基づき部品を検出・認識することができる。
なお、本実施形態では、撮像画像中に写っている部品の位置姿勢を認識する場合について説明したが、これは一例であり、位置姿勢の測定範囲内に位置する対象物体の位置姿勢を認識することができるのであれば、撮像画像を用いた形態に限るものではない。このような場合、図4の撮像画像416は位置姿勢の測定可能な範囲を示した図として解釈し、上記の様々な領域(探索領域や部品存在ライン)は、該範囲内で仮想的に(計算上)設定することになる。もちろん、位置姿勢の測定可能な範囲をユーザが指定しても構わない。
[第2の実施形態]
以下では、第1の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第1の実施形態と同様であるものとする。本実施形態では、図1のフローチャートに従った処理の代わりに、図8のフローチャートに従った処理を実行する。また、本実施形態では、認識順序として図3(d)に示した認識順序が指定された場合について説明する。すなわち、図3(d)に示したような、第1優先方向のみが指定された場合について説明する。
以下では、I/Oデバイス209によって図9に示した撮像画像416が撮像されたものとし、図9〜10に沿って、図8のフローチャートに従った処理を具体的に説明する。
ステップS802では、CPU201は、撮像画像416上に探索領域901が設定されているか否かを判断する。探索領域901の横サイズは撮像画像416と同じであり、縦サイズは部品約2個分の大きさとなっているが、基本的に探索領域901のサイズは、少なくとも1つの部品が入るようなサイズであれば如何なるサイズであっても構わない。撮像画像416上に初めて探索領域901を設定する場合は、図9(a)に示す如く、撮像画像416の左上隅の位置に探索領域901の左上隅を合わせるようにして該探索領域901を設定する。
ステップS802における判断の結果、撮像画像416上にすでに探索領域901が設定されている場合には、処理はステップS804に進み、まだ設定されていない場合には、処理はステップS803に進む。
ステップS803では、CPU201は、撮像画像416上に探索領域901を設定する。
ステップS804では、CPU201は、探索領域901中の部品を検出する。図9(a)のように探索領域901を設定した場合、該探索領域901内には部品401〜410が含まれているため、ステップS804では、部品401〜410が検出されることになる。
ステップS805では、CPU201は、ステップS804における検出処理で1以上の部品が検出されたか否かを判断する。この判断の結果、1以上の部品が検出された場合には、処理はステップS806に進み、検出されていない場合は、ステップS812に進む。第1回目のステップS804では、探索領域901からは部品401〜410が検出されるので、このような場合は、処理はステップS806に進むことになる。
ステップS806では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。この判断の結果、部品存在ラインが設定されている場合には、処理はステップS809に進み、設定されていない場合は、処理はステップS807に進む。
ステップS807では、CPU201は、第1優先方向にy軸をとった場合に、ステップS804における検出処理で検出した部品のうちy座標値が最も小さい部品(検出されたそれぞれの部品の検出y座標のうち最も小さい検出y座標の部品)を基準部品として特定する。図9(a)の場合、探索領域901から部品401〜410が検出され、そのうちy座標値が最も小さい部品は部品402となるため、部品402が基準部品として特定されることになる。
ステップS808では、CPU201は、第1優先方向における部品402の上端と、第1優先方向における部品402の下端と、を検出し、該検出した上端を通り且つ第1優先方向と直交する方向と平行な線分902と、該検出した下端を通り且つ第1優先方向と直交する方向と平行な線分903と、に挟まれた領域を部品存在ラインとして設定する。
ステップS809では、CPU201は、部品存在ライン内に、ステップS804で検出した部品の何れかが含まれているか否かを判断する。この判断の結果、部品存在ライン内に、ステップS804で検出した部品の何れかが含まれている場合には、処理はステップS810に進み、含まれていない場合には、処理はステップS812に進む。図9(a)の場合、部品存在ライン内には、ステップS804で検出した部品401〜405が含まれている。
ステップS810では、CPU201は、ステップS804で検出した部品のうち部品存在ライン内に含まれている部品を対象とし、該対象となる部品のうちy座標値が最も小さい部品を、これから位置姿勢を認識する対象の部品として決定する。図9(a)の場合、部品存在ライン内に含まれている部品401〜405のうちy座標値が最も小さい部品は部品402となるため、部品402を、これから位置姿勢を認識する対象の部品として決定する。なお、ステップS804で検出した部品のうち部品存在ライン内に含まれている部品のうち、これから位置姿勢を認識する対象の部品として決定する、ための方法には様々な方法が考えられ、上記の方法に限るものではない。ステップS811では、CPU201は、ステップS810で決定した部品402の位置姿勢を認識する。以降、同様にして、ステップS802、S804、S805、S806、S809、S810、S811の順に処理を繰り返し実行することで、部品404,403,405,401の順に位置姿勢が認識される。
部品401の位置姿勢の認識を行うステップS811の処理が完了すると、処理はステップS802に戻る。ステップS802では、探索領域901はすでに設定されていると判断されるので、処理はステップS804に進み、該探索領域901から部品を検出する。図9(a)の場合、探索領域901内には部品406〜410が含まれている(部品401〜405はロボットによって探索領域901から取り除かれている)のであるから、結果としてステップS804では、部品406〜410が検出されることになる。
そして処理はステップS805,S806,S809と進む。ステップS809では、部品存在ライン内に、ステップS804で検出した部品、すなわち、部品406〜410の何れかが含まれているか否かを判断するのであるが、部品406〜410の何れも部品存在ライン内に含まれていないので、処理はステップS812に進むことになる。
ステップS812では、CPU201は、現在設定している探索領域901の位置から第1優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS813に進み、設定不可能と判断した場合には、処理はステップS814に進む。図9(a)の場合は設定可能と判断されるため、処理はステップS813に進む。
ステップS813では、CPU201は、図9(b)に示す如く、図9(a)の探索領域901を第1優先方向に移動させた探索領域904を設定する。図9(b)では、上端が線分903と一致するように探索領域904を設定している。更にステップS813では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
ステップS813の後はステップS804に処理が移行する。ステップS804では、CPU201は、探索領域904に含まれている部品406〜415を検出する。そして処理はステップS805,S806と移行する。
ステップS806では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。先のステップS813で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップS807に進む。
ステップS807では、CPU201は、ステップS804における検出処理で検出した部品406〜415のうちy座標値が最も小さい部品408を基準部品として特定する。
ステップS808では、CPU201は、第1優先方向における部品408の上端と、第1優先方向における部品408の下端と、を検出し、該検出した上端を通り且つ第1優先方向と直交する方向と平行な線分905と、該検出した下端を通り且つ第1優先方向と直交する方向と平行な線分906と、に挟まれた領域を部品存在ラインとして設定する。
そして処理はステップS809,S810と移行し、ステップS810では、CPU201は、ステップS804で検出した部品406〜415のうち部品存在ラインに含まれている部品406〜410のうち、y座標値が最も小さい部品408を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS811では、CPU201は、部品408の位置姿勢を認識して出力する。
以降、同様にして、ステップS802、S804、S805、S806、S809、S810、S811の順に処理を繰り返し実行することで、部品407,406,410,409の順に位置姿勢が認識される。
部品409の位置姿勢の認識を行うステップS811の処理が完了すると、処理はステップS802に戻る。ステップS802では、探索領域904はすでに設定されていると判断されるので、処理はステップS804に進み、該探索領域904から部品を検出する。図9(b)の場合、探索領域904内には部品411〜415が含まれている(部品406〜410はロボットによって探索領域904から取り除かれている)のであるから、結果としてステップS804では、部品411〜415が検出されることになる。
そして処理はステップS805,S806,S809と進む。ステップS809では、部品存在ライン内に、ステップS804で検出した部品、すなわち、部品411〜415の何れかが含まれているか否かを判断するのであるが、部品411〜415の何れも部品存在ライン内に含まれていないので、処理はステップS812に進むことになる。
ステップS812では、CPU201は、現在設定している探索領域904の位置から第1優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS813に進み、設定不可能と判断した場合には、処理はステップS814に進む。図9(b)の場合は設定可能と判断されるため、処理はステップS813に進む。
ステップS813では、CPU201は、図10(a)に示す如く、図9(b)の探索領域904を第1優先方向に移動させた探索領域1001を設定する。図10(a)では、その上端が線分906と一致するような探索領域1001を設定している。また、探索領域1001の第1優先方向のサイズは、撮像画像416からはみ出ないように調整されている。更にステップS813では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
ステップS813の後はステップS804に処理が移行する。ステップS804では、CPU201は、探索領域1001に含まれている部品411〜415を検出する。そして処理はステップS805,S806と移行する。
ステップS806では、CPU201は、撮像画像416上にすでに部品存在ラインが設定されているか否かを判断する。先のステップS813で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップS807に進む。
ステップS807では、CPU201は、ステップS804における検出処理で検出した部品411〜415のうちy座標値が最も小さい部品414を基準部品として特定する。
ステップS808では、CPU201は、第1優先方向における部品414の上端と、第1優先方向における部品414の下端と、を検出し、該検出した上端を通り且つ第1優先方向と直交する方向と平行な線分1002と、該検出した下端を通り且つ第1優先方向と直交する方向と平行な線分1003と、に挟まれた領域を部品存在ラインとして設定する。
そして処理はステップS809,S810と移行し、ステップS810では、CPU201は、ステップS804で検出した部品411〜415のうち部品存在ラインに含まれている部品411〜415のうち、y座標値が最も小さい部品414を、これから位置姿勢を認識する対象の部品として決定する。然るにステップS811では、CPU201は、部品414の位置姿勢を認識して出力する。
以降、同様にして、ステップS802、S804、S805、S806、S809、S810、S811の順に処理を繰り返し実行することで、部品415,411,413,412の順に位置姿勢が認識される。
部品412の位置姿勢の認識を行うステップS811の処理が完了すると、処理はステップS802に戻る。ステップS802では、探索領域1001はすでに設定されていると判断されるので、処理はステップS804に進み、該探索領域1001から部品を検出する。図10(a)の場合、探索領域1001内には部品は1つも含まれていないため(部品411〜415はロボットによって探索領域1001から取り除かれている)、結果としてステップS804では、部品は検出されなかったことになる。このような場合、処理はステップS812に移行する。
ステップS812では、CPU201は、現在設定している探索領域1001の位置から第1優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS813に進み、設定不可能と判断した場合には、処理はステップS814に進む。図10(a)の場合は設定可能と判断されるため、処理はステップS813に進む。
ステップS813では、CPU201は、図10(b)に示す如く、図10(a)の探索領域1001を第1優先方向に移動させた探索領域1004を設定する。図10(b)では、その上端が線分1003と一致するような探索領域1004を設定している。また、探索領域1004の第1優先方向のサイズは、撮像画像416からはみ出ないように調整されている。更にステップS813では、CPU201は、現在設定している部品存在ラインを削除(クリア)する。
ステップS813の後はステップS804に処理が移行する。ステップS804では、CPU201は、探索領域1004から部品を検出する処理を行うのであるが、探索領域1004には部品が1つも含まれていないため、ステップS804では、部品が1つも検出されないことになる。このような場合、処理はステップS805を介してステップS812に進むことになる。
ステップS812では、CPU201は、現在設定している探索領域1004の位置から第1優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップS813に進み、設定不可能と判断した場合には、処理はステップS814に進む。図10(b)の場合は設定不可能と判断されるため、処理はステップS814に進む。
ステップS814では、CPU201は、撮像画像416からこれ以上位置姿勢を認識する部品がないと判断して処理を終了させる。
このように、本実施形態によれば、ユーザが方向を1つ指定した場合であっても、指定された方向に基づき安定して確実に部品を検出・認識することができる。
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。