(57)【要約】【課題】  現実空間の映像を取得するタイミングと、位置姿勢情報を取得するタイミングとの同期を取るための技術を提供すること。【解決手段】  入力した位置姿勢情報に基づいて手持ちセンサ５０００の移動量が極小となるタイミングを検知し、現実空間の映像に基づいて、手持ちセンサ５０００の移動量が極小となるタイミングを検知し、それぞれのタイミングとに基づいて、現実空間の映像の取得タイミングと位置姿勢情報の取得タイミングとのずれを求める。【選択図】  図７
2007004714.tif 000002
【特許請求の範囲】
【請求項１】
指示具の位置姿勢情報を連続して入力する第１の入力工程と、
前記指示具を含む現実空間の映像を連続して入力する第２の入力工程と、
前記第１の入力工程で入力した位置姿勢情報に基づいて、前記指示具の移動量が極小となるタイミングを検知する第１の検知工程と、
前記第２の入力工程で入力した映像に基づいて、前記指示具の移動量が極小となるタイミングを検知する第２の検知工程と、
前記第１の検知工程で検知したタイミングと前記第２の検知工程で検知したタイミングとに基づいて、前記現実空間の映像の取得タイミングと前記位置姿勢情報の取得タイミングとのずれを求める計算工程と、
前記計算工程で求めた前記ずれを出力する第１の出力工程と
を備えることを特徴とする情報処理方法。
【請求項２】
前記第１の検知工程では、前記第１の入力工程で入力した位置姿勢情報の変化に基づいて、前記指示具の移動量が極小となるタイミングを検知することを特徴とする請求項１に記載の情報処理方法。
【請求項３】
前記第２の検知工程では、前記指示具に取り付けられた所定の色を有するマーカの、前記第２の入力工程で入力した映像上における位置の変化に基づいて、前記指示具の移動量が極小となるタイミングを検知することを特徴とする請求項１に記載の情報処理方法。
【請求項４】
前記計算工程は、
前記第１の検知工程で検知したタイミングを古い順に並べるとts0, ts1, …., ts(n-1), ts(n)であるとし、前記第２の検知工程で検知したタイミングを古い順に並べるとtv0, tv1, …., tv(n-1), tv(n)であるとした場合に、
ts0〜ts(n)の中からtv(n-1)＜ts(k)＜tv(n)を満たすts(k)を探す工程と、
｜tv(n-1) - ts(k)｜と、｜tv(n) - ts(k)｜とを比較する工程と、
｜tv(n-1) - ts(k)｜の方が大きい場合には、tv(n) - ts(k)を前記ずれとして求める工程と、
｜tv(n) - ts(k)｜の方が大きいか等しい場合には、tv(n-1) - ts(k)を前記ずれとして求める工程と
を備えることを特徴とする請求項１乃至３の何れか１項に記載の情報処理方法。
【請求項５】
更に、
現実空間の映像を入力する第３の入力工程と、
ユーザの視点の位置姿勢情報を入力する第４の入力工程と、
前記第３の入力工程で映像を入力した時点から、前記計算工程で求めた前記ずれの分だけ前の時間に前記第４の入力工程で入力した位置姿勢情報に基づく視点から見える仮想空間の映像を生成する生成工程と、
前記生成工程で生成した映像を前記第３の入力工程で入力した映像上に重畳させてから出力する第２の出力工程と
を備えることを特徴とする請求項１乃至４の何れか１項に記載の情報処理方法。
【請求項６】
更に、
現実空間の映像を入力する第３の入力工程と、
ユーザの視点の位置姿勢情報を入力する第４の入力工程と、
前記第４の入力工程で入力した位置姿勢情報に基づく視点から見える仮想空間の映像を生成する生成工程と、
前記第４の入力工程で位置姿勢情報を入力した時点から前記計算工程で求めた前記ずれの分だけ前の時間に前記第３の入力工程で入力した映像上に、前記生成工程で生成した映像を重畳させてから出力する第２の出力工程と
を備えることを特徴とする請求項１乃至４の何れか１項に記載の情報処理方法。
【請求項７】
第１の状態、第２の状態の何れかの状態を取るように制御可能なデバイスを制御する制御工程と、
前記制御工程における制御に従って前記デバイスが第１の状態となったタイミングを検知する第１の検知工程と、
指示具を含む現実空間の映像に基づいて、前記デバイスが第１の状態となったタイミングを検知する第２の検知工程と、
前記第１の検知工程で検知したタイミングと、前記第２の検知工程で検知したタイミングとの差分を出力するの出力工程と
を備えることを特徴とする情報処理方法。
【請求項８】
指示具の位置姿勢情報を連続して入力する第１の入力手段と、
前記指示具を含む現実空間の映像を連続して入力する第２の入力手段と、
前記第１の入力手段が入力した位置姿勢情報に基づいて、前記指示具の移動量が極小となるタイミングを検知する第１の検知手段と、
前記第２の入力手段が入力した映像に基づいて、前記指示具の移動量が極小となるタイミングを検知する第２の検知手段と、
前記第１の検知手段が検知したタイミングと前記第２の検知手段が検知したタイミングとに基づいて、前記現実空間の映像の取得タイミングと前記位置姿勢情報の取得タイミングとのずれを求める計算手段と、
前記計算手段で求めた前記ずれを出力する第１の出力手段と
を備えることを特徴とする情報処理装置。
【請求項９】
第１の状態、第２の状態の何れかの状態を取るように制御可能なデバイスを制御する制御手段と、
前記制御手段による制御に従って前記デバイスが第１の状態となったタイミングを検知する第１の検知手段と、
指示具を含む現実空間の映像に基づいて、前記デバイスが第１の状態となったタイミングを検知する第２の検知手段と、
前記第１の検知手段が検知したタイミングと、前記第２の検知手段が検知したタイミングとの差分を出力するの出力手段と
を備えることを特徴とする情報処理装置。
【請求項１０】
コンピュータに請求項１乃至７の何れか１項に記載の情報処理方法を実行させることを特徴とするプログラム。
【請求項１１】
請求項１０に記載のプログラムを格納することを特徴とする、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、現実空間と仮想空間とを合成した複合現実空間の画像を提供するための技術に関するものである。
【背景技術】
【０００２】
ＭＲ、ＡＲ技術は実写映像とＣＧ（Ｃｏｍｐｕｔｅｒ  Ｇｒａｐｈｉｃｓ）とを合成し、仮想のＣＧ物体が利用者の前に存在するかのように見せる為の技術である。
【０００３】
ＭＲ技術の典型的なアプリケーションでは、利用者はビデオシースルー型のＨＭＤを装着する。ＨＭＤ内のディスプレイには、ＨＭＤの前面のカメラからの映像と、計算機が作成したＣＧ映像が合成される。ＣＧ映像は、位置センサにより測定した利用者の視点の位置姿勢に応じて描かれるため、利用者にはあたかも現実空間に仮想のＣＧが存在するかのように見える。
【０００４】
実際のＭＲ技術の応用としては、図１に示すような工業デザインの検証が挙げられる。図１は、ＣＡＤモデル（プリンタのトナーカートリッジのＣＡＤモデル）１００を上記ＣＧ物体として表示し、ＣＡＤモデルのプレビューに使用している様子を示す図である。このとき、上述の通り、このＣＡＤモデルをプレビューする利用者は、自身の頭部に上記ＨＭＤ（Head Mount Display）を装着する必要がある。
【０００５】
図２は、ＨＭＤの構成を示す図である。
【０００６】
同図に示すＨＭＤはビデオシースルー方式のＨＭＤである。ＨＭＤは、右目カメラ１１１０、左目カメラ１１１１、ＨＭＤ内蔵位置センサ１１２０、右目ＬＣＤ１１３０、左目ＬＣＤ１１３１からなる。
【０００７】
利用者はＨＭＤを自身の頭部に装着してＣＡＤモデルをプレビューする。このとき、図３に示す如く、ＨＭＤ内の各ＬＣＤ１１３０、１１３１には、各カメラ１１１０、１１１１で撮影された実写映像と、ＣＧ画像として描かれたＣＡＤモデル３００が合成されて表示される。
【０００８】
図４は、ＭＲ技術を使用したＣＡＤビューワの機器構成を示す図である。ＨＭＤ１１００に備わっているカメラにより撮影された実写映像は計算機１３００にキャプチャされ、内部でＣＡＤモデルのＣＧと合成される。ＣＡＤモデルは手持ちセンサ５０００の位置に手持ちセンサ５０００の姿勢でもって配置される。手持ちセンサ５０００の位置姿勢はセンサ装置１２００，１２１０により計測される。合成した画像は映像信号としてＨＭＤ１１００に送られる。
【０００９】
実写映像の上にＣＡＤモデルが合成されることで、利用者にはあたかもＣＡＤモデルがその場にあるかのように観測される。
【特許文献１】特開２００２−２７１６９３号公報
【特許文献２】特開２００３−３０３３５６号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら先に示したシステムでは、取り込んだ実写映像とＣＡＤモデルとが完全に一致しないという問題があった。
【００１１】
図５は、手持ちセンサ５０００とＣＡＤモデル４０００との位置姿勢関係を示す図である。同図に示す如く、手持ちセンサ５０００が静止しているときには手持ちセンサ５０００上にＣＡＤモデル４０００が表示されていても、手持ちセンサ５０００を移動させると手持ちセンサ５０００の動きに遅れてＣＡＤモデル４０００が動くといった症状が観測される。
【００１２】
これは実写画像のキャプチャ時刻と位置情報の測定時刻が異なることが原因である。図５の場合には、実写画像のキャプチャ時刻の方が位置情報の測定時刻より早い場合である。言い換えると実写画像のキャプチャに時間がかかり、位置センサに比べてキャプチャが遅れている状況である。
【００１３】
実写映像の場合には、ＨＭＤ１１００からの映像は計算機１３００内のビデオキャプチャカード内で１フレーム分バッファされるので１/３０秒以上の時間がかかる。また計算機１３００内で映像を処理する前に、ＯＳなどによる処理時間がかかっている。
【００１４】
位置情報の場合には、位置センサ１２００内のコントローラが磁気センサ１２１０からの信号を処理してセンサの位置を計算するのに時間がかかる。また位置センサ１２００と計算機１３００が通信する時間、計算機１３００のＯＳなどによる処理時間がかかっている。
【００１５】
このように実写映像、位置情報の取得には遅れ要因があり、両者の遅れ時間は異なっている。そのため計算機１３００が単に実写映像と位置情報を取得して実写映像とCADモデル４０００を合成しても、図５のように実写映像とＣＡＤモデル４０００の位置がずれてしまっていた。
【００１６】
またこのような遅れの解析や、どのような応用分野にそのMRシステムを使用できるか見極めるため、実写映像や位置情報の遅れの絶対量を知りたいという要求もある。例えば映像の遅れが0.3秒ほどあるから改良の余地があるとか、遅れが0.3秒ほどあるからHMDをかけてキャッチボールは難しそうだ、とかいった判断を行いたい。
【００１７】
だがそのような遅れの絶対量も、従来のシステムでは知ることはできなかった。
【００１８】
本発明は以上の問題に鑑みてなされたものであり、現実空間の映像を取得するタイミングと、位置姿勢情報を取得するタイミングとの同期を取るための技術を提供することを目的とする。
【００１９】
また、それぞれの取得タイミングの同期を取ることが必要なシステムに適用することを目的とする。
【課題を解決するための手段】
【００２０】
本発明の目的を達成するために、例えば本発明の情報処理方法は以下の構成を備える。
【００２１】
即ち、指示具の位置姿勢情報を連続して入力する第１の入力工程と、
前記指示具を含む現実空間の映像を連続して入力する第２の入力工程と、
前記第１の入力工程で入力した位置姿勢情報に基づいて、前記指示具の移動量が極小となるタイミングを検知する第１の検知工程と、
前記第２の入力工程で入力した映像に基づいて、前記指示具の移動量が極小となるタイミングを検知する第２の検知工程と、
前記第１の検知工程で検知したタイミングと前記第２の検知工程で検知したタイミングとに基づいて、前記現実空間の映像の取得タイミングと前記位置姿勢情報の取得タイミングとのずれを求める計算工程と、
前記計算工程で求めた前記ずれを出力する第１の出力工程と
を備えることを特徴とする。
【００２２】
本発明の目的を達成するために、例えば本発明の情報処理方法は以下の構成を備える。
【００２３】
即ち、第１の状態、第２の状態の何れかの状態を取るように制御可能なデバイスを制御する制御工程と、
前記制御工程における制御に従って前記デバイスが第１の状態となったタイミングを検知する第１の検知工程と、
指示具を含む現実空間の映像に基づいて、前記デバイスが第１の状態となったタイミングを検知する第２の検知工程と、
前記第１の検知工程で検知したタイミングと、前記第２の検知工程で検知したタイミングとの差分を出力するの出力工程と
を備えることを特徴とする。
【００２４】
本発明の目的を達成するために、例えば本発明の情報処理装置は以下の構成を備える。
【００２５】
即ち、指示具の位置姿勢情報を連続して入力する第１の入力手段と、
前記指示具を含む現実空間の映像を連続して入力する第２の入力手段と、
前記第１の入力手段が入力した位置姿勢情報に基づいて、前記指示具の移動量が極小となるタイミングを検知する第１の検知手段と、
前記第２の入力手段が入力した映像に基づいて、前記指示具の移動量が極小となるタイミングを検知する第２の検知手段と、
前記第１の検知手段が検知したタイミングと前記第２の検知手段が検知したタイミングとに基づいて、前記現実空間の映像の取得タイミングと前記位置姿勢情報の取得タイミングとのずれを求める計算手段と、
前記計算手段で求めた前記ずれを出力する第１の出力手段と
を備えることを特徴とする。
【００２６】
本発明の目的を達成するために、例えば本発明の情報処理装置は以下の構成を備える。
【００２７】
即ち、第１の状態、第２の状態の何れかの状態を取るように制御可能なデバイスを制御する制御手段と、
前記制御手段による制御に従って前記デバイスが第１の状態となったタイミングを検知する第１の検知手段と、
指示具を含む現実空間の映像に基づいて、前記デバイスが第１の状態となったタイミングを検知する第２の検知手段と、
前記第１の検知手段が検知したタイミングと、前記第２の検知手段が検知したタイミングとの差分を出力するの出力手段と
を備えることを特徴とする。
【発明の効果】
【００２８】
本発明の構成により、現実空間の映像を取得するタイミングと、位置姿勢情報を取得するタイミングとの同期を取ることができる。また、それぞれの取得タイミングの同期を取ることが必要なシステムに適用することができる。
【発明を実施するための最良の形態】
【００２９】
以下添付図面を参照して、本発明を好適な実施形態に従って詳細に説明する。
【００３０】
［第１の実施形態］
ユーザに現実空間と仮想空間とを合成した空間（以下、複合現実空間と呼称する）を提供するための本実施形態に係るシステムの外観については従来のものを用いるので、その外観は図４に示すものとなる。
【００３１】
改めて、図４に示す各部について説明する。本実施形態に係るシステムは、現実空間中に仮想物体（ＣＧモデル）を重畳させてユーザに提供する周知のＭＲ技術を用いて、ユーザの観察対象である仮想物体に対して、ユーザがその位置や姿勢の変更といった各種の操作をより簡便にするためのものである。以下、本実施形態に係るシステムについて詳細に説明する。
【００３２】
同図において１０００はユーザで、本システムを用いて、現実空間中に仮想物体を重畳させた空間（複合現実空間）を観察する。ユーザ１０００の頭部には周知のＨＭＤ１１００が装着されており、ユーザ１０００は自身の頭部に装着されたＨＭＤ１１００により、複合現実空間の映像を見ることができる。
【００３３】
ユーザ１０００に提供する複合現実空間の映像は、ＨＭＤ１１００に接続されているコンピュータ１３００により生成される。
【００３４】
また、ユーザ１０００は手持ちセンサ５０００を手に持っている。なお、手持ちセンサ５０００は必ずしも手に「持つ」必要はなく、手に「装着」していればよい。手持ちセンサ５０００は、後述する３次元センサ固定局１２１０との相対位置姿勢を計測し、その計測結果を示す信号を後述する３次元センサ本体１２００に出力する。
【００３５】
３次元センサ固定局１２１０は、磁気センサの場合、ＨＭＤ１１００に備わっている後述のセンサ、手持ちセンサ５０００がそれぞれの位置姿勢の計測を行うために検知する磁界を発生する。以下の説明では便宜上、センサは全て磁気センサものを用いることとするが、その他のセンサ、例えば、超音波センサなどを用いても以下の説明は実質的には同じである。
【００３６】
３次元センサ本体１２００は、ＨＭＤ１１００に備わっている後述のセンサ、３次元センサ固定局１２１０、手持ちセンサ５０００を制御し、ＨＭＤ１１００に備わっている後述のセンサ、手持ちセンサ５０００が計測した結果をデータとしてコンピュータ１３００に出力する。
【００３７】
コンピュータ１３００は例えばＰＣ（パーソナルコンピュータ）やＷＳ（ワークステーション）等により構成されており、ユーザ１０００に自身の頭部の位置姿勢に応じた複合現実空間の画像を提供するための各種の処理を行う。
【００３８】
図７は、コンピュータ１３００を含む、システムの基本構成を示すブロック図である。
【００３９】
ＨＭＤ１１００はＨＭＤ内蔵センサ１１２０，右目カメラ１１１０、左目カメラ１１１１、右目ＬＣＤ１１３０，左目ＬＣＤ１１３１により構成されている。ＨＭＤ内蔵センサ１１２０は、３次元センサ固定局１２１０から発せられる磁界を検知し、検知した磁界の強度を示す信号を３次元センサ本体１２００に出力する。
【００４０】
手持ちセンサ５０００は、上述の通り、観察者１０００の手に装着されているもので、その位置姿勢は観察者１０００の手が動くことにより変化する。手持ちセンサ５０００は、３次元センサ固定局１２１０から発せられる磁界を検知し、検知した磁界の強度を示す信号を３次元センサ本体１２００に出力する。
【００４１】
３次元センサ本体１２００は、ＨＭＤ内蔵センサ１１２０、手持ちセンサ５０００から受けた信号の強度に基づいて、センサ座標系（３次元センサ固定局１２１０の位置を原点とし、この原点で互いに直交する３軸をそれぞれｘ、ｙ、ｚ軸とする座標系）におけるＨＭＤ内蔵センサ１１２０、手持ちセンサ５０００の位置姿勢を示すデータを求め、コンピュータ１３００に出力する。
【００４２】
右目カメラ１１１０、左目カメラ１１１１はそれぞれ、ＨＭＤ１１００を頭部に装着する観察者１０００の右目、左目から見える現実空間の動画像を撮像するものである。右目カメラ１１１０、左目カメラ１１１１のそれぞれにより撮像された動画像を構成する各フレームの画像データはコンピュータ１３００に出力する。
【００４３】
右目ＬＣＤ１１３０、左目ＬＣＤ１１３１はそれぞれ、右目カメラ１１１０、左目カメラ１１１１のそれぞれによって撮像された現実空間に、コンピュータ１３００が生成した仮想物体の画像を重畳させた画像（複合現実空間の画像）を表示するものであり、これにより、ＨＭＤ１１００を頭部に装着した観察者１０００は、自身の右目、左目に対応する複合現実空間の画像を眼前に見ることができる。
【００４４】
図６は、手持ちセンサ５０００の外観、内部構成を示す図である。図６（ａ）は手持ちセンサ５０００の外観示す図で、５００４は所定の色を有するマーカ、５００５はコンピュータ１３００の制御により点灯／消灯するＬＥＤである。図６（ｂ）は手持ちセンサ５０００の内部構成を示す図で、５００１は３次元センサ固定局１２１０からの磁界を検知するためのセンサ部、５００２はセンサ部５００１のカバーとして機能するセンサカバー、５００３は手持ちセンサ５０００をユーザ１０００が手に保持する際に持つ手持ち部である。なお、手持ちセンサ５０００の形状や構成についてもはこれに限定するものではないが、センサ部、マーカ、ＬＥＤが備わっていればよい。
【００４５】
次にコンピュータ１３００について説明する。
【００４６】
シリアルＩ／Ｏ１３１０は、３次元センサ本体１２００から出力されるデータを受ける為のインターフェースとして機能するものであり、受けたデータはメモリ１３０２に出力される。なお、このデータは上述の取り、ＨＭＤ内蔵センサ１１２０や手持ちセンサ５０００のセンサ座標系における位置姿勢を示すデータである。本実施形態ではこの位置姿勢は、位置（ｘ、ｙ、ｚ）を示すデータと、姿勢（ｒｏｌｌ，ｐｉｔｃｈ，ｙａｗ）を示すデータにより構成されているものとする。すなわち、ＨＭＤ内蔵センサ１１２０、手持ちセンサ５０００は、６自由度の計測センサである。
【００４７】
なお、位置姿勢を表現する方法は他にも考えられ、これに限定するものではない。
【００４８】
ここで、メモリ１３０２には、世界座標系における予め計測された３次元センサ固定局１２１０の位置姿勢を示すデータ（オフセットデータ）が記憶されている。従って、このオフセットデータを用いれば周知の通り、センサ座標系における任意の位置姿勢を、世界座標系における位置姿勢に変換することができるので、ＣＰＵ１３０１は、オフセットデータと、シリアルＩ／Ｏ１３１０を介してメモリ１３０２に入力された「センサ座標系におけるＨＭＤ内蔵センサ１１２０の位置姿勢を示すデータ」とを用いれば、「世界座標系におけるＨＭＤ内蔵センサ１１２０の位置姿勢」を求めることができるし、オフセットデータと、シリアルＩ／Ｏ１３１０を介してメモリ１３０２に入力された「センサ座標系における手持ちセンサ５０００の位置姿勢を示すデータ」とを用いれば、「世界座標系における手持ちセンサ５０００の位置姿勢」を求めることができる。
【００４９】
このような座標変換による位置姿勢の計算技術については周知の技術であるので、これ以上の説明は省略する。
【００５０】
パラレルＩ／Ｏ１３１１は上記ＬＥＤ５００５の点灯／消灯を制御するための制御信号をＬＥＤ５００５に送出するためのインターフェースとして機能するものである。なお、このような制御信号はＣＰＵ１３０１の制御により発行されるものである。
【００５１】
ビデオキャプチャカード１３２０、１３２１はそれぞれ、右目カメラ１１１０、左目カメラ１１１１から入力される、各フレームの画像を受けるためのインターフェースとして機能するものであり、受けた画像は順次メモリ１３０２に出力する。本実施形態では、各フレームの画像はＮＴＳＣに準拠したものであるとするが、これに限定するものではない。
【００５２】
ビデオカード１３３０，１３３１はそれぞれ、ＣＰＵ１３０１が後述する処理により生成した右目、左目に対応する複合現実空間の画像を右目ＬＣＤ１１３０、左目ＬＣＤ１１３１に出力するためのインターフェースとして機能するものであり、右目、左目に対応する複合現実空間の画像はそれぞれ、ＶＧＡに準拠した画像信号としてビデオカード１３３０、１３３１を介して右目ＬＣＤ１１３０、左目ＬＣＤ１１３１に出力される。なお、出力する画像信号はＶＧＡに準拠したものに限定するものではない。
【００５３】
ＣＰＵ１３０１は、コンピュータ１３００全体の制御を行うと共に、コンピュータ１３００が行うべき後述の各処理を実行する。このような処理の実行は、メモリ１３０２に記憶されている各種のプログラムやデータを実行することでなされる。
【００５４】
メモリ１３０２は、ＣＰＵ１３０１が各種の処理を実行するために使用するワークエリアや、ＣＰＵ１３０１に各種の処理を実行させるためのプログラムやデータを記憶するためのエリア、また、シリアルＩ／Ｏ１３１０、ビデオキャプチャカード１３２０、１３２１を介して入力される各種のデータを一時的に記憶するためのエリアを備える。
【００５５】
ＰＣＩブリッジ１３０３は、ＣＰＵ１３０１、メモリ１３０２がつながっているバスと、シリアルＩ／Ｏ１３１０、パラレルＩ／Ｏ１３１１、ビデオキャプチャカード１３２０、１３２１，ビデオカード１３３０、１３３１を繋ぐバスとを電気的に繋ぐためのものである。
【００５６】
次に、以上の構成を有するシステムによって、ユーザ１０００に複合現実空間の画像を提供するための処理について説明する。
【００５７】
図８は、ユーザ１０００に複合現実空間の画像を提供するために、コンピュータ１３００が行う処理のフローチャートである。なお、上述の説明のように、手持ちセンサ５０００、ＨＭＤ内蔵センサ１１２０により計測した位置姿勢と、カメラ（以下、右目カメラ１１１０，左目から１１１１の両方に共通の説明の場合には単に「カメラ」と呼称する）からの現実空間の画像とは同時刻に取得することができず、それぞれの取得タイミングは様々な要因から「ずれ」が生じる。
【００５８】
そこで本実施形態ではこの「ずれ」を軽減させることで、複合現実空間の画像をユーザ１０００に提供する際、現実空間と仮想空間とのずれを軽減させる。
【００５９】
なお、以下の説明では、このずれ（遅れ時間）はｎ／６０秒であるとする。即ち、手持ちセンサ５０００、ＨＭＤ内蔵センサ１１２０により計測した位置姿勢の取得タイミングよりも、カメラからの現実空間の画像の取得タイミングはｎ／６０秒遅れているとする。よって、ｎ＞０の場合には手持ちセンサ５０００、ＨＭＤ内蔵センサ１１２０により計測した位置姿勢の取得タイミングよりも、カメラからの現実空間の画像の取得タイミングが遅れていることになるし、ｎ＜０の場合には、手持ちセンサ５０００、ＨＭＤ内蔵センサ１１２０により計測した位置姿勢の取得タイミングよりも、カメラからの現実空間の画像の取得タイミングが進んでいるし、ｎ＝０の場合にはそれぞれのタイミングは一致していることになる。このｎについては予め決まっており、ｎの決定については後述する。
【００６０】
また、図８に示したフローチャートに従った処理をＣＰＵ１３０１に実行させるためのプログラムやデータはメモリ１３０２に格納されており、ＣＰＵ１３０１はこれを用いて処理を行うことで、コンピュータ１３００は以下説明する各処理を行うことになる。
【００６１】
先ず、カメラにより撮像された現実空間の画像（ビデオ映像）がビデオキャプチャカード１３２０，１３２１を介してコンピュータ１３００に入力されるので、ＣＰＵ１３０１はこれを検知し、順次メモリ１３０２のビデオバッファに格納する（取り込む）（ステップＳ１００）。
【００６２】
次に、ＨＭＤ内蔵センサ１１２０のセンサ座標系における位置姿勢情報、手持ちセンサ５０００（のセンサ部５００１）のセンサ座標系における位置姿勢情報が３次元センサ本体１２００からシリアルＩ／Ｏ１３１０を介してコンピュータ１３００に入力されるので、ＣＰＵ１３０１はこれを検知して、メモリ１３０２に格納する（ステップＳ１０１）。なお、格納する際には、世界座標系の位置姿勢に変換してから格納する。世界座標系における位置姿勢に変換する技術については上述の通りである。
【００６３】
次に、ｎ＝０であるのかをチェックする（ステップＳ１０２）。ｎ＝０である場合には、処理をステップＳ１１１に進め、以降の処理を行う。一方、ｎ≠０である場合には処理をステップＳ１０３に進め、ｎ＞０であるのかをチェックする（ステップＳ１０３）。ｎ＞０である場合には処理をステップＳ１０８に進め、先ず、ステップＳ１０１でメモリ１３０２に格納した手持ちセンサ５０００の（世界座標系における）位置姿勢情報をメモリ１３０２内に備わっている第１のＦＩＦＯに格納（ＰＵＳＨ）すると共に、ＨＭＤ内蔵センサ１１２０の（世界座標系における）位置姿勢情報をメモリ１３０２内に備わっている第２のＦＩＦＯに格納（ＰＵＳＨ）する（ステップＳ１０８）。
【００６４】
そして、現実空間の画像がメモリ１３０２に格納される毎に、ＦＩＦＯから手持ちセンサ５０００の位置姿勢情報、ＨＭＤ内蔵センサ１１２０の位置姿勢情報を取り出して（ＰＯＰして）以降の処理で用いる。上記第１，２のＦＩＦＯにはｎ個のデータが格納可能となっており、且つ現実空間の画像は１／６０秒毎にメモリ１３０２に格納されるので、第１，２のＦＩＦＯからは１／６０秒毎に位置姿勢情報が読み出されることになる。
【００６５】
よって、ｎ＞０の場合には、以降の処理で用いる手持ちセンサ５０００の位置姿勢情報、ＨＭＤ内蔵センサ１１２０の位置姿勢情報は、ＦＩＦＯに格納してから（取得してから）ｎ／６０後のものを用いることになる。
【００６６】
いずれにせよ、ここでは、ＣＰＵ１３０１が位置姿勢情報をメモリ１３０２に取得してから、現実空間の画像をメモリ１３０２に取得するまでにｎ／６０秒の「ずれ」が生じているので、取得した現実空間の画像を以降の処理で扱う場合、本来これと同じ時刻に取得されるべき位置姿勢情報はｎ／６０秒前のものであるので、上記ＦＩＦＯから取り出し可能なもの（即ちｎ／６０秒前にメモリ１３０２に取得したもの）を用いる。
【００６７】
よって、図８に戻って、第１のＦＩＦＯから手持ちセンサ５０００の位置姿勢情報を取り出す（ＰＯＰする）と共に、第２のＦＩＦＯからＨＭＤ内蔵センサ１１２０の位置姿勢情報を取り出す（ＰＯＰする）（ステップＳ１０９）。
【００６８】
一方、ｎ＜０である場合には処理をステップＳ１０６に進め、先ず、ステップＳ１００でメモリ１３０２のビデオバッファに格納した画像をメモリ１３０２内に備わっている第３のＦＩＦＯに格納（ＰＵＳＨ）する（ステップＳ１０６）。
【００６９】
そして、手持ちセンサ５０００の位置姿勢情報、ＨＭＤ内蔵センサ１１２０の位置姿勢情報がメモリ１３０２に格納される毎に、ＦＩＦＯから現実空間の画像を取り出して（ＰＯＰして）以降の処理で用いる。上記第３のＦＩＦＯにはｎ個のデータが格納可能となっており、且つ位置姿勢情報は１／６０秒毎にメモリ１３０２に格納されるので、第３のＦＩＦＯからは１／６０秒毎に現実空間の画像が読み出されることになる。
【００７０】
よって、ｎ＜０の場合には、以降の処理で用いる現実空間の画像は、ＦＩＦＯに格納してから（取得してから）ｎ／６０後のものを用いることになる。
【００７１】
そして、第３のＦＩＦＯから、画像を取り出す（ＰＯＰする）（ステップＳ１０７）。取り出した画像は上記ビデオバッファに格納する。
【００７２】
次に、第２のＦＩＦＯから取り出したＨＭＤ内蔵センサ１１２０の位置姿勢情報、若しくはステップＳ１０１で取得したＨＭＤ内蔵センサ１１２０の位置姿勢情報を用いて、カメラの位置姿勢を示すＶｉｅｗＭａｔｒｉｘを生成する（ステップＳ１１１）。カメラの位置姿勢については、例えば、ＨＭＤ内蔵センサ１１２０とカメラとの位置姿勢関係を予めオフセットとして測定しておき、データとしてメモリ１３０２に保持させておく。そして、ステップＳ１１１では、ＨＭＤ内蔵センサ１１２０の位置姿勢情報にこのオフセットを付加することで、世界座標系におけるカメラの位置姿勢を求めることができる。それをマトリックスの形態でもって表現すると、ＶｉｅｗＭａｔｒｉｘとなる。
【００７３】
次に、第１のＦＩＦＯから取り出した手持ちセンサ５０００の位置姿勢情報、若しくはステップＳ１０１で取得した手持ちセンサ５０００の位置姿勢情報を用いて、手持ちセンサ５０００の位置姿勢を示すＭｏｄｅｌｉｎｇＭａｔｒｉｘを生成する（ステップＳ１１２）。これは即ち、世界座標系における手持ちセンサ５０００の位置姿勢を示すものである。よって、次に、仮想物体（ここではＣＡＤモデル）を手持ちセンサ５０００の位置姿勢に配置し、上記ＶｉｅｗＭａｔｒｉｘを用いて、カメラから見えるＣＡＤモデルを含む仮想空間の画像を生成し、メモリ１３０２における上記ビデオバッファに描画する（ステップＳ１１３）。このビデオバッファには先にステップＳ１００、若しくはステップＳ１０７で現実空間の画像が描画されているので、結果としてこのビデオバッファには現実空間の画像上に仮想空間の画像が重畳された画像、即ち、複合現実空間の画像が生成されたことになるので、ＣＰＵ１３０１はこれをビデオカード１３３０，１３３１に転送する（ステップＳ１１４）。
【００７４】
そしてビデオカード１３３０、１３３１に転送された複合現実空間の画像は右目ＬＣＤ１１３０，左目ＬＣＤ１１３１に転送されることになるので、ユーザ１０００の右目、左目の眼前にはそれぞれの目の位置姿勢に応じた複合現実空間の画像が表示されることになる。
【００７５】
以上の処理により、ほぼ同時刻に取得されるべき現実空間の画像、位置姿勢情報を用いて複合現実空間の画像を生成することができるので、例えばユーザ１０００が手持ちセンサ５０００を動かして移動させても、それに追従してセンサの位置とずれることなくＣＡＤモデルを移動させることができ、現実空間と仮想空間との位置ずれを軽減することができる。
【００７６】
次に、ＦＩＦＯが保持可能なデータ数ｎ（換言すればずらす時間を決定するパラメータ）を決定する処理について、同処理のフローチャートを示す図９を用いて説明する。なお、同処理は、図８に示したフローチャートに従った処理を行う前に行われるべきものである。また、図９に示したフローチャートに従った処理をＣＰＵ１３０１に実行させるためのプログラムやデータはメモリ１３０２に格納されており、これをＣＰＵ１３０１が用いて処理を行うことで、コンピュータ１３００は以下説明する各処理を行うことになる。
【００７７】
ここでは、ユーザ１０００は手に保持している手持ちセンサ５０００を左右に振る。そしてその様をＨＭＤ１１００を介して見る。即ち、カメラによりその様を撮像する。
【００７８】
その場合に、コンピュータ１３００は以下のような処理を行う。
【００７９】
先ず、カメラにより撮像された上記様は現実空間の画像としてビデオキャプチャカード１３２０，１３２１を介して順次メモリ１３０２に格納される（ステップＳ２００）。次に、手持ちセンサ５０００のセンサ部５００１により計測された手持ちセンサ５０００の位置姿勢情報が３次元センサ本体１２００、シリアルＩ／Ｏ１３１０を介してコンピュータ１３００に入力されるので、ＣＰＵ１３０１はこれを検知して、世界座標系における位置姿勢情報に変換してからメモリ１３０２に格納する（ステップＳ２０１）。なお、メモリ１３０２にはその前に格納した位置姿勢情報も保持されているものとする。即ち、現時点で格納したものから所定量分の過去の位置姿勢情報が格納されているものとする。
【００８０】
そして、ステップＳ２０１で位置姿勢情報を格納した時刻を「キャプチャ時刻」としてメモリ１３０２に格納する（ステップＳ２０２）。時刻についてはＣＰＵ１３０１が常に計時しているので、ＣＰＵ１３０１はステップＳ２０１における処理を行うと共に、このときの時刻をメモリ１３０２に格納する。
【００８１】
次に、ＣＰＵ１３０１は、ステップＳ２００でメモリ１３０２に格納した現実空間の画像から、マーカ５００４の領域を検出し、検出した位置を求める（ステップＳ２０３）。ステップＳ２０３における処理としては例えば、画像を構成する各画素の画素値を参照し、マーカ５００４の色を有する画素群による領域を１以上検出し、検出した領域の中で最も面積の大きい領域（構成する画素の数が最も多い領域）を特定し、特定した領域の重心位置をマーカ５００４の画像における位置とする。
【００８２】
このようにして、画像におけるマーカ５００４の位置を求め、メモリ１３０２に格納するのであるが、メモリ１３０２には過去に求めた重心位置のデータも保持されているものとする。
【００８３】
そして次に、前回のステップＳ２０１で求めた手持ちセンサ５０００の位置と、今回のステップＳ２０１で求めた手持ちセンサ５０００の位置との差分を計算して、その差分値が所定量以下であるのか否かを判断し（ステップＳ２０４）、所定量以下である場合、即ち、手持ちセンサ５０００がほぼ静止した場合には処理をステップＳ２０５に進め、そのときの時刻（タイミング）をメモリ１３０２に格納する（ステップＳ２０５）。
【００８４】
なお、ステップＳ２０４，Ｓ２０５における処理は一般的には、手持ちセンサ５０００の位置情報を用いて移動量が極小となる時刻を求め、求めた時刻をメモリ１３０２に格納する処理であり、ここで説明したステップＳ２０４，Ｓ２０５における処理はその一例である。
【００８５】
また、前回のステップＳ２０３で求めたマーカ５００４の画像における位置と、今回のステップＳ２０３で求めたマーカ５００４の画像における位置との差分を計算して、その差分値が所定量以下であるのか否かを判断し（ステップＳ２０６）、所定量以下である場合、即ち、手持ちセンサ５０００がほぼ静止した場合には処理をステップＳ２０７に進め、そのときの時刻（タイミング）をメモリ１３０２に格納する（ステップＳ２０７）。
【００８６】
なお、ステップＳ２０６，Ｓ２０７における処理は一般的には、マーカ５００４の画像上における位置を用いて手持ちセンサ５０００の移動量が極小となる時刻を求め、求めた時刻をメモリ１３０２に格納する処理であり、ここで説明したステップＳ２０６，Ｓ２０７における処理はその一例である。
【００８７】
例えば手持ちセンサ５０００を三角形をトレースするように移動させる場合などは、加速度が極大値をとったタイミングをステップＳ２０５でメモリ１３０２に格納するようにしても良い。また、手持ちセンサ５０００を手に取り付けずに、様々な運動体に取り付けることも考えられるので、取得するタイミングには様々なものが考えられる。
【００８８】
そして、ステップＳ２０５でメモリ１３０２に格納した時刻と、ステップＳ２０７でメモリ１３０２に格納した時刻との差分（即ち上記遅れ時間＝ｎ／６０秒）を求め、求めた差分を示すデータをメモリ１３０２に格納する（ステップＳ２０８）。
【００８９】
ここで、ステップＳ２０８における処理の詳細について、図１０のフローチャートを用いて説明する。図１０は、ステップＳ２０８における処理の詳細を示すフローチャートである。同図のフローチャートでは、上記遅れ時間ｎ／６０秒は、手持ちセンサ５０００を振る周期の１／２より小さいことを仮定している。図１０に示したフローチャートでの遅れ時間の計算方法の概略を図１１に示す。
【００９０】
ステップＳ２０５で取得した時刻を古い順に並べるとts0, ts1, …., ts(n-1), ts(n)であるとする。ts(n)が最新の取得時刻である。同様にステップＳ２０７で取得した時刻を古い順に並べるとtv0, tv1, …., tv(n-1), tv(n)であるとする。
【００９１】
このときtv(n-1)＜ts(k)＜tv(n)を満たすts(k)をts0〜ts(n)の中から探し、｜tv(n-1) - ts(k)｜と、｜tv(n) - ts(k)｜とを比較する（ステップＳ２１０）。
【００９２】
その結果、｜tv(n-1) - ts(k)｜の方が大きい場合には、処理をステップＳ２１１を介してステップＳ２１２に進め、tv(n) - ts(k)を上記遅れ時間＝ｎ／６０秒として出力する（ステップＳ２１２）。
【００９３】
一方、｜tv(n) - ts(k)｜の方が大きいか等しい場合には、処理をステップＳ２１１を介してステップＳ２１３に進め、tv(n-1) - ts(k)を上記遅れ時間＝ｎ／６０秒として出力する（ステップＳ２１３）。このとき遅れ時間は負の数となり、現実空間の画像の取得タイミングの方が進んでいることになる。
【００９４】
なお、上述の通り、図１０のフローチャートでは、上記遅れ時間は手持ちセンサ５０００を振る周期の１／２より小さいことを仮定していたが、図１２に示すようにしてｘを求め、tv(k+x) - ts(k)を遅れ時間とすればそのような仮定をする必要はない。
【００９５】
そして処理を図９のフローチャートに戻し、以降の処理を繰り返す。
【００９６】
ここで、手持ちセンサ５０００が略静止しているという同一事象をセンサ５０００により求めた時刻と画像により求めた時刻とに差があれは、それはメモリ１３０２に位置姿勢情報が格納された時刻と、メモリ１３０２に現実空間の画像が格納された時刻とに差があるということであり、且つこの差はメモリ１３０２に位置姿勢情報が格納された時刻と、メモリ１３０２に現実空間の画像が格納された時刻との差（Ｄ）である。よって、ある時点でメモリ１３０２に格納された現実空間の画像が撮像されたときに計測された位置姿勢は、この「ある時点」よりもこの「差Ｄ」の分だけ前にメモリ１３０２に格納された位置姿勢である。よって、差Ｄが求まると、これを６０倍した値を上記ｎに代入すれば良いことになる(Ｄの単位を秒とした場合)。
【００９７】
また、本実施形態では、ＦＩＦＯを用いて情報の遅延処理を行っているが、ＦＩＦＯを用いる以外にも同様の目的は達成されるし、このような手段に限定するものではない。
【００９８】
以上の説明により、本実施形態によって、ほぼ同時刻に取得されるべき現実空間の画像、位置姿勢情報を用いて複合現実空間の画像を生成することができるので、現実空間と仮想空間とのずれを軽減することができる、また例えばユーザ１０００が手持ちセンサ５０００を動かして移動させても、それに追従して遅れることなく、ＣＡＤモデルを移動させることができ、現実空間と仮想空間との位置ずれを軽減することができる。
【００９９】
［第２の実施形態］
本実施形態では、カメラが撮像を行ってから、メモリ１３０２にその撮像した画像が格納されるまでの時間を計測する。なお、本実施形態に係るこのような計測処理を行うシステムについては第１の実施形態と同じである。
【０１００】
図１３は、このような計測処理のフローチャートである。ＣＰＵ１３０１は、パラレルＩ／Ｏ１３１１を介してＬＥＤ５００５の点灯／消灯を制御するための制御信号を発する。ここでは制御信号は発してからＬＥＤ５００５が点灯／消灯するまでに要する時間は０であるとする。
【０１０１】
先ず、内部状態（内部ステート）を示す変数を”アイドル”に設定すると共に、ＬＥＤ５００５を消灯する制御信号をパラレルＩ／Ｏ１３１１を介して発する（ステップＳ３００）。
【０１０２】
次に、カメラにより撮像された現実空間の画像がビデオキャプチャカード１３２０，１３２１を介して順次メモリ１３０２に格納される（ステップＳ３０１）ので、ＣＰＵ１３０１はこれを検知して、そのときの時刻をキャプチャ時刻としてメモリ１３０２に格納する（ステップＳ３０２）。
【０１０３】
次に、ステップＳ３０１で取り込んだ画像を参照して、ＬＥＤ５００５が点灯しているのか否かをチェックする（ステップＳ３０３）。このチェック処理としては、例えば、画像を構成する各画素の画素値を参照し、画素値をＹＣｒＣｂで見たときに、Ｙ値が所定値以上である画素の集合を１以上特定し、特定した集合のうち最もサイズの大きい集合のサイズが所定サイズ以上であれば、ＬＥＤ５００５が点灯していると判断する。
【０１０４】
次に、内部状態を示す変数を参照し（ステップＳ３０４）、”アイドル”である場合には処理をステップＳ３０７に進める。内部状態が”アイドル”である場合、即ち、ＬＥＤ５００５が消灯している場合には先ず、ＣＰＵ１３０１はＬＥＤ５００５を点灯させる制御信号をパラレルＩ／Ｏ１３１１を介してＬＥＤ５００５に発する（ステップＳ３０７）ので、ＬＥＤ５００５は点灯するのであるが、ＣＰＵ１３０１はこの制御信号を発したときの時刻をメモリ１３０２に格納する（ステップＳ３０８）。そして内部状態を示す変数を”検出待ち”に変更する（ステップＳ３０９）。
【０１０５】
一方、ステップＳ３０４において内部状態を示す変数が”アイドル”ではない場合には処理をステップＳ３０５に進め、内部状態を示す変数が”検出待ち”であるのか否かを判断する（ステップＳ３０５）。内部状態を示す変数が”検出待ち”、即ち、ＬＥＤ５００５が点灯している場合には処理をステップＳ３１０に進め、ステップＳ３０３でＬＥＤ５００５が点灯していると判断しているか否かを判断し（ステップＳ３１０）、点灯していると判断している場合には処理をステップＳ３１１に進め、ＣＰＵ１３０１はＬＥＤ５００５を消灯させる制御信号をパラレルＩ／Ｏ１３１１を介してＬＥＤ５００５に発する（ステップＳ３１１）ので、ＬＥＤ５００５は消灯する。そして、そのときの時刻とステップＳ３０２でメモリ１３０２に格納した時刻との差分を求める（ステップＳ３１２）。
【０１０６】
この差分値は即ち、ＬＥＤ５００５が実際に点灯してから、点灯しているＬＥＤ５００５を含む現実空間の画像を得るまでに要する時間を表している。
【０１０７】
そしてＣＰＵ１３０１は内部状態を示す変数を”終了待ち”に変更する（ステップＳ３１３）。
【０１０８】
一方、ステップＳ３０５で、内部状態を示す変数が”検出待ち”ではない場合には処理をステップＳ３０６に進め、内部状態を示す変数が”終了待ち”であるのか否かを判断し、”終了待ち”であれば処理をステップＳ３１４に進め、ステップＳ３０３でＬＥＤ５００５が点灯していると判断しているか否かを判断し（ステップＳ３１４）、点灯していると判断している場合には処理をステップＳ３１５に進め、ＣＰＵ１３０１は内部状態を示す変数を”アイドル”に変更する（ステップＳ３１５）。
【０１０９】
以上の説明により、本実施形態によって、カメラが撮像してからコンピュータ１３００のメモリ１３０２に格納され、ＣＰＵ１３０１がそれを用いて処理を行おうとするまでに要する時間を計測することができる。
【０１１０】
また、本実施形態では発光体としてＬＥＤを用いたが、これ以外の発光体を用いても良い。また、発光体に限定するものではなく、液晶画面などを用いても良い。即ち、撮影した画像上で第１の状態（本実施形態では「点灯」に対応）、第２の状態（本実施形態では「消灯」に対応）が検出されるような状態を取りうるものであればよい。
【０１１１】
［第３の実施形態］
本実施形態では、位置姿勢情報の取得タイミングと、現実空間の画像の取得タイミングとの同期を取りながら動作するＣＡＤビューワシステムと、それぞれの取得タイミングのずれ（即ち上記遅れ時間）を求めるためのツールとを切り替えて使用する実施例について説明する。
【０１１２】
以下の説明では第１の実施形態と異なる部分についてのみ説明する。即ち、以下説明する点以外については第１の実施形態と同様である。
【０１１３】
図１４は、本実施形態で用いる手持ちセンサ５９００を示す図である。同図に示す手持ちセンサ５９００は、図５に示した、第１の実施形態で用いた手持ちセンサ５０００にキャリブレーションスイッチ５００６が備わっている。このキャリブレーションスイッチ５００６は、コンピュータ１３００に備わっているパラレルＩ／Ｏ１３１１に接続されており、キャリブレーションスイッチ５００６が押下されると、その旨を示す信号がキャリブレーションスイッチ５００６からパラレルＩ／Ｏ１３１１に対して出力されるので、ＣＰＵ１３０１はこの信号を検知することで、キャリブレーションスイッチ５００６の押下を検知することができる。
【０１１４】
しかし、このキャリブレーションスイッチ５００６は必須なものではなく、キーボードやマウスをコンピュータ１３００に接続し、これをキャリブレーションスイッチ５００６の代わりに用いるようにしても良い。
【０１１５】
従って本実施形態では、コンピュータ１３００は、キャリブレーションスイッチ５００６が押下されていない場合には、ＣＡＤビューワシステムのアプリケーションプログラムを実行し、押下されている場合には、図９のフローチャートに従った処理を実行して上記遅れ時間を計測する処理を行う。
【０１１６】
図１５は、本実施形態に係るコンピュータ１３００が行う処理のフローチャートである。
【０１１７】
ＣＰＵ１３０１は、パラレルＩ／Ｏ１３１１を介して、キャリブレーションスイッチ５００６の押下を示す信号が入力されたことを検知すると、処理をステップＳ４００を介してステップＳ４０１に進め、キャリブレーションツールの実行、即ち、図９のフローチャートに従った処理を実行する（ステップＳ４０１）。なお、本実施形態では、図９のフローチャートに従った処理においてステップＳ２０８における処理の次にはステップＳ２００に戻らずに、ステップＳ４０２に進む。
【０１１８】
ここで、図９のフローチャートに従った処理を実行した結果、遅れ時間＝０（若しくは略０）である場合には処理をステップＳ４００に戻すが、遅れ時間≠０である場合には処理をステップＳ４０２を介してステップＳ４０３に進め、ＣＡＤビューワシステムで用いる遅れ時間にステップＳ４０１で求めた遅れ時間をセットする（ステップＳ４０３）。
【０１１９】
一方、ＣＰＵ１３０１は、パラレルＩ／Ｏ１３１１を介して、キャリブレーションスイッチ５００６の押下を示す信号が入力されたことを検知していないと、処理をステップＳ４００を介してステップＳ４０４に進め、キャリブレーションツールの作業履歴をクリアし（ステップＳ４０４）、ＣＡＤビューワシステムを起動する（ステップＳ４０５）。ＣＡＤビューワシステムの動作については図８のフローチャートに従ったものとなる。なお、本実施形態では、図８のフローチャートに従った処理においてステップＳ１１４における処理の次にはステップＳ１００に戻らずに、ステップＳ４００に進む。
【０１２０】
また、ステップＳ４０４でのキャリブレーションツールの作業履歴のクリアとは、図９のフローチャートにおける、前回の手持ちセンサ位置と、前回のマーカ検出位置と、時刻の履歴ts(i)、tv(i)である。これらはキャリブレーションツールが連続して動作していなければ意味を成さない履歴であり、キャリブレーションツールが動作していないときにはクリアしておく必要がある。
【０１２１】
［第４の実施形態］
本実施形態では、第３の実施形態で説明したＣＡＤビューワシステムとキャリブレーションツールとを並行して動作させ、常に現実空間の画像の取得タイミングと位置姿勢情報の取得タイミングとの遅れ時間を求めてＣＡＤビューワシステムに反映させる。
【０１２２】
以下の説明では第１の実施形態と異なる部分についてのみ説明する。即ち、以下説明する点以外については第１の実施形態と同様である。
【０１２３】
上述の通り、本実施形態では、ＣＡＤビューワシステムとキャリブレーションツールとを並行して動作させるが、例えば、マルチスレッドでそれぞれを動作させる。
【０１２４】
図１６は、キャリブレーションツールの動作を示すフローチャート、図１７は、ＣＡＤビューワシステムの動作を示すフローチャートである。なお、それぞれのフローチャートに従った処理は第３の実施形態と同様、コンピュータ１３００が行う。
【０１２５】
図１６において、ステップＳ５００〜ステップＳ５０２はそれぞれ、ステップＳ４０１〜ステップＳ４０３と同じであるが、マルチスレッド動作に対応させるため、ステップＳ４０３でセットする遅れ時間を設定する変数に対してスレッド間での排他制御を行っている。
【０１２６】
図１７において、ステップＳ５１０、Ｓ５１１はそれぞれ、ステップＳ４０４，Ｓ４０５と同じであるが、マルチスレッド動作に対応させるため、ステップＳ４０５で遅れ時間を読み出す変数に対してスレッド間での排他制御を行っている。
【０１２７】
以上の説明により、本実施形態、及び第３の実施形態によれば、上記遅れ時間を考慮し、現実空間の画像の取得タイミングと位置姿勢情報の取得タイミングの同期が取れたＣＡＤビューワシステムを構築することができる。特に本実施形態によれば、遅れ時間を求めるツールの存在を意識させることなく、上記それぞれの取得タイミングの同期が取れたＣＡＤビューワシステムを構築することができる。
【０１２８】
［その他の実施形態］
また、本発明の目的は、前述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記録媒体（または記憶媒体）を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ（またはＣＰＵやＭＰＵ）が記録媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。この場合、記録媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコードを記録した記録媒体は本発明を構成することになる。
【０１２９】
また、コンピュータが読み出したプログラムコードを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１３０】
さらに、記録媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張カードやコンピュータに接続された機能拡張ユニットに備わるメモリに書込まれた後、そのプログラムコードの指示に基づき、その機能拡張カードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
【０１３１】
本発明を上記記録媒体に適用する場合、その記録媒体には、先に説明したフローチャートに対応するプログラムコードが格納されることになる。
【図面の簡単な説明】
【０１３２】
【図１】ＣＡＤモデル（プリンタのトナーカートリッジのＣＡＤモデル）１００をＣＧ物体として表示し、ＣＡＤモデルのプレビューに使用している様子を示す図である。
【図２】ＨＭＤの構成を示す図である。
【図３】ＨＭＤ内の各ＬＣＤ１１３０、１１３１に表示される、各カメラ１１１０、１１１１で撮影された実写映像と、ＣＧ画像として描かれたＣＡＤモデル３００が合成された画像の表示例を示す図である。
【図４】ＭＲ技術を使用したＣＡＤビューワの機器構成を示す図である。
【図５】手持ちセンサ５０００とＣＡＤモデル４０００との位置姿勢関係を示す図である。
【図６】手持ちセンサ５０００の外観、内部構成を示す図である。
【図７】コンピュータ１３００を含む、システムの基本構成を示すブロック図である。
【図８】ユーザ１０００に複合現実空間の画像を提供するために、コンピュータ１３００が行う処理のフローチャートである。
【図９】ＩＦＯが保持可能なデータ数ｎ（換言すればずらす時間を決定するパラメータ）を決定する処理のフローチャートである。
【図１０】ステップＳ２０８における処理の詳細を示すフローチャートである。
【図１１】図１０に示したフローチャートでの遅れ時間の計算方法の概略を示す図である。
【図１２】図１０に示したフローチャートでの遅れ時間の計算方法の概略を示す図である。
【図１３】カメラが撮像を行ってから、メモリ１３０２にその撮像した画像が格納されるまでの時間の計測処理のフローチャートである。
【図１４】本発明の第３の実施形態で用いる手持ちセンサ５９００を示す図である。
【図１５】本発明の第３の実施形態に係るコンピュータ１３００が行う処理のフローチャートである。
【図１６】キャリブレーションツールの動作を示すフローチャートである。
【図１７】キャリブレーションツールの動作を示すフローチャートである。
【図１】
2007004714.tif 000003
【図２】
2007004714.tif 000004
【図３】
2007004714.tif 000005
【図４】
2007004714.tif 000006
【図５】
2007004714.tif 000007
【図６】
2007004714.tif 000008
【図７】
2007004714.tif 000009
【図８】
2007004714.tif 000010
【図９】
2007004714.tif 000011
【図１０】
2007004714.tif 000012
【図１１】
2007004714.tif 000013
【図１２】
2007004714.tif 000014
【図１３】
2007004714.tif 000015
【図１４】
2007004714.tif 000016
【図１５】
2007004714.tif 000017
【図１６】
2007004714.tif 000018
【図１７】
2007004714.tif 000019