(57)【要約】  【課題】障害物等と接触することなく把持対象物を把持可能な把持位置及び把持姿勢を決定する。  【解決手段】把持機構により把持対象物を把持する把持ロボットは、前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群の情報と、前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報とを有する。前記把持ロボットは、前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定し、特定した把持対象物の位置及び把持対象物の姿勢において、前記障害物の領域と接触していない把持対象物接触面群を選択する。【選択図】図１
2013111696.tif 000002
【特許請求の範囲】
【請求項１】
把持機構により把持対象物を把持する把持ロボットであって、
前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、
前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、
を記憶する記憶部と、
前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、
前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部と、を有する、
ことを特徴とする把持ロボット。
【請求項２】
請求項１に記載の把持ロボットであって、
前記把持対象物接触面群選択部により選択された前記把持対象物接触面群ごとに、当該把持対象物接触面群に対応付けられた把持機構接触面群について、所定の位置において所定の姿勢を設定し、当該姿勢で当該把持機構接触面群を当該把持対象物接触面群を把持する位置に移動したとした場合に、前記障害物と接触するか否かを判定し、前記障害物と接触しない前記把持機構の位置及び前記把持機構の姿勢を特定する、把持機構位置姿勢特定部を有する、
ことを特徴とする把持ロボット。
【請求項３】
請求項２に記載の把持ロボットであって、
前記把持機構位置姿勢特定部は、前記把持対象物接触面群選択部により選択された把持対象物接触面群ごとに、当該把持対象物接触面群に対応付けられた把持機構接触面群について、前記所定の位置において複数の異なる姿勢を設定し、姿勢ごとに、当該姿勢で当該把持機構接触面群を当該把持対象物接触面群を把持する位置に移動したとした場合に、前記障害物と接触するか否かを判定し、前記障害物と接触しない前記把持機構の位置及び前記把持機構の姿勢を特定する、
ことを特徴とする把持ロボット。
【請求項４】
請求項２又は３に記載の把持ロボットであって、
前記記憶部は、前記把持機構の動作範囲を示す把持機構動作範囲情報を記憶し、
前記把持ロボットは、
前記把持機構動作範囲情報に基づいて、前記把持対象物接触面群選択部により選択された選択された把持対象物接触面群ごとに、当該把持対象物接触面群を当該把持対象物接触面群に対応付けられた把持機構接触面群の動作範囲で把持できるか否かを判定する把持機構動作量算出部を有し、
前記把持機構位置姿勢特定部は、前記把持機構動作量算出部により把持できると判定された把持機構接触面群について、前記把持機構の位置及び前記把持機構の姿勢を特定する、
ことを特徴とする把持ロボット。
【請求項５】
請求項１〜４いずれか一項に記載の把持ロボットであって、
前記記憶部は、前記把持対象物を面で表した把持対象物形状情報と、前記把持機構が把持するときに前記把持対象物と接触する面の組み合わせである接触面群を特定する把持機構接触面群情報と、を記憶し、
前記把持ロボットは、
前記把持対象物形状情報と前記把持機構接触面群情報とに基づいて、前記把持機構接触面群情報に含まれる把持機構接触面群ごとに、当該把持機構接触面群が把持することができる前記把持対象物の面の組み合わせを把持対象物接触面群として特定し、当該把持対象物接触面群と当該把持機構接触面群とを対応付けることにより、前記把持対象物接触面群情報を生成する把持対象物接触面群生成部を有する、
ことを特徴とする把持ロボット。
【請求項６】
請求項５に記載の把持ロボットであって、
前記把持対象物接触面群生成部は、前記把持機構接触面群情報に含まれる把持機構接触面群ごとに、当該把持機構接触面群を構成する一方の把持機構接触面と向かい合う前記把持対象物の第一の面を特定し、前記一方の把持機構接触面と前記第一の面とが向かい合った状態において、前記把持機構接触面群を構成する他方の把持機構接触面と向かい合う前記把持対象物の第二の面を特定し、前記第一の面と前記第二の面の組み合わせを把持対象物接触面群として特定する、
ことを特徴とする把持ロボット。
【請求項７】
請求項５又は６に記載の把持ロボットであって、
前記記憶部は、前記把持機構を面で表した把持機構形状情報を記憶し、
前記把持ロボットは、
前記把持機構形状情報に基づいて、前記把持機構の面のうち、互いに向かい合う面の組み合わせを特定し、前記把持機構接触面群情報として生成する把持機構接触面群生成部を有する、
ことを特徴とする把持ロボット。
【請求項８】
請求項７に記載の把持ロボットであって、
前記把持対象物形状情報及び前記把持機構形状情報は、前記把持対象物及び前記把持機構を平面で近似したデータである、
ことを特徴とする把持ロボット。
【請求項９】
把持機構により把持対象物を把持する把持ロボットを制御する制御装置であって、
前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、
前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、
を記憶する記憶部と、
前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、
前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部と、を有する、
ことを特徴とする制御装置。
【請求項１０】
把持機構により把持対象物を把持する把持ロボットの把持制御方法であって、
前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、
前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、
を取得するステップと、
前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定ステップと、
前記把持対象物位置姿勢特定ステップで特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択ステップと、を含む、
ことを特徴とする把持制御方法。
【請求項１１】
把持機構により把持対象物を把持する把持ロボットを制御する制御装置のプログラムであって、
前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、
前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、
を記憶する記憶部と、
前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、
前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部として、前記制御装置を機能させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、把持ロボット、制御装置、制御方法、及びプログラムに関する。
【背景技術】
【０００２】
ロボットハンド等の把持機構により部品や工具等の把持対象物（以下、「ワーク」ともいう）を把持することができるロボット（以下、「把持ロボット」ともいう）が知られている。また、把持ロボットを一つ以上用いることにより、例えば、部品搬送や製品組み立てを行い、生産ラインを自動化することができる。
【０００３】
一般的に、把持対象物を把持するために行われる把持ロボットの一連の動作と位置及び姿勢は、その所定の可動範囲の中で安全に実現する必要がある。すなわち、把持対象物を把持するロボットの一連の動作中に、当該ロボットが障害物や把持対象物等に衝突したり接触したりしないように制御する必要がある。また、このような把持ロボットの制御においては、把持対象物自体の形状と位置及び姿勢を考慮して、把持機構の動作と位置及び姿勢を決定する必要がある。
【０００４】
例えば、特許文献１には、事前に教示された、又は算出された把持位置及び把持姿勢が、アーム、及びロボットの可動範囲外であった場合に、当該把持位置及び把持姿勢をシフトすることにより可動範囲内の把持位置及び把持姿勢が存在するか否かを演算することが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−５６５１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、把持対象物の一部が障害物等により覆われていたり隠れていたりする場合には、障害物等を考慮して把持動作を決定しないと、実際に把持ロボットを動作させても当該把持対象物を把持できない、という問題が生じ得る。また、障害物等を考慮しても、それを回避する把持動作を決定する手段がなければ、把持位置及び把持姿勢を決定することができない、という問題が生じ得る。
【０００７】
上記の特許文献１では、把持位置及び把持姿勢をシフトすれば把持対象物を把持できることを前提としている。しかし、把持対象物の一部が障害物等により覆われていたり隠れていたりする場合が考慮されていない。そのため、上記の問題が生じ得る。
【０００８】
そこで、本発明は、障害物等と接触することなく把持対象物を把持可能な把持位置及び把持姿勢を決定することを目的とする。
【課題を解決するための手段】
【０００９】
本願は、上記課題を解決する手段を複数含んでいるが、その例を挙げるならば、以下のとおりである。
【００１０】
上記の課題を解決するための本発明の第一の態様は、把持機構により把持対象物を把持する把持ロボットであって、前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、を記憶する記憶部と、前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部と、を有する、ことを特徴とする。
【００１１】
上記の構成によれば、障害物と接触していない把持対象物接触面群が選択されるので、障害物と接触することなく把持対象物を把持可能なロボットの把持位置及び把持姿勢を決定することができる。
【００１２】
ここで、前記把持ロボットは、前記把持対象物接触面群選択部により選択された前記把持対象物接触面群ごとに、当該把持対象物接触面群に対応付けられた把持機構接触面群について、所定の位置において所定の姿勢を設定し、当該姿勢で当該把持機構接触面群を当該把持対象物接触面群を把持する位置に移動したとした場合に、前記障害物と接触するか否かを判定し、前記障害物と接触しない前記把持機構の位置及び前記把持機構の姿勢を特定する、把持機構位置姿勢特定部を有する、ようにしてもよい。
【００１３】
上記の構成によれば、障害物と接触していない把持対象物接触面群について、障害物と接触せずに把持できる把持機構の位置及び姿勢が特定されるので、障害物と接触することなく把持対象物を把持可能なロボットの把持位置及び把持姿勢を決定することができる。
【００１４】
また、前記把持機構位置姿勢特定部は、前記把持対象物接触面群選択部により選択された把持対象物接触面群ごとに、当該把持対象物接触面群に対応付けられた把持機構接触面群について、前記所定の位置において複数の異なる姿勢を設定し、姿勢ごとに、当該姿勢で当該把持機構接触面群を当該把持対象物接触面群を把持する位置に移動したとした場合に、前記障害物と接触するか否かを判定し、前記障害物と接触しない前記把持機構の位置及び前記把持機構の姿勢を特定する、ようにしてもよい。
【００１５】
上記の構成によれば、障害物と接触していない把持対象物接触面群について、障害物と接触せずに把持できる複数の把持機構の位置及び姿勢を特定することができる。
【００１６】
また、前記記憶部は、前記把持機構の動作範囲を示す把持機構動作範囲情報を記憶し、前記把持ロボットは、前記把持機構動作範囲情報に基づいて、前記把持対象物接触面群選択部により選択された選択された把持対象物接触面群ごとに、当該把持対象物接触面群を当該把持対象物接触面群に対応付けられた把持機構接触面群の動作範囲で把持できるか否かを判定する把持機構動作量算出部を有し、前記把持機構位置姿勢特定部は、前記把持機構動作量算出部により把持できると判定された把持機構接触面群について、前記把持機構の位置及び前記把持機構の姿勢を特定する、ようにしてもよい。
【００１７】
上記の構成によれば、把持機構の位置及び前記把持機構の姿勢を特定する前に、把持対象物接触面群をその動作範囲で把持できる把持機構接触面群が抽出されるため、処理負荷が軽減される。
【００１８】
また、前記記憶部は、前記把持対象物を面で表した把持対象物形状情報と、前記把持機構が把持するときに前記把持対象物と接触する面の組み合わせである接触面群を特定する把持機構接触面群情報と、を記憶し、前記把持ロボットは、前記把持対象物形状情報と前記把持機構接触面群情報とに基づいて、前記把持機構接触面群情報に含まれる把持機構接触面群ごとに、当該把持機構接触面群が把持することができる前記把持対象物の面の組み合わせを把持対象物接触面群として特定し、当該把持対象物接触面群と当該把持機構接触面群とを対応付けることにより、前記把持対象物接触面群情報を生成する把持対象物接触面群生成部を有する、ようにしてもよい。
【００１９】
上記の構成によれば、把持対象物形状情報と把持機構接触面群情報とに基づいて、把持対象物接触面群と当該把持対象物接触面群を把持できる把持機構接触面群とを対応付けることができる。
【００２０】
また、前記把持対象物接触面群生成部は、前記把持機構接触面群情報に含まれる把持機構接触面群ごとに、当該把持機構接触面群を構成する一方の把持機構接触面と向かい合う前記把持対象物の第一の面を特定し、前記一方の把持機構接触面と前記第一の面とが向かい合った状態において、前記把持機構接触面群を構成する他方の把持機構接触面と向かい合う前記把持対象物の第二の面を特定し、前記第一の面と前記第二の面の組み合わせを把持対象物接触面群として特定する、ようにしてもよい。
【００２１】
上記の構成によれば、把持対象物形状情報と把持機構接触面群情報とに基づいて、より簡単な方法で、把持対象物接触面群と当該把持対象物接触面群を把持できる把持機構接触面群とを対応付けることができる。
【００２２】
また、前記記憶部は、前記把持機構を面で表した把持機構形状情報を記憶し、前記把持ロボットは、前記把持機構形状情報に基づいて、前記把持機構の面のうち、互いに向かい合う面の組み合わせを特定し、前記把持機構接触面群情報として生成する把持機構接触面群生成部を有する、ようにしもよい。
【００２３】
上記の構成によれば、把持機構形状情報に基づいて、把持対象物を把持できる把持機構接触面群を生成することができる。
【００２４】
また、前記把持対象物形状情報及び前記把持機構形状情報は、前記把持対象物及び前記把持機構を平面で近似したデータであってもよい。
【００２５】
上記の構成によれば、ロボットに与えるデータを単純化でき、ロボットの処理負荷を抑えることができる。
【００２６】
上記の課題を解決するための本発明の第二の態様は、把持機構により把持対象物を把持する把持ロボットを制御する制御装置であって、前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、を記憶する記憶部と、前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部と、を有する、ことを特徴とする。
【００２７】
上記の課題を解決するための本発明の第三の態様は、把持機構により把持対象物を把持する把持ロボットの把持制御方法であって、前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、を取得するステップと、前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定ステップと、前記把持対象物位置姿勢特定ステップで特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択ステップと、を含む、ことを特徴とする。
【００２８】
上記の課題を解決するための本発明の第四の態様は、把持機構により把持対象物を把持する把持ロボットを制御する制御装置のプログラムであって、前記把持対象物が把持されるときに前記把持機構と接触する面の組み合わせである把持対象物接触面群と、当該把持対象物接触面群を把持するときに接触する前記把持機構の面の組み合わせである把持機構接触面群とを対応付けた把持対象物接触面群情報、及び、前記把持ロボットの作業空間中の障害物の領域を特定する障害物情報、を記憶する記憶部と、前記把持対象物の位置及び前記把持対象物の姿勢を画像認識により特定する把持対象物位置姿勢特定部と、前記把持対象物位置姿勢特定部により特定された前記把持対象物の位置及び前記把持対象物の姿勢において前記障害物と接触していない把持対象物接触面群を、前記把持対象物接触面群情報から選択する把持対象物接触面群選択部として、前記制御装置を機能させる、ことを特徴とする。
【００２９】
上記の本発明の第二〜第四の態様によっても、障害物と接触していない把持対象物接触面群が選択されるので、障害物と接触することなく把持対象物を把持可能なロボットの把持位置及び把持姿勢を決定することができる。
【００３０】
上記した以外の課題、構成、及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００３１】
【図１】本発明の一実施形態に係るロボットの外観の一例を示す図。
【図２】ロボットのハンド（把持機構）の動作の一例を説明する図。
【図３】ロボットの制御に関する概略構成の一例を示すブロック図。
【図４】ロボットの制御に関する機能構成の一例を示すブロック図。
【図５】把持対象物形状近似データ生成処理の一例を示すフロー図。
【図６】把持対象物形状近似データの生成方法の一例を説明する図。
【図７】把持対象物形状近似データの構成の一例を示す図。
【図８】把持機構接触面群データ生成処理の一例を示すフロー図。
【図９】把持機構形状近似データの一例を説明する図。
【図１０】把持機構形状近似データの接触面を説明する図。
【図１１】把持機構形状近似データの接触面データの構成の一例を示す図。
【図１２】把持機構接触面群を特定する処理の一例を示すフロー図。
【図１３】把持機構接触面群を特定する際の法線ベクトルの使い方の一例を説明する図。
【図１４】把持機構接触面群データの構成の一例を示す図。
【図１５】把持対象物接触面群データ生成処理の一例を示すフロー図。
【図１６】把持対象物接触面群と把持機構接触面群とを関連付ける処理の一例を示すフロー図。
【図１７】把持対象物接触面群データの構成の一例を示す図。
【図１８】把持対象物接触面群選択処理の一例を示すフロー図。
【図１９】把持対象物と障害物の関係の一例を説明する図。
【図２０】障害物と干渉しない把持対象接触面群を選択する処理の一例を示すフロー図。
【図２１】選択された把持対象物接触面群データの構成の一例を示す図。
【図２２】把持機構動作量算出処理の一例を示すフロー図。
【図２３】把持機構接触面群と把持対象物接触面群の関係を説明する図。
【図２４】把持機構動作量を特定する処理の一例を示すフロー図。
【図２５】把持機構位置姿勢設定処理の一例を示すフロー図。
【図２６】障害物と干渉しない把持機構の位置及び姿勢を特定する処理の一例を示すフロー図（その１）。
【図２７】障害物と干渉しない把持機構の位置及び姿勢を特定する処理の一例を示すフロー図（その２）。
【図２８】把持対象物接触面群の軸と把持機構接触面群の軸との関係を説明する図。
【図２９】把持機構の位置及び姿勢を特定するための回転と並進の一例を説明する図。
【発明を実施するための形態】
【００３２】
以下、本発明の一実施形態の一例について、図面を参照して説明する。
【００３３】
図１は、本発明の一実施形態に係るロボットの外観の一例を示す図である。
【００３４】
ロボット１は、頭部２と、胴体部３と、脚部４と、アーム５と、ハンド（把持機構）８とを備える把持ロボットである。ロボット１は、アーム５の一端に取り付けられたハンド８で把持対象物を把持する。本図の例では、ロボット１は、左右２本のアームを備えている。
【００３５】
アーム５は、複数のジョイント（関節）６と、複数のリンク７とからなる。各ジョイント６は、リンク７同士や、胴体部３とリンク７、ハンド８とリンク７を、回動自在に（ただし、所定の可動範囲内で回動可能に）連結している。各ジョイント６は、例えば、回転ジョイントであり、リンク７間の角度を変化させたり、リンク７を軸回転させたりできるように設けられている。従って、各ジョイント６を連動させて駆動することにより、ハンド８を、自在に（ただし、所定の可動範囲内で）移動させることができるとともに、自由な方向へ向けることもできる。本図の例では、アーム５は、６つのジョイントを備えた６軸アームとなっている。
【００３６】
図２は、ロボットのハンド（把持機構）の動作の一例を説明する図である。
【００３７】
図２（Ａ）の斜視図に示すように、ハンド８は、４本の指９を備える。また、図２（Ｂ）の底面図に示すように、各指９は、例えば、隣り合う指に近付くように移動し、少なくとも２本の指で把持対象物を挟んで把持することができる仕組みとなっている。
【００３８】
図３は、ロボットの制御に関する概略構成の一例を示すブロック図である。
【００３９】
ロボット１は、コントローラー１０と、撮像部２０と、可動部３０とを備える。
【００４０】
撮像部２０は、ロボット１の外部環境を撮影して、画像データを生成するユニットである。撮像部２０は、例えば、カメラを含み、ロボット１の頭部２に設けられる。撮像部２０は、コントローラー１０の制御により、把持対象物や障害物などを含む外部環境の撮影を行うとともに画像データを生成し、コントローラー１０に出力する。
【００４１】
可動部３０は、ロボット１の可動部分である。可動部３０には、例えば、頭部２、胴体部３、脚部４、アーム５、ハンド８が含まれる。各可動部３０は、例えば、アクチュエーター３１と、力覚センサーなどの種々のセンサー３２と、を備える。アクチュエーター３１は、例えば、アーム５の各ジョイント６や、ハンド８の各指にそれぞれ設けられており、これらを動作させる。アクチュエーター３１は、例えば、モーター、当該モーターの駆動回路、エンコーダーなどを備える。エンコーダーが出力するエンコーダー値やセンサー３２が出力するセンサー値は、可動部の位置、移動方向、移動量、速度、加速度、把持対象物との接触などを把握するのに、コントローラー１０により利用される。
【００４２】
コントローラー１０は、ロボット１の全体を制御する処理を行う。コントローラー１０は、演算装置であるＣＰＵ１１と、揮発性の記憶装置であるＲＡＭ１２と、不揮発性の記憶装置であるＲＯＭ１３と、コントローラー１０と他のユニットと接続するインターフェイス（Ｉ／Ｆ）回路１４と、ロボット１の外部の装置と通信を行う通信装置１５と、を備える。
【００４３】
コントローラー１０は、例えば、撮像部２０の出力画像から画像認識によって把持対象物の形状と位置及び姿勢を認識する。また、コントローラー１０は、例えば、認識された把持対象物を把持するためのロボット１の一連の動作と、把持位置及び把持姿勢を計算する。また、コントローラー１０は、例えば、各種センサーやエンコーダーの出力信号に基づいて、各可動部３０が目的の位置及び姿勢となるようにアクチュエーター３１を制御し、可動部３０を動作させる。
【００４４】
なお、把持対象物の位置は、例えば、ロボットの作業空間を基準座標系としたときの、当該把持対象物の所定の基準点（例えば、重心など）の、前記基準座標系における位置座標とすることができる。また、把持対象物の姿勢は、例えば、当該把持対象物の所定の基準ベクトル（例えば、重心から所定方向に向かうベクトル）の、前記基準座標系における向きすることができる。把持機構やロボットの位置及び姿勢についても同様に定義できる。もちろん、位置や姿勢の定義はこれに限られず、他の方法で定義してもよい。
【００４５】
以上のロボット１の構成は、本実施形態の特徴を説明するにあたって主要構成を説明したのであって、上記の構成に限られない。ハンドにより把持対象物を把持できれば、どのような構造であってもよい。また、一般的な把持ロボットが備える構成を排除するものではない。
【００４６】
例えば、図１では６軸のアームが示されているが、軸数（ジョイント数）をさらに増加させてもよいし減らしてもよい。リンクの数を増減させてもよい。また、アーム、ハンド、リンク、ジョイント等の各種部材の形状、大きさ、配置、構造等も適宜変更してよい。また、コントローラー１０は、ロボット１の本体に内蔵されていなくてもよく、ロボット１を遠隔操作する機器に設けられていてもよい。
【００４７】
次に、上記のロボット１における、把持動作と位置及び姿勢の制御方法について、具体的に説明する。
【００４８】
なお、本実施形態は、ロボット１を実際に動作させるに当たって、事前に、動作と位置及び姿勢のシミュレーションを行うものである。
【００４９】
図４は、ロボットの制御に関する機能構成の一例を示すブロック図である。
【００５０】
本図に示すように、ロボット１は、形状近似部１０１と、把持機構接触面群生成部１０２と、把持対象物接触面群生成部１０３と、把持対象物位置姿勢取得部１０４と、把持対象物接触面群選択部１０５と、把持機構動作量算出部１０６と、把持機構位置姿勢設定部１０７と、を備える。また、ロボット１は、各種データ１１１〜１２３を記憶する記憶部を備える。
【００５１】
記憶部には、把持機構形状データ１１１と、把持対象物形状データ１１２と、把持機構形状近似データ１１３と、把持対象物形状近似データ１１４と、把持機構接触面群データ１１５と、把持対象物接触面群データ１１６と、把持対象物認識処理データ１１７と、把持対象物位置姿勢データ１１８と、障害物データ１１９と、選択された把持対象物接触面群データ１２０と、把持機構動作範囲データ１２１と、把持機構動作量データ１２２と、把持機構位置姿勢データ１２３と、が格納される。
【００５２】
上記の記憶部以外の各機能部は、例えば、ＣＰＵ１１がＲＯＭ１３に格納された所定のプログラムをＲＡＭ１２に読み出して実行することにより実現される。記憶部は、例えば、ＲＡＭ１２やＲＯＭ１３により実現される。なお、前記所定のプログラムは、例えば、予めＲＯＭ１３にインストールされてもよいし、通信装置１５を介してネットワークからダウンロードされてインストール又は更新されてもよい。
【００５３】
把持機構形状データ１１１は、ハンドの形状と寸法を示すデータである。把持機構形状データ１１１は、例えば、把持機構の形状を忠実に表した３次元のＣＡＤデータなどである。把持機構形状データ１１１は、予め用意され、記憶部に記憶される。
【００５４】
なお、図示していないが、ロボット全体の形状データも、予め用意され、記憶部に記憶されていてもよい。
【００５５】
把持対象物形状データ１１２は、把持対象物の形状と寸法を示すデータである。把持対象物形状データ１１２は、例えば、把持対象物の形状を忠実に表した３次元のＣＡＤデータなどである。把持対象物形状データ１１２は、予め用意され、記憶部に記憶される。
【００５６】
把持機構形状近似データ１１３は、ハンドの形状と寸法を近似したデータである。把持機構形状近似データ１１３は、例えば、３次元のＣＡＤデータであり、曲線や曲面を直線や平面で近似したデータである。把持機構形状近似データ１１３は、予め用意され、記憶部に記憶されていてもよいし、形状近似部１０１が把持機構形状データ１１１に基づいて生成するようにしてもよい。
【００５７】
なお、図示していないが、ロボット全体の形状近似データも、予め用意され、記憶部に記憶されていてもよいし、形状近似部１０１がロボット全体の形状データに基づいて生成するようにしてもよい。
【００５８】
把持対象物形状近似データ１１４は、把持対象物の形状と寸法を近似したデータである。把持対象物形状近似データ１１４は、例えば、３次元のＣＡＤデータであり、曲線や曲面を直線や平面で近似したデータである。把持対象物形状近似データ１１４は、予め用意され、記憶部に記憶されていてもよいし、形状近似部１０１が把持対象物形状データ１１２に基づいて生成するようにしてもよい。
【００５９】
把持機構接触面群データ１１５は、近似された把持機構形状（把持機構形状近似データ１１３）を構成する平面（平面要素）のうち、把持対象物を把持するときに把持対象物に接触する平面（接触面）の組み合わせ（群）を特定するデータである。すなわち、把持対象物を把持する把持機構の面の組み合わせを特定するデータである。把持機構接触面群データ１１５は、予め用意され、記憶部に記憶されていてもよいし、把持機構接触面群生成部１０２が生成するようにしてもよい。
【００６０】
把持対象物接触面群データ１１６は、近似された把持対象物形状（把持対象物形状近似データ１１４）を構成する平面（平面要素）のうち、把持機構により把持されるときに把持機構と接触する平面（接触面）の組み合わせ（群）を特定するデータである。すなわち、把持機構により把持される面の組み合わせを特定するデータである。把持対象物接触面群データ１１６は、予め用意され、記憶部に記憶されてもよいし、把持対象物接触面群生成部１０３が生成するようにしてもよい。
【００６１】
把持対象物認識処理データ１１７は、把持対象物を種々の方向から見た形状と寸法を示すデータである。把持対象物認識処理データ１１７は、例えば、３次元のＣＡＤデータなどである。把持対象物認識処理データ１１７は、例えば、撮像部２０により撮影された外部環境の画像データと照合され、当該外部環境に存在する把持対象物の位置及び姿勢の認識に使用される。把持対象物認識処理データ１１７は、予め用意され、記憶部に記憶される。
【００６２】
把持対象物位置姿勢データ１１８は、把持対象物の位置及び姿勢を示すデータである。把持対象物位置姿勢データ１１８は、画像認識の結果認識された把持対象物の、作業空間中の位置及び姿勢を特定するデータである。複数の把持対象物が存在すれば、把持対象物ごとの位置姿勢データが記録される。把持対象物位置姿勢データ１１８は、把持対象物位置姿勢取得部１０４により生成される。
【００６３】
障害物データ１１９は、ロボット１の障害となる可能性のある障害物を示すデータである。障害物データ１１９は、例えば、ロボット１を基準位置として、当該ロボット１が把持動作を行う際にハンドやアームと衝突する可能性のある外部環境の領域の形状と寸法と位置及び姿勢を示すデータである。把持対象物が置かれる床、把持対象物の周辺の部品などの物、他のロボットなどが障害物となりうる。障害物データ１１９は、予め用意され、記憶部に記憶されてもよいし、撮影した画像データに基づく画像認識により生成されるようにしてもよい。
【００６４】
障害物データを用意すべき物理的な範囲は、例えば、ロボット１を基準に、ハンドにより把持をすることができる可動範囲に加え、当該可動範囲でハンドが動作した場合にアームなどの他の部分が障害物と衝突することがないような最小の作業範囲（作業空間）とすることができる。
【００６５】
選択された把持対象物接触面群データ１２０は、把持対象物接触面群データ１１６に含まれる接触面群のうち、所定の条件により選択された接触面群のデータである。把持対象物接触面群データ１１６は、把持対象物接触面群選択部１０５により生成される。
【００６６】
把持機構動作範囲データ１２１は、ハンドの動作範囲（可動範囲）を特定するデータである。把持機構動作範囲データ１２１には、例えば、ハンド、指等の移動方向や移動量等を特定するデータが含まれる。アームや他の可動部の移動方向や移動量等を特定するデータが含まれていてもよい。把持機構動作範囲データ１２１は、予め用意され、記憶部に記憶される。
【００６７】
把持機構動作量データ１２２は、把持対象物を把持するハンドの動作量を特定するデータである。把持機構動作量データ１２２には、例えば、把持対象物の接触面群ごとに、当該接触面群を把持する把持機構の接触面群に対応する各指の移動方向と移動量を特定するデータである。把持機構動作量データ１２２は、把持機構動作量算出部１０６により生成される。
【００６８】
把持機構位置姿勢データ１２３は、把持対象物を把持するときの把持機構の位置及び姿勢を特定するデータである。把持機構位置姿勢データ１２３は、把持機構位置姿勢設定部１０７により生成される。
【００６９】
形状近似部１０１は、把持機構形状データ１１１に基づいて把持機構形状近似データ１１３を生成する。また、形状近似部１０１は、把持対象物形状データ１１２に基づいて把持対象物形状近似データ１１４を生成する。なお、近似データが予め用意される場合は、形状近似部１０１は、なくてよい。
【００７０】
把持機構接触面群生成部１０２は、把持機構形状近似データ１１３に基づいて、把持対象物を把持する把持機構の接触面群を特定し、把持機構接触面群データ１１５を生成する。なお、把持機構接触面群データ１１５が予め用意される場合は、把持機構接触面群生成部１０２は、なくてよい。
【００７１】
把持対象物接触面群生成部１０３は、把持対象物形状近似データ１１４と把持機構接触面群データ１１５とに基づいて、把持機構接触面群により把持可能な把持対象物の接触面群を特定し、把持対象物接触面群データ１１６を生成する。なお、把持対象物接触面群データ１１６が予め用意される場合は、把持対象物接触面群生成部１０３は、なくてよい。
【００７２】
把持対象物位置姿勢取得部１０４は、撮像部２０により撮影された画像データと、把持対象物認識処理データ１１７とに基づいて、画像認識処理を行い、画像データに含まれる把持対象物の形状と寸法と位置及び姿勢を特定し、把持対象物位置姿勢データ１１８を生成する。
【００７３】
把持対象物接触面群選択部１０５は、把持対象物接触面群データ１１６と、把持対象物位置姿勢データ１１８と、障害物データ１１９とに基づいて、作業空間内の障害物により妨げられていない把持対象物接触面群を選択し、選択された把持対象物接触面群データ１２０を生成する。
【００７４】
把持機構動作量算出部１０６は、把持機構動作範囲データ１２１と、把持機構接触面群データ１１５と、選択された把持対象物接触面群データ１２０とに基づいて、把持対象物接触面群ごとに、当該接触面群を把持する把持機構の接触面群に対応する各指の移動方向と移動量を算出し、把持機構動作量データ１２２を生成する。
【００７５】
把持機構位置姿勢設定部１０７は、把持機構形状近似データ１１３と、把持対象物形状近似データ１１４と、把持対象物位置姿勢データ１１８と、障害物データ１１９と、選択された把持対象物接触面群データ１２０と、把持機構動作量データ１２２とに基づいて、作業空間内の障害物により妨げられずに把持対象物を把持可能な把持機構の位置及び姿勢を算出し、把持機構位置姿勢データ１２３を生成する。
【００７６】
以上の機能構成は、ロボット１の動作と位置及び姿勢の制御に関する構成を理解容易にするために、主な処理内容に応じて分類したものである。構成要素の分類の仕方や名称によって、本願発明が制限されることはない。ロボット１の構成は、処理内容に応じて、さらに多くの構成要素に分類することもできる。また、１つの構成要素がさらに多くの処理を実行するように分類することもできる。また、各構成要素の処理は、１つのハードウェアで実行されてもよいし、複数のハードウェアで実行されてもよい。
【００７７】
次に、上記の各種機能により実現される処理について、図面を参照して説明する。以下では、円筒状の把持対象物を把持する場合を例に挙げて説明する。
【００７８】
図５は、把持対象物形状近似データ生成処理の一例を示すフロー図である。
【００７９】
Ｓ１０：形状近似部１０１は、把持対象物形状データ１１２を記憶部から取得する。把持対象物形状データ１１２は、例えば、図６（Ａ）に示すように、ＸＹＺ軸を有する座標系で表されるデータである。
【００８０】
Ｓ２０：形状近似部１０１は、Ｓ１０で取得した把持対象物形状データが表す把持対象物の形状の表面に、節点を設定する。本実施形態では、節点とは、面と面とを接合する点を意味するものとする。形状近似部１０１は、例えば、図６（Ｂ）に示すように、把持対象物の形状を近似できるように、面と面の接合部分に略均等な（均等も含む）間隔で複数の節点（ａ〜ｘ）を配置する。
【００８１】
Ｓ３０：形状近似部１０１は、Ｓ２０で設定した各節点を結ぶ直線を設定する。本実施形態では、形状近似部１０１は、把持対象物の形状を近似する平面が形成されるように、各節点を直線で結ぶ（図６（Ｃ）参照）。
【００８２】
Ｓ４０：形状近似部１０１は、Ｓ３０で設定した節点間の直線で囲まれた領域を、把持対象物の形状を近似する平面要素として特定する。例えば、図６（Ｃ）に示すように、把持対象物は、１４個の平面要素（外側の６面、内側の６面、上下の２面）により近似される。
【００８３】
また、形状近似部１０１は、特定した各平面要素について、その法線ベクトル（平面に対して垂直なベクトル）であって、把持対象物の外を向く（把持対象物の形状が占める領域側でない方向の）法線ベクトルを算出する（図６（Ｄ）参照）。なお、図６（Ｄ）では、平面要素ａｂｎｍと平面要素ｇｈｔｓのみを図示している。
【００８４】
そして、形状近似部１０１は、例えば、図７に示すような把持対象物形状近似データ１１４を生成する。把持対象物形状近似データ１１４は、平面要素を特定する平面要素番号ごとに、当該平面要素を構成する節点の座標と、当該平面要素の法線ベクトルとを含む。
【００８５】
以上のようにして、把持対象物形状近似データ１１４が生成される。
【００８６】
図８は、把持機構接触面群データ生成処理の一例を示すフロー図である。
【００８７】
Ｓ１１０：把持機構接触面群生成部１０２は、予め用意された又は生成された把持機構形状近似データ１１３を記憶部から取得する。把持機構形状近似データ１１３は、例えば、図９に示すように、ハンド８の各指９を平面要素で近似したデータである。すなわち、把持機構形状近似データ１１３は、例えば、平面要素を特定する平面要素番号ごとに、当該平面要素が属する指を特定する識別情報と、当該平面要素を構成する節点の座標と、当該平面要素の法線ベクトル（把持機構の外を向く（把持機構の形状が占める領域側でない方向の）法線ベクトル）とを含む。把持機構形状近似データ１１３の生成方法は、把持対象物形状近似データ１１４と同様なので、説明を省略する。
【００８８】
Ｓ１２０：把持機構接触面群生成部１０２は、Ｓ１１０で取得した把持機構形状近似データ１１３の中から、把持対象物と接触させるべき平面要素（接触面）を抽出する。把持機構接触面群生成部１０２は、例えば、図１０に示すように、向かい側に指がある平面要素（把持機構接触面）を、把持対象物と接触させるべき平面要素（接触面）として抽出する。また、抽出した各平面要素の法線ベクトルを把持機構形状近似データ１１３から取得する。抽出された平面要素のデータは、例えば、図１１に示すように、平面要素を特定する平面要素番号ごとに、当該平面要素が属する指を特定する識別情報と、当該平面要素を構成する節点の座標と、当該平面要素の法線ベクトルとを含む。
【００８９】
Ｓ１３０：把持機構接触面群生成部１０２は、Ｓ１２０で抽出した平面要素から、把持対象物を把持するための平面要素の組み合わせ（接触面群）を特定する。
【００９０】
Ｓ１３０の詳細を、図１２を参照して説明する。図１２は、把持機構接触面群を特定する処理の一例を示すフロー図である。
【００９１】
Ｓ１３０１：把持機構接触面群生成部１０２は、把持機構接触面群の数を示す変数ｃｏｕｎｔを０に設定する。
【００９２】
Ｓ１３０２：把持機構接触面群生成部１０２は、Ｓ１２０で抽出した平面要素のデータに含まれる各平面要素番号を指すインデックスｉを０に設定する。
【００９３】
Ｓ１３０３：把持機構接触面群生成部１０２は、インデックスｉが、Ｓ１２０で抽出した平面要素の総数Ｎより小さいか否かを判定する。Ｎより小さい場合（Ｓ１３０３：ＹＥＳ）、処理をＳ１３０４に進める。Ｎ以上の場合（Ｓ１３０３：ＮＯ）、処理をＣ（Ｓ１３１８）に進める。
【００９４】
Ｓ１３０４：把持機構接触面群生成部１０２は、Ｓ１２０で抽出した平面要素のデータに含まれる各平面要素番号を指すインデックスｊを０に設定する。
【００９５】
Ｓ１３０５：把持機構接触面群生成部１０２は、インデックスｊがＮより小さいか否かを判定する。Ｎより小さい場合（Ｓ１３０５：ＹＥＳ）、処理をＳ１３０７に進める。Ｎ以上の場合（Ｓ１３０５：ＮＯ）、処理をＳ１３０６）に進める。
【００９６】
Ｓ１３０６：把持機構接触面群生成部１０２は、インデックスｉを１カウントアップする。そして、処理をＳ１３０３に戻す。
【００９７】
Ｓ１３０７：把持機構接触面群生成部１０２は、インデックスｊがインデックスｉと等しくないか否かを判定する。等しくない場合（Ｓ１３０７：ＹＥＳ）、処理をＳ１３０９に進める。等しい場合（Ｓ１３０７：ＮＯ）、処理をＢ（Ｓ１３０８）に進める。
【００９８】
Ｓ１３０８：把持機構接触面群生成部１０２は、インデックスｊを１カウントアップする。そして、処理をＳ１３０５に戻す。
【００９９】
Ｓ１３０９：把持機構接触面群生成部１０２は、インデックスｉが指す平面要素（以下、「平面要素ｉ」と表す）と、インデックスｊが指す平面要素（以下、「平面要素ｊ」と表す）との組み合わせが、把持機構接触面群として特定済みか否かを判定する。すなわち、把持機構接触面群データ１１５に含まれているか否かを判定する。特定済みでない場合（Ｓ１３０９：ＮＯ）、処理をＳ１３１０に進める。特定済みである場合（Ｓ１３０９：ＹＥＳ）、処理をＢ（Ｓ１３０８）に進める。
【０１００】
Ｓ１３１０：把持機構接触面群生成部１０２は、平面要素ｉの法線ベクトル（ただし、正規化するものとする）と、平面要素ｊの法線ベクトル（ただし、正規化するものとする）の内積を計算する。なお、図１３の左側に示すように、二つの平面の法線ベクトルＮＡ及びＮＢが互いに逆向きであるとき、正規化した法線ベクトルＮＡ及びＮＢの内積は、−１となる。
【０１０１】
Ｓ１３１１：把持機構接触面群生成部１０２は、Ｓ１３１０の計算結果に基づいて、平面要素ｉと平面要素ｊとが対向するか否かを判定する。ここで、「対向」とは、互いの法線ベクトルの内積が−１であることを指す。対向する場合（Ｓ１３１１：ＹＥＳ）、処理をＳ１３１２に進める。対向しない場合（Ｓ１３１１：ＮＯ）、処理をＢ（Ｓ１３０８）に進める。
【０１０２】
Ｓ１３１２：把持機構接触面群生成部１０２は、平面要素ｉの平面要素ｊに対する交差を計算する。ここで、「交差」とは、図１３の右側に示すように、一方の平面要素（平面要素ｉ）を構成する各節点から当該平面要素の法線ベクトル方向に伸びる直線が、全て他方の平面要素（平面要素ｊ）に交差する（通過する）ことをいう。
【０１０３】
Ｓ１３１３：把持機構接触面群生成部１０２は、Ｓ１３１２の計算結果に基づいて、平面要素ｉが平面要素ｊに交差するか否かを判定する。交差する場合（Ｓ１３１３：ＹＥＳ）、処理をＳ１３１４に進める。交差しない場合（Ｓ１３１３：ＮＯ）、処理をＢ（Ｓ１３０８）に進める。
【０１０４】
Ｓ１３１４：把持機構接触面群生成部１０２は、平面要素ｊの平面要素ｉに対する交差を計算する。
【０１０５】
Ｓ１３１５：把持機構接触面群生成部１０２は、Ｓ１３１４の計算結果に基づいて、平面要素ｊが平面要素ｉに交差するか否かを判定する。交差する場合（Ｓ１３１５：ＹＥＳ）、処理をＳ１３１６に進める。交差しない場合（Ｓ１３１５：ＮＯ）、処理をＢ（Ｓ１３０８）に進める。
【０１０６】
Ｓ１３１６：把持機構接触面群生成部１０２は、互いに対向かつ交差する平面要素ｉ及びｊの組み合わせを、把持機構接触面群データ１１５に記録する。把持機構接触面群データ１１５は、例えば、図１４に示すように、把持機構接触面群を特定する把持機構接触面群番号ごとに、接触面群を構成する平面要素の平面要素番号を含む。
【０１０７】
Ｓ１３１７：把持機構接触面群生成部１０２は、把持機構接触面群の数を示す変数ｃｏｕｎｔを１インクリメントする。そして、処理をＢ（Ｓ１３０８）に進める。
【０１０８】
Ｓ１３１８：把持機構接触面群生成部１０２は、変数ｃｏｕｎｔが０よりも大きいか否かを判定する。０よりも大きい場合（Ｓ１３１８：ＹＥＳ）、処理をＳ１３１９に進める。０以下である場合（Ｓ１３１８：ＮＯ）、処理をＳ１３２０に進める。
【０１０９】
Ｓ１３１９：把持機構接触面群生成部１０２は、把持機構接触面群が有ることを、把持機構接触面群データ１１５を使用する他の機能部に通知する。そして、本フローを終了する。
【０１１０】
Ｓ１３２０：把持機構接触面群生成部１０２は、把持機構接触面群が無いことを、把持機構接触面群データ１１５を使用する他の機能部に通知する。そして、本フローを終了する。
【０１１１】
以上のようにして、把持機構接触面群データ１１５が生成される。
【０１１２】
図１５は、把持対象物接触面群データ生成処理の一例を示すフロー図である。
【０１１３】
Ｓ２１０：把持対象物接触面群生成部１０３は、予め用意された又は生成された把持対象物形状近似データ１１４を記憶部から取得する。
【０１１４】
Ｓ２２０：把持対象物接触面群生成部１０３は、予め用意された又は生成された把持機構接触面群データ１１５を記憶部から取得する。
【０１１５】
Ｓ２３０：把持対象物接触面群生成部１０３は、ハンドの各接触面群により把持可能な把持対象物の接触面の組みあ合わせを特定し、把持対象物接触面群データ１１６を生成する。
【０１１６】
Ｓ２３０の詳細を、図１６を参照して説明する。図１６は、把持対象物接触面群と把持機構接触面群とを関連付ける処理の一例を示すフロー図である。
【０１１７】
Ｓ２３０１：把持対象物接触面群生成部１０３は、把持機構接触面群データ１１５に含まれる各把持機構接触面群を指すインデックスｉを０に設定する。
【０１１８】
Ｓ２３０２：把持対象物接触面群生成部１０３は、インデックスｉが、把持機構接触面群データ１１５に含まれる把持機構接触面群の総数Ｎより小さいか否かを判定する。Ｎより小さい場合（Ｓ２３０２：ＹＥＳ）、処理をＳ２３０３に進める。Ｎ以上の場合（Ｓ２３０２：ＮＯ）、本フローを終了する。
【０１１９】
Ｓ２３０３：把持対象物接触面群生成部１０３は、インデックスｉが指す把持機構接触面群（以下、「把持機構接触面群ｉ」と表す）に関連付けられた把持対象物接触面群の総数を示す変数ｃｏｕｎｔ［ｉ］を０に設定する。
【０１２０】
Ｓ２３０４：把持対象物接触面群生成部１０３は、把持対象物形状近似データ１１４に含まれる各平面要素番号を指すインデックスｊを０に設定する。
【０１２１】
Ｓ２３０５：把持対象物接触面群生成部１０３は、インデックスｊが、把持対象物形状近似データ１１４に含まれる平面要素の総数Ｍよりも小さいか否かを判定する。Ｍより小さい場合（Ｓ２３０５：ＹＥＳ）、処理をＳ２３０７に進める。Ｍ以上の場合（Ｓ２３０５：ＮＯ）、処理をＳ２３０６に進める。
【０１２２】
Ｓ２３０６：把持対象物接触面群生成部１０３は、インデックスｉを１カウントアップする。そして、処理をＳ２３０２に戻す。
【０１２３】
Ｓ２３０７：把持対象物接触面群生成部１０３は、把持機構接触面群ｉの一方の平面要素が、把持対象物形状近似データの平面要素ｊと対向するように、回転変換を行う。すなわち、把持機構接触面群ｉの一方の平面要素の法線ベクトルと、把持対象物形状近似データの平面要素ｊの法線ベクトルとの内積が、−１となるように、いずれか一方若しくは両方の平面要素の位置及び姿勢を回転させる変換処理を行う。
【０１２４】
Ｓ２３０８：把持対象物接触面群生成部１０３は、把持対象物形状近似データ１１４に含まれる各平面要素番号を指すインデックスｋを０に設定する。
【０１２５】
Ｓ２３０９：把持対象物接触面群生成部１０３は、インデックスｋが、把持対象物形状近似データ１１４に含まれる平面要素の総数Ｍよりも小さいか否かを判定する。Ｍより小さい場合（Ｓ２３０９：ＹＥＳ）、処理をＳ２３１１に進める。Ｍ以上の場合（Ｓ２３０９：ＮＯ）、処理をＡ（Ｓ２３１０）に進める。
【０１２６】
Ｓ２３１０：把持対象物接触面群生成部１０３は、インデックスｊを１カウントアップする。そして、処理をＳ２３０５に戻す。
【０１２７】
Ｓ２３１１：把持対象物接触面群生成部１０３は、インデックスｊがインデックスｋと等しくないか否かを判定する。等しくない場合（Ｓ２３１１：ＹＥＳ）、処理をＳ２３１２に進める。等しい場合（Ｓ２３１１：ＮＯ）、処理をＳ２３１４に進める。
【０１２８】
Ｓ２３１２：把持対象物接触面群生成部１０３は、把持対象物形状近似データの平面要素ｊと平面要素ｋとの組み合わせが、把持対象物接触面群として特定済みか否かを判定する。すなわち、把持対象物接触面群データ１１６に含まれているか否かを判定する。特定済みでない場合（Ｓ２３１２：ＮＯ）、処理をＳ２３１３に進める。特定済みである場合（Ｓ２３１２：ＹＥＳ）、処理をＳ２３１４に進める。
【０１２９】
Ｓ２３１３：把持対象物接触面群生成部１０３は、把持機構接触面群ｉの他方の平面要素が、把持対象物形状近似データの平面要素ｋと対向するか否かを判定する。すなわち、把持機構接触面群ｉの他方の平面要素の法線ベクトルと、平面要素ｋの法線ベクトルとの内積が−１であるか否かを判定する。対向する場合（Ｓ２３１３：ＹＥＳ）、処理をＳ２３１５に進める。対向しない場合（Ｓ２３１３：ＮＯ）、処理をＳ２３１４に進める。
【０１３０】
Ｓ２３１４：把持対象物接触面群生成部１０３は、インデックスｋを１カウントアップする。そして、処理をＳ２３０９に戻す。
【０１３１】
Ｓ２３１５：把持対象物接触面群生成部１０３は、平面要素ｉと平面要素ｋとの組み合わせを、把持機構接触面群ｉと関連付けて、把持対象物接触面群データ１１６に記録する。把持対象物接触面群データ１１６は、例えば、図１７に示すように、把持対象物接触面群を特定する把持対象物接触面群番号ごとに、当該把持対象物接触面群を構成する平面要素の平面要素番号と、当該把持対象物接触面群を把持可能な把持機構接触面群の把持機構接触面群番号と、を含む。
【０１３２】
Ｓ２３１６：把持対象物接触面群生成部１０３は、把持機構接触面群ｉに関連付けられた把持対象物接触面群の総数を示す変数ｃｏｕｎｔ［ｉ］を１インクリメントする。そして、処理をＢ（Ｓ２３１４）に戻す。
【０１３３】
以上のようにして、把持対象物接触面群データが生成される。
【０１３４】
図１８は、把持対象物接触面群選択処理の一例を示すフロー図である。
【０１３５】
Ｓ３１０：把持対象物接触面群選択部１０５は、障害物データ１１９を記憶部から取得する。
【０１３６】
Ｓ３２０：把持対象物接触面群選択部１０５は、把持対象物接触面群データ１１６を記憶部から取得する。
【０１３７】
Ｓ３３０：把持対象物接触面群選択部１０５は、把持対象物位置姿勢データ１１８を記憶部から取得する。
【０１３８】
Ｓ３４０：把持対象物接触面群選択部１０５は、把持対象物位置姿勢データ１１８から特定される把持対象物の位置及び姿勢（作業空間上の床などの基準面に置かれた状態の位置及び姿勢）となるように、各把持対象物接触面群の位置及び姿勢を計算する。
【０１３９】
Ｓ３５０：把持対象物接触面群選択部１０５は、Ｓ３４０で計算した位置及び姿勢において、障害物と干渉しない（障害物に隠れたり覆われたりしない）把持対象物接触面群を特定する。ここで、障害物と干渉しない接触面群とは、例えば、図１９に示すように、把持対象物が床の上に置かれている場合、当該床と接する面ａｆｍｒを含む接触面群以外の接触面群である。
【０１４０】
Ｓ３４０〜Ｓ３５０の詳細を、図２０を参照して説明する。図２０は、障害物と干渉しない把持対象接触面群を選択する処理の一例を示すフロー図である。
【０１４１】
Ｓ３５０１：把持対象物接触面群選択部１０５は、選択された把持対象物接触面群データ１２０に記録される把持対象物接触面群の番号示すインデックスｋを０に設定する。
【０１４２】
Ｓ３５０２：把持対象物接触面群選択部１０５は、把持対象物接触面群データ１１６に含まれる各把持対象物接触面群を指すインデックスｉを０に設定する。
【０１４３】
Ｓ３５０３：把持対象物接触面群選択部１０５は、インデックスｉが、把持対象物接触面群データ１１６に含まれる把持対象物接触面群の総数Ｎより小さいか否かを判定する。Ｎより小さい場合（Ｓ３５０３：ＹＥＳ）、処理をＳ３５０４に進める。Ｎ以上の場合（Ｓ３５０３：ＮＯ）、本フローを終了する。
【０１４４】
Ｓ３５０４：把持対象物接触面群選択部１０５は、把持対象物接触面群ｉを構成する平面要素が、把持対象物の位置及び姿勢となるように、回転並進変換を行う。すなわち、Ｓ３３０で取得した把持対象物位置姿勢データ１１８から特定される把持対象物の位置及び姿勢（作業空間上の床などの基準面に置かれた状態の位置及び姿勢）となるように、把持対象物接触面群ｉを回転させたり、並進させたりする変換処理を行う。
【０１４５】
Ｓ３５０５：把持対象物接触面群選択部１０５は、回転並進変換された把持対象物接触面群ｉを構成する各平面要素と、把持対象物が置かれている床との距離が、十分に離れているか否かを判定する。例えば、把持対象物接触面群ｉを構成する平面要素の少なくとも一つが、床の方向を向いており（対向していなくてもよい）、当該平面要素と床の間の距離が所定距離より小さい場合に、十分離れていないと判定することができる。床の領域は、障害物データ１１９から特定することができる。床と十分に離れている場合（Ｓ３５０５：ＹＥＳ）、処理をＳ３５０６に進める。床と十分に離れていない場合（Ｓ３５０５：ＮＯ）、処理をＡ（Ｓ３５１０）に進める。
【０１４６】
Ｓ３５０６：把持対象物接触面群選択部１０５は、回転並進変換された把持対象物接触面群ｉを構成する各平面要素と、周辺機器との距離が、十分に離れているか否かを判定する。周辺機器とは、例えば、把持対象物に加工を施すための装置などである。例えば、把持対象物接触面群ｉを構成する平面要素の少なくとも一つが、周辺機器の方向を向いており（対向していなくてもよい）、当該平面要素と周辺機器の間の距離が所定距離より小さい場合に、十分離れていないと判定することができる。周辺機器の領域は、障害物データ１１９から特定することができる。周辺機器と十分に離れている場合（Ｓ３５０６：ＹＥＳ）、処理をＳ３５０７に進める。周辺機器と十分に離れていない場合（Ｓ３５０６：ＮＯ）、処理をＡ（Ｓ３５１０）に進める。
【０１４７】
Ｓ３５０７：把持対象物接触面群選択部１０５は、回転並進変換された把持対象物接触面群ｉを構成する各平面要素と、その他の部材との距離が、十分に離れているか否かを判定する。その他の部材は、例えば、把持対象物の周辺に置かれた他の把持対象物や、ロボット１自身などである。例えば、把持対象物接触面群ｉを構成する平面要素の少なくとも一つが、その他の部材の方向を向いており（対向していなくてもよい）、当該平面要素とその他の部材の間の距離が所定距離より小さい場合に、十分離れていないと判定することができる。その他の部材の領域は、障害物データ１１９から特定することができる。その他の部材と十分に離れている場合（Ｓ３５０７：ＹＥＳ）、処理をＳ３５０８に進める。その他の部材と十分に離れていない場合（Ｓ３５０７：ＮＯ）、処理をＡ（Ｓ３５１０）に進める。
【０１４８】
Ｓ３５０８：把持対象物接触面群選択部１０５は、把持対象物接触面群ｉを、選択された把持対象物接触面群ｋとして、選択された把持対象物接触面群データ１２０に記録する。選択された把持対象物接触面群データ１２０は、例えば、図２１に示すように、把持対象物接触面群を特定する把持対象物接触面群番号ごとに、当該把持対象物接触面群を構成する平面要素の平面要素番号と、当該把持対象物接触面群を把持可能な把持機構接触面群の把持機構接触面群番号と、を含む。図１７と比較して、障害物と干渉する平面要素を含む把持対象物接触面群以外のデータが選択されていることが分かる。
【０１４９】
Ｓ３５０９：把持対象物接触面群選択部１０５は、インデックスｋを１カウントアップする。そして、処理をＡ（Ｓ３５１０）に進める。
【０１５０】
Ｓ３５１０：把持対象物接触面群選択部１０５は、インデックスｉを１カウントアップする。そして、処理をＳ３５０３に戻す。
【０１５１】
以上のようにして、選択された把持対象物接触面群データが生成される。
【０１５２】
図２２は、把持機構動作量算出処理の一例を示すフロー図である。
【０１５３】
Ｓ４１０：把持機構動作量算出部１０６は、選択された把持対象物接触面群データ１２０を記憶部から取得する。
【０１５４】
Ｓ４２０：把持機構動作量算出部１０６は、把持機構動作範囲データ１２１を記憶部から取得する。
【０１５５】
Ｓ４３０：把持機構動作量算出部１０６は、把持機構接触面群データ１１５を記憶部から取得する。
【０１５６】
Ｓ４４０：把持機構動作量算出部１０６は、各把持機構接触面群を構成する平面要素間隔δと、各把持対象物接触面群を構成する平面要素間隔Δとが一致する把持機構の動作量を算出する。例えば、図２３に示すように、把持機構接触面群が指Ａの平面要素（節点１、２、６、５）と指Ｂの平面要素（節点０、３、７、４）とで構成されている場合、平面要素間隔δは、これらの平面要素を対向させた場合の平面要素間の直線距離（最短距離）となる。また、把持対象物接触面群が平面要素（節点ａｂｎｍ）と平面要素（節点ｄｅｑｐ）とで構成されている場合、平面要素間隔Δは、これらの対向させた場合の平面要素間の直線距離（最短距離）となる。動作量は、例えば、間隔δを、基準となる所定の間隔から間隔Δまで開く又は閉じるための移動量である。
【０１５７】
Ｓ４４０の詳細を、図２４を参照して説明する。図２４は、把持機構動作量を特定する処理の一例を示すフロー図である。
【０１５８】
Ｓ４４０１：把持機構動作量算出部１０６は、選択された把持対象物接触面群データ１２０に含まれる各把持対象物接触面群を指すインデックスｉを０に設定する。
【０１５９】
Ｓ４４０２：把持機構動作量算出部１０６は、インデックスｉが、選択された把持対象物接触面群データ１２０に含まれる把持対象物接触面群の総数Ｎより小さいか否かを判定する。Ｎより小さい場合（Ｓ４４０２：ＹＥＳ）、処理をＳ４４０３に進める。Ｎ以上の場合（Ｓ４４０２：ＮＯ）、本フローを終了する。
【０１６０】
Ｓ４４０３：把持機構動作量算出部１０６は、把持対象物接触面群ｉの平面要素間隔Δを計算する。
【０１６１】
Ｓ４４０４：把持機構動作量算出部１０６は、Ｓ４２０で取得した把持機構動作範囲データ１２１に基づいて、平面要素間隔Δが、把持対象物接触面群ｉに関連付けられた把持機構接触面群の可動範囲内で把持できるか否かを判定する。例えば、把持対象物接触面群ｉに関連付けられた把持機構接触面群の平面要素の最小の間隔をδｍｉｎ、最大の間隔をδｍａｘとすると、δｍｉｎ＜間隔Δ＜δｍａｘであれば、可動範囲内で把持できると判定することができる。可動範囲内である場合（Ｓ４４０４：ＹＥＳ）、処理をＳ４４０５に進める。可動範囲内でない場合（Ｓ４４０４：ＮＯ）、処理をＳ４４０６に進める。
【０１６２】
Ｓ４４０５：把持機構動作量算出部１０６は、間隔Δとなるような動作量を、把持対象物接触面群ｉに関連付けられた把持機構接触面群の動作量として設定し、把持機構動作量データ１２２に記録する。把持機構動作量データ１２２は、例えば、把持対象物接触面群を特定する把持対象物接触面群番号ごとに、当該把持対象物接触面群を構成する平面要素の平面要素番号と、当該把持対象物接触面群を把持する把持機構接触面群の把持機構接触面群番号と、当該把持機構接触面群の動作量を含む。
【０１６３】
Ｓ４４０６：把持機構動作量算出部１０６は、無効（把持できないこと示す情報）を、把持対象物接触面群ｉに関連付けられた把持機構接触面群の動作量として設定し、把持機構動作量データ１２２に記録する。
【０１６４】
Ｓ４４０７：把持機構動作量算出部１０６は、インデックスｉを１インクリメントする。そして、処理をＳ４４０２に戻す。
【０１６５】
以上のようにして、把持機構動作量データが生成される。なお、上記では、動作量として把持機構接触面群の平面要素の間隔を例示しているが、これに限られない。
【０１６６】
図２５は、把持機構位置姿勢設定処理の一例を示すフロー図である。
【０１６７】
Ｓ５１０：把持機構位置姿勢設定部１０７は、予め用意された又は生成された把持機構形状近似データ１１３を記憶部から取得する。
【０１６８】
Ｓ５２０：把持機構位置姿勢設定部１０７は、予め用意された又は生成された把持対象物形状近似データ１１４を記憶部から取得する。
【０１６９】
Ｓ５３０：把持機構位置姿勢設定部１０７は、障害物データ１１９を記憶部から取得する。
【０１７０】
Ｓ５４０：把持機構位置姿勢設定部１０７は、選択された把持対象物接触面群データ１２０を記憶部から取得する。
【０１７１】
Ｓ５５０：把持機構位置姿勢設定部１０７は、把持対象物位置姿勢データ１１８を記憶部から取得する。
【０１７２】
Ｓ５６０：把持機構位置姿勢設定部１０７は、把持機構動作量データ１２２を記憶部から取得する。
【０１７３】
Ｓ５７０：把持機構位置姿勢設定部１０７は、ロボット１及び把持機構と、それ以外のものとが干渉しない把持機構の位置及び姿勢を算出する。
【０１７４】
Ｓ５７０の詳細を、図２６〜２７を参照して説明する。図２６は、障害物と干渉しない把持機構の位置及び姿勢を特定する処理の一例を示すフロー図（その１）である。図２７は、障害物と干渉しない把持機構の位置及び姿勢を特定する処理の一例を示すフロー図（その２）である。
【０１７５】
Ｓ５７０１：把持機構位置姿勢設定部１０７は、選択された把持対象物接触面群データ１２０と把持機構動作量データ１２２とに基づいて、選択された把持対象物接触面群データ１２０に含まれる把持対象物接触面群のうち、関連付けられた把持機構接触面群の動作量が無効でない各把持対象物接触面群を指すインデックスｉを０に設定する。
【０１７６】
Ｓ５７０２：把持機構位置姿勢設定部１０７は、インデックスｉが、選択された把持対象物接触面群データ１２０に含まれる把持対象物接触面群のうち、関連付けられた把持機構接触面群の動作量が無効でない把持対象物接触面群の総数Ｎより小さいか否かを判定する。Ｎより小さい場合（Ｓ５７０２：ＹＥＳ）、処理をＳ５７０３に進める。Ｎ以上の場合（Ｓ５７０２：ＮＯ）、本フローを終了する。
【０１７７】
Ｓ５７０３：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉに関連付けられた把持機構接触面群（以下、「把持機構接触面群ｉ」という）で、把持対象物接触面群ｉを把持可能な位置及び姿勢の総数を示す変数ｃｏｕｎｔ［ｉ］を０に設定する。
【０１７８】
Ｓ５７０４：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉの基準の軸と、把持機構接触面群ｉの基準の軸とが、平行になる把持機構の初期位置及び初期姿勢を計算する。
【０１７９】
ここで、把持対象物接触面群ｉの軸は、例えば、図２８に示すように、把持対象物接触面群ｉを構成する平面要素間の直線距離（最短距離）Δ１と平行な軸Ａである。軸Ａの位置は、特に限定されないが、例えば、少なくともいずれか一方の平面要素あるいは平面要素の重心を通過する位置とすることができる。把持機構接触面群ｉの軸は、把持機構接触面群ｉを構成する平面要素間の直線距離（最短距離）δ１と平行な軸ａである。軸ａの位置は、特に限定されないが、例えば、少なくともいずれか一方の平面要素あるいは平面要素の重心を通過する位置とすることができる。本フローにおいては、δ１＝Δ１に設定して処理を行う。
【０１８０】
また、平行とは、例えば、図２８に示すように、軸Ａと軸ａが平行であり、かつ、軸Ａと軸ａの対応する側の節点同士を結ぶ直線が、各軸と直交する状態をいうものとする。すなわち、軸Ａと軸ａが向かい合う辺をなす矩形の４つの角は、全て９０度となる。
【０１８１】
なお、初期位置及び初期姿勢における軸Ａと軸ａの相対的な距離や、軸Ａと軸ａの相対的な位関係は、特に限定されないが、例えば、把持対象物位置姿勢データ１１８から特定される現在の把持対象物の位置における軸Ａの位置と、現在のロボット１のハンドの位置における軸ａの位置とすることができる。
【０１８２】
Ｓ５７０５：把持機構位置姿勢設定部１０７は、ハンド８の角度θを０に設定する。ここで、角度θは、例えば、図２９（把持対象物及び把持機構を側面から見ている）に示すように、軸ａを基準に、把持機構接触面群ｉを初期角度（θ＝０）から回転させる角度である。初期角度は、特に限定されないが、例えば、床に対してハンドが水平となる角度とすることができる。
【０１８３】
Ｓ５７０６：把持機構位置姿勢設定部１０７は、角度θが所定角度（例えば、３６０度）より小さいか否かを判定する。所定角度より小さい場合（Ｓ５７０６：ＹＥＳ）、処理をＳ５７０７に進める。所定角度以上の場合（Ｓ５７０６：ＮＯ）、処理をＤ（図２７のＳ５７２６）に進める。
【０１８４】
Ｓ５７０７：把持機構位置姿勢設定部１０７は、把持機構接触面群ｉを角度θだけ回転させたときの、把持機構形状を計算する。すなわち、把持機構接触面群ｉを構成する平面要素を角度θだけ回転させたときの、作業空間中のハンド８が占める領域の形状を算出する。
【０１８５】
Ｓ５７０８：把持機構位置姿勢設定部１０７は、Ｓ５７０７で算出した角度θ回転した把持機構接触面群ｉの位置及び姿勢のときの把持機構形状を並進させる方向と距離を示すインデックスｊを０に設定する。
【０１８６】
Ｓ５７０９：把持機構位置姿勢設定部１０７は、インデックスｊが、把持機構形状を並進させる方向と距離の総数Ｍより小さいか否かを判定する。Ｍより小さい場合（Ｓ５７０９：ＹＥＳ）、処理をＳ５７１１に進める。Ｍ以上の場合（Ｓ５７０９：ＮＯ）、処理をＣ（Ｓ５７１０）に進める。
【０１８７】
ここで、把持機構形状を並進させる方向と距離とは、把持機構と把持対象物を平行に保ったまま、把持機構を初期位置姿勢から把持対象物に向かって移動（並進）させる方向と距離である。例えば、図２９に示すように、方向と距離（Ｘｊ、Ｙｊ、Ｚｊ）は、軸ａが把持対象物接触面群の平面要素の領域内の任意の点Ｐｊまで移動する方向と距離である。図では、点Ｐ０と当該点に向かう方向と距離（Ｘ０、Ｙ０、Ｚ０）、点Ｐ１と当該点に向かう方向と距離（Ｘ１、Ｙ１、Ｚ１）、点Ｐ２と当該点に向かう方向と距離（Ｘ２、Ｙ２、Ｚ２）が示されている。点Ｐを平面要素の領域内のどの位置に設定するかは、特に限定されないが、例えば、平面要素の重心の周辺など、実際に把持したときに把持対象物がなるべく不安定にならないような位置に複数設定すればよい。
【０１８８】
Ｓ５７１０：把持機構位置姿勢設定部１０７は、角度θに、所定の角度ｄθ（例えば、１０度）を加えたものを新しい角度θとする。そして、処理をＳ５７０６に戻す。
【０１８９】
Ｓ５７１１：把持機構位置姿勢設定部１０７は、Ｓ５７０７で算出した把持機構形状を並進させる方向と距離（Ｘ、Ｙ、Ｚ）を、点Ｐｊに対応する（Ｘｊ、Ｙｊ、Ｚｊ）に設定する。
【０１９０】
Ｓ５７１２：把持機構位置姿勢設定部１０７は、Ｓ５７０７で算出した把持機構形状を、軸ａの位置から（Ｘ、Ｙ、Ｚ）だけ並進させる。
【０１９１】
Ｓ５７１３：把持機構位置姿勢設定部１０７は、Ｓ５７１２で（Ｘ、Ｙ、Ｚ）だけ並進をさせた状態において、把持機構とロボット全体がとる位置及び姿勢を特定するとともに、そのときの把持機構とロボット全体の形状が占める空間上の領域を特定し、当該領域が、障害物（例えば、床、周辺機器など、把持対象物以外のロボットの周辺の物）に干渉しないか否かを判定する。
【０１９２】
なお、把持機構形状の並進の開始から終了までの間、把持機構とロボット全体がとる位置及び姿勢と形状が占める一連の領域とを特定し、障害物（例えば、床、周辺機器など、把持対象物以外のロボットの周辺の物）に干渉しないか否かを判定するようにしてもよい。
【０１９３】
把持機構形状が障害物に干渉しない場合（Ｓ５７１３：ＹＥＳ）、把持機構位置姿勢設定部１０７は、処理をＳ５７１４に進める。干渉する場合（Ｓ５７１３：ＮＯ）、処理をＳ５７１５に進める。
【０１９４】
Ｓ５７１４：把持機構位置姿勢設定部１０７は、把持機構接触面群ｉを構成する各平面要素と、把持対象物接触面群ｉを構成する各平面要素とが、互いに交差するか否かを判定する。交差する場合（Ｓ５７１４：ＹＥＳ）、処理をＳ５７１６に進める。交差しない場合（Ｓ５７１４：ＮＯ）、処理をＳ５７１５に進める。
【０１９５】
Ｓ５７１５：把持機構位置姿勢設定部１０７は、インデックスｊを１インクリメントする。
【０１９６】
Ｓ５７１６：把持機構位置姿勢設定部１０７は、インデックスｋを０に設定する。インデックスｋは、インデックスｉと同様である。
【０１９７】
Ｓ５７１７：把持機構位置姿勢設定部１０７は、インデックスｋがＮより小さいか否かを判定する。Ｎより小さい場合（Ｓ５７１７：ＹＥＳ）、処理をＳ５７１８に進める。Ｎ以上の場合（Ｓ５７１７：ＮＯ）、処理をＢ（図２７のＳ５７２４）に進める。
【０１９８】
Ｓ５７１８：把持機構位置姿勢設定部１０７は、インデックスｋがインデックスｉと等しくないか否かを判定する。インデックスｉと等しくない場合（Ｓ５７１８：ＹＥＳ）、処理をＳ５７２０に進める。インデックスｉと等しい場合（Ｓ５７１８：ＮＯ）、処理をＳ５７１９に進める。
【０１９９】
Ｓ５７１９：把持機構位置姿勢設定部１０７は、インデックスｋを１インクリメントする。そして、処理をＳ５７１７に戻す。
【０２００】
Ｓ５７２０：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｋを構成する平面要素と、把持対象物接触面群ｉを構成する平面要素とが一致する否かを判定する。一致する場合（Ｓ５７２０：ＹＥＳ）、処理をＳ５７２１に進める。一致しない場合（Ｓ５７２０：ＮＯ）、処理をＳ５７１９に戻す。
【０２０１】
Ｓ５７２１：把持機構位置姿勢設定部１０７は、Ｓ５７１２で（Ｘ、Ｙ、Ｚ）だけ並進をさせた状態の把持機構形状において、把持機構接触面群ｋを構成する各平面要素と、把持対象物接触面群ｉを構成する各平面要素とが、互いに交差するか否かを判定する。交差する場合（Ｓ５７２１：ＹＥＳ）、処理をＡ（図２７のＳ５７２２）に進める。交差しない場合（Ｓ５７２１：ＮＯ）、処理をＳ５７１９に戻す。
【０２０２】
Ｓ５７２２：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉについて、把持機構接触面群ｉ及びｋと、把持機構の位置及び姿勢（Ｘｊ、Ｙｊ、Ｚｊ、θ）とを関連付けて、把持機構位置姿勢データ１２３に記録する。把持機構位置姿勢データ１２３は、例えば、把持対象物接触面群を特定する把持対象物接触面群番号ごとに、当該把持対象物接触面群を構成する平面要素の平面要素番号と、当該把持対象物接触面群を把持可能な把持機構接触面群の把持機構接触面群番号及びその把持機構の位置及び姿勢（Ｘｊ、Ｙｊ、Ｚｊ、θ）と、を含む。
【０２０３】
Ｓ５７２３：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉを把持可能な把持機構接触面群ｉの位置及び姿勢の総数を示す変数ｃｏｕｎｔ［ｉ］を、１インクリメントする。そして、処理をＣ（Ｓ５７１０）に戻す。
【０２０４】
Ｓ５７２４：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉについて、把持機構接触面群ｉと、把持機構の位置及び姿勢（Ｘｊ、Ｙｊ、Ｚｊ、θ）とを関連付けて、把持機構位置姿勢データ１２３に記録する。
【０２０５】
Ｓ５７２５：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉを把持可能な把持機構接触面群ｉの位置及び姿勢の総数を示す変数ｃｏｕｎｔ［ｉ］を、１インクリメントする。そして、処理をＣ（Ｓ５７１０）に戻す。
【０２０６】
Ｓ５７２６：把持機構位置姿勢設定部１０７は、ｃｏｕｎｔ［ｉ］が０より大きいか否かを判定する。０より大きい場合（Ｓ５７２６：ＹＥＳ）、処理をＳ５７２７に進める。０である場合（Ｓ５７２６：ＮＯ）、処理をＳ５７２８に進める。
【０２０７】
Ｓ５７２７：把持機構位置姿勢設定部１０７は、把持対象物接触面群ｉについて、無効（把持不可能）であることを示す情報を記録する。そして、処理をＳ５７２８に進める。
【０２０８】
Ｓ５７２８：把持機構位置姿勢設定部１０７は、インデックスｉを１インクリメントする。そして、処理をＥ（Ｓ５７０２）に戻す。
【０２０９】
以上のようにして、把持機構位置姿勢データが生成される。なお、上記のフローでは、一つの軸ａの位置について角度θを変更して把持機構の位置及び姿勢を探索しているが、軸ａの位置を複数の位置に変更し、各軸ａの位置ごとに角度θを変更して把持機構の位置及び姿勢を探索するようにしてもよい。軸ａの位置は、例えば、作業空間の任意の位置とすることができる。
【０２１０】
なお、コントローラー１０は、生成された把持機構位置姿勢データに基づいて、いずれかの、把持対象物接触面群とそれに関連付けられた把持機構接触面群及び把持機構の位置及び姿勢（Ｘｊ、Ｙｊ、Ｚｊ、θ）を選択し、ハンド８がこの把持位置及び把持姿勢となるように、ハンド８を実際に動作させる。
【０２１１】
上述のフローの各処理単位は、ロボット１の処理を理解容易にするために、主な処理内容に応じて分割したものである。処理単位の分割の仕方や名称によって、本願発明が制限されることはない。ロボット１の処理は、処理内容に応じて、さらに多くの処理単位に分割することもできる。また、１つの処理単位がさらに多くの処理を含むように分割することもできる。
【０２１２】
以上、本発明の一実施形態の一例について説明した。本実施形態によれば、障害物等と接触することなく把持対象物を把持可能な把持位置及び把持姿勢を決定することができる。
【０２１３】
例えば、本実施形態では、障害物と干渉していない把持対象物接触面群が選択される。また、選択された把持対象物接触面群に中から、把持機構の動作範囲で把持可能な把持対象物接触面群が特定される。また、特定された把持対象物接触面群を把持機構が把持するときに、把持機構が取り得る様々な位置及び姿勢のうち、ロボットや把持機構が障害物と干渉しない把持機構の位置及び姿勢が特定される。このような構成により、ロボットが障害物等と接触することなく把持対象物を把持可能な把持位置及び把持姿勢を決定することができる。また、把持対象物が障害物と干渉していたり、障害物に隠れていたりしても、把持対象物を把持可能な把持位置及び把持姿勢を決定することができる。
【０２１４】
また、例えば、本実施形態では、把持位置及び把持姿勢を特定する前に、把持対象物接触面群のうち、障害物と干渉しておらず、かつ把持機構の動作範囲で把持可能なものが、候補として抽出される。このような構成により、把持位置及び把持姿勢を特定する際の処理回数が削減され、演算負荷が軽減される。また、各角度の把持機構の位置及び姿勢ごとに、障害物に干渉しないものが一つでも見つかれば、その角度の位置及び姿勢を特定する処理を終了するので、処理回数が削減され、演算負荷が軽減される。
【０２１５】
なお、上記の本発明の実施形態は、本発明の要旨と範囲を例示することを意図し、限定するものではない。多くの代替物、修正および変形例が当業者にとって明らかである。
【０２１６】
また、例えば、上記の実施形態では、ロボット自身が自律的に把持位置及び把持姿勢を決定しているが、コントローラー１０の機能の少なくとも一部を、ロボットが通信可能な外部装置やシステムにおいて行ってもよい。すなわち、ロボットとシステムとで機能を分散し、協働することによりロボットの制御が行われるようにしてもよい。
【符号の説明】
【０２１７】
１：ロボット、２：頭部、３：胴体部、４：脚部、５：アーム、６：ジョイント、７：リンク、８：ハンド、９：指、１０：コントローラー、１１：ＣＰＵ、１２：ＲＡＭ、１３：ＲＯＭ、１４：Ｉ／Ｆ回路、１５：通信装置、２０：撮像部、３０：可動部、３１：アクチュエーター、３２：センサー、１０１：形状近似部、１０２：把持機構接触面群生成部、１０３：把持対象物接触面群生成部、１０４：把持対象物位置姿勢取得部、１０５：把持対象物接触面群選択部、１０６：把持機構動作量算出部、１０７：把持機構位置姿勢設定部、１１１：把持機構形状データ、１１２：把持対象物形状データ、１１３：把持機構形状近似データ、１１４：把持対象物形状近似データ、１１５：把持機構接触面群データ、１１６：把持対象物接触面群データ、１１７：把持対象物認識処理データ、１１８：把持対象物位置姿勢データ、１１９：障害物データ、１２０：選択された把持対象物接触面群データ、１２１：把持機構動作範囲データ、１２２：把持機構動作量データ、１２３：把持機構位置姿勢データ
【図１】
2013111696.tif 000003
【図２】
2013111696.tif 000004
【図３】
2013111696.tif 000005
【図４】
2013111696.tif 000006
【図５】
2013111696.tif 000007
【図６】
2013111696.tif 000008
【図７】
2013111696.tif 000009
【図８】
2013111696.tif 000010
【図９】
2013111696.tif 000011
【図１０】
2013111696.tif 000012
【図１１】
2013111696.tif 000013
【図１２】
2013111696.tif 000014
【図１３】
2013111696.tif 000015
【図１４】
2013111696.tif 000016
【図１５】
2013111696.tif 000017
【図１６】
2013111696.tif 000018
【図１７】
2013111696.tif 000019
【図１８】
2013111696.tif 000020
【図１９】
2013111696.tif 000021
【図２０】
2013111696.tif 000022
【図２１】
2013111696.tif 000023
【図２２】
2013111696.tif 000024
【図２３】
2013111696.tif 000025
【図２４】
2013111696.tif 000026
【図２５】
2013111696.tif 000027
【図２６】
2013111696.tif 000028
【図２７】
2013111696.tif 000029
【図２８】
2013111696.tif 000030
【図２９】
2013111696.tif 000031