(57)【特許請求の範囲】
【請求項１】
撮像装置から取得された所定の対象の周囲の画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定部と、
前記画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定部と、
前記第１推定部の推定結果と前記第２推定部の推定結果とを比較し、比較に用いた前記第２推定部の推定結果より後の前記第２推定部の推定結果を比較結果に基づいて補正する補正部と、
前記補正部により補正された前記第２推定部の推定結果に基づいて、所定のデータ処理を実行するデータ処理部と、
を備え、
前記第１推定部および前記第２推定部は、同一の撮像装置により撮像された画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とする情報処理装置。
【請求項２】
前記第２推定部は、前記対象の位置と姿勢の少なくとも一方を前記第１推定部よりも高速に推定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
短期間における前記第２推定部の推定結果の正確度は、短期間における前記第１推定部の推定結果の正確度よりも高いことを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記補正部は、前記第１推定部の推定結果と前記第２推定部の推定結果との差を解消するように、前記差を求めた前記第２推定部の推定結果より後の前記第２推定部の推定結果を補正することを特徴とする請求項１から３のいずれかに記載の情報処理装置。
【請求項５】
前記第２推定部は、前記第１推定部の１回の推定処理の間に、前記撮像装置により撮像された複数の画像に基づく複数回の推定処理を実行し、
前記補正部は、前記第１推定部の推定結果と前記第２推定部の推定結果との差を求めてから前記第１推定部の次の推定結果を得るまでの間に、前記差を漸次的に解消するように、前記差を求めた前記第２推定部の推定結果より後の前記第２推定部の複数回の推定結果のそれぞれを補正することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記第１推定部は、相対的に高画質の画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定し、前記第２推定部は、相対的に低画質の画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定し、
前記高画質の画像と前記低画質の画像は、同一または異なる撮像装置により撮像された画像であることを特徴とする請求項１から５のいずれかに記載の情報処理装置。
【請求項７】
撮像装置から取得された所定の対象の周囲の画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定部と、
前記画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定部と、
前記第１推定部の推定結果と前記第２推定部の推定結果とを比較し、比較に用いた前記第２推定部の推定結果より後の前記第２推定部の推定結果を比較結果に基づいて補正する補正部と、
前記補正部により補正された前記第２推定部の推定結果に基づいて、所定のデータ処理を実行するデータ処理部と、
異なる方向を撮像する複数の撮像装置により撮像された複数の個別画像を取得する画像取得部と、
を備え、
前記第１推定部は、前記複数の個別画像を合成した合成画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定し、前記第２推定部は、前記複数の個別画像の少なくとも１つに基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とする情報処理装置。
【請求項８】
撮像装置から取得された所定の対象の周囲の画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定部と、
前記画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定部と、
前記第１推定部の推定結果と前記第２推定部の推定結果とを比較し、比較に用いた前記第２推定部の推定結果より後の前記第２推定部の推定結果を比較結果に基づいて補正する補正部と、
前記補正部により補正された前記第２推定部の推定結果に基づいて、所定のデータ処理を実行するデータ処理部と、
を備え、
前記第１推定部は、ローリングシャッター方式の撮像装置により撮像された画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定し、前記第２推定部は、グローバルシャッター方式の撮像装置により撮像された画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とする情報処理装置。
【請求項９】
前記第２推定部は、前記第１推定部により使用される画像の一部に基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とする請求項１から５のいずれかに記載の情報処理装置。
【請求項１０】
前記第２推定部は、前記第１推定部の１回の推定処理の間に、前記撮像装置により撮像された複数の画像に基づく複数回の推定処理を実行し、
前記第１推定部は、前記撮像装置により撮像された複数の画像に基づく複数回の推定処理を並行して実行し、
前記補正部は、前記第１推定部による並行した推定処理のそれぞれで推定結果が出力された場合に前記第２推定部の推定結果との比較結果を更新することを特徴とする請求項１から３のいずれかに記載の情報処理装置。
【請求項１１】
撮像装置から取得された所定の対象の周囲の画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定処理を実行するステップと、
前記画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定処理を実行するステップと、
前記第１推定処理による推定結果と前記第２推定処理による推定結果とを比較し、比較に用いた前記第２推定処理による推定結果より後の前記第２推定処理による推定結果を比較結果に基づいて補正するステップと、
をコンピュータが実行し、
前記第１推定処理および前記第２推定処理は、同一の撮像装置により撮像された画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とする位置および／または姿勢の推定方法。
【請求項１２】
撮像装置から取得された所定の対象の周囲の画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定機能と、
前記画像に基づいて、前記対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定機能と、
前記第１推定機能による推定結果と前記第２推定機能による推定結果とを比較し、比較に用いた前記第２推定機能による推定結果より後の前記第２推定機能による推定結果を比較結果に基づいて補正する補正機能と、
前記補正機能により補正された前記第２推定機能による推定結果に基づいて、所定のデータ処理を実行する機能と、
をコンピュータに実現させ、
前記第１推定機能および前記第２推定機能は、同一の撮像装置により撮像された画像に基づいて前記対象の位置と姿勢の少なくとも一方を推定することを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、データ処理技術に関し、特に情報処理装置、位置および／または姿勢の推定方法、およびコンピュータプログラムに関する。
【背景技術】
【０００２】
ゲーム機に接続されたヘッドマウントディスプレイ（以下「ＨＭＤ」と呼ぶ。）を頭部に装着したユーザが、ＨＭＤに表示された画面を見ながら、コントローラなどを操作してゲームプレイすることが行われている。通常の据え置き型のディスプレイでは、ディスプレイの画面の外側にもユーザの視野範囲が広がっているため、ディスプレイの画面に集中できないことがあり、またゲームへの没入感に欠けることがある。その点、ＨＭＤを装着すると、ヘッドマウントディスプレイに表示される映像以外をユーザは見ないため、映像世界への没入感が高まり、ゲームのエンタテインメント性を一層高める効果がある。
【０００３】
また、ＨＭＤにヘッドトラッキング機能をもたせ、ユーザの頭部の動きと連動して画面に表示される仮想空間等の画像が更新されるようにすると、さらに映像への没入感が向上し、ゲーム等のアプリケーションの操作性も向上する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−９５０４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
空間内における所定の対象（例えばＨＭＤ）の位置や姿勢を推定するための技術としてＳＬＡＭ（Simultaneous Localization And Mapping）が知られている。ＳＬＡＭは、カメラの撮影画像から検出した特徴点を含む局所パッチごとに、特徴点の動きを追跡し、それに基づき所定の状態変数を各時間ステップで更新する手法を含む。状態変数をカメラの位置や姿勢、移動速度、角速度、被写空間に存在する物の少なくとも１つの特徴点の位置、などとすることにより、被写空間とカメラのセンサ面との位置関係（例えば距離および角度）が撮影画像ごとに取得できる。
【０００６】
ＳＬＡＭには複数の手法が提案されており、手法毎に自己位置推定に要する時間や正確性等の特性が異なる。しかし、これまでに提案されたＳＬＡＭでは、自己位置推定の迅速性と正確性の両立は困難であった。
【０００７】
本発明はこうした課題に鑑みてなされたものであり、その目的は、所定の対象の位置と姿勢の少なくとも一方を推定する情報処理について、その迅速性と正確性の両立を支援する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様の情報処理装置は、撮像装置から取得された所定の対象の周囲の画像に基づいて、対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定部と、画像に基づいて、対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定部と、第１推定部の推定結果と第２推定部の推定結果とを比較し、比較に用いた第２推定部の推定結果より後の第２推定部の推定結果を比較結果に基づいて補正する補正部と、補正部により補正された第２推定部の推定結果に基づいて、所定のデータ処理を実行するデータ処理部と、を備える。
【０００９】
本発明の別の態様は、位置および／または姿勢の推定方法である。この方法は、撮像装置から取得された所定の対象の周囲の画像に基づいて、対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含まない推定結果を生成する第１推定処理を実行するステップと、画像に基づいて、対象の位置と姿勢の少なくとも一方を推定し、蓄積誤差を含む推定結果を生成する第２推定処理を実行するステップと、第１推定処理による推定結果と第２推定処理による推定結果とを比較し、比較に用いた第２推定処理による推定結果より後の第２推定処理による推定結果を比較結果に基づいて補正するステップと、をコンピュータが実行する。
【００１０】
なお、以上の構成要素の任意の組合せ、本発明の表現を、システム、コンピュータプログラム、コンピュータプログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１１】
本発明によれば、所定の対象の位置と姿勢の少なくとも一方を推定する情報処理について、その迅速性と正確性の両立を支援することができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態の情報処理システムの構成を示す図である。
【図２】ＨＭＤの外観を示す図である。
【図３】ＨＭＤの機能構成を示すブロック図である。
【図４】ゲーム機の機能構成を示すブロック図である。
【図５】ＨＭＤの動作を示すフローチャートである。
【図６】ゲーム機の動作を示すフローチャートである。
【図７】図６のＳ３０の状態同定処理を詳細に示すフローチャートである。
【図８】図６のＳ３２のＡｐｐ処理を詳細に示すフローチャートである。
【図９】ＶＲ画像生成までの処理を時系列に示す図である。
【図１０】第３変形例のシステムを模式的に示す図である。
【図１１】第４変形例のシステムを模式的に示す図である。
【図１２】第５変形例のシステムを模式的に示す図である。
【図１３】第６変形例のシステムを模式的に示す図である。
【図１４】第７変形例のシステムを模式的に示す図である。
【図１５】第８変形例のシステムを模式的に示す図である。
【図１６】ＶＲ画像生成までの処理を時系列に示す図である。
【発明を実施するための形態】
【００１３】
まず概要を説明する。ＨＭＤでは、ＶＲ（Virtual Reality）やＡＲ（Augmented Reality）に対するユーザの没入感を高めるため、ユーザの頭の動きに沿った画像を提示することが望ましい。そのため、ＨＭＤの位置および姿勢（向きとも言える）、またはＨＭＤを装着するユーザの位置および姿勢の情報をリアルタイムに取得する必要がある。
【００１４】
ＨＭＤの位置および姿勢を追跡する１つの方法として、ＨＭＤ外部の所定位置に固定されたカメラからＨＭＤを撮像し、ＨＭＤに搭載されたＬＥＤ群の見え方を追跡する方法がある。ただし、この方式では、固定されたカメラの画角から外れるようなＨＭＤの動きには対応できないという制限がある。
【００１５】
実施の形態のシステムでは、ＨＭＤの移動制限をなくすことを目的として、ＨＭＤに搭載したカメラの映像をＳＬＡＭにより解析することで、ＨＭＤの位置や姿勢を追跡する。具体的には、カメラが撮像したＨＭＤ周囲の実空間の画像を主な入力とし、加速度センサ、角速度センサ、地磁気センサ等の出力情報を補助的な入力として、周囲環境情報を逐次的に構築していき自己位置推定処理を実行する。なお、実施の形態の自己位置推定処理は、所定の対象（具体的にはＨＭＤ）の位置と姿勢の両方を推定することとするが、いずれか一方を推定する構成としてもよい。
【００１６】
ところでＳＬＡＭには複数の手法が提案されており、手法によりＳＬＡＭの特性は異なる。例えば、ある公知の手法のＳＬＡＭ（以下「第１ＳＬＡＭ」と呼ぶ。）では、各回の自己位置推定処理が互いに独立して、ワールド座標系における自己（実施の形態ではＨＭＤ）の絶対位置を推定する。第１ＳＬＡＭは、カメラ画像の入力から自己位置推定の結果を出力するまでの所要時間が比較的長い（例えば４５ミリ秒以上）が、誤差の蓄積がないという特性を持つ。言い換えれば、蓄積誤差（累積誤差）を含まない推定結果を生成するという特性を持つ。誤差の蓄積がないため、推定結果と真値との乖離幅は時間の経過と無関係であり、長期間における自己位置推定の正確度は相対的に高い。長期間とは例えば５秒以上であり、また例えば１００回の自己位置推定処理の実行に要する時間以上である。
【００１７】
別の公知の手法のＳＬＡＭ（以下「第２ＳＬＡＭ」と呼ぶ。）では、各回の自己位置推定結果の差分に基づいて、ワールド座標系における自己の相対位置を推定する。第２ＳＬＡＭは、カメラ画像の入力から自己位置推定の結果を出力するまでの所要時間が比較的短い（例えば１５ミリ秒以内）が、誤差が蓄積していくという特性を持つ。言い換えれば、蓄積誤差を含む推定結果を生成するという特性を持つ。徐々に蓄積される誤差が推定結果に反映されるため、推定結果と真値との乖離幅は時間の経過とともに大きくなりやすく、長期間における自己位置推定の正確度は相対的に低い。例えば、自己位置推定処理を繰り返して推定結果を複数回出力する場合、後の時点の推定結果ほど実際の位置および姿勢との乖離が大きくなりやすい。
【００１８】
このように、自己位置推定の迅速性と正確性を両立したＳＬＡＭの手法は現在存在しない。そこで実施の形態のシステムでは、蓄積誤差のない第１ＳＬＡＭの推定結果を利用して、蓄積誤差を含む第２ＳＬＡＭの推定結果を補正する。このように、特性が異なる第１ＳＬＡＭと第２ＳＬＡＭを併用しつつ双方の弱点を補完する情報処理を実行することで、自己位置推定の迅速性と正確性の両立を実現する。実施の形態では自己位置推定の対象をユーザが装着したＨＭＤとして説明するが、実施の形態の自己位置推定の技術は様々な対象に適用可能である。その一部については後段の変形例で説明する。
【００１９】
図１は、実施の形態の情報処理システム２１０の構成を示す。情報処理システム２１０において、ゲーム機２００はＶＲ画像を生成する情報処理装置（画像生成装置）として機能し、ＨＭＤ１００はそのＶＲ画像を表示する情報処理装置（画像表示装置）として機能する。ＨＭＤ１００は、無線通信またはＵＳＢ等の有線インタフェースにてゲーム機２００に接続される。ゲーム機２００は、さらにインターネット等の通信網を介してサーバに接続されてもよい。その場合、サーバは、複数のユーザが通信網を介して参加できるゲームなどのオンラインアプリケーションをゲーム機２００に提供してもよい。画像生成装置は、ゲーム機２００に代えて、ＰＣや携帯端末により実現されてもよい。
【００２０】
図２は、ＨＭＤ１００の外観を示す。ＨＭＤ１００は、本体部１１０、前頭部接触部１２０、側頭部接触部１３０、カメラ１４０を含む。本体部１１０には図３に関連して後述する各種モジュールが内蔵される。カメラ１４０は、ＨＭＤ１００の前部に設けられ、ユーザがＨＭＤ１００を装着している間、外界の様子を撮像する撮像装置である。ＨＭＤ１００は、眼鏡型やヘルメット型等、様々な形状が想定される。
【００２１】
図３は、ＨＭＤ１００の機能構成を示すブロック図である。ＨＭＤ１００は、制御部１０、通信部１２、アンテナ１４、加速度センサ１６、角速度センサ１８、地磁気センサ２０、カメラ１４０、ディスプレイ２２、時計部２４を備える。本明細書のブロック図で示す各ブロックは、ハードウェア的には、コンピュータのＣＰＵやメモリをはじめとする素子や電子回路、機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
【００２２】
通信部１２は、アンテナ１４を介して外部装置との通信処理を実行する。制御部１０は、通信部１２を介してゲーム機２００と各種データを送受する。なお、無線通信でなく有線通信であってもよい。
【００２３】
加速度センサ１６、角速度センサ１８（ジャイロセンサ）、地磁気センサ２０は、ＨＭＤの加速度、角速度、および方位を示すデータ（これらを総称する場合、「センサデータ」とも呼ぶ。）を制御部１０へ出力する。センサデータは、毎秒１０００サンプル出力されることとする。
【００２４】
カメラ１４０は、ＨＭＤ１００の周囲の実空間（言い換えれば外界）の様子を撮像し、外界の様子を示す画像データ（以下「カメラ画像」とも呼ぶ。）を制御部１０へ出力する。カメラ１４０は、二眼で一組のステレオカメラであってもよく、直接的に奥行き情報を取得可能な三次元カメラであってもよい。カメラ画像は、毎秒６０フレーム出力されることとする（６０ｆｐｓ）。ディスプレイ２２は、ユーザの目に正対するように設けられており、ゲーム機２００で生成されたＶＲ画像を表示する。時計部２４は、現在の時刻を示す時刻データを制御部１０へ出力する。
【００２５】
制御部１０は、ＨＭＤ１００における各種データ処理を実行する。制御部１０は、ＨＭＤ１００が備えるＣＰＵやＧＰＵがコンピュータプログラムをメインメモリへ読み出して実行することにより実現されてもよい。例えば、制御部１０は、加速度センサ１６、角速度センサ１８、地磁気センサ２０から入力されたセンサデータに時刻データを対応付けてゲーム機２００へ送信する。また制御部１０は、カメラ１４０から入力されたカメラ画像に時刻データを対応付けてゲーム機２００へ送信する。また制御部１０は、ゲーム機２００から送信されたＶＲ画像をディスプレイ２２に表示させる。
【００２６】
図４は、ゲーム機２００の機能構成を示すブロック図である。ゲーム機２００は、制御部３０、時計部３１、通信部３２、アンテナ３４を備える。制御部３０は、ゲーム機２００における各種データ処理を実行する。制御部３０は、ゲーム機２００が備えるＣＰＵやＧＰＵがコンピュータプログラムをメインメモリへ読み出して実行することで実現されてもよい。図４において制御部３０内に描いた状態データ保持部５４は、ゲーム機２００のメインメモリやストレージがデータを記憶することで実現されてもよい。
【００２７】
時計部３１は、現在の時刻を示す時刻データを制御部３０へ出力する。通信部３２は、アンテナ３４を介して外部装置との通信処理を実行する。制御部３０は、通信部３２を介してＨＭＤ１００と各種データを送受する。なお、無線通信でなく有線通信であってもよい。制御部３０は、状態同定部３６とＡｐｐ実行部３８を含む。
【００２８】
状態同定部３６は、ＨＭＤ１００の位置や姿勢を含むＨＭＤ１００の状態を特定するためのデータ処理を実行する。Ａｐｐ実行部３８は、状態同定部３６により特定されたＨＭＤ１００の状態を利用するゲームアプリケーションを実行する。具体的には、Ａｐｐ実行部３８は、ＨＭＤ１００の位置や姿勢に応じたＶＲ画像を生成する。状態同定部３６とＡｐｐ実行部３８は、同じパッケージもしくは異なるパッケージのコンピュータプログラムとして実装され、ゲーム機２００にインストールされてもよい。
【００２９】
状態同定部３６は、カメラ画像取得部４０、センサデータ取得部４２、第１推定部４４、第２推定部４６、特定部４８、状態データ保持部５４、状態データ提供部５６を含む。カメラ画像取得部４０は、ＨＭＤ１００から送信されたカメラ画像を取得する。カメラ画像のフレームレートは６０ｆｐｓとする。センサデータ取得部４２は、ＨＭＤ１００から送信されたセンサデータを取得する。具体的には毎秒１０００サンプルを取得する。
【００３０】
第１推定部４４は、カメラ画像およびセンサデータに基づき、第１ＳＬＡＭの手法によってＨＭＤ１００の位置および姿勢を推定する。第１推定部４４は、自己位置および姿勢を推定するための情報として、逐次的に組み上げた周囲環境情報を保持する。結果的に、最新のカメラ画像に加えて、より以前のカメラ画像も参照する。具体的には、第１推定部４４は、最新のカメラ画像に加えて過去の複数のカメラ画像に基づき、蓄積誤差を含まない推定結果を生成する。
【００３１】
その反面、第１推定部４４は、１回の推定処理に比較的長時間（実施の形態では４５ミリ秒とする）を要する。第１推定部４４は、カメラ画像取得部４０で取得されたカメラ画像の中から２０ｆｐｓのレートでカメラ画像を取得し、ＨＭＤ１００の位置および姿勢を示す情報を毎秒２０サンプル出力する。すなわち毎秒２０回の推定処理を実行する。
【００３２】
第１推定部４４が取得して自己位置推定に使用するカメラ画像は、カメラ画像取得部４０で取得される複数のカメラ画像を時間方向にダウンサンプリングしたものと言える。第１推定部４４は、自己位置推定の正確度を高めるために、所定項目のセンサデータを基準として自己位置推定に使用するカメラ画像を選択してもよい。例えば、ある時刻に対応付けられた（すなわちある時刻を示す時刻データが対応付けられた）センサデータが、角速度が所定値より小さいことを示す場合に、その時刻に対応付けられたカメラ画像を自己位置推定に使用してもよい。また、所定の単位時間（例えば５０ミリ秒）内にカメラ画像取得部４０で取得された所定数（例えば３枚）のカメラ画像のうち、角速度が最も小さい時刻に対応するカメラ画像を自己位置推定に使用してもよい。
【００３３】
第２推定部４６は、カメラ画像およびセンサデータに基づき、第２ＳＬＡＭの手法によってＨＭＤ１００の位置および姿勢を推定する。第２推定部４６は、１６ミリ秒（すなわち１フレーム分）のセンサデータに基づいて姿勢の変位を推定し、その推定値に基づいて第２ＳＬＡＭ処理を実行してもよい。第２推定部４６も、自己位置および姿勢を推定するための情報として、逐次的に組み上げた周囲環境情報を保持する。結果的に、最新のカメラ画像に加えて、より以前のカメラ画像も参照する。具体的には、第２推定部４６は、最新のカメラ画像に加え、過去の１つのカメラ画像に基づき、比較的低時間（実施の形態では１５ミリ秒とする）で１回の推定結果を生成する。
【００３４】
そのため、第２推定部４６は、カメラ画像取得部４０で取得されたカメラ画像をダウンサンプリングせずに（すなわち６０ｆｐｓのレートで）取得し、ＨＭＤ１００の位置および姿勢を示す情報を毎秒６０サンプル出力する。ただし、第２ＳＬＡＭの手法では複数回の推定処理に亘って誤差が蓄積していき、第２推定部４６は、蓄積誤差を含む推定結果を生成する。第１推定部４４および第２推定部４６は、ＨＭＤ１００の位置および姿勢を示す情報を、入力されたカメラ画像に対応付けられた時刻データに対応付けて出力する。すなわち、いつの時点の位置および姿勢であるかを識別可能な態様で出力する。
【００３５】
既述したように、第２ＳＬＡＭでは相対的な位置および姿勢（すなわち過去との差分）を推定する。第２推定部４６は、過去の推定結果を一時的に保持し、過去の推定結果に最新の推定結果（差分）を合成して、第１推定部４４と同様に絶対位置・姿勢を示す情報を出力することとする。なお、第１推定部４４と第２推定部４６が出力する位置の情報は、３次元のワールド座標系における３次元の座標値であってもよい。また、第１推定部４４および第２推定部４６が出力する姿勢の情報は、クォータニオン表現のデータであってもよく、オイラー角表現のデータであってもよい。
【００３６】
特定部４８は、第１推定部４４による推定結果、第２推定部４６による推定結果、およびセンサデータにしたがって、ＨＭＤ１００の位置および姿勢を含む状態データを生成し、状態データ保持部５４へ格納する。この状態データは、ある時刻におけるＨＭＤ１００の位置、姿勢、速度、加速度、角速度、角加速度を示すデータを含む。
【００３７】
特定部４８は、補正部５０と外挿部５２を含む。補正部５０は、同じカメラ画像をソースとした第１推定部４４による推定結果と第２推定部４６による推定結果とを比較し、その比較に用いた第２推定部４６による推定結果より後に第２推定部４６により生成された推定結果を比較結果に基づいて補正する。以下では、第１推定部４４による推定結果と第２推定部４６による推定結果の差を求めることとするが、必ずしも差を求めなくてもよい。例えば、第１推定部４４による推定結果と第２推定部４６による推定結果のそれぞれについて、生成時刻や、出力時刻、対応付けられた時刻データ等を比較してもよい。
【００３８】
実施の形態の補正部５０は、同じ時刻データに対応付けられた第１推定部４４による推定結果と第２推定部４６による推定結果との差を求め、上記差を求めた第２推定部４６による推定結果より後に第２推定部４６により生成された推定結果を上記差に基づいて補正する。ここで補正対象となる推定結果は、より新しく撮像されたカメラ画像をソースとして第２推定部４６が生成した推定結果とも言える。補正部５０は、第２推定部４６による推定結果を補正した後の値を、予め対応付けられた時刻データが示す時点におけるＨＭＤ１００の位置および姿勢の確定値として決定し、その確定値を時刻データとともに状態データ保持部５４へ格納する。
【００３９】
第１推定部４４による推定結果と第２推定部４６による推定結果の差は、ＨＭＤ１００の位置を示す座標値のずれと、ＨＭＤ１００の姿勢を示すクォータニオン値のずれの少なくとも一方を含む。補正部５０は、第１推定部４４による推定結果と第２推定部４６による推定結果との差を解消するように、その差を求めた第２推定部４６による推定結果より後の第２推定部４６による推定結果を補正する。例えば、補正部５０は、第１時点で撮像されたカメラ画像に基づく第１推定部４４による推定結果と第２推定部４６による推定結果との差を検出した場合、第１時点より後の第２時点で撮像されたカメラ画像に基づく第２推定部４６による推定結果を、先に検出した差を解消するように変更する。
【００４０】
補正部５０は、第１推定部４４による推定結果と第２推定部４６による推定結果との差を検出した場合に、第２推定部４６による１回分の推定結果に対してその差を全て解消するように補正処理を実行してもよい。言い換えれば、上記検出した差を１回の補正処理で全て解消してもよい。ただしその場合、第１推定部４４による推定結果と第２推定部４６による推定結果との差が大きいと１回の補正量も大きくなって、ＨＭＤ１００におけるＶＲ画像の表示に飛びやがたつきが生じうる。そこで、実施の形態の補正部５０は、上記検出した差を漸次的に解消するように補正処理を実行し、ＶＲ画像の表示おける飛びやがたつきの発生を抑制する。
【００４１】
具体的には、第２推定部４６は、第１推定部４４による１回の推定処理の間に、複数のカメラ画像にもとづく複数回（例えば３回）の推定処理を実行する。補正部５０は、第１推定部４４による推定結果と第２推定部４６による推定結果との差を求めてから次の第１推定部４４による推定結果が入力されるまでの間に、その差を漸次的に解消するように、その差を求めた第２推定部４６による推定結果より後の、第２推定部４６による複数回分の推定結果のそれぞれを補正する。この具体例は図９に関連して後述する。
【００４２】
外挿部５２は、補正部５０により生成された特定の時刻におけるＨＭＤ１００の位置と姿勢の確定値（毎秒６０サンプル）に基づいて、上記特定の時刻以外のＨＭＤ１００の位置と姿勢の値を外挿する。特定の時刻以外とは未来時刻も含む。具体的には、外挿部５２は、毎秒６０サンプルのＨＭＤ１００の位置と姿勢の確定値と、各時刻のセンサデータ（毎秒１０００サンプル）とに基づいて、上記特定の時刻以外のＨＭＤ１００の位置と姿勢の値を予測する。例えば、センサデータが示すＨＭＤ１００の位置または姿勢の変位方向にしたがって、上記特定の時刻以外のＨＭＤ１００の位置と姿勢の値を予測し、その予測値を各時刻に対応付けて状態データ保持部５４に格納してもよい。
【００４３】
特定部４８は、センサデータ取得部４２で取得されたセンサデータについてはそのまま時刻データに対応付けて状態データ保持部５４へ格納する。速度については加速度を積分して求めてもよく、角加速度については角速度を微分して求めてもよい。以上により、状態データ保持部５４には、過去〜現在〜未来に亘る各時刻のＨＭＤ１００の位置、姿勢、速度、加速度、角速度、角加速度を示す状態データが格納される。外挿部５２における外挿処理の速度に依存するが、例えば、ＨＭＤ１００の位置、姿勢を示す状態データは毎秒１２０サンプルを保持し、速度、加速度、角速度、角加速度を示す状態データは毎秒１０００サンプルを保持してもよい。
【００４４】
状態データ提供部５６は、ゲームアプリケーションによるＶＲ画像生成処理で必要な状態データの条件（典型的には時刻）を指定した状態データ提供要求をＡｐｐ実行部３８から受け付ける。状態データ提供部５６は、状態データ提供要求で指定された条件に一致し、もしくは、その条件に最も近い状態データを識別し、識別した状態データをＡｐｐ実行部３８へ送信する。
【００４５】
Ａｐｐ実行部３８は、状態データ取得部６０、画像生成部６２、画像提供部６４を含む。状態データ取得部６０は、ゲームアプリケーションによるＶＲ画像生成処理でＨＭＤ１００の状態データが必要になった場合に、必要な状態データの条件を識別する。この条件は例えば、１００ミリ秒後を示す未来時刻であってもよい。状態データ取得部６０は、その条件を指定した状態データ提供要求を状態同定部３６へ送信し、その条件に整合する状態データを状態同定部３６から取得する。
【００４６】
画像生成部６２は、状態データ取得部６０により取得された状態データにしたがって、ゲームアプリケーションの画面データを生成する。この画面データは、典型的にはＨＭＤ１００の位置や姿勢を反映したＶＲ画像である。例えば、ＨＭＤ１００を装着したユーザの視野に提示すべき仮想空間の映像である。画像提供部６４は、画像生成部６２により生成されたＶＲ画像をＨＭＤ１００へ送信し、そのＶＲ画像をＨＭＤ１００のディスプレイ２２に表示させる。
【００４７】
以上の構成による情報処理システム２１０の動作を説明する。
図５は、ＨＭＤ１００の動作を示すフローチャートである。カメラ１４０が所定のレートでＨＭＤ１００の周囲に広がる３次元の実空間を撮像するたびに（Ｓ１０のＹ）、制御部１０は、ＨＭＤ１００の周囲空間の画像をゲーム機２００へ送信する（Ｓ１２）。カメラ１４０の撮像処理が未実行であれば（Ｓ１０のＮ）、Ｓ１２をスキップする。ＨＭＤ１００に搭載された各種センサから加速度等のセンサデータが入力されるたびに（Ｓ１４のＹ）、制御部１０は、入力されたセンサデータをゲーム機２００へ送信する（Ｓ１６）。センサデータが未入力であれば（Ｓ１４のＮ）、Ｓ１６をスキップする。
【００４８】
制御部１０は、ゲーム機２００から送信されたＶＲ画像を、通信部１２を介して受信すると（Ｓ１８のＹ）、そのＶＲ画像をディスプレイ２２に表示させる（Ｓ２０）。ＶＲ画像を未受信であれば（Ｓ１８のＮ）、Ｓ２０をスキップする。ＶＲ画像表示の終了を指示する所定操作が入力される、または、終了を示すコマンドをゲーム機２００から受信する等、所定の終了条件が充足されると（Ｓ２２のＹ）、本図のフローを終了する。終了条件が未充足であれば（Ｓ２２のＮ）、Ｓ１０に戻る。
【００４９】
図６は、ゲーム機２００の動作を示すフローチャートである。ゲーム機２００は、状態同定部３６による自己位置推定を含むデータ処理と、Ａｐｐ実行部３８によるゲームアプリケーションのデータ処理とを並行して実行する（Ｓ３０）（Ｓ３２）。ユーザから終了操作が入力される等、所定の終了条件が充足されると（Ｓ３４のＹ）（Ｓ３６のＹ）、本図のフローを終了する。終了条件が未充足であれば（Ｓ３４のＮ）（Ｓ３６のＮ）、Ｓ３０およびＳ３２を繰り返し実行する。
【００５０】
図７は、図６のＳ３０の状態同定処理を詳細に示すフローチャートである。カメラ画像取得部４０は、ＨＭＤ１００から提供されたカメラ画像を取得する（Ｓ４０）。センサデータ取得部４２は、ＨＭＤ１００から提供されたセンサデータを取得する（Ｓ４２）。第１推定部４４と第２推定部４６のそれぞれは、第１ＳＬＡＭによる自己位置推定処理と、第２ＳＬＡＭによる自己位置推定処理を並行して実行する（Ｓ４４）（Ｓ４６）。補正部５０は、第１推定部４４による推定結果と、第２推定部４６による推定結果の間の誤差を推定し（Ｓ４８）、その誤差を解消するように第２推定部４６による推定結果を補正する（Ｓ５０）。
【００５１】
外挿部５２は、Ｓ４２で取得されたセンサデータに基づいてＨＭＤ１００の動作を予測し、ＨＭＤ１００の位置および姿勢のデータを外挿する（Ｓ５２）。特定部４８は、Ｓ５０、Ｓ５２で決定された各時刻におけるＨＭＤ１００の位置・姿勢を示す状態データと、Ｓ４２で取得された各時刻におけるＨＭＤ１００の速度、加速度、角速度、角加速度を示す状態データを状態データ保持部５４に格納する（Ｓ５４）。状態データ提供部５６は、Ａｐｐ実行部３８から状態データの提供要求を受け付けると（Ｓ５６のＹ）、その要求で指定された時刻に該当する状態データをＡｐｐ実行部３８へ提供する（Ｓ５８）。状態データの提供要求を受け付けなければ（Ｓ５６のＮ）、Ｓ５８をスキップする。
【００５２】
図８は、図６のＳ３２のＡｐｐ処理を詳細に示すフローチャートである。予め定められたリフレッシュレート等に基づきＶＲ画像の更新タイミングに達したことを検出すると（Ｓ６０のＹ）、状態データ取得部６０は、描画すべきＶＲ画像の条件（描画対象の時刻等）に整合する状態データを状態同定部３６から取得する（Ｓ６２）。画像生成部６２は、Ｓ６２で取得された状態データに基づいて、描画対象時刻におけるＨＭＤ１００の位置・姿勢に整合するＶＲ画像を生成する（Ｓ６４）。画像提供部６４は、Ｓ６４で生成されたＶＲ画像をＨＭＤ１００へ送信し、ユーザへ提示させる（Ｓ６６）。ＶＲ画像の更新タイミングに至らなければ（Ｓ６０のＮ）、Ｓ６２以降の処理をスキップする。
【００５３】
図９は、ＶＲ画像生成までの処理を時系列に示す。同図では、各処理の実行時間をタイムライン上に示しており、符号は各処理で生成されるデータを指している。第１推定部４４による１回の推定処理が実行される間に、第２推定部４６による３回の推定処理が実行される。なお、第１ＳＬＡＭ（第１推定部４４）と第２ＳＬＡＭ（第２推定部４６）はともに、自己位置を推定するための情報として、逐次的に組み上げた周囲環境情報を保持する。したがって実質的には、矢印で関連づけたカメラ画像に加えて、より過去のカメラ画像も参照していることになる。
【００５４】
補正部５０は、同じソースであるカメラ画像７０に基づく第２ＳＬＡＭ推定結果８０と、第１ＳＬＡＭ推定結果９０との誤差を推定する。ここでは誤差「Ａ」が推定されたこととする。図９では、誤差に基づく補正値の推移を破線で示している。補正部５０は、誤差推定対象とした第２ＳＬＡＭ推定結果８０以降の、カメラ画像７１に基づく第２ＳＬＡＭ推定結果８１、カメラ画像７２に基づく第２ＳＬＡＭ推定結果８２、カメラ画像７３に基づく第２ＳＬＡＭ推定結果８３のそれぞれを、誤差「Ａ」を徐々に解消するように補正する。
【００５５】
例えば、第１ＳＬＡＭの所要時間と第２ＳＬＡＭの所要時間の差に基づいて誤差を按分し、按分後の値を複数回の補正処理に亘り適用してもよい。図９の例では、第１ＳＬＡＭ推定結果９２の入力前に３回の補正処理を実行するため、（Ａ／３）を調整値として、各回の補正処理で第２ＳＬＡＭ推定結果を（Ａ／３）ずつ均等に補正してもよい。
【００５６】
補正部５０は、カメラ画像７２に基づく第２ＳＬＡＭ推定結果８２と、第１ＳＬＡＭ推定結果９２との誤差をさらに推定する。ここでは誤差「Ｂ」が推定されたこととする。補正部５０は、誤差推定対象とした第２ＳＬＡＭ推定結果８２以降の、カメラ画像７４に基づく第２ＳＬＡＭ推定結果８４、カメラ画像７５に基づく第２ＳＬＡＭ推定結果８５のそれぞれを、誤差「Ｂ」を徐々に解消するように補正する。
【００５７】
実施の形態の情報処理システム２１０によると、低速だが蓄積誤差を含まない推定結果を生成する第１ＳＬＡＭと、高速だが蓄積誤差を含む推定結果を生成する第２ＳＬＡＭを併用し、互いの弱点を補完することで、自己位置推定の迅速性と正確性の両立を実現できる。また、ＨＭＤ１００（言い換えればＨＭＤ１００を装着したユーザ）の位置・姿勢を正確に反映したＶＲ画像を高速に提供できるヘッドマウントディスプレイシステムを実現できる。これにより、ＨＭＤ１００が提示するＶＲ画像の、ユーザの頭部の動きに対する追従性を向上させ、ユーザに酔いを感じさせてしまうことを抑制できる。
【００５８】
また実施の形態の情報処理システム２１０では、第１ＳＬＡＭと第２ＳＬＡＭのそれぞれに対して入力するカメラ画像は共通であるため、１つのカメラで実現することができ、ＨＭＤ１００のコストを低減できる。また、第１ＳＬＡＭによる推定結果と第２ＳＬＡＭによる推定結果の差を、漸次的に解消するよう第２ＳＬＡＭによる複数回分の推定結果を補正する。これにより、１回の補正の前後でＨＭＤ１００の位置・姿勢が大きく変化することを抑制し、ＶＲ画像の滑らかな変化を実現できる。また、ユーザに違和感を抱かせてしまうことを抑制できる。
【００５９】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。以下、変形例を示す。各変形例の説明において、同一または対応する部材には同じ符号を付している。実施の形態と重複する記載、および、変形例間で重複する記載は適宜省略する。
【００６０】
第１変形例を説明する。実施の形態で示したＨＭＤ１００（図３）とゲーム機２００（図４）の機能分担は一例である。例えば、図４に示したゲーム機２００の機能ブロックのうち少なくとも一部をＨＭＤ１００側に備える構成としてもよい。また、ＨＭＤ１００に十分なハードウェアリソースを搭載可能な場合、図４の状態同定部３６とＡｐｐ実行部３８の機能をＨＭＤ１００の制御部が実行してもよい。
【００６１】
第２変形例を説明する。第１推定部４４は、相対的に高画質のカメラ画像に基づいてＨＭＤ１００の位置と姿勢の少なくとも一方を推定し、第２推定部４６は、相対的に低画質のカメラ画像に基づいてＨＭＤ１００の位置と姿勢の少なくとも一方を推定してもよい。例えば、ＨＭＤ１００に、ＨＤ画質（高解像度）の撮像画像を出力する第１カメラと、ＶＧＡ画質（低解像度）の撮像画像を出力する第２カメラを設け、第１カメラの出力画像を第１推定部４４が解析し、第２カメラの出力画像を第２推定部４６が解析する構成としてもよい。
【００６２】
また実施の形態と同様に、１つのカメラを設け、そのカメラはＨＤ画質（高解像度）の撮像画像を６０ｆｐｓのレートで出力してもよい。この場合、ゲーム機２００のカメラ画像取得部４０は、第１推定部４４に対して、カメラ１４０の撮像画像を時間方向にダウンサンプリングしたカメラ画像（２０ｆｐｓ、ＨＤ画質）を入力してもよい。またカメラ画像取得部４０は、第２推定部４６に対して、カメラ１４０の撮像画像を空間方向にダウンサンプリングしたカメラ画像（６０ｆｐｓ、ＶＧＡ画質）を入力してもよい。
【００６３】
第２変形例によると、第１推定部４４には高画質のカメラ画像を入力することで正確な自己位置推定を実現させることができる。また第２推定部４６には低画質のカメラ画像を入力することで、画像解析の負荷を低減させ、高速な自己位置推定を実現させることができる。また、１つのカメラであっても、第１推定部４４と第２推定部４６のそれぞれに対して好適な画質のカメラ画像を入力することができる。
【００６４】
第３変形例を説明する。図１０は、第３変形例のシステムを模式的に示す。第３変形例のＨＭＤ１００は複数のカメラを備える。複数のカメラのそれぞれは、ＨＭＤ１００から見て異なる方向の実空間を撮像する。図１０のカメラ１４０ａ、カメラ１４０ｂ、カメラ１４０ｃ、カメラ１４０ｄのそれぞれは、ＨＭＤ１００の前方空間（例えばユーザの視線方向）、後方空間、左方空間、右方空間を撮像する。ゲーム機２００は、複数の第１推定部（第１推定部４４ａ、第１推定部４４ｂ、第１推定部４４ｃ、第１推定部４４ｄ）を備え、また複数の第２推定部（第２推定部４６ａ、第２推定部４６ｂ、第２推定部４６ｃ、第２推定部４６ｄ）を備える。これらは複数のプロセスやスレッドとして実現されてよく、これらの機能は複数のＣＰＵやＧＰＵにより分散して実行されてもよい。
【００６５】
複数の第１推定部と複数の第２推定部のそれぞれは、予め対応付けられたカメラによる撮像画像に基づいて、互いに独立して自己位置推定処理を実行する。ゲーム機２００は集計部１５０をさらに備える。集計部１５０は、複数の第１推定部のそれぞれによる推定結果を集計して（言い換えれば合成して）、１つの推定結果を生成する。また、複数の第２推定部のそれぞれによる推定結果を集計して、１つの推定結果を生成する。なお、同じ時刻データが対応付けられた推定結果を集計する。以降の補正処理は実施の形態と同様である。第３変形例によると、複数のカメラによる撮像画像に基づいて、自己位置推定の正確度を高めることができる。
【００６６】
複数の第１推定部による推定結果を集計する例を説明する。複数の第２推定部による推定結果を集計する場合も同様である。（１）集計部１５０は、複数の第１推定部のそれぞれによる推定結果の平均値を、第１推定部による確定的な推定結果として決定してもよい。（２）奥行き方向の位置推定の信頼性は相対的に低い。そこで集計部１５０は、複数の第１推定部による推定結果において、奥行き方向の位置は採用せず、各推定結果における縦横の位置（２次元座標値）を組み合わせて３次元の位置（３次元座標値）を生成してもよい。
【００６７】
（３）特徴量が大きいカメラ画像の方が位置推定の信頼性が高い。例えば、様々なオブジェクトが写っているカメラ画像ほど位置推定の信頼性が高い。そこで集計部１５０は、入力されたカメラ画像から検出された特徴量の大小や特徴点の個数を各第１推定部から受け付け、特徴量が大きい（特徴点が多い）カメラ画像に基づく推定結果ほど他の推定結果より優先的に採用してもよい。例えば、特徴量が最も大きいカメラ画像に基づく推定結果を、第１推定部による確定的な推定結果として決定してもよい。また、特徴量の大小に基づいて重み付けを設定し、各推定結果の加重平均値を算出してもよい。
【００６８】
第４変形例を説明する。図１１は、第４変形例のシステムを模式的に示す。第３変形例と同様に、第４変形例のＨＭＤ１００も、互いに異なる方向の実空間を撮像する複数のカメラ（カメラ１４０ａ、カメラ１４０ｂ、カメラ１４０ｃ、カメラ１４０ｄ）を備える。ゲーム機２００は、１つの第１推定部４４と複数の第２推定部（第２推定部４６ａ、第２推定部４６ｂ、第２推定部４６ｃ、第２推定部４６ｄ）を備える。第１推定部４４には、複数のカメラのそれぞれが撮像したカメラ画像が２０ｆｐｓのレートで入力される。その一方、複数の第２推定部のそれぞれには、対応するカメラが撮像したカメラ画像が６０ｆｐｓのレートで入力される。
【００６９】
第１推定部４４による自己位置推定は、時間がかかることは許容される一方、蓄積誤差を含まない推定結果が求められ、言い換えれば、長期間における相対的に正確度の高い推定結果が求められる。そのため、第１推定部４４に入力される画像は、情報量が多い画像が望ましく、また現実との乖離が小さい画像が望ましい。例えば、第１推定部４４に入力される画像は、複数のカメラのそれぞれによる撮像画像を合成したパノラマ画像であってもよい。また、複数のカメラのそれぞれによる撮像画像を合成した、ＨＭＤ１００の周囲３６０度の全方位の様子を示す画像（例えば全天球画像）であってもよい。さらにまた、キャリブレーションにより正確性を高めた画像であってもよい。ＨＭＤ１００またはゲーム機２００は、複数のカメラのそれぞれによる撮像画像を合成し、および／または、キャリブレーションを行うカメラ画像調整部（不図示）を備えてもよい。
【００７０】
その一方、第２推定部４６による自己位置推定は、蓄積誤差を含む推定結果が許容され、言い換えれば、長期間における相対的に正確度の低い推定結果が許容される一方、迅速性が求められる。したがって、第２推定部４６に入力される画像には、情報量や正確性よりも高レートが要求される。そこで第４変形例では、複数のカメラのそれぞれによる撮像画像を、合成やキャリブレーション等の調整を行わずにそのまま第２推定部４６へ入力する。集計部１５０は、第３変形例と同様に、複数の第２推定部による推定結果を集計する。第４変形例によると、複数のカメラを備えることによる自己位置推定の正確度向上に加えて、第１推定部４４に対して情報量や正確性が高い画像を入力することにより、第１推定部４４による自己位置推定の正確度を一層高めることができる。
【００７１】
第５変形例を説明する。図１２は、第５変形例のシステムを模式的に示す。第５変形例のＨＭＤ１００は、ローリングシャッター方式の（例えばＣＭＯＳイメージセンサを用いた）複数のカメラ（カメラ１４０ａ、カメラ１４０ｂ）を備える。またＨＭＤ１００は、グローバルシャッター方式の（例えばＣＣＤイメージセンサを用いた）複数のカメラ（カメラ１４０ｃ、カメラ１４０ｄ）も備える。カメラ１４０ａとカメラ１４０ｃはＨＭＤ１００の前方空間を撮像し、カメラ１４０ｂとカメラ１４０ｄはＨＭＤ１００の後方空間を撮像してもよい。
【００７２】
カメラ１４０ａおよびカメラ１４０ｂの撮像画像では、高速で移動するオブジェクト等に対して歪みが生じうる。そのため、ＨＭＤ１００またはゲーム機２００は、カメラ１４０ａおよびカメラ１４０ｂの撮像画像を補正するためのカメラ画像補正部（不図示）をさらに備える。第１推定部４４ａおよび第１推定部４４ｂは、カメラ画像補正部により補整されたカメラ画像に基づいて自己位置推定を実行する。カメラ１４０ｃおよびカメラ１４０ｄの撮像画像には歪みは生じないため、第２推定部４６ａおよび第２推定部４６ｂは、カメラ１４０ｃおよびカメラ１４０ｄの撮像画像をそのまま使用して自己位置推定を実行する。
【００７３】
高速な自己位置推定が求められる第２推定部に対しては、高レートでカメラ画像を入力する必要があるため、グローバルシャッター方式のカメラを使用することが望ましい。その一方、第１推定部による自己位置推定は比較的長時間を要する。そのため、第１推定部に対するカメラ画像の入力レートは低くてよく、カメラの撮像画像に対する補正時間を確保できる。したがって、第１推定部への入力画像を撮像するカメラとして、ローリングシャッター方式のカメラを使用することでＨＭＤ１００の製造コストを低減できる。
【００７４】
また第２変形例で既述したように、正確性が求められる第１推定部には相対的に高画質（例えばＨＤ画質）の画像を入力し、迅速性が求められる第２推定部には相対的に低画質（例えばＶＧＡ画質）の画像を入力してもよい。この場合に第５変形例の構成は好適である。グローバルシャッター方式のカメラは高解像度への対応が容易でない一方、ローリングシャッター方式のカメラは高解像度への対応が容易だからである。第５変形例によると、第１推定部４４と第２推定部４６の特性の違いと、ローリングシャッター方式とグローバルシャッター方式の特性の違いに基づいて、速度・正確度・コストに優れた自己位置推定を実現できる。
【００７５】
第６変形例を説明する。図１３は、第６変形例のシステムを模式的に示す。第６変形例のＨＭＤ１００は全天球カメラ１４２を備える。全天球カメラ１４２に代えて、広角カメラを備えてもよい。全天球カメラ１４２は、魚眼レンズ等を用いて広範囲を撮像し、パノラマ画像を生成する。第６変形例では、ＨＭＤ１００の周囲３６０度の全方位の様子を示す画像である全天球画像を生成する。ＨＭＤ１００またはゲーム機２００は、注目領域決定部１５１と画像切出し部１５２をさらに備える。
【００７６】
注目領域決定部１５１は、全天球画像から第２推定部４６への入力画像を切り出すための注目領域情報を生成する。注目領域情報は、例えば、ユーザの注目方向、言い換えればユーザの視線方向を示す情報であってもよい。ユーザの視線方向を検知するセンサがＨＭＤ１００にさらに設けられてもよい。また、全天球画像の所定領域（例えば中心部分）がＨＭＤ１００の前方空間を示すように予め定められている場合、注目領域情報はその所定領域（例えば全天球画像の中心部分）を示す情報であってもよい。また注目領域決定部１５１は、全天球画像の各領域について自己位置推定のための特徴量（例えばオブジェクト数）を計数し、その特徴量が相対的に多い領域を注目領域として決定してもよい。自己位置推定の正確度が向上するからである。
【００７７】
画像切出し部１５２は、注目領域決定部１５１により決定された注目領域情報にしたがって、第１推定部４４へ入力される全天球画像の一部であり、全天球画像の中から注目領域を切り出した画像である注目領域画像を生成する。第１推定部４４は、全天球カメラ１４２から出力された全天球画像に基づいて自己位置推定を実行する。実施の形態と同様に、６０ｆｐｓのレートで入力された全天球画像から、センサデータ等に基づいて解析対象の全天球画像を２０ｆｐｓのレートで選択してもよい。第２推定部４６は、画像切出し部１５２により生成された注目領域画像に基づいて自己位置推定を実行する。
【００７８】
第６変形例の構成によると、情報量が多い全天球画像を第１推定部４４へ入力することにより、第１推定部４４による自己位置推定の正確度を高めることができる。全天球画像の解析には時間を要するが、第１推定部４４では迅速性よりも正確性が求められるため、全天球画像の入力が好適である。その一方、情報量が少ない注目領域画像を第２推定部４６へ入力することにより、第２推定部４６による迅速な自己位置推定を維持できる。ただし、注目領域画像が自己位置推定のソースになるため、第２推定部４６による自己位置推定の正確度低下も抑制できる。
【００７９】
第７変形例を説明する。図１４は、第７変形例のシステムを模式的に示す。第７変形例のＨＭＤ１００は、互いに異なる方向の実空間を撮像する複数のカメラ（カメラ１４０ａ、カメラ１４０ｂ、カメラ１４０ｃ、カメラ１４０ｄ）を備える。ＨＭＤ１００またはゲーム機２００は、注目領域決定部１５１、画像合成部１５４、画像選択部１５６をさらに備える。
【００８０】
画像合成部１５４は、複数のカメラのそれぞれによる撮像画像を合成してパノラマ画像（例えば全天球画像）を生成する。注目領域決定部１５１は、第６変形例と同様に注目領域を決定する。画像選択部１５６は、複数のカメラのそれぞれによる撮像画像の中から、注目領域決定部１５１により決定された注目領域に該当する撮像画像を注目領域画像として選択する。例えば、注目領域がＨＭＤ１００の前方であれば、ＨＭＤ１００の前方空間を撮像する特定のカメラの撮像画像を注目領域画像として選択する。
【００８１】
第１推定部４４は、画像合成部１５４により生成されたパノラマ画像に基づいて自己位置推定を実行し、第２推定部４６は、画像選択部１５６により選択された注目領域画像に基づいて自己位置推定を実行する。第７変形例の構成においても、第６変形例と同様の効果を奏する。
【００８２】
第８変形例を説明する。第２推定部４６は、第１推定部４４による１回の推定処理の間に、複数のカメラ画像に基づく複数回の推定処理を実行する。第１推定部４４は、複数のカメラ画像に基づく複数回の推定処理を並行して実行する。補正部５０は、第１推定部４４による並行した推定処理のそれぞれで推定結果が出力された場合に第２推定部４６の推定結果との差を更新する。
【００８３】
図１５は、第８変形例のシステムを模式的に示す。第８変形例のゲーム機２００は、複数の第１推定部（第１推定部４４ａ、第１推定部４４ｂ、第１推定部４４ｃ）と、１つの第２推定部４６と、振分け部１５８を備える。複数の第１推定部は複数のプロセスやスレッドとして実現されてよく、複数の第１ＳＬＡＭ処理が複数のＣＰＵやＧＰＵにより分散して並行実行されてもよい。
【００８４】
第１推定部の個数は、第１ＳＬＡＭ処理の所要時間（カメラ画像の入力から推定結果生成までに要する時間）と、第２ＳＬＡＭ処理の所要時間の差に基づいて決定されてよい。例えば、第１ＳＬＡＭ処理の所要時間が第２ＳＬＡＭ処理の所要時間の６倍である場合、言い換えれば、第１ＳＬＡＭ推定結果が１回生成されるまでに第２ＳＬＡＭ推定結果が６回生成される場合、第１ＳＬＡＭ処理を６並列で実行してもよい。第８変形例では、実施の形態と同様に、第１ＳＬＡＭ処理の所要時間が第２ＳＬＡＭ処理の所要時間の３倍であることとし、図１５のように第１ＳＬＡＭ処理を３並列で実行する。
【００８５】
振分け部１５８は、ラウンドロビン（３並列であればｍｏｄ３）等の所定のアルゴリズムにしたがって、カメラ画像を複数の第１推定部に均等に振分ける。第１推定部４４ａ〜第１推定部４４ｃを合計すると、第１ＳＬＡＭ推定結果は、第２ＳＬＡＭ推定結果と同様に、毎秒６０サンプル出力される。補正部５０は、同じ時刻データに対応付けられた第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差を検出し、その差に基づいて、差を検出した第２ＳＬＡＭ推定結果より後の第２ＳＬＡＭ推定結果を補正する。
【００８６】
第１推定部の並列処理により第１ＳＬＡＭ推定結果が高頻度で出力される結果、補正部５０は、第１推定部の並列数に応じた頻度で、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との比較結果を更新し、言い換えれば、補正対象となる差を更新する。すなわち、補正部５０は、実施の形態よりも高頻度で、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差を検出して補正処理を実行する。
【００８７】
図１６は、ＶＲ画像生成までの処理を時系列に示す。同図では、各処理の実行時間をタイムライン上に示しており、符号は各処理で生成されるデータを指している。既述したように、第１推定部４４による１回の推定処理が実行される間に、第２推定部４６による３回の推定処理が実行されるため、第１推定部４４を３並列で動作させる。補正部５０は、同じソースであるカメラ画像７６に基づく第２ＳＬＡＭ推定結果８６と、第１ＳＬＡＭ推定結果９６との誤差を推定する。ここでは誤差「Ｃ」が推定されたとする。補正部５０は、誤差推定対象とした第２ＳＬＡＭ推定結果８６以降の、カメラ画像７８に基づく第２ＳＬＡＭ推定結果８８を誤差「Ｃ」を解消するように補正する。
【００８８】
また補正部５０は、カメラ画像７７に基づく第２ＳＬＡＭ推定結果８７と、第１ＳＬＡＭ推定結果９７との誤差を推定する。ここでは誤差「Ｄ」が推定されたとする。補正部５０は、誤差推定対象とした第２ＳＬＡＭ推定結果８７以降の、カメラ画像７９に基づく第２ＳＬＡＭ推定結果８９を誤差「Ｄ」を解消するように補正する。
【００８９】
第１推定部４４の並列処理を行わない場合、例えば図９の場合、あるカメラ画像に基づく第２ＳＬＡＭ推定結果を補正するソースは、２フレーム前、３フレーム前、または４フレーム前のカメラ画像に基づく第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差になる。これに対して図１６では、あるカメラ画像に基づく第２ＳＬＡＭ推定結果を補正するソースは、常に２フレーム前のカメラ画像に基づく第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差になる。
【００９０】
また不図示だが、第１ＳＬＡＭ推定結果が１回生成されるまでに第２ＳＬＡＭ推定結果が６回生成される場合、第１推定部４４の並列処理を行わないとすると、あるカメラ画像に基づく第２ＳＬＡＭ推定結果を補正するソースは、５フレーム前〜１０フレーム前のカメラ画像に基づく第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差になる。これに対して、第１推定部４４を６並列で動作させると、あるカメラ画像に基づく第２ＳＬＡＭ推定結果を補正するソースは、常に５フレーム前のカメラ画像に基づく第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差になる。
【００９１】
このように、第８変形例の構成によると、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差を検出する頻度が高まり、補正の頻度も高まる。例えば、ＨＭＤ１００の急な動き等に伴い第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差が大きくなっても、その差を迅速に解消可能になる。すなわち、最新のＨＭＤ１００の位置・姿勢をより迅速にＶＲ画像へ反映させることができる。
【００９２】
第９変形例を説明する。実施の形態の補正部５０は、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差を漸次的に解消するように、複数回の第２ＳＬＡＭ推定結果のそれぞれを補正することとした。また実施の形態では、個々の補正処理での調整値を均等にする例を示した。変形例として、補正候補の第２ＳＬＡＭ推定結果のうちＨＭＤ１００の動作が検出された時刻に対応付けられた第２ＳＬＡＭ推定結果を補正対象とし、位置および／または姿勢の値を調整してもよい。補正部５０は、ＨＭＤ１００の動作有無を、加速度や角速度等、１つ以上のセンサデータにより判定してもよい。
【００９３】
ＨＭＤ１００が動かない（すなわちＨＭＤ１００を装着したユーザの頭部が動かない）場合であっても、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との差は生じうる。補正部５０による補正後の位置・姿勢に基づくＶＲ画像の内容は、それまで表示中のＶＲ画像の内容と異なる。その結果、ユーザが動いていないにも関わらず仮想空間の見え方が変わり、ユーザに違和感を抱かせることがある。第９変形例の構成によると、ＨＭＤ１００の動きがなければ、補正処理に伴うＶＲ画像の変化を抑制できるため、ユーザの違和感を抑制できる。なお、ある時点で検出した第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との誤差を、次に誤差を検出するまでに解消していない場合、補正部５０は、未解消（解消途中）の誤差は破棄し、新たに検出した誤差を適用して補正処理を実行してもよい。
【００９４】
第１０変形例を説明する。実施の形態の状態同定部３６は、低速だが蓄積誤差を含まない結果を生成する第１推定部４４（第１ＳＬＡＭ）と、高速だが蓄積誤差を含む結果を生成する第２推定部４６（第２ＳＬＡＭ）を備えた。変形例として、状態同定部３６は、別の特性を持つＳＬＡＭを備えてもよい。具体例として第１０変形例の状態同定部３６は、蓄積誤差を含まないが短期的な正確度が相対的に低い結果を生成する第１推定部４４（第１ＳＬＡＭ）と、蓄積誤差を含むが短期的な正確度が相対的に高い推定結果を生成する第２推定部４６（第２ＳＬＡＭ）を備える。
【００９５】
本変形例の第２推定部４６は、短期間における推定結果として、第１推定部４４による推定結果よりも正確度が高い推定結果を生成する。例えば、第２推定部４６が生成する前回の推定結果からの差分情報（相対位置情報）は、第１推定部４４が生成する絶対位置情報よりも正確度が高い。ここで短期間とは例えば５秒未満であり、また例えば１００回の自己位置推定処理の実行に要する時間未満である。なお、本変形例では、第１ＳＬＡＭと第２ＳＬＡＭとの１回の推定処理の速度差は問題にせず、以下では両者の処理速度は同じとする。
【００９６】
実施の形態と同様に、第２推定部４６の推定結果は蓄積誤差を含むため、時間の経過とともに真値との乖離幅は大きくなりやすいが、蓄積誤差を除去すれば正確度が高い推定結果が残る。そこで実施の形態と同様に、第２推定部４６の推定結果から蓄積誤差を除去するために第１推定部４４の推定結果を利用する。ただし、第１推定部４４の推定結果は短期的な正確度が相対的に低く、言い換えれば、短期的な誤差が相対的に大きい。そのため本変形例の第１推定部４４（補正部５０等、別ブロックでもよい）は、複数回の推定結果を時間方向に平滑化する。
【００９７】
具体的には、第１推定部４４は、複数回のカメラ画像入力に基づく複数回の推定処理結果の平均値を平滑化後の推定結果として出力してもよい。移動平均等、公知の平均化処理を実行してもよい。また、公知のフィルタリング処理（カルマンフィルタ等）を実行して短期的な誤差を含む推定結果を平滑化してもよい。平滑化は、推定結果に含まれる高周波成分を除去することとも言える。複数回の推定結果を平滑化する場合、結果として、第１推定部４４からの推定結果の出力は遅延する。例えば、第１推定部４４による１回の推定処理の時間が第２推定部４６と同様に１５ミリ秒であっても、３回の推定結果に基づき平滑化処理を実行する場合、実施の形態と同様に、第１推定部４４は、平滑化後の推定結果を得るために４５ミリ秒を要することになる。
【００９８】
補正部５０は、実施の形態と同様に、第１推定部４４による推定結果と第２推定部４６による推定結果とを比較し、その比較結果に基づいて以降の第２推定部４６による推定結果を補正する。例えば、第１推定部４４による推定結果と第２推定部４６による推定結果との差を検出し、その差を解消するように以降の第２推定部４６による推定結果を補正する。これにより、第２推定部４６の推定結果から蓄積誤差を除去し、正確度が高い位置・姿勢の推定結果を得ることができる。
【００９９】
第１１変形例を説明する。実施の形態では言及していないが、補正部５０は、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との誤差を検出した場合に、その誤差を示す情報を第２推定部４６へフィードバックしてもよい。第２推定部４６は、それまで構築していた周囲環境情報を、補正部５０からフィードバックされた誤差に基づいて修正してもよい。すなわち、第１ＳＬＡＭ推定結果と第２ＳＬＡＭ推定結果との誤差が検出されると、第２推定部４６は、検出された誤差に基づいて、それまで自身が蓄積した誤差をリセットしてもよい。これにより、蓄積誤差を含む第２推定部４６の周囲環境情報を、第１推定部４４が構築している周囲環境情報と同期させることができる。
【０１００】
第１２変形例を説明する。実施の形態の情報処理システム２１０では、ＨＭＤ１００に表示させる適切なＶＲ画像を生成するために、ＨＭＤ１００の位置および姿勢を推定した。本明細書（実施の形態および上記変形例）に記載の自己位置推定技術は、ＶＲ画像の生成に限られず、ＨＭＤ１００の位置および姿勢に応じたＡＲ画像の生成にも有効である。この場合、ＨＭＤ１００は、前方（言い換えればユーザの視線方向）からの可視光を透過する光学透過型のＨＭＤであってもよい。また、カメラ１４０で撮像された外界の映像を、ＡＲ画像生成のレイテンシにあわせてディスプレイ２２に遅延表示させ、その外界の映像にＡＲ画像を重畳して表示させてもよい。
【０１０１】
第１３変形例を説明する。本明細書に記載の自己位置推定技術は、ＨＭＤに限られず、所定の対象の位置および／または姿勢に応じて適切な情報処理を実行すべき様々な装置やシステムに適用可能である。例えば、図４のＡｐｐ実行部３８を、状態同定部３６による自己位置推定の結果に基づいてゲーム以外の様々な情報処理を実行するブロックに置き換えることができる。
【０１０２】
本明細書に記載の自己位置推定技術の適用先の一例として、車載機やドローンが挙げられる。ドローンは、遠隔操縦または自律式の移動機械全般を含み、例えば無人車両、無人航空機、無人船舶を含む。もちろん遠隔操縦または自律式のクワッドコプター、マルチコプターを含む。本明細書に記載の自己位置推定技術を車載機やドローンへ適用することで、自動車（またはドローン）の外面に取り付けたカメラの画像に基づいて、自動車（またはドローン）の位置や姿勢を高速かつ正確に把握できる。そして、リアルタイムの位置・姿勢情報に基づく高品質な自動運転処理やナビゲーション処理を実行させることができる。
【０１０３】
上述した実施の形態および変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施の形態および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【符号の説明】
【０１０４】
４０  カメラ画像取得部、  ４２  センサデータ取得部、  ４４  第１推定部、  ４６  第２推定部、  ５０  補正部、  ５６  状態データ提供部、  ６０  状態データ取得部、  ６２  画像生成部、  ６４  画像提供部、  １００  ＨＭＤ、  １４０  カメラ、  ２００  ゲーム機、  ２１０  情報処理システム。
【図１】
0006556015.tif 000002
【図２】
0006556015.tif 000003
【図３】
0006556015.tif 000004
【図４】
0006556015.tif 000005
【図５】
0006556015.tif 000006
【図６】
0006556015.tif 000007
【図７】
0006556015.tif 000008
【図８】
0006556015.tif 000009
【図９】
0006556015.tif 000010
【図１０】
0006556015.tif 000011
【図１１】
0006556015.tif 000012
【図１２】
0006556015.tif 000013
【図１３】
0006556015.tif 000014
【図１４】
0006556015.tif 000015
【図１５】
0006556015.tif 000016
【図１６】
0006556015.tif 000017