(57)【特許請求の範囲】
【請求項１】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーと、
を含み、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出システム。
【請求項２】
請求項１において、
前記処理部は、
前記第１の描画処理により生成された第１の画像と、前記第２の描画処理により生成された第２の画像との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項３】
請求項１において、
前記処理部は、
前記第１の描画処理での描画ピクセル数情報と前記第２の描画処理での描画ピクセル数情報との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項４】
請求項１乃至３のいずれかにおいて、
前記描画部は、
前記第１の描画処理と前記第２の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画することを特徴とする衝突検出システム。
【請求項５】
請求項４において、
前記深度バッファーには、
前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されることを特徴とする衝突検出システム。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第１のパーツオブジェクトと第２のパーツオブジェクトとが、前記視点から見て重ならない場合に、
前記描画部は、
前記第１の描画処理と前記第２の描画処理の各描画処理において、前記第１のパーツオブジェクトと前記第２のパーツオブジェクトを同時に描画することを特徴とする衝突検出システム。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、
前記処理部は、
前記複数の衝突検出対象オブジェクトのうちの第１の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第１の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第２の衝突検出対象オブジェクトについての前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記深度バッファーには、
前記衝突検出対象オブジェクトを内包するように設定される第１〜第Ｎの対象面（Ｎは２以上の整数）に対応する第１〜第Ｎの深度マップ情報の各深度マップ情報が設定され、
前記描画部は、
前記第１〜第Ｎの対象面の各対象面について、深度テストを行って、前記第１〜第Ｎの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第１の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第２の描画処理を行い、
前記処理部は、
前記第１〜第Ｎの対象面の各対象面についての前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項９】
請求項８において、
前記第１〜第Ｎの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であることを特徴とする衝突検出システム。
【請求項１０】
請求項１乃至９のいずれかにおいて、
前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであることを特徴とする衝突検出システム。
【請求項１１】
請求項１乃至１０のいずれかに記載の衝突検出システムを含むことを特徴とするロボットシステム。
【請求項１２】
対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出方法。
【請求項１３】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーとして、
コンピューターを機能させ、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、
前記処理部は、
前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等に関する。
【背景技術】
【０００２】
物体間の衝突や近接の有無を判定することは多くの分野で必要とされている。例えばロボットなどの分野において、衝突の発生は非常に大きな問題となる。このため、従来より、実際に衝突が発生する以前に、衝突の有無や、許容された以上の近接を、コンピューターによる計算により判定する手法が研究、開発されている。このような衝突判定手法の従来技術としては、例えば特許文献１、２等に開示される技術が知られている。
【０００３】
特許文献１の手法は、その図６のフローチャートに示されている。この従来技術では、物体（オブジェクト）の３次元の配置を、横（Ｘ）と縦（Ｙ）の２次元位置と、その位置に対応する深度値（Ｚ値）として記憶する装置において、プリミティブを逐次的にレンダリングする。そして、そのレンダリングの過程で同一深度値を持つもの、つまり３次元空間的に同じ位置を占めるものが現れれば、それを衝突と判定する。
【０００４】
特許文献２の手法は、その図２、図３により説明されている。この従来技術では、ポリゴンの原点から、そのポリゴンのある方向の面までの距離を予め計算し、キューブマップとして保存する。そして、原点から衝突検出の対象となる物体との距離と、キューブマップに記憶された距離との大小により、衝突を判定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−２０４５４３号公報
【特許文献２】特表２００９−５４５０７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら特許文献１の従来技術では、深度値の更新が、物体を描画する順番に依存するため、衝突の検出漏れが発生する可能性がある。例えば、前方側（手前側）に配置された物体を描画した後で、その後方側（奥側）において別の物体間で衝突が起こったとしても、深度値は既に前方側のオブジェクトの値に更新されているために、それを検出することはできないことになる。
【０００７】
また特許文献２の従来技術では、非凸であるポリゴンの衝突を正確に取り扱うのが困難であるという問題がある。即ち、原点から面までの距離を単一のキューブマップに記憶しているため、ある方向において、そのポリゴンの面が複数ある場合、つまりそのような非凸のポリゴンの場合においては、それを単一のキューブマップとしては表現できないことになる。
【０００８】
本発明の幾つかの態様によれば、衝突検出対象オブジェクトの正確な衝突判定を実現できる衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等を提供できる。
【課題を解決するための手段】
【０００９】
本発明の一態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとを含み、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、前記処理部は、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出システムに関係する。
【００１０】
本発明の一態様によれば、対象面に配置設定されるオブジェクトの深度情報が深度マップ情報として深度バッファーに設定される。そして、描画部は、深度テストを行って衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第１の描画処理と、深度テストを行わずに衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第２の描画処理を行う。そして、これらの第１、第２の描画処理の結果に基づいて衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定が行われる。このようにすれば、深度バッファー処理を有効活用した衝突判定が可能になり、衝突検出対象オブジェクトの正確な衝突判定を実現できるようになる。
【００１１】
また本発明の一態様では、前記処理部は、前記第１の描画処理により生成された第１の画像と、前記第２の描画処理により生成された第２の画像との比較処理を行うことで、前記衝突判定を行ってもよい。
【００１２】
このようにすれば、第１、第２の描画処理により生成された第１、第２の画像の差異を検出することで、衝突判定を実現できるようになる。
【００１３】
また本発明の一態様では、前記処理部は、前記第１の描画処理での描画ピクセル数情報と前記第２の描画処理での描画ピクセル数情報との比較処理を行うだけで、前記衝突判定を行ってもよい。
【００１４】
このようにすれば、第１、第２の描画処理での描画ピクセル数の差異を検出するだけで、衝突判定を実現できるようになる。
【００１５】
また本発明の一態様では、前記描画部は、前記第１の描画処理と前記第２の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画してもよい。
【００１６】
このように、一般的な三次元画像の描画処理とは異なり、平行投影で裏面のプリミティブ面を描画することで、より正確な衝突判定を実現できるようになる。
【００１７】
また本発明の一態様では、前記深度バッファーには、前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されてもよい。
【００１８】
このようにすれば、平行投影のプリミティブ面の描画により衝突判定を行う処理に適切な深度マップ情報を、深度バッファーに設定できるようになる。
【００１９】
また本発明の一態様では、前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第１のパーツオブジェクトと第２のパーツオブジェクトとが、前記視点から見て重ならない場合に、前記描画部は、前記第１の描画処理と前記第２の描画処理の各描画処理において、前記第１のパーツオブジェクトと前記第２のパーツオブジェクトを同時に描画してもよい。
【００２０】
このように第１、第２のパーツオブジェクトを同時に描画すれば、描画処理の回数を節約することが可能になり、処理の高速化等を図れるようになる。
【００２１】
また本発明の一態様では、前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、前記処理部は、前記複数の衝突検出対象オブジェクトのうちの第１の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第１の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第２の衝突検出対象オブジェクトについての前記衝突判定を行ってもよい。
【００２２】
このようにすれば、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定のみならず、衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【００２３】
また本発明の一態様では、前記深度バッファーには、前記衝突検出対象オブジェクトを内包するように設定される第１〜第Ｎの対象面（Ｎは２以上の整数）に対応する第１〜第Ｎの深度マップ情報の各深度マップ情報が設定され、前記描画部は、前記第１〜第Ｎの対象面の各対象面について、深度テストを行って、前記第１〜第Ｎの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第１の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第２の描画処理を行い、前記処理部は、前記第１〜第Ｎの対象面の各対象面についての前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突判定を行ってもよい。
【００２４】
このようにすれば、衝突検出対象オブジェクトに対応する物体を内包する環境の領域を、第１〜第Ｎの対象面により設定して、衝突検出対象オブジェクトの衝突判定を実現できるようになる。
【００２５】
また本発明の一態様では、前記第１〜第Ｎの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であってもよい。
【００２６】
また本発明の一態様では、前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであってもよい。
【００２７】
また本発明の他の態様は、上記のいずれかに記載の衝突検出システムを含むロボットシステムに関係する。
【００２８】
また本発明の他の態様は、対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出方法に関係する。
【００２９】
また本発明の他の態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとして、コンピューターを機能させ、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第１の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第２の描画処理を行い、前記処理部は、前記第１の描画処理と前記第２の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うプログラムに関係する。
【図面の簡単な説明】
【００３０】
【図１】図１（Ａ）〜図１（Ｃ）は深度バッファー処理の説明図。
【図２】図２（Ａ）〜図２（Ｄ）も深度バッファー処理の説明図。
【図３】図３（Ａ）〜図３（Ｃ）は従来技術の問題点についての説明図。
【図４】本実施形態の衝突検出システムの構成例。
【図５】本実施形態の衝突検出システムを含むロボットシステムの例。
【図６】衝突検出対象オブジェクトや対象面に設定されるオブジェクトの説明図。
【図７】対象面に対応して設定される深度マップ情報の説明図。
【図８】図８（Ａ）、図８（Ｂ）も深度マップ情報の説明図。
【図９】６面の深度マップ情報を設定する手法の説明図。
【図１０】図１０（Ａ）〜図１０（Ｃ）は本実施形態の衝突検出手法の説明図。
【図１１】図１１（Ａ）、図１１（Ｂ）も本実施形態の衝突検出手法の説明図。
【図１２】本実施形態の詳細な処理を示すフローチャート。
【図１３】本実施形態の詳細な処理を示すフローチャート。
【発明を実施するための形態】
【００３１】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【００３２】
１．深度バッファー処理
ロボット（マニピュレーター）の動作においては、周辺構造物や周辺機器への衝突や、自己衝突や、他のロボットへの衝突は非常に大きな問題となる。本実施形態の衝突検出手法では、このような衝突をシミュレーションにより事前に検出する。
【００３３】
このような本実施形態の衝突検出手法が用いられる形態としては、大別して、オフラインでの使用（事前確認）と、ラインタイムでの使用（予測、先読み）が考えられる。オフラインの使用では、周辺環境などが既知且つ静的であり、ロボットの動作が既知である場合に、システムの作成時に、その衝突を検証する。一方、ラインタイムの使用では、周辺環境などが動的に変化する場合（例えば周囲に複数のロボットが存在したり、作業者が存在する場合）に、ロボットの実際の動作に先行して、シミュレーションにより衝突を検出する。
【００３４】
従来では、このようなロボットにおける衝突検出手法として、ＣＰＵ（Central Processing Unit)の処理に適したアルゴリズムを使用する場合が殆どであった。ここでＣＰＵ処理に適したアルゴリズムとは、比較的に複雑な単位処理を、比較的に少数（数十から数百程度）の並列度で処理するようなアルゴリズムである。
【００３５】
しかしながら、近年では、消費電力の問題等に起因して、ＣＰＵの動作周波数の伸びは止まっている。このため、最近のＣＰＵの性能向上は、マルチコア化などの処理の並列度の向上によって実現されている。別の言い方をすれば、並列度を上げることができないアルゴリズムでは、処理性能を向上できなくなっている。
【００３６】
一方、ＧＰＵ（Graphics Processing Unit）は、ＣＰＵに比べて非常に大きな並列度を有する。例えば現在のＧＰＵは、ＡＬＵ（算術演算ユニット）を数百から千数百持ち、数万から数百万の処理を並列に実行できる能力を有する。
【００３７】
そこで本実施形態では、衝突検出のアルゴリズムとして、ＣＰＵ処理よりはＧＰＵ処理に適したアルゴリズムを採用することで、従来に比べて高性能な衝突検出を実現する。具体的には、ＧＰＵが有するハードウェアー機能であるＲＯＰ（レンダリング・アウトプット・パイプライン）の機能を最大限に利用する。即ち、このようなＲＯＰ機能を用い、深度テスト機能と深度バッファーを有効活用して衝突検出を実現する。
【００３８】
ここで深度バッファーは、ＣＧ（Computer Graphics）においては主に隠面消去のために用いられ、オブジェクトの深度情報を記憶するものである。具体的にはピクセル単位で深度値（Ｚ値）を記憶する。また、深度情報とは、ピクセル毎の深度値に係る情報である。以下、深度バッファーを用いた深度バッファー処理（Ｚバッファー処理）について説明する。
【００３９】
深度バッファー処理では、ある点を描画する際に、その点の深度値と、深度バッファーに記憶されている深度値を比較する。そして、その点の深度値が大きければ（右手系の場合）、その点のカラー値でカラーバッファーの値を上書きすると共に、その点の深度値で深度バッファーの値を更新する。
【００４０】
例えばオブジェクトＯＢＡ、ＯＢＢ、ＯＢＣが図１（Ａ）、図１（Ｂ）に示すように配置されていたとする。図１（Ａ）はオブジェクトＯＢＡ、ＯＢＢ、ＯＢＣを上方の視点から見た場合の図であり、図１（Ｂ）は前方斜め上の視点から見た場合の図である。ここでオブジェクトは、現実世界の物体をモデル化したものであり、例えば複数のプリミティブ面により構成される。プリミティブ面は、オブジェクトの構成要素であるプリミティブとなる面であり、例えばポリゴン、自由曲面、或いはサブディビジョンサーフェスなどである。
【００４１】
図１（Ｃ）に示すように、深度バッファーを用いた描画処理では、各ピクセルのカラー値（ＲＧＢの色情報）が描画バッファー（カラーバッファー）に書き込まれ、深度値（Ｚ値）が深度バッファー（Ｚバッファー）に書き込まれる。
【００４２】
具体的には図２（Ａ）では深度バッファーの深度値が初期値である最背面値に設定される。そして図２（Ｂ）ではオブジェクトＯＢＡが描画されている。この場合に図２（Ｂ）のＪ１に示す領域でのオブジェクトＯＢＡの各ピクセルの深度値は、図２（Ａ）での深度バッファーの深度値よりも前方側（手前側）の深度値となっている。従って、Ｊ１に示す領域では、オブジェクトＯＢＡのカラー値が描画バッファーに書き込まれると共に、オブジェクトＯＢＡの深度値が深度バッファーに書き込まれて深度値が更新される。
【００４３】
図２（Ｃ）ではオブジェクトＯＢＢが描画されている。この場合に図２（Ｃ）のＪ２に示す領域でのオブジェクトＯＢＢの各ピクセルの深度値は、深度バッファーの深度値よりも後方側（奥側）の深度値となっている。従って、Ｊ２に示す領域では、オブジェクトＯＢＢは隠面消去されたと判断され、オブジェクトＯＢＢのカラー値は描画バッファーには書き込まれず、図２（Ｄ）のＪ３に示すように深度バッファーの深度値も更新されない。
【００４４】
一方、Ｊ４に示す領域でのオブジェクトＯＢＢの各ピクセルの深度値は、深度バッファーの深度値よりも前方側の深度値となっている。従って、Ｊ４に示す領域では、オブジェクトＯＢＢのカラー値が描画バッファーに書き込まれると共に、図２（Ｄ）のＪ５に示すようにオブジェクトＯＢＢの深度値が深度バッファーに書き込まれて深度値が更新される。そして、図２（Ｄ）でオブジェクトＯＢＣが描画されると、上記と同様の手法により、Ｊ６の領域ではカラー値の書き込みや深度値の更新が行われず、Ｊ７の領域ではカラー値の書き込みと深度値の更新が行われる。
【００４５】
以上のような深度バッファー処理を行うことで、描画の順番に依存せずに、奥行き方向での順番が正しく判定され、図１（Ｃ）に示すように適切な隠面消去が行われた画像が生成されるようになる。
【００４６】
さて、前述した特許文献１の従来技術においても、深度バッファーを利用して衝突判定を行っている。例えば、他のオブジェクトの描画により、深度バッファーの深度値が図３（Ａ）に示すようになっていたとする。この場合に図３（Ｂ）のＨ１に示すように、オブジェクトＯＢＡ１では、その深度値がＺバッファーの深度値とは異なるため、ＯＢＡ１は他のオブジェクトと衝突していないと判定される。一方、Ｈ２、Ｈ３に示すように、オブジェクトＯＢＡ２では、その深度値が深度バッファーの深度値と同一になっている。従って、オブジェクトＯＢＡ２は、この深度バッファーの深度値を持った他のオブジェクトと衝突していると判定される。
【００４７】
しかしながら、この特許文献１の従来技術では図３（Ｃ）に示すような問題点がある。図３（Ｃ）では、他のオブジェクトＯＢＤの描画により深度バッファーの深度値がＨ４に示すようになっている。この場合に、Ｈ５に示すようにオブジェクトＯＢＡ３はオブジェクトＯＢＤと衝突しているのにも関わらず、オブジェクトＯＢＡ３の深度値は深度バッファーの深度値と一致していないため、衝突していないと判定されてしまう。またＨ６に示すように深度値が内挿された場合には、オブジェクトＯＢＡ４はオブジェクトＯＢＤと衝突していないのに、衝突していると判定されてしまう。
【００４８】
また、他の手法として、仮想的な視点を、地面等を表す平面状のオブジェクトの背面に設定し、背面から見て、表面にあるはずのオブジェクトが描画されれば、そのオブジェクトが平面と衝突していると判定する手法も考えられる。しかしながら、この手法では、単純な平面が仮定されているが、それが平面ではなく複雑な構造を持つオブジェクト（例えば非凸）である場合には、片方の面との衝突が、別の面によって遮蔽される可能性があり、このような場合には衝突を検出できなくなる。
【００４９】
２．構成
以上のような問題を解決できる本実施形態の衝突検出システムの構成例を図４に示す。なお本実施形態の衝突検出システムの構成は図４の構成には限定されず、その一部の構成要素（例えば操作部、外部Ｉ／Ｆ部等）を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
【００５０】
この衝突検出システムは、処理部１０と、描画処理を行う描画部３０と、記憶部５０（深度バッファー）を含む。また操作部７０、外部Ｉ／Ｆ（インターフェース）部８０、情報記憶媒体９０を含むことができる。
【００５１】
処理部１０は、各種の判定処理や制御処理などを行うものであり、例えばＣＰＵ等の各種のプロセッサー、専用回路（ＡＳＩＣ）などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。処理部１０は、オブジェクト空間設定部１２、衝突判定部１４を含む。
【００５２】
オブジェクト空間設定部１２は、複数のオブジェクトをオブジェクト空間に配置設定する処理等を行う。具体的には、ワールド座標系でのオブジェクトの位置や回転角度を決定し、その位置にその回転角度でオブジェクトを配置する。ここでオブジェクトは、ロボット等の衝突検出対象物や、周辺構造物や周辺機器などの被衝突検出対象物を、モデル化したものであり、ポリゴンや自由曲面などのプリミティブ面で構成される。
【００５３】
衝突判定部１４は、衝突検出対象オブジェクトと被衝突検出対象オブジェクトとの間の衝突判定処理を行うものであり、画像や描画カウント数の比較処理を行う比較処理部１６を含む。
【００５４】
描画部３０は、描画処理を行うものであり、例えばＧＰＵ等の各種のプロセッサー、専用回路（ＡＳＩＣ）などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。この描画部３０での描画処理は、頂点シェーダープログラムにより実現される頂点シェーダーや、ピクセルシェーダープログラムにより実現されるピクセルシェーダーにより実現してもよい。頂点シェーダーでは、頂点の移動処理、座標変換処理、クリッピング処理などが行われる。そして頂点処理後の頂点データに基づいてラスタライズ処理が行われる。またピクセルシェーダーでは、ラスタライズ処理後に、画像を構成するピクセル（フラグメント）単位での処理であるピクセル処理（フラグメント処理）が行われる。即ち、シェーディング言語によって記述されたシェーダープログラムによって、プログラマブルシェーダー処理が実現される。
【００５５】
記憶部５０は、処理部１０や描画部３０などのワーク領域となるもので、ＲＡＭ（ＳＲＡＭ、ＤＲＡＭ等）などのメモリーにより実現できる。この記憶部５０は、オブジェクトデータ記憶部５２、描画バッファー５４、深度バッファー５６を含む。
【００５６】
オブジェクトデータ記憶部５２は、オブジェクトの位置データや回転角度データや形状データなどのオブジェクトデータを記憶する。描画バッファー５４（カラーバッファー、フレームバッファー）は画像情報を記憶するものであり、具体的には、ピクセル単位でカラー値やα値などの画像情報を記憶する。深度バッファー５６（Ｚバッファー）は、深度情報を記憶するものであり、具体的にはピクセル単位で深度値（Ｚ値）を記憶する。これらの描画バッファー５４、深度バッファー５６は、記憶部５０を構成するメモリー上に記憶領域として確保される。
【００５７】
操作部７０は、使用者が各種の操作情報を入力するためのものである。外部Ｉ／Ｆ部８０は、外部との間で有線や無線で情報の通信処理等を行うものである。情報記憶媒体９０は（コンピューターにより読み取り可能な媒体）は、プログラムやデータなどを格納するものであり、その機能は、光ディスク、ＨＤＤ、或いはメモリーなどにより実現できる。処理部１０は、情報記憶媒体９０に格納されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体９０には、本実施形態の各部としてコンピューター（操作部、処理部、記憶部、出力部を備える装置）を機能させるためのプログラム（各部の処理をコンピューターに実行させるためのプログラム）が記憶される。
【００５８】
そして本実施形態の衝突検出システムでは、深度バッファー５６には、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定（記憶）される。例えば後述する図６、図９に示すように、対象面（ＳＦ１〜ＳＦ６）には複数のオブジェクト（ＯＢ１１、ＯＢ１２、ＯＢ２１等）が配置設定される。そして図７〜図８（Ｂ）に示すように、この対象面のオブジェクトの深度情報が深度マップ情報として作成されて、深度バッファー５６に設定される。深度マップは、例えば所定視点（例えば無限遠の視点）から見た場合における対象面のオブジェクトの深度値（ピクセル単位の深度値）のマトリクス配列により表されるマップである。
【００５９】
ここで対象面は、例えば被衝突検出対象物に対応するオブジェクトが配置設定される仮想的な面である。また深度マップ情報は、例えば衝突判定処理の際の所定の視点から見た対象面のオブジェクトの深度値からなる情報である。例えば深度マップは、所定の視点から見た場合における対象面のオブジェクトのピクセル単位の深度値のマトリクス配列により表される。具体的には深度バッファー５６には、例えば対象面のオブジェクトを無限遠の視点（広義には所定の視点）での平行投影で描画することで得られた深度情報が、対象面の深度マップ情報として設定（記憶）される。
【００６０】
そして描画部３０は、後述する図１０（Ａ）、図１０（Ｂ）に示すように、深度テストを行って（深度テストを有効にして。深度テストありで）、深度バッファー５６の深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面（例えばポリゴン）のうち、所定の視点（描画処理における視点）から見て裏面のプリミティブ面を描画する第１の描画処理を行う。また描画部３０は図１０（Ｃ）に示すように、深度テストを行わずに（深度テストを無効にして。深度テストなしで）にして、衝突検出対象オブジェクトを構成するプリミティブ面のうち、視点から見て裏面のプリミティブ面を描画する第２の描画処理を行う。具体的には描画部３０は、上述の第１、第２の描画処理の各描画処理において、衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の視点での平行投影で描画する。
【００６１】
ここで衝突検出対象オブジェクトは、対象面のオブジェクトとの衝突検出対象となるオブジェクトであり、例えばロボットをモデル化したオブジェクトなどである。また、プリミティブ面がポリゴンである場合を例にとると、三角形を構成する３頂点が、視点から見て例えば反時計回りに見える面が表面（front surface, front-facing surface）になり、視点から見て例えば時計回りに見える面が裏面（back surface, back-facing surface）になる。閉じたオブジェクトの表面が外を向いていることを前提にすると、表面を前面、裏面を背面と記述することができる。
【００６２】
また、ここでの深度テストを行うとは（深度テストを有効にするとは）、処理対象ピクセルの深度値が深度バッファー５６の深度値よりも前方側の深度値である場合に、描画バッファー５４の対応するピクセル位置に画像情報（カラーデータ）を書き込むと共に、深度バッファー５６の対応するピクセル位置に処理対象ピクセルの深度値を書き込むことである。
【００６３】
そして処理部１０は、上述の第１の描画処理と第２の描画処理の結果に基づいて、衝突検出対象オブジェクトが対象面のオブジェクトと衝突したか否かを判定する衝突判定を行う。具体的には処理部１０は、図１１（Ａ）に示すように、第１の描画処理により生成された第１の画像と、第２の描画処理により生成された第２の画像との比較処理を行うことで、衝突判定を行う。或いは図１１（Ｂ）に示すように、第１の描画処理での描画ピクセル数情報と第２の描画処理での描画ピクセル数情報との比較処理を行うことで、衝突判定を行う。この衝突判定処理は衝突判定部１４が行う。また第１、第２の画像の比較処理や描画ピクセル数情報の比較処理は、比較処理部１６が行う。なお描画ピクセル数情報は、描画ピクセル数を実質的に表す情報であればよく、描画ピクセル数と等価な情報も含まれる。
【００６４】
以上のように本実施形態では、対象面の深度マップ情報を深度バッファーに設定して、深度テスト（Ｚテスト）を行う第１の描画処理（深度テストを有効にした第１の描画処理）と、深度テストを行わない第２の描画処理（深度テストを無効にした第２の描画処理）を行う。そして、第１、第２の描画処理の結果に基づいて、衝突検出対象オブジェクトの衝突判定を行う。このようにすれば、深度バッファー処理を有効活用した高速（正確）な衝突判定（近接判定）を実現できるようになる。即ち、衝突（近接）の問題を、最新の描画ハードウェアー処理に適した遮蔽処理に置き換えることで、非常に高速に、衝突判定（近接判定）を行うことが可能になる。
【００６５】
なお、衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、複数のパーツオブジェクトのうちの第１のパーツオブジェクトと第２のパーツオブジェクトとが、視点から見て重ならない場合を想定する。この場合に描画部３０は、第１の描画処理と第２の描画処理の各描画処理において、第１のパーツオブジェクトと第２のパーツオブジェクトを同時に描画してもよい。即ち、第１、第２のパーツオブジェクトを１つのパーツオブジェクトのように同時に描画する。例えば後述する図１０（Ａ）において、第１、第２のパーツオブジェクトＰＢ１、ＰＢ２は視点（平行投影の視点）から見て重ならないオブジェクトであり、この場合には第１、第２のパーツオブジェクトＰＢ１、ＰＢ２を１つのパーツオブジェクトのように同時に描画する。このように衝突検出対象オブジェクトの複数のパーツオブジェクト（複数の部分）が視点から見て重なり合わない場合に、これらを同時に描画することで、描画処理の回数が削減され、処理が高速化される。なおパーツオブジェクトは、衝突検出対象オブジェクトなどのモデルオブジェクトを構成する部分となるオブジェクトである。例えば衝突検出対象オブジェクトなどのモデルオブジェクトは、複数のパーツオブジェクトと、パーツオブジェクト間を接続する関節部分などにより構成される。
【００６６】
また衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、処理部１０は、複数の衝突検出対象オブジェクトのうちの第１の衝突検出対象オブジェクトについて衝突判定を行った後、第１の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定し、第２の衝突検出対象オブジェクトについての衝突判定を行ってもよい。即ち、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出の対象となる衝突検出対象オブジェクトを１つ選択し、それ以外の衝突検出対象オブジェクトを、環境を構成するオブジェクトとして取り扱って、衝突判定を行う。こうすることで、衝突検出対象オブジェクトと環境のオブジェクトとの衝突判定のみならず、複数の衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【００６７】
また、衝突検出対象オブジェクトを内包するように第１〜第Ｎの対象面（Ｎは２以上の整数）を設定してもよい。例えば図９では、衝突検出対象オブジェクトであるロボットＲＢを内包する６面の対象面ＳＦ１〜ＳＦ６が設定される。この場合に深度バッファー５６には、第１〜第Ｎの対象面に対応する第１〜第Ｎの深度マップ情報の各深度マップ情報が設定される。即ち、各対象面に配置設定されるオブジェクトの深度情報が、各深度マップ情報として設定される。例えば図９のＳＦ１〜ＳＦ６の各対象面の各深度マップ情報が設定される。この場合の第１〜第Ｎの対象面は、例えば衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面とすることができる。
【００６８】
そして描画部３０は、第１〜第Ｎの対象面の各対象面について、深度テストを行って（深度テストを有効にして）、第１〜第Ｎの深度マップ情報の対応する各深度マップ情報（各対象面に対応する深度マップ情報）を参照しながら、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第１の描画処理を行う。また深度テストを行わずに（深度テストを無効にして）、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第２の描画処理を行う。例えば第１の対象面については、第１の対象面に対応する第１の深度マップ情報を参照しながら第１の描画処理を行うと共に、第２の描画処理を行う。また第２の対象面については、第２の対象面に対応する第２の深度マップ情報を参照しながら第１の描画処理を行うと共に、第２の描画処理を行う。第３〜第Ｎの対象面についても同様である。
【００６９】
そして処理部１０は、第１〜第Ｎの対象面の各対象面についての第１の描画処理と第２の描画処理の結果に基づいて、衝突判定を行う。例えば各対象面について、第１、第２の描画処理で生成された第１、第２の画像の比較処理を行ったり、第１、第２の描画処理の描画ピクセル数情報の比較処理を行って、衝突判定を行う。このようにすれば、衝突検出対象物を囲むように物体が配置されるような環境での衝突判定を、簡素な処理で実現できるようになる。
【００７０】
図５に本実施形態の衝突検出システムを含むロボットシステムの例を示す。このロボットシステムは、制御装置３００（情報処理装置）とロボット３１０とを含む。制御装置３００はロボット３１０の制御処理を行う。具体的には、動作シーケンス情報（シナリオ情報）に基づいてロボット３１０を動作させる制御を行う。ロボット３１０は、アーム３２０及びハンド（把持部）３３０を有する。そして制御装置３００からの動作指示にしたがって動作する。例えば、図示しないパレットに載せられたワークを把持したり、移動するなどの動作を行う。また、図示しない撮像装置で取得された撮像画像情報に基づいて、ロボットの姿勢やワークの位置などの情報が検出され、検出された情報が制御装置３００に送られる。
【００７１】
本実施形態の衝突検出システムは例えば図５の制御装置３００に設けられ、例えば制御装置３００のハードウェアーやプログラムにより衝突検出システムが実現される。そして、ラインタイムの使用では、周辺環境などが動的に変化する場合に、ロボット３１０の実際の動作に先行して、本実施形態の衝突検出システムがシミュレーションにより衝突の判定処理を行う。そして制御装置３００は、ロボット３１０が周辺構造物や周辺機器などに衝突しないように、判定処理の結果に基づいてロボット３１０の制御を行う。一方、オフラインの使用では、本実施形態の衝突検出システムにより、動作シーケンス情報等の作成時にシミュレーションにより衝突を検証する。そして制御装置３００は、衝突が起こらないように作成された動作シーケンス情報（シナリオ情報）に基づいて、ロボット３１０を制御する。
【００７２】
３．本実施形態の手法
次に本実施形態の手法について図面を用いて更に詳細に説明する。なお、以下では衝突検出対象オブジェクトが、ロボットをモデル化したオブジェクトである場合を例にとり説明するが、本実施形態の手法はこれに限定されるものではない。
【００７３】
図６において、ＲＢは、現実世界のロボットをモデル化したオブジェクトである（以下、ロボットオブジェクトを単にロボットＲＢと呼ぶ）。
【００７４】
図６では、ロボットＲＢを内包するような対象面ＳＦ１〜ＳＦ４（以下、対象面を単に面と呼ぶ）が設定される。具体的には図９に示すように、ロボットＲＢの可動範囲を含む仮想的な立方体（又は直方体）が設定される。そして面ＳＦ１、ＳＦ２、ＳＦ３、ＳＦ４、ＳＦ５、ＳＦ６は、各々、この仮想的な立方体を構成する天井面、背面、床面、前面、右面、左面になる。
【００７５】
そして図６では、ロボットＲＢの可動範囲に侵入する構造物を表すオブジェクトが、各面（各対象面）に配置設定される。例えば面ＳＦ１にはオブジェクトＯＢ１１、ＯＢ１２、面ＳＦ２にはオブジェクトＯＢ２１、面ＳＦ３にはオブジェクトＯＢ３１、ＯＢ３２、面ＳＦ４にはオブジェクトＯＢ４１、ＯＢ４２が配置設定される。なお非凸のオブジェクトは凸のオブジェクトとして扱う。
【００７６】
そして図７に示すように、立方体の各面を貫通するオブジェクトの表面（front surface, front-facing surface）により、各面の深度マップ情報（以下、単に深度マップと呼ぶ）を作成する。例えば図７では、面ＳＦ１を貫通するオブジェクトＯＢ１１、ＯＢ１２により面ＳＦ１の深度マップＤＰＭ１が作成される。具体的には、面ＳＦ１のオブジェクトＯＢ１１、ＯＢ１２（ＯＢ１１、ＯＢ１２の表面）を無限遠の視点での平行投影（方向ＤＲＰでの平行投影）で描画することで得られた深度情報が、面ＳＦ１の深度マップＤＰＭ１になる。この深度マップＤＰＭ１は、面ＳＦ１に正対する無限遠の視点から見た場合のオブジェクトＯＢ１１、ＯＢ１２の深度値により構成されるマップである。即ち、天井面ＳＦ１の深度マップＤＰＭ１は、床面ＳＦ３側の無限遠の視点からの深度マップとして表現される。
【００７７】
なお、２つ以上の面を貫通しているオブジェクトについては、それぞれの面の深度マップに加える。例えば図８（Ａ）、図８（Ｂ）において、オブジェクトＯＢ１３は、面ＳＦ１とＳＦ２の両方を貫通している。この場合には、オブジェクトＯＢ１３の深度値は、面ＳＦ１の深度マップＤＰＭ１と面ＳＦ２の深度マップＤＰＭ２の両方に設定される。具体的には図８（Ａ）に示すように、面ＳＦ３から面ＳＦ１に向かう方向の平行投影で、オブジェクトＯＢ１１、ＯＢ１３を描画することで、面ＳＦ１についての深度マップＤＰＭ１が作成される。また図８（Ｂ）に示すように、面ＳＦ４から面ＳＦ２に向かう方向の平行投影で、オブジェクトＯＢ１３、ＯＢ２１を描画することで、面ＳＦ２についての深度マップＤＰＭ２が作成される。なお、いずれの面も貫通していない中空に浮いたような構造物のオブジェクトは存在しないものとする。
【００７８】
以上のような深度マップを、図９の全ての面ＳＦ１〜ＳＦ６について作成する。これにより図９に示すような深度キューブマップが作成される。ここまでが衝突判定処理の前処理となる。
【００７９】
次に、面ＳＦ１〜ＳＦ６のうち１つの面を選択し、その面の深度マップを深度バッファー５６に設定する。例えば図１０（Ａ）では、面ＳＦ１が選択され、面ＳＦ１の深度マップＤＰＭ１が深度バッファー５６に設定される。そしてロボットＲＢの描画処理が行われる。ここでロボットＲＢは、それぞれが凸である１つ以上のパーツオブジェクト（部分）に分割されており、これらの各パーツオブジェクトの描画処理が行われる。なお、パーツオブジェクト間の相互の衝突（自己衝突）については考えないものとする。つまり、これらのパーツオブジェクトの位置は図５の制御装置３００において制御可能であるので、自己衝突は回避されているものとする。
【００８０】
具体的には描画部３０は、深度テストを有効にして、ロボットＲＢのパーツオブジェクトＰＢ１、ＰＢ２を描画する第１の描画処理を行う。そして、得られた画像を参照画像として記録する。例えば、面ＳＦ１の深度マップＤＰＭ１の深度値を参照しながら、図１０（Ａ）のＤ１、Ｄ２に示すようにパーツオブジェクトＰＢ１、ＰＢ２の裏面（背面）を描画する。即ち、パーツオブジェクトＰＢ１、ＰＢ２を構成するポリゴン（広義にはプリミティブ面）のうち、裏面（back surcace, back-facing surface）のポリゴンを描画する。更に具体的には、深度テストを有効にして、図１０（Ａ）のＤＲＰに示す方向の平行投影（無限遠の視点）で、パーツオブジェクトＰＢ１、ＰＢ２の裏面ポリゴンを描画する第１の描画処理を行う。この第１の描画処理により、図１０（Ｂ）に示すような第１の画像が描画バッファー５４上に生成され、この第１の画像が参照画像として例えば他のメモリー領域に記録される。
【００８１】
次に、深度テストを無効にして、ロボットＲＢのパーツオブジェクトＰＢ１、ＰＢ２を描画する第２の描画処理を行う。具体的には、深度テストを無効にして、平行投影で、パーツオブジェクトＰＢ１、ＰＢ２の裏面ポリゴンを描画する第２の描画処理を行う。この第２の描画処理により、図１０（Ｃ）に示すような第２の画像が描画バッファー５４上に生成される。
【００８２】
次に、図１１（Ａ）に示すように、第１の描画処理により得られた参照画像である第１の画像と、第２の描画処理により得られた第２の画像の比較処理が行われる。そして第１、第２の画像の間に差異があれば、衝突が発生したと判定する。即ちロボットＲＢのパーツオブジェクトＰＢ１、ＰＢ２が、面ＳＦ１のオブジェクトに衝突したと判定する。
【００８３】
例えば図１０（Ａ）のＥ１では、ロボットＲＢのパーツオブジェクトＰＢ２が面ＳＦ１のオブジェクトＯＢ１２と衝突している。この場合には、Ｅ１に示す領域においては、オブジェクトＯＢ１２の方が、パーツオブジェクトＰＢ２の裏面ポリゴンよりも、視点から見て前方側になる。従って、深度テストを有効にした第１の描画処理を行うと、図１０（Ａ）のＥ１に示す領域においては、図１０（Ｂ）のＥ２に示すようにパーツオブジェクトＰＢ２の裏面ポリゴンの画像が非描画になる。一方、深度テストを無効にした第２の描画処理においては、面ＳＦ１の深度マップの深度値を参照することなく、パーツオブジェクトＰＢ２の裏面ポリゴンが描画される。このため、図１０（Ｃ）に示すように、Ｅ３に示す領域においてもパーツオブジェクトＰＢ２の裏面ポリゴンの画像が描画される。従って、第１、第２の描画処理により生成された第１、第２の画像の間に差異が生じ、図１１（Ａ）に示すように、これらの第１、第２の画像の差異を検出することで、衝突を検出できるようになる。
【００８４】
以上の処理を、図９に示す全ての面（対象面）ＳＦ１〜ＳＦ６について行う。例えば面ＳＦ２については、図８（Ｂ）に例示されるような深度マップＤＰＭ２を用いて、面ＳＦ４から面ＳＦ２に向かう方向の平行投影で、上述した第１、第２の描画処理を行う。そして、得られた第１、第２の画像の比較処理を行い、第１、第２の画像の間に差異があれば、ロボットＲＢと面ＳＦ２のオブジェクトとの間に衝突が生じたと判定する。他の面ＳＦ３〜ＳＦ６についても同様の処理を行う。そして、ＳＦ１〜ＳＦ６のいずれの面においても、衝突が検出されなかった場合には、衝突が検出されなかったとして、処理を終了する。
【００８５】
以上のように本実施形態では、深度バッファー処理を有効活用して衝突判定を実現しているため、並列性の高い最新の描画ハードウェアー処理に適した衝突判定処理を実現できる。
【００８６】
また例えば通常の３ＤＣＧにおいては、パースのついた画像を生成するために透視投影でポリゴンを描画するのが一般的である。更に、裏面のポリゴンについては、描画コストを減らすために、カリングにより描画しないのが一般的である。
【００８７】
この点、本実施形態では、３ＤＣＧの画像生成のためではなく、衝突判定のために深度バッファー処理を利用している。そして透視投影で描画処理を行うと、正確な衝突判定を実現できなくなるおそれがあり、本実施形態では、この点に着目して平行投影で描画処理を行っている。また、３ＤＣＧにおいては一般的に省略される裏面ポリゴンを描画することで、図１０（Ａ）のＥ１に示すような衝突を、図１１（Ａ）に示すような画像比較により判定することに成功している。
【００８８】
なお、図１１（Ａ）では画像比較により衝突判定を行っているが、本実施形態はこれに限定されず、少なくとも第１、第２の描画処理の結果に基づいて衝突判定できるものであればよい。
【００８９】
例えば図１１（Ｂ）では、第１の描画処理での描画ピクセル数と第２の描画処理での描画ピクセル数の比較処理を行うことで、衝突判定を行っている。例えば第１の描画処理を行ったときに、ハードウェアーとして用意される描画ピクセル数カウンターに設定される描画ピクセル数を、参照描画ピクセル数として記録しておく。そして、この第１の描画処理での参照描画ピクセル数と、第２の描画処理において描画ピクセル数カウンターに設定された描画ピクセル数とを比較することで、衝突を判定する。例えば衝突が発生した場合には、図１１（Ｂ）に示すように第１の描画処理での描画ピクセル数は第２の描画処理での描画ピクセル数よりも少なくなるため、これを検出することで衝突を判定できるようになる。
【００９０】
また図１０（Ａ）において、パーツオブジェクトＰＢ１、ＰＢ２（第１、第２のパーツオブジェクト）は、視点（無限遠の視点）から見て重ならないオブジェクトとなっている。この場合には、第１、第２の各描画処理において、パーツオブジェクトＰＢ１、ＰＢ２を同時に描画する（同じ描画処理シーケンスで描画する）。このようにしても、図１１（Ａ）、図１１（Ｂ）に示すように適正な衝突判定を実現することができる。そしてパーツオブジェクトＰＢ１、ＰＢ２を同時に描画することで、描画処理の回数を節約することができ、処理の高速化等を図れるようになる。
【００９１】
また、例えば第１のロボットについて、図１０（Ａ）〜図１１（Ｂ）等に示す手法により衝突判定を行った後、この第１のロボットを環境のオブジェクトに組み込み、次の第２のロボットの衝突判定を行うようにしてもよい。このようにすれば、複数のロボットが存在する場合に、これらの複数のロボットの各ロボットと周辺構造物や周辺機器との間の衝突判定のみならず、ロボット間での衝突判定についても実現できるようになる。
【００９２】
また図９では、ロボットの可動範囲に設定される対象面の数が６面である場合を例に取り説明したが、本実施形態はこれに限定されない。例えば対象面の数は、ロボットが動作する環境に応じて適宜設定することが可能であり、対象面の数が６面よりも少なくてもよい。
【００９３】
また、深度マップ情報の設定手法や、衝突検出対象オブジェクトの描画手法も、図６〜図１０（Ｃ）で説明した手法には限定されず、種々の変形実施が可能である。更に、第１、第２の描画処理の結果に基づく衝突判定処理も、図１１（Ａ）、図１１（Ｂ）で説明した画像の比較処理や描画ピクセル数の比較処理に限定されるものではなく、種々の変形実施が可能である。
【００９４】
４．詳細な処理
次に本実施形態の詳細な処理例について図１２、図１３のフローチャートを用いて説明する。
【００９５】
まず図１２に示すように、６面（図９のＳＦ１〜ＳＦ６）の全てを処理したか否かを判断する（ステップＳ１）。そして６面の全てについての処理が終了し、衝突が検出されなかった場合には、衝突無しとして処理を終了する（ステップＳ２）。
【００９６】
一方、６面の全てについての処理が終了していない場合には、処理が終了していない１つの面を選択する（ステップＳ３）。そして、選択した面の深度マップを深度バッファー５６に設定する（ステップＳ４）。例えば図８（Ａ）の面ＳＦ１の深度マップＤＰＭ１を設定したり、図８（Ｂ）の面ＳＦ２の深度マップＤＰＭ２を設定する。
【００９７】
次に、ロボットの全てのパーツオブジェクト（部分）を描画したか否かを判断し（ステップＳ５）、描画していない場合には未描画のパーツオブジェクトを１つ選択する（ステップＳ６）。なお図１０（Ａ）、図１０（Ｂ）のように視点から見て重ならないパーツオブジェクトＰＢ１、ＰＢ２については、１つのパーツオブジェクトとして選択する。そして図１０（Ａ）で説明したように、深度テストを有効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画し、得られた画像を参照画像として記憶する（ステップＳ７、Ｓ８）。
【００９８】
次に、深度テストを無効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画する（ステップＳ９）。そしてステップＳ８で記憶された参照画像と、ステップＳ９で生成された現画像との間に差異があるか否かを判断し、差異があった場合には、衝突ありとして処理を終了する（ステップＳ１０、Ｓ１１）。一方、差異が無かった場合にはステップＳ５の処理に戻り、次のパーツオブジェクトを選択等を行う。
【００９９】
図１３は複数のロボットが存在する場合の衝突判定処理を示すフローチャートである。
【０１００】
まず、Ｎ＝１に設定する（ステップＳ２１）。次に、Ｎ番目のロボットを衝突検出対象として選択する（ステップＳ２２）。そして、６面の全てについて、Ｎ番目のロボットの描画処理を行って衝突判定を行う（ステップＳ２３）。即ち図１２で説明した衝突判定を行う。
【０１０１】
次に、衝突判定が行われたＮ番目のロボットを、被衝突検出対象となる環境のオブジェクトに組み込む（ステップＳ２４）。そして、全てのロボットを処理したか否かを判断し（ステップＳ２５）、処理してなかった場合にはＮを１だけインクリメントして（ステップＳ２６）、ステップＳ２２の処理に戻る。一方、全てのロボットを処理した場合には、処理を終了する（ステップＳ２７）。
【０１０２】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。また衝突検出システム、ロボットシステムの構成・動作や、深度マップ情報の設定手法、衝突検出対象オブジェクトの描画手法、衝突検出対象オブジェクトの衝突判定手法等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【０１０３】
ＯＢＡ〜ＯＢＣ、ＯＢＡ１〜ＯＢＡ４、ＯＢ１１〜ＯＢ４１  オブジェクト、
ＲＢ  ロボット（衝突検出対象オブジェクト）、ＳＦ１〜ＳＦ６  対象面、
ＤＰＭ１、ＤＰＭ２  深度マップ、ＤＲＰ  平行投影の方向、
１０  処理部、１２  オブジェクト空間設定部、１４  衝突判定部、１６  比較処理部、
３０  描画部、５０  記憶部、５２  オブジェクトデータ記憶部、
５４  描画バッファー、５６  深度バッファー、７０  操作部、８０  外部Ｉ／Ｆ部、９０  情報記憶媒体、３００  制御装置、３１０  ロボット、３２０  アーム、
３３０  ハンド
【図１】
0005708196.tif 000002
【図２】
0005708196.tif 000003
【図３】
0005708196.tif 000004
【図４】
0005708196.tif 000005
【図５】
0005708196.tif 000006
【図６】
0005708196.tif 000007
【図７】
0005708196.tif 000008
【図８】
0005708196.tif 000009
【図９】
0005708196.tif 000010
【図１０】
0005708196.tif 000011
【図１１】
0005708196.tif 000012
【図１２】
0005708196.tif 000013
【図１３】
0005708196.tif 000014