(58)【調査した分野】(Int.Cl.,DB名)
前記第1姿勢補正部は、前記角速度センサが検出する角速度に基づいて前記回転量を算出し、前記加速度センサが検出する加速度と当該回転量とに基づいて、前記第1の姿勢を補正して、前記第2の姿勢を算出する、
請求項1に記載のプログラム。
前記コンピュータを、前記角速度センサが検出する角速度に基づいて前記回転量を算出し、前記加速度センサが検出する加速度と当該回転量とに基づいて、第1の補正量を決定する補正量決定部としてさらに機能させ、
前記第1の補正量は、前記角速度センサが検出する角速度が増大するにつれて増加し、
前記第1姿勢補正部は、前記第1の補正量を用いて前記第1の姿勢を補正して、前記第2の姿勢を算出する、
請求項2に記載のプログラム。
前記最大補正量算出部は、前記角速度センサが検出する角速度に基づいて算出した前記回転量に所定値を加算することにより、前記第3の補正量を算出する、請求項4に記載のプログラム。
【発明の概要】
【発明が解決しようとする課題】
【0004】
本発明は、このような事情に鑑みてなされたものであり、角速度に基づいて算出される装置の姿勢の誤差を、当該装置の状況に応じてより適切に補正することを目的とする。
【課題を解決するための手段】
【0005】
上記の課題を解決するため、本発明の一実施形態に係るプログラムは、角速度センサと加速度センサを有する表示装置のコンピュータにより実行されるプログラムであって、前記コンピュータを、前記角速度センサが検出する角速度に基づいて前記表示装置の第1の姿勢を算出する姿勢算出部と、前記加速度センサが検出する加速度と前記表示装置の所定時間における回転量とに基づいて、前記第1の姿勢を補正して、第2の姿勢を算出する第1姿勢補正部と、前記第2の姿勢に応じた画像を生成する画像生成部と、前記画像を前記表示装置に表示させる表示制御部として機能させる。
【0006】
上記のプログラムにおいて、前記第1姿勢補正部は、前記角速度センサが検出する角速度に基づいて前記回転量を算出し、前記加速度センサが検出する加速度と当該回転量とに基づいて、前記第1の姿勢を補正して、前記第2の姿勢を算出するようにしてもよい。
【0007】
上記のプログラムは、前記角速度センサが検出する角速度に基づいて前記回転量を算出し、前記加速度センサが検出する加速度と当該回転量とに基づいて、第1の補正量を決定する補正量決定部としてさらに機能させ、前記第1の補正量は、前記角速度センサが検出する角速度が増大するにつれて増加し、前記第1姿勢補正部は、前記第1の補正量を用いて前記第1の姿勢を補正して、前記第2の姿勢を算出するようにしてもよい。
【0008】
上記のプログラムは、前記コンピュータを、前記加速度センサが検出する加速度に基づいて第2の補正量を算出する補正量算出部と、前記角速度センサが検出する角速度に基づいて前記回転量を算出し、算出した当該回転量に基づいて前記第1の補正量の上限である第3の補正量を算出する最大補正量算出部としてさらに機能させ、前記補正量決定部は、前記第2の補正量が前記第3の補正量以下の場合には、前記第2の補正量を前記第1の補正量として決定し、前記第2の補正量が前記第3の補正量を超える場合には、前記第3の補正量を前記第1の補正量として決定するようにしてもよい。
【0009】
上記のプログラムにおいて、前記最大補正量算出部は、前記角速度センサが検出する角速度に基づいて算出した前記回転量に所定値を加算することにより、前記第3の補正量を
算出するようにしてもよい。
【0010】
上記のプログラムは、前記コンピュータを、アプリケーションを実行するアプリケーション実行部としてさらに機能させ、前記最大補正量算出部は、前記アプリケーションの種類又は実行状況に応じた係数を、前記角速度センサが検出する角速度に基づいて算出した前記回転量に乗じることにより、前記第3の補正量を算出するようにしてもよい。
【0011】
上記のプログラムは、前記コンピュータを、前記表示装置の所定時間における回転量を考慮せずに、前記加速度センサが検出する加速度に基づいて前記第1の姿勢を補正して、第3の姿勢を算出する第2姿勢補正部と、前記第1姿勢補正部と前記第2姿勢補正部のうち、いずれか一方を選択する選択部としてさらに機能させ、前記画像生成部は、前記第1姿勢補正部が選択された場合には、前記第2の姿勢に応じた画像を生成し、前記第2姿勢補正部が選択された場合には、前記第3の姿勢に応じた画像を生成するようにしてもよい。
【0012】
本発明の一実施形態に係る情報処理装置は、角速度センサと加速度センサと表示部とを有する情報処理装置であって、前記表示部は、前記情報処理装置がユーザに使用される際に、当該ユーザの眼前に位置するように支持され、前記角速度センサが検出する角速度に基づいて前記情報処理装置の第1の姿勢を算出する姿勢算出部と、前記加速度センサが検出する加速度と前記情報処理装置の所定時間における回転量とに基づいて、前記第1の姿勢を補正して、第2の姿勢を算出する第1姿勢補正部と、前記第2の姿勢に応じた画像を生成する画像生成部と、前記画像を前記表示部に表示させる表示制御部とを有する。
【0013】
本発明の一実施形態に係る情報処理システムは、角速度センサと加速度センサと表示部とを有する情報処理システムであって、前記角速度センサが検出する角速度に基づいて前記情報処理システムの第1の姿勢を算出する姿勢算出部と、前記加速度センサが検出する加速度と前記情報処理システムの所定時間における回転量とに基づいて、前記第1の姿勢を補正して、第2の姿勢を算出する第1姿勢補正部と、前記第2の姿勢に応じた画像を生成する画像生成部と、前記画像を前記表示部に表示させる表示制御部とを有する。
【0014】
本発明の一実施形態に係る情報処理方法は、角速度センサと加速度センサと表示部とを有する情報処理システムにより実行される情報処理方法であって、前記角速度センサが検出する角速度に基づいて前記情報処理システムの第1の姿勢を算出するステップと、前記加速度センサが検出する加速度と前記情報処理システムの所定時間における回転量とに基づいて、前記第1の姿勢を補正して、第2の姿勢を算出するステップと、前記第2の姿勢に応じた画像を生成するステップと、前記画像を前記表示部に表示させるステップとを含む。
【発明の効果】
【0015】
本発明によれば、角速度に基づいて算出される装置の姿勢の誤差を、当該装置の状況に応じてより適切に補正することができる。
【発明を実施するための形態】
【0017】
1.実施形態
本発明の一実施形態に係るゲームシステム1について説明する。
図1は、ゲームシステム1の内部構成の一例を示す図である。同図に示すように、ゲームシステム1は、ヘッドマウントディスプレイ(以下、「HMD」と呼ぶ。)2と、コントローラ3を備える。
【0018】
1−1.HMD2の構成
図2は、HMD2の外観の一例を示す図である。同図に示すHMD2はゴーグル型のHMDであるが、ヘルメット型や眼鏡型であってもよい。
【0019】
このHMD2は、
図1に示すように、プロセッサ201を備える。プロセッサ201は、各種の情報処理を実行する情報処理部であって、例えば、CPUのみから構成されてもよいし、CPU機能、GPU機能等の複数の機能を有するSoC(System-on-a-chip)により構成されてもよい。プロセッサ201は、後述する内部記憶媒体や、スロット204に装着された外部記憶媒体に記憶されるプログラムを実行することによって、各種の情報処理を実行する。
【0020】
また、HMD2は、内部記憶媒体の一例として、フラッシュメモリ202とDRAM203を備える。フラッシュメモリ202は、各種のデータを記憶するために用いられる不揮発性のメモリであり、DRAM203は、各種のデータを一時的に記憶するために用いられる揮発性のメモリである。
【0021】
また、HMD2は、スロット204とスロットインターフェース205を備える。スロット204は、メモリカード等の外部記憶媒体を装着可能な形状を有し、スロットインターフェース205は、スロット204に装着された外部記憶媒体に対するデータの読み書きを、プロセッサ201の指示に応じて行う。
【0022】
また、HMD2は、ネットワーク通信部206を備える。ネットワーク通信部206は、無線LAN方式により又は赤外線通信により外部装置と無線通信を行う。
【0023】
また、HMD2は、コントローラ通信部207を備える。コントローラ通信部207は、Bluetooth(登録商標)等の近距離無線通信技術を用いてコントローラ3と無線通信を行う。
【0024】
また、HMD2は、ディスプレイ208を備える。ディスプレイ208は、液晶ディスプレイや有機ELディスプレイ等の表示装置である。ディスプレイ208は、左目用画像と右目用画像を並べて表示することで、ユーザに3次元画像(VR画像)を視認させる。このディスプレイ208は、HMD2がユーザに使用される際に、ユーザの眼前に支持される。ディスプレイ208は、ユーザが首を動かしても絶えずユーザの視線方向に位置するように支持される。
【0025】
また、HMD2は、タッチパネル209とタッチパネルコントローラ210を備える。タッチパネル209は、静電容量方式等のタッチパネルであり、ディスプレイ208上に配置される。タッチパネルコントローラ210は、タッチパネル209を制御する回路である。タッチパネルコントローラ210は、タッチパネル209から出力される信号に基づいて、タッチ入力が行われた位置を示すデータを生成して、プロセッサ201に出力する。
【0026】
また、HMD2は、コーデック回路211とスピーカ212と音声入出力端子213を備える。コーデック回路211は、スピーカ212と音声入出力端子213に対する音声データの入出力を制御する回路である。
【0027】
また、HMD2は、角速度センサ214と加速度センサ215を備える。角速度センサ214は、当該センサを基準に設定される3次元直交座標系(ローカル座標系)における3軸周りの角速度を所定の周期で検出する。検出された角速度を示すデータは、DRAM203に記憶される。DRAM203には、最新の角速度データのみが記憶される。一方、加速度センサ215は、当該センサを基準に設定される3次元直交座標系(ローカル座標系)における3軸方向の加速度を所定の周期で検出する。検出された加速度を示すデータは、DRAM203に記憶される。DRAM203には、最新の加速度データのみが記憶される。
【0028】
また、HMD2は、電力制御部216とバッテリ217と電源ボタン218を備える。電力制御部216は、プロセッサ201からの指令に基づいて、バッテリ217からHMD2の各部への電力供給を制御する。
【0029】
1−2.コントローラ3の構成
コントローラ3は、
図1に示すように、通信制御部31を備える。通信制御部31は、マイクロプロセッサにより構成され、HMD2との間の無線通信を制御する。
【0030】
また、コントローラ3は、フラッシュメモリ等のメモリ32を備える。通信制御部31は、メモリ32に記憶されるファームウェアを実行することにより、各種の処理を実行する。
【0031】
また、コントローラ3は、各種の操作ボタン33とアナログスティック34を備える。操作ボタン33とアナログスティック34は、自身に対して行われた操作に関するデータを、通信制御部31へ出力する。通信制御部31は、取得した操作データをHMD2へ送信する。
【0032】
また、コントローラ3は、電力供給部35を備える。電力供給部35は、バッテリ及び電力制御回路を有する。
【0033】
1−3.ゲームシステム1の動作概要
次に、ゲームシステム1の動作について説明する。
HMD2は、ゲームプログラムを記憶する外部記憶媒体がスロット204に装着され、プレイヤによりゲームの開始が指示されると、当該ゲームプログラムを実行する。以下の説明では、実行されるゲームとして、プレイヤが3次元の仮想空間内で、一人称視点でキャラクタを操作するアクションゲームを想定する。ただし、アクションゲームは実行可能なゲームのあくまで一例であり、その他の種類のゲームが実行されてもよい。
【0034】
図3は、ゲームプレイ中にディスプレイ208に表示される画像の一例を示す図である。同図に示すように、ゲームが開始されると3次元の仮想空間が定義され、当該仮想空間内に配置された仮想カメラに基づいて生成された画像がディスプレイ208に表示される。仮想カメラの撮影方向は、プレイヤが操作するキャラクタの視線方向に対応する。この仮想カメラの位置は、ユーザがコントローラ3を用いて操作可能であり、仮想カメラの姿勢は、HMD2の姿勢に応じて変化する。
【0035】
図4は、仮想カメラの姿勢の制御について説明するための図である。同図に示すように、仮想空間には、当該空間内の所定の位置を原点とするxyz直交座標系(空間座標系)
が設定される。この空間座標系のz軸は、仮想空間の鉛直方向に延びる軸であり、x軸は、z軸に対して垂直な軸であり、y軸は、z軸及びx軸に対して垂直な軸である。xy平面上には地面オブジェクトLが配置され、この地面オブジェクトL上に仮想カメラVCが配置される。仮想カメラVCには、同図に示すように、当該カメラを原点とするuvw直交座標系(視点座標系)が設定される。この視点座標系のu軸は、仮想カメラVCの左右方向に延びる軸であり、v軸は、仮想カメラVCの上下方向に延びる軸であり、w軸は、仮想カメラVCの前後方向に延びる軸である。仮想カメラVCは、u軸周り(ピッチ方向)と、v軸周り(ヨー方向)と、w軸周り(ロール方向)に回転可能である。以下、この仮想カメラVCに基づいて生成される画像を表示するための処理について説明する。
【0036】
1−4.画像表示処理
図5は、画像表示処理を実行するための機能構成の一例を示すブロック図である。
図6は、画像表示処理に用いられるデータの一例を示す図である。
図5に示す姿勢算出部41、画像生成部42及び表示制御部43は、プロセッサ201がゲームプログラムを実行することにより実現される。なお、このゲームプログラムは、インターネット等のネットワークや非一時的な記録媒体を介して頒布可能なプログラムである。
【0037】
姿勢算出部41は、角速度センサ214が検出する角速度と加速度センサ215が検出する加速度に基づいて、HMD2の姿勢を算出する。具体的には、角速度センサ214が検出する角速度に基づいてHMD2の第1の姿勢を算出し、当該第1の姿勢を、加速度センサ215が検出する加速度に基づいて補正することで、HMD2の第2の姿勢を算出する。その際、角速度から最大補正角度を算出し、当該最大補正角度を上限として上記の補正を行う。具体的な処理内容については後述する。なおここで、角速度に基づいて算出される第1の姿勢を補正する理由は、角速度に基づいて算出される姿勢には経時的に誤差が蓄積してしまうからである。この誤差を修正するために、第1の姿勢を加速度に基づいて補正する。
【0038】
画像生成部42は、姿勢算出部41により算出されたHMD2の姿勢に応じた画像を生成する。ここで、HMD2の姿勢に応じた画像とは、HMD2と対応する姿勢にある仮想カメラが仮想空間を撮影することにより生成される画像である。
【0039】
表示制御部43は、画像生成部42により生成された画像をディスプレイ208に表示させる。
【0040】
次に、姿勢算出部41により実行される処理について詳述する。
姿勢算出部41は、
図5に示すように、第1姿勢算出部411、重力加速度推定部412、補正量算出部413、最大補正量算出部414、補正量決定部415及び姿勢補正部416を備える。
【0041】
第1姿勢算出部411は、角速度センサ214が検出する角速度に基づいて第1の姿勢を算出する。具体的には、画像表示処理の最新の処理ループで取得した角速度を積分して得た角度を、前回の処理ループで算出した第1の姿勢に加算することで、新しい第1の姿勢を算出する。ここで、最新の処理ループで取得した角速度とは、DRAM203に記憶されている角速度データ51により表される角速度であり、前回の処理ループで算出した第1の姿勢とは、DRAM203に記憶されている第1姿勢データ52により表される第1の姿勢である。新しい第1の姿勢を算出すると、当該第1の姿勢を表すデータで、DRAM203に記憶される第1姿勢データ52を更新する。
【0042】
重力加速度推定部412は、HMD2にかかる重力加速度を推定する。具体的には、画像表示処理の最新の処理ループで取得したローカル座標系の加速度をグローバル座標系の
加速度に変換する。ここで、グローバル座標系とは、現実空間の所定の位置を原点とする3次元直交座標系である。そして、求めたグローバル座標系の加速度と前回の処理ループで算出した重力加速度の差分に平滑化変数を乗じて得た値を、同重力加速度に加算する。より具体的には、以下の式(1)及び(2)を使って重力加速度を算出する。
【数1】
【0043】
式(1)において、変数Acc
globalは、グローバル座標系の加速度であり、定数R
globalは、ローカル座標系の加速度をグローバル座標系の加速度に変換するための回転行列であり、変数Accは、最新の処理ループで取得したローカル座標系の加速度である。ここで、最新の処理ループで取得したローカル座標系の加速度とは、DRAM203に記憶されている加速度データ53により表される加速度である。式(2)において、変数G
tは、最新の処理ループで算出される重力加速度であり、変数G
t−1は、前回の処理ループで算出された重力加速度であり、変数αは、平滑化変数である。ここで、前回の処理ループで算出された重力加速度とは、DRAM203に記憶されている重力加速度データ54により表される重力加速度である。重力加速度推定部412は、重力加速度を算出すると、当該重力加速度を表すデータで、DRAM203に記憶される重力加速度データ54を更新する。
【0044】
なお、上記の平滑化変数は、HMD2の静止度に応じて変化する変数である。この平滑化変数は、加速度センサ215が検出する加速度の大きさを算出することで求められる。この加速度とは、DRAM203に記憶されている加速度データ53により表される加速度である。平滑化変数の値は、加速度の大きさが重力加速度の大きさ「1(G)」に近いほど(言い換えると、HMD2が静止状態に近いほど)大きくなる。これは、加速度の大きさが重力加速度の大きさ「1(G)」に近い方が(言い換えると、HMD2が静止状態に近い方が)、加速度の値が、重力方向を示す値として信頼できると考えられるからである。
なお、変形例として、平滑化変数は加速度の瞬時値の大きさではなく、例えば1秒間の区間平均値の大きさを算出することで求めてもよい。また、別の変形例として、平滑化変数は加速度の値に加えて、角速度の値に基づいて算出されてもよい。その際の角速度の値とは、具体的には、角速度の大きさ、分散又は変化量である。
【0045】
補正量算出部413は、重力加速度推定部412により推定された重力加速度に基づいて、第1姿勢算出部411により算出された第1の姿勢に適用される補正角度を算出する。この補正角度は、HMD2が第1の姿勢にあるときの当該装置の下方向のベクトルのグローバル座標系における向きを、重力加速度推定部412により推定された重力加速度の向きに近づけるための補正角度である。この補正角度を求めるために補正量算出部413は、HMD2が第2の姿勢にあるときの当該装置の下方向のベクトルのグローバル座標系における向きと、重力加速度推定部412により推定された重力加速度の向きの外積を取り、求めたベクトル周りに回転させる補正角度を算出する。ここで、HMD2の第2の姿勢とは、画像表示処理の前回の処理ループにおいて姿勢補正部416により算出された第2の姿勢であり、DRAM203に記憶される第2姿勢データ55により表される第2の姿勢である。補正量算出部413は、より具体的には、以下の式(3)、(4)及び(5)を使って補正角度を算出する。
【数2】
【0046】
式(3)において、変数G
tは、最新の処理ループで算出される重力加速度であり、変数Zは、HMD2が第2の姿勢にあるときの当該装置の下方向のベクトルのグローバル座標系における向きである。ここで、最新の処理ループで算出される重力加速度とは、DRAM203に記憶される重力加速度データ54により表される重力加速度である。一方、変数Zは、DRAM203に記憶される第2姿勢データ55により表されるZ軸方向のベクトルである。式(5)において、変数θ
vは、補正角度である。補正量算出部413は、補正角度を算出すると、補正角度を表すデータで、DRAM203に記憶される補正角度データ56を更新し、かつ、回転rotを表すデータで、DRAM203に記憶される回転データ57を更新する。
【0047】
最大補正量算出部414は、角速度センサ214が検出する角速度に基づいてHMD2の所定時間における回転量を算出し、算出した回転量に基づいて、第1姿勢算出部411により算出された第1の姿勢に適用される補正角度の上限値である最大補正角度を算出する。この最大補正角度は、角速度に応じて変化し、角速度が大きくなるにつれて大きくなる。これは、角速度が大きいときに(言い換えると、HMD2が大きく動くときに)第1の姿勢を大幅に補正しても、角速度の変化に応じてディスプレイ208に表示される画像も大きく変化するため、ユーザが違和感を覚えることはないが、角速度が小さいときに(言い換えると、HMD2が静止状態に近いときに)第1の姿勢を大幅に補正してしまうと、ユーザが違和感を覚えてしまうからである。特に、HMDのように、ユーザの目とディスプレイの距離が近い装置を利用する場合には、この違和感が顕著になる。最大補正量算出部414は、具体的には、以下の式(6)を使って補正角度を算出する。
【数3】
【0048】
式(6)において、変数θ
vmaxは、最大補正角度であり、定数k
0は、最小補正値であり、定数k
1は、補正係数であり、変数Ω
tは、画像表示処理の最新の処理ループで取得したローカル座標系の角速度であり、変数dtは、角速度検出のサンプリング周期であり、定数strength
vは、補正係数である。ここで、定数k
0は、HMD2が静止状態であっても蓄積してゆく第1の姿勢の誤差を補正するための最低限の補正値であり、任意に設定される。定数k
1及びstrength
vは、アプリケーションの開発者により、アプリケーションの種類やアプリケーションの実行状況(例えば、実行中のゲームの場面)に応じて任意に設定される補正係数である。変数Ω
tは、具体的には、DRAM203に記憶されている角速度データ51により表される角速度である。最大補正量算出部414は、最大補正角度を算出すると、最大補正角度を表すデータで、DRAM203に記憶される最大補正角度データ58を更新する。
【0049】
補正量決定部415は、補正量算出部413により算出された補正角度と、最大補正量算出部414により算出された最大補正角度を比較することで、第1姿勢算出部411に
より算出された第1の姿勢に適用される補正角度を決定する。具体的には、前者が後者以下の場合には、前者を補正角度として決定し、前者が後者より大きい場合には、後者を補正角度として決定する。ここで、補正量算出部413により算出された補正角度とは、DRAM203に記憶されている補正角度データ56により表される補正角度であり、最大補正量算出部414により算出された最大補正角度とは、DRAM203に記憶されている最大補正角度データ58により表される最大補正角度である。
【0050】
姿勢補正部416は、第1姿勢算出部411により算出された第1の姿勢を、補正量決定部415により決定された補正角度に基づいて補正して、第2の姿勢を算出する。具体的には、第1姿勢算出部411により算出された第1の姿勢を、補正量算出部413により算出されたベクトル周りに、補正量決定部415により決定された補正角度だけ回転させることで、第2の姿勢を算出する。ここで、第1姿勢算出部411により算出された第1の姿勢とは、DRAM203に記憶されている第1姿勢データ52により表される第1の姿勢であり、補正量算出部413により算出されたベクトルとは、DRAM203に記憶されている回転データ57により表されるベクトルである。第2の姿勢は、例えば、ロドリゲスの回転公式を使って算出される。姿勢補正部416は、第2の姿勢を算出すると、当該第2の姿勢を表すデータで、DRAM203に記憶される第2姿勢データ55を更新する。
【0051】
次に、画像表示処理の手順について説明する。
図7は、画像表示処理の一例を示すフローチャートである。同図に示す画像表示処理は、ゲームの実行中において所定の周期で繰り返し実行される。
【0052】
この画像表示処理のステップS1において、姿勢算出部41は、角速度センサ214が検出する角速度と加速度センサ215が検出する加速度に基づいて、HMD2の姿勢を算出する。具体的には、角速度センサ214が検出する角速度に基づいてHMD2の第1の姿勢を算出し、当該第1の姿勢を、加速度センサ215が検出する加速度に基づいて補正することで、HMD2の第2の姿勢を算出する。その際、角速度から最大補正角度を算出し、当該最大補正角度を上限として上記の補正を行う。以下、具体的な処理内容について、
図8を参照して説明する。
【0053】
図8は、姿勢算出処理の一例を示すフローチャートである。この姿勢算出処理のステップS11において、第1姿勢算出部411は、角速度センサ214が検出する角速度に基づいて第1の姿勢を算出する。具体的には、DRAM203に記憶されている角速度データ51により表される角速度を積分して得た角度を、同じくDRAM203に記憶されている第1姿勢データ52により表される第1の姿勢に加算することで、新しい第1の姿勢を算出する。新しい第1の姿勢を算出すると、当該第1の姿勢を表すデータで、DRAM203に記憶される第1姿勢データ52を更新する。
【0054】
次に、ステップS12において、重力加速度推定部412は、HMD2にかかる重力加速度を推定する。具体的には、DRAM203に記憶されている加速度データ53により表されるローカル座標系の加速度をグローバル座標系の加速度に変換する。そして、求めたグローバル座標系の加速度と、DRAM203に記憶されている重力加速度データ54により表される重力加速度の差分に平滑化変数を乗じて得た値を、同重力加速度に加算する。より具体的には、上記の式(1)及び(2)を使って重力加速度を算出する。重力加速度を算出すると、当該重力加速度を表すデータで、DRAM203に記憶される重力加速度データ54を更新する。
【0055】
次に、ステップS13において、補正量算出部413は、ステップS12で推定された重力加速度に基づいて、ステップS11で算出された第1の姿勢に適用される補正角度を
算出する。具体的には、HMD2が第2の姿勢にあるときの当該装置の下方向のベクトルのグローバル座標系における向きと、重力加速度推定部412により推定された重力加速度の向きの外積を取り、求めたベクトル周りに回転させる補正角度を算出する。ここで、HMD2の第2の姿勢とは、DRAM203に記憶される第2姿勢データ55により表される第2の姿勢である。補正量算出部413は、より具体的には、上記の式(3)、(4)及び(5)を使って補正角度を算出する。補正角度を算出すると、補正角度を表すデータで、DRAM203に記憶される補正角度データ56を更新し、かつ、回転を表すデータで、DRAM203に記憶される回転データ57を更新する。
【0056】
次に、ステップS14において、最大補正量算出部414は、DRAM203に記憶されている角速度データ51により表される角速度に基づいて、ステップS11で算出された第1の姿勢に適用される補正角度の上限値である最大補正角度を算出する。具体的には、上記の式(6)を使って補正角度を算出する。最大補正角度を算出すると、最大補正角度を表すデータで、DRAM203に記憶される最大補正角度データ58を更新する。
【0057】
次に、ステップS15において、補正量決定部415は、ステップS13で算出された補正角度と、ステップS14で算出された最大補正角度を比較することで、ステップS11で算出された第1の姿勢に適用される補正角度を決定する。具体的には、前者が後者以下の場合には、前者を補正角度として決定し、前者が後者より大きい場合には、後者を補正角度として決定する。
【0058】
次に、ステップS16において、姿勢補正部416は、ステップS11で算出された第1の姿勢を、ステップS15で決定された補正角度に基づいて補正して、第2の姿勢を算出する。具体的には、ステップS11で算出された第1の姿勢を、ステップS13で算出されたベクトル周りに、ステップS15で決定された補正角度だけ回転させることで、第2の姿勢を算出する。第2の姿勢は、例えば、ロドリゲスの回転公式を使って算出される。姿勢補正部416は、第2の姿勢を算出すると、当該第2の姿勢を表すデータで、DRAM203に記憶される第2姿勢データ55を更新する。
以上が、姿勢算出処理についての説明である。
【0059】
姿勢算出処理の結果、HMD2の姿勢が算出されると、
図7に示すステップS2において、画像生成部42は、算出されたHMD2の姿勢に応じた画像を生成する。ここで、HMD2の姿勢に応じた画像とは、HMD2と対応する姿勢にある仮想カメラに基づいて生成された画像である。
【0060】
次に、ステップS3において、表示制御部43は、ステップS2で生成された画像をディスプレイ208に表示させる。
以上が、画像表示処理についての説明である。
【0061】
以上説明したHMD2では、角速度センサ214が検出する角速度に基づいてHMD2の第1の姿勢を算出し、当該第1の姿勢を、加速度センサ215が検出する加速度に基づいて補正する。その際、角速度から最大補正角度を算出し、当該最大補正角度を上限として当該補正を行う。この最大補正角度は、角速度が大きくなるにつれて大きくなる。したがって、第1の姿勢に適用される補正角度は、角速度が大きくなるにつれて大きくなる。角速度が小さい場合に(言い換えると、HMD2が静止状態に近いときに)第1の姿勢を大幅に補正してしまうと、ユーザが違和感に与えてしまう。例えば、画面がカクカクしたり、HMD2が静止状態にもかかわらず画面がロール方向に回転することで目が回ったりする可能性がある。しかし、角速度が大きい場合に(言い換えると、HMD2が大きく動くときに)第1の姿勢を大幅に補正するようにすれば、当該補正が、HMD2の動きに起因する画像の変化に紛れ、ユーザは違和感を覚えにくくなる。
【0062】
2.変形例
上記の実施形態は、以下に説明するように変形してもよい。なお、以下に説明する2以上の変形例は互いに組み合わせてもよい。
【0063】
2−1.変形例1
HMD2は、バンド等でユーザの頭部に固定されるタイプではなく、ユーザの手によって眼前に支持されるタイプであってもよい。例えば、段ボール製の箱型の形状を有し、スマートフォンを挿入することで利用可能となるビューア(画像表示装置)であってもよい。
【0064】
2−2.変形例2
HMD2により実行されるVRアプリケーションは、ゲームに限られない。例えば、教育や医療の分野のVRアプリケーションが実行されてもよい。
【0065】
2−3.変形例3
HMD2は、角速度センサ214を使って当該装置の所定時間あたりの回転量を検出しているが、回転量の検出方法はこれに限られない。例えば、HMD2に複数の赤外線LEDを備えさせ、HMD2の周囲に赤外線センサを設置し、赤外線センサにより検出された赤外線の検出点に基づいてHMD2の回転量を検出するようにしてもよい。または、HMD2に光学カメラを備えさせ、光学カメラにより撮影された画像に基づいてHMD2の回転量を検出するようにしてもよい。
【0066】
2−4.変形例4
HMD2は、最大補正角度を考慮せずに(言い換えると、角速度センサ214が検出する角速度を考慮せずに)、加速度センサ215が検出する加速度に基づいて第1の姿勢を補正する機能を備えてもよい。具体的には、第1姿勢算出部411により算出された第1の姿勢を、補正量算出部413により算出されたベクトル周りに、同算出部により算出された補正角度だけ回転させることで第1の姿勢を補正する機能(以下、「第2姿勢補正部」という。)を備えてもよい。そして、コントローラ3に対するユーザの操作に基づいて、姿勢補正部416と第2姿勢補正部のうちのいずれかを選択するようにしてもよい。その場合、画像生成部42は、姿勢補正部416が選択された場合には、姿勢補正部416により算出された姿勢に応じた画像を生成し、第2姿勢補正部が選択された場合には、第2姿勢補正部により算出された姿勢に応じた画像を生成する。ユーザの操作に基づいて選択を行う代わりに、実行中のアプリケーションの種類やアプリケーションの実行状況(例えば、実行中のゲームの場面)に応じて、自動的に当該選択を行うようにしてもよい。
【0067】
2−5.変形例5
HMD2により実行される画像表示処理は、ネットワークを介して接続された複数の情報処理装置からなる画像処理システムにより実行されてもよい。
【0068】
2−6.変形例6
図8に例示する姿勢算出処理は、自律駆動型ロボットの姿勢を推定する場合に適用されてもよい。