衝突検出システム、ロボットシステム、衝突検出方法及びプログラム
【課題】衝突検出対象オブジェクトの正確な衝突判定を実現できる衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等の提供。
【解決手段】衝突検出システムは処理部と描画部と深度バッファーを含む。深度バッファーには、対象面に配置設定されるオブジェクトの深度情報を深度マップ情報が設定される。描画部は、深度テストを行って、深度バッファーを参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行う。また深度テストを行わずに、衝突検出対象オブジェクトを構成するプリミティブ面のうち、視点から見て裏面のプリミティブ面を描画する第2の描画処理を行う。処理部は、第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトが対象面のオブジェクトと衝突したか否かを判定する衝突判定を行う。
【解決手段】衝突検出システムは処理部と描画部と深度バッファーを含む。深度バッファーには、対象面に配置設定されるオブジェクトの深度情報を深度マップ情報が設定される。描画部は、深度テストを行って、深度バッファーを参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行う。また深度テストを行わずに、衝突検出対象オブジェクトを構成するプリミティブ面のうち、視点から見て裏面のプリミティブ面を描画する第2の描画処理を行う。処理部は、第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトが対象面のオブジェクトと衝突したか否かを判定する衝突判定を行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等に関する。
【背景技術】
【0002】
物体間の衝突や近接の有無を判定することは多くの分野で必要とされている。例えばロボットなどの分野において、衝突の発生は非常に大きな問題となる。このため、従来より、実際に衝突が発生する以前に、衝突の有無や、許容された以上の近接を、コンピューターによる計算により判定する手法が研究、開発されている。このような衝突判定手法の従来技術としては、例えば特許文献1、2等に開示される技術が知られている。
【0003】
特許文献1の手法は、その図6のフローチャートに示されている。この従来技術では、物体(オブジェクト)の3次元の配置を、横(X)と縦(Y)の2次元位置と、その位置に対応する深度値(Z値)として記憶する装置において、プリミティブを逐次的にレンダリングする。そして、そのレンダリングの過程で同一深度値を持つもの、つまり3次元空間的に同じ位置を占めるものが現れれば、それを衝突と判定する。
【0004】
特許文献2の手法は、その図2、図3により説明されている。この従来技術では、ポリゴンの原点から、そのポリゴンのある方向の面までの距離を予め計算し、キューブマップとして保存する。そして、原点から衝突検出の対象となる物体との距離と、キューブマップに記憶された距離との大小により、衝突を判定する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平9−204543号公報
【特許文献2】特表2009−545075号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら特許文献1の従来技術では、深度値の更新が、物体を描画する順番に依存するため、衝突の検出漏れが発生する可能性がある。例えば、前方側(手前側)に配置された物体を描画した後で、その後方側(奥側)において別の物体間で衝突が起こったとしても、深度値は既に前方側のオブジェクトの値に更新されているために、それを検出することはできないことになる。
【0007】
また特許文献2の従来技術では、非凸であるポリゴンの衝突を正確に取り扱うのが困難であるという問題がある。即ち、原点から面までの距離を単一のキューブマップに記憶しているため、ある方向において、そのポリゴンの面が複数ある場合、つまりそのような非凸のポリゴンの場合においては、それを単一のキューブマップとしては表現できないことになる。
【0008】
本発明の幾つかの態様によれば、衝突検出対象オブジェクトの正確な衝突判定を実現できる衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等を提供できる。
【課題を解決するための手段】
【0009】
本発明の一態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとを含み、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記処理部は、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出システムに関係する。
【0010】
本発明の一態様によれば、対象面に配置設定されるオブジェクトの深度情報が深度マップ情報として深度バッファーに設定される。そして、描画部は、深度テストを行って衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第1の描画処理と、深度テストを行わずに衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第2の描画処理を行う。そして、これらの第1、第2の描画処理の結果に基づいて衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定が行われる。このようにすれば、深度バッファー処理を有効活用した衝突判定が可能になり、衝突検出対象オブジェクトの正確な衝突判定を実現できるようになる。
【0011】
また本発明の一態様では、前記処理部は、前記第1の描画処理により生成された第1の画像と、前記第2の描画処理により生成された第2の画像との比較処理を行うことで、前記衝突判定を行ってもよい。
【0012】
このようにすれば、第1、第2の描画処理により生成された第1、第2の画像の差異を検出することで、衝突判定を実現できるようになる。
【0013】
また本発明の一態様では、前記処理部は、前記第1の描画処理での描画ピクセル数情報と前記第2の描画処理での描画ピクセル数情報との比較処理を行うだけで、前記衝突判定を行ってもよい。
【0014】
このようにすれば、第1、第2の描画処理での描画ピクセル数の差異を検出するだけで、衝突判定を実現できるようになる。
【0015】
また本発明の一態様では、前記描画部は、前記第1の描画処理と前記第2の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画してもよい。
【0016】
このように、一般的な三次元画像の描画処理とは異なり、平行投影で裏面のプリミティブ面を描画することで、より正確な衝突判定を実現できるようになる。
【0017】
また本発明の一態様では、前記深度バッファーには、前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されてもよい。
【0018】
このようにすれば、平行投影のプリミティブ面の描画により衝突判定を行う処理に適切な深度マップ情報を、深度バッファーに設定できるようになる。
【0019】
また本発明の一態様では、前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、前記視点から見て重ならない場合に、前記描画部は、前記第1の描画処理と前記第2の描画処理の各描画処理において、前記第1のパーツオブジェクトと前記第2のパーツオブジェクトを同時に描画してもよい。
【0020】
このように第1、第2のパーツオブジェクトを同時に描画すれば、描画処理の回数を節約することが可能になり、処理の高速化等を図れるようになる。
【0021】
また本発明の一態様では、前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、前記処理部は、前記複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第2の衝突検出対象オブジェクトについての前記衝突判定を行ってもよい。
【0022】
このようにすれば、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定のみならず、衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【0023】
また本発明の一態様では、前記深度バッファーには、前記衝突検出対象オブジェクトを内包するように設定される第1〜第Nの対象面(Nは2以上の整数)に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定され、前記描画部は、前記第1〜第Nの対象面の各対象面について、深度テストを行って、前記第1〜第Nの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第1の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第2の描画処理を行い、前記処理部は、前記第1〜第Nの対象面の各対象面についての前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突判定を行ってもよい。
【0024】
このようにすれば、衝突検出対象オブジェクトに対応する物体を内包する環境の領域を、第1〜第Nの対象面により設定して、衝突検出対象オブジェクトの衝突判定を実現できるようになる。
【0025】
また本発明の一態様では、前記第1〜第Nの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であってもよい。
【0026】
また本発明の一態様では、前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであってもよい。
【0027】
また本発明の他の態様は、上記のいずれかに記載の衝突検出システムを含むロボットシステムに関係する。
【0028】
また本発明の他の態様は、対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出方法に関係する。
【0029】
また本発明の他の態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとして、コンピューターを機能させ、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記処理部は、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うプログラムに関係する。
【図面の簡単な説明】
【0030】
【図1】図1(A)〜図1(C)は深度バッファー処理の説明図。
【図2】図2(A)〜図2(D)も深度バッファー処理の説明図。
【図3】図3(A)〜図3(C)は従来技術の問題点についての説明図。
【図4】本実施形態の衝突検出システムの構成例。
【図5】本実施形態の衝突検出システムを含むロボットシステムの例。
【図6】衝突検出対象オブジェクトや対象面に設定されるオブジェクトの説明図。
【図7】対象面に対応して設定される深度マップ情報の説明図。
【図8】図8(A)、図8(B)も深度マップ情報の説明図。
【図9】6面の深度マップ情報を設定する手法の説明図。
【図10】図10(A)〜図10(C)は本実施形態の衝突検出手法の説明図。
【図11】図11(A)、図11(B)も本実施形態の衝突検出手法の説明図。
【図12】本実施形態の詳細な処理を示すフローチャート。
【図13】本実施形態の詳細な処理を示すフローチャート。
【発明を実施するための形態】
【0031】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【0032】
1.深度バッファー処理
ロボット(マニピュレーター)の動作においては、周辺構造物や周辺機器への衝突や、自己衝突や、他のロボットへの衝突は非常に大きな問題となる。本実施形態の衝突検出手法では、このような衝突をシミュレーションにより事前に検出する。
【0033】
このような本実施形態の衝突検出手法が用いられる形態としては、大別して、オフラインでの使用(事前確認)と、ラインタイムでの使用(予測、先読み)が考えられる。オフラインの使用では、周辺環境などが既知且つ静的であり、ロボットの動作が既知である場合に、システムの作成時に、その衝突を検証する。一方、ラインタイムの使用では、周辺環境などが動的に変化する場合(例えば周囲に複数のロボットが存在したり、作業者が存在する場合)に、ロボットの実際の動作に先行して、シミュレーションにより衝突を検出する。
【0034】
従来では、このようなロボットにおける衝突検出手法として、CPU(Central Processing Unit)の処理に適したアルゴリズムを使用する場合が殆どであった。ここでCPU処理に適したアルゴリズムとは、比較的に複雑な単位処理を、比較的に少数(数十から数百程度)の並列度で処理するようなアルゴリズムである。
【0035】
しかしながら、近年では、消費電力の問題等に起因して、CPUの動作周波数の伸びは止まっている。このため、最近のCPUの性能向上は、マルチコア化などの処理の並列度の向上によって実現されている。別の言い方をすれば、並列度を上げることができないアルゴリズムでは、処理性能を向上できなくなっている。
【0036】
一方、GPU(Graphics Processing Unit)は、CPUに比べて非常に大きな並列度を有する。例えば現在のGPUは、ALU(算術演算ユニット)を数百から千数百持ち、数万から数百万の処理を並列に実行できる能力を有する。
【0037】
そこで本実施形態では、衝突検出のアルゴリズムとして、CPU処理よりはGPU処理に適したアルゴリズムを採用することで、従来に比べて高性能な衝突検出を実現する。具体的には、GPUが有するハードウェアー機能であるROP(レンダリング・アウトプット・パイプライン)の機能を最大限に利用する。即ち、このようなROP機能を用い、深度テスト機能と深度バッファーを有効活用して衝突検出を実現する。
【0038】
ここで深度バッファーは、CG(Computer Graphics)においては主に隠面消去のために用いられ、オブジェクトの深度情報を記憶するものである。具体的にはピクセル単位で深度値(Z値)を記憶する。また、深度情報とは、ピクセル毎の深度値に係る情報である。以下、深度バッファーを用いた深度バッファー処理(Zバッファー処理)について説明する。
【0039】
深度バッファー処理では、ある点を描画する際に、その点の深度値と、深度バッファーに記憶されている深度値を比較する。そして、その点の深度値が大きければ(右手系の場合)、その点のカラー値でカラーバッファーの値を上書きすると共に、その点の深度値で深度バッファーの値を更新する。
【0040】
例えばオブジェクトOBA、OBB、OBCが図1(A)、図1(B)に示すように配置されていたとする。図1(A)はオブジェクトOBA、OBB、OBCを上方の視点から見た場合の図であり、図1(B)は前方斜め上の視点から見た場合の図である。ここでオブジェクトは、現実世界の物体をモデル化したものであり、例えば複数のプリミティブ面により構成される。プリミティブ面は、オブジェクトの構成要素であるプリミティブとなる面であり、例えばポリゴン、自由曲面、或いはサブディビジョンサーフェスなどである。
【0041】
図1(C)に示すように、深度バッファーを用いた描画処理では、各ピクセルのカラー値(RGBの色情報)が描画バッファー(カラーバッファー)に書き込まれ、深度値(Z値)が深度バッファー(Zバッファー)に書き込まれる。
【0042】
具体的には図2(A)では深度バッファーの深度値が初期値である最背面値に設定される。そして図2(B)ではオブジェクトOBAが描画されている。この場合に図2(B)のJ1に示す領域でのオブジェクトOBAの各ピクセルの深度値は、図2(A)での深度バッファーの深度値よりも前方側(手前側)の深度値となっている。従って、J1に示す領域では、オブジェクトOBAのカラー値が描画バッファーに書き込まれると共に、オブジェクトOBAの深度値が深度バッファーに書き込まれて深度値が更新される。
【0043】
図2(C)ではオブジェクトOBBが描画されている。この場合に図2(C)のJ2に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも後方側(奥側)の深度値となっている。従って、J2に示す領域では、オブジェクトOBBは隠面消去されたと判断され、オブジェクトOBBのカラー値は描画バッファーには書き込まれず、図2(D)のJ3に示すように深度バッファーの深度値も更新されない。
【0044】
一方、J4に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも前方側の深度値となっている。従って、J4に示す領域では、オブジェクトOBBのカラー値が描画バッファーに書き込まれると共に、図2(D)のJ5に示すようにオブジェクトOBBの深度値が深度バッファーに書き込まれて深度値が更新される。そして、図2(D)でオブジェクトOBCが描画されると、上記と同様の手法により、J6の領域ではカラー値の書き込みや深度値の更新が行われず、J7の領域ではカラー値の書き込みと深度値の更新が行われる。
【0045】
以上のような深度バッファー処理を行うことで、描画の順番に依存せずに、奥行き方向での順番が正しく判定され、図1(C)に示すように適切な隠面消去が行われた画像が生成されるようになる。
【0046】
さて、前述した特許文献1の従来技術においても、深度バッファーを利用して衝突判定を行っている。例えば、他のオブジェクトの描画により、深度バッファーの深度値が図3(A)に示すようになっていたとする。この場合に図3(B)のH1に示すように、オブジェクトOBA1では、その深度値がZバッファーの深度値とは異なるため、OBA1は他のオブジェクトと衝突していないと判定される。一方、H2、H3に示すように、オブジェクトOBA2では、その深度値が深度バッファーの深度値と同一になっている。従って、オブジェクトOBA2は、この深度バッファーの深度値を持った他のオブジェクトと衝突していると判定される。
【0047】
しかしながら、この特許文献1の従来技術では図3(C)に示すような問題点がある。図3(C)では、他のオブジェクトOBDの描画により深度バッファーの深度値がH4に示すようになっている。この場合に、H5に示すようにオブジェクトOBA3はオブジェクトOBDと衝突しているのにも関わらず、オブジェクトOBA3の深度値は深度バッファーの深度値と一致していないため、衝突していないと判定されてしまう。またH6に示すように深度値が内挿された場合には、オブジェクトOBA4はオブジェクトOBDと衝突していないのに、衝突していると判定されてしまう。
【0048】
また、他の手法として、仮想的な視点を、地面等を表す平面状のオブジェクトの背面に設定し、背面から見て、表面にあるはずのオブジェクトが描画されれば、そのオブジェクトが平面と衝突していると判定する手法も考えられる。しかしながら、この手法では、単純な平面が仮定されているが、それが平面ではなく複雑な構造を持つオブジェクト(例えば非凸)である場合には、片方の面との衝突が、別の面によって遮蔽される可能性があり、このような場合には衝突を検出できなくなる。
【0049】
2.構成
以上のような問題を解決できる本実施形態の衝突検出システムの構成例を図4に示す。なお本実施形態の衝突検出システムの構成は図4の構成には限定されず、その一部の構成要素(例えば操作部、外部I/F部等)を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
【0050】
この衝突検出システムは、処理部10と、描画処理を行う描画部30と、記憶部50(深度バッファー)を含む。また操作部70、外部I/F(インターフェース)部80、情報記憶媒体90を含むことができる。
【0051】
処理部10は、各種の判定処理や制御処理などを行うものであり、例えばCPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。処理部10は、オブジェクト空間設定部12、衝突判定部14を含む。
【0052】
オブジェクト空間設定部12は、複数のオブジェクトをオブジェクト空間に配置設定する処理等を行う。具体的には、ワールド座標系でのオブジェクトの位置や回転角度を決定し、その位置にその回転角度でオブジェクトを配置する。ここでオブジェクトは、ロボット等の衝突検出対象物や、周辺構造物や周辺機器などの被衝突検出対象物を、モデル化したものであり、ポリゴンや自由曲面などのプリミティブ面で構成される。
【0053】
衝突判定部14は、衝突検出対象オブジェクトと被衝突検出対象オブジェクトとの間の衝突判定処理を行うものであり、画像や描画カウント数の比較処理を行う比較処理部16を含む。
【0054】
描画部30は、描画処理を行うものであり、例えばGPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。この描画部30での描画処理は、頂点シェーダープログラムにより実現される頂点シェーダーや、ピクセルシェーダープログラムにより実現されるピクセルシェーダーにより実現してもよい。頂点シェーダーでは、頂点の移動処理、座標変換処理、クリッピング処理などが行われる。そして頂点処理後の頂点データに基づいてラスタライズ処理が行われる。またピクセルシェーダーでは、ラスタライズ処理後に、画像を構成するピクセル(フラグメント)単位での処理であるピクセル処理(フラグメント処理)が行われる。即ち、シェーディング言語によって記述されたシェーダープログラムによって、プログラマブルシェーダー処理が実現される。
【0055】
記憶部50は、処理部10や描画部30などのワーク領域となるもので、RAM(SRAM、DRAM等)などのメモリーにより実現できる。この記憶部50は、オブジェクトデータ記憶部52、描画バッファー54、深度バッファー56を含む。
【0056】
オブジェクトデータ記憶部52は、オブジェクトの位置データや回転角度データや形状データなどのオブジェクトデータを記憶する。描画バッファー54(カラーバッファー、フレームバッファー)は画像情報を記憶するものであり、具体的には、ピクセル単位でカラー値やα値などの画像情報を記憶する。深度バッファー56(Zバッファー)は、深度情報を記憶するものであり、具体的にはピクセル単位で深度値(Z値)を記憶する。これらの描画バッファー54、深度バッファー56は、記憶部50を構成するメモリー上に記憶領域として確保される。
【0057】
操作部70は、使用者が各種の操作情報を入力するためのものである。外部I/F部80は、外部との間で有線や無線で情報の通信処理等を行うものである。情報記憶媒体90は(コンピューターにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク、HDD、或いはメモリーなどにより実現できる。処理部10は、情報記憶媒体90に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体90には、本実施形態の各部としてコンピューター(操作部、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピューターに実行させるためのプログラム)が記憶される。
【0058】
そして本実施形態の衝突検出システムでは、深度バッファー56には、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定(記憶)される。例えば後述する図6、図9に示すように、対象面(SF1〜SF6)には複数のオブジェクト(OB11、OB12、OB21等)が配置設定される。そして図7〜図8(B)に示すように、この対象面のオブジェクトの深度情報が深度マップ情報として作成されて、深度バッファー56に設定される。深度マップは、例えば所定視点(例えば無限遠の視点)から見た場合における対象面のオブジェクトの深度値(ピクセル単位の深度値)のマトリクス配列により表されるマップである。
【0059】
ここで対象面は、例えば被衝突検出対象物に対応するオブジェクトが配置設定される仮想的な面である。また深度マップ情報は、例えば衝突判定処理の際の所定の視点から見た対象面のオブジェクトの深度値からなる情報である。例えば深度マップは、所定の視点から見た場合における対象面のオブジェクトのピクセル単位の深度値のマトリクス配列により表される。具体的には深度バッファー56には、例えば対象面のオブジェクトを無限遠の視点(広義には所定の視点)での平行投影で描画することで得られた深度情報が、対象面の深度マップ情報として設定(記憶)される。
【0060】
そして描画部30は、後述する図10(A)、図10(B)に示すように、深度テストを行って(深度テストを有効にして。深度テストありで)、深度バッファー56の深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面(例えばポリゴン)のうち、所定の視点(描画処理における視点)から見て裏面のプリミティブ面を描画する第1の描画処理を行う。また描画部30は図10(C)に示すように、深度テストを行わずに(深度テストを無効にして。深度テストなしで)にして、衝突検出対象オブジェクトを構成するプリミティブ面のうち、視点から見て裏面のプリミティブ面を描画する第2の描画処理を行う。具体的には描画部30は、上述の第1、第2の描画処理の各描画処理において、衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の視点での平行投影で描画する。
【0061】
ここで衝突検出対象オブジェクトは、対象面のオブジェクトとの衝突検出対象となるオブジェクトであり、例えばロボットをモデル化したオブジェクトなどである。また、プリミティブ面がポリゴンである場合を例にとると、三角形を構成する3頂点が、視点から見て例えば反時計回りに見える面が表面(front surface, front-facing surface)になり、視点から見て例えば時計回りに見える面が裏面(back surface, back-facing surface)になる。閉じたオブジェクトの表面が外を向いていることを前提にすると、表面を前面、裏面を背面と記述することができる。
【0062】
また、ここでの深度テストを行うとは(深度テストを有効にするとは)、処理対象ピクセルの深度値が深度バッファー56の深度値よりも前方側の深度値である場合に、描画バッファー54の対応するピクセル位置に画像情報(カラーデータ)を書き込むと共に、深度バッファー56の対応するピクセル位置に処理対象ピクセルの深度値を書き込むことである。
【0063】
そして処理部10は、上述の第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトが対象面のオブジェクトと衝突したか否かを判定する衝突判定を行う。具体的には処理部10は、図11(A)に示すように、第1の描画処理により生成された第1の画像と、第2の描画処理により生成された第2の画像との比較処理を行うことで、衝突判定を行う。或いは図11(B)に示すように、第1の描画処理での描画ピクセル数情報と第2の描画処理での描画ピクセル数情報との比較処理を行うことで、衝突判定を行う。この衝突判定処理は衝突判定部14が行う。また第1、第2の画像の比較処理や描画ピクセル数情報の比較処理は、比較処理部16が行う。なお描画ピクセル数情報は、描画ピクセル数を実質的に表す情報であればよく、描画ピクセル数と等価な情報も含まれる。
【0064】
以上のように本実施形態では、対象面の深度マップ情報を深度バッファーに設定して、深度テスト(Zテスト)を行う第1の描画処理(深度テストを有効にした第1の描画処理)と、深度テストを行わない第2の描画処理(深度テストを無効にした第2の描画処理)を行う。そして、第1、第2の描画処理の結果に基づいて、衝突検出対象オブジェクトの衝突判定を行う。このようにすれば、深度バッファー処理を有効活用した高速(正確)な衝突判定(近接判定)を実現できるようになる。即ち、衝突(近接)の問題を、最新の描画ハードウェアー処理に適した遮蔽処理に置き換えることで、非常に高速に、衝突判定(近接判定)を行うことが可能になる。
【0065】
なお、衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、視点から見て重ならない場合を想定する。この場合に描画部30は、第1の描画処理と第2の描画処理の各描画処理において、第1のパーツオブジェクトと第2のパーツオブジェクトを同時に描画してもよい。即ち、第1、第2のパーツオブジェクトを1つのパーツオブジェクトのように同時に描画する。例えば後述する図10(A)において、第1、第2のパーツオブジェクトPB1、PB2は視点(平行投影の視点)から見て重ならないオブジェクトであり、この場合には第1、第2のパーツオブジェクトPB1、PB2を1つのパーツオブジェクトのように同時に描画する。このように衝突検出対象オブジェクトの複数のパーツオブジェクト(複数の部分)が視点から見て重なり合わない場合に、これらを同時に描画することで、描画処理の回数が削減され、処理が高速化される。なおパーツオブジェクトは、衝突検出対象オブジェクトなどのモデルオブジェクトを構成する部分となるオブジェクトである。例えば衝突検出対象オブジェクトなどのモデルオブジェクトは、複数のパーツオブジェクトと、パーツオブジェクト間を接続する関節部分などにより構成される。
【0066】
また衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、処理部10は、複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて衝突判定を行った後、第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定し、第2の衝突検出対象オブジェクトについての衝突判定を行ってもよい。即ち、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出の対象となる衝突検出対象オブジェクトを1つ選択し、それ以外の衝突検出対象オブジェクトを、環境を構成するオブジェクトとして取り扱って、衝突判定を行う。こうすることで、衝突検出対象オブジェクトと環境のオブジェクトとの衝突判定のみならず、複数の衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【0067】
また、衝突検出対象オブジェクトを内包するように第1〜第Nの対象面(Nは2以上の整数)を設定してもよい。例えば図9では、衝突検出対象オブジェクトであるロボットRBを内包する6面の対象面SF1〜SF6が設定される。この場合に深度バッファー56には、第1〜第Nの対象面に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定される。即ち、各対象面に配置設定されるオブジェクトの深度情報が、各深度マップ情報として設定される。例えば図9のSF1〜SF6の各対象面の各深度マップ情報が設定される。この場合の第1〜第Nの対象面は、例えば衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面とすることができる。
【0068】
そして描画部30は、第1〜第Nの対象面の各対象面について、深度テストを行って(深度テストを有効にして)、第1〜第Nの深度マップ情報の対応する各深度マップ情報(各対象面に対応する深度マップ情報)を参照しながら、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第1の描画処理を行う。また深度テストを行わずに(深度テストを無効にして)、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第2の描画処理を行う。例えば第1の対象面については、第1の対象面に対応する第1の深度マップ情報を参照しながら第1の描画処理を行うと共に、第2の描画処理を行う。また第2の対象面については、第2の対象面に対応する第2の深度マップ情報を参照しながら第1の描画処理を行うと共に、第2の描画処理を行う。第3〜第Nの対象面についても同様である。
【0069】
そして処理部10は、第1〜第Nの対象面の各対象面についての第1の描画処理と第2の描画処理の結果に基づいて、衝突判定を行う。例えば各対象面について、第1、第2の描画処理で生成された第1、第2の画像の比較処理を行ったり、第1、第2の描画処理の描画ピクセル数情報の比較処理を行って、衝突判定を行う。このようにすれば、衝突検出対象物を囲むように物体が配置されるような環境での衝突判定を、簡素な処理で実現できるようになる。
【0070】
図5に本実施形態の衝突検出システムを含むロボットシステムの例を示す。このロボットシステムは、制御装置300(情報処理装置)とロボット310とを含む。制御装置300はロボット310の制御処理を行う。具体的には、動作シーケンス情報(シナリオ情報)に基づいてロボット310を動作させる制御を行う。ロボット310は、アーム320及びハンド(把持部)330を有する。そして制御装置300からの動作指示にしたがって動作する。例えば、図示しないパレットに載せられたワークを把持したり、移動するなどの動作を行う。また、図示しない撮像装置で取得された撮像画像情報に基づいて、ロボットの姿勢やワークの位置などの情報が検出され、検出された情報が制御装置300に送られる。
【0071】
本実施形態の衝突検出システムは例えば図5の制御装置300に設けられ、例えば制御装置300のハードウェアーやプログラムにより衝突検出システムが実現される。そして、ラインタイムの使用では、周辺環境などが動的に変化する場合に、ロボット310の実際の動作に先行して、本実施形態の衝突検出システムがシミュレーションにより衝突の判定処理を行う。そして制御装置300は、ロボット310が周辺構造物や周辺機器などに衝突しないように、判定処理の結果に基づいてロボット310の制御を行う。一方、オフラインの使用では、本実施形態の衝突検出システムにより、動作シーケンス情報等の作成時にシミュレーションにより衝突を検証する。そして制御装置300は、衝突が起こらないように作成された動作シーケンス情報(シナリオ情報)に基づいて、ロボット310を制御する。
【0072】
3.本実施形態の手法
次に本実施形態の手法について図面を用いて更に詳細に説明する。なお、以下では衝突検出対象オブジェクトが、ロボットをモデル化したオブジェクトである場合を例にとり説明するが、本実施形態の手法はこれに限定されるものではない。
【0073】
図6において、RBは、現実世界のロボットをモデル化したオブジェクトである(以下、ロボットオブジェクトを単にロボットRBと呼ぶ)。
【0074】
図6では、ロボットRBを内包するような対象面SF1〜SF4(以下、対象面を単に面と呼ぶ)が設定される。具体的には図9に示すように、ロボットRBの可動範囲を含む仮想的な立方体(又は直方体)が設定される。そして面SF1、SF2、SF3、SF4、SF5、SF6は、各々、この仮想的な立方体を構成する天井面、背面、床面、前面、右面、左面になる。
【0075】
そして図6では、ロボットRBの可動範囲に侵入する構造物を表すオブジェクトが、各面(各対象面)に配置設定される。例えば面SF1にはオブジェクトOB11、OB12、面SF2にはオブジェクトOB21、面SF3にはオブジェクトOB31、OB32、面SF4にはオブジェクトOB41、OB42が配置設定される。なお非凸のオブジェクトは凸のオブジェクトとして扱う。
【0076】
そして図7に示すように、立方体の各面を貫通するオブジェクトの表面(front surface, front-facing surface)により、各面の深度マップ情報(以下、単に深度マップと呼ぶ)を作成する。例えば図7では、面SF1を貫通するオブジェクトOB11、OB12により面SF1の深度マップDPM1が作成される。具体的には、面SF1のオブジェクトOB11、OB12(OB11、OB12の表面)を無限遠の視点での平行投影(方向DRPでの平行投影)で描画することで得られた深度情報が、面SF1の深度マップDPM1になる。この深度マップDPM1は、面SF1に正対する無限遠の視点から見た場合のオブジェクトOB11、OB12の深度値により構成されるマップである。即ち、天井面SF1の深度マップDPM1は、床面SF3側の無限遠の視点からの深度マップとして表現される。
【0077】
なお、2つ以上の面を貫通しているオブジェクトについては、それぞれの面の深度マップに加える。例えば図8(A)、図8(B)において、オブジェクトOB13は、面SF1とSF2の両方を貫通している。この場合には、オブジェクトOB13の深度値は、面SF1の深度マップDPM1と面SF2の深度マップDPM2の両方に設定される。具体的には図8(A)に示すように、面SF3から面SF1に向かう方向の平行投影で、オブジェクトOB11、OB13を描画することで、面SF1についての深度マップDPM1が作成される。また図8(B)に示すように、面SF4から面SF2に向かう方向の平行投影で、オブジェクトOB13、OB21を描画することで、面SF2についての深度マップDPM2が作成される。なお、いずれの面も貫通していない中空に浮いたような構造物のオブジェクトは存在しないものとする。
【0078】
以上のような深度マップを、図9の全ての面SF1〜SF6について作成する。これにより図9に示すような深度キューブマップが作成される。ここまでが衝突判定処理の前処理となる。
【0079】
次に、面SF1〜SF6のうち1つの面を選択し、その面の深度マップを深度バッファー56に設定する。例えば図10(A)では、面SF1が選択され、面SF1の深度マップDPM1が深度バッファー56に設定される。そしてロボットRBの描画処理が行われる。ここでロボットRBは、それぞれが凸である1つ以上のパーツオブジェクト(部分)に分割されており、これらの各パーツオブジェクトの描画処理が行われる。なお、パーツオブジェクト間の相互の衝突(自己衝突)については考えないものとする。つまり、これらのパーツオブジェクトの位置は図5の制御装置300において制御可能であるので、自己衝突は回避されているものとする。
【0080】
具体的には描画部30は、深度テストを有効にして、ロボットRBのパーツオブジェクトPB1、PB2を描画する第1の描画処理を行う。そして、得られた画像を参照画像として記録する。例えば、面SF1の深度マップDPM1の深度値を参照しながら、図10(A)のD1、D2に示すようにパーツオブジェクトPB1、PB2の裏面(背面)を描画する。即ち、パーツオブジェクトPB1、PB2を構成するポリゴン(広義にはプリミティブ面)のうち、裏面(back surcace, back-facing surface)のポリゴンを描画する。更に具体的には、深度テストを有効にして、図10(A)のDRPに示す方向の平行投影(無限遠の視点)で、パーツオブジェクトPB1、PB2の裏面ポリゴンを描画する第1の描画処理を行う。この第1の描画処理により、図10(B)に示すような第1の画像が描画バッファー54上に生成され、この第1の画像が参照画像として例えば他のメモリー領域に記録される。
【0081】
次に、深度テストを無効にして、ロボットRBのパーツオブジェクトPB1、PB2を描画する第2の描画処理を行う。具体的には、深度テストを無効にして、平行投影で、パーツオブジェクトPB1、PB2の裏面ポリゴンを描画する第2の描画処理を行う。この第2の描画処理により、図10(C)に示すような第2の画像が描画バッファー54上に生成される。
【0082】
次に、図11(A)に示すように、第1の描画処理により得られた参照画像である第1の画像と、第2の描画処理により得られた第2の画像の比較処理が行われる。そして第1、第2の画像の間に差異があれば、衝突が発生したと判定する。即ちロボットRBのパーツオブジェクトPB1、PB2が、面SF1のオブジェクトに衝突したと判定する。
【0083】
例えば図10(A)のE1では、ロボットRBのパーツオブジェクトPB2が面SF1のオブジェクトOB12と衝突している。この場合には、E1に示す領域においては、オブジェクトOB12の方が、パーツオブジェクトPB2の裏面ポリゴンよりも、視点から見て前方側になる。従って、深度テストを有効にした第1の描画処理を行うと、図10(A)のE1に示す領域においては、図10(B)のE2に示すようにパーツオブジェクトPB2の裏面ポリゴンの画像が非描画になる。一方、深度テストを無効にした第2の描画処理においては、面SF1の深度マップの深度値を参照することなく、パーツオブジェクトPB2の裏面ポリゴンが描画される。このため、図10(C)に示すように、E3に示す領域においてもパーツオブジェクトPB2の裏面ポリゴンの画像が描画される。従って、第1、第2の描画処理により生成された第1、第2の画像の間に差異が生じ、図11(A)に示すように、これらの第1、第2の画像の差異を検出することで、衝突を検出できるようになる。
【0084】
以上の処理を、図9に示す全ての面(対象面)SF1〜SF6について行う。例えば面SF2については、図8(B)に例示されるような深度マップDPM2を用いて、面SF4から面SF2に向かう方向の平行投影で、上述した第1、第2の描画処理を行う。そして、得られた第1、第2の画像の比較処理を行い、第1、第2の画像の間に差異があれば、ロボットRBと面SF2のオブジェクトとの間に衝突が生じたと判定する。他の面SF3〜SF6についても同様の処理を行う。そして、SF1〜SF6のいずれの面においても、衝突が検出されなかった場合には、衝突が検出されなかったとして、処理を終了する。
【0085】
以上のように本実施形態では、深度バッファー処理を有効活用して衝突判定を実現しているため、並列性の高い最新の描画ハードウェアー処理に適した衝突判定処理を実現できる。
【0086】
また例えば通常の3DCGにおいては、パースのついた画像を生成するために透視投影でポリゴンを描画するのが一般的である。更に、裏面のポリゴンについては、描画コストを減らすために、カリングにより描画しないのが一般的である。
【0087】
この点、本実施形態では、3DCGの画像生成のためではなく、衝突判定のために深度バッファー処理を利用している。そして透視投影で描画処理を行うと、正確な衝突判定を実現できなくなるおそれがあり、本実施形態では、この点に着目して平行投影で描画処理を行っている。また、3DCGにおいては一般的に省略される裏面ポリゴンを描画することで、図10(A)のE1に示すような衝突を、図11(A)に示すような画像比較により判定することに成功している。
【0088】
なお、図11(A)では画像比較により衝突判定を行っているが、本実施形態はこれに限定されず、少なくとも第1、第2の描画処理の結果に基づいて衝突判定できるものであればよい。
【0089】
例えば図11(B)では、第1の描画処理での描画ピクセル数と第2の描画処理での描画ピクセル数の比較処理を行うことで、衝突判定を行っている。例えば第1の描画処理を行ったときに、ハードウェアーとして用意される描画ピクセル数カウンターに設定される描画ピクセル数を、参照描画ピクセル数として記録しておく。そして、この第1の描画処理での参照描画ピクセル数と、第2の描画処理において描画ピクセル数カウンターに設定された描画ピクセル数とを比較することで、衝突を判定する。例えば衝突が発生した場合には、図11(B)に示すように第1の描画処理での描画ピクセル数は第2の描画処理での描画ピクセル数よりも少なくなるため、これを検出することで衝突を判定できるようになる。
【0090】
また図10(A)において、パーツオブジェクトPB1、PB2(第1、第2のパーツオブジェクト)は、視点(無限遠の視点)から見て重ならないオブジェクトとなっている。この場合には、第1、第2の各描画処理において、パーツオブジェクトPB1、PB2を同時に描画する(同じ描画処理シーケンスで描画する)。このようにしても、図11(A)、図11(B)に示すように適正な衝突判定を実現することができる。そしてパーツオブジェクトPB1、PB2を同時に描画することで、描画処理の回数を節約することができ、処理の高速化等を図れるようになる。
【0091】
また、例えば第1のロボットについて、図10(A)〜図11(B)等に示す手法により衝突判定を行った後、この第1のロボットを環境のオブジェクトに組み込み、次の第2のロボットの衝突判定を行うようにしてもよい。このようにすれば、複数のロボットが存在する場合に、これらの複数のロボットの各ロボットと周辺構造物や周辺機器との間の衝突判定のみならず、ロボット間での衝突判定についても実現できるようになる。
【0092】
また図9では、ロボットの可動範囲に設定される対象面の数が6面である場合を例に取り説明したが、本実施形態はこれに限定されない。例えば対象面の数は、ロボットが動作する環境に応じて適宜設定することが可能であり、対象面の数が6面よりも少なくてもよい。
【0093】
また、深度マップ情報の設定手法や、衝突検出対象オブジェクトの描画手法も、図6〜図10(C)で説明した手法には限定されず、種々の変形実施が可能である。更に、第1、第2の描画処理の結果に基づく衝突判定処理も、図11(A)、図11(B)で説明した画像の比較処理や描画ピクセル数の比較処理に限定されるものではなく、種々の変形実施が可能である。
【0094】
4.詳細な処理
次に本実施形態の詳細な処理例について図12、図13のフローチャートを用いて説明する。
【0095】
まず図12に示すように、6面(図9のSF1〜SF6)の全てを処理したか否かを判断する(ステップS1)。そして6面の全てについての処理が終了し、衝突が検出されなかった場合には、衝突無しとして処理を終了する(ステップS2)。
【0096】
一方、6面の全てについての処理が終了していない場合には、処理が終了していない1つの面を選択する(ステップS3)。そして、選択した面の深度マップを深度バッファー56に設定する(ステップS4)。例えば図8(A)の面SF1の深度マップDPM1を設定したり、図8(B)の面SF2の深度マップDPM2を設定する。
【0097】
次に、ロボットの全てのパーツオブジェクト(部分)を描画したか否かを判断し(ステップS5)、描画していない場合には未描画のパーツオブジェクトを1つ選択する(ステップS6)。なお図10(A)、図10(B)のように視点から見て重ならないパーツオブジェクトPB1、PB2については、1つのパーツオブジェクトとして選択する。そして図10(A)で説明したように、深度テストを有効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画し、得られた画像を参照画像として記憶する(ステップS7、S8)。
【0098】
次に、深度テストを無効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画する(ステップS9)。そしてステップS8で記憶された参照画像と、ステップS9で生成された現画像との間に差異があるか否かを判断し、差異があった場合には、衝突ありとして処理を終了する(ステップS10、S11)。一方、差異が無かった場合にはステップS5の処理に戻り、次のパーツオブジェクトを選択等を行う。
【0099】
図13は複数のロボットが存在する場合の衝突判定処理を示すフローチャートである。
【0100】
まず、N=1に設定する(ステップS21)。次に、N番目のロボットを衝突検出対象として選択する(ステップS22)。そして、6面の全てについて、N番目のロボットの描画処理を行って衝突判定を行う(ステップS23)。即ち図12で説明した衝突判定を行う。
【0101】
次に、衝突判定が行われたN番目のロボットを、被衝突検出対象となる環境のオブジェクトに組み込む(ステップS24)。そして、全てのロボットを処理したか否かを判断し(ステップS25)、処理してなかった場合にはNを1だけインクリメントして(ステップS26)、ステップS22の処理に戻る。一方、全てのロボットを処理した場合には、処理を終了する(ステップS27)。
【0102】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。また衝突検出システム、ロボットシステムの構成・動作や、深度マップ情報の設定手法、衝突検出対象オブジェクトの描画手法、衝突検出対象オブジェクトの衝突判定手法等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【0103】
OBA〜OBC、OBA1〜OBA4、OB11〜OB41 オブジェクト、
RB ロボット(衝突検出対象オブジェクト)、SF1〜SF6 対象面、
DPM1、DPM2 深度マップ、DRP 平行投影の方向、
10 処理部、12 オブジェクト空間設定部、14 衝突判定部、16 比較処理部、
30 描画部、50 記憶部、52 オブジェクトデータ記憶部、
54 描画バッファー、56 深度バッファー、70 操作部、80 外部I/F部、90 情報記憶媒体、300 制御装置、310 ロボット、320 アーム、
330 ハンド
【技術分野】
【0001】
本発明は、衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等に関する。
【背景技術】
【0002】
物体間の衝突や近接の有無を判定することは多くの分野で必要とされている。例えばロボットなどの分野において、衝突の発生は非常に大きな問題となる。このため、従来より、実際に衝突が発生する以前に、衝突の有無や、許容された以上の近接を、コンピューターによる計算により判定する手法が研究、開発されている。このような衝突判定手法の従来技術としては、例えば特許文献1、2等に開示される技術が知られている。
【0003】
特許文献1の手法は、その図6のフローチャートに示されている。この従来技術では、物体(オブジェクト)の3次元の配置を、横(X)と縦(Y)の2次元位置と、その位置に対応する深度値(Z値)として記憶する装置において、プリミティブを逐次的にレンダリングする。そして、そのレンダリングの過程で同一深度値を持つもの、つまり3次元空間的に同じ位置を占めるものが現れれば、それを衝突と判定する。
【0004】
特許文献2の手法は、その図2、図3により説明されている。この従来技術では、ポリゴンの原点から、そのポリゴンのある方向の面までの距離を予め計算し、キューブマップとして保存する。そして、原点から衝突検出の対象となる物体との距離と、キューブマップに記憶された距離との大小により、衝突を判定する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平9−204543号公報
【特許文献2】特表2009−545075号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら特許文献1の従来技術では、深度値の更新が、物体を描画する順番に依存するため、衝突の検出漏れが発生する可能性がある。例えば、前方側(手前側)に配置された物体を描画した後で、その後方側(奥側)において別の物体間で衝突が起こったとしても、深度値は既に前方側のオブジェクトの値に更新されているために、それを検出することはできないことになる。
【0007】
また特許文献2の従来技術では、非凸であるポリゴンの衝突を正確に取り扱うのが困難であるという問題がある。即ち、原点から面までの距離を単一のキューブマップに記憶しているため、ある方向において、そのポリゴンの面が複数ある場合、つまりそのような非凸のポリゴンの場合においては、それを単一のキューブマップとしては表現できないことになる。
【0008】
本発明の幾つかの態様によれば、衝突検出対象オブジェクトの正確な衝突判定を実現できる衝突検出システム、ロボットシステム、衝突検出方法及びプログラム等を提供できる。
【課題を解決するための手段】
【0009】
本発明の一態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとを含み、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記処理部は、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出システムに関係する。
【0010】
本発明の一態様によれば、対象面に配置設定されるオブジェクトの深度情報が深度マップ情報として深度バッファーに設定される。そして、描画部は、深度テストを行って衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第1の描画処理と、深度テストを行わずに衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第2の描画処理を行う。そして、これらの第1、第2の描画処理の結果に基づいて衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定が行われる。このようにすれば、深度バッファー処理を有効活用した衝突判定が可能になり、衝突検出対象オブジェクトの正確な衝突判定を実現できるようになる。
【0011】
また本発明の一態様では、前記処理部は、前記第1の描画処理により生成された第1の画像と、前記第2の描画処理により生成された第2の画像との比較処理を行うことで、前記衝突判定を行ってもよい。
【0012】
このようにすれば、第1、第2の描画処理により生成された第1、第2の画像の差異を検出することで、衝突判定を実現できるようになる。
【0013】
また本発明の一態様では、前記処理部は、前記第1の描画処理での描画ピクセル数情報と前記第2の描画処理での描画ピクセル数情報との比較処理を行うだけで、前記衝突判定を行ってもよい。
【0014】
このようにすれば、第1、第2の描画処理での描画ピクセル数の差異を検出するだけで、衝突判定を実現できるようになる。
【0015】
また本発明の一態様では、前記描画部は、前記第1の描画処理と前記第2の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画してもよい。
【0016】
このように、一般的な三次元画像の描画処理とは異なり、平行投影で裏面のプリミティブ面を描画することで、より正確な衝突判定を実現できるようになる。
【0017】
また本発明の一態様では、前記深度バッファーには、前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されてもよい。
【0018】
このようにすれば、平行投影のプリミティブ面の描画により衝突判定を行う処理に適切な深度マップ情報を、深度バッファーに設定できるようになる。
【0019】
また本発明の一態様では、前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、前記視点から見て重ならない場合に、前記描画部は、前記第1の描画処理と前記第2の描画処理の各描画処理において、前記第1のパーツオブジェクトと前記第2のパーツオブジェクトを同時に描画してもよい。
【0020】
このように第1、第2のパーツオブジェクトを同時に描画すれば、描画処理の回数を節約することが可能になり、処理の高速化等を図れるようになる。
【0021】
また本発明の一態様では、前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、前記処理部は、前記複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第2の衝突検出対象オブジェクトについての前記衝突判定を行ってもよい。
【0022】
このようにすれば、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出対象オブジェクトと対象面のオブジェクトとの衝突判定のみならず、衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【0023】
また本発明の一態様では、前記深度バッファーには、前記衝突検出対象オブジェクトを内包するように設定される第1〜第Nの対象面(Nは2以上の整数)に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定され、前記描画部は、前記第1〜第Nの対象面の各対象面について、深度テストを行って、前記第1〜第Nの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第1の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第2の描画処理を行い、前記処理部は、前記第1〜第Nの対象面の各対象面についての前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突判定を行ってもよい。
【0024】
このようにすれば、衝突検出対象オブジェクトに対応する物体を内包する環境の領域を、第1〜第Nの対象面により設定して、衝突検出対象オブジェクトの衝突判定を実現できるようになる。
【0025】
また本発明の一態様では、前記第1〜第Nの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であってもよい。
【0026】
また本発明の一態様では、前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであってもよい。
【0027】
また本発明の他の態様は、上記のいずれかに記載の衝突検出システムを含むロボットシステムに関係する。
【0028】
また本発明の他の態様は、対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行う衝突検出方法に関係する。
【0029】
また本発明の他の態様は、処理部と、描画処理を行う描画部と、深度情報が設定される深度バッファーとして、コンピューターを機能させ、前記深度バッファーには、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、前記描画部は、深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、前記処理部は、前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うプログラムに関係する。
【図面の簡単な説明】
【0030】
【図1】図1(A)〜図1(C)は深度バッファー処理の説明図。
【図2】図2(A)〜図2(D)も深度バッファー処理の説明図。
【図3】図3(A)〜図3(C)は従来技術の問題点についての説明図。
【図4】本実施形態の衝突検出システムの構成例。
【図5】本実施形態の衝突検出システムを含むロボットシステムの例。
【図6】衝突検出対象オブジェクトや対象面に設定されるオブジェクトの説明図。
【図7】対象面に対応して設定される深度マップ情報の説明図。
【図8】図8(A)、図8(B)も深度マップ情報の説明図。
【図9】6面の深度マップ情報を設定する手法の説明図。
【図10】図10(A)〜図10(C)は本実施形態の衝突検出手法の説明図。
【図11】図11(A)、図11(B)も本実施形態の衝突検出手法の説明図。
【図12】本実施形態の詳細な処理を示すフローチャート。
【図13】本実施形態の詳細な処理を示すフローチャート。
【発明を実施するための形態】
【0031】
以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
【0032】
1.深度バッファー処理
ロボット(マニピュレーター)の動作においては、周辺構造物や周辺機器への衝突や、自己衝突や、他のロボットへの衝突は非常に大きな問題となる。本実施形態の衝突検出手法では、このような衝突をシミュレーションにより事前に検出する。
【0033】
このような本実施形態の衝突検出手法が用いられる形態としては、大別して、オフラインでの使用(事前確認)と、ラインタイムでの使用(予測、先読み)が考えられる。オフラインの使用では、周辺環境などが既知且つ静的であり、ロボットの動作が既知である場合に、システムの作成時に、その衝突を検証する。一方、ラインタイムの使用では、周辺環境などが動的に変化する場合(例えば周囲に複数のロボットが存在したり、作業者が存在する場合)に、ロボットの実際の動作に先行して、シミュレーションにより衝突を検出する。
【0034】
従来では、このようなロボットにおける衝突検出手法として、CPU(Central Processing Unit)の処理に適したアルゴリズムを使用する場合が殆どであった。ここでCPU処理に適したアルゴリズムとは、比較的に複雑な単位処理を、比較的に少数(数十から数百程度)の並列度で処理するようなアルゴリズムである。
【0035】
しかしながら、近年では、消費電力の問題等に起因して、CPUの動作周波数の伸びは止まっている。このため、最近のCPUの性能向上は、マルチコア化などの処理の並列度の向上によって実現されている。別の言い方をすれば、並列度を上げることができないアルゴリズムでは、処理性能を向上できなくなっている。
【0036】
一方、GPU(Graphics Processing Unit)は、CPUに比べて非常に大きな並列度を有する。例えば現在のGPUは、ALU(算術演算ユニット)を数百から千数百持ち、数万から数百万の処理を並列に実行できる能力を有する。
【0037】
そこで本実施形態では、衝突検出のアルゴリズムとして、CPU処理よりはGPU処理に適したアルゴリズムを採用することで、従来に比べて高性能な衝突検出を実現する。具体的には、GPUが有するハードウェアー機能であるROP(レンダリング・アウトプット・パイプライン)の機能を最大限に利用する。即ち、このようなROP機能を用い、深度テスト機能と深度バッファーを有効活用して衝突検出を実現する。
【0038】
ここで深度バッファーは、CG(Computer Graphics)においては主に隠面消去のために用いられ、オブジェクトの深度情報を記憶するものである。具体的にはピクセル単位で深度値(Z値)を記憶する。また、深度情報とは、ピクセル毎の深度値に係る情報である。以下、深度バッファーを用いた深度バッファー処理(Zバッファー処理)について説明する。
【0039】
深度バッファー処理では、ある点を描画する際に、その点の深度値と、深度バッファーに記憶されている深度値を比較する。そして、その点の深度値が大きければ(右手系の場合)、その点のカラー値でカラーバッファーの値を上書きすると共に、その点の深度値で深度バッファーの値を更新する。
【0040】
例えばオブジェクトOBA、OBB、OBCが図1(A)、図1(B)に示すように配置されていたとする。図1(A)はオブジェクトOBA、OBB、OBCを上方の視点から見た場合の図であり、図1(B)は前方斜め上の視点から見た場合の図である。ここでオブジェクトは、現実世界の物体をモデル化したものであり、例えば複数のプリミティブ面により構成される。プリミティブ面は、オブジェクトの構成要素であるプリミティブとなる面であり、例えばポリゴン、自由曲面、或いはサブディビジョンサーフェスなどである。
【0041】
図1(C)に示すように、深度バッファーを用いた描画処理では、各ピクセルのカラー値(RGBの色情報)が描画バッファー(カラーバッファー)に書き込まれ、深度値(Z値)が深度バッファー(Zバッファー)に書き込まれる。
【0042】
具体的には図2(A)では深度バッファーの深度値が初期値である最背面値に設定される。そして図2(B)ではオブジェクトOBAが描画されている。この場合に図2(B)のJ1に示す領域でのオブジェクトOBAの各ピクセルの深度値は、図2(A)での深度バッファーの深度値よりも前方側(手前側)の深度値となっている。従って、J1に示す領域では、オブジェクトOBAのカラー値が描画バッファーに書き込まれると共に、オブジェクトOBAの深度値が深度バッファーに書き込まれて深度値が更新される。
【0043】
図2(C)ではオブジェクトOBBが描画されている。この場合に図2(C)のJ2に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも後方側(奥側)の深度値となっている。従って、J2に示す領域では、オブジェクトOBBは隠面消去されたと判断され、オブジェクトOBBのカラー値は描画バッファーには書き込まれず、図2(D)のJ3に示すように深度バッファーの深度値も更新されない。
【0044】
一方、J4に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも前方側の深度値となっている。従って、J4に示す領域では、オブジェクトOBBのカラー値が描画バッファーに書き込まれると共に、図2(D)のJ5に示すようにオブジェクトOBBの深度値が深度バッファーに書き込まれて深度値が更新される。そして、図2(D)でオブジェクトOBCが描画されると、上記と同様の手法により、J6の領域ではカラー値の書き込みや深度値の更新が行われず、J7の領域ではカラー値の書き込みと深度値の更新が行われる。
【0045】
以上のような深度バッファー処理を行うことで、描画の順番に依存せずに、奥行き方向での順番が正しく判定され、図1(C)に示すように適切な隠面消去が行われた画像が生成されるようになる。
【0046】
さて、前述した特許文献1の従来技術においても、深度バッファーを利用して衝突判定を行っている。例えば、他のオブジェクトの描画により、深度バッファーの深度値が図3(A)に示すようになっていたとする。この場合に図3(B)のH1に示すように、オブジェクトOBA1では、その深度値がZバッファーの深度値とは異なるため、OBA1は他のオブジェクトと衝突していないと判定される。一方、H2、H3に示すように、オブジェクトOBA2では、その深度値が深度バッファーの深度値と同一になっている。従って、オブジェクトOBA2は、この深度バッファーの深度値を持った他のオブジェクトと衝突していると判定される。
【0047】
しかしながら、この特許文献1の従来技術では図3(C)に示すような問題点がある。図3(C)では、他のオブジェクトOBDの描画により深度バッファーの深度値がH4に示すようになっている。この場合に、H5に示すようにオブジェクトOBA3はオブジェクトOBDと衝突しているのにも関わらず、オブジェクトOBA3の深度値は深度バッファーの深度値と一致していないため、衝突していないと判定されてしまう。またH6に示すように深度値が内挿された場合には、オブジェクトOBA4はオブジェクトOBDと衝突していないのに、衝突していると判定されてしまう。
【0048】
また、他の手法として、仮想的な視点を、地面等を表す平面状のオブジェクトの背面に設定し、背面から見て、表面にあるはずのオブジェクトが描画されれば、そのオブジェクトが平面と衝突していると判定する手法も考えられる。しかしながら、この手法では、単純な平面が仮定されているが、それが平面ではなく複雑な構造を持つオブジェクト(例えば非凸)である場合には、片方の面との衝突が、別の面によって遮蔽される可能性があり、このような場合には衝突を検出できなくなる。
【0049】
2.構成
以上のような問題を解決できる本実施形態の衝突検出システムの構成例を図4に示す。なお本実施形態の衝突検出システムの構成は図4の構成には限定されず、その一部の構成要素(例えば操作部、外部I/F部等)を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
【0050】
この衝突検出システムは、処理部10と、描画処理を行う描画部30と、記憶部50(深度バッファー)を含む。また操作部70、外部I/F(インターフェース)部80、情報記憶媒体90を含むことができる。
【0051】
処理部10は、各種の判定処理や制御処理などを行うものであり、例えばCPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。処理部10は、オブジェクト空間設定部12、衝突判定部14を含む。
【0052】
オブジェクト空間設定部12は、複数のオブジェクトをオブジェクト空間に配置設定する処理等を行う。具体的には、ワールド座標系でのオブジェクトの位置や回転角度を決定し、その位置にその回転角度でオブジェクトを配置する。ここでオブジェクトは、ロボット等の衝突検出対象物や、周辺構造物や周辺機器などの被衝突検出対象物を、モデル化したものであり、ポリゴンや自由曲面などのプリミティブ面で構成される。
【0053】
衝突判定部14は、衝突検出対象オブジェクトと被衝突検出対象オブジェクトとの間の衝突判定処理を行うものであり、画像や描画カウント数の比較処理を行う比較処理部16を含む。
【0054】
描画部30は、描画処理を行うものであり、例えばGPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。この描画部30での描画処理は、頂点シェーダープログラムにより実現される頂点シェーダーや、ピクセルシェーダープログラムにより実現されるピクセルシェーダーにより実現してもよい。頂点シェーダーでは、頂点の移動処理、座標変換処理、クリッピング処理などが行われる。そして頂点処理後の頂点データに基づいてラスタライズ処理が行われる。またピクセルシェーダーでは、ラスタライズ処理後に、画像を構成するピクセル(フラグメント)単位での処理であるピクセル処理(フラグメント処理)が行われる。即ち、シェーディング言語によって記述されたシェーダープログラムによって、プログラマブルシェーダー処理が実現される。
【0055】
記憶部50は、処理部10や描画部30などのワーク領域となるもので、RAM(SRAM、DRAM等)などのメモリーにより実現できる。この記憶部50は、オブジェクトデータ記憶部52、描画バッファー54、深度バッファー56を含む。
【0056】
オブジェクトデータ記憶部52は、オブジェクトの位置データや回転角度データや形状データなどのオブジェクトデータを記憶する。描画バッファー54(カラーバッファー、フレームバッファー)は画像情報を記憶するものであり、具体的には、ピクセル単位でカラー値やα値などの画像情報を記憶する。深度バッファー56(Zバッファー)は、深度情報を記憶するものであり、具体的にはピクセル単位で深度値(Z値)を記憶する。これらの描画バッファー54、深度バッファー56は、記憶部50を構成するメモリー上に記憶領域として確保される。
【0057】
操作部70は、使用者が各種の操作情報を入力するためのものである。外部I/F部80は、外部との間で有線や無線で情報の通信処理等を行うものである。情報記憶媒体90は(コンピューターにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク、HDD、或いはメモリーなどにより実現できる。処理部10は、情報記憶媒体90に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体90には、本実施形態の各部としてコンピューター(操作部、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピューターに実行させるためのプログラム)が記憶される。
【0058】
そして本実施形態の衝突検出システムでは、深度バッファー56には、対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定(記憶)される。例えば後述する図6、図9に示すように、対象面(SF1〜SF6)には複数のオブジェクト(OB11、OB12、OB21等)が配置設定される。そして図7〜図8(B)に示すように、この対象面のオブジェクトの深度情報が深度マップ情報として作成されて、深度バッファー56に設定される。深度マップは、例えば所定視点(例えば無限遠の視点)から見た場合における対象面のオブジェクトの深度値(ピクセル単位の深度値)のマトリクス配列により表されるマップである。
【0059】
ここで対象面は、例えば被衝突検出対象物に対応するオブジェクトが配置設定される仮想的な面である。また深度マップ情報は、例えば衝突判定処理の際の所定の視点から見た対象面のオブジェクトの深度値からなる情報である。例えば深度マップは、所定の視点から見た場合における対象面のオブジェクトのピクセル単位の深度値のマトリクス配列により表される。具体的には深度バッファー56には、例えば対象面のオブジェクトを無限遠の視点(広義には所定の視点)での平行投影で描画することで得られた深度情報が、対象面の深度マップ情報として設定(記憶)される。
【0060】
そして描画部30は、後述する図10(A)、図10(B)に示すように、深度テストを行って(深度テストを有効にして。深度テストありで)、深度バッファー56の深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面(例えばポリゴン)のうち、所定の視点(描画処理における視点)から見て裏面のプリミティブ面を描画する第1の描画処理を行う。また描画部30は図10(C)に示すように、深度テストを行わずに(深度テストを無効にして。深度テストなしで)にして、衝突検出対象オブジェクトを構成するプリミティブ面のうち、視点から見て裏面のプリミティブ面を描画する第2の描画処理を行う。具体的には描画部30は、上述の第1、第2の描画処理の各描画処理において、衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の視点での平行投影で描画する。
【0061】
ここで衝突検出対象オブジェクトは、対象面のオブジェクトとの衝突検出対象となるオブジェクトであり、例えばロボットをモデル化したオブジェクトなどである。また、プリミティブ面がポリゴンである場合を例にとると、三角形を構成する3頂点が、視点から見て例えば反時計回りに見える面が表面(front surface, front-facing surface)になり、視点から見て例えば時計回りに見える面が裏面(back surface, back-facing surface)になる。閉じたオブジェクトの表面が外を向いていることを前提にすると、表面を前面、裏面を背面と記述することができる。
【0062】
また、ここでの深度テストを行うとは(深度テストを有効にするとは)、処理対象ピクセルの深度値が深度バッファー56の深度値よりも前方側の深度値である場合に、描画バッファー54の対応するピクセル位置に画像情報(カラーデータ)を書き込むと共に、深度バッファー56の対応するピクセル位置に処理対象ピクセルの深度値を書き込むことである。
【0063】
そして処理部10は、上述の第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトが対象面のオブジェクトと衝突したか否かを判定する衝突判定を行う。具体的には処理部10は、図11(A)に示すように、第1の描画処理により生成された第1の画像と、第2の描画処理により生成された第2の画像との比較処理を行うことで、衝突判定を行う。或いは図11(B)に示すように、第1の描画処理での描画ピクセル数情報と第2の描画処理での描画ピクセル数情報との比較処理を行うことで、衝突判定を行う。この衝突判定処理は衝突判定部14が行う。また第1、第2の画像の比較処理や描画ピクセル数情報の比較処理は、比較処理部16が行う。なお描画ピクセル数情報は、描画ピクセル数を実質的に表す情報であればよく、描画ピクセル数と等価な情報も含まれる。
【0064】
以上のように本実施形態では、対象面の深度マップ情報を深度バッファーに設定して、深度テスト(Zテスト)を行う第1の描画処理(深度テストを有効にした第1の描画処理)と、深度テストを行わない第2の描画処理(深度テストを無効にした第2の描画処理)を行う。そして、第1、第2の描画処理の結果に基づいて、衝突検出対象オブジェクトの衝突判定を行う。このようにすれば、深度バッファー処理を有効活用した高速(正確)な衝突判定(近接判定)を実現できるようになる。即ち、衝突(近接)の問題を、最新の描画ハードウェアー処理に適した遮蔽処理に置き換えることで、非常に高速に、衝突判定(近接判定)を行うことが可能になる。
【0065】
なお、衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、視点から見て重ならない場合を想定する。この場合に描画部30は、第1の描画処理と第2の描画処理の各描画処理において、第1のパーツオブジェクトと第2のパーツオブジェクトを同時に描画してもよい。即ち、第1、第2のパーツオブジェクトを1つのパーツオブジェクトのように同時に描画する。例えば後述する図10(A)において、第1、第2のパーツオブジェクトPB1、PB2は視点(平行投影の視点)から見て重ならないオブジェクトであり、この場合には第1、第2のパーツオブジェクトPB1、PB2を1つのパーツオブジェクトのように同時に描画する。このように衝突検出対象オブジェクトの複数のパーツオブジェクト(複数の部分)が視点から見て重なり合わない場合に、これらを同時に描画することで、描画処理の回数が削減され、処理が高速化される。なおパーツオブジェクトは、衝突検出対象オブジェクトなどのモデルオブジェクトを構成する部分となるオブジェクトである。例えば衝突検出対象オブジェクトなどのモデルオブジェクトは、複数のパーツオブジェクトと、パーツオブジェクト間を接続する関節部分などにより構成される。
【0066】
また衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、処理部10は、複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて衝突判定を行った後、第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定し、第2の衝突検出対象オブジェクトについての衝突判定を行ってもよい。即ち、複数の衝突検出対象オブジェクトが存在する場合に、衝突検出の対象となる衝突検出対象オブジェクトを1つ選択し、それ以外の衝突検出対象オブジェクトを、環境を構成するオブジェクトとして取り扱って、衝突判定を行う。こうすることで、衝突検出対象オブジェクトと環境のオブジェクトとの衝突判定のみならず、複数の衝突検出対象オブジェクト間での衝突判定も実現できるようになる。
【0067】
また、衝突検出対象オブジェクトを内包するように第1〜第Nの対象面(Nは2以上の整数)を設定してもよい。例えば図9では、衝突検出対象オブジェクトであるロボットRBを内包する6面の対象面SF1〜SF6が設定される。この場合に深度バッファー56には、第1〜第Nの対象面に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定される。即ち、各対象面に配置設定されるオブジェクトの深度情報が、各深度マップ情報として設定される。例えば図9のSF1〜SF6の各対象面の各深度マップ情報が設定される。この場合の第1〜第Nの対象面は、例えば衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面とすることができる。
【0068】
そして描画部30は、第1〜第Nの対象面の各対象面について、深度テストを行って(深度テストを有効にして)、第1〜第Nの深度マップ情報の対応する各深度マップ情報(各対象面に対応する深度マップ情報)を参照しながら、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第1の描画処理を行う。また深度テストを行わずに(深度テストを無効にして)、衝突検出対象オブジェクトの裏面のプリミティブ面を描画する第2の描画処理を行う。例えば第1の対象面については、第1の対象面に対応する第1の深度マップ情報を参照しながら第1の描画処理を行うと共に、第2の描画処理を行う。また第2の対象面については、第2の対象面に対応する第2の深度マップ情報を参照しながら第1の描画処理を行うと共に、第2の描画処理を行う。第3〜第Nの対象面についても同様である。
【0069】
そして処理部10は、第1〜第Nの対象面の各対象面についての第1の描画処理と第2の描画処理の結果に基づいて、衝突判定を行う。例えば各対象面について、第1、第2の描画処理で生成された第1、第2の画像の比較処理を行ったり、第1、第2の描画処理の描画ピクセル数情報の比較処理を行って、衝突判定を行う。このようにすれば、衝突検出対象物を囲むように物体が配置されるような環境での衝突判定を、簡素な処理で実現できるようになる。
【0070】
図5に本実施形態の衝突検出システムを含むロボットシステムの例を示す。このロボットシステムは、制御装置300(情報処理装置)とロボット310とを含む。制御装置300はロボット310の制御処理を行う。具体的には、動作シーケンス情報(シナリオ情報)に基づいてロボット310を動作させる制御を行う。ロボット310は、アーム320及びハンド(把持部)330を有する。そして制御装置300からの動作指示にしたがって動作する。例えば、図示しないパレットに載せられたワークを把持したり、移動するなどの動作を行う。また、図示しない撮像装置で取得された撮像画像情報に基づいて、ロボットの姿勢やワークの位置などの情報が検出され、検出された情報が制御装置300に送られる。
【0071】
本実施形態の衝突検出システムは例えば図5の制御装置300に設けられ、例えば制御装置300のハードウェアーやプログラムにより衝突検出システムが実現される。そして、ラインタイムの使用では、周辺環境などが動的に変化する場合に、ロボット310の実際の動作に先行して、本実施形態の衝突検出システムがシミュレーションにより衝突の判定処理を行う。そして制御装置300は、ロボット310が周辺構造物や周辺機器などに衝突しないように、判定処理の結果に基づいてロボット310の制御を行う。一方、オフラインの使用では、本実施形態の衝突検出システムにより、動作シーケンス情報等の作成時にシミュレーションにより衝突を検証する。そして制御装置300は、衝突が起こらないように作成された動作シーケンス情報(シナリオ情報)に基づいて、ロボット310を制御する。
【0072】
3.本実施形態の手法
次に本実施形態の手法について図面を用いて更に詳細に説明する。なお、以下では衝突検出対象オブジェクトが、ロボットをモデル化したオブジェクトである場合を例にとり説明するが、本実施形態の手法はこれに限定されるものではない。
【0073】
図6において、RBは、現実世界のロボットをモデル化したオブジェクトである(以下、ロボットオブジェクトを単にロボットRBと呼ぶ)。
【0074】
図6では、ロボットRBを内包するような対象面SF1〜SF4(以下、対象面を単に面と呼ぶ)が設定される。具体的には図9に示すように、ロボットRBの可動範囲を含む仮想的な立方体(又は直方体)が設定される。そして面SF1、SF2、SF3、SF4、SF5、SF6は、各々、この仮想的な立方体を構成する天井面、背面、床面、前面、右面、左面になる。
【0075】
そして図6では、ロボットRBの可動範囲に侵入する構造物を表すオブジェクトが、各面(各対象面)に配置設定される。例えば面SF1にはオブジェクトOB11、OB12、面SF2にはオブジェクトOB21、面SF3にはオブジェクトOB31、OB32、面SF4にはオブジェクトOB41、OB42が配置設定される。なお非凸のオブジェクトは凸のオブジェクトとして扱う。
【0076】
そして図7に示すように、立方体の各面を貫通するオブジェクトの表面(front surface, front-facing surface)により、各面の深度マップ情報(以下、単に深度マップと呼ぶ)を作成する。例えば図7では、面SF1を貫通するオブジェクトOB11、OB12により面SF1の深度マップDPM1が作成される。具体的には、面SF1のオブジェクトOB11、OB12(OB11、OB12の表面)を無限遠の視点での平行投影(方向DRPでの平行投影)で描画することで得られた深度情報が、面SF1の深度マップDPM1になる。この深度マップDPM1は、面SF1に正対する無限遠の視点から見た場合のオブジェクトOB11、OB12の深度値により構成されるマップである。即ち、天井面SF1の深度マップDPM1は、床面SF3側の無限遠の視点からの深度マップとして表現される。
【0077】
なお、2つ以上の面を貫通しているオブジェクトについては、それぞれの面の深度マップに加える。例えば図8(A)、図8(B)において、オブジェクトOB13は、面SF1とSF2の両方を貫通している。この場合には、オブジェクトOB13の深度値は、面SF1の深度マップDPM1と面SF2の深度マップDPM2の両方に設定される。具体的には図8(A)に示すように、面SF3から面SF1に向かう方向の平行投影で、オブジェクトOB11、OB13を描画することで、面SF1についての深度マップDPM1が作成される。また図8(B)に示すように、面SF4から面SF2に向かう方向の平行投影で、オブジェクトOB13、OB21を描画することで、面SF2についての深度マップDPM2が作成される。なお、いずれの面も貫通していない中空に浮いたような構造物のオブジェクトは存在しないものとする。
【0078】
以上のような深度マップを、図9の全ての面SF1〜SF6について作成する。これにより図9に示すような深度キューブマップが作成される。ここまでが衝突判定処理の前処理となる。
【0079】
次に、面SF1〜SF6のうち1つの面を選択し、その面の深度マップを深度バッファー56に設定する。例えば図10(A)では、面SF1が選択され、面SF1の深度マップDPM1が深度バッファー56に設定される。そしてロボットRBの描画処理が行われる。ここでロボットRBは、それぞれが凸である1つ以上のパーツオブジェクト(部分)に分割されており、これらの各パーツオブジェクトの描画処理が行われる。なお、パーツオブジェクト間の相互の衝突(自己衝突)については考えないものとする。つまり、これらのパーツオブジェクトの位置は図5の制御装置300において制御可能であるので、自己衝突は回避されているものとする。
【0080】
具体的には描画部30は、深度テストを有効にして、ロボットRBのパーツオブジェクトPB1、PB2を描画する第1の描画処理を行う。そして、得られた画像を参照画像として記録する。例えば、面SF1の深度マップDPM1の深度値を参照しながら、図10(A)のD1、D2に示すようにパーツオブジェクトPB1、PB2の裏面(背面)を描画する。即ち、パーツオブジェクトPB1、PB2を構成するポリゴン(広義にはプリミティブ面)のうち、裏面(back surcace, back-facing surface)のポリゴンを描画する。更に具体的には、深度テストを有効にして、図10(A)のDRPに示す方向の平行投影(無限遠の視点)で、パーツオブジェクトPB1、PB2の裏面ポリゴンを描画する第1の描画処理を行う。この第1の描画処理により、図10(B)に示すような第1の画像が描画バッファー54上に生成され、この第1の画像が参照画像として例えば他のメモリー領域に記録される。
【0081】
次に、深度テストを無効にして、ロボットRBのパーツオブジェクトPB1、PB2を描画する第2の描画処理を行う。具体的には、深度テストを無効にして、平行投影で、パーツオブジェクトPB1、PB2の裏面ポリゴンを描画する第2の描画処理を行う。この第2の描画処理により、図10(C)に示すような第2の画像が描画バッファー54上に生成される。
【0082】
次に、図11(A)に示すように、第1の描画処理により得られた参照画像である第1の画像と、第2の描画処理により得られた第2の画像の比較処理が行われる。そして第1、第2の画像の間に差異があれば、衝突が発生したと判定する。即ちロボットRBのパーツオブジェクトPB1、PB2が、面SF1のオブジェクトに衝突したと判定する。
【0083】
例えば図10(A)のE1では、ロボットRBのパーツオブジェクトPB2が面SF1のオブジェクトOB12と衝突している。この場合には、E1に示す領域においては、オブジェクトOB12の方が、パーツオブジェクトPB2の裏面ポリゴンよりも、視点から見て前方側になる。従って、深度テストを有効にした第1の描画処理を行うと、図10(A)のE1に示す領域においては、図10(B)のE2に示すようにパーツオブジェクトPB2の裏面ポリゴンの画像が非描画になる。一方、深度テストを無効にした第2の描画処理においては、面SF1の深度マップの深度値を参照することなく、パーツオブジェクトPB2の裏面ポリゴンが描画される。このため、図10(C)に示すように、E3に示す領域においてもパーツオブジェクトPB2の裏面ポリゴンの画像が描画される。従って、第1、第2の描画処理により生成された第1、第2の画像の間に差異が生じ、図11(A)に示すように、これらの第1、第2の画像の差異を検出することで、衝突を検出できるようになる。
【0084】
以上の処理を、図9に示す全ての面(対象面)SF1〜SF6について行う。例えば面SF2については、図8(B)に例示されるような深度マップDPM2を用いて、面SF4から面SF2に向かう方向の平行投影で、上述した第1、第2の描画処理を行う。そして、得られた第1、第2の画像の比較処理を行い、第1、第2の画像の間に差異があれば、ロボットRBと面SF2のオブジェクトとの間に衝突が生じたと判定する。他の面SF3〜SF6についても同様の処理を行う。そして、SF1〜SF6のいずれの面においても、衝突が検出されなかった場合には、衝突が検出されなかったとして、処理を終了する。
【0085】
以上のように本実施形態では、深度バッファー処理を有効活用して衝突判定を実現しているため、並列性の高い最新の描画ハードウェアー処理に適した衝突判定処理を実現できる。
【0086】
また例えば通常の3DCGにおいては、パースのついた画像を生成するために透視投影でポリゴンを描画するのが一般的である。更に、裏面のポリゴンについては、描画コストを減らすために、カリングにより描画しないのが一般的である。
【0087】
この点、本実施形態では、3DCGの画像生成のためではなく、衝突判定のために深度バッファー処理を利用している。そして透視投影で描画処理を行うと、正確な衝突判定を実現できなくなるおそれがあり、本実施形態では、この点に着目して平行投影で描画処理を行っている。また、3DCGにおいては一般的に省略される裏面ポリゴンを描画することで、図10(A)のE1に示すような衝突を、図11(A)に示すような画像比較により判定することに成功している。
【0088】
なお、図11(A)では画像比較により衝突判定を行っているが、本実施形態はこれに限定されず、少なくとも第1、第2の描画処理の結果に基づいて衝突判定できるものであればよい。
【0089】
例えば図11(B)では、第1の描画処理での描画ピクセル数と第2の描画処理での描画ピクセル数の比較処理を行うことで、衝突判定を行っている。例えば第1の描画処理を行ったときに、ハードウェアーとして用意される描画ピクセル数カウンターに設定される描画ピクセル数を、参照描画ピクセル数として記録しておく。そして、この第1の描画処理での参照描画ピクセル数と、第2の描画処理において描画ピクセル数カウンターに設定された描画ピクセル数とを比較することで、衝突を判定する。例えば衝突が発生した場合には、図11(B)に示すように第1の描画処理での描画ピクセル数は第2の描画処理での描画ピクセル数よりも少なくなるため、これを検出することで衝突を判定できるようになる。
【0090】
また図10(A)において、パーツオブジェクトPB1、PB2(第1、第2のパーツオブジェクト)は、視点(無限遠の視点)から見て重ならないオブジェクトとなっている。この場合には、第1、第2の各描画処理において、パーツオブジェクトPB1、PB2を同時に描画する(同じ描画処理シーケンスで描画する)。このようにしても、図11(A)、図11(B)に示すように適正な衝突判定を実現することができる。そしてパーツオブジェクトPB1、PB2を同時に描画することで、描画処理の回数を節約することができ、処理の高速化等を図れるようになる。
【0091】
また、例えば第1のロボットについて、図10(A)〜図11(B)等に示す手法により衝突判定を行った後、この第1のロボットを環境のオブジェクトに組み込み、次の第2のロボットの衝突判定を行うようにしてもよい。このようにすれば、複数のロボットが存在する場合に、これらの複数のロボットの各ロボットと周辺構造物や周辺機器との間の衝突判定のみならず、ロボット間での衝突判定についても実現できるようになる。
【0092】
また図9では、ロボットの可動範囲に設定される対象面の数が6面である場合を例に取り説明したが、本実施形態はこれに限定されない。例えば対象面の数は、ロボットが動作する環境に応じて適宜設定することが可能であり、対象面の数が6面よりも少なくてもよい。
【0093】
また、深度マップ情報の設定手法や、衝突検出対象オブジェクトの描画手法も、図6〜図10(C)で説明した手法には限定されず、種々の変形実施が可能である。更に、第1、第2の描画処理の結果に基づく衝突判定処理も、図11(A)、図11(B)で説明した画像の比較処理や描画ピクセル数の比較処理に限定されるものではなく、種々の変形実施が可能である。
【0094】
4.詳細な処理
次に本実施形態の詳細な処理例について図12、図13のフローチャートを用いて説明する。
【0095】
まず図12に示すように、6面(図9のSF1〜SF6)の全てを処理したか否かを判断する(ステップS1)。そして6面の全てについての処理が終了し、衝突が検出されなかった場合には、衝突無しとして処理を終了する(ステップS2)。
【0096】
一方、6面の全てについての処理が終了していない場合には、処理が終了していない1つの面を選択する(ステップS3)。そして、選択した面の深度マップを深度バッファー56に設定する(ステップS4)。例えば図8(A)の面SF1の深度マップDPM1を設定したり、図8(B)の面SF2の深度マップDPM2を設定する。
【0097】
次に、ロボットの全てのパーツオブジェクト(部分)を描画したか否かを判断し(ステップS5)、描画していない場合には未描画のパーツオブジェクトを1つ選択する(ステップS6)。なお図10(A)、図10(B)のように視点から見て重ならないパーツオブジェクトPB1、PB2については、1つのパーツオブジェクトとして選択する。そして図10(A)で説明したように、深度テストを有効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画し、得られた画像を参照画像として記憶する(ステップS7、S8)。
【0098】
次に、深度テストを無効にして、選択されたパーツオブジェクトの裏面のポリゴンを描画する(ステップS9)。そしてステップS8で記憶された参照画像と、ステップS9で生成された現画像との間に差異があるか否かを判断し、差異があった場合には、衝突ありとして処理を終了する(ステップS10、S11)。一方、差異が無かった場合にはステップS5の処理に戻り、次のパーツオブジェクトを選択等を行う。
【0099】
図13は複数のロボットが存在する場合の衝突判定処理を示すフローチャートである。
【0100】
まず、N=1に設定する(ステップS21)。次に、N番目のロボットを衝突検出対象として選択する(ステップS22)。そして、6面の全てについて、N番目のロボットの描画処理を行って衝突判定を行う(ステップS23)。即ち図12で説明した衝突判定を行う。
【0101】
次に、衝突判定が行われたN番目のロボットを、被衝突検出対象となる環境のオブジェクトに組み込む(ステップS24)。そして、全てのロボットを処理したか否かを判断し(ステップS25)、処理してなかった場合にはNを1だけインクリメントして(ステップS26)、ステップS22の処理に戻る。一方、全てのロボットを処理した場合には、処理を終了する(ステップS27)。
【0102】
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。また衝突検出システム、ロボットシステムの構成・動作や、深度マップ情報の設定手法、衝突検出対象オブジェクトの描画手法、衝突検出対象オブジェクトの衝突判定手法等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【0103】
OBA〜OBC、OBA1〜OBA4、OB11〜OB41 オブジェクト、
RB ロボット(衝突検出対象オブジェクト)、SF1〜SF6 対象面、
DPM1、DPM2 深度マップ、DRP 平行投影の方向、
10 処理部、12 オブジェクト空間設定部、14 衝突判定部、16 比較処理部、
30 描画部、50 記憶部、52 オブジェクトデータ記憶部、
54 描画バッファー、56 深度バッファー、70 操作部、80 外部I/F部、90 情報記憶媒体、300 制御装置、310 ロボット、320 アーム、
330 ハンド
【特許請求の範囲】
【請求項1】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーと、
を含み、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記処理部は、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出システム。
【請求項2】
請求項1において、
前記処理部は、
前記第1の描画処理により生成された第1の画像と、前記第2の描画処理により生成された第2の画像との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項3】
請求項1において、
前記処理部は、
前記第1の描画処理での描画ピクセル数情報と前記第2の描画処理での描画ピクセル数情報との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項4】
請求項1乃至3のいずれかにおいて、
前記描画部は、
前記第1の描画処理と前記第2の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画することを特徴とする衝突検出システム。
【請求項5】
請求項4において、
前記深度バッファーには、
前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されることを特徴とする衝突検出システム。
【請求項6】
請求項1乃至5のいずれかにおいて、
前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、前記視点から見て重ならない場合に、
前記描画部は、
前記第1の描画処理と前記第2の描画処理の各描画処理において、前記第1のパーツオブジェクトと前記第2のパーツオブジェクトを同時に描画することを特徴とする衝突検出システム。
【請求項7】
請求項1乃至6のいずれかにおいて、
前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、
前記処理部は、
前記複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第2の衝突検出対象オブジェクトについての前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項8】
請求項1乃至7のいずれかにおいて、
前記深度バッファーには、
前記衝突検出対象オブジェクトを内包するように設定される第1〜第Nの対象面(Nは2以上の整数)に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定され、
前記描画部は、
前記第1〜第Nの対象面の各対象面について、深度テストを行って、前記第1〜第Nの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第1の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第2の描画処理を行い、
前記処理部は、
前記第1〜第Nの対象面の各対象面についての前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項9】
請求項8において、
前記第1〜第Nの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であることを特徴とする衝突検出システム。
【請求項10】
請求項1乃至9のいずれかにおいて、
前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであることを特徴とする衝突検出システム。
【請求項11】
請求項1乃至10のいずれかに記載の衝突検出システムを含むことを特徴とするロボットシステム。
【請求項12】
対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出方法。
【請求項13】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーとして、
コンピューターを機能させ、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記処理部は、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とするプログラム。
【請求項1】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーと、
を含み、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記処理部は、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出システム。
【請求項2】
請求項1において、
前記処理部は、
前記第1の描画処理により生成された第1の画像と、前記第2の描画処理により生成された第2の画像との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項3】
請求項1において、
前記処理部は、
前記第1の描画処理での描画ピクセル数情報と前記第2の描画処理での描画ピクセル数情報との比較処理を行うことで、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項4】
請求項1乃至3のいずれかにおいて、
前記描画部は、
前記第1の描画処理と前記第2の描画処理の各描画処理において、前記衝突検出対象オブジェクトの裏面のプリミティブ面を、無限遠の前記視点での平行投影で描画することを特徴とする衝突検出システム。
【請求項5】
請求項4において、
前記深度バッファーには、
前記対象面の前記オブジェクトを無限遠の前記視点での平行投影で描画することで得られた深度情報が、前記対象面の前記深度マップ情報として設定されることを特徴とする衝突検出システム。
【請求項6】
請求項1乃至5のいずれかにおいて、
前記衝突検出対象オブジェクトが複数のパーツオブジェクトにより構成され、前記複数のパーツオブジェクトのうちの第1のパーツオブジェクトと第2のパーツオブジェクトとが、前記視点から見て重ならない場合に、
前記描画部は、
前記第1の描画処理と前記第2の描画処理の各描画処理において、前記第1のパーツオブジェクトと前記第2のパーツオブジェクトを同時に描画することを特徴とする衝突検出システム。
【請求項7】
請求項1乃至6のいずれかにおいて、
前記衝突検出対象オブジェクトとして複数の衝突検出対象オブジェクトが存在する場合に、
前記処理部は、
前記複数の衝突検出対象オブジェクトのうちの第1の衝突検出対象オブジェクトについて前記衝突判定を行った後、前記第1の衝突検出対象オブジェクトを、被衝突検出対象オブジェクトに設定して、前記複数の衝突検出対象オブジェクトのうちの第2の衝突検出対象オブジェクトについての前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項8】
請求項1乃至7のいずれかにおいて、
前記深度バッファーには、
前記衝突検出対象オブジェクトを内包するように設定される第1〜第Nの対象面(Nは2以上の整数)に対応する第1〜第Nの深度マップ情報の各深度マップ情報が設定され、
前記描画部は、
前記第1〜第Nの対象面の各対象面について、深度テストを行って、前記第1〜第Nの深度マップ情報の対応する各深度マップ情報を参照しながら、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第1の描画処理と、深度テストを行わずに、前記衝突検出対象オブジェクトの裏面のプリミティブ面を描画する前記第2の描画処理を行い、
前記処理部は、
前記第1〜第Nの対象面の各対象面についての前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突判定を行うことを特徴とする衝突検出システム。
【請求項9】
請求項8において、
前記第1〜第Nの対象面は、前記衝突検出対象オブジェクトを内包する立方体又は直方体を構成する面であることを特徴とする衝突検出システム。
【請求項10】
請求項1乃至9のいずれかにおいて、
前記衝突検出対象オブジェクトは、ロボットをモデル化したオブジェクトであることを特徴とする衝突検出システム。
【請求項11】
請求項1乃至10のいずれかに記載の衝突検出システムを含むことを特徴とするロボットシステム。
【請求項12】
対象面に配置設定されるオブジェクトの深度情報を、深度マップ情報として深度バッファーに設定し、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とする衝突検出方法。
【請求項13】
処理部と、
描画処理を行う描画部と、
深度情報が設定される深度バッファーとして、
コンピューターを機能させ、
前記深度バッファーには、
対象面に配置設定されるオブジェクトの深度情報が、深度マップ情報として設定され、
前記描画部は、
深度テストを行って、前記深度バッファーの前記深度マップ情報を参照しながら、衝突検出対象オブジェクトを構成するプリミティブ面のうち、所定の視点から見て裏面のプリミティブ面を描画する第1の描画処理を行い、
深度テストを行わずに、前記衝突検出対象オブジェクトを構成するプリミティブ面のうち、前記視点から見て裏面のプリミティブ面を描画する第2の描画処理を行い、
前記処理部は、
前記第1の描画処理と前記第2の描画処理の結果に基づいて、前記衝突検出対象オブジェクトが前記対象面の前記オブジェクトと衝突したか否かを判定する衝突判定を行うことを特徴とするプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2012−226636(P2012−226636A)
【公開日】平成24年11月15日(2012.11.15)
【国際特許分類】
【出願番号】特願2011−94819(P2011−94819)
【出願日】平成23年4月21日(2011.4.21)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
【公開日】平成24年11月15日(2012.11.15)
【国際特許分類】
【出願日】平成23年4月21日(2011.4.21)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
[ Back to top ]