(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
(第1の実施形態)
以下、添付図面を参照して、本発明を適用した好適な実施例に従って詳細に説明する。
【0009】
図7は、本実施例を実現するためのハードウェアを示すブロック図である。
【0010】
図7は、本実施形態における情報装置100のハードウェア構成図である。同図において、CPU710は、バス700を介して接続する各デバイスを統括的に制御する。CPU710は、読み出し専用メモリ(ROM)720に記憶された処理ステップやプログラムを読み出して実行する。オペレーティングシステム(OS)をはじめ、本実施形態に係る各処理プログラム、デバイスドライバ等はROM720に記憶されており、ランダムアクセスメモリ(RAM)730に一時記憶され、CPU710によって適宜実行される。また、入力I/F740は、外部の装置(撮像装置や操作装置など)から情報処理装置101で処理可能な形式で入力信号として入力する。また、出力I/F750は、外部の装置(例えばHMDなどの表示装置)へ処理可能な形式で出力信号として出力する。
【0011】
図1は本実施形態における情報処理装置の機能構成を示すブロック図である。
【0012】
本実施形態における情報処理装置100は、HMD301に接続されている。情報処理装置100は、HMD301内の撮像部107から取り込んだ現実空間の画像と仮想空間の画像とを合成し、複合現実感映像としてHMD301内の表示部110に出力する。
【0013】
撮像部107は、現実空間を撮影し、撮像した画像を情報処理装置100に取り込む。撮影された画像は、合成部109にて仮想物体の画像と合成して表示部110に合成画像として表示する。本実施形態では、撮像部107は、ヘッドマウンテッドディスプレイ301(以下、HMDと称する)に内蔵されているものとする。
【0014】
表示部110は、合成部109で描画した合成画像を体験者に提示する。本実施形態では、HMD301に内蔵されたディスプレイを用いる。
【0015】
振動提示部113は、干渉情報通知部112から干渉しているという出力を受けて、体験者(ユーザ)の触覚に干渉したことを知らせる振動を提示する。本実施形態では、振動提示部113としては、偏心おもりを先端に取り付けたモーターを回転させるデバイスを用い、該デバイスを体験者の身体の一部に備えつけておく。しかしながら本発明はこれに限られるものではなく、例えば、指先に設置した電極に微弱な電流を流すなど、触覚を刺激する方法であれば適用可能である。
【0016】
音提示部115は、干渉情報通知部112から干渉しているという出力を受けて、体験者の聴覚に干渉したことを知らせる音を提示する。本実施形態では、情報処理装置100とは別体のスピーカを用いるものとする。例えば、HMD301にヘッドホンを内蔵させて、該ヘッドホンを用いて音を提示してもよい。また、据え置き型のスピーカを利用しても良い。また、情報処理装置100にスピーカを内蔵しても良い。音の種類は、体験者の聴覚を刺激できるものであればどのような音でもよい。たとえば、所定の波長のビープ音でもよい。
【0017】
情報処理装置100は、仮想物体データベース101、干渉判定部103、仮想物体描画部104、干渉部位算出部105、位置姿勢取得部108、合成部109、干渉情報保持部111、干渉情報通知部112、を備える。
【0018】
これらの各機能部は、CPU710が、ROM720に格納されたプログラムをRAM730に展開し、後述する各フローチャートに従った処理を実行することで実現されている。また例えば、CPU710を用いたソフトウェア処理の代替としてハードウェアを構成する場合には、ここで説明する各機能部の処理に対応させた演算部や回路を構成すればよい。
【0019】
仮想物体データベース101は、仮想物体のモデルを保持するデータベースである。仮想物体のモデルは、例えば形状、表示色、初期位置姿勢を含んでいる。本実施形態では、
図2(a)に示すような円柱と直方体の2つの形状の仮想物体201、202を例に説明する。
【0020】
位置姿勢取得部108は、撮像部107から取り込んだ画像(画像取得)に基づいて、現実空間の撮像部107の位置姿勢(即ち、HMD301の位置姿勢)と仮想物体の位置姿勢を推定する。本実施形態では、撮像部107の位置姿勢を体験者の視点位置姿勢とする。撮像部107の位置姿勢の算出は、現実空間に配置されたマーカを撮像した画像に基づいて行われる(撮像部位置姿勢計測)。また、仮想物体の位置姿勢は、例えば、仮想物体に対応する現実物を予め現実空間に配置する。そして、現実物にマーカを貼りつけておき、該マーカを撮像した画像に基づいて現実物の位置姿勢位置姿勢を推定し、該推定された現実物の位置姿勢を該現実物に対応する仮想物体の位置姿勢として推定する。そして、体験者が現実物を動かすことによって、仮想物体の位置姿勢を変更することができる。ただし、本発明では体験者の視点位置姿勢や仮想物体の位置姿勢を取得する方法はこれに限定されない。例えば、現実物に三次元センサを貼りつけまたは内蔵させても用いてもよいし、市販のモーションキャプチャシステムを利用して撮像装置107に対する仮想物体の位置姿勢を計測することも可能である。また、仮想物体に対応する現実物を用意しなくても、予め設定された位置に仮想物を表示し、コントローラ等を用いて仮想物体を移動させてもよい。
【0021】
干渉判定部103は、仮想物体の位置姿勢および形状に基づいて、複数の仮想物体同士の干渉の有無を判定する。2つの仮想物体同士の干渉判定は、以下の手順で実現する。まず、それぞれの仮想物体から三角形ポリゴンを一つずつ取り出し、その三角形ポリゴン同士が交差しているかどうかを判定する。これを全ての三角形ポリゴンの組み合わせに対して行い、一つでも交差している場合は仮想物体同士が干渉していると判定する。さらに、この処理を全ての仮想物体の組み合わせに対して行う。ただし、本発明における干渉判定部103の実現方法はこれに限るものではない。
【0022】
干渉部位算出部105は、干渉判定部103で干渉していると判定された仮想物体から、干渉部位を算出する。本実施形態では交差している三角形ポリゴンの集合と、交線の集合とを干渉部位(即ち、干渉した部位の輪郭)として算出する。すなわち、ただし、本発明における干渉部位の表現方法はこれに限るものではない。
【0023】
干渉情報保持部111は、干渉部位算出部105で算出された干渉情報を保持する(干渉情報記録)。干渉情報の一例を
図8に示す。
【0024】
フレーム番号は、撮像装置107が撮像した画像が更新されるたびに1個カウントアップされる番号である。
【0025】
干渉対象物は、干渉している仮想物体を特定するモデルの識別情報である。本実施形態では、仮想物体の名称を登録している。時刻は、実際に干渉が発生したと判定した時刻である。
【0026】
頂点数は、干渉している仮想物体201と仮想物体202が干渉しているポリゴンの交線の端点の数である。
【0027】
頂点位置は、交線の端点のすべての3次元位置である。この頂点位置を線分として描画すると、
図2(b)において仮想物体201と202の干渉部位を表わす円の線203となる。
【0028】
色と線幅は、干渉情報を仮想物体の画像として描画する場合に使用する描画属性である。なお、描画属性である色と線幅は、干渉したときに生成されることに限定されるものではなく、事前にパラメータを設定しておけばよい。
【0029】
図8で示す表はフレーム番号ごとに1つのデータセットとして履歴が保持される。なお、本発明は、干渉情報をフレーム番号でデータセットとして区分することに限定されるものではなく、時刻をキーにしてデータセットを作ってもよい。また、干渉対象物の2つの仮想物体の組み合わせごとにデータセットを作ってもよい。
【0030】
仮想物体描画部104は、干渉情報と仮想物体201、202を描画した画像を生成する。より具体的には、仮想物体データベースに保存されたモデルデータや干渉情報保持部111に保存された干渉情報に基づいて画像を生成する。
【0031】
まず、仮想空間の画像を生成するための仮想視点の位置姿勢を位置姿勢取得部108から取得する。仮想視点の位置姿勢は、例えば、基準とする世界座標系における撮像部107の位置姿勢情報を入力すればよい。また、仮想物体201と202および干渉情報の3次元頂点位置は、位置姿勢取得部108で取得された位置姿勢に基づいて更新する。更新した仮想物体と干渉情報の3次元頂点は、仮想視点に基づいて設定された投影面に投影される。投影後のポリゴン・線分の描画処理は、一般的な3次元画像生成における描画処理と同じであるため詳細な説明は省略する。本実施形態における、仮想物描画部104で生成された仮想空間の画像を
図2(c)に示している。仮想物体201、202およびこれまで蓄積された干渉情報に基づく干渉部位206が描画される(干渉情報画像生成)。本実施形態では、干渉部位の輪郭を描画しているが、輪郭の内部についても特定色を重畳する等して判別しやすくしてもよい。
【0032】
合成部109は、撮像装置107から取り込んだ現実空間の画像と、仮想物体描画部104で描画された仮想空間の画像とを合成する。合成処理は、実写画像の上に仮想空間の画像を撮像装置107の現実空間の画像の上に描画することにより。すなわち、仮想物体201、202の領域以外の画素は、現実空間画像の画素が表示される合成画像となる。
【0033】
干渉情報通知部112は、干渉情報保持部111の情報に基づいて、現時点における干渉状態を他の通知手段に通知する。本実施形態では、仮想物体描画部104で仮想物体201、202と干渉情報を視覚的に表示することによって干渉しているか否かを明示的に体験者に提示している。しかし、視覚的な表示のみでは、干渉している場所が撮像装置107の視野外である場合は、干渉していることを体験者が知覚できない。干渉しているか否かを聴覚と触覚で提示すると、視野外で起こった干渉を体験者が知覚することができる。
【0034】
図2は本実施形態における仮想空間の画像の例を示した模式図である。また、
図4は、本実施形態の処理の詳細を示すフローチャートである。
【0035】
図2および
図4を用いて、仮想物体201、202が配置されている状況を例に本実施形態の処理の詳細を説明する。
【0036】
ステップS801では、仮想物体描画部104は、仮想物体データベース101から仮想物体201、202のデータを読み込む。
【0037】
ステップS802では、位置姿勢取得部108は、撮像部107で撮影された現実空間の画像を取得する。そして、位置姿勢取得部108は、取得した画像に基づいて撮像部107の位置姿勢情報を算出する。ステップS802以降の処理は、撮像部107から現実空間の画像が更新されるまで処理が一時停止され、更新があった場合に後段の処理を実行する。ただし、本実施形態は、撮像部107の画像更新ごとに処理をすることに限定されるものではなく、例えば、位置姿勢取得部108で新たな位置姿勢が取得されたタイミングで処理を実行する方法でも適用可能である。
【0038】
ステップS803は、位置姿勢取得部102は、位置姿勢情報を干渉判定部103と仮想物体描画部104に送出する。
【0039】
ステップS806は、干渉判定部103は、RAM702に格納されている仮想物体201、202を参照し、仮想物体201、202を構成するポリゴンごとに交差しているかどうか判定する。
【0040】
図2(b)は、体験者が仮想物体202に対応するマーカを移動させ、仮想物体201と仮想物体202が干渉した状況を示している。
図2(a)の状態のときは、ステップS811に処理を移し、
図2(b)の状態のときにS809に処理を移す。
【0041】
ステップS809では、干渉部位算出部105が、仮想物体の干渉部位の情報を計算する。
【0042】
例えば、本実施形態に置いては、
図2(b)において、円柱の仮想物体202を移動して直方体の仮想物体201に干渉させた場合、干渉部位の情報として各ポリゴンの交線の集合として干渉部位203が生成される。
【0043】
ステップS810では、干渉情報保持部111が、仮想物体の組み合わせごとに干渉情報のデータセットを記録する。本実施形態においては、
図8に示すような干渉情報を記録する。さらに、このデータセットの記録は、撮像部107で撮影された画像が更新されるたびに実行される。すなわち、
図8に示す干渉情報は、仮想物体の組み合わせのデータセットに加えて、撮像部107で画像が更新される度にデータセットが蓄積されるものとする。ステップS810の処理の詳細は後述する。
【0044】
ステップS811では、仮想物体描画部104が仮想物体と干渉部位を仮想空間の画像として描画する。本実施形態においては、仮想物体201、202は、三角形ポリゴンの情報に基づいて描画される。また、干渉部位は、干渉情報に基づいて2頂点が1つの線分として描画される。また、描画時の線分の色や線幅については、干渉情報を参照して描画される。
【0045】
図2(c)が仮想物体201、202と干渉部位206を描画した結果を示している。干渉部位206には、過去に蓄積した干渉部位の情報も含まれるため、円柱の仮想物体202をどのように動かして干渉させたかが、タスクのあとで確認できる。
【0046】
ステップS812では、合成部109は、撮像部107が撮像した現実空間の画像と、仮想空間の画像とを合成して合成画像を生成する。
【0047】
ステップS813では、まず表示部110は、合成部109で合成された合成画像を表示し、HMD301を装着する体験者に提示する。さらに、振動提示部113と音提示部115は、干渉情報通知部112の情報にしたがって体験者に振動および音を提示する。
【0048】
ステップS815では、体験者から終了コマンドがキーボードなどの入力装置で送信されたかどうかを判定し、終了コマンドがなければステップS802に処理を移し、終了判定された場合は処理を終了する。
【0049】
図5は、ステップS810の干渉情報を記録する処理の詳細を示すフローチャートである。
【0050】
図2(c)のように過去の干渉部位を重ねて表示すると、干渉部位の強調表示が蓄積されて描画性能が低下したり、不要に強調表示されて見難くなるという課題がある。この課題に対して、本実施形態では、あらかじめ体験者が設定した干渉部位のデータセットの個数の閾値を超えた場合は、一番古い干渉部位のデータセットから消去(削除)していく方法で対応する。
図5のフローチャートで詳細を説明する。
【0051】
ステップS901では、干渉情報保持部111は、過去の干渉情報を参照し、データセット数を集計する。集計したデータセット(過去データセット)数が、予め体験者が設定した閾値を超えた場合は、ステップS905に処理を移す。閾値を超えない場合はステップS910に処理を移す。
【0052】
ステップS905では、干渉情報保持部111は、過去の干渉情報のうち、時刻が一番古いデータセットを検索して消去する。なお、本発明は時刻が一番古いデータセットを消去することに限定されるものではなく、所定の時刻以前のデータセットをすべて消去したり、頂点数の多いデータセットを優先して消去してもよい。
【0053】
ステップS910では、干渉情報保持部111が干渉部位算出部105で算出した現在の干渉情報を新たなデータセットとして追加する。
【0054】
以上の処理により、仮想物体201と202が干渉した結果を、過去の干渉部位の情報として現在の視点における仮想空間の画像上で強調表示することにより、タスクを完了したあとに干渉の状況を再確認することができる。さらに、一定のデータセット数を超えないように閾値を設けることで、表示負荷の軽減や干渉部位を見やすく表示することができるようになる。
【0055】
上記第1の実施形態では、一定のデータセット数を超えないように閾値を設け、超える場合にはメモリから削除する例を示した。しかしながら、メモリから削除は行わずに、表示する画像は含めないようにしてもよい。
【0056】
(変形例1)
第1の実施形態では、干渉部位として、仮想物体201と202との干渉部位の表現方法として、ポリゴンの交線を繋いで干渉部位206を表現していた。しかし本発明は干渉しているポリゴンの交線を繋いで表示することに限定されるものではなく、別の表現で干渉部位を表現してもよい。
【0057】
本変形例においては、
図3に示すように、干渉部位206の表現として仮想物体の形状そのものを干渉した場所に留めて表示する方法を示す。
図3は体験者がHMD301を装着して仮想物体の工具305を仮想物体のドア310に対して近づけるタスクを行う作業を表わした模式図である。
【0058】
本変形例を実現するための構成は、第1の実施形態の干渉情報保持部111の処理を変更すればよい。
【0059】
第1の実施形態では干渉情報保持部111は、干渉情報のデータセットの頂点位置として干渉したポリゴンの交線を記録していた。しかし、本変形例では頂点位置として、体験者301が手で動かす仮想物体305の形状を表わすポリゴン情報を記録する。しかし、撮像装置107で撮影する画像が更新されるごとにデータセットを記録し、すべての干渉部位206をドア310上に表示すると、数が多すぎて表示が煩雑になる。本変形例では、表示が煩雑にならないように、データセットの重心位置に基づいて表示を制約する方法を
図9のフローチャートを用いて示す。
【0060】
なお、本発明は仮想物体を表わす形状として三角形ポリゴンに限定されるものではなく、例えばモデルデータをパラメトリックに表現する方法でも適用可能である。
【0061】
図9のフローチャートは、本変形例における
図4のステップS810の処理の詳細を示している。以下、第1の実施形態との差分のみを説明する。
【0062】
ステップS925では、干渉情報保持部111が、干渉部位算出部105で算出した干渉情報のうち、頂点位置の3次元位置の平均を算出して重心位置とする。データセットに関連付けて記憶する。
【0063】
ステップS930では、干渉情報保持部111が、過去の干渉情報に対応付けられた重心位置群を参照し、干渉情報保持部111で算出した重心位置と比較する。干渉情報保持部111で算出した重心位置と、過去の重心位置群とを比較して、過去の重心位置群のうち少なくとも1つの重心位置との距離が予め設定した閾値を下回る場合は、干渉情報として追加せずに処理を終了する。すなわち、現在の位置姿勢における工具305がドア310に干渉した場合、過去の干渉情報で重心位置が近いものがあると追加しないようにする。一方、距離の閾値を上回っている場合は、干渉情報としてデータセットを追加する。
【0064】
以上のように本変形例における干渉表示方法では、干渉部位をよりわかりやすい表現に置き換えることでタスク後の干渉状況の確認を補助することができる。
【0065】
上記変形例1では、干渉が発生した位置に近い場合は、現在の干渉部位の情報をデータセットに追加しなかったが、データセットには追加し、表示する画像には含めないようにしてもよい。
【0066】
(変形例2)
変形例1では、干渉が発生したときの仮想物体の重心位置が、過去の干渉情報において、干渉が発生した位置に近い場合は、現在の干渉部位の情報をデータセットに追加しなかった。しかし、本発明は、干渉部位の空間中の位置に基づいて干渉情報を記録するか否かを判断することに限定されるものではない。
【0067】
本変形例では、位置姿勢取得部108から出力される位置姿勢の信頼度に応じて、干渉情報を記録するか否かを判定する処理について説明する。
【0068】
撮像画像に映るマーカで仮想物体の位置姿勢を決定する場合において、以下のような状態で位置姿勢計測結果の信頼性が低下する。
(1)マーカが画面上で小さく写っている場合
(2)撮像装置107とマーカの間に遮蔽物が入ってマーカが隠される場合
(3)マーカが撮像装置107の視野外で写らない場合
また、仮想物体の位置姿勢を位置姿勢センサーにより計測する場合であっても、環境ノイズや計測範囲外になるなど、信頼性が低下する状況が考えられる。
【0069】
上記のように位置姿勢の計測の信頼性が低下した状態で干渉情報を追加しても、タスク後の確認で過去の干渉状況を正しく判断できないため、干渉情報を記録しないようにする方法を示す。
【0070】
本変形例を実現するための構成は、変形例1の位置姿勢取得部108から干渉情報保持部111に位置姿勢の信頼度の情報を入力するようにし、干渉情報保持部111の処理で信頼度に応じて干渉情報の記録を判断すればよい。
【0071】
位置姿勢取得部108は、例えば
図4のステップS803の位置姿勢更新の処理において、現在の位置姿勢計測結果の信頼度を保存すればよい。信頼度は、例えば、マーカが認識されていれば1、認識されていなければ0、マーカ領域が撮像装置画像上を占める割合が10%を下回った場合は0.5と定義する。
【0072】
干渉情報保持部111の処理の詳細を
図6に示す。なお、変形例1と同じ番号の処理については説明を省略する。
【0073】
ステップS915では、干渉情報保持部111は、位置合わせ信頼度を取得し(導出)、信頼度が閾値以下の場合はステップS920に処理を移す。信頼度が閾値以上であれば、ステップS910に処理を移す。
【0074】
ステップS920では、干渉情報保持部111は、仮想物体描画部104に対して、現在位置合わせ信頼度が低いために干渉情報を記録しなかったことを伝えるメッセージを表示するように指示する。
【0075】
仮想物体描画部104は、ステップS811の仮想物体の描画処理に置いて、仮想物体画像よりも前に、メッセージ250を表示するように変更すればよい。仮想物体描画部104がメッセージ250を表示した画像の模式図を
図10に示す。
【0076】
以上のように本変形例における干渉表示方法では、位置合わせの計測時の信頼度が低い場合は干渉部位記録しないことで正しくない干渉情報を除去し、タスク後の干渉状況の確認を補助することができる。
【0077】
(変形例3)
第1の実施形態では、仮想物体201と202を円柱と直方体で表現し、仮想物体の位置姿勢をマーカの位置姿勢に割り当てて、体験者が意図的に手で移動させるようにしていた。
【0078】
しかし、本発明は仮想物体を手で移動させることに限定されるものではなく、体験者の身体の部位の位置姿勢を計測し、その位置姿勢を仮想物体に割り当てる方法でも適用可能である。
【0079】
例えば、変形例1のドア310に工具305を使って作業をするような状況で、体験者の肘や膝などを位置姿勢センサーで計測して、作業中に工具305だけではなく、体験者の身体の一部が干渉したこと検知して提示してもよい。
【0080】
本変形例を実現する構成は、位置姿勢取得部108が体験者の膝などの身体の一部の位置姿勢を入力し、干渉判定部103と仮想物体描画部104に出力すればよい。また、仮想物体データベース101には、体験者の身体の部位の形状に応じたモデルデータをあらかじめ記録しておき、干渉判定部103や仮想物体描画部104に出力すればよい。
【0081】
以上のように、本変形例では、体験者が意図的に手で動かした仮想物体の干渉状況を確認するだけではなく、作業中に意図せずに当たってしまった人体の部位の干渉状況も確認することができる。
【0082】
(変形例4)
第1の実施形態では、過去の干渉部位を表わす線分の頂点を
図8に示すような頂点位置で保持していた。しかし、本発明は、過去の干渉部位を頂点位置として保持することに限定されるものではなく、干渉が発生した時点で、過去の干渉部位を計算で求めてもよい。
【0083】
本変形例を実現するためには、
図8の干渉情報に仮想物体201、202のポリゴン情報と位置姿勢を追加し、仮想空間の画像を生成するたびに過去の干渉情報のデータセットからポリゴンの交線の端点を算出してもよい。
【0084】
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。