(57)【特許請求の範囲】
【請求項１】
処理部と、
描画処理を行う描画部と、
衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部と、
を含み、
前記視点設定部は、
前記視点として、前記衝突検出対象オブジェクトの外殻内面上又は前記衝突検出対象オブジェクトの内部に、第１〜第Ｎの視点を設定し、
前記描画部は、
前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出システム。
【請求項２】
請求項１において、
前記視点設定部は、
前記第１〜第Ｎの視点により前記衝突検出対象オブジェクトの全ての外殻内面を見渡せるように、前記第１〜第Ｎの視点を設定することを特徴とする衝突検出システム。
【請求項３】
処理部と、
描画処理を行う描画部と、
衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部と、
を含み、
前記処理部は、
前記衝突検出対象オブジェクトの形状を変更する変形処理を行い、
前記視点設定部は、
前記変形処理後の前記衝突検出対象オブジェクトに対して前記視点を設定し、
前記描画部は、
前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出システム。
【請求項４】
請求項３において、
前記処理部は、
前記変形処理として、前記変形処理後の前記衝突検出対象オブジェクトに、前記変形処理前の前記衝突検出対象オブジェクトを内包させる膨張処理を行い、
前記視点設定部は、
前記膨張処理後の前記衝突検出対象オブジェクトに対して前記視点を設定することを特徴とする衝突検出システム。
【請求項５】
請求項３において、
前記処理部は、
前記変形処理として、前記変形処理後の前記衝突検出対象オブジェクトを、前記変形処理前の前記衝突検出対象オブジェクトに比べて簡略化された形状に設定する形状簡略化処理を行い、
前記視点設定部は、
前記形状簡略化処理後の前記衝突検出対象オブジェクトに対して前記視点を設定することを特徴とする衝突検出システム。
【請求項６】
請求項５において、
前記処理部は、
前記衝突検出対象オブジェクトの形状を円柱形状又は角柱形状とする前記形状簡略化処理を行い、
前記視点設定部は、
前記視点として、前記円柱形状又は前記角柱形状の上面に第１の視点を設定し、底面に第２の視点を設定することを特徴とする衝突検出システム。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記処理部は、
前記第１の描画処理により生成された第１の画像と、前記第２の描画処理により生成された第２の画像との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項８】
請求項１乃至６のいずれかにおいて、
前記処理部は、
前記第１の描画処理での描画ピクセル数情報と、前記第２の描画処理での描画ピクセル数情報との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項９】
請求項８において、
前記描画ピクセル数情報は、描画ピクセルカウンターのカウンター値であり、
前記処理部は、
前記第１の描画処理後の前記描画ピクセルカウンターのカウンター値と、前記第２の描画処理後の前記描画ピクセルカウンターのカウンター値との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項１０】
請求項１乃至９のいずれかにおいて、
前記描画部は、
前記第１の描画処理と前記第２の描画処理の各描画処理において、前記衝突検出対象オブジェクト又は前記他のオブジェクトを、前記視点での透視投影で描画することを特徴とする衝突検出システム。
【請求項１１】
請求項１乃至１０のいずれかにおいて、
前記深度値を記憶する深度バッファーを含むことを特徴とする衝突検出システム。
【請求項１２】
請求項１乃至１１のいずれかにおいて、
前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであることを特徴とする衝突検出システム。
【請求項１３】
請求項１乃至１２のいずれかに記載の衝突検出システムを含むことを特徴とするロボットシステム。
【請求項１４】
衝突検出対象オブジェクトの外殻内面を見る視点として、前記衝突検出対象オブジェクトの外殻内面上又は前記衝突検出対象オブジェクトの内部に、第１〜第Ｎの視点を設定し、
設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出方法。
【請求項１５】
衝突検出対象オブジェクトの形状を変更する変形処理を行い、
前記変形処理後の前記衝突検出対象オブジェクトの外殻内面を見る視点を設定し、
設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出方法。
【請求項１６】
処理部と、
描画処理を行う描画部と、
衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部として、
コンピューターを機能させ、
前記視点設定部は、
前記視点として、前記衝突検出対象オブジェクトの外殻内面上又は前記衝突検出対象オブジェクトの内部に、第１〜第Ｎの視点を設定し、
前記描画部は、
前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とするプログラム。
【請求項１７】
処理部と、
描画処理を行う描画部と、
衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部として、
コンピューターを機能させ、
前記処理部は、
前記衝突検出対象オブジェクトの形状を変更する変形処理を行い、
前記視点設定部は、
前記変形処理後の前記衝突検出対象オブジェクトに対して前記視点を設定し、
前記描画部は、
前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、
生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等に関する。
【背景技術】
【０００２】
物体間の衝突や近接の有無を判定することは多くの分野で必要とされている。例えばロボットなどの分野において、衝突の発生は非常に大きな問題となる。このため、従来より、実際に衝突が発生する以前に、衝突の有無や、許容された以上の近接を、コンピューターによる計算により判定する手法が研究、開発されている。このような衝突判定手法の従来技術としては、例えば特許文献１、２等に開示される技術が知られている。
【０００３】
特許文献１の手法は、その図６のフローチャートに示されている。この従来技術では、物体（オブジェクト）の３次元の配置を、横（Ｘ）と縦（Ｙ）の２次元位置と、その位置に対応する深度値（Ｚ値）として記憶する装置において、プリミティブを逐次的にレンダリングする。そして、そのレンダリングの過程で同一深度値を持つもの、つまり３次元空間的に同じ位置を占めるものが現れれば、それを衝突と判定する。
【０００４】
特許文献２の手法は、その図２、図３により説明されている。この従来技術では、ポリゴンの原点から、そのポリゴンのある方向の面までの距離を予め計算し、キューブマップとして保存する。そして、原点から衝突検出の対象となる物体との距離と、キューブマップに記憶された距離との大小により、衝突を判定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２０４５４３号公報
【特許文献２】特表２００９−５４５０７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら特許文献１の従来技術では、深度値の更新が、物体を描画する順番に依存するため、衝突の検出漏れが発生する可能性がある。例えば、前方側（手前側）に配置された物体を描画した後で、その後方側（奥側）において別の物体間で衝突が起こったとしても、深度値は既に前方側のオブジェクトの値に更新されているために、それを検出することはできないことになる。
【０００７】
また特許文献２の従来技術では、非凸であるポリゴンの衝突を正確に取り扱うのが困難であるという問題がある。即ち、原点から面までの距離を単一のキューブマップに記憶しているため、ある方向において、そのポリゴンの面が複数ある場合、つまりそのような非凸のポリゴンの場合においては、それを単一のキューブマップとしては表現できないことになる。
【０００８】
本発明の幾つかの態様によれば、衝突検出対象オブジェクトの正確な衝突判定を実現できる衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等を提供できる。
【課題を解決するための手段】
【０００９】
本発明の一態様は、処理部と、描画処理を行う描画部と、衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部と、を含み、前記描画部は、前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、前記処理部は、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出システムに関係する。
【００１０】
本発明の一態様では、衝突検出対象オブジェクトの内面を見る視点を設定し、設定した視点により、衝突検出対象オブジェクトを描画する第１の描画処理と、他のオブジェクトを描画する第２の描画処理を行う。第２の描画処理において、第１の描画処理時に生成した深度値を用いた上で、第１の描画処理と第２の描画処理の結果に基づいて衝突判定を行う。よって、衝突検出対象オブジェクトの深度値に対して、所与の関係を満たす深度値を有する他のオブジェクトを描画することになる。つまり、衝突検出対象オブジェクトに対して所与の位置関係を満たす他のオブジェクトが描画されるため、これらの衝突を判定すること等が可能になる。
【００１１】
また、本発明の一態様では、前記処理部は、前記第１の描画処理により生成された第１の画像と、前記第２の描画処理により生成された第２の画像との比較処理を行うことで、前記衝突判定を行ってもよい。
【００１２】
これにより、２つの画像の比較処理から衝突判定を行うことが可能になる。
【００１３】
また、本発明の一態様では、前記処理部は、前記第１の描画処理での描画ピクセル数情報と、前記第２の描画処理での描画ピクセル数情報との比較処理を行うことで、前記衝突判定を行ってもよい。
【００１４】
これにより、描画処理の結果として画像の生成を行わなくとも、描画ピクセル数情報に基づいた衝突判定が可能になる。
【００１５】
また、本発明の一態様では、前記描画ピクセル数情報は、描画ピクセルカウンターのカウンター値であり、前記処理部は、前記第１の描画処理後の前記描画ピクセルカウンターのカウンター値と、前記第２の描画処理後の前記描画ピクセルカウンターのカウンター値との比較処理を行うことで、前記衝突判定を行ってもよい。
【００１６】
これにより、描画ピクセル数情報として描画ピクセルカウンターのカウンター値を用いた衝突判定が可能になる。
【００１７】
また、本発明の一態様では、前記描画部は、前記第１の描画処理と前記第２の描画処理の各描画処理において、前記衝突検出対象オブジェクト又は前記他のオブジェクトを、前記視点での透視投影で描画してもよい。
【００１８】
これにより、平行投影ではなく透視投影を用いて描画処理を行うことが可能になる。
【００１９】
また、本発明の一態様では、前記視点設定部は、前記衝突検出対象オブジェクトの外殻内面上又は前記衝突検出対象オブジェクトの内部に、前記視点を設定してもよい。
【００２０】
これにより、衝突検出対象オブジェクトの外殻内面を見ることに適した視点を設定すること等が可能になる。
【００２１】
また、本発明の一態様では、前記視点設定部は、前記視点として、前記衝突検出対象オブジェクトの外殻内面上又は前記衝突検出対象オブジェクトの内部に、第１〜第Ｎの視点を設定してもよい。
【００２２】
これにより、視点として複数の視点を設定すること等が可能になる。
【００２３】
また、本発明の一態様では、前記視点設定部は、前記第１〜第Ｎの視点により前記衝突検出対象オブジェクトの全ての外殻内面を見渡せるように、前記第１〜第Ｎの視点を設定してもよい。
【００２４】
これにより、設定した視点により衝突検出対象オブジェクトの外殻内面全てを見渡すことができるため、衝突の見落としを抑止すること等が可能になる。
【００２５】
また、本発明の一態様では、前記深度値を記憶する深度バッファーを含んでもよい。
【００２６】
これにより、深度バッファーを用いて深度値を記憶することが可能になる。
【００２７】
また、本発明の一態様では、前記処理部は、前記衝突検出対象オブジェクトの形状を変更する変形処理を行い、前記視点設定部は、前記変形処理後の前記衝突検出対象オブジェクトに対して前記視点を設定してもよい。
【００２８】
これにより、衝突検出対象オブジェクトを変形することができるため、厳密な衝突に限定されない柔軟な処理を行うこと等が可能になる。
【００２９】
また、本発明の一態様では、前記処理部は、前記変形処理として、前記変形処理後の前記衝突検出対象オブジェクトに、前記変形処理前の前記衝突検出対象オブジェクトを内包させる膨張処理を行い、前記視点設定部は、前記膨張処理後の前記衝突検出対象オブジェクトに対して前記視点を設定してもよい。
【００３０】
これにより、衝突検出対象オブジェクトと他のオブジェクトの接近を検出すること等が可能になる。
【００３１】
また、本発明の一態様では、前記処理部は、前記変形処理として、前記変形処理後の前記衝突検出対象オブジェクトを、前記変形処理前の前記衝突検出対象オブジェクトに比べて簡略化された形状に設定する形状簡略化処理を行い、前記視点設定部は、前記形状簡略化処理後の前記衝突検出対象オブジェクトに対して前記視点を設定してもよい。
【００３２】
これにより、衝突検出対象オブジェクトの形状を簡略化できるため、視点設定処理や描画処理等での処理負荷を軽減すること等が可能になる。
【００３３】
また、本発明の一態様では、前記処理部は、前記衝突検出対象オブジェクトの形状を円柱形状又は角柱形状とする前記形状簡略化処理を行い、前記視点設定部は、前記視点として、前記円柱形状又は前記角柱形状の上面に第１の視点を設定し、底面に第２の視点を設定してもよい。
【００３４】
これにより、視点の位置及び数を容易に決定すること等が可能になる。
【００３５】
また、本発明の一態様では、前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであってもよい。
【００３６】
これにより、ロボットに対する他のオブジェクトの衝突を検出することが可能になる。
【００３７】
本発明の他の態様は、上記のいずれかに記載の衝突検出システムを含むロボットシステムに関係する。
【００３８】
本発明の他の態様は、衝突検出対象オブジェクトの外殻内面を見る視点を設定し、設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出方法に関係する。
【００３９】
本発明の他の態様は、処理部と、描画処理を行う描画部と、衝突検出対象オブジェクトの外殻内面を見る視点を設定する視点設定部として、コンピューターを機能させ、前記描画部は、前記視点設定部で設定された前記視点から見たときの前記衝突検出対象オブジェクトを描画する第１の描画処理を行うとともに、前記衝突検出対象オブジェクトの前記外殻内面のうち、前記第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成し、生成した前記深度値に基づいて、前記衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行い、前記処理部は、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記他のオブジェクトと衝突したか否かを判定する衝突判定を行うプログラムに関係する。
【図面の簡単な説明】
【００４０】
【図１】図１（Ａ）〜図１（Ｃ）は深度バッファー処理の説明図。
【図２】図２（Ａ）〜図２（Ｄ）は深度バッファー処理の説明図。
【図３】図３（Ａ）〜図３（Ｃ）は従来技術の問題点についての説明図。
【図４】本実施形態の衝突検出システムの構成例。
【図５】本実施形態の衝突検出システムを含むロボットシステムの構成例。
【図６】本実施形態の衝突検出システムの詳細な構成例。
【図７】図７（Ａ）〜図７（Ｃ）は衝突がない場合のオブジェクトの位置関係、設定される視点、及び描画処理により生成される画像の例。
【図８】図８（Ａ）〜図８（Ｃ）は衝突がある場合のオブジェクトの位置関係、設定される視点、及び描画処理により生成される画像の例。
【図９】図９（Ａ）〜図９（Ｃ）は視点設定処理を説明する図。
【図１０】図１０（Ａ）〜図１０（Ｄ）は視点設定処理を説明する図。
【図１１】膨張処理を説明する図。
【図１２】図１２（Ａ）、図１２（Ｂ）は形状簡略化処理を説明する図。
【図１３】図１３（Ａ）、図１３（Ｂ）は円柱形状への形状簡略化処理を説明する図。
【図１４】本実施形態の詳細な処理を説明するフローチャート。
【図１５】本実施形態の詳細な処理を説明するフローチャート。
【図１６】変形例の衝突検出システムの詳細な構成例。
【図１７】変形例の詳細な処理を説明するフローチャート。
【図１８】変形例の詳細な処理を説明するフローチャート。
【発明を実施するための形態】
【００４１】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００４２】
１．深度バッファー処理
ロボット（マニピュレーター）の動作においては、周辺構造物や周辺機器への衝突や、自己衝突や、他のロボットへの衝突は非常に大きな問題となる。本実施形態の衝突検出手法では、このような衝突をシミュレーションにより事前に検出する。
【００４３】
このような本実施形態の衝突検出手法が用いられる形態としては、大別して、オフラインでの使用（事前確認）と、ラインタイムでの使用（予測、先読み）が考えられる。オフラインの使用では、周辺環境などが既知且つ静的であり、ロボットの動作が既知である場合に、システムの作成時に、その衝突を検証する。一方、ラインタイムの使用では、周辺環境などが動的に変化する場合（例えば周囲に複数のロボットが存在したり、作業者が存在する場合）に、ロボットの実際の動作に先行して、シミュレーションにより衝突を検出する。
【００４４】
従来では、このようなロボットにおける衝突検出手法として、ＣＰＵ（Central Processing Unit)の処理に適したアルゴリズムを使用する場合が殆どであった。ここでＣＰＵ処理に適したアルゴリズムとは、比較的に複雑な単位処理を、比較的に少数（数十から数百程度）の並列度で処理するようなアルゴリズムである。
【００４５】
しかしながら、近年では、消費電力の問題等に起因して、ＣＰＵの動作周波数の伸びは
止まっている。このため、最近のＣＰＵの性能向上は、マルチコア化などの処理の並列度の向上によって実現されている。別の言い方をすれば、並列度を上げることができないアルゴリズムでは、処理性能を向上できなくなっている。
【００４６】
一方、ＧＰＵ（Graphics Processing Unit）は、ＣＰＵに比べて非常に大きな並列度を有する。例えば現在のＧＰＵは、ＡＬＵ（算術演算ユニット）を数百から千数百持ち、数万から数百万の処理を並列に実行できる能力を有する。
【００４７】
そこで本実施形態では、衝突検出のアルゴリズムとして、ＣＰＵ処理よりはＧＰＵ処理に適したアルゴリズムを採用することで、従来に比べて高性能な衝突検出を実現する。具体的には、ＧＰＵが有するハードウェアー機能であるＲＯＰ（レンダリング・アウトプット・パイプライン）の機能を最大限に利用する。即ち、このようなＲＯＰ機能を用い、深度テスト機能と深度バッファーを有効活用して衝突検出を実現する。
【００４８】
ここで深度バッファーは、ＣＧ（Computer Graphics）においては主に隠面消去のため
に用いられ、オブジェクトの深度情報を記憶するものである。具体的にはピクセル単位で深度値（Ｚ値）を記憶する。また、深度情報とは、ピクセル毎の深度値に係る情報である。以下、深度バッファーを用いた深度バッファー処理（Ｚバッファー処理）について説明する。
【００４９】
深度バッファー処理では、ある点を描画する際に、その点の深度値と、深度バッファーに記憶されている深度値を比較する。そして、その点の深度値が大きければ（右手系の場合）、その点のカラー値でカラーバッファーの値を上書きすると共に、その点の深度値で深度バッファーの値を更新する。
【００５０】
例えばオブジェクトＯＢＡ、ＯＢＢ、ＯＢＣが図１（Ａ）、図１（Ｂ）に示すように配置されていたとする。図１（Ａ）はオブジェクトＯＢＡ、ＯＢＢ、ＯＢＣを上方の視点から見た場合の図であり、図１（Ｂ）は前方斜め上の視点から見た場合の図である。ここでオブジェクトは、現実世界の物体をモデル化したものであり、例えば複数のプリミティブ面により構成される。プリミティブ面は、オブジェクトの構成要素であるプリミティブとなる面であり、例えばポリゴン、自由曲面、或いはサブディビジョンサーフェスなどである。
【００５１】
図１（Ｃ）に示すように、深度バッファーを用いた描画処理では、各ピクセルのカラー値（ＲＧＢの色情報）が描画バッファー（カラーバッファー）に書き込まれ、深度値（Ｚ値）が深度バッファー（Ｚバッファー）に書き込まれる。
【００５２】
具体的には図２（Ａ）では深度バッファーの深度値が初期値である最背面値に設定される。そして図２（Ｂ）ではオブジェクトＯＢＡが描画されている。この場合に図２（Ｂ）のＪ１に示す領域でのオブジェクトＯＢＡの各ピクセルの深度値は、図２（Ａ）での深度バッファーの深度値よりも前方側（手前側）の深度値となっている。従って、Ｊ１に示す領域では、オブジェクトＯＢＡのカラー値が描画バッファーに書き込まれると共に、オブジェクトＯＢＡの深度値が深度バッファーに書き込まれて深度値が更新される。
【００５３】
図２（Ｃ）ではオブジェクトＯＢＢが描画されている。この場合に図２（Ｃ）のＪ２に示す領域でのオブジェクトＯＢＢの各ピクセルの深度値は、深度バッファーの深度値よりも後方側（奥側）の深度値となっている。従って、Ｊ２に示す領域では、オブジェクトＯＢＢは隠面消去されたと判断され、オブジェクトＯＢＢのカラー値は描画バッファーには書き込まれず、図２（Ｄ）のＪ３に示すように深度バッファーの深度値も更新されない。
【００５４】
一方、Ｊ４に示す領域でのオブジェクトＯＢＢの各ピクセルの深度値は、深度バッファーの深度値よりも前方側の深度値となっている。従って、Ｊ４に示す領域では、オブジェクトＯＢＢのカラー値が描画バッファーに書き込まれると共に、図２（Ｄ）のＪ５に示すようにオブジェクトＯＢＢの深度値が深度バッファーに書き込まれて深度値が更新される。そして、図２（Ｄ）でオブジェクトＯＢＣが描画されると、上記と同様の手法により、Ｊ６の領域ではカラー値の書き込みや深度値の更新が行われず、Ｊ７の領域ではカラー値の書き込みと深度値の更新が行われる。
【００５５】
以上のような深度バッファー処理を行うことで、描画の順番に依存せずに、奥行き方向での順番が正しく判定され、図１（Ｃ）に示すように適切な隠面消去が行われた画像が生成されるようになる。
【００５６】
さて、前述した特許文献１の従来技術においても、深度バッファーを利用して衝突判定を行っている。例えば、他のオブジェクトの描画により、深度バッファーの深度値が図３（Ａ）に示すようになっていたとする。この場合に図３（Ｂ）のＨ１に示すように、オブジェクトＯＢＡ１では、その深度値がＺバッファーの深度値とは異なるため、ＯＢＡ１は他のオブジェクトと衝突していないと判定される。一方、Ｈ２、Ｈ３に示すように、オブジェクトＯＢＡ２では、その深度値が深度バッファーの深度値と同一になっている。従って、オブジェクトＯＢＡ２は、この深度バッファーの深度値を持った他のオブジェクトと衝突していると判定される。
【００５７】
しかしながら、この特許文献１の従来技術では図３（Ｃ）に示すような問題点がある。図３（Ｃ）では、他のオブジェクトＯＢＤの描画により深度バッファーの深度値がＨ４に示すようになっている。この場合に、Ｈ５に示すようにオブジェクトＯＢＡ３はオブジェクトＯＢＤと衝突しているのにも関わらず、オブジェクトＯＢＡ３の深度値は深度バッファーの深度値と一致していないため、衝突していないと判定されてしまう。またＨ６に示すように深度値が内挿された場合には、オブジェクトＯＢＡ４はオブジェクトＯＢＤと衝突していないのに、衝突していると判定されてしまう。
【００５８】
また、他の手法として、仮想的な視点を、地面等を表す平面状のオブジェクトの背面に設定し、背面から見て、表面にあるはずのオブジェクトが描画されれば、そのオブジェクトが平面と衝突していると判定する手法も考えられる。しかしながら、この手法では、単純な平面が仮定されているが、それが平面ではなく複雑な構造を持つオブジェクト（例えば非凸）である場合には、片方の面との衝突が、別の面によって遮蔽される可能性があり、このような場合には衝突を検出できなくなる。
【００５９】
２．構成
２．１  構成例
以上のような問題を解決できる本実施形態の衝突検出システムの構成例を図４に示す。なお本実施形態の衝突検出システムの構成は図４の構成には限定されず、その一部の構成要素（例えば操作部、外部Ｉ／Ｆ部等）を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
【００６０】
この衝突検出システムは、処理部１０と、描画処理を行う描画部３０と、記憶部５０（深度バッファー）を含む。また操作部７０、外部Ｉ／Ｆ（インターフェース）部８０、情報記憶媒体９０を含むことができる。
【００６１】
処理部１０は、各種の判定処理や制御処理などを行うものであり、例えばＣＰＵ等の各種のプロセッサー、専用回路（ＡＳＩＣ）などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。処理部１０は、オブジェクト空間設定部１２、衝突判定部１４を含む。
【００６２】
オブジェクト空間設定部１２は、複数のオブジェクトをオブジェクト空間に配置設定する処理等を行う。具体的には、ワールド座標系でのオブジェクトの位置や回転角度を決定し、その位置にその回転角度でオブジェクトを配置する。ここでオブジェクトは、ロボット等の衝突検出対象物や、周辺構造物や周辺機器などの被衝突検出対象物を、モデル化したものであり、ポリゴンや自由曲面などのプリミティブ面で構成される。
【００６３】
衝突判定部１４は、衝突検出対象オブジェクトと被衝突検出対象オブジェクトとの間の衝突判定処理を行うものであり、画像や描画カウント数の比較処理を行う比較処理部１６を含む。
【００６４】
描画部３０は、描画処理を行うものであり、例えばＧＰＵ等の各種のプロセッサー、専用回路（ＡＳＩＣ）などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。この描画部３０での描画処理は、頂点シェーダープログラムにより実現される頂点シェーダーや、ピクセルシェーダープログラムにより実現されるピクセルシェーダーにより実現してもよい。頂点シェーダーでは、頂点の移動処理、座標変換処理、クリッピング処理などが行われる。そして頂点処理後の頂点データに基づいてラスタライズ処理が行われる。またピクセルシェーダーでは、ラスタライズ処理後に、画像を構成するピクセル（フラグメント）単位での処理であるピクセル処理（フラグメント処理）が行われる。即ち、シェーディング言語によって記述されたシェーダープログラムによって、プログラマブルシェーダー処理が実現される。
【００６５】
記憶部５０は、処理部１０や描画部３０などのワーク領域となるもので、ＲＡＭ（ＳＲＡＭ、ＤＲＡＭ等）などのメモリーにより実現できる。この記憶部５０は、オブジェクトデータ記憶部５２、描画バッファー５４、深度バッファー５６を含む。
【００６６】
オブジェクトデータ記憶部５２は、オブジェクトの位置データや回転角度データや形状データなどのオブジェクトデータを記憶する。描画バッファー５４（カラーバッファー、フレームバッファー）は画像情報を記憶するものであり、具体的には、ピクセル単位でカラー値やα値などの画像情報を記憶する。深度バッファー５６（Ｚバッファー）は、深度情報を記憶するものであり、具体的にはピクセル単位で深度値（Ｚ値）を記憶する。これらの描画バッファー５４、深度バッファー５６は、記憶部５０を構成するメモリー上に記憶領域として確保される。
【００６７】
操作部７０は、使用者が各種の操作情報を入力するためのものである。外部Ｉ／Ｆ部８０は、外部との間で有線や無線で情報の通信処理等を行うものである。情報記憶媒体９０は（コンピューターにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク、ＨＤＤ、或いはメモリーなどにより実現できる。処理部１０は、情報記憶媒体９０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体９０には、本実施形態の各部としてコンピューター（操作部、処理部、記憶部、出力部を備える装置）を機能させるためのプログラム（各部の処理をコンピューターに実行させるためのプログラム）が記憶される。
【００６８】
２．２  詳細な構成例
また本実施形態の衝突検出システムは、具体的には図６に示す構成であってもよい。図６に示したように、衝突検出システムは、視点設定部４０と、ピクセル値入力部８２と、処理部１０と、描画部３０と、記憶部５０を含む。なお本実施形態の衝突検出システムの構成は図６の構成には限定されず、その一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。例えば、不図示の操作部７０、外部Ｉ／Ｆ部８０、情報記憶媒体９０等を含んでもよい。
【００６９】
視点設定部４０は、オブジェクト空間上に、当該空間上に設定されたオブジェクトを観察する視点を設定する。視点は１つであってもよいし、複数であってもよい。視点が複数設定された場合には、描画部３０での描画処理は、各視点においてそれぞれ行われる。視点の設定手法については後述する。
【００７０】
ピクセル値入力部８２は、描画処理（及びそれに伴う深度比較処理等）の対象となるピクセルの値を処理部１０及び描画部３０に出力する。出力されるピクセル値は、例えば色値及び座標値である。色値とは、図１（Ｃ）の描画バッファーに記憶される値であり、オブジェクト表面の色味を表す値である。また、座標値とは処理対象ピクセルに対応するオブジェクト上の点が、オブジェクト空間のどの位置に存在するかを表す値である。なお、図１（Ｃ）の深度バッファーに記憶される深度値は、座標値に対して座標変換処理を施すことで取得される。ピクセル値入力部８２が出力するピクセル値は、例えば外部Ｉ／Ｆ部８０を介して入力され、オブジェクトデータ記憶部５２に記憶されたデータを読み出すことで取得されてもよい。
【００７１】
処理部１０は、座標値変換部１２０と、深度値比較部１３０と、深度値更新部１４０と、画像比較部１５０を含む。座標値変換部１２０は、ピクセル値入力部８２から取得したピクセル値に対して座標変換処理を行う。具体的には、ピクセル値のうちの座標値に対して、視点設定部４０で設定された視点を基準とする座標変換処理を行う。これは例えば、座標変換処理後の座標系が、視点を原点とし、視点とオブジェクト上の処理対象点（処理対象ピクセルに対応するオブジェクト上の点）とを結ぶ軸がｚ軸となるような座標変換処理であってもよい。このようにした場合、座標変換後の座標値は、視点を原点とした場合の処理対象点の空間位置を表すことになり、特に視点と処理対象点との距離がｚ座標値となるため、ｚ座標の値をそのまま深度値として用いることができる。
【００７２】
深度値比較部１３０は、座標値変換部１２０から出力された深度値と、深度バッファー５６から出力された深度値の比較処理を行う。深度値更新部１４０は、深度値比較部１３０での比較結果に基づいて、深度バッファー５６に記憶された深度値の更新処理を行う。本実施形態では例えば、衝突検出対象オブジェクト（例えばロボット）の描画処理時は、深度値の比較は行われず、全てのピクセルにおいて深度値更新部１４０による更新処理が行われる。また、他のオブジェクト（周辺機器や作業者等）の描画処理時には、衝突検出対象オブジェクトの深度値を基準とし、それに対して描画対象のオブジェクトの深度値が小さい（広義には視点から見て、衝突検出対象オブジェクトよりも描画対象のオブジェクトの方が視点側に位置する）場合に深度値の更新処理を行ってもよい。
【００７３】
画像比較部１５０は、画像の比較処理を行う。本実施形態においては、描画部３０での描画処理は、衝突検出対象オブジェクトを描画する第１の描画処理と、他のオブジェクトを描画する第２の描画処理からなる。そして、第１の描画処理から第１の画像（以下、初期画像とも表記する）を取得するとともに、第２の描画処理から第２の画像（以下、比較画像とも表記する）を取得する。画像比較部１５０での比較とは、初期画像と比較画像の比較処理であり、例えば初期画像と比較画像が一致するか否かの判定を行う。画像比較部１５０での比較結果に基づいて衝突判定が行われ、狭義には初期画像と比較画像が一致する場合には非衝突と判定し、一致しない場合には衝突と判定する。
【００７４】
描画部３０は、色値更新部３２を含む。色値更新部３２は、深度値比較部１３０での比較結果に基づいて、描画バッファー５４に記憶された色値の更新処理を行う。なお、深度値比較部１３０での比較処理の結果としては、同一の内容が深度値更新部１４０及び色値更新部に出力されることを想定している。つまり、深度値更新部１４０での深度値更新処理が必要と判定された場合には、色値更新部３２での色値更新処理も必要と判定されるし、深度値更新部１４０での深度値更新処理が不要と判定された場合には、色値更新部３２での色値更新処理も不要と判定されるものとする。ただし、深度値比較部１３０での比較処理の結果、深度値及び色値の一方が更新され、他方が更新されないといった処理が行われることを妨げるものではない。色値の更新処理とは、ピクセル値入力部８２から入力されたピクセル値のうち、色値を用いて描画バッファー５４の値を更新する処理が考えられる。よって、狭義には描画対象のオブジェクトの表面色を描画する処理に相当する。
【００７５】
記憶部５０は、描画バッファー５４と、深度バッファー５６と、初期画像記憶部５８を含む。描画バッファー５４及び深度バッファー５６については図４を用いて上述したとおりである。初期画像記憶部５８は、衝突検出対象オブジェクトの描画処理により生成される初期画像を記憶する。上述したように、描画部３０での描画処理は、第１の描画処理と第２の描画処理に分けられ、第１の描画処理終了時の描画バッファー５４のデータが初期画像、第２の描画処理終了時の描画バッファー５４のデータが比較画像となる。衝突判定は、初期画像と比較画像の比較処理により行われるが、描画バッファー５４の値は次々に更新されていくものであるから、比較画像に対応するデータにより、初期画像に対応するデータが上書きされてしまう可能性がある。よって、画像比較部１５０での比較処理を行うためには、初期画像は第２の描画処理終了後にも保持しておく必要があることから、当該初期画像を初期画像記憶部５８に記憶しておく。
【００７６】
２．３  ロボットシステムの構成例
図５に本実施形態の衝突検出システムを含むロボットシステムの例を示す。このロボットシステムは、制御装置３００（情報処理装置）とロボット３１０とを含む。制御装置３００はロボット３１０の制御処理を行う。具体的には、動作シーケンス情報（シナリオ情報）に基づいてロボット３１０を動作させる制御を行う。ロボット３１０は、アーム３２０及びハンド（把持部）３３０を有する。そして制御装置３００からの動作指示にしたがって動作する。例えば、図示しないパレットに載せられたワークを把持したり、移動するなどの動作を行う。また、図示しない撮像装置で取得された撮像画像情報に基づいて、ロボットの姿勢やワークの位置などの情報が検出され、検出された情報が制御装置３００に送られる。
【００７７】
本実施形態の衝突検出システムは例えば図５の制御装置３００に設けられ、例えば制御装置３００のハードウェアーやプログラムにより衝突検出システムが実現される。そして、ラインタイムの使用では、周辺環境などが動的に変化する場合に、ロボット３１０の実際の動作に先行して、本実施形態の衝突検出システムがシミュレーションにより衝突の判定処理を行う。そして制御装置３００は、ロボット３１０が周辺構造物や周辺機器などに衝突しないように、判定処理の結果に基づいてロボット３１０の制御を行う。一方、オフラインの使用では、本実施形態の衝突検出システムにより、動作シーケンス情報等の作成時にシミュレーションにより衝突を検証する。そして制御装置３００は、衝突が起こらないように作成された動作シーケンス情報（シナリオ情報）に基づいて、ロボット３１０を制御する。
【００７８】
３．本実施形態の手法
次に本実施形態の手法について図面を用いて更に詳細に説明する。
【００７９】
３．１  衝突判定手法
本実施形態の衝突判定手法について図７（Ａ）〜図８（Ｃ）を用いて説明する。図７（Ａ）等は説明を簡単にするために平面的な図を用いるが、オブジェクトが立体であってもよいことは言うまでもない。図７（Ａ）において、四角が衝突検出対象オブジェクト（例えばロボット）を表し、Ｘ，Ｙ，Ｚが他のオブジェクト（例えば周辺構造物、周辺機器、他のロボット、作業者等）を表す。本実施形態では、衝突検出対象オブジェクトと他のオブジェクトの衝突を検出するものであり、他のオブジェクト同士の衝突は考えなくてもよい。なお、他のオブジェクトに対して視点を設定し、当該他のオブジェクトを衝突検出対象オブジェクトとして扱うことにより、他のオブジェクト同士の検出も本実施形態の手法により実行可能である。
【００８０】
本実施形態の衝突検出では、まず図７（Ｂ）のように視点を設定する。図７（Ｂ）のＡ及びＢが設定された視点である。視点Ａ及びＢは、それぞれの点から矢印で示された方向にあって、点線の範囲内の領域を観察することができる。例えば、図７（Ｂ）の衝突検出対象オブジェクトが直方体であれば、視点Ａからの描画処理により生成される画像は図７（Ｃ）のようになる。
【００８１】
本実施形態では、設定された視点の全てを用いることで、衝突検出対象オブジェクトの内面（本実施形態の「内面」という用語は、具体的には外殻内面を指すものとする。詳細は後述する）の全てを見渡せるように、視点の設定を行う。具体的な視点設定手法については後述するが、このようにすることで、衝突検出対象オブジェクトの内面を不足なく観察することができる。衝突検出対象オブジェクトと他のオブジェクトが衝突するとは、衝突検出対象オブジェクトの内側に他のオブジェクトが侵入しているということであるから、上述のように設定された視点を基準とした描画を行って、他のオブジェクトが描画されたか否かに基づいて衝突判定を行うことができる。
【００８２】
ただし、他のオブジェクトの描写時には、描画する深度値の範囲を考慮する必要がある。衝突検出対象オブジェクトの内側への侵入の有無で衝突検出を行い、当該侵入の有無を他のオブジェクトが描写されたか否かで判定する以上、描画対象となる他のオブジェクトは、衝突検出対象オブジェクトの内側にあるものに限定しなければならないためである。このために、図１（Ａ）〜図３（Ｃ）を用いて説明した深度値を用いる。
【００８３】
本実施形態では衝突検出処理（狭義にはそのうちの描画処理）を、衝突検出対象オブジェクトに関する第１の描画処理と、他のオブジェクトに関する第２の描画処理とに分ける。第１の描画処理では、設定された視点から見たときの衝突検出対象オブジェクトの内面を描画するとともに、当該内面の深度値を深度バッファー５６に記憶する。そして、第２の描画処理では、第１の描画処理で取得された深度値と、描画対象である他のオブジェクトの深度値を用いた深度値比較処理を行い、比較処理の結果に基づいて他のオブジェクトの描画処理を行う。なお、他のオブジェクトが複数ある場合、第２の描画処理は複数のオブジェクトを一度に描画する１つのフェーズであってもよいし、１つずつオブジェクトを描画する複数のフェーズに分割されてもよい。
【００８４】
このようにすることで、第２の描画処理で描画される他のオブジェクトは、検出対象オブジェクトとの位置関係が所与の条件を満たしたものに限定されることになる。具体的には、衝突検出対象オブジェクトの深度値と、他のオブジェクトの深度値との比較により、視点側から見た際に他のオブジェクトが衝突検出対象オブジェクトよりも手前側に位置すると判定された場合に、他のオブジェクトの描画処理を行えばよい。例えば、深度値が視点からの距離値に対応する場合には、衝突検出対象オブジェクトの深度値に比べて、他のオブジェクトの深度値が小さい場合に描画処理が行われることになる。
【００８５】
このようにすることで、衝突検出対象オブジェクトの内側に侵入した他のオブジェクトを描画し、検出対象オブジェクトの外側については描画しないことが可能になる。例えば、図７（Ａ）のような位置関係では、Ｘ，Ｙ，Ｚは全て外側にあるため描画されず、視点Ａ（或いは視点Ｂ）での第２の描画処理での描画結果（比較画像）は、初期画像である図７（Ｃ）と同様となる。それに対して、他のオブジェクトＺが衝突検出対象オブジェクトと衝突している図８（Ａ）のような位置関係では、図８（Ｂ）に示したように、オブジェクトＺは視点Ａから見えることになる。よって、視点Ａから衝突検出対象オブジェクトの内面を描画した結果得られる比較画像は、図８（Ｃ）のようになり、衝突している他のオブジェクトが描画される。
【００８６】
つまり、検出対象オブジェクトの内面全てを見渡す視点を設定した上で、深度値（深度マップ）を考慮した描画を行って初期画像と比較画像を取得することで、取得した２画像の比較処理により衝突検出を行うことができる。具体的には、初期画像と比較画像が一致する場合（例えば２枚とも図７（Ｃ）のようになる）には衝突していないと判定する。また、初期画像と比較画像が一致しない場合（例えば図７（Ｃ）と図８（Ｃ）のようになる）には衝突していると判定する。
【００８７】
なお、以上の説明では第１の描画処理において描画処理（例えば色値更新部３２による描画バッファー５４の更新処理）を行うものとしたが、これに限定されない。例えば、第１の描画処理では深度値更新部１４０による深度値の更新処理を行い、描画バッファー５４に実際の画像を描画する描画処理は行われなくてもよい。その場合、描画バッファー５４の値は初期値のままであり、初期画像は検出対象オブジェクトの表面色（色値）に関係なく決定される。比較画像については、他のオブジェクトが描画されたピクセルは、当該他のオブジェクトの色値を持ち、それ以外のピクセルは初期画像と同様に描画バッファー５４の初期値となる。よって、この場合も衝突検出対象オブジェクトが描画されないだけであり、衝突検出が初期画像と比較画像の比較（一致するか否か）に基づいて行われる点に変更はない。
【００８８】
３．２  視点設定手法
次に視点の設定手法について図９（Ａ）〜図１０（Ｄ）を用いて説明する。なお、本実施形態の視点は、上述したように衝突検出対象オブジェクトの内面全てを見渡すように設定されればよく、後述の手法に限定されるものではない。また、図９（Ａ）〜図１０（Ｄ）では説明を簡単にするために平面的な図を用いるが、オブジェクトが立体であってもよい。
【００８９】
ここで、衝突検出対象オブジェクトの形状として図９（Ａ）を考える。まず、図９（Ｂ）に示したように、衝突検出対象オブジェクトの特徴的な点に参照点を置く。図９（Ｂ）では頂点及び一部の辺上の点が参照点となっている。衝突検出対象オブジェクトがＣＡＤ(computer aided design)データ等で与えられているのであれば、当該ＣＡＤデータの入力点を参照点としてもよいし、任意に参照点を付加してもよい。
【００９０】
次に、設定した参照点に基づいて衝突検出対象オブジェクトの内面を過不足なく覆い尽くす線（２次元の場合）を作る。２次元では、図９（Ｂ）に示したように、設定された線を全てあわせると衝突検出対象オブジェクトの輪郭に一致することになり、１つ１つの線は隣り合う参照点の間の線分となる。なお、衝突検出対象オブジェクトが立体（３次元）の場合には、内面も立体で考えることになるため、線ではなく３つの参照点によって囲まれる三角形を考える必要がある。ただし、以下では説明を簡単にするため、２次元について説明する。
【００９１】
線が設定されたら、それぞれの線について、その線の全面を見ることのできる別の参照点を選択し、視点とする。図９（Ｃ）の例では、線Ｃ１に対して、Ｃ１全体を見渡せる参照点Ｄ１を選択して視点とする。同様に、Ｃ２に対してＤ２、Ｃ３に対してＤ３、Ｃ４に対してＤ４を視点とする。Ｃ１〜Ｃ４以外の各線に対しても同様に視点を選択する。
【００９２】
全ての線に対して視点が設定されたら、設定された視点が対応する線以外の線について全面を見渡せるか否かを判断し、見渡せる場合には視点の対応関係を変更する。これを図示したものが図１０（Ａ）である。具体的には、図９（Ｃ）のようにＣ１〜Ｃ４とＤ１〜Ｄ４の対応関係が作られた場合、Ｄ１からＣ１以外の線（例えばＣ２〜Ｃ４）の全面を見渡せるか判定する。Ｄ１については該当する線はないため対応関係は変更しない。同様にＤ２からＣ１，Ｃ３，Ｃ４を見渡せるかの判定を行う。この場合、Ｄ２からはＣ１の全面を見渡せることになる。このような判定を行うことで、図９（Ｃ）で設定された視点では、Ｃ１とＣ２の２本の線を観察するためにＤ１とＤ２の２つの視点を設けたが、Ｄ２という１つの視点からＣ１とＣ２の両方を観察することがわかるため、Ｄ１は不要であると判断できる。よって、（Ｃ１，Ｄ１）（Ｃ２，Ｄ２）という対応関係（図面では１つの対応関係が１本の矢印で表現されている）が、（Ｃ１，Ｄ２）（Ｃ２，Ｄ２）に変更される。同様に、Ｃ４はＤ３から観察可能であるため、（Ｃ４，Ｄ４）という対応関係を（Ｃ４，Ｄ３）に変更する。これを図示したものが図１０（Ｂ）である。
【００９３】
なお、図１０（Ａ）、図１０（Ｂ）では説明を簡単にするために線としてＣ１〜Ｃ４のみを考えたが、実際には視点の設定及び対応関係の変更は全ての線を対象に行う必要がある。変更後の対応関係の一例を示したものが図１０（Ｃ）である。図１０（Ｃ）から明らかなように、対応関係を整理することで、設定された視点により全ての線の全面を観察可能であるという条件を満たしつつ、視点として選択されていない参照点が生じることになる。よって、これらの参照点は除いて、対応関係を残す点を本実施形態での視点として採用すればよい。これを図示したものが図１０（Ｄ）であり、この例では４つの視点を設定することで、衝突検出対象オブジェクトの内面全てを見渡すことができる。
【００９４】
３．３  衝突検出対象オブジェクトの変形手法
以上の手法により、衝突検出対象オブジェクトと他のオブジェクトの衝突を検出することができる。ただし、本実施形態の処理はこれに限定されず、衝突検出対象オブジェクトの変形処理を含んでもよい。
【００９５】
具体例を図１１〜図１３（Ｂ）に示す。図１１に示したように、実線で描かれた衝突検出対象オブジェクトに対して膨張処理を行って、破線で示したような膨張した衝突検出対象オブジェクトを取得してもよい。具体的には、オブジェクトデータ記憶部５２に記憶されたデータに対して処理部１０で膨張処理を行う。そして、膨張処理後の衝突検出対象オブジェクトに対して視点設定部４０で視点を設定する。視点設定後の処理については上述したとおりである。
【００９６】
このようにすることで、図１１の破線の範囲に他のオブジェクトが侵入したことを検出することができる。つまり、実際に衝突が起こっていない（実線の範囲には侵入していない）としても、ある程度近い距離まで接近している（破線の範囲に侵入している）ことを検出できるため、より安全性の高いシステムを実現できる。
【００９７】
また、変形処理は図１２（Ｂ）に示したような形状簡略化処理であってもよい。衝突検出対象オブジェクトが図１２（Ａ）に示したような細かな凹凸を持つ場合、当該凹凸部分では、形状が複雑になるため内面全体を観察するために必要な視点の数が増加する等の影響が生じる可能性がある。例えば、上述の視点設定手法を用いた場合には、衝突検出対象オブジェクトの内面を過不足なく覆い尽くす線（３次元の場合には三角形）が増加することになるため、視点設定処理の処理負荷が高くなる。さらに、視点が増えれば、視点ごとに行われる描画処理等の回数も増えることになり、処理負荷及び処理にかかる時間の増大につながる。よって、図１２（Ｂ）に示したように、凹凸をなくすような形状簡略化処理を行うことで、処理を容易にすることができる。
【００９８】
なお、形状簡略化処理の一例としては、衝突検出対象オブジェクトを円柱又は角柱で近似することが考えられる。衝突検出対象オブジェクトとしてロボットを考えた場合、ロボットを構成するパーツは図１３（Ａ）に示したようなアーム等の棒状の物体であることが多い。そのような場合、形状簡略化処理後のオブジェクトとして円柱又は角柱を扱うことで処理をよりいっそう容易にすることができる。円柱又は角柱であれば、図１３（Ｂ）のように上面に１つ、底面に１つの２つの視点を設定すれば、内面全体を見渡すことができるため、複雑な視点設定処理を行う必要がない。視点の数も２つと少ないため、深度比較処理や描画処理の回数も２回で済むことになる。
【００９９】
４．詳細な処理
次に本実施形態の詳細な処理例について図１４、図１５のフローチャートを用いて説明する。
【０１００】
この処理が開始されると、図１４に示したように、まず全ての視点についてチェックしたか否かの判定が行われる（Ｓ１０１）。後述するように、１つの視点で衝突が検出されれば、その時点で処理は終了するため、全ての視点のチェックが終了したとき（Ｓ１０１でＹｅｓの場合）には、衝突はないと判定し処理を終了する。
【０１０１】
未チェックの視点がある場合には、そのうちの１つの視点を選択し（Ｓ１０２）、選択した視点を用いて、衝突検出対象オブジェクトの内面を描画し、深度値を設定する（Ｓ１０３）。そして、その状態での画像である初期画像を記憶する（Ｓ１０４）。Ｓ１０３及びＳ１０４が上述してきた第１の描画処理に相当する。次に第２の描画処理に入り、全ての障害物（他のオブジェクト）を描画して比較画像を取得する（Ｓ１０５）。そして、初期画像と比較画像を比較し、差異があるか否かの判定を行う（Ｓ１０６）。そして、差異がある場合には衝突有りと判定し処理を終了し、差異がない場合には現在の視点からは衝突は見つからなかったものとしてＳ１０１に戻る。
【０１０２】
次にＳ１０３、Ｓ１０５における描画処理の詳細について図１５を用いて説明する。Ｓ１０３の描画処理が開始されると、まず他の視点での処理結果を初期化するために、深度バッファー５６及び描画バッファー５４を初期化する（Ｓ２０１，Ｓ２０２）。そして、全てのピクセル値を描画したかの判定が行われ（Ｓ２０３）、描画した場合には処理を終了する。未描画のピクセルがある場合には、描画対象のピクセルのＸＹＺ値を取得し（Ｓ２０４）、対応するピクセルのＸＹ位置での深度バッファー５６に記憶されたＺ座標値を取得する（Ｓ２０５）。なお、Ｓ２０１において深度バッファー５６は初期化されているため、Ｓ２０５で取得する値は初期値となる。
【０１０３】
次に、描画するピクセルのＺ値と、深度バッファー５６から読み出してきたＺ値との比較を行い、描画対象が深度バッファー５６のＺ値よりも手前側にあるかの判定を行う（Ｓ２０６）。第１の描画処理である衝突検出対象オブジェクトの描画処理時には、全てのピクセルについて描画及び深度値更新処理を行うこととしているため、Ｓ２０１での初期化処理として、深度バッファー５６には十分視点から遠いことを表す値（例えば無限遠を表す値）を入れておき、Ｓ２０６では必ずＹｅｓと判定されるようにしておく。
【０１０４】
或いは、Ｓ１０３の処理においては、Ｓ２０５及びＳ２０６の処理をスキップするようにしておいてもよい。
【０１０５】
そして、処理対象ピクセルの色値を描画バッファー５４の対応位置へ描画し（Ｓ２０７）、それとともに深度バッファー５６の値を描画対象ピクセルのＺ値で更新する（Ｓ２０８）。その後、Ｓ２０３に戻り、全てのピクセルが描画されるまで処理を継続する。このようにすることで、衝突検出対象オブジェクトの内面を描画する第１の描画処理が実行される。
【０１０６】
次にＳ１０５における処理について説明する。Ｓ１０５でも基本的にＳ１０３と同様に図１５で示した処理が行われる。しかしＳ１０５では、Ｓ１０３（第１の描画処理）での深度バッファー５６及び描画バッファー５４の値を用いるため、Ｓ２０１及びＳ２０２の初期化処理はスキップされる。Ｓ２０３〜Ｓ２０８については、図１５に示したとおりＳ１０３と同様である。ただし、深度バッファー５６には第１の描画処理で記憶した衝突検出対象オブジェクトのデータが記憶されていることから、Ｓ２０５で取得されるのは衝突検出対象オブジェクトの深度値となる。よって、Ｓ２０６の判定は、描画対象である他のオブジェクトが衝突検出対象オブジェクトよりも手前側にあるか否かの判定となり、手前側にあるときだけＳ２０７及びＳ２０８の処理が行われることになる。このようにすることで、他のオブジェクトのうち、衝突検出対象オブジェクトの内側にある部分を描写する第２の描画処理が実行される。
【０１０７】
以上の本実施形態では、衝突検出システムは図６に示したように、処理部１０と、描画処理を行う描画部３０と、視点を設定する視点設定部４０を含む。視点設定部４０は、衝突検出対象オブジェクトの外殻内面（内面）を見る視点を設定する。描画部３０は、設定された視点から見たときの衝突検出対象オブジェクトを描画する第１の描画処理を行い、それとともに衝突検出対象オブジェクトの外殻内面のうち、第１の描画処理により描画された領域に対応する各ピクセルの深度値を生成する。さらに描画部３０は、生成した深度値に基づいて、衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行う。処理部１０は、第１の描画処理と第２の描画処理の結果に基づいて、衝突検出対象オブジェクトと他のオブジェクトの衝突判定を行う。
【０１０８】
ここで、衝突検出対象オブジェクトとは、衝突を検出する対象となるオブジェクトのことであり、本実施形態の衝突判定は、当該衝突検出対象オブジェクトと他のオブジェクトとの衝突に関するものである。よって、他のオブジェクトが複数あった場合でも、他のオブジェクト同士の衝突は考慮しなくてよい。本実施形態での衝突検出対象オブジェクトは閉じた空間図形を想定しており、外殻内面とは閉じた空間図形の外殻外面の反対側の面を指すものとする。外殻とはオブジェクトの内部と外部の境界を表すものであり、衝突検出対象オブジェクトが球であるとすれば、外殻は球面に相当する。球の例で言えば、球には含まれない点（すなわち球の外部）に視点を設定することで外殻外面が観察されることになる。
【０１０９】
本実施形態の手法では、外殻内面よりも手前側に他のオブジェクトが存在するか否かという判定を行うことで（つまり、外殻内面よりも内側に侵入しているオブジェクトがあるか否かによって）、衝突検出を行う。しかし、衝突検出対象オブジェクトの外殻外面と、他のオブジェクトが接触した時点で衝突は発生していることになる。このことに鑑みれば、外殻外面と外殻内面とで空間的な位置が異なることは望ましくない。つまり、外殻内面とは外殻外面と同じ位置に存在し、かつ観察方向のみが異なる面である。一例としては、外殻として厚みを持たない仮想的な面を設定すれば、オブジェクトの内部から当該外殻を観察した場合の面が外殻内面となる。逆に、外殻が厚みを持つのであれば、オブジェクト内部に視点を設定して外殻を観察したとしても、観察した面は外殻内面であるとは言えないことになる。つまり、実空間上の物体が厚みを持たないことは考えられない以上、本実施形態での外殻内面とは、実空間上で観察できるものではなく、仮想的な面である。
【０１１０】
また、深度値とは所与の視点から見たときの深さ方向（奥行き方向）での距離に関する値であり、例えばオブジェクト空間に設定された座標系での座標値等であってもよい。なお、視点とは視点位置及び視線方向によって決定されるものが考えられる。視点位置とは当該視点が設定される空間位置を表し、例えば３次元座標値として表現される。視線方向は、例えば視点位置を起点として所与の方向を向くベクトルとして表現される。これは実空間において、カメラ等の撮像装置を用いて撮像を行うケースを考えれば、視点位置とは撮像装置が設置される空間位置に対応し、視線方向とは撮像装置の光軸方向に対応することになる。
【０１１１】
これにより、衝突検出対象オブジェクトと他のオブジェクトの正確な衝突判定が可能になる。描画部３０での描画処理として、衝突検出対象オブジェクトを描画する第１の描画処理と、他のオブジェクトを描画する第２の描画処理を行う。そして、第２の描画処理の際に、第１の描画処理時に取得した深度値、すなわち衝突検出対象オブジェクトに関する深度値を用いることで、衝突検出対象オブジェクトと所与の位置関係にある他のオブジェクトを描画することができる。例えば、深度値に基づいて、他のオブジェクトが衝突検出対象オブジェクトに比べて手前側（視点側）に位置する際に、当該他のオブジェクトを描画すればよい。上述したように、ここでの視点は衝突検出対象オブジェクトの内面を見るものであるから、衝突検出対象オブジェクトよりも手前側にある他のオブジェクトとは、衝突検出対象オブジェクトの内部に入り込んでいるオブジェクトに相当する。衝突検出対象オブジェクトが閉じた図形を想定している以上、他のオブジェクトは衝突検出対象オブジェクトの境界面（球で言えば球面）との衝突なしに内部に侵入することはできない。つまり、視点の設定及び深度値に関する処理を適切に行うことで、他のオブジェクトの描画状況に応じて衝突判定を行うことが可能になる。
【０１１２】
また、処理部１０は、第１の描画処理により生成された第１の画像と、第２の描画処理により生成された第２の画像との比較処理を行うことで、衝突判定を行ってもよい。
【０１１３】
これにより、描画処理の結果生成された画像の比較処理により衝突判定を行うことが可能になる。例えば、第１の描画処理により生成される第１の画像とは図７（Ｃ）であり、衝突検出対象オブジェクトの内面を描画した画像となる。それに対して、第２の画像は他のオブジェクトが衝突検出対象オブジェクトと衝突しているか否かにより変化し、衝突がない場合には第１の画像と同様に図７（Ｃ）のようになる。しかし、衝突がある場合には衝突検出対象オブジェクトの内部に侵入した他のオブジェクトが描画されることになるため、図８（Ｃ）のように画像にも他のオブジェクトが現れる。つまり、一例としては第１の画像と第２の画像が一致すれば衝突なしと判定し、第１の画像と第２の画像に差異があれば衝突有りと判定すればよい。
【０１１４】
また、描画部３０は、第１の描画処理における衝突検出対象オブジェクトの描画、及び第２の描画処理における他のオブジェクトの描画を、設定された視点での透視投影で行ってもよい。
【０１１５】
ここで、透視投影とは、三次元物体を平面上に表現する図法の１つであり、有限の距離に１つの視点を設定できるものである。言い換えれば、オブジェクトから視点までの線（視線）を複数考えた場合に、当該複数の視線が１つの視点に集まることになる。それに対して、他の図法である平行投影では、視線同士は平行であり１つの視点に集まらない。
【０１１６】
これにより、透視投影による描画が可能になる。本実施形態の手法では、衝突検出対象オブジェクトの内部（内面上の点を含む）に視点を設定することを想定している（ただし外部に設定されることを妨げるものではない）。よって、視点位置は衝突検出対象オブジェクトに対して有限の距離に設定する透視投影を用いることにより、視点位置が無限遠点にあると考えることもできる平行投影に比べて、容易な衝突判定が可能になる。
【０１１７】
また、視点設定部４０は、衝突検出対象オブジェクトの外殻内面上又は内部（例えば外殻内面上又は内部のいずれかに設定される視点位置）に視点を設定してもよい。
【０１１８】
これにより、オブジェクトの内部、少なくとも内面上に視点位置を持つように視点を設定することが可能になる。本実施形態の手法は、深度値判定を用いて衝突検出対象オブジェクトの内部に侵入した他のオブジェクトを描画することを想定している。つまり、描画する領域は衝突検出対象オブジェクトの内部となる。衝突検出対象オブジェクトの外部に視点を設定したとすると、当該視点の視点位置から視線方向を観察した場合、深度値の小さい位置（視点に近い位置）に１つめの内面（前面）が現れ、それよりも深度値が大きい位置に２つめの内面（背面）が現れる。そして、前面と背面の間の深度値範囲が、衝突検出対象オブジェクトの内部を表すことになる。よって、このような視点設定では、前面を表す深度値を記憶する前面用深度バッファーと、背面を表す深度値を記憶する背面用深度バッファーを用意した上で、他のオブジェクトの深度値と前面用深度バッファーの値の比較、及び他のオブジェクトの深度値と背面用深度バッファーの値の比較という２つの深度値比較処理を行わなくてはならない。このように外部に視点を設定することで、深度値生成処理及び深度値比較処理の処理負荷が増大することになるため、視点は衝突検出対象オブジェクトの内部又は内面上に設けることが望ましい。
【０１１９】
また、視点設定部４０は、衝突検出対象オブジェクトの内部又は内面上（例えば外殻内面上又は内部のいずれかに設定される第１〜第Ｎの視点位置）に、第１〜第Ｎの視点を設定してもよい。
【０１２０】
これにより、視点は１つに限定されず、複数の視点を設定することが可能になる。本実施形態の視点は、衝突検出対象オブジェクトの内面を見るように設定され、設定された視点から衝突検出対象オブジェクトの内部を描画して侵入している他のオブジェクトを検出するものを想定している。つまり、検出対象オブジェクトの内部にあって、設定した視点から見ることができない（描画されない）領域が存在した場合、当該領域への他のオブジェクトの侵入は検出できず、従って衝突も検出できない可能性がある。よって、そのような領域は可能な限り少なくするべきであり、そのためには視点を複数設定することが効果的である。なお、視点の数を増やすのではなく、１つの視点から描画する領域を広くする（実空間での撮像装置で言えば、非常に大きい画角を持つ魚眼レンズ等の光学系を有する撮像装置を用いた撮像に対応する）アプローチにより、描画できない領域を減らしてもよい。
【０１２１】
また、視点設定部４０は、第１〜第Ｎの視点により、衝突検出対象オブジェクトの内面全てを見渡せるように、視点を設定してもよい。
【０１２２】
ここで、第１〜第Ｎの視点の１つ１つの視点が、衝突検出対象オブジェクトの内面全てを見渡すことができる必要はない。第１〜第Ｎの視点の各視点は、衝突検出対象オブジェクトの内面の一部を見るものであり、各視点により描画できる領域を全てあわせることで内面全てをカバーできればよい。図１０（Ｄ）の例であれば、内面全てとは参照点間の線分全て（１２本）の集合で表されるところ、４つの視点の１つ１つはそれぞれ３本の線を描画できるに過ぎない。しかし、４つの視点をあわせることで１２本の線全てを見渡せることになる。
【０１２３】
これにより、衝突検出対象オブジェクトの内部の領域を不足なく描画することが可能になる。よって、死角等が生じないため衝突検出対象オブジェクトの内部に他のオブジェクトが侵入していれば、それを描画することができるため、正確な衝突検出ができる。
【０１２４】
また、衝突検出システム（狭義には衝突検出システムに含まれる記憶部５０）は、図６に示したように深度値を記憶する深度バッファー５６を含んでもよい。
【０１２５】
これにより、深度バッファー５６に深度値を記憶しておくことが可能になる。第１の描画処理と第２の描画処理に基づく（狭義には第１の画像と第２の画像の比較処理という）容易な処理により衝突検出を行うため、衝突検出対象オブジェクトに対して所与の位置関係にある（狭義には内部に侵入している）他のオブジェクトを描画する必要がある。そのような位置関係の判定には深度値を用いればよく、深度バッファー５６を用意することで、深度値の管理が容易になる。
【０１２６】
また、処理部１０は、衝突検出対象オブジェクトの変形処理を行ってもよい。視点設定部４０は、変形処理後の衝突検出対象オブジェクトに対して視点を設定する。
【０１２７】
これにより、衝突検出対象オブジェクトを変形することが可能になる。例えば、既存のロボットに対して部品の追加や設計変更が行われた場合に、外部からのオブジェクトデータの入力を待たずに変更後のロボットに対する衝突判定を行うために、変形処理を行ってもよい。また、あえて実空間での衝突検出対象オブジェクトの形状と乖離するような変形処理を行ってもよく、具体的には膨張処理や形状簡略化処理であってもよい。
【０１２８】
また、処理部１０は、変形処理後の衝突検出対象オブジェクトが、変形処理前の衝突検出対象オブジェクトを内包するような膨張処理を、上述の変形処理として行ってもよい。そして、視点設定部４０は、膨張処理後の衝突検出対象オブジェクトに対して視点を設定する。
【０１２９】
これにより、衝突だけではなく接近を判定することが可能になる。膨張処理の具体例としては図１１が挙げられる。実線が膨張処理前の衝突検出対象オブジェクトであり、破線が膨張処理後の衝突検出対象オブジェクトである。膨張処理を行うことで、破線領域内部を見る視点が設定されるため、他のオブジェクトが破線内に侵入したか否かを検出することができる。よって、ある程度接近しすぎた場合には衝突が起こっていなくても、そのことを検出し、例えば警告等を発することが可能になる。本実施形態の衝突判定は、実機を動かす前の予測シミュレーションを想定しているため、衝突なしと判定された場合にも実機作業において衝突が生じる可能性がある。その際、膨張処理を行っておけばある程度のマージンを用意することになるため、シミュレーション通りに動かなかった場合にも、衝突の危険性を低くすることが可能になる。
【０１３０】
また、処理部１０は、変形処理後の衝突検出対象オブジェクトが、変形処理前の衝突検出対象オブジェクトに比べて簡略化された形状を持つような処理である形状簡略化処理を、上述の変形処理として行ってもよい。そして、視点設定部４０は、形状簡略化処理後の衝突検出対象オブジェクトに対して視点を設定する。
【０１３１】
ここで、形状簡略化処理とは、処理前のオブジェクトに比べて処理後のオブジェクトの形状が簡略化される処理のことであり、形状が簡略化されるとは、例えばオブジェクトを構成する頂点の数が減少する、オブジェクトを構成するポリゴン数が減少する、オブジェクトの凹凸が減少する等の変化を指すものとする。
【０１３２】
これにより、衝突検出対象オブジェクトの形状を簡略化することが可能になる。形状簡略化処理の具体例は図１２（Ａ）、図１２（Ｂ）に示したとおりである。図１２（Ａ）のように細かい凹凸がある場合、内面全てを見渡すために必要な視点数が多くなる可能性が高い。例えば、凹部があると、その凹部が障害物となり凹部の反対側を描画することができなくなる。また、凸部についてはその凸部を見渡す視点が限定される（例えば凸部の中に視点を設定したり、凸部に正対する位置に視点を設定する必要がある）ことになる。そのため、図１２（Ｂ）のように凹凸を少なくする変形処理を行うことで、視点の設定を容易にするとよい。なお、形状簡略化処理後の衝突検出対象オブジェクトが、形状簡略化処理前の衝突検出対象オブジェクトを内包することが望ましい。内包しない領域があった場合、当該領域への他のオブジェクトの衝突を検出できなくなってしまうからである。ただし、当該領域（例えば凸部分）が非常に小さい等の理由で、その領域への衝突を考慮しなくてもよいのであれば、この限りではない。
【０１３３】
また、処理部１０は、形状簡略化処理として、処理後の衝突検出対象オブジェクトが円柱形状又は角柱形状となる処理を行ってもよい。そして、視点設定部４０は、円柱形状又は角柱形状の上面に第１の視点を設定し、底面に第２の視点を設定する。
【０１３４】
これにより、形状簡略化処理の具体例として、円柱形状又は角柱形状への変形処理を行うことが可能になる。例えば、衝突検出対象オブジェクトとしてロボットを考えた場合、当該ロボットを構成するパーツは図１３（Ａ）（図５のアーム３２０の一部）のように、棒状であることが多い。よって、図１３（Ｂ）のように単純な円柱形状等で近似したとしても、大きな問題が生じないケースが考えられる。円柱形状又は角柱形状であれば、図１３（Ｂ）に示したように、上面（具体的には面の中心等）に第１の視点を設定し、底面（具体的には面の中心等）に第２の視点を設定すれば、この２つの視点により内面全てを見渡すことが可能になる。そのため図９（Ａ）〜図１０（Ｄ）を用いて説明したような視点設定処理を行う必要がなく、また描画処理も２回で済むため処理負荷を軽減することができる。
【０１３５】
また、衝突検出対象オブジェクトとは、ロボットをモデル化したオブジェクトであってもよい。
【０１３６】
これにより、ロボットと他のオブジェクト（周辺構造物、周辺機器、他のロボット、作業者等）の衝突を判定することが可能になる。ロボット作業においては衝突が重大な影響を及ぼす可能性が高い。ロボット自体の故障はもちろんのこと、作業対象物体（例えば運搬中のワーク等）が落下することで周辺の装置に損傷を与える可能性もある。また、ワークの落下等が起これば、所定の手順が継続できず、初期化手順や復帰手順の実行が必要になることもあり、作業効率の著しい低下につながる。そのため、本実施形態の正確な衝突判定をロボットに対して適用することのメリットは大きい。
【０１３７】
また、以上の本実施形態は、上述してきた衝突検出システムを含むロボットシステムにも適用できる。
【０１３８】
これにより、図５に示したようなロボットシステムにおいて、本実施形態の手法を用いた衝突検出が可能になる。具体的には、衝突検出システムは図５の制御装置３００に設けられ、制御装置３００のハードウェアーやプログラムにより衝突検出システムが実現されることが考えられる。
【０１３９】
また、以上の本実施形態は、処理部１０と、描画処理を行う描画部３０と、視点を設定する視点設定部４０としてコンピューターを機能させるプログラムにも適用できる。視点設定部４０は、衝突検出対象オブジェクトの内面を見る視点を設定する。描画部３０は、設定された視点から見たときの衝突検出対象オブジェクトを描画する第１の描画処理を行い、それとともに深度値を生成する。さらに描画部３０は、生成した深度値に基づいて、衝突検出対象オブジェクト以外の他のオブジェクトを描画する第２の描画処理を行う。処理部１０は、第１の描画処理と第２の描画処理の結果に基づいて、衝突検出対象オブジェクトと他のオブジェクトの衝突判定を行う。
【０１４０】
これにより、本実施形態の衝突検出処理を実行するプログラムを実現することができる。このプログラムは、例えば図４に示した情報記憶媒体９０に記録される。ここで、情報記録媒体としては、ＤＶＤやＣＤ等の光ディスク、光磁気ディスク、ハードディスク（ＨＤＤ）、不揮発性メモリーやＲＡＭ等のメモリーなど、衝突検出システムによって読み取り可能な種々の記録媒体を想定できる。
【０１４１】
５．変形例
以上では、描画部３０における描画処理は、描画バッファー５４に対して描画対象オブジェクトの色値を書き込むことで行われるものとしていたが、これに限定されない。例えば描画ピクセルカウンターを用いてもよい。描画ピクセルカウンターとは、例えば描画指示があった場合に値をインクリメントするようなカウンターであり、オブジェクトの実際の色値等は反映せず、描画指示が行われた回数を記憶するものである。
【０１４２】
この場合の衝突検出システムの構成例を図１６に示す。衝突検出システムは、視点設定部４０と、ピクセル値入力部８２と、処理部１０と、描画部３０と、記憶部５０を含む。なお本実施形態の衝突検出システムの構成は図１６の構成には限定されず、その一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。例えば、不図示の操作部７０、外部Ｉ／Ｆ部８０、情報記憶媒体９０等を含んでもよい。
【０１４３】
図６と比較した場合、視点設定部４０は同様であるが、色値を反映させる必要がないため、ピクセル値入力部８２から描画部３０への出力は行われない点が異なる。また、画像の比較を行う必要もないため、処理部１０の画像比較部１５０と、記憶部５０の初期画像記憶部５８がなくなっている。さらに、上述したように記憶部５０の描画バッファー５４がなくなり、描画ピクセルカウンター５５が追加されている。描画部３０は、色値更新部３２ではなく、描画ピクセルカウンター更新部３４から構成される。
【０１４４】
色値を用いた描画処理ではなくカウンターの更新を行うものであるが、この場合も、視点設定処理は図９（Ａ）等を用いて説明した例と同様である。また、描画処理が衝突検出対象オブジェクトに関する第１の描画処理と、他のオブジェクトに関する第２の描画処理からなる点も同様である。ただし、第１の描画処理において衝突検出対象オブジェクトの深度値を深度バッファー５６に記憶するが、この処理は全てのピクセルについて行われるため、全ピクセルについて描画ピクセルカウンターのインクリメントが行われる。なお、当該インクリメント処理に特に意味はなく、第１の描画処理では描画ピクセルカウンターの更新処理は行わなくてもよい。
【０１４５】
第２の描画処理の際の深度値比較処理についても、上述の例からの変更はない。ただし、深度値比較処理の結果、描画対象オブジェクトが衝突検出対象オブジェクトよりも手前側にある場合には、描画バッファー５４の更新ではなく、描画ピクセルカウンターの更新が行われることになる。
【０１４６】
つまり、衝突がない場合には、第２の描画処理終了後の描画ピクセルカウンターは、第１の描画処理終了後の値と変化がない（例えば初期値のまま）であるが、衝突がある場合には、衝突したオブジェクトが観察された位置に対応するピクセルのカウンター値が変化（増加）していることになる。よって、この変形例では描画ピクセルカウンターの値の変化の有無により衝突を検出する。
【０１４７】
詳細な処理例について図１７、図１８のフローチャートを用いて説明する。図１７が全体の処理であり、Ｓ３０１，Ｓ３０２については図１４のＳ１０１，Ｓ１０２と同様である。Ｓ３０３はＳ１０３と同様であるが、描画の内容が色値の更新ではなく、描画ピクセルカウンターの更新となる。そして、更新された描画ピクセルカウンターの値を記憶する（Ｓ３０４）。Ｓ３０５も同様であり、Ｓ１０５とは描写処理が描画ピクセルカウンター値の更新処理である点が異なる。そして、衝突を検出したか否かの判定は、描画ピクセルカウンター値が増加したかの判定により行う（Ｓ３０６）。
【０１４８】
また、Ｓ３０３及びＳ３０５で行われる図１８の描画処理についても、Ｓ４０２の初期化対象が描画ピクセルカウンターである点、Ｓ４０７の更新処理が描画ピクセルカウンターのインクリメントである点、全ピクセルの描画後に描画ピクセルカウンターの値を返す点（Ｓ４０９）が異なるが、その他は図１５のＳ２０１〜Ｓ２０８と同様である。
【０１４９】
以上の変形例では、衝突検出システムの処理部１０は、第１の描画処理での描画ピクセル数情報と、第２の描画処理での描画ピクセル数情報との比較処理を行うことで、衝突判定を行う。
【０１５０】
ここで、描画ピクセル数情報とは、具体的には描画ピクセルカウンターのカウンター値であってもよい。
【０１５１】
これにより、描画ピクセル数情報に基づいて衝突判定を行うことが可能になる。本実施形態での衝突判定は、衝突検出対象オブジェクトの内部に他のオブジェクトが侵入しているか否かを判定できればよく、侵入している他のオブジェクトの色値等は取得しなくてもよい。深度値を用いた処理により、他のオブジェクトが侵入しているときに描画処理を行い、侵入していなければ描画処理を行わないように設定しておけば、描画処理の有無を検出できればよいため、描画処理の回数に対応したカウンターを用いれば十分である。
【０１５２】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。また衝突検出システム、ロボットシステムの構成・動作や、深度マップ情報の設定手法、衝突検出対象オブジェクトの描画手法、衝突検出対象オブジェクトの衝突判定手法等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【０１５３】
ＯＢＡ、ＯＢＡ１〜ＯＢＡ４、ＯＢＢ、ＯＢＣ、ＯＢＤ  オブジェクト、
１０  処理部、１２  オブジェクト空間設定部、１４  衝突判定部、
１６  比較処理部、３０  描画部、３２  色値更新部、
３４  描画ピクセルカウンター更新部、４０  視点設定部、５０  記憶部、
５２  オブジェクトデータ記憶部、５４  描画バッファー、
５５  描画ピクセルカウンター、５６  深度バッファー、５８  初期画像記憶部、
７０  操作部、８０  外部Ｉ／Ｆ部、８２  ピクセル値入力部、
９０  情報記憶媒体、１２０  座標値変換部、１３０  深度値比較部、
１４０  深度値更新部、１５０  画像比較部、３００  制御装置、３１０  ロボット、
３２０  アーム
【図１】
0005874326.tif 000002
【図２】
0005874326.tif 000003
【図３】
0005874326.tif 000004
【図４】
0005874326.tif 000005
【図５】
0005874326.tif 000006
【図６】
0005874326.tif 000007
【図１１】
0005874326.tif 000008
【図１２】
0005874326.tif 000009
【図１３】
0005874326.tif 000010
【図１４】
0005874326.tif 000011
【図１５】
0005874326.tif 000012
【図１６】
0005874326.tif 000013
【図１７】
0005874326.tif 000014
【図１８】
0005874326.tif 000015
【図７】
0005874326.tif 000016
【図８】
0005874326.tif 000017
【図９】
0005874326.tif 000018
【図１０】
0005874326.tif 000019