(57)【特許請求の範囲】
【請求項１】
物体群を撮像した撮像画像におけるそれぞれの物体の位置姿勢を認識するための順序が互いに異なる複数の順序を取得し、該複数の順序のうち１つの順序を選択して設定する設定手段と、
前記撮像画像において前記物体を検出するための探索範囲を、前記設定手段により設定された順序に従って移動させながら、該探索範囲内の物体を検出する検出手段と、
前記検出手段が検出した物体の位置姿勢を認識する認識手段と
を備え、
前記検出手段は、前記探索範囲内において複数の物体が検出された場合、前記設定手段により設定された順序に基づいて、位置姿勢を認識すべき物体を決定し、
前記認識手段は、前記検出手段により決定された物体の位置姿勢を認識する
ことを特徴とする情報処理装置。
【請求項２】
更に、前記複数の順序を表示する表示手段を備え、
前記設定手段は、前記表示手段により表示された前記複数の順序のうちユーザによって指定された順序を設定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記複数の順序は、前記撮像画像において前記探索範囲を第１方向に移動させた後に該第１方向と交差する第２方向に移動させる第１順序と、前記撮像画像において前記探索範囲を前記第２方向に移動させた後に前記第１方向に移動させる第２順序と、を含み、
前記設定手段は、前記第１順序又は前記第２順序を選択して設定することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記検出手段は、前記複数の物体のうち、第１方向における物体の位置に基づいて基準となる基準物体を特定し、該基準物体の位置に基づいて前記第１方向と交差する第２方向に延びる探索帯を設定し、該探索帯において前記第２方向における物体の位置に基づいて、位置姿勢を認識すべき物体を決定することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記検出手段は、前記複数の物体のうち、前記第１方向における一端に最も近い物体を基準物体として特定し、該特定した基準物体を含み且つ前記第２方向に沿う領域を前記探索帯として設定し、該探索帯におけるそれぞれの物体を、前記第２方向における一端から順に、位置姿勢を認識すべき物体として検出する
ことを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記検出手段は、前記複数の物体のうち、第１方向における物体の位置に基づいて基準となる基準物体を特定し、該基準物体の位置に基づいて前記第１方向と交差する第２方向に延びる探索帯を設定し、該探索帯において前記第１方向における物体の位置に基づいて、位置姿勢を認識すべき物体を決定することを特徴とする請求項１に記載の情報処理装置。
【請求項７】
前記検出手段は、前記複数の物体のうち、前記第１方向における一端に最も近い物体を基準物体として特定し、該特定した基準物体を含み且つ前記第２方向に沿う領域を前記探索帯として設定し、該探索帯におけるそれぞれの物体を、前記第１方向における一端に近い順に、位置姿勢を認識すべき物体として検出する
ことを特徴とする請求項６に記載の情報処理装置。
【請求項８】
情報処理装置が行う情報処理方法であって、
物体群を撮像した撮像画像におけるそれぞれの物体の位置姿勢を認識するための順序が互いに異なる複数の順序を取得し、該複数の順序のうち１つの順序を選択して設定する設定工程と、
前記撮像画像において前記物体を検出するための探索範囲を、前記設定工程で設定された順序に従って移動させながら、該探索範囲内の物体を検出する検出工程と、
前記検出工程で検出した物体の位置姿勢を認識する認識工程と
を備え、
前記検出工程では、前記探索範囲内において複数の物体が検出された場合、前記設定工程で設定された順序に基づいて、位置姿勢を認識すべき物体を決定し、
前記認識工程では、前記検出工程で決定された物体の位置姿勢を認識する
ことを特徴とする情報処理方法。
【請求項９】
コンピュータを、請求項１乃至７の何れか１項に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、対象物体の認識技術に関するものである。
【背景技術】
【０００２】
従来より、いわゆるパレットと呼ばれる部品格納容器に整列して配置された部品をピッキングするロボットシステムが存在している。パレットの中で部品が置かれている状態は完全に再現性があるわけではなく、若干位置ずれするのが普通であった。このような状況で部品を間違えることなくピッキングするためには、例えば、特許文献１のようなビジョンシステムが必要となる。
【０００３】
特許文献１に開示されているビジョンシステムでは、まずユーザがパレット内の部品配置を指定する。その際にユーザはパレット内にある全ての部品の位置を指定する必要がある。そして、ユーザが指定した位置に基づいて部品のサイズより少し大きな部品探索範囲を設定し、その中で部品を探索することで若干の位置ずれが生じた場合も対応できるようにしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特願平１−５０９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術においては、事前に部品配置とピッキング順序を登録する必要があり、ユーザの負担が大きいという課題が存在した。また、従来技術においては、ユーザが指定した位置から部品が大きくずれると部品認識が出来なくなるので、部品をピッキングしている途中に整列状態が崩れることがあると部品の検出に失敗してしまうという課題も存在した。
【０００６】
本発明はこのような問題に鑑みてなされたものであり、対象物体群におけるそれぞれの対象物体を探索するための方向を指定するだけで、高速かつユーザの意図通りの順序で部品を検出・認識するための技術を提供する。
【課題を解決するための手段】
【０００７】
本発明の一様態は、物体群を撮像した撮像画像におけるそれぞれの物体の位置姿勢を認識するための順序が互いに異なる複数の順序を取得し、該複数の順序のうち１つの順序を選択して設定する設定手段と、
前記撮像画像において前記物体を検出するための探索範囲を、前記設定手段により設定された順序に従って移動させながら、該探索範囲内の物体を検出する検出手段と、
前記検出手段が検出した物体の位置姿勢を認識する認識手段と
を備え、
前記検出手段は、前記探索範囲内において複数の物体が検出された場合、前記設定手段により設定された順序に基づいて、位置姿勢を認識すべき物体を決定し、
前記認識手段は、前記検出手段により決定された物体の位置姿勢を認識する
ことを特徴とする。
【発明の効果】
【０００８】
本発明の構成によれば、対象物体群におけるそれぞれの対象物体を探索するための方向を指定するだけで、高速かつユーザの意図通りの順序で部品を検出・認識することができる。また、本発明の構成によれば、たとえ対象物体の整列状態が崩れても、ユーザの意図通りの順序で部品を検出・認識することができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置が行う処理のフローチャート。
【図２】情報処理装置のハードウェア構成例を示すブロック図。
【図３】認識順序の幾つかの例を示す図。
【図４】撮像画像を示す図。
【図５】撮像画像を示す図。
【図６】撮像画像を示す図。
【図７】撮像画像を示す図。
【図８】情報処理装置が行う処理のフローチャート。
【図９】撮像画像を示す図。
【図１０】撮像画像を示す図。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００１１】
［第１の実施形態］
本実施形態では、対象物体群におけるそれぞれの対象物体の認識順序を取得し、該対象物体群を含む領域内に、該認識順序に応じた探索範囲を設定し、該設定した探索範囲内の対象物体を検出し、該検出した対象物体の位置姿勢を認識する情報処理装置の一例について説明する。
【００１２】
先ず、本実施形態に係る情報処理装置のハードウェア構成例について、図２のブロック図を用いて説明する。なお、図２の構成を有する装置には、例えば、一般のＰＣ（パーソナルコンピュータ）が適用可能であるが、以下に説明する各処理を実現可能な装置であれば、如何なる装置に適用しても構わない。例えば、図２に示す構成を、撮像装置等の装置に組み込んでも構わない。また、図２の構成を、ネットワークを介して互いにデータ通信が可能な複数の装置で構成しても構わない。
【００１３】
ＣＰＵ２０１は、ＲＯＭ２０２やＲＡＭ２０３に格納されているコンピュータプログラムやデータを用いて処理を実行することで、情報処理装置全体の動作制御を行うと共に、情報処理装置が行うものとして後述する各処理を実行若しくは制御する。
【００１４】
ＲＯＭ２０２には、ブートプログラムや設定データなどが格納されている。
【００１５】
ＲＡＭ２０３は、ＲＯＭ２０２や２次記憶装置２０４からロードされたコンピュータプログラムやデータ、Ｉ／Ｏデバイス２０９から入力されたデータ、等を格納するためのエリアを有する。更に、ＲＡＭ２０３は、ＣＰＵ２０１が各種の処理を実行する際に用いるワークエリアを有する。このように、ＲＡＭ２０３は、各種のエリアを適宜提供することができる。
【００１６】
２次記憶装置２０４は、ハードディスクドライブ装置などの大容量情報記憶装置である。２次記憶装置２０４には、ＯＳ（オペレーティングシステム）２１１や、情報処理装置が行うものとして後述する各処理をＣＰＵ２０１に実行させるためのコンピュータプログラムやデータが保存されている。このコンピュータプログラムには、モジュール２１３やアプリケーション２１２などが含まれる。また、このデータには、データ２１４が含まれている。また、２次記憶装置２０４には、以下の説明において既知の情報として取り扱う情報も保存されている。２次記憶装置２０４に保存されているコンピュータプログラムやデータは、ＣＰＵ２０１による制御に従って適宜ＲＡＭ２０３にロードされ、ＣＰＵ２０１による処理対象となる。
【００１７】
ディスプレイ２０６は、ＣＲＴや液晶画面等により構成されており、ＣＰＵ２０１による処理結果を画像や文字などでもって表示することができる装置である。なお、ディスプレイ２０６の代わりに、プロジェクタなど、ＣＰＵ２０１による処理結果を画像や文字として投影する装置を用いても構わない。
【００１８】
キーボード２０７やマウス２０８は、情報処理装置の操作者が操作することで各種の指示をＣＰＵ２０１に対して入力することができる、ユーザインターフェースとして機能する装置である。
【００１９】
Ｉ／Ｏデバイス２０９は、情報処理装置に対して様々な情報を入力する機器、様々な情報を情報処理装置から外部の装置に対して出力する機器、を含むものである。本実施形態では、Ｉ／Ｏデバイス２０９は、少なくとも、距離計測範囲内の各位置までの３次元距離を計測可能な機器を含んでいる。
【００２０】
例えば、Ｉ／Ｏデバイス２０９が３次元距離計測を行う機器（例えば、ＴＯＦセンサ装置等の３次元入力装置）である場合には、該機器の距離計測範囲内の各位置までの３次元距離を計測することができる。
【００２１】
また例えば、Ｉ／Ｏデバイス２０９が２台のステレオカメラである場合には、該２台のステレオカメラのそれぞれは対象物体を含む撮像画像を撮像し、ＣＰＵ２０１は該２台のステレオカメラのそれぞれによる撮像画像を用いて三角測量技術を適用することで、該撮像画像に写っている空間の各位置までの３次元距離を求めることができる。
【００２２】
また例えば、Ｉ／Ｏデバイス２０９が１台のパターン光投影装置（プロジェクタ）と、１台以上の撮像装置と、を有する場合、パターン光投影装置は、投影パターン（例えば、空間符号化画像や位相シフト法に用いられる空間的三角関数画像）を対象物体に投影し、撮像装置は該投影パターンが投影された対象物体の画像を撮像し、ＣＰＵ２０１は該画像を用いて周知の技術を適用することで、対象物体までの距離の計測を行うことができる。また、同様の目的のために、パターン光投影装置でランダムドットパターンを対象物体に投影し、該対象物体を２台の撮像装置で撮影する方法もある。また、同様の目的のために、レーザースリット光を用いた光切断法を用いても良い。
【００２３】
また、Ｉ／Ｏデバイス２０９は、情報処理装置が後述する各処理により求めた様々な情報（例えば対象物体の位置姿勢）を、該対象物体を把持するためのロボット等の外部の機器に対して送出する機器をも含む。
【００２４】
ＣＰＵ２０１、ＲＯＭ２０２、ＲＡＭ２０３、２次記憶装置２０４、ディスプレイ２０６、キーボード２０７、マウス２０８、Ｉ／Ｏデバイス２０９、は何れも、バス２０５に接続されている。
【００２５】
次に、山積みされた対象物体群等、対象物体の集合に含まれているそれぞれの対象物体の位置姿勢を認識して、その認識結果を出力するために情報処理装置が行う処理について、同処理のフローチャートを示す図１を用いて説明する。以下では、対象物体が部品である場合について説明するが、対象物体が他のものであったとしても、以下の説明は同様に適用することができる。また、以下では、対象物体に対する認識処理が、該対象物体の位置姿勢を認識する処理、である場合について説明するが、認識する対象が位置のみ、姿勢のみ、の何れであっても良いし、他の情報であってもよい。
【００２６】
また、図１のフローチャートに従った処理は、情報処理装置において部品の認識要求が発生するたびに行われる処理であって、情報処理装置は、部品の認識要求を受けるたびに部品の位置姿勢の認識処理を行って、該認識処理の結果としての部品の位置姿勢を出力する。なお、図１のフローチャートに従った処理は、ＣＰＵ２０１が対応するコンピュータプログラムやデータを２次記憶装置２０４からＲＡＭ２０３にロードし、該ロードしたコンピュータプログラムやデータを用いて処理を実行することでなされるものである。
【００２７】
先ず、図１のフローチャートに従った処理の開始前に、Ｉ／Ｏデバイス２０９の測定範囲内に含まれているそれぞれの部品に対する認識順序（認識方向）が指定されているものとする。情報処理装置は、Ｉ／Ｏデバイス２０９の測定範囲内に収まっているそれぞれの部品を、該指定された認識順序に従って順番に認識し、該認識した結果（部品の位置姿勢）を出力する。認識の結果の出力先が、部品を把持するロボット（厳密にはロボットを制御する制御部）である場合、該ロボットは、情報処理装置から出力された部品の位置姿勢に応じて該部品を把持するため、結果として該ロボットは、それぞれの部品を、上記の認識順序に従って順番に把持することになる。然るに、上記の認識順序は、「部品把持順序」でもある。
【００２８】
ここで、上記の認識順序の幾つかの例について、図３を用いて説明する。図３では、部品群を直上から見下ろした場合に該部品群のそれぞれに対する認識順序の幾つかの例を示している。
【００２９】
図３（ａ）、（ｂ）は、認識順序を２つの方向で指定した例を示しており、図３（ｃ）、（ｄ）は、認識順序を１つの方向で指定した例を示している。以下の説明において、図３（ａ）や図３（ｂ）に示したような認識順序を指定した場合、大局的な方向を第１優先方向と呼び、局所的な方向を第２優先方向と呼ぶ。図３（ａ）では、第１優先方向が上から下の方向で、第２優先方向が左から右の方向となる。図３（ｂ）では、第１優先方向が右から左の方向で、第２優先方向が上から下の方向となる。第１優先方向が上から下、下から上、右から左、左から右の４通りあり、そのそれぞれに対して第２優先方向が２通りあり得るので、全部で認識順序は８通りのバリエーションができる。
【００３０】
一方、第１優先方向が決定しており、第２優先方向、つまり局所的な方向が不確定な例を図３（ｃ）、（ｄ）に示す。図３（ｃ）の順序３０１と順序３０２は左右対称の形となっており、局所的に右から左へ把持する場合と、左から右へ把持する場合が交互に繰り返す構造となっている。図３（ｄ）に示した例は、第１優先方向のみを指定し、第２優先方向は方向すら存在しない例である。
【００３１】
このように、認識順序には様々なものが考えられ、図３に示した認識順序に限るものではない。例えば、図３に示すように縦方向、横方向だけでなく、斜め方向に認識順序を指定するようにしても構わない。
【００３２】
然るに、図１のフローチャートに従った処理の開始前に、このような幾つかの認識順序のうち１つを指定する。なお、様々な認識順序のうち１つを指定する方法には様々な方法が考えられ、特定の方法に限るものではない。例えば、幾つかの認識順序を表すアイコン（画像／文字）をディスプレイ２０６に表示し、ユーザがキーボード２０７やマウス２０８を用いて、ディスプレイ２０６に表示されているアイコンのうち１つを指定する方法を採用しても良い。また、部品群とロボットとの位置関係や部品の形状、配置状況など、様々な状況に応じてＣＰＵ２０１が幾つかの認識順序のうち１つを指定するようにしても構わない。また、ユーザがキーボード２０７やマウス２０８を操作して認識順序を示す軌跡（例えば、図３に示したような第１優先方向のみ、若しくは第１優先方向及び第２優先方向の組み合わせによる認識順序を示す方向）を作成し、該作成した認識順序を以降の処理で使用する認識順序として指定しても構わない。
【００３３】
上記の通り、認識の結果の出力先が、部品を把持するロボットである場合、該ロボットは、それぞれの部品を、指定した認識順序に従って順番に把持することになる。然るに、認識順序は、ロボットが部品を把持しやすい把持順序にすることが好ましい。例えば、ロボットが図３の上方向に設置されていたとする。すると第１優先方向が図３（ａ）、（ｃ）、（ｄ）に示した方向となるように認識順序を設定すれば、ロボットの手前部分から部品を把持することになるので、まだ把持していない部品と干渉・接触する危険性が低くなる。このようにロボットと部品との位置関係や部品の形状・置き方によって、把持しやすくなるように認識順序を設定するのがよい。
【００３４】
以下では、具体的な説明を行うために、図３（ａ）に示した認識順序が指定されたものとして説明するが、他の認識順序が指定された場合であっても、当業者であれば以下の説明を適宜変形させれば、同様の目的を達成することができるであろう。
【００３５】
以上のように、図１のフローチャートに従った処理の開始前に認識順序を指定した後、Ｉ／Ｏデバイス２０９は、該Ｉ／Ｏデバイス２０９の測定範囲内を撮像する。本実施形態では、Ｉ／Ｏデバイス２０９は、部品群を収容した部品格納容器やトレイを含む画像を撮像し、ＣＰＵ２０１は、Ｉ／Ｏデバイス２０９による撮像画像を用いて、該撮像画像内に写っているそれぞれの部品の位置姿勢を認識するものとする。
【００３６】
Ｉ／Ｏデバイス２０９による撮像画像の一例を図４に示す。図４において４１６は撮像画像であり、撮像画像４１６は、部品が３行×５列＝１５個（部品４０１，４０２，…，４１５）並んでいる状態を撮像した画像である。なお、図４ではそれぞれの位置に部品が１つしか配置されていないが、それぞれの位置に複数個の部品が重ね置きされていてもよい。撮像画像は上記の通り、部品群を収容した部品格納容器やトレイを含む画像であり、通常は、部品格納容器やトレイの内部を撮像した画像である。なお、部品群は部品格納容器やトレイの内部に配置することに限るものではなく、単に机の上等、天板の上に配置するようにしても構わない。このような場合、撮像画像は、天板上の部品群を撮像した画像となる。
【００３７】
以下では、Ｉ／Ｏデバイス２０９によって図４に示した撮像画像４１６が撮像されたものとし、図４〜７に沿って、図１のフローチャートに従った処理を具体的に説明する。なお、図４〜７において点線で示した部品は既にロボットによってピッキングされた部品を示しており、図には描画されているが、実際には存在していないことを意味する。
【００３８】
ステップＳ１０２では、ＣＰＵ２０１は、撮像画像４１６上に、部品を探索するための探索領域（部分領域）４１７が設定されているか否かを判断する。認識順序として図３（ａ）に示した認識順序が指定された場合、撮像画像４１６上に初めて探索領域４１７を設定する場合は、図４（ａ）に示す如く、撮像画像４１６において第１優先方向及び第２優先方向の開始点の位置、即ち、撮像画像４１６の左上隅の位置に探索領域４１７の左上隅を合わせるようにして該探索領域４１７を設定する。図４（ａ）では、探索領域４１７のサイズは横が部品約３個分、縦が部品約２個分の大きさとなっているが、基本的に探索領域４１７のサイズは、少なくとも１つの部品が入るようなサイズであれば如何なるサイズであっても構わない。但し、第１優先方向のサイズよりも第２優先方向のサイズが大きくなるような探索領域を設定すると、ユーザが指定した認識順序で安定して部品検出が出来る可能性が高くなる。
【００３９】
ステップＳ１０２における判断の結果、撮像画像４１６上にすでに探索領域４１７が設定されている場合には、処理はステップＳ１０４に進み、まだ設定されていない場合には、処理はステップＳ１０３に進む。
【００４０】
ステップＳ１０３では、ＣＰＵ２０１は、撮像画像４１６上に探索領域４１７を設定する。
【００４１】
ステップＳ１０４では、ＣＰＵ２０１は、探索領域４１７から部品を検出する。図４（ａ）のように探索領域４１７を設定した場合、該探索領域４１７内には部品４０１〜４０３、４０６〜４０８が含まれているので、部品４０１〜４０３、４０６〜４０８が検出されることになる。
【００４２】
ステップＳ１０５では、ＣＰＵ２０１は、ステップＳ１０４における検出処理で１以上の部品が検出されたか否かを判断する。この判断の結果、１以上の部品が検出された場合には、処理はステップＳ１０６に進み、検出されていない場合は、ステップＳ１１２に進む。第１回目のステップＳ１０４では、探索領域４１７からは部品４０１〜４０３、４０６〜４０８が検出されるので、このような場合は、処理はステップＳ１０６に進むことになる。
【００４３】
ステップＳ１０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。部品存在ラインとは、認識対象となる部品が並んでいるであろうとおぼしき帯状の領域である。この判断の結果、部品存在ラインが設定されている場合には、処理はステップＳ１０９に進み、設定されていない場合は、処理はステップＳ１０７に進む。
【００４４】
ステップＳ１０７では、ＣＰＵ２０１は、第１優先方向にｙ軸をとった場合に、ステップＳ１０４における検出処理で検出した部品のうちｙ座標値が最も小さい部品（検出されたそれぞれの部品の検出ｙ座標のうち最も小さい検出ｙ座標の部品）を基準部品として特定する。図４（ａ）の場合、探索領域４１７から部品４０１〜４０３、４０６〜４０８が検出され、そのうちｙ座標値が最も小さい部品は部品４０２となるため、部品４０２が基準部品として特定されることになる。
【００４５】
ステップＳ１０８では、ＣＰＵ２０１は、第１優先方向における基準部品の上端と、第１優先方向における基準部品の下端と、を検出し、該検出した上端を通り且つ第２優先方向と平行な線分と、該検出した下端を通り且つ第２優先方向と平行な線分と、に挟まれた領域を部品存在ラインとして設定する。図４（ａ）の場合、検出した上端を通り且つ第２優先方向と平行な線分は線分４１８に相当し、検出した下端を通り且つ第２優先方向と平行な線分は線分４１９に相当し、線分４１８と線分４１９とに挟まれた領域が部品存在ラインとして設定される。
【００４６】
なお、部品存在ラインの設定方法はこのような設定方法に限るものではなく、様々な設定方法が考え得る。例えば、基準部品の重心位置を中心として部品サイズの定数倍の幅（第１優先方向の長さ）を有する帯状の領域を部品存在ラインとして設定しても良い。
【００４７】
ステップＳ１０９では、ＣＰＵ２０１は、部品存在ライン内に、ステップＳ１０４で検出した部品の何れかが含まれているか否かを判断する。この判断の結果、部品存在ライン内に、ステップＳ１０４で検出した部品の何れかが含まれている場合には、処理はステップＳ１１０に進み、含まれていない場合には、処理はステップＳ１１２に進む。図４（ａ）の場合、部品存在ライン内には、ステップＳ１０４で検出した部品４０１〜４０３が含まれている。
【００４８】
ステップＳ１１０では、ＣＰＵ２０１は、ステップＳ１０４で検出した部品のうち部品存在ライン内に含まれている部品を対象とし、該対象となる部品のうちｘ座標値が最も小さい部品を、これから位置姿勢を認識する対象の部品として決定する。図４（ａ）の場合、部品存在ライン内に含まれている部品４０１〜４０３のうちｘ座標値が最も小さい部品は部品４０１となるため、部品４０１を、これから位置姿勢を認識する対象の部品として決定する。
【００４９】
ステップＳ１１１では、ＣＰＵ２０１は、ステップＳ１１０で決定した部品の位置姿勢を認識する。撮像画像中の部品の位置姿勢を認識する方法については、撮像画像が２台のステレオカメラによる撮像画像である場合や、撮像画像が投影パターンが投影された部品の撮像画像である場合など、それぞれの場合に応じて異なり、それぞれの場合における位置姿勢認識方法は周知技術であるため、これに係る詳細な説明は省略する。
【００５０】
ＣＰＵ２０１は、ステップＳ１１１で認識した位置姿勢を出力するのであるが、以下では出力先は部品を把持するロボットであるものとする。然るにロボットは、ＣＰＵ２０１により出力された位置姿勢を受けると、該位置姿勢を有する部品を把持することになる。
【００５１】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。なお、ステップＳ１１１からステップＳ１０２へは即座に移行しても構わないし、ロボットが部品を把持して作業を完了するたびにＣＰＵ２０１が部品の認識要求を発行し、該発行に応じてステップＳ１０２に移行しても構わない。
【００５２】
図４（ａ）の場合、部品４０１の位置姿勢が認識されてロボットに出力されるので、ロボットは部品４０１を把持して作業を行う。そして再度、ステップＳ１０２以降の処理を行うと、２回目のステップＳ１０２では、探索領域４１７はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域４１７から部品を検出する。図４（ａ）の場合、探索領域４１７内には部品４０２，４０３，４０６〜４０８が含まれている（部品４０１はロボットによって探索領域４１７から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０２，４０３，４０６〜４０８が検出されることになる。
【００５３】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０，Ｓ１１１と進み、その結果、部品４０２の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
【００５４】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。３回目のステップＳ１０２では、探索領域４１７はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域４１７から部品を検出する。図４（ａ）の場合、探索領域４１７内には部品４０３、４０６〜４０８が含まれている（部品４０１，４０２はロボットによって探索領域４１７から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０３，４０６〜４０８が検出されることになる。
【００５５】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０，Ｓ１１１と進み、その結果、部品４０３の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
【００５６】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。４回目のステップＳ１０２では、探索領域４１７はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域４１７から部品を検出する。図４（ａ）の場合、探索領域４１７内には部品４０６〜４０８が含まれている（部品４０１〜４０３はロボットによって探索領域４１７から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０６〜４０８が検出されることになる。
【００５７】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９と進む。ステップＳ１０９では、部品存在ライン内に、ステップＳ１０４で検出した部品、すなわち、部品４０６〜４０８の何れかが含まれているか否かを判断するのであるが、部品４０６〜４０８の何れも部品存在ライン内に含まれていないので、処理はステップＳ１１２に進むことになる。
【００５８】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域４１７の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図４（ａ）の場合は設定可能と判断されるため、処理はステップＳ１１３に進む。
【００５９】
ステップＳ１１３では、ＣＰＵ２０１は、図４（ｂ）に示す如く、図４（ａ）の探索領域４１７を第２優先方向に移動させた探索領域４２０を設定する。なお、探索領域４２０において、撮像画像４１６からはみ出した部分４２１を取り除いた残りの部分が実際には探索領域として使用されることになる。図４（ｂ）では、最近位置姿勢を認識した部品４０３に隣接するように、探索領域４１７の右隣に探索領域４２０を設定している。
【００６０】
なお、ステップＳ１１３における新たな探索領域の設定方法には、これ以外の方法も考えられる。例えば、最近位置姿勢を認識した部品の外接矩形と、該部品と第２優先方向に隣り合う部品の外接矩形と、が互いに重なりあうような部品形状・配置の場合、最近位置姿勢を認識した部品の左端（該部品において第２優先方向における一端）が左辺となるような探索領域を設定することが有効なこともある。
【００６１】
ステップＳ１１３の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、ＣＰＵ２０１は、探索領域４２０に含まれている部品４０４，４０５，４０９，４１０を検出する。そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と移行し、ステップＳ１１０では、ＣＰＵ２０１は、部品４０４，４０５のうちｘ座標値が最も小さい部品４０４を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０４の位置姿勢を認識して出力する。
【００６２】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域４２０はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域４２０から部品を検出する。図４（ａ）の場合、探索領域４２０内には部品４０５，４０９，４１０が含まれている（部品４０４はロボットによって探索領域４２０から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０５，４０９，４１０が検出されることになる。
【００６３】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と進み、ステップＳ１１０では、部品４０５を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０５の位置姿勢を認識して出力する。
【００６４】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域４２０はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域４２０から部品を検出する。図４（ｂ）の場合、探索領域４２０内には部品４０９，４１０が含まれている（部品４０４，４０５はロボットによって探索領域４２０から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０９，４１０が検出されることになる。
【００６５】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９と進む。ステップＳ１０９では、部品存在ライン内に、ステップＳ１０４で検出した部品、すなわち、部品４０９，４１０の何れかが含まれているか否かを判断するのであるが、部品４０９，４１０の何れも部品存在ライン内に含まれていないので、処理はステップＳ１１２に進むことになる。
【００６６】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域４２０の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図４（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ１１４に進む。
【００６７】
ステップＳ１１４では、ＣＰＵ２０１は、現在設定している探索領域４２０よりも第１優先方向に新たな探索領域が設定可能であるか否か（撮像画像４１６において探索領域４２０よりも第１優先方向にまだ探索領域を設定していない領域が残っているか否か）を判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１５に進み、設定不可能と判断した場合には、処理はステップＳ１１６に進む。図４（ｂ）の場合は設定可能と判断されるため、処理はステップＳ１１５に進む。
【００６８】
ステップＳ１１５では、ＣＰＵ２０１は、図５（ａ）に示す如く、上端が現在設定している部品存在ラインの下端（線分４１９）と一致し且つ左辺が撮像画像４１６の左辺と一致するような新たな探索領域５０１を設定する。更にステップＳ１１５では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【００６９】
なお、新たな探索領域５０１の設定方法は上記の設定方法に限るものではない。例えば、部品間でそれぞれの外接矩形が互いに重なりあうような部品形状・配置の場合、上端が現在設定している部品存在ラインの上端（線分４１８）と一致し且つ左辺が撮像画像４１６の左辺と一致するような新たな探索領域を設定することが有効なこともある。なお、上記の通り、ここでは、認識順序として図３（ａ）に示した認識順序が指定されたものとしているが、認識順序として図３（ｃ）の順序３０１が指定された場合、上端が現在設定している部品存在ラインの上端若しくは下端と一致し且つ右辺が撮像画像４１６の右辺と一致するような新たな探索領域を設定する。
【００７０】
ステップＳ１１５の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、探索領域５０１から部品を検出する。図５（ａ）の場合、探索領域５０１内には部品４０６〜４０８，４１１〜４１３が含まれているので、結果としてステップＳ１０４では、部品４０６〜４０８，４１１〜４１３が検出されることになる。
【００７１】
そして処理はステップＳ１０５，Ｓ１０６と進む。ステップＳ１０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。先のステップＳ１１５で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップＳ１０７に進む。
【００７２】
ステップＳ１０７では、ＣＰＵ２０１は、ステップＳ１０４における検出処理で検出した部品４０６〜４０８，４１１〜４１３のうちｙ座標値が最も小さい部品４０８を基準部品として特定する。
【００７３】
ステップＳ１０８では、ＣＰＵ２０１は、第１優先方向における部品４０８の上端と、第１優先方向における部品４０８の下端と、を検出し、該検出した上端を通り且つ第２優先方向と平行な線分（線分５０２）と、該検出した下端を通り且つ第２優先方向と平行な線分（線分５０３）と、に挟まれた領域を部品存在ラインとして設定する。
【００７４】
そして処理はステップＳ１０９，Ｓ１１０と進み、ステップＳ１１０では、ＣＰＵ２０１は、ステップＳ１０４で検出した部品４０６〜４０８，４１１〜４１３のうち部品存在ラインに含まれている部品４０６〜４０８のうち、ｘ座標値が最も小さい部品４０６を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０６の位置姿勢を認識して出力する。
【００７５】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域５０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域５０１から部品を検出する。図５（ａ）の場合、探索領域５０１内には部品４０７〜４０８，４１１〜４１３が含まれている（部品４０６はロボットによって探索領域５０１から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０７〜４０８，４１１〜４１３が検出されることになる。
【００７６】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と進み、ステップＳ１１０では、部品４０７を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０７の位置姿勢を認識して出力する。
【００７７】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域５０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域５０１から部品を検出する。図５（ａ）の場合、探索領域５０１内には部品４０８，４１１〜４１３が含まれている（部品４０６，４０７はロボットによって探索領域５０１から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４０８，４１１〜４１３が検出されることになる。
【００７８】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と進み、ステップＳ１１０では、部品４０８を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０８の位置姿勢を認識して出力する。
【００７９】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域５０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域５０１から部品を検出する。図５（ａ）の場合、探索領域５０１内には部品４１１〜４１３が含まれている（部品４０６〜４０８はロボットによって探索領域５０１から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１１〜４１３が検出されることになる。
【００８０】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９と進む。ステップＳ１０９では、部品存在ライン内に、ステップＳ１０４で検出した部品、すなわち、部品４１１〜４１３の何れかが含まれているか否かを判断するのであるが、部品４１１〜４１３の何れも部品存在ライン内に含まれていないので、処理はステップＳ１１２に進むことになる。
【００８１】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域５０１の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図５（ａ）の場合は設定可能と判断されるため、処理はステップＳ１１３に進む。
【００８２】
ステップＳ１１３では、ＣＰＵ２０１は、図５（ｂ）に示す如く、図５（ａ）の探索領域５０１を第２優先方向に移動させた探索領域５０４を設定する。なお、探索領域５０４において、撮像画像４１６からはみ出した部分５０５を取り除いた残りの部分が実際には探索領域として使用されることになる。図５（ｂ）では、最近位置姿勢を認識した部品４０８に隣接するように、探索領域５０１の右隣に探索領域５０４を設定している。
【００８３】
ステップＳ１１３の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、ＣＰＵ２０１は、探索領域５０４に含まれている部品４０９，４１０，４１４，４１５を検出する。そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と移行し、ステップＳ１１０では、ＣＰＵ２０１は、部品４０９，４１０のうちｘ座標値が最も小さい部品４０９を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４０９の位置姿勢を認識して出力する。
【００８４】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域５０４はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域５０４から部品を検出する。図５（ｂ）の場合、探索領域５０４内には部品４１０，４１４，４１５が含まれている（部品４０９はロボットによって探索領域５０４から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１０，４１４，４１５が検出されることになる。
【００８５】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と進み、ステップＳ１１０では、部品４１０を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４１０の位置姿勢を認識して出力する。
【００８６】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域５０４はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域５０４から部品を検出する。図５（ｂ）の場合、探索領域５０４内には部品４１４，４１５が含まれている（部品４０９，４１０はロボットによって探索領域５０４から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１４，４１５が検出されることになる。
【００８７】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９と進む。ステップＳ１０９では、部品存在ライン内に、ステップＳ１０４で検出した部品、すなわち、部品４１４，４１５の何れかが含まれているか否かを判断するのであるが、部品４１４，４１５の何れも部品存在ライン内に含まれていないので、処理はステップＳ１１２に進むことになる。
【００８８】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域５０４の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図５（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ１１４に進む。
【００８９】
ステップＳ１１４では、ＣＰＵ２０１は、現在設定している探索領域５０４よりも第１優先方向に新たな探索領域が設定可能であるか否か（撮像画像４１６において探索領域５０４よりも第１優先方向にまだ探索領域を設定していない領域が残っているか否か）を判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１５に進み、設定不可能と判断した場合には、処理はステップＳ１１６に進む。図５（ｂ）の場合は設定可能と判断されるため、処理はステップＳ１１５に進む。
【００９０】
ステップＳ１１５では、ＣＰＵ２０１は、図６（ａ）に示す如く、上端が現在設定している部品存在ラインの下端（線分５０３）と一致し且つ左辺が撮像画像４１６の左辺と一致するような新たな探索領域６０１を設定する。なお、探索領域６０１において、撮像画像４１６からはみ出した部分６０２を取り除いた残りの部分が実際には探索領域として使用されることになる。更にステップＳ１１５では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【００９１】
なお、新たな探索領域６０１の設定方法は上記の設定方法に限るものではない。例えば、部品間でそれぞれの外接矩形が互いに重なりあうような部品形状・配置の場合、上端が現在設定している部品存在ラインの上端（線分５０２）と一致し且つ左辺が撮像画像４１６の左辺と一致するような新たな探索領域を設定することが有効なこともある。
【００９２】
ステップＳ１１５の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、探索領域６０１から部品を検出する。図６（ａ）の場合、探索領域６０１内には部品４１１〜４１３が含まれているので、結果としてステップＳ１０４では、部品４１１〜４１３が検出されることになる。
【００９３】
そして処理はステップＳ１０５，Ｓ１０６と進む。ステップＳ１０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。先のステップＳ１１５で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップＳ１０７に進む。
【００９４】
ステップＳ１０７では、ＣＰＵ２０１は、ステップＳ１０４における検出処理で検出した部品４１１〜４１３のうちｙ座標値が最も小さい部品４１１を基準部品として特定する。
【００９５】
ステップＳ１０８では、ＣＰＵ２０１は、第１優先方向における部品４１１の上端と、第１優先方向における部品４１１の下端と、を検出し、該検出した上端を通り且つ第２優先方向と平行な線分６０３と、該検出した下端を通り且つ第２優先方向と平行な線分６０４と、に挟まれた領域を部品存在ラインとして設定する。
【００９６】
そして処理はステップＳ１０９，Ｓ１１０と進み、ステップＳ１１０では、ＣＰＵ２０１は、ステップＳ１０４で検出した部品４１１〜４１３のうち部品存在ラインに含まれている部品４１１〜４１３のうち、ｘ座標値が最も小さい部品４１１を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４１１の位置姿勢を認識して出力する。
【００９７】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域６０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域６０１から部品を検出する。図６（ａ）の場合、探索領域６０１内には部品４１２〜４１３が含まれている（部品４１１はロボットによって探索領域６０１から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１２〜４１３が検出されることになる。
【００９８】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０，Ｓ１１１と進み、その結果、部品４１２の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
【００９９】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域６０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域６０１から部品を検出する。図６（ａ）の場合、探索領域６０１内には部品４１３が含まれている（部品４１１，４１２はロボットによって探索領域６０１から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１３が検出されることになる。
【０１００】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０，Ｓ１１１と進み、その結果、部品４１３の位置姿勢が認識され、該位置姿勢がロボットに対して出力されることになる。
【０１０１】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域６０１はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域６０１から部品を検出する。図６（ａ）の場合、探索領域６０１内には部品は存在しない（部品４１１〜４１３はロボットによって探索領域６０１から取り除かれている）ので、結果としてステップＳ１０４では、部品が検出されないことになる。このような場合、処理はステップＳ１１２に進む。
【０１０２】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域６０１の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図６（ａ）の場合は設定可能と判断されるため、処理はステップＳ１１３に進む。
【０１０３】
ステップＳ１１３では、ＣＰＵ２０１は、図６（ｂ）に示す如く、図６（ａ）の探索領域６０１を第２優先方向に移動させた探索領域６０５を設定する。なお、探索領域６０５において、撮像画像４１６からはみ出した部分６０６を取り除いた残りの部分が実際には探索領域として使用されることになる。図６（ｂ）では、最近位置姿勢を認識した部品４１３に隣接するように、探索領域６０１の右隣に探索領域６０５を設定している。
【０１０４】
ステップＳ１１３の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、ＣＰＵ２０１は、探索領域６０５に含まれている部品４１４，４１５を検出する。そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と移行し、ステップＳ１１０では、ＣＰＵ２０１は、部品４１４，４１５のうちｘ座標値が最も小さい部品４１４を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４１４の位置姿勢を認識して出力する。
【０１０５】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域６０５はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域６０５から部品を検出する。図６（ｂ）の場合、探索領域６０５内には部品４１５が含まれている（部品４１４はロボットによって探索領域６０５から取り除かれている）のであるから、結果としてステップＳ１０４では、部品４１５が検出されることになる。
【０１０６】
そして処理はステップＳ１０５，Ｓ１０６，Ｓ１０９，Ｓ１１０と進み、ステップＳ１１０では、部品４１５を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ１１１では、ＣＰＵ２０１は、部品４１５の位置姿勢を認識して出力する。
【０１０７】
ステップＳ１１１の処理が完了すると、処理はステップＳ１０２に戻る。ステップＳ１０２では、探索領域６０５はすでに設定されていると判断されるので、処理はステップＳ１０４に進み、該探索領域６０５から部品を検出する。図６（ｂ）の場合、探索領域６０５内には部品は存在しない（部品４１４，４１５はロボットによって探索領域６０５から取り除かれている）ので、結果としてステップＳ１０４では、部品が検出されないことになる。このような場合、処理はステップＳ１１２に進む。
【０１０８】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域６０５の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図６（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ１１４に進む。
【０１０９】
ステップＳ１１４では、ＣＰＵ２０１は、現在設定している探索領域６０５よりも第１優先方向に新たな探索領域が設定可能であるか否か（撮像画像４１６において探索領域６０５よりも第１優先方向にまだ探索領域を設定していない領域が残っているか否か）を判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１５に進み、設定不可能と判断した場合には、処理はステップＳ１１６に進む。図６（ｂ）の場合は設定可能と判断されるため、処理はステップＳ１１５に進む。
【０１１０】
ステップＳ１１５では、ＣＰＵ２０１は、図７（ａ）に示す如く、上端が現在設定している部品存在ラインの下端（線分６０４）と一致し且つ左辺が撮像画像４１６の左辺と一致するような新たな探索領域７０１を設定する。なお、探索領域７０１において、撮像画像４１６からはみ出した部分７０２を取り除いた残りの部分が実際には探索領域として使用されることになる。更にステップＳ１１５では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【０１１１】
ステップＳ１１５の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、探索領域７０１から部品を検出する。図７（ａ）の場合、探索領域７０１内には１つも部品が含まれていないので、結果としてステップＳ１０４では、部品は１つも検出されなかったことになる。このような場合、処理はステップＳ１０５を介してステップＳ１１２に進むことになる。
【０１１２】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域７０１の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図７（ａ）の場合は設定可能と判断されるため、処理はステップＳ１１３に進む。
【０１１３】
ステップＳ１１３では、ＣＰＵ２０１は、図７（ｂ）に示す如く、図７（ａ）の探索領域７０１を第２優先方向に移動させた探索領域７０３を設定する。なお、探索領域７０３において、撮像画像４１６からはみ出した部分７０４を取り除いた残りの部分が実際には探索領域として使用されることになる。図７（ｂ）では、最近位置姿勢を認識した部品が存在しないため、探索領域７０１の位置から規定量だけ第２優先方向に移動させた位置に探索領域７０３を設定している。
【０１１４】
ステップＳ１１３の後はステップＳ１０４に処理が移行する。ステップＳ１０４では、探索領域７０３から部品を検出する。図７（ｂ）の場合、探索領域７０３内には１つも部品が含まれていないので、結果としてステップＳ１０４では、部品は１つも検出されなかったことになる。このような場合、処理はステップＳ１０５を介してステップＳ１１２に進むことになる。
【０１１５】
ステップＳ１１２では、ＣＰＵ２０１は、現在設定している探索領域７０３の位置から第２優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１３に進み、設定不可能と判断した場合には、処理はステップＳ１１４に進む。図７（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ１１４に進む。
【０１１６】
ステップＳ１１４では、ＣＰＵ２０１は、現在設定している探索領域７０３よりも第１優先方向に新たな探索領域が設定可能であるか否か（撮像画像４１６において探索領域７０３よりも第１優先方向にまだ探索領域を設定していない領域が残っているか否か）を判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ１１５に進み、設定不可能と判断した場合には、処理はステップＳ１１６に進む。図７（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ１１６に進む。
【０１１７】
ステップＳ１１６では、ＣＰＵ２０１は、撮像画像４１６からこれ以上位置姿勢を認識する部品がないと判断して処理を終了させる。なお、ステップＳ１１６では、これ以上の処理を行っても良く、例えば、ＣＰＵ２０１は、撮像画像４１６中の全ての部品の位置姿勢の認識が完了した旨をディスプレイ２０６に表示しても構わないし、認識が完了した位置姿勢をディスプレイ２０６に一覧表示しても構わない。
【０１１８】
このように、本実施形態によれば、部品配置が少々崩れたとしても、ユーザが指定した順序に基づき部品を検出・認識することができる。
【０１１９】
なお、本実施形態では、撮像画像中に写っている部品の位置姿勢を認識する場合について説明したが、これは一例であり、位置姿勢の測定範囲内に位置する対象物体の位置姿勢を認識することができるのであれば、撮像画像を用いた形態に限るものではない。このような場合、図４の撮像画像４１６は位置姿勢の測定可能な範囲を示した図として解釈し、上記の様々な領域（探索領域や部品存在ライン）は、該範囲内で仮想的に（計算上）設定することになる。もちろん、位置姿勢の測定可能な範囲をユーザが指定しても構わない。
【０１２０】
［第２の実施形態］
以下では、第１の実施形態との差分について重点的に説明し、以下で特に触れない限りは、第１の実施形態と同様であるものとする。本実施形態では、図１のフローチャートに従った処理の代わりに、図８のフローチャートに従った処理を実行する。また、本実施形態では、認識順序として図３（ｄ）に示した認識順序が指定された場合について説明する。すなわち、図３（ｄ）に示したような、第１優先方向のみが指定された場合について説明する。
【０１２１】
以下では、Ｉ／Ｏデバイス２０９によって図９に示した撮像画像４１６が撮像されたものとし、図９〜１０に沿って、図８のフローチャートに従った処理を具体的に説明する。
【０１２２】
ステップＳ８０２では、ＣＰＵ２０１は、撮像画像４１６上に探索領域９０１が設定されているか否かを判断する。探索領域９０１の横サイズは撮像画像４１６と同じであり、縦サイズは部品約２個分の大きさとなっているが、基本的に探索領域９０１のサイズは、少なくとも１つの部品が入るようなサイズであれば如何なるサイズであっても構わない。撮像画像４１６上に初めて探索領域９０１を設定する場合は、図９（ａ）に示す如く、撮像画像４１６の左上隅の位置に探索領域９０１の左上隅を合わせるようにして該探索領域９０１を設定する。
【０１２３】
ステップＳ８０２における判断の結果、撮像画像４１６上にすでに探索領域９０１が設定されている場合には、処理はステップＳ８０４に進み、まだ設定されていない場合には、処理はステップＳ８０３に進む。
【０１２４】
ステップＳ８０３では、ＣＰＵ２０１は、撮像画像４１６上に探索領域９０１を設定する。
【０１２５】
ステップＳ８０４では、ＣＰＵ２０１は、探索領域９０１中の部品を検出する。図９（ａ）のように探索領域９０１を設定した場合、該探索領域９０１内には部品４０１〜４１０が含まれているため、ステップＳ８０４では、部品４０１〜４１０が検出されることになる。
【０１２６】
ステップＳ８０５では、ＣＰＵ２０１は、ステップＳ８０４における検出処理で１以上の部品が検出されたか否かを判断する。この判断の結果、１以上の部品が検出された場合には、処理はステップＳ８０６に進み、検出されていない場合は、ステップＳ８１２に進む。第１回目のステップＳ８０４では、探索領域９０１からは部品４０１〜４１０が検出されるので、このような場合は、処理はステップＳ８０６に進むことになる。
【０１２７】
ステップＳ８０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。この判断の結果、部品存在ラインが設定されている場合には、処理はステップＳ８０９に進み、設定されていない場合は、処理はステップＳ８０７に進む。
【０１２８】
ステップＳ８０７では、ＣＰＵ２０１は、第１優先方向にｙ軸をとった場合に、ステップＳ８０４における検出処理で検出した部品のうちｙ座標値が最も小さい部品（検出されたそれぞれの部品の検出ｙ座標のうち最も小さい検出ｙ座標の部品）を基準部品として特定する。図９（ａ）の場合、探索領域９０１から部品４０１〜４１０が検出され、そのうちｙ座標値が最も小さい部品は部品４０２となるため、部品４０２が基準部品として特定されることになる。
【０１２９】
ステップＳ８０８では、ＣＰＵ２０１は、第１優先方向における部品４０２の上端と、第１優先方向における部品４０２の下端と、を検出し、該検出した上端を通り且つ第１優先方向と直交する方向と平行な線分９０２と、該検出した下端を通り且つ第１優先方向と直交する方向と平行な線分９０３と、に挟まれた領域を部品存在ラインとして設定する。
【０１３０】
ステップＳ８０９では、ＣＰＵ２０１は、部品存在ライン内に、ステップＳ８０４で検出した部品の何れかが含まれているか否かを判断する。この判断の結果、部品存在ライン内に、ステップＳ８０４で検出した部品の何れかが含まれている場合には、処理はステップＳ８１０に進み、含まれていない場合には、処理はステップＳ８１２に進む。図９（ａ）の場合、部品存在ライン内には、ステップＳ８０４で検出した部品４０１〜４０５が含まれている。
【０１３１】
ステップＳ８１０では、ＣＰＵ２０１は、ステップＳ８０４で検出した部品のうち部品存在ライン内に含まれている部品を対象とし、該対象となる部品のうちｙ座標値が最も小さい部品を、これから位置姿勢を認識する対象の部品として決定する。図９（ａ）の場合、部品存在ライン内に含まれている部品４０１〜４０５のうちｙ座標値が最も小さい部品は部品４０２となるため、部品４０２を、これから位置姿勢を認識する対象の部品として決定する。なお、ステップＳ８０４で検出した部品のうち部品存在ライン内に含まれている部品のうち、これから位置姿勢を認識する対象の部品として決定する、ための方法には様々な方法が考えられ、上記の方法に限るものではない。ステップＳ８１１では、ＣＰＵ２０１は、ステップＳ８１０で決定した部品４０２の位置姿勢を認識する。以降、同様にして、ステップＳ８０２、Ｓ８０４、Ｓ８０５、Ｓ８０６、Ｓ８０９、Ｓ８１０、Ｓ８１１の順に処理を繰り返し実行することで、部品４０４，４０３，４０５，４０１の順に位置姿勢が認識される。
【０１３２】
部品４０１の位置姿勢の認識を行うステップＳ８１１の処理が完了すると、処理はステップＳ８０２に戻る。ステップＳ８０２では、探索領域９０１はすでに設定されていると判断されるので、処理はステップＳ８０４に進み、該探索領域９０１から部品を検出する。図９（ａ）の場合、探索領域９０１内には部品４０６〜４１０が含まれている（部品４０１〜４０５はロボットによって探索領域９０１から取り除かれている）のであるから、結果としてステップＳ８０４では、部品４０６〜４１０が検出されることになる。
【０１３３】
そして処理はステップＳ８０５，Ｓ８０６，Ｓ８０９と進む。ステップＳ８０９では、部品存在ライン内に、ステップＳ８０４で検出した部品、すなわち、部品４０６〜４１０の何れかが含まれているか否かを判断するのであるが、部品４０６〜４１０の何れも部品存在ライン内に含まれていないので、処理はステップＳ８１２に進むことになる。
【０１３４】
ステップＳ８１２では、ＣＰＵ２０１は、現在設定している探索領域９０１の位置から第１優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ８１３に進み、設定不可能と判断した場合には、処理はステップＳ８１４に進む。図９（ａ）の場合は設定可能と判断されるため、処理はステップＳ８１３に進む。
【０１３５】
ステップＳ８１３では、ＣＰＵ２０１は、図９（ｂ）に示す如く、図９（ａ）の探索領域９０１を第１優先方向に移動させた探索領域９０４を設定する。図９（ｂ）では、上端が線分９０３と一致するように探索領域９０４を設定している。更にステップＳ８１３では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【０１３６】
ステップＳ８１３の後はステップＳ８０４に処理が移行する。ステップＳ８０４では、ＣＰＵ２０１は、探索領域９０４に含まれている部品４０６〜４１５を検出する。そして処理はステップＳ８０５，Ｓ８０６と移行する。
【０１３７】
ステップＳ８０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。先のステップＳ８１３で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップＳ８０７に進む。
【０１３８】
ステップＳ８０７では、ＣＰＵ２０１は、ステップＳ８０４における検出処理で検出した部品４０６〜４１５のうちｙ座標値が最も小さい部品４０８を基準部品として特定する。
【０１３９】
ステップＳ８０８では、ＣＰＵ２０１は、第１優先方向における部品４０８の上端と、第１優先方向における部品４０８の下端と、を検出し、該検出した上端を通り且つ第１優先方向と直交する方向と平行な線分９０５と、該検出した下端を通り且つ第１優先方向と直交する方向と平行な線分９０６と、に挟まれた領域を部品存在ラインとして設定する。
【０１４０】
そして処理はステップＳ８０９，Ｓ８１０と移行し、ステップＳ８１０では、ＣＰＵ２０１は、ステップＳ８０４で検出した部品４０６〜４１５のうち部品存在ラインに含まれている部品４０６〜４１０のうち、ｙ座標値が最も小さい部品４０８を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ８１１では、ＣＰＵ２０１は、部品４０８の位置姿勢を認識して出力する。
【０１４１】
以降、同様にして、ステップＳ８０２、Ｓ８０４、Ｓ８０５、Ｓ８０６、Ｓ８０９、Ｓ８１０、Ｓ８１１の順に処理を繰り返し実行することで、部品４０７，４０６，４１０，４０９の順に位置姿勢が認識される。
【０１４２】
部品４０９の位置姿勢の認識を行うステップＳ８１１の処理が完了すると、処理はステップＳ８０２に戻る。ステップＳ８０２では、探索領域９０４はすでに設定されていると判断されるので、処理はステップＳ８０４に進み、該探索領域９０４から部品を検出する。図９（ｂ）の場合、探索領域９０４内には部品４１１〜４１５が含まれている（部品４０６〜４１０はロボットによって探索領域９０４から取り除かれている）のであるから、結果としてステップＳ８０４では、部品４１１〜４１５が検出されることになる。
【０１４３】
そして処理はステップＳ８０５，Ｓ８０６，Ｓ８０９と進む。ステップＳ８０９では、部品存在ライン内に、ステップＳ８０４で検出した部品、すなわち、部品４１１〜４１５の何れかが含まれているか否かを判断するのであるが、部品４１１〜４１５の何れも部品存在ライン内に含まれていないので、処理はステップＳ８１２に進むことになる。
【０１４４】
ステップＳ８１２では、ＣＰＵ２０１は、現在設定している探索領域９０４の位置から第１優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ８１３に進み、設定不可能と判断した場合には、処理はステップＳ８１４に進む。図９（ｂ）の場合は設定可能と判断されるため、処理はステップＳ８１３に進む。
【０１４５】
ステップＳ８１３では、ＣＰＵ２０１は、図１０（ａ）に示す如く、図９（ｂ）の探索領域９０４を第１優先方向に移動させた探索領域１００１を設定する。図１０（ａ）では、その上端が線分９０６と一致するような探索領域１００１を設定している。また、探索領域１００１の第１優先方向のサイズは、撮像画像４１６からはみ出ないように調整されている。更にステップＳ８１３では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【０１４６】
ステップＳ８１３の後はステップＳ８０４に処理が移行する。ステップＳ８０４では、ＣＰＵ２０１は、探索領域１００１に含まれている部品４１１〜４１５を検出する。そして処理はステップＳ８０５，Ｓ８０６と移行する。
【０１４７】
ステップＳ８０６では、ＣＰＵ２０１は、撮像画像４１６上にすでに部品存在ラインが設定されているか否かを判断する。先のステップＳ８１３で部品存在ラインはクリアされているので、この場合、部品存在ラインは設定されていないと判断され、この場合は、処理はステップＳ８０７に進む。
【０１４８】
ステップＳ８０７では、ＣＰＵ２０１は、ステップＳ８０４における検出処理で検出した部品４１１〜４１５のうちｙ座標値が最も小さい部品４１４を基準部品として特定する。
【０１４９】
ステップＳ８０８では、ＣＰＵ２０１は、第１優先方向における部品４１４の上端と、第１優先方向における部品４１４の下端と、を検出し、該検出した上端を通り且つ第１優先方向と直交する方向と平行な線分１００２と、該検出した下端を通り且つ第１優先方向と直交する方向と平行な線分１００３と、に挟まれた領域を部品存在ラインとして設定する。
【０１５０】
そして処理はステップＳ８０９，Ｓ８１０と移行し、ステップＳ８１０では、ＣＰＵ２０１は、ステップＳ８０４で検出した部品４１１〜４１５のうち部品存在ラインに含まれている部品４１１〜４１５のうち、ｙ座標値が最も小さい部品４１４を、これから位置姿勢を認識する対象の部品として決定する。然るにステップＳ８１１では、ＣＰＵ２０１は、部品４１４の位置姿勢を認識して出力する。
【０１５１】
以降、同様にして、ステップＳ８０２、Ｓ８０４、Ｓ８０５、Ｓ８０６、Ｓ８０９、Ｓ８１０、Ｓ８１１の順に処理を繰り返し実行することで、部品４１５，４１１，４１３，４１２の順に位置姿勢が認識される。
【０１５２】
部品４１２の位置姿勢の認識を行うステップＳ８１１の処理が完了すると、処理はステップＳ８０２に戻る。ステップＳ８０２では、探索領域１００１はすでに設定されていると判断されるので、処理はステップＳ８０４に進み、該探索領域１００１から部品を検出する。図１０（ａ）の場合、探索領域１００１内には部品は１つも含まれていないため（部品４１１〜４１５はロボットによって探索領域１００１から取り除かれている）、結果としてステップＳ８０４では、部品は検出されなかったことになる。このような場合、処理はステップＳ８１２に移行する。
【０１５３】
ステップＳ８１２では、ＣＰＵ２０１は、現在設定している探索領域１００１の位置から第１優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ８１３に進み、設定不可能と判断した場合には、処理はステップＳ８１４に進む。図１０（ａ）の場合は設定可能と判断されるため、処理はステップＳ８１３に進む。
【０１５４】
ステップＳ８１３では、ＣＰＵ２０１は、図１０（ｂ）に示す如く、図１０（ａ）の探索領域１００１を第１優先方向に移動させた探索領域１００４を設定する。図１０（ｂ）では、その上端が線分１００３と一致するような探索領域１００４を設定している。また、探索領域１００４の第１優先方向のサイズは、撮像画像４１６からはみ出ないように調整されている。更にステップＳ８１３では、ＣＰＵ２０１は、現在設定している部品存在ラインを削除（クリア）する。
【０１５５】
ステップＳ８１３の後はステップＳ８０４に処理が移行する。ステップＳ８０４では、ＣＰＵ２０１は、探索領域１００４から部品を検出する処理を行うのであるが、探索領域１００４には部品が１つも含まれていないため、ステップＳ８０４では、部品が１つも検出されないことになる。このような場合、処理はステップＳ８０５を介してステップＳ８１２に進むことになる。
【０１５６】
ステップＳ８１２では、ＣＰＵ２０１は、現在設定している探索領域１００４の位置から第１優先方向にシフトした位置に新たな探索領域が設定可能であるか否かを判断する。この判断の結果、設定可能と判断した場合には、処理はステップＳ８１３に進み、設定不可能と判断した場合には、処理はステップＳ８１４に進む。図１０（ｂ）の場合は設定不可能と判断されるため、処理はステップＳ８１４に進む。
【０１５７】
ステップＳ８１４では、ＣＰＵ２０１は、撮像画像４１６からこれ以上位置姿勢を認識する部品がないと判断して処理を終了させる。
【０１５８】
このように、本実施形態によれば、ユーザが方向を１つ指定した場合であっても、指定された方向に基づき安定して確実に部品を検出・認識することができる。
【０１５９】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１６０】
２０１：ＣＰＵ  ２０３：ＲＡＭ  ２０９：Ｉ／Ｏデバイス
【図１】
0006552221.tif 000002
【図２】
0006552221.tif 000003
【図３】
0006552221.tif 000004
【図４】
0006552221.tif 000005
【図５】
0006552221.tif 000006
【図６】
0006552221.tif 000007
【図７】
0006552221.tif 000008
【図８】
0006552221.tif 000009
【図９】
0006552221.tif 000010
【図１０】
0006552221.tif 000011