以下、本発明の好適な実施の形態について詳細に説明する。なお以下に説明する本実施形態は特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
1.深度バッファー処理
ロボット(マニピュレーター)の動作においては、周辺構造物や周辺機器への衝突や、自己衝突や、他のロボットへの衝突は非常に大きな問題となる。本実施形態の衝突検出手法では、このような衝突をシミュレーションにより事前に検出する。
このような本実施形態の衝突検出手法が用いられる形態としては、大別して、オフラインでの使用(事前確認)と、ラインタイムでの使用(予測、先読み)が考えられる。オフラインの使用では、周辺環境などが既知且つ静的であり、ロボットの動作が既知である場合に、システムの作成時に、その衝突を検証する。一方、ラインタイムの使用では、周辺環境などが動的に変化する場合(例えば周囲に複数のロボットが存在したり、作業者が存在する場合)に、ロボットの実際の動作に先行して、シミュレーションにより衝突を検出する。
従来では、このようなロボットにおける衝突検出手法として、CPU(Central Processing Unit)の処理に適したアルゴリズムを使用する場合が殆どであった。ここでCPU処理に適したアルゴリズムとは、比較的に複雑な単位処理を、比較的に少数(数十から数百程度)の並列度で処理するようなアルゴリズムである。
しかしながら、近年では、消費電力の問題等に起因して、CPUの動作周波数の伸びは
止まっている。このため、最近のCPUの性能向上は、マルチコア化などの処理の並列度の向上によって実現されている。別の言い方をすれば、並列度を上げることができないアルゴリズムでは、処理性能を向上できなくなっている。
一方、GPU(Graphics Processing Unit)は、CPUに比べて非常に大きな並列度を有する。例えば現在のGPUは、ALU(算術演算ユニット)を数百から千数百持ち、数万から数百万の処理を並列に実行できる能力を有する。
そこで本実施形態では、衝突検出のアルゴリズムとして、CPU処理よりはGPU処理に適したアルゴリズムを採用することで、従来に比べて高性能な衝突検出を実現する。具体的には、GPUが有するハードウェアー機能であるROP(レンダリング・アウトプット・パイプライン)の機能を最大限に利用する。即ち、このようなROP機能を用い、深度テスト機能と深度バッファーを有効活用して衝突検出を実現する。
ここで深度バッファーは、CG(Computer Graphics)においては主に隠面消去のため
に用いられ、オブジェクトの深度情報を記憶するものである。具体的にはピクセル単位で深度値(Z値)を記憶する。また、深度情報とは、ピクセル毎の深度値に係る情報である。以下、深度バッファーを用いた深度バッファー処理(Zバッファー処理)について説明する。
深度バッファー処理では、ある点を描画する際に、その点の深度値と、深度バッファーに記憶されている深度値を比較する。そして、その点の深度値が大きければ(右手系の場合)、その点のカラー値でカラーバッファーの値を上書きすると共に、その点の深度値で深度バッファーの値を更新する。
例えばオブジェクトOBA、OBB、OBCが図1(A)、図1(B)に示すように配置されていたとする。図1(A)はオブジェクトOBA、OBB、OBCを上方の視点から見た場合の図であり、図1(B)は前方斜め上の視点から見た場合の図である。ここでオブジェクトは、現実世界の物体をモデル化したものであり、例えば複数のプリミティブ面により構成される。プリミティブ面は、オブジェクトの構成要素であるプリミティブとなる面であり、例えばポリゴン、自由曲面、或いはサブディビジョンサーフェスなどである。
図1(C)に示すように、深度バッファーを用いた描画処理では、各ピクセルのカラー値(RGBの色情報)が描画バッファー(カラーバッファー)に書き込まれ、深度値(Z値)が深度バッファー(Zバッファー)に書き込まれる。
具体的には図2(A)では深度バッファーの深度値が初期値である最背面値に設定される。そして図2(B)ではオブジェクトOBAが描画されている。この場合に図2(B)のJ1に示す領域でのオブジェクトOBAの各ピクセルの深度値は、図2(A)での深度バッファーの深度値よりも前方側(手前側)の深度値となっている。従って、J1に示す領域では、オブジェクトOBAのカラー値が描画バッファーに書き込まれると共に、オブジェクトOBAの深度値が深度バッファーに書き込まれて深度値が更新される。
図2(C)ではオブジェクトOBBが描画されている。この場合に図2(C)のJ2に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも後方側(奥側)の深度値となっている。従って、J2に示す領域では、オブジェクトOBBは隠面消去されたと判断され、オブジェクトOBBのカラー値は描画バッファーには書き込まれず、図2(D)のJ3に示すように深度バッファーの深度値も更新されない。
一方、J4に示す領域でのオブジェクトOBBの各ピクセルの深度値は、深度バッファーの深度値よりも前方側の深度値となっている。従って、J4に示す領域では、オブジェクトOBBのカラー値が描画バッファーに書き込まれると共に、図2(D)のJ5に示すようにオブジェクトOBBの深度値が深度バッファーに書き込まれて深度値が更新される。そして、図2(D)でオブジェクトOBCが描画されると、上記と同様の手法により、J6の領域ではカラー値の書き込みや深度値の更新が行われず、J7の領域ではカラー値の書き込みと深度値の更新が行われる。
以上のような深度バッファー処理を行うことで、描画の順番に依存せずに、奥行き方向での順番が正しく判定され、図1(C)に示すように適切な隠面消去が行われた画像が生成されるようになる。
さて、前述した特許文献1の従来技術においても、深度バッファーを利用して衝突判定を行っている。例えば、他のオブジェクトの描画により、深度バッファーの深度値が図3(A)に示すようになっていたとする。この場合に図3(B)のH1に示すように、オブジェクトOBA1では、その深度値がZバッファーの深度値とは異なるため、OBA1は他のオブジェクトと衝突していないと判定される。一方、H2、H3に示すように、オブジェクトOBA2では、その深度値が深度バッファーの深度値と同一になっている。従って、オブジェクトOBA2は、この深度バッファーの深度値を持った他のオブジェクトと衝突していると判定される。
しかしながら、この特許文献1の従来技術では図3(C)に示すような問題点がある。図3(C)では、他のオブジェクトOBDの描画により深度バッファーの深度値がH4に示すようになっている。この場合に、H5に示すようにオブジェクトOBA3はオブジェクトOBDと衝突しているのにも関わらず、オブジェクトOBA3の深度値は深度バッファーの深度値と一致していないため、衝突していないと判定されてしまう。またH6に示すように深度値が内挿された場合には、オブジェクトOBA4はオブジェクトOBDと衝突していないのに、衝突していると判定されてしまう。
また、他の手法として、仮想的な視点を、地面等を表す平面状のオブジェクトの背面に設定し、背面から見て、表面にあるはずのオブジェクトが描画されれば、そのオブジェクトが平面と衝突していると判定する手法も考えられる。しかしながら、この手法では、単純な平面が仮定されているが、それが平面ではなく複雑な構造を持つオブジェクト(例えば非凸)である場合には、片方の面との衝突が、別の面によって遮蔽される可能性があり、このような場合には衝突を検出できなくなる。
2.構成
2.1 構成例
以上のような問題を解決できる本実施形態の衝突検出システムの構成例を図4に示す。なお本実施形態の衝突検出システムの構成は図4の構成には限定されず、その一部の構成要素(例えば操作部、外部I/F部等)を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
この衝突検出システムは、処理部10と、描画処理を行う描画部30と、記憶部50(深度バッファー)を含む。また操作部70、外部I/F(インターフェース)部80、情報記憶媒体90を含むことができる。
処理部10は、各種の判定処理や制御処理などを行うものであり、例えばCPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。処理部10は、オブジェクト空間設定部12、衝突判定部14を含む。
オブジェクト空間設定部12は、複数のオブジェクトをオブジェクト空間に配置設定する処理等を行う。具体的には、ワールド座標系でのオブジェクトの位置や回転角度を決定し、その位置にその回転角度でオブジェクトを配置する。ここでオブジェクトは、ロボット等の衝突検出対象物や、周辺構造物や周辺機器などの被衝突検出対象物を、モデル化したものであり、ポリゴンや自由曲面などのプリミティブ面で構成される。
衝突判定部14は、衝突検出対象オブジェクトと被衝突検出対象オブジェクトとの間の衝突判定処理を行うものであり、画像や描画カウント数の比較処理を行う比較処理部16を含む。
描画部30は、描画処理を行うものであり、例えばGPU等の各種のプロセッサー、専用回路(ASIC)などのハードウェアーや、プロセッサー上で実行されるプログラムなどにより実現できる。この描画部30での描画処理は、頂点シェーダープログラムにより実現される頂点シェーダーや、ピクセルシェーダープログラムにより実現されるピクセルシェーダーにより実現してもよい。頂点シェーダーでは、頂点の移動処理、座標変換処理、クリッピング処理などが行われる。そして頂点処理後の頂点データに基づいてラスタライズ処理が行われる。またピクセルシェーダーでは、ラスタライズ処理後に、画像を構成するピクセル(フラグメント)単位での処理であるピクセル処理(フラグメント処理)が行われる。即ち、シェーディング言語によって記述されたシェーダープログラムによって、プログラマブルシェーダー処理が実現される。
記憶部50は、処理部10や描画部30などのワーク領域となるもので、RAM(SRAM、DRAM等)などのメモリーにより実現できる。この記憶部50は、オブジェクトデータ記憶部52、描画バッファー54、深度バッファー56を含む。
オブジェクトデータ記憶部52は、オブジェクトの位置データや回転角度データや形状データなどのオブジェクトデータを記憶する。描画バッファー54(カラーバッファー、フレームバッファー)は画像情報を記憶するものであり、具体的には、ピクセル単位でカラー値やα値などの画像情報を記憶する。深度バッファー56(Zバッファー)は、深度情報を記憶するものであり、具体的にはピクセル単位で深度値(Z値)を記憶する。これらの描画バッファー54、深度バッファー56は、記憶部50を構成するメモリー上に記憶領域として確保される。
操作部70は、使用者が各種の操作情報を入力するためのものである。外部I/F部80は、外部との間で有線や無線で情報の通信処理等を行うものである。情報記憶媒体90は(コンピューターにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク、HDD、或いはメモリーなどにより実現できる。処理部10は、情報記憶媒体90に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体90には、本実施形態の各部としてコンピューター(操作部、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピューターに実行させるためのプログラム)が記憶される。
2.2 詳細な構成例
また本実施形態の衝突検出システムは、具体的には図6に示す構成であってもよい。図6に示したように、衝突検出システムは、視点設定部40と、ピクセル値入力部82と、処理部10と、描画部30と、記憶部50を含む。なお本実施形態の衝突検出システムの構成は図6の構成には限定されず、その一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。例えば、不図示の操作部70、外部I/F部80、情報記憶媒体90等を含んでもよい。
視点設定部40は、オブジェクト空間上に、当該空間上に設定されたオブジェクトを観察する視点を設定する。視点は1つであってもよいし、複数であってもよい。視点が複数設定された場合には、描画部30での描画処理は、各視点においてそれぞれ行われる。視点の設定手法については後述する。
ピクセル値入力部82は、描画処理(及びそれに伴う深度比較処理等)の対象となるピクセルの値を処理部10及び描画部30に出力する。出力されるピクセル値は、例えば色値及び座標値である。色値とは、図1(C)の描画バッファーに記憶される値であり、オブジェクト表面の色味を表す値である。また、座標値とは処理対象ピクセルに対応するオブジェクト上の点が、オブジェクト空間のどの位置に存在するかを表す値である。なお、図1(C)の深度バッファーに記憶される深度値は、座標値に対して座標変換処理を施すことで取得される。ピクセル値入力部82が出力するピクセル値は、例えば外部I/F部80を介して入力され、オブジェクトデータ記憶部52に記憶されたデータを読み出すことで取得されてもよい。
処理部10は、座標値変換部120と、深度値比較部130と、深度値更新部140と、画像比較部150を含む。座標値変換部120は、ピクセル値入力部82から取得したピクセル値に対して座標変換処理を行う。具体的には、ピクセル値のうちの座標値に対して、視点設定部40で設定された視点を基準とする座標変換処理を行う。これは例えば、座標変換処理後の座標系が、視点を原点とし、視点とオブジェクト上の処理対象点(処理対象ピクセルに対応するオブジェクト上の点)とを結ぶ軸がz軸となるような座標変換処理であってもよい。このようにした場合、座標変換後の座標値は、視点を原点とした場合の処理対象点の空間位置を表すことになり、特に視点と処理対象点との距離がz座標値となるため、z座標の値をそのまま深度値として用いることができる。
深度値比較部130は、座標値変換部120から出力された深度値と、深度バッファー56から出力された深度値の比較処理を行う。深度値更新部140は、深度値比較部130での比較結果に基づいて、深度バッファー56に記憶された深度値の更新処理を行う。本実施形態では例えば、衝突検出対象オブジェクト(例えばロボット)の描画処理時は、深度値の比較は行われず、全てのピクセルにおいて深度値更新部140による更新処理が行われる。また、他のオブジェクト(周辺機器や作業者等)の描画処理時には、衝突検出対象オブジェクトの深度値を基準とし、それに対して描画対象のオブジェクトの深度値が小さい(広義には視点から見て、衝突検出対象オブジェクトよりも描画対象のオブジェクトの方が視点側に位置する)場合に深度値の更新処理を行ってもよい。
画像比較部150は、画像の比較処理を行う。本実施形態においては、描画部30での描画処理は、衝突検出対象オブジェクトを描画する第1の描画処理と、他のオブジェクトを描画する第2の描画処理からなる。そして、第1の描画処理から第1の画像(以下、初期画像とも表記する)を取得するとともに、第2の描画処理から第2の画像(以下、比較画像とも表記する)を取得する。画像比較部150での比較とは、初期画像と比較画像の比較処理であり、例えば初期画像と比較画像が一致するか否かの判定を行う。画像比較部150での比較結果に基づいて衝突判定が行われ、狭義には初期画像と比較画像が一致する場合には非衝突と判定し、一致しない場合には衝突と判定する。
描画部30は、色値更新部32を含む。色値更新部32は、深度値比較部130での比較結果に基づいて、描画バッファー54に記憶された色値の更新処理を行う。なお、深度値比較部130での比較処理の結果としては、同一の内容が深度値更新部140及び色値更新部に出力されることを想定している。つまり、深度値更新部140での深度値更新処理が必要と判定された場合には、色値更新部32での色値更新処理も必要と判定されるし、深度値更新部140での深度値更新処理が不要と判定された場合には、色値更新部32での色値更新処理も不要と判定されるものとする。ただし、深度値比較部130での比較処理の結果、深度値及び色値の一方が更新され、他方が更新されないといった処理が行われることを妨げるものではない。色値の更新処理とは、ピクセル値入力部82から入力されたピクセル値のうち、色値を用いて描画バッファー54の値を更新する処理が考えられる。よって、狭義には描画対象のオブジェクトの表面色を描画する処理に相当する。
記憶部50は、描画バッファー54と、深度バッファー56と、初期画像記憶部58を含む。描画バッファー54及び深度バッファー56については図4を用いて上述したとおりである。初期画像記憶部58は、衝突検出対象オブジェクトの描画処理により生成される初期画像を記憶する。上述したように、描画部30での描画処理は、第1の描画処理と第2の描画処理に分けられ、第1の描画処理終了時の描画バッファー54のデータが初期画像、第2の描画処理終了時の描画バッファー54のデータが比較画像となる。衝突判定は、初期画像と比較画像の比較処理により行われるが、描画バッファー54の値は次々に更新されていくものであるから、比較画像に対応するデータにより、初期画像に対応するデータが上書きされてしまう可能性がある。よって、画像比較部150での比較処理を行うためには、初期画像は第2の描画処理終了後にも保持しておく必要があることから、当該初期画像を初期画像記憶部58に記憶しておく。
2.3 ロボットシステムの構成例
図5に本実施形態の衝突検出システムを含むロボットシステムの例を示す。このロボットシステムは、制御装置300(情報処理装置)とロボット310とを含む。制御装置300はロボット310の制御処理を行う。具体的には、動作シーケンス情報(シナリオ情報)に基づいてロボット310を動作させる制御を行う。ロボット310は、アーム320及びハンド(把持部)330を有する。そして制御装置300からの動作指示にしたがって動作する。例えば、図示しないパレットに載せられたワークを把持したり、移動するなどの動作を行う。また、図示しない撮像装置で取得された撮像画像情報に基づいて、ロボットの姿勢やワークの位置などの情報が検出され、検出された情報が制御装置300に送られる。
本実施形態の衝突検出システムは例えば図5の制御装置300に設けられ、例えば制御装置300のハードウェアーやプログラムにより衝突検出システムが実現される。そして、ラインタイムの使用では、周辺環境などが動的に変化する場合に、ロボット310の実際の動作に先行して、本実施形態の衝突検出システムがシミュレーションにより衝突の判定処理を行う。そして制御装置300は、ロボット310が周辺構造物や周辺機器などに衝突しないように、判定処理の結果に基づいてロボット310の制御を行う。一方、オフラインの使用では、本実施形態の衝突検出システムにより、動作シーケンス情報等の作成時にシミュレーションにより衝突を検証する。そして制御装置300は、衝突が起こらないように作成された動作シーケンス情報(シナリオ情報)に基づいて、ロボット310を制御する。
3.本実施形態の手法
次に本実施形態の手法について図面を用いて更に詳細に説明する。
3.1 衝突判定手法
本実施形態の衝突判定手法について図7(A)〜図8(C)を用いて説明する。図7(A)等は説明を簡単にするために平面的な図を用いるが、オブジェクトが立体であってもよいことは言うまでもない。図7(A)において、四角が衝突検出対象オブジェクト(例えばロボット)を表し、X,Y,Zが他のオブジェクト(例えば周辺構造物、周辺機器、他のロボット、作業者等)を表す。本実施形態では、衝突検出対象オブジェクトと他のオブジェクトの衝突を検出するものであり、他のオブジェクト同士の衝突は考えなくてもよい。なお、他のオブジェクトに対して視点を設定し、当該他のオブジェクトを衝突検出対象オブジェクトとして扱うことにより、他のオブジェクト同士の検出も本実施形態の手法により実行可能である。
本実施形態の衝突検出では、まず図7(B)のように視点を設定する。図7(B)のA及びBが設定された視点である。視点A及びBは、それぞれの点から矢印で示された方向にあって、点線の範囲内の領域を観察することができる。例えば、図7(B)の衝突検出対象オブジェクトが直方体であれば、視点Aからの描画処理により生成される画像は図7(C)のようになる。
本実施形態では、設定された視点の全てを用いることで、衝突検出対象オブジェクトの内面(本実施形態の「内面」という用語は、具体的には外殻内面を指すものとする。詳細は後述する)の全てを見渡せるように、視点の設定を行う。具体的な視点設定手法については後述するが、このようにすることで、衝突検出対象オブジェクトの内面を不足なく観察することができる。衝突検出対象オブジェクトと他のオブジェクトが衝突するとは、衝突検出対象オブジェクトの内側に他のオブジェクトが侵入しているということであるから、上述のように設定された視点を基準とした描画を行って、他のオブジェクトが描画されたか否かに基づいて衝突判定を行うことができる。
ただし、他のオブジェクトの描写時には、描画する深度値の範囲を考慮する必要がある。衝突検出対象オブジェクトの内側への侵入の有無で衝突検出を行い、当該侵入の有無を他のオブジェクトが描写されたか否かで判定する以上、描画対象となる他のオブジェクトは、衝突検出対象オブジェクトの内側にあるものに限定しなければならないためである。このために、図1(A)〜図3(C)を用いて説明した深度値を用いる。
本実施形態では衝突検出処理(狭義にはそのうちの描画処理)を、衝突検出対象オブジェクトに関する第1の描画処理と、他のオブジェクトに関する第2の描画処理とに分ける。第1の描画処理では、設定された視点から見たときの衝突検出対象オブジェクトの内面を描画するとともに、当該内面の深度値を深度バッファー56に記憶する。そして、第2の描画処理では、第1の描画処理で取得された深度値と、描画対象である他のオブジェクトの深度値を用いた深度値比較処理を行い、比較処理の結果に基づいて他のオブジェクトの描画処理を行う。なお、他のオブジェクトが複数ある場合、第2の描画処理は複数のオブジェクトを一度に描画する1つのフェーズであってもよいし、1つずつオブジェクトを描画する複数のフェーズに分割されてもよい。
このようにすることで、第2の描画処理で描画される他のオブジェクトは、検出対象オブジェクトとの位置関係が所与の条件を満たしたものに限定されることになる。具体的には、衝突検出対象オブジェクトの深度値と、他のオブジェクトの深度値との比較により、視点側から見た際に他のオブジェクトが衝突検出対象オブジェクトよりも手前側に位置すると判定された場合に、他のオブジェクトの描画処理を行えばよい。例えば、深度値が視点からの距離値に対応する場合には、衝突検出対象オブジェクトの深度値に比べて、他のオブジェクトの深度値が小さい場合に描画処理が行われることになる。
このようにすることで、衝突検出対象オブジェクトの内側に侵入した他のオブジェクトを描画し、検出対象オブジェクトの外側については描画しないことが可能になる。例えば、図7(A)のような位置関係では、X,Y,Zは全て外側にあるため描画されず、視点A(或いは視点B)での第2の描画処理での描画結果(比較画像)は、初期画像である図7(C)と同様となる。それに対して、他のオブジェクトZが衝突検出対象オブジェクトと衝突している図8(A)のような位置関係では、図8(B)に示したように、オブジェクトZは視点Aから見えることになる。よって、視点Aから衝突検出対象オブジェクトの内面を描画した結果得られる比較画像は、図8(C)のようになり、衝突している他のオブジェクトが描画される。
つまり、検出対象オブジェクトの内面全てを見渡す視点を設定した上で、深度値(深度マップ)を考慮した描画を行って初期画像と比較画像を取得することで、取得した2画像の比較処理により衝突検出を行うことができる。具体的には、初期画像と比較画像が一致する場合(例えば2枚とも図7(C)のようになる)には衝突していないと判定する。また、初期画像と比較画像が一致しない場合(例えば図7(C)と図8(C)のようになる)には衝突していると判定する。
なお、以上の説明では第1の描画処理において描画処理(例えば色値更新部32による描画バッファー54の更新処理)を行うものとしたが、これに限定されない。例えば、第1の描画処理では深度値更新部140による深度値の更新処理を行い、描画バッファー54に実際の画像を描画する描画処理は行われなくてもよい。その場合、描画バッファー54の値は初期値のままであり、初期画像は検出対象オブジェクトの表面色(色値)に関係なく決定される。比較画像については、他のオブジェクトが描画されたピクセルは、当該他のオブジェクトの色値を持ち、それ以外のピクセルは初期画像と同様に描画バッファー54の初期値となる。よって、この場合も衝突検出対象オブジェクトが描画されないだけであり、衝突検出が初期画像と比較画像の比較(一致するか否か)に基づいて行われる点に変更はない。
3.2 視点設定手法
次に視点の設定手法について図9(A)〜図10(D)を用いて説明する。なお、本実施形態の視点は、上述したように衝突検出対象オブジェクトの内面全てを見渡すように設定されればよく、後述の手法に限定されるものではない。また、図9(A)〜図10(D)では説明を簡単にするために平面的な図を用いるが、オブジェクトが立体であってもよい。
ここで、衝突検出対象オブジェクトの形状として図9(A)を考える。まず、図9(B)に示したように、衝突検出対象オブジェクトの特徴的な点に参照点を置く。図9(B)では頂点及び一部の辺上の点が参照点となっている。衝突検出対象オブジェクトがCAD(computer aided design)データ等で与えられているのであれば、当該CADデータの入力点を参照点としてもよいし、任意に参照点を付加してもよい。
次に、設定した参照点に基づいて衝突検出対象オブジェクトの内面を過不足なく覆い尽くす線(2次元の場合)を作る。2次元では、図9(B)に示したように、設定された線を全てあわせると衝突検出対象オブジェクトの輪郭に一致することになり、1つ1つの線は隣り合う参照点の間の線分となる。なお、衝突検出対象オブジェクトが立体(3次元)の場合には、内面も立体で考えることになるため、線ではなく3つの参照点によって囲まれる三角形を考える必要がある。ただし、以下では説明を簡単にするため、2次元について説明する。
線が設定されたら、それぞれの線について、その線の全面を見ることのできる別の参照点を選択し、視点とする。図9(C)の例では、線C1に対して、C1全体を見渡せる参照点D1を選択して視点とする。同様に、C2に対してD2、C3に対してD3、C4に対してD4を視点とする。C1〜C4以外の各線に対しても同様に視点を選択する。
全ての線に対して視点が設定されたら、設定された視点が対応する線以外の線について全面を見渡せるか否かを判断し、見渡せる場合には視点の対応関係を変更する。これを図示したものが図10(A)である。具体的には、図9(C)のようにC1〜C4とD1〜D4の対応関係が作られた場合、D1からC1以外の線(例えばC2〜C4)の全面を見渡せるか判定する。D1については該当する線はないため対応関係は変更しない。同様にD2からC1,C3,C4を見渡せるかの判定を行う。この場合、D2からはC1の全面を見渡せることになる。このような判定を行うことで、図9(C)で設定された視点では、C1とC2の2本の線を観察するためにD1とD2の2つの視点を設けたが、D2という1つの視点からC1とC2の両方を観察することがわかるため、D1は不要であると判断できる。よって、(C1,D1)(C2,D2)という対応関係(図面では1つの対応関係が1本の矢印で表現されている)が、(C1,D2)(C2,D2)に変更される。同様に、C4はD3から観察可能であるため、(C4,D4)という対応関係を(C4,D3)に変更する。これを図示したものが図10(B)である。
なお、図10(A)、図10(B)では説明を簡単にするために線としてC1〜C4のみを考えたが、実際には視点の設定及び対応関係の変更は全ての線を対象に行う必要がある。変更後の対応関係の一例を示したものが図10(C)である。図10(C)から明らかなように、対応関係を整理することで、設定された視点により全ての線の全面を観察可能であるという条件を満たしつつ、視点として選択されていない参照点が生じることになる。よって、これらの参照点は除いて、対応関係を残す点を本実施形態での視点として採用すればよい。これを図示したものが図10(D)であり、この例では4つの視点を設定することで、衝突検出対象オブジェクトの内面全てを見渡すことができる。
3.3 衝突検出対象オブジェクトの変形手法
以上の手法により、衝突検出対象オブジェクトと他のオブジェクトの衝突を検出することができる。ただし、本実施形態の処理はこれに限定されず、衝突検出対象オブジェクトの変形処理を含んでもよい。
具体例を図11〜図13(B)に示す。図11に示したように、実線で描かれた衝突検出対象オブジェクトに対して膨張処理を行って、破線で示したような膨張した衝突検出対象オブジェクトを取得してもよい。具体的には、オブジェクトデータ記憶部52に記憶されたデータに対して処理部10で膨張処理を行う。そして、膨張処理後の衝突検出対象オブジェクトに対して視点設定部40で視点を設定する。視点設定後の処理については上述したとおりである。
このようにすることで、図11の破線の範囲に他のオブジェクトが侵入したことを検出することができる。つまり、実際に衝突が起こっていない(実線の範囲には侵入していない)としても、ある程度近い距離まで接近している(破線の範囲に侵入している)ことを検出できるため、より安全性の高いシステムを実現できる。
また、変形処理は図12(B)に示したような形状簡略化処理であってもよい。衝突検出対象オブジェクトが図12(A)に示したような細かな凹凸を持つ場合、当該凹凸部分では、形状が複雑になるため内面全体を観察するために必要な視点の数が増加する等の影響が生じる可能性がある。例えば、上述の視点設定手法を用いた場合には、衝突検出対象オブジェクトの内面を過不足なく覆い尽くす線(3次元の場合には三角形)が増加することになるため、視点設定処理の処理負荷が高くなる。さらに、視点が増えれば、視点ごとに行われる描画処理等の回数も増えることになり、処理負荷及び処理にかかる時間の増大につながる。よって、図12(B)に示したように、凹凸をなくすような形状簡略化処理を行うことで、処理を容易にすることができる。
なお、形状簡略化処理の一例としては、衝突検出対象オブジェクトを円柱又は角柱で近似することが考えられる。衝突検出対象オブジェクトとしてロボットを考えた場合、ロボットを構成するパーツは図13(A)に示したようなアーム等の棒状の物体であることが多い。そのような場合、形状簡略化処理後のオブジェクトとして円柱又は角柱を扱うことで処理をよりいっそう容易にすることができる。円柱又は角柱であれば、図13(B)のように上面に1つ、底面に1つの2つの視点を設定すれば、内面全体を見渡すことができるため、複雑な視点設定処理を行う必要がない。視点の数も2つと少ないため、深度比較処理や描画処理の回数も2回で済むことになる。
4.詳細な処理
次に本実施形態の詳細な処理例について図14、図15のフローチャートを用いて説明する。
この処理が開始されると、図14に示したように、まず全ての視点についてチェックしたか否かの判定が行われる(S101)。後述するように、1つの視点で衝突が検出されれば、その時点で処理は終了するため、全ての視点のチェックが終了したとき(S101でYesの場合)には、衝突はないと判定し処理を終了する。
未チェックの視点がある場合には、そのうちの1つの視点を選択し(S102)、選択した視点を用いて、衝突検出対象オブジェクトの内面を描画し、深度値を設定する(S103)。そして、その状態での画像である初期画像を記憶する(S104)。S103及びS104が上述してきた第1の描画処理に相当する。次に第2の描画処理に入り、全ての障害物(他のオブジェクト)を描画して比較画像を取得する(S105)。そして、初期画像と比較画像を比較し、差異があるか否かの判定を行う(S106)。そして、差異がある場合には衝突有りと判定し処理を終了し、差異がない場合には現在の視点からは衝突は見つからなかったものとしてS101に戻る。
次にS103、S105における描画処理の詳細について図15を用いて説明する。S103の描画処理が開始されると、まず他の視点での処理結果を初期化するために、深度バッファー56及び描画バッファー54を初期化する(S201,S202)。そして、全てのピクセル値を描画したかの判定が行われ(S203)、描画した場合には処理を終了する。未描画のピクセルがある場合には、描画対象のピクセルのXYZ値を取得し(S204)、対応するピクセルのXY位置での深度バッファー56に記憶されたZ座標値を取得する(S205)。なお、S201において深度バッファー56は初期化されているため、S205で取得する値は初期値となる。
次に、描画するピクセルのZ値と、深度バッファー56から読み出してきたZ値との比較を行い、描画対象が深度バッファー56のZ値よりも手前側にあるかの判定を行う(S206)。第1の描画処理である衝突検出対象オブジェクトの描画処理時には、全てのピクセルについて描画及び深度値更新処理を行うこととしているため、S201での初期化処理として、深度バッファー56には十分視点から遠いことを表す値(例えば無限遠を表す値)を入れておき、S206では必ずYesと判定されるようにしておく。
或いは、S103の処理においては、S205及びS206の処理をスキップするようにしておいてもよい。
そして、処理対象ピクセルの色値を描画バッファー54の対応位置へ描画し(S207)、それとともに深度バッファー56の値を描画対象ピクセルのZ値で更新する(S208)。その後、S203に戻り、全てのピクセルが描画されるまで処理を継続する。このようにすることで、衝突検出対象オブジェクトの内面を描画する第1の描画処理が実行される。
次にS105における処理について説明する。S105でも基本的にS103と同様に図15で示した処理が行われる。しかしS105では、S103(第1の描画処理)での深度バッファー56及び描画バッファー54の値を用いるため、S201及びS202の初期化処理はスキップされる。S203〜S208については、図15に示したとおりS103と同様である。ただし、深度バッファー56には第1の描画処理で記憶した衝突検出対象オブジェクトのデータが記憶されていることから、S205で取得されるのは衝突検出対象オブジェクトの深度値となる。よって、S206の判定は、描画対象である他のオブジェクトが衝突検出対象オブジェクトよりも手前側にあるか否かの判定となり、手前側にあるときだけS207及びS208の処理が行われることになる。このようにすることで、他のオブジェクトのうち、衝突検出対象オブジェクトの内側にある部分を描写する第2の描画処理が実行される。
以上の本実施形態では、衝突検出システムは図6に示したように、処理部10と、描画処理を行う描画部30と、視点を設定する視点設定部40を含む。視点設定部40は、衝突検出対象オブジェクトの外殻内面(内面)を見る視点を設定する。描画部30は、設定された視点から見たときの衝突検出対象オブジェクトを描画する第1の描画処理を行い、それとともに衝突検出対象オブジェクトの外殻内面のうち、第1の描画処理により描画された領域に対応する各ピクセルの深度値を生成する。さらに描画部30は、生成した深度値に基づいて、衝突検出対象オブジェクト以外の他のオブジェクトを描画する第2の描画処理を行う。処理部10は、第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトと他のオブジェクトの衝突判定を行う。
ここで、衝突検出対象オブジェクトとは、衝突を検出する対象となるオブジェクトのことであり、本実施形態の衝突判定は、当該衝突検出対象オブジェクトと他のオブジェクトとの衝突に関するものである。よって、他のオブジェクトが複数あった場合でも、他のオブジェクト同士の衝突は考慮しなくてよい。本実施形態での衝突検出対象オブジェクトは閉じた空間図形を想定しており、外殻内面とは閉じた空間図形の外殻外面の反対側の面を指すものとする。外殻とはオブジェクトの内部と外部の境界を表すものであり、衝突検出対象オブジェクトが球であるとすれば、外殻は球面に相当する。球の例で言えば、球には含まれない点(すなわち球の外部)に視点を設定することで外殻外面が観察されることになる。
本実施形態の手法では、外殻内面よりも手前側に他のオブジェクトが存在するか否かという判定を行うことで(つまり、外殻内面よりも内側に侵入しているオブジェクトがあるか否かによって)、衝突検出を行う。しかし、衝突検出対象オブジェクトの外殻外面と、他のオブジェクトが接触した時点で衝突は発生していることになる。このことに鑑みれば、外殻外面と外殻内面とで空間的な位置が異なることは望ましくない。つまり、外殻内面とは外殻外面と同じ位置に存在し、かつ観察方向のみが異なる面である。一例としては、外殻として厚みを持たない仮想的な面を設定すれば、オブジェクトの内部から当該外殻を観察した場合の面が外殻内面となる。逆に、外殻が厚みを持つのであれば、オブジェクト内部に視点を設定して外殻を観察したとしても、観察した面は外殻内面であるとは言えないことになる。つまり、実空間上の物体が厚みを持たないことは考えられない以上、本実施形態での外殻内面とは、実空間上で観察できるものではなく、仮想的な面である。
また、深度値とは所与の視点から見たときの深さ方向(奥行き方向)での距離に関する値であり、例えばオブジェクト空間に設定された座標系での座標値等であってもよい。なお、視点とは視点位置及び視線方向によって決定されるものが考えられる。視点位置とは当該視点が設定される空間位置を表し、例えば3次元座標値として表現される。視線方向は、例えば視点位置を起点として所与の方向を向くベクトルとして表現される。これは実空間において、カメラ等の撮像装置を用いて撮像を行うケースを考えれば、視点位置とは撮像装置が設置される空間位置に対応し、視線方向とは撮像装置の光軸方向に対応することになる。
これにより、衝突検出対象オブジェクトと他のオブジェクトの正確な衝突判定が可能になる。描画部30での描画処理として、衝突検出対象オブジェクトを描画する第1の描画処理と、他のオブジェクトを描画する第2の描画処理を行う。そして、第2の描画処理の際に、第1の描画処理時に取得した深度値、すなわち衝突検出対象オブジェクトに関する深度値を用いることで、衝突検出対象オブジェクトと所与の位置関係にある他のオブジェクトを描画することができる。例えば、深度値に基づいて、他のオブジェクトが衝突検出対象オブジェクトに比べて手前側(視点側)に位置する際に、当該他のオブジェクトを描画すればよい。上述したように、ここでの視点は衝突検出対象オブジェクトの内面を見るものであるから、衝突検出対象オブジェクトよりも手前側にある他のオブジェクトとは、衝突検出対象オブジェクトの内部に入り込んでいるオブジェクトに相当する。衝突検出対象オブジェクトが閉じた図形を想定している以上、他のオブジェクトは衝突検出対象オブジェクトの境界面(球で言えば球面)との衝突なしに内部に侵入することはできない。つまり、視点の設定及び深度値に関する処理を適切に行うことで、他のオブジェクトの描画状況に応じて衝突判定を行うことが可能になる。
また、処理部10は、第1の描画処理により生成された第1の画像と、第2の描画処理により生成された第2の画像との比較処理を行うことで、衝突判定を行ってもよい。
これにより、描画処理の結果生成された画像の比較処理により衝突判定を行うことが可能になる。例えば、第1の描画処理により生成される第1の画像とは図7(C)であり、衝突検出対象オブジェクトの内面を描画した画像となる。それに対して、第2の画像は他のオブジェクトが衝突検出対象オブジェクトと衝突しているか否かにより変化し、衝突がない場合には第1の画像と同様に図7(C)のようになる。しかし、衝突がある場合には衝突検出対象オブジェクトの内部に侵入した他のオブジェクトが描画されることになるため、図8(C)のように画像にも他のオブジェクトが現れる。つまり、一例としては第1の画像と第2の画像が一致すれば衝突なしと判定し、第1の画像と第2の画像に差異があれば衝突有りと判定すればよい。
また、描画部30は、第1の描画処理における衝突検出対象オブジェクトの描画、及び第2の描画処理における他のオブジェクトの描画を、設定された視点での透視投影で行ってもよい。
ここで、透視投影とは、三次元物体を平面上に表現する図法の1つであり、有限の距離に1つの視点を設定できるものである。言い換えれば、オブジェクトから視点までの線(視線)を複数考えた場合に、当該複数の視線が1つの視点に集まることになる。それに対して、他の図法である平行投影では、視線同士は平行であり1つの視点に集まらない。
これにより、透視投影による描画が可能になる。本実施形態の手法では、衝突検出対象オブジェクトの内部(内面上の点を含む)に視点を設定することを想定している(ただし外部に設定されることを妨げるものではない)。よって、視点位置は衝突検出対象オブジェクトに対して有限の距離に設定する透視投影を用いることにより、視点位置が無限遠点にあると考えることもできる平行投影に比べて、容易な衝突判定が可能になる。
また、視点設定部40は、衝突検出対象オブジェクトの外殻内面上又は内部(例えば外殻内面上又は内部のいずれかに設定される視点位置)に視点を設定してもよい。
これにより、オブジェクトの内部、少なくとも内面上に視点位置を持つように視点を設定することが可能になる。本実施形態の手法は、深度値判定を用いて衝突検出対象オブジェクトの内部に侵入した他のオブジェクトを描画することを想定している。つまり、描画する領域は衝突検出対象オブジェクトの内部となる。衝突検出対象オブジェクトの外部に視点を設定したとすると、当該視点の視点位置から視線方向を観察した場合、深度値の小さい位置(視点に近い位置)に1つめの内面(前面)が現れ、それよりも深度値が大きい位置に2つめの内面(背面)が現れる。そして、前面と背面の間の深度値範囲が、衝突検出対象オブジェクトの内部を表すことになる。よって、このような視点設定では、前面を表す深度値を記憶する前面用深度バッファーと、背面を表す深度値を記憶する背面用深度バッファーを用意した上で、他のオブジェクトの深度値と前面用深度バッファーの値の比較、及び他のオブジェクトの深度値と背面用深度バッファーの値の比較という2つの深度値比較処理を行わなくてはならない。このように外部に視点を設定することで、深度値生成処理及び深度値比較処理の処理負荷が増大することになるため、視点は衝突検出対象オブジェクトの内部又は内面上に設けることが望ましい。
また、視点設定部40は、衝突検出対象オブジェクトの内部又は内面上(例えば外殻内面上又は内部のいずれかに設定される第1〜第Nの視点位置)に、第1〜第Nの視点を設定してもよい。
これにより、視点は1つに限定されず、複数の視点を設定することが可能になる。本実施形態の視点は、衝突検出対象オブジェクトの内面を見るように設定され、設定された視点から衝突検出対象オブジェクトの内部を描画して侵入している他のオブジェクトを検出するものを想定している。つまり、検出対象オブジェクトの内部にあって、設定した視点から見ることができない(描画されない)領域が存在した場合、当該領域への他のオブジェクトの侵入は検出できず、従って衝突も検出できない可能性がある。よって、そのような領域は可能な限り少なくするべきであり、そのためには視点を複数設定することが効果的である。なお、視点の数を増やすのではなく、1つの視点から描画する領域を広くする(実空間での撮像装置で言えば、非常に大きい画角を持つ魚眼レンズ等の光学系を有する撮像装置を用いた撮像に対応する)アプローチにより、描画できない領域を減らしてもよい。
また、視点設定部40は、第1〜第Nの視点により、衝突検出対象オブジェクトの内面全てを見渡せるように、視点を設定してもよい。
ここで、第1〜第Nの視点の1つ1つの視点が、衝突検出対象オブジェクトの内面全てを見渡すことができる必要はない。第1〜第Nの視点の各視点は、衝突検出対象オブジェクトの内面の一部を見るものであり、各視点により描画できる領域を全てあわせることで内面全てをカバーできればよい。図10(D)の例であれば、内面全てとは参照点間の線分全て(12本)の集合で表されるところ、4つの視点の1つ1つはそれぞれ3本の線を描画できるに過ぎない。しかし、4つの視点をあわせることで12本の線全てを見渡せることになる。
これにより、衝突検出対象オブジェクトの内部の領域を不足なく描画することが可能になる。よって、死角等が生じないため衝突検出対象オブジェクトの内部に他のオブジェクトが侵入していれば、それを描画することができるため、正確な衝突検出ができる。
また、衝突検出システム(狭義には衝突検出システムに含まれる記憶部50)は、図6に示したように深度値を記憶する深度バッファー56を含んでもよい。
これにより、深度バッファー56に深度値を記憶しておくことが可能になる。第1の描画処理と第2の描画処理に基づく(狭義には第1の画像と第2の画像の比較処理という)容易な処理により衝突検出を行うため、衝突検出対象オブジェクトに対して所与の位置関係にある(狭義には内部に侵入している)他のオブジェクトを描画する必要がある。そのような位置関係の判定には深度値を用いればよく、深度バッファー56を用意することで、深度値の管理が容易になる。
また、処理部10は、衝突検出対象オブジェクトの変形処理を行ってもよい。視点設定部40は、変形処理後の衝突検出対象オブジェクトに対して視点を設定する。
これにより、衝突検出対象オブジェクトを変形することが可能になる。例えば、既存のロボットに対して部品の追加や設計変更が行われた場合に、外部からのオブジェクトデータの入力を待たずに変更後のロボットに対する衝突判定を行うために、変形処理を行ってもよい。また、あえて実空間での衝突検出対象オブジェクトの形状と乖離するような変形処理を行ってもよく、具体的には膨張処理や形状簡略化処理であってもよい。
また、処理部10は、変形処理後の衝突検出対象オブジェクトが、変形処理前の衝突検出対象オブジェクトを内包するような膨張処理を、上述の変形処理として行ってもよい。そして、視点設定部40は、膨張処理後の衝突検出対象オブジェクトに対して視点を設定する。
これにより、衝突だけではなく接近を判定することが可能になる。膨張処理の具体例としては図11が挙げられる。実線が膨張処理前の衝突検出対象オブジェクトであり、破線が膨張処理後の衝突検出対象オブジェクトである。膨張処理を行うことで、破線領域内部を見る視点が設定されるため、他のオブジェクトが破線内に侵入したか否かを検出することができる。よって、ある程度接近しすぎた場合には衝突が起こっていなくても、そのことを検出し、例えば警告等を発することが可能になる。本実施形態の衝突判定は、実機を動かす前の予測シミュレーションを想定しているため、衝突なしと判定された場合にも実機作業において衝突が生じる可能性がある。その際、膨張処理を行っておけばある程度のマージンを用意することになるため、シミュレーション通りに動かなかった場合にも、衝突の危険性を低くすることが可能になる。
また、処理部10は、変形処理後の衝突検出対象オブジェクトが、変形処理前の衝突検出対象オブジェクトに比べて簡略化された形状を持つような処理である形状簡略化処理を、上述の変形処理として行ってもよい。そして、視点設定部40は、形状簡略化処理後の衝突検出対象オブジェクトに対して視点を設定する。
ここで、形状簡略化処理とは、処理前のオブジェクトに比べて処理後のオブジェクトの形状が簡略化される処理のことであり、形状が簡略化されるとは、例えばオブジェクトを構成する頂点の数が減少する、オブジェクトを構成するポリゴン数が減少する、オブジェクトの凹凸が減少する等の変化を指すものとする。
これにより、衝突検出対象オブジェクトの形状を簡略化することが可能になる。形状簡略化処理の具体例は図12(A)、図12(B)に示したとおりである。図12(A)のように細かい凹凸がある場合、内面全てを見渡すために必要な視点数が多くなる可能性が高い。例えば、凹部があると、その凹部が障害物となり凹部の反対側を描画することができなくなる。また、凸部についてはその凸部を見渡す視点が限定される(例えば凸部の中に視点を設定したり、凸部に正対する位置に視点を設定する必要がある)ことになる。そのため、図12(B)のように凹凸を少なくする変形処理を行うことで、視点の設定を容易にするとよい。なお、形状簡略化処理後の衝突検出対象オブジェクトが、形状簡略化処理前の衝突検出対象オブジェクトを内包することが望ましい。内包しない領域があった場合、当該領域への他のオブジェクトの衝突を検出できなくなってしまうからである。ただし、当該領域(例えば凸部分)が非常に小さい等の理由で、その領域への衝突を考慮しなくてもよいのであれば、この限りではない。
また、処理部10は、形状簡略化処理として、処理後の衝突検出対象オブジェクトが円柱形状又は角柱形状となる処理を行ってもよい。そして、視点設定部40は、円柱形状又は角柱形状の上面に第1の視点を設定し、底面に第2の視点を設定する。
これにより、形状簡略化処理の具体例として、円柱形状又は角柱形状への変形処理を行うことが可能になる。例えば、衝突検出対象オブジェクトとしてロボットを考えた場合、当該ロボットを構成するパーツは図13(A)(図5のアーム320の一部)のように、棒状であることが多い。よって、図13(B)のように単純な円柱形状等で近似したとしても、大きな問題が生じないケースが考えられる。円柱形状又は角柱形状であれば、図13(B)に示したように、上面(具体的には面の中心等)に第1の視点を設定し、底面(具体的には面の中心等)に第2の視点を設定すれば、この2つの視点により内面全てを見渡すことが可能になる。そのため図9(A)〜図10(D)を用いて説明したような視点設定処理を行う必要がなく、また描画処理も2回で済むため処理負荷を軽減することができる。
また、衝突検出対象オブジェクトとは、ロボットをモデル化したオブジェクトであってもよい。
これにより、ロボットと他のオブジェクト(周辺構造物、周辺機器、他のロボット、作業者等)の衝突を判定することが可能になる。ロボット作業においては衝突が重大な影響を及ぼす可能性が高い。ロボット自体の故障はもちろんのこと、作業対象物体(例えば運搬中のワーク等)が落下することで周辺の装置に損傷を与える可能性もある。また、ワークの落下等が起これば、所定の手順が継続できず、初期化手順や復帰手順の実行が必要になることもあり、作業効率の著しい低下につながる。そのため、本実施形態の正確な衝突判定をロボットに対して適用することのメリットは大きい。
また、以上の本実施形態は、上述してきた衝突検出システムを含むロボットシステムにも適用できる。
これにより、図5に示したようなロボットシステムにおいて、本実施形態の手法を用いた衝突検出が可能になる。具体的には、衝突検出システムは図5の制御装置300に設けられ、制御装置300のハードウェアーやプログラムにより衝突検出システムが実現されることが考えられる。
また、以上の本実施形態は、処理部10と、描画処理を行う描画部30と、視点を設定する視点設定部40としてコンピューターを機能させるプログラムにも適用できる。視点設定部40は、衝突検出対象オブジェクトの内面を見る視点を設定する。描画部30は、設定された視点から見たときの衝突検出対象オブジェクトを描画する第1の描画処理を行い、それとともに深度値を生成する。さらに描画部30は、生成した深度値に基づいて、衝突検出対象オブジェクト以外の他のオブジェクトを描画する第2の描画処理を行う。処理部10は、第1の描画処理と第2の描画処理の結果に基づいて、衝突検出対象オブジェクトと他のオブジェクトの衝突判定を行う。
これにより、本実施形態の衝突検出処理を実行するプログラムを実現することができる。このプログラムは、例えば図4に示した情報記憶媒体90に記録される。ここで、情報記録媒体としては、DVDやCD等の光ディスク、光磁気ディスク、ハードディスク(HDD)、不揮発性メモリーやRAM等のメモリーなど、衝突検出システムによって読み取り可能な種々の記録媒体を想定できる。
5.変形例
以上では、描画部30における描画処理は、描画バッファー54に対して描画対象オブジェクトの色値を書き込むことで行われるものとしていたが、これに限定されない。例えば描画ピクセルカウンターを用いてもよい。描画ピクセルカウンターとは、例えば描画指示があった場合に値をインクリメントするようなカウンターであり、オブジェクトの実際の色値等は反映せず、描画指示が行われた回数を記憶するものである。
この場合の衝突検出システムの構成例を図16に示す。衝突検出システムは、視点設定部40と、ピクセル値入力部82と、処理部10と、描画部30と、記憶部50を含む。なお本実施形態の衝突検出システムの構成は図16の構成には限定されず、その一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。例えば、不図示の操作部70、外部I/F部80、情報記憶媒体90等を含んでもよい。
図6と比較した場合、視点設定部40は同様であるが、色値を反映させる必要がないため、ピクセル値入力部82から描画部30への出力は行われない点が異なる。また、画像の比較を行う必要もないため、処理部10の画像比較部150と、記憶部50の初期画像記憶部58がなくなっている。さらに、上述したように記憶部50の描画バッファー54がなくなり、描画ピクセルカウンター55が追加されている。描画部30は、色値更新部32ではなく、描画ピクセルカウンター更新部34から構成される。
色値を用いた描画処理ではなくカウンターの更新を行うものであるが、この場合も、視点設定処理は図9(A)等を用いて説明した例と同様である。また、描画処理が衝突検出対象オブジェクトに関する第1の描画処理と、他のオブジェクトに関する第2の描画処理からなる点も同様である。ただし、第1の描画処理において衝突検出対象オブジェクトの深度値を深度バッファー56に記憶するが、この処理は全てのピクセルについて行われるため、全ピクセルについて描画ピクセルカウンターのインクリメントが行われる。なお、当該インクリメント処理に特に意味はなく、第1の描画処理では描画ピクセルカウンターの更新処理は行わなくてもよい。
第2の描画処理の際の深度値比較処理についても、上述の例からの変更はない。ただし、深度値比較処理の結果、描画対象オブジェクトが衝突検出対象オブジェクトよりも手前側にある場合には、描画バッファー54の更新ではなく、描画ピクセルカウンターの更新が行われることになる。
つまり、衝突がない場合には、第2の描画処理終了後の描画ピクセルカウンターは、第1の描画処理終了後の値と変化がない(例えば初期値のまま)であるが、衝突がある場合には、衝突したオブジェクトが観察された位置に対応するピクセルのカウンター値が変化(増加)していることになる。よって、この変形例では描画ピクセルカウンターの値の変化の有無により衝突を検出する。
詳細な処理例について図17、図18のフローチャートを用いて説明する。図17が全体の処理であり、S301,S302については図14のS101,S102と同様である。S303はS103と同様であるが、描画の内容が色値の更新ではなく、描画ピクセルカウンターの更新となる。そして、更新された描画ピクセルカウンターの値を記憶する(S304)。S305も同様であり、S105とは描写処理が描画ピクセルカウンター値の更新処理である点が異なる。そして、衝突を検出したか否かの判定は、描画ピクセルカウンター値が増加したかの判定により行う(S306)。
また、S303及びS305で行われる図18の描画処理についても、S402の初期化対象が描画ピクセルカウンターである点、S407の更新処理が描画ピクセルカウンターのインクリメントである点、全ピクセルの描画後に描画ピクセルカウンターの値を返す点(S409)が異なるが、その他は図15のS201〜S208と同様である。
以上の変形例では、衝突検出システムの処理部10は、第1の描画処理での描画ピクセル数情報と、第2の描画処理での描画ピクセル数情報との比較処理を行うことで、衝突判定を行う。
ここで、描画ピクセル数情報とは、具体的には描画ピクセルカウンターのカウンター値であってもよい。
これにより、描画ピクセル数情報に基づいて衝突判定を行うことが可能になる。本実施形態での衝突判定は、衝突検出対象オブジェクトの内部に他のオブジェクトが侵入しているか否かを判定できればよく、侵入している他のオブジェクトの色値等は取得しなくてもよい。深度値を用いた処理により、他のオブジェクトが侵入しているときに描画処理を行い、侵入していなければ描画処理を行わないように設定しておけば、描画処理の有無を検出できればよいため、描画処理の回数に対応したカウンターを用いれば十分である。
なお、上記のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また本実施形態及び変形例の全ての組み合わせも、本発明の範囲に含まれる。また衝突検出システム、ロボットシステムの構成・動作や、深度マップ情報の設定手法、衝突検出対象オブジェクトの描画手法、衝突検出対象オブジェクトの衝突判定手法等も、本実施形態で説明したものに限定されず、種々の変形実施が可能である。