(57)【特許請求の範囲】
【請求項１】
角速度センサおよび加速度センサを備えた入力装置であって、
前記角速度センサから出力される角速度データに基づいて前記入力装置の第１の検出姿勢を検出する第１姿勢検出手段と、
前記入力装置の静止状態における姿勢であって、前記加速度センサから出力される加速度データが示す加速度の向きが略鉛直下向きとなる場合における前記入力装置姿勢を第２の検出姿勢として、前記第１姿勢検出手段で検出された第１の検出姿勢を当該第２の検出姿勢に近づけるように補正する姿勢補正手段と、
前記姿勢補正手段によって補正された補正後の第１の検出姿勢を３軸のベクトルで示した姿勢ベクトルのうちの、所定の１軸方向についての鉛直方向に沿った成分のみを用いて所定の情報処理を行う処理手段とを備える、入力装置。
【請求項２】
前記姿勢補正手段は、前記加速度の大きさが重力加速度の大きさに近いほど前記第１の検出姿勢が前記第２の検出姿勢に近くなるように前記第１の検出姿勢を前記第２の検出姿勢へと近づける、請求項３に記載の入力装置。
【請求項３】
前記入力装置は、表示画面と一体型の装置であり、
前記処理手段は、前記所定の情報処理の結果を前記表示画面に表示する、請求項１に記載の入力装置。
【請求項４】
前記所定の情報処理とは、プレイヤオブジェクトを移動させる処理である、請求項１に記載の入力装置。
【請求項５】
角速度センサおよび加速度センサを備えた情報処理装置のコンピュータに実行させる入力処理プログラムであって、
前記コンピュータを、
前記角速度センサから出力される角速度データに基づいて前記入力装置の第１の検出姿勢を検出する第１姿勢検出手段と、
前記入力装置の静止状態における姿勢であって、前記加速度センサから出力される加速度データが示す加速度の向きが略鉛直下向きとなる場合における前記入力装置姿勢を第２の検出姿勢として、前記第１姿勢検出手段で検出された第１の検出姿勢を当該第２の検出姿勢に近づけるように補正する姿勢補正手段と、
前記姿勢補正手段によって補正された補正後の第１の検出姿勢を３軸のベクトルで示した姿勢ベクトルのうちの、所定の１軸方向についての鉛直方向に沿った成分のみを用いて所定の情報処理を行う処理手段として機能させる、入力処理プログラム。
【請求項６】
角速度センサおよび加速度センサを備えた情報処理装置において用いられる入力処理方法であって、
前記角速度センサから出力される角速度データに基づいて前記入力装置の第１の検出姿勢を検出する第１姿勢検出ステップと、
前記入力装置の静止状態における姿勢であって、前記加速度センサから出力される加速度データが示す加速度の向きが略鉛直下向きとなる場合における前記入力装置姿勢を第２の検出姿勢として、前記第１姿勢検出手段で検出された第１の検出姿勢を当該第２の検出姿勢に近づけるように補正する姿勢補正ステップと、
前記姿勢補正ステップにおいて補正された補正後の第１の検出姿勢を３軸のベクトルで示した姿勢ベクトルのうちの、所定の１軸方向についての鉛直方向に沿った成分のみを用いて所定の情報処理を行う処理ステップとを備える、入力処理方法。
【請求項７】
角速度センサおよび加速度センサを備えた入力処理システムであって、
前記角速度センサから出力される角速度データに基づいて前記入力装置の第１の検出姿勢を検出する第１姿勢検出手段と、
前記入力装置の静止状態における姿勢であって、前記加速度センサから出力される加速度データが示す加速度の向きが略鉛直下向きとなる場合における前記入力装置姿勢を第２の検出姿勢として、前記第１姿勢検出手段で検出された第１の検出姿勢を当該第２の検出姿勢に近づけるように補正する姿勢補正手段と、
前記姿勢補正手段によって補正された補正後の第１の検出姿勢を３軸のベクトルで示した姿勢ベクトルのうちの、所定の１軸方向についての鉛直方向に沿った成分のみを用いて所定の情報処理を行う処理手段とを備える、入力処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力装置、入力処理プログラム、入力処理方法、および入力処理システムに関し、より特定的には、入力装置の姿勢を検出して所定の処理を実行する入力装置、入力処理プログラム、入力処理方法、および入力処理システムに関する。
【背景技術】
【０００２】
特許文献１には、コントローラを傾けることによってゲーム操作を行うことができるゲーム装置が開示されている。特許文献１に記載されているコントローラは、３軸加速度センサを内蔵しており、加速度センサを用いてコントローラの傾斜角度を算出する。また、特許文献１では、このコントローラを利用したドライブゲームにおいて、コントローラの傾斜角度を、ゲーム中に登場する車のハンドルの切り角に対応させることが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−１９０１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記のような加速度センサを内蔵したコントローラでは、当該コントローラに対して激しい動きが加えられた場合、加速度センサによって検出される加速度ベクトルに重力加速度以外の成分が多く含まれていることから、当該コントローラの傾斜角度（姿勢）に誤差が含まれる可能性がある。換言すれば、加速度によって決められる姿勢は、加速度センサが静止しているときには正確だが、動いているときには誤差があるという性質がある。
【０００５】
そこで、角速度センサを用いて上記コントローラ等の姿勢を検出するという方法が考えられる。しかしながら、角速度による姿勢算出の場合、時間と共に誤差が蓄積していくという性質がある。
【０００６】
それ故に、本発明の目的は、加速度センサおよび角速度センサのそれぞれの特性を活かして、より正確な姿勢を検出することができる入力装置、入力処理方法を提供することである。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、本発明は以下のような構成を採用した。
【０００８】
本発明にかかる入力装置は、角速度センサおよび加速度センサを備えた入力装置であって、第１姿勢算出手段と、姿勢補正手段と、処理手段とを備える。第１姿勢算出手段は、角速度センサから出力される角速度データに基づいて入力装置の第１の検出姿勢を検出する。姿勢補正手段は、加速度センサから出力される加速度データに基づいて、第１の検出姿勢を補正する。処理手段は、姿勢補正手段によって補正された補正後の第１の検出姿勢における水平方向及び奥行き方向に関する姿勢を用いずに所定の情報処理を行う。ここで、奥行き方向とは、３次元空間において、鉛直方向および水平方向の双方に直交する軸方向のことである。
【０００９】
上記構成により、入力装置の姿勢を変化させる操作であって、重力の方向に沿った変化が生じるような操作が行われる場合に、その姿勢の変化を正確に反映させた情報処理が実行可能となる。
【００１０】
他の構成例として、姿勢補正手段は、加速度データが示す加速度に基づき、入力装置の静止状態における姿勢を第２の検出姿勢とし、第１の検出姿勢を当該第２の検出姿勢に近づけるように補正してもよい。ここで、入力装置の静止状態における姿勢とは、重力方向が鉛直下向きであると想定した場合における入力装置の姿勢と表現することもできる。
【００１１】
上記構成によれば、入力装置の現在の姿勢について、より正確な姿勢を把握することが可能となる。
【００１２】
他の構成例として、姿勢補正手段は、加速度データが示す加速度の向きが略鉛直下向きとなる場合における入力装置の姿勢を第２の検出姿勢としてもよい。
【００１３】
上記構成によれば、重力の方向という絶対的な基準を利用した補正を行うことができ、重力の方向に関する姿勢の変化について、信頼度の高い補正が可能となる。
【００１４】
更に他の構成例として、姿勢補正手段は、加速度の大きさが重力加速度の大きさに近いほど第１の検出姿勢が第２の検出姿勢に近くなるように第１の検出姿勢を第２の検出姿勢へと近づけるように補正するようにしてもよい。
【００１５】
上記構成によれば、加速度センサによって検出された加速度の大きさが重力加速度の大きさに近いほど、第２の検出姿勢が補正後の姿勢により強く反映されることになる。加速度の大きさが重力加速度の大きさが近いほど、重力加速度の方向をより正確に示していると推測され、第２の検出姿勢がより正確であると推測される。そのため、第２の検出姿勢が正確である場合には第１の検出姿勢がより補正されて第２の検出姿勢に近くなり、第２の検出姿勢があまり正確ではない場合には第１の検出姿勢があまり補正されないので、補正後の姿勢をより正確に算出することができる。
【００１６】
更に他の構成例として、処理手段は、補正後の第１の検出姿勢を３軸のベクトルで示した姿勢ベクトルのうちの所定の１軸方向についての鉛直方向に沿った成分に応じて所定の処理を実行するようにしてもよい。
【００１７】
上記構成によれば、例えば、上記入力装置を動かすことで、車のハンドルを操作するような平面的な操作を行う場合、当該操作による姿勢の変化を正確に情報処理に反映させることが可能となる。
【００１８】
更に他の構成例として、入力装置は、表示画面と一体型の装置であり、処理手段は、所定の情報処理の結果を表示画面に表示するようにしてもよい。
【００１９】
上記構成例によれば、例えば入力装置を傾けることで共に表示画面も傾くような、ユーザが傾きの誤差を認識しやすいような状況において、ユーザが認識する傾きについて違和感のない画面表示が可能となる。
【００２０】
本発明にかかる入力処理プログラムは、角速度センサおよび加速度センサを備えた情報処理装置のコンピュータに実行させる入力処理プログラムであって、コンピュータを、第１姿勢算出手段と、姿勢補正手段と、処理手段として機能させる。第１姿勢算出手段は、角速度センサから出力される角速度データに基づいて入力装置の第１の検出姿勢を検出する。姿勢補正手段は、加速度センサから出力される加速度データに基づいて、第１の検出姿勢を補正する。処理手段は、姿勢補正手段によって補正された補正後の第１の検出姿勢における水平方向及び奥行き方向に関する姿勢を用いずに所定の情報処理を行う。
【００２１】
本発明にかかる入力処理方法は、角速度センサおよび加速度センサを備えた情報処理装置において用いられる入力処理方法であって、第１姿勢算出ステップと、姿勢補正ステップと、処理ステップとを備える。第１姿勢算出ステップは、角速度センサから出力される角速度データに基づいて入力装置の第１の検出姿勢を検出する。姿勢補正ステップは、加速度センサから出力される加速度データに基づいて、第１の検出姿勢を補正する。処理ステップは、姿勢補正ステップにおいて補正された補正後の第１の検出姿勢における水平方向及び奥行き方向に関する姿勢を用いずに所定の情報処理を行う。
【００２２】
本発明にかかる入力処理システムは、角速度センサおよび加速度センサを備えた入力処理システムであって、第１姿勢算出手段と、姿勢補正手段と、処理手段とを備える。第１姿勢算出手段は、角速度センサから出力される角速度データに基づいて入力装置の第１の検出姿勢を検出する。姿勢補正手段は、加速度センサから出力される加速度データに基づいて、第１の検出姿勢を補正する。処理手段は、姿勢補正手段によって補正された補正後の第１の検出姿勢における水平方向及び奥行き方向に関する姿勢を用いずに所定の情報処理を行う。
【発明の効果】
【００２３】
本発明によれば、入力装置の姿勢を変化させる操作であって、重力の方向に沿った変化が生じるような操作が行われた場合、その姿勢の変化を正確に反映させた情報処理が可能となる。
【図面の簡単な説明】
【００２４】
【図１】開状態におけるゲーム装置１０の正面図
【図２】ゲーム装置１０の内部構成を示すブロック図
【図３】本実施形態において想定するゲームの画面の一例
【図４】本実施形態において想定する操作方法の一例
【図５】本実施形態にかかる姿勢の補正の原理を説明するための図
【図６】本実施形態にかかる姿勢の補正の原理を説明するための図
【図７】本実施形態にかかる姿勢の補正の原理を説明するための図
【図８】本実施形態にかかる姿勢の変化の反映について説明するための図
【図９】メインメモリ３２に記憶される主なデータを示す図
【図１０】本実施形態にかかるゲーム処理を示すフローチャート
【図１１】図１０のステップＳ５で示した姿勢補正処理の詳細を示すフローチャート
【発明を実施するための形態】
【００２５】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【００２６】
図１において、ゲーム装置１０は、折り畳み型の携帯ゲーム装置であり、開いた状態（開状態）のゲーム装置１０を示している。ゲーム装置１０は、開いた状態においてもユーザが両手または片手で把持することができるようなサイズで構成される。
【００２７】
ゲーム装置１０は、下側ハウジング１１および上側ハウジング２１を有する。下側ハウジング１１と上側ハウジング２１とは、開閉可能（折り畳み可能）に連結されている。図１の例では、下側ハウジング１１および上側ハウジング２１は、それぞれ横長の長方形の板状で形成され、互いの長辺部分で回転可能に連結されている。通常、ユーザは、開状態でゲーム装置１０を使用する。また、ユーザは、ゲーム装置１０を使用しない場合には閉状態としてゲーム装置１０を保管する。
【００２８】
下側ハウジング１１には、下側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）１２が設けられる。下側ＬＣＤ１２は横長形状であり、長辺方向が下側ハウジング１１の長辺方向に一致するように配置される。なお、本実施形態では、ゲーム装置１０に内蔵されている表示装置としてＬＣＤを用いているが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置等、他の任意の表示装置を利用してもよい。また、ゲーム装置１０は、任意の解像度の表示装置を利用することができる
【００２９】
下側ハウジング１１には、入力装置として、各操作ボタン１４Ａ〜１４Ｌおよびタッチパネル１３が設けられる。各操作ボタン１４Ａ〜１４Ｌは、所定の入力を行うための入力装置である。図１に示されるように、下側ハウジング１１の内側面（主面）には、各操作ボタン１４Ａ〜１４Ｌのうち、十字ボタン１４Ａ（方向入力ボタン１４Ａ）、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅ、電源ボタン１４Ｆ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌが、設けられる。十字ボタン１４Ａは、十字の形状を有しており、上下左右の方向を指示するボタンを有している。ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅは、十字状に配置される。ボタン１４Ａ〜１４Ｅ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌには、ゲーム装置１０が実行するプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン１４Ａは選択操作等に用いられ、各操作ボタン１４Ｂ〜１４Ｅは例えば決定操作やキャンセル操作等に用いられる。また、電源ボタン１４Ｆは、ゲーム装置１０の電源をオン／オフするために用いられる。
【００３０】
アナログスティック１５は、方向を指示するデバイスであり、下側ハウジング１１の内側面の下側ＬＣＤ１２より左側領域の上部領域に設けられる。なお、アナログスティック１５として、上下左右および斜め方向の任意の方向に所定量だけ傾倒することでアナログ入力を可能としたものを用いても良い。
【００３１】
十字状に配置される、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅの４つのボタンは、下側ハウジング１１を把持する右手の親指が自然と位置するところに配置される。また、これらの４つのボタンと、アナログスティック１５とは、下側ＬＣＤ１２を挟んで、左右対称に配置される。これにより、ゲームプログラムによっては、例えば、左利きの人が、これらの４つのボタンを使用して方向指示入力をすることも可能である。
【００３２】
また、下側ハウジング１１の内側面には、マイクロフォン用孔１８が設けられる。マイクロフォン用孔１８の下部には後述する音声入力装置としてのマイクが設けられ、当該マイクがゲーム装置１０の外部の音を検出する。
【００３３】
なお、図１においては、操作ボタン１４Ｇ〜１４Ｉの図示を省略している。例えば、Ｌボタン１４Ｇは、下側ハウジング１１の上側面の左端部に設けられ、Ｒボタン１４Ｈは、下側ハウジング１１の上側面の右端部に設けられる。Ｌボタン１４ＧおよびＲボタン１４Ｈは、ゲーム装置１０に対して、例えば撮影指示操作（シャッター操作）を行うために用いられる。さらに、音量ボタン１４Ｉは、下側ハウジング１１の左側面に設けられる。音量ボタン１４Ｉは、ゲーム装置１０が備えるスピーカの音量を調整するために用いられる。
【００３４】
また、ゲーム装置１０は、各操作ボタン１４Ａ〜１４Ｋとは別の入力装置として、さらにタッチパネル１３を備えている。タッチパネル１３は、下側ＬＣＤ１２の画面上に装着されている。なお、本実施形態では、タッチパネル１３は、例えば抵抗膜方式のタッチパネルが用いられる。ただし、タッチパネル１３は、抵抗膜方式に限らず、任意の押圧式のタッチパネルを用いることができる。また、本実施形態では、タッチパネル１３として、例えば下側ＬＣＤ１２の解像度と同解像度（検出精度）のものを利用する。ただし、必ずしもタッチパネル１３の解像度と下側ＬＣＤ１２の解像度とが一致している必要はない。また、下側ハウジング１１の上側面には挿入口１７（図１に示す点線）が設けられている。挿入口１７は、タッチパネル１３に対する操作を行うために用いられるタッチペン２８を収納することができる。なお、タッチパネル１３に対する入力は通常タッチペン２８を用いて行われるが、タッチペン２８に限らずユーザの指でタッチパネル１３に対する入力をすることも可能である。
【００３５】
また、下側ハウジング１１の左側面には開閉可能なカバー部１１Ｃ（図示は省略）が設けられる。このカバー部１１Ｃの内側には、ゲーム装置１０とデータ保存用外部メモリ４５とを電気的に接続するためのコネクタ（図示せず）が設けられる。データ保存用外部メモリ４５は、コネクタに着脱自在に装着される。データ保存用外部メモリ４５は、例えば、ゲーム装置１０によって撮像された画像のデータを記憶（保存）するために用いられる。なお、上記コネクタおよびそのカバー部１１Ｃは、下側ハウジング１１の右側面に設けられてもよい。
【００３６】
さらに、下側ハウジング１１の上側面には、ゲーム装置１０とゲームプログラムを記録した外部メモリ４４を挿入するための挿入口１１Ｄ（図示は省略）が設けられ、その挿入口１１Ｄの内部には、外部メモリ４４と電気的に着脱自在に接続するためのコネクタ（図示せず）が設けられる。当該外部メモリ４４がゲーム装置１０に接続されることにより、所定のゲームプログラムが実行される。なお、上記コネクタおよびその挿入口１１Ｄは、下側ハウジング１１の他の側面（例えば、右側面等）に設けられてもよい。
【００３７】
また、下側ハウジング１１の下側面にはゲーム装置１０の電源のＯＮ／ＯＦＦ状況をユーザに通知する第１ＬＥＤ１６Ａ、下側ハウジング１１の右側面にはゲーム装置１０の無線通信の確立状況をユーザに通知する第２ＬＥＤ１６Ｂ（図示は省略）が設けられる。ゲーム装置１０は他の機器との間で無線通信を行うことが可能であり、第２ＬＥＤ１６Ｂは、無線通信が確立している場合に点灯する。ゲーム装置１０は、例えば、ＩＥＥＥ８０２．１１ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。下側ハウジング１１の右側面には、この無線通信の機能を有効／無効にする無線スイッチ１９（図示は省略）が設けられる
【００３８】
また、上側ハウジング２１には、上側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）２２、外側撮像部２３（外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂ）、内側撮像部２４、３Ｄ調整スイッチ２５、および、３Ｄインジケータ２６が設けられる。上側ＬＣＤ２２は、横長形状であり、長辺方向が上側ハウジング２１の長辺方向に一致するように配置される。上側ＬＣＤ２２は上側ハウジング２１の中央に配置される。上側ＬＣＤ２２の画面の面積は、下側ＬＣＤ１２の画面の面積よりも大きく設定される。また、上側ＬＣＤ２２の画面は、下側ＬＣＤ１２の画面よりも横長に設定される。なお、上側ＬＣＤ２２上を覆うように、タッチパネルを設けてもかまわない。
【００３９】
上側ＬＣＤ２２の画面は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、上側ハウジング２１に設けられた開口部から当該上側ＬＣＤ２２の画面が露出される。上側ＬＣＤ２２の画素数は、例えば、６４０ｄｏｔ×２００ｄｏｔ（横×縦）であってもよい。なお、本実施形態では上側ＬＣＤ２２は液晶表示装置であるとしたが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置などが利用されてもよい。また、上側ＬＣＤ２２として、任意の解像度の表示装置を利用することができる。
【００４０】
上側ＬＣＤ２２は、立体視可能な画像を表示することが可能な表示装置である。本実施例では、裸眼立体視可能な表示装置である。そして、横方向に交互に表示される左目用画像と右目用画像とを左目および右目のそれぞれに分解して見えるようにレンチキュラー方式やパララックスバリア方式（視差バリア方式）のものが用いられる。本実施形態では、上側ＬＣＤ２２はパララックスバリア方式のものとする。また、上側ＬＣＤ２２は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる。このように、上側ＬＣＤ２２は、立体視可能な画像を表示する立体表示モードと、画像を平面的に表示する（平面視画像を表示する）平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、スライドスイッチである３Ｄ調整スイッチ２５によって行われる。
【００４１】
外側撮像部２３は、上側ハウジング２１の外側面（上側ＬＣＤ２２が設けられた主面と反対側の背面）２１Ｄに設けられた２つの撮像部（２３ａおよび２３ｂ）の総称である。外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂは、上側ＬＣＤ２２（上側ハウジング２１）の左右方向に関して中央から対称となる位置にそれぞれ配置される。
【００４２】
内側撮像部２４は、上側ハウジング２１の内側面（主面）２１Ｂに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。内側撮像部２４は、所定の解像度を有する撮像素子（例えば、ＣＣＤイメージセンサやＣＭＯＳイメージセンサ等）と、レンズとを含む。レンズは、ズーム機構を有するものでもよい。
【００４３】
３Ｄインジケータ２６は、上側ＬＣＤ２２が立体表示モードか否かを示す。３Ｄインジケータ２６は、ＬＥＤであり、上側ＬＣＤ２２の立体表示モードが有効の場合に点灯する。
【００４４】
また、上側ハウジング２１の内側面には、スピーカ孔２１Ｅが設けられる。後述するスピーカ４３からの音声がこのスピーカ孔２１Ｅから出力される。
【００４５】
（ゲーム装置１０の内部構成）
次に、図２を参照して、ゲーム装置１０の内部の電気的構成について説明する。図２は、ゲーム装置１０の内部構成を示すブロック図である。図２に示すように、ゲーム装置１０は、上述した各部に加えて、情報処理部３１、メインメモリ３２、外部メモリインターフェイス（外部メモリＩ／Ｆ）３３、データ保存用外部メモリＩ／Ｆ３４、データ保存用内部メモリ３５、無線通信モジュール３６、ローカル通信モジュール３７、リアルタイムクロック（ＲＴＣ）３８、加速度センサ３９、電源回路４０、およびインターフェイス回路（Ｉ／Ｆ回路）４１等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて下側ハウジング１１（または上側ハウジング２１でもよい）内に収納される。
【００４６】
情報処理部３１は、所定のプログラムを実行するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１１、画像処理を行うＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１２等を含む情報処理手段である。情報処理部３１のＣＰＵ３１１は、ゲーム装置１０内のメモリ（例えば外部メモリＩ／Ｆ３３に接続された外部メモリ４４やデータ保存用内部メモリ３５）に記憶されているプログラムを実行することによって、当該プログラムに応じた処理を実行する。なお、情報処理部３１のＣＰＵ３１１によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。また、情報処理部３１は、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３１３を含む。情報処理部３１のＧＰＵ３１２は、情報処理部３１のＣＰＵ３１１からの命令に応じて画像を生成し、ＶＲＡＭ３１３に描画する。そして、情報処理部３１のＧＰＵ３１２は、ＶＲＡＭ３１３に描画された画像を上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に出力し、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像が表示される。
【００４７】
情報処理部３１には、メインメモリ３２、外部メモリＩ／Ｆ３３、データ保存用外部メモリＩ／Ｆ３４、および、データ保存用内部メモリ３５が接続される。外部メモリＩ／Ｆ３３は、外部メモリ４４を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリＩ／Ｆ３４は、データ保存用外部メモリ４５を着脱自在に接続するためのインターフェイスである。
【００４８】
メインメモリ３２は、情報処理部３１（のＣＰＵ３１１）のワーク領域やバッファ領域として用いられる揮発性の記憶手段である。すなわち、メインメモリ３２は、上記プログラムに基づく処理に用いられる各種データを一時的に記憶したり、外部（外部メモリ４４や他の機器等）から取得されるプログラムを一時的に記憶したりする。本実施形態では、メインメモリ３２として例えばＰＳＲＡＭ（Ｐｓｅｕｄｏ−ＳＲＡＭ）を用いる。
【００４９】
外部メモリ４４は、情報処理部３１によって実行されるプログラムを記憶するための不揮発性の記憶手段である。データ保存用外部メモリ４５は、不揮発性の読み書き可能なメモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。
【００５０】
データ保存用内部メモリ３５は、読み書き可能な不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。
【００５１】
無線通信モジュール３６は、例えばＩＥＥＥ８０２．１１ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。また、ローカル通信モジュール３７は、所定の通信方式（例えば独自プロトコルによる通信や、赤外線通信）により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール３６およびローカル通信モジュール３７は情報処理部３１に接続される。情報処理部３１は、無線通信モジュール３６を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール３７を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【００５２】
また、情報処理部３１には、加速度センサ３９および角速度センサ４７が接続される。加速度センサ３９は、３軸（ｘｙｚ軸）方向に沿った直線方向の加速度（直線加速度）の大きさを検出する。加速度センサ３９は、下側ハウジング１１の内部に設けられる。
【００５３】
角速度センサ４７は、３軸（ｘｙｚ軸）の角速度を検出する。例えば、角速度センサ４７は例えばジャイロセンサであり、３軸のジャイロセンサ１チップで構成される。角速度センサはヨー角に関する（単位時間あたりの）角速度（Ｙ軸周りの角速度）、ロール角に関する（単位時間あたりの）角速度（Ｚ軸周りの角速度）、およびピッチ角に関する（単位時間あたりの）角速度（Ｘ軸周りの角速度）を検出するためのものである。
【００５４】
なお、本実施形態では、後述するゲーム処理における計算を容易にする目的で、角速度センサ４７が角速度を検出する３つの軸は、加速度センサ３９が加速度を検出する３つの軸（ｘｙｚ軸）と一致するように設定される。
【００５５】
また、情報処理部３１には、ＲＴＣ３８および電源回路４０が接続される。ＲＴＣ３８は、時間をカウントして情報処理部３１に出力する。情報処理部３１は、ＲＴＣ３８によって計時された時間に基づき現在時刻（日付）を計算する。電源回路４０は、ゲーム装置１０が有する電源（下側ハウジング１１に収納される上記充電式電池）からの電力を制御し、ゲーム装置１０の各部品に電力を供給する。
【００５６】
また、情報処理部３１には、Ｉ／Ｆ回路４１が接続される。Ｉ／Ｆ回路４１には、マイク４２およびスピーカ４３が接続される。具体的には、Ｉ／Ｆ回路４１には、図示しないアンプを介してスピーカ４３が接続される。マイク４２は、ユーザの音声を検知して音声信号をＩ／Ｆ回路４１に出力する。アンプは、Ｉ／Ｆ回路４１からの音声信号を増幅し、音声をスピーカ４３から出力させる。また、タッチパネル１３はＩ／Ｆ回路４１に接続される。Ｉ／Ｆ回路４１は、マイク４２およびスピーカ４３（アンプ）の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するＡ／Ｄ変換およびＤ／Ａ変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル１３からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部３１に出力する。タッチ位置データは、タッチパネル１３の入力面において入力が行われた位置の座標を示す。なお、タッチパネル制御回路は、タッチパネル１３からの信号の読み込み、および、タッチ位置データの生成を所定時間に１回の割合で行う。情報処理部３１は、タッチ位置データを取得することにより、タッチパネル１３に対して入力が行われた位置を知ることができる。
【００５７】
操作ボタン１４は、上記各操作ボタン１４Ａ〜１４Ｌからなり、情報処理部３１に接続される。操作ボタン１４から情報処理部３１へは、各操作ボタン１４Ａ〜１４Ｉに対する入力状況（押下されたか否か）を示す操作データが出力される。情報処理部３１は、操作ボタン１４から操作データを取得することによって、操作ボタン１４に対する入力に従った処理を実行する。
【００５８】
下側ＬＣＤ１２および上側ＬＣＤ２２は情報処理部３１に接続される。下側ＬＣＤ１２および上側ＬＣＤ２２は、情報処理部３１（のＧＰＵ３１２）の指示に従って画像を表示する。本実施形態では、情報処理部３１は、上側ＬＣＤ２２に立体画像（立体視可能な画像）を表示させる。
【００５９】
外側撮像部２３および内側撮像部２４は、情報処理部３１に接続される。外側撮像部２３および内側撮像部２４は、情報処理部３１の指示に従って画像を撮像し、撮像した画像データを情報処理部３１に出力する。
【００６０】
３Ｄ調整スイッチ２５は、情報処理部３１に接続される。３Ｄ調整スイッチ２５は、スライダ２５ａの位置に応じた電気信号を情報処理部３１に送信する。
【００６１】
また、３Ｄインジケータ２６は、情報処理部３１に接続される。情報処理部３１は、３Ｄインジケータ２６の点灯を制御する。例えば、情報処理部３１は、上側ＬＣＤ２２が立体表示モードである場合、３Ｄインジケータ２６を点灯させる。
【００６２】
次に、ゲーム装置１０において実行されるゲーム処理の概要について説明する。図３は、本実施形態で想定するゲームの画面の一例であり、上側ＬＣＤ２２に、レーシングカーに乗っているプレイヤオブジェクト１０１が表示されている。そして、プレイヤは、ゲーム装置１０自体を車のハンドルに見立てて操作することで、プレイヤオブジェクト１０１を操作する。具体的には、プレイヤは、下側ハウジング１１を両手で把持し、ゲーム装置１０自体を左右に傾けて、ハンドルを切るような操作を行う（図４参照）。この操作に伴い、ゲーム装置１０自体の姿勢も変化することになるが、このゲーム装置１０の姿勢（より正確には下側ハウジング１１の姿勢であるが、以下では単にゲーム装置１０の姿勢と呼ぶ）をゲーム処理におけるステアリング操作に反映させる。
【００６３】
次に、上記のようなゲーム装置１０の姿勢を検出する姿勢検出処理の概要を説明する。本実施形態では、ゲーム装置１０は、角速度センサ４７と加速度センサ３９とを備えたゲーム装置１０からデータ（操作データ）を取得し、ゲーム装置１０の姿勢を検出する。より具体的には、本実施形態では、以下のような処理が行われる。まず、角速度センサ４７が検出する角速度に基づいてゲーム装置１０の姿勢が検出される。角速度から姿勢を検出する方法はどのような方法であってもよいが、例えば、初期姿勢に（単位時間あたりの）角速度を逐次加算する方法がある。すなわち、角速度センサ４７から逐次出力される角速度を積分し、初期状態からの姿勢の変化量を積分結果から算出することによって、現在の姿勢を検出することができる。なお、以下では、このような姿勢算出手法によって角速度に基づいて検出されるゲーム装置１０の姿勢を「第１の検出姿勢」と呼ぶ。ただし、第１の検出姿勢に補正が加えられた後の姿勢も第１の検出姿勢と呼ぶ。
【００６４】
ここで、上記第１の検出姿勢を含むゲーム装置１０の姿勢は、以下に示すような、３×３の行列Ｍ１として表現することができる。
【００６５】
【数１】
0005816032.tif 000002
当該姿勢は、ゲーム装置１０が存在する空間の所定位置を基準としたｘｙｚ座標系（空間座標系）における姿勢である。列がゲーム装置１０自身を基準とした場合のＸ軸方向、Ｙ軸方向、Ｚ軸方向のベクトルを示し、行は当該各ベクトルを構成するｘ、ｙ、ｚの３軸の成分を示す（つまり、空間座標系がｘｙｚ座標系、ゲーム装置１０を基準としたローカル座標系がＸＹＺ座標系である）。Ｘ軸方向のベクトルは、図１で示した状態のゲーム装置１０に水平方向に沿った方向（長手方向）に該当する。Ｙ軸方向のベクトルは、図１の垂直方向に該当する。Ｚ軸ベクトルは、同図の奥行き方向に該当する。
【００６６】
ところで、角速度センサ出力に誤差が含まれる場合に、検出された姿勢には時間と共に誤差が蓄積していくという性質がある。そのため、角速度センサ４７が検出する角速度を用いて算出される上記第１の検出姿勢には、角速度センサ４７の出力の誤差が原因で、ゲーム装置１０の実際の姿勢との間に誤差が生じることがある。そこで、本実施形態では、ゲーム装置１０は、加速度センサ３９によって検出される加速度を用いて上記第１の検出姿勢を補正する。これは、加速度による姿勢検出は、その検出タイミングごとの誤差は場合によっては大きい可能性もあるが（激しい動きが行われた場合等）、あるタイミングごとに検出可能であるので誤差が蓄積しないという特徴を持つという点に注目したものである。
【００６７】
図５〜図７は、当該補正の原理を示す図である。まず、図５は、上記第１の検出姿勢と、この第１の検出姿勢を基準とした場合に推定される重力方向であるベクトルｖ１（推定重力方向）を示す。図６は、加速度センサ３９によって検出される加速度データに基づいて算出される重力方向（鉛直下向き）であるベクトルＧと、このように重力方向が鉛直下向きであると想定した場合におけるゲーム装置１０の姿勢である第２の検出姿勢を示す。つまり、第２の検出姿勢は、加速度データから決まる姿勢ともいえる。そして、本実施形態では、図７に示すように、上記第１の検出姿勢を、加速度データから決まる第２の検出姿勢に近づける補正が行われる。
【００６８】
なお、本実施形態においては、第１の検出姿勢を第２の検出姿勢へと近づける補正を行い、補正後の第１の検出姿勢を第２の検出姿勢と一致させていない。これは、加速度データが誤検出や激しい操作等の原因で急激に変化する場合であっても補正後の第１の検出姿勢が急激に変化しないようにするためである。ただし、他の実施形態においては、補正後の第１の検出姿勢を第２の検出姿勢と一致させるように補正を行ってもよい。また、詳細は後述するが、本実施形態においては、第１の検出姿勢を第２の検出姿勢へと近づける割合は、加速度データにより示される加速度の大きさ（より具体的には、当該大きさと重力加速度の大きさとの差分）に応じて変化するように決められる。ただし、他の実施形態においては、上記割合を予め定められた固定値としてもよい。
【００６９】
そして、本実施形態では、このように補正された第１の検出姿勢のうち、Ｘ軸方向ベクトルのｙ成分のみをハンドルのステアリング操作に反映させる（図８参照）。ここで、ｙ成分については、ｙ軸における位置として捉えても良いし、図８におけるＸ軸方向ベクトルと水平軸との角度（ｙ成分相当の角度）として捉えても良い。このように、ｘ成分およびｚ成分は用いずに、ｙ成分のみを用いるのは、次のような理由による。上述のような補正処理は、加速度データで算出される重力方向を基準にして、上記角速度データで算出された姿勢を補正していることになる。つまり、重力方向という信頼度の高い基準を利用したものといえる。そして、ゲーム装置１０の姿勢を構成する各方向軸ベクトルにおいて、ｙ成分は（実空間における）重力方向に沿った成分を示しているといえる（なお、厳密には、完全に重力方向に沿っている場合に限らず、その方向に多少の誤差がある場合も含まれる。つまり、略重力方向に沿った成分を示している場合も含まれる）。
つまり、補正後の姿勢におけるｙ成分、換言すると、ｙ成分にかかる補正については、信頼度が非常に高いといえる。そこで、本実施形態では、ハンドルを切るような操作を模するという操作体系であることから、ゲーム装置１０の姿勢のうちＸ軸方向ベクトルを利用し、なおかつ、このベクトルの構成成分のうちのｙ成分のみを利用して、ハンドルの切り角度として反映させる。換言すれば、重力方向（場合によっては略重力方向）に関する姿勢の変化をステアリング操作に反映させている。これにより、補正の信頼度が高い成分に基づいたステアリング操作が実現でき、レーシングゲーム等における自車のステアリング操作等、重力方向に関する姿勢の変化を利用する操作について、違和感のない操作感を提供することができる。
【００７０】
次に、ゲーム装置１０において実行される処理の詳細について説明する。まず、ゲーム装置１０における処理において用いられる主なデータについて図９を用いて説明する。図９は、ゲーム装置１０のメインメモリ３２に記憶される主なデータを示す図である。図９に示すように、ゲーム装置１０のメインメモリ３２には、ゲームプログラム３２１、操作データ３２３、およびゲーム処理用データ３２９が記憶される。なお、メインメモリ３２には、図９に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【００７１】
ゲームプログラム３２１は、ゲーム装置１０に電源が投入された後の適宜のタイミングで外部メモリ４４あるいはデータ保存用内部メモリ３５からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム３２１には、姿勢検出プログラム３２２が含まれる。姿勢検出プログラム３２２は、ゲーム装置１０の姿勢を検出するための姿勢検出処理を実行するためのプログラムである。
【００７２】
操作データ３２３は、プレイヤがゲーム装置１０に対して行った操作内容を示すデータである。操作データ３２３には、操作ボタンデータ３２４、角速度データ３２５、加速度データ３２６、タッチ座標データ３２７、および、アナログ入力データ３２８が含まれる。操作ボタンデータ３２４は、各種操作ボタン１４の押下状態を示すデータである。角速度データ３２５は、角速度センサ４７によって検出された角速度を示すデータである。ここでは、角速度データ３２５は、図３に示すＸＹＺの３軸回りのそれぞれの角速度を示す。また、加速度データ３２６は、加速度センサ３９によって検出された加速度（加速度ベクトル）を示すデータである。ここでは、加速度データ３２６は、図３に示すＸＹＺの３軸の方向に関する加速度を各成分とする３次元の加速度ベクトルＶａ１を示す。また、本実施形態においては、ゲーム装置１０が静止している状態で加速度センサ３９が検出する加速度ベクトルＶａ１の大きさを“１”とする。つまり、加速度センサ３９によって検出される重力加速度の大きさは“１”である。タッチ座標データ３２７は、タッチパネル１３で検出されたタッチ座標を示すデータである。また、アナログ入力データ３２８は、アナログスティック１５の入力状態を示すデータである。
【００７３】
ゲーム処理用データ３２９は、後述するゲーム処理において用いられるデータである。ゲーム処理用データ３２９は、第１姿勢データ３３０、加速度大きさデータ３３１、補正度データ３３２、補正量ベクトルデータ３３３、補正行列データ３３４を含む。なお、図９に示すデータの他、ゲーム処理用データ３２９は、ゲーム処理において用いられる各種データ（ゲームパラメータを示すデータ等）を含む。
【００７４】
第１姿勢データ３３０は、角速度データ３２５を用いて算出される上記第１の検出姿勢を示すデータである。本実施形態では、第１の検出姿勢は、上述した式（１）に示す３×３の行列Ｍ１で表現される。以下では、第１の検出姿勢を示す行列Ｍ１を、「第１姿勢行列Ｍ１」と呼ぶ。なお、本実施形態では、行列を用いて第１の検出姿勢を表現することとしたが、他の実施形態においては、第１の検出姿勢は、３次のベクトルまたは３つの角度によって表現されてもよい。
【００７５】
加速度大きさデータ３３１は、加速度データ３２６により示される加速度ベクトルＶａ１の大きさ（長さ）Ｌを示すデータである。
【００７６】
補正度データ３３２は、第２の検出姿勢を用いて第１の検出姿勢を補正する度合（補正度Ａ）を示すデータである。補正度Ａは、０≦Ａ≦Ｃ１（Ｃ１は、０＜Ｃ１≦１の所定の定数）の範囲を取り得る値である。詳細は後述するが、補正後の第１の検出姿勢は、補正度Ａの値が大きいほど第２の検出姿勢に近くなる。
【００７７】
補正量ベクトルデータ３３３は、第１の検出姿勢を補正する補正量を示すベクトル（以下、補正量ベクトルと呼ぶ。）を示すデータである。補正量ベクトルＶｇは、上記加速度ベクトルＶａ１を上記ｘｙｚ座標系で表したベクトルＶａ２と、上記補正度Ａとに基づいて算出される。
【００７８】
補正行列データ３３４は、第１の検出姿勢を補正するために用いる回転行列（補正行列と呼ぶ）Ｍａを示すデータである。つまり、第１補正処理においては、第１の検出姿勢を表す第１姿勢行列Ｍ１に補正行列Ｍａを掛けることで第１の検出姿勢が補正される。補正行列Ｍａは、上記ベクトルＶａ２と上記補正量ベクトルＶｇとに基づいて算出される。
【００７９】
次に、ゲーム装置１０において行われる処理の詳細を、図１０〜図１１を用いて説明する。図１０は、ゲーム装置１０において実行される処理の流れを示すメインフローチャートである
【００８０】
まず、ステップＳ１において、ＣＰＵ３１１は、ゲームに関する初期化処理を実行する。この初期化処理においては、ゲーム処理に用いられる各種パラメータの値が初期化されたり、仮想のゲーム空間が構築されたり、プレイヤオブジェクトや他のオブジェクトがゲーム空間の初期位置に配置されたりする。以上のステップＳ１の次にステップＳ２の処理が実行される。
【００８１】
ステップＳ２において、ＣＰＵ３１１は、初期姿勢設定処理が実行される。具体的には、プレイヤが所定の操作を行ったことに応じて、ゲーム装置１０の第１の検出姿勢の初期姿勢として所定の値が設定される。ここでは、基準姿勢を、上記図１で示すような姿勢、すなわち、外側撮像部の撮像方向がＺ軸正方向を向き、かつ、下側ハウジングの右側面がＸ軸正方向（右向き）なる姿勢であるとする。そのため、プレイヤは、初期姿勢が上記基準姿勢となるようにゲーム装置１０を把持した状態で、上記所定の操作を行うことが望ましい。ＣＰＵ３１１は、所定の操作が行われると、上記初期姿勢を表す行列を示すデータを第１姿勢データとしてメインメモリに記憶する。以上のステップＳ２の後、ステップＳ３〜Ｓ９の処理ループが、ゲームが実行される間繰り返し実行される。なお、１回の当該処理ループは、１フレーム時間（例えば１／６０秒）に１回の割合で実行される。
【００８２】
なお、本実施形態では、初期姿勢設定処理（ステップＳ２）は、ゲーム開始前（ステップＳ３〜Ｓ９の処理ループが実行される前）に１回実行されるのみであるとしたが、他の実施形態においては、ゲーム中における任意のタイミングで初期姿勢設定処理が実行されるようにしてもよい。すなわち、ＣＰＵ３１１は、ゲーム中においてプレイヤが上記所定の操作を行ったことに応じて初期姿勢設定処理を実行するようにしてもよい。
【００８３】
次に、ステップＳ３において、ＣＰＵ３１１は操作データを取得する。そして、当該操作データに含まれる角速度データ、加速度データ、タッチ位置データ、操作ボタンデータがそれぞれメインメモリ３２に記憶される。
【００８４】
次に、ステップＳ４において、ＣＰＵ３１１は、メインメモリ３２に記憶されている角速度データ３２５に基づいて第１の検出姿勢を検出する。ゲーム装置１０の姿勢を角速度から検出する方法はどのような方法であってもよいが、本実施形態においては、第１の検出姿勢は、前回の第１の検出姿勢（前回の処理ループにおいて検出された第１の検出姿勢）と、今回の角速度（今回の処理ループにおいて取得された角速度）とを用いて検出される。具体的には、ＣＰＵ３１１は、前回の第１の検出姿勢を今回の角速度で単位時間分回転させた姿勢を、第１の検出姿勢とする。なお、前回の第１の検出姿勢は、メインメモリ３２に記憶されている第１姿勢データ３３０により示され、今回の角速度は、メインメモリ３２に記憶されている角速度データ３２５により示されている。ステップＳ４で算出された姿勢（３×３の行列）を示すデータが、第１姿勢データ３３０としてメインメモリ３２に新たに記憶される。
【００８５】
次に、ステップＳ５において、姿勢補正処理が実行される。図１０は、当該姿勢補正処理（ステップＳ５）の流れを示すフローチャートである。姿勢補正処理においては、まずステップＳ１１において、ＣＰＵ３１１は、加速度センサ３９によって検出された加速度の大きさＬを算出する。すなわち、メインメモリ３２に記憶されている加速度データ３２６を読み出し、当該加速度データ３２６により示される加速度ベクトルＶａ１について大きさＬを算出する。算出された大きさＬを示すデータは加速度大きさデータ３３１としてメインメモリ３２に記憶される。ステップＳ１１の次にステップＳ１２の処理が実行される。
【００８６】
ステップＳ１２において、ＣＰＵ３１１は、加速度センサ３９によって検出された加速度の大きさが０であるか否かを判定する。すなわち、メインメモリ３２に記憶されている加速度大きさデータ３３１を読み出し、当該加速度大きさデータ３３１により示される大きさＬが０であるか否かを判定する。ステップＳ１２の判定結果が否定である場合、ステップＳ１３の処理が実行される。一方、ステップＳ１２の判定結果が肯定である場合、以降のステップＳ１３〜Ｓ２１の処理がスキップされて、ＣＰＵ３１１は第１補正処理を終了する。このように、本実施形態においては、加速度センサ３９によって検出された加速度の大きさが０である場合には、当該加速度を用いた補正が行われない。これは、加速度の大きさが０である場合には加速度センサ３９の検出結果から重力方向を算出できないということ、および、加速度ベクトルの大きさが０であれば以降のステップＳ１３〜Ｓ２１の処理が困難であることが理由である。
【００８７】
ステップＳ１３において、ＣＰＵ３１１は、加速度センサ３９によって検出された加速度ベクトルＶａ１を正規化する。すなわち、メインメモリ３２に記憶されている加速度データ３２６を読み出し、当該加速度データ３２６により示される加速度ベクトルＶａ１を、大きさが１となるように補正する。ＣＰＵ３１１は、正規化された加速度ベクトルＶａ１を示すデータをメインメモリ３２に記憶しておく。
【００８８】
次に、ステップＳ１４において、ＣＰＵ３１１は、第１補正処理において第１の検出姿勢を補正する度合を示す上記補正度Ａを算出する。補正度Ａは、正規化される前の加速度ベクトルＶａ１の大きさＬに基づいて算出される。具体的には、ＣＰＵ３１１は、メインメモリ３２に記憶されている加速度大きさデータ３３１を読み出す。そして、当該加速度大きさデータ３３１により示される大きさＬを用いて、次の式（２）に従って補正度Ａを算出する。
Ａ＝｜Ｌ−１｜  …（２）
上式（２）で算出された補正度Ａを示すデータは、補正度データ３３２としてメインメモリ３２に記憶される。なお、上式（２）で算出された補正度Ａは、最終的な値ではない演算中の値であって、以降のステップＳ１６で値が変換されることによって、最終的な補正度Ａの値が得られる。ステップＳ１４の次にステップＳ１５の処理が実行される。
【００８９】
次に、ステップＳ１５において、ＣＰＵ３１１は、ステップＳ１４で算出された補正度Ａが所定値Ｒよりも小さいか否かを判定する。所定値Ｒは、予め定められており、例えば０．４に設定される。ここで、上述したように、本実施形態においては、加速度センサ３９によって検出される重力加速度の大きさは“１”であり、また、補正度Ａは加速度ベクトルＶａ１の大きさＬと“１”との差の絶対値である（上式（２））。したがって、補正度Ａが所定値Ｒ以上である場合とは、加速度ベクトルＶａ１の大きさＬが重力加速度の大きさから所定値Ｒ以上離れている場合である。ステップＳ１５の判定結果が肯定である場合、ステップＳ１６の処理が実行される。一方、ステップＳ１５の判定結果が否定である場合、以降のステップＳ１６〜Ｓ２１の処理がスキップされて、ＣＰＵ３１１は第１補正処理を終了する。
【００９０】
上記のように、本実施形態では、加速度センサ３９によって検出される加速度の大きさＬと重力加速度の大きさ（＝１）との差が所定の基準（所定値Ｒ）よりも小さい場合にのみ補正が行われ、当該大きさＬと重力加速度の大きさとの差が所定の基準以上である場合には補正が行われない。ここで、ゲーム装置１０が動かされている状態では、重力加速度以外に、ゲーム装置１０が動かされることによって生じる慣性による加速度が加速度センサ３９によって検出されるので、検出される加速度ベクトルＶａ１の大きさＬが“１”とは異なる値となり、ゲーム装置１０が激しく動かされている場合には、大きさＬが“１”から大きく離れた値となる。したがって、上記大きさＬと重力加速度の大きさとの差が所定の基準以上である場合とは、ゲーム装置１０が激しく動かされている場合であると推測される。一方、ゲーム装置１０が激しく動かされている場合には、加速度センサ３９によって検出される加速度ベクトルＶａ１に重力加速度以外の成分（上記慣性による加速度の成分）が多く含まれているため、加速度ベクトルＶａ１の値は、重力方向を示す値としては信頼できないものと推測される。したがって、上記ステップＳ１５の判定処理は、ゲーム装置１０が激しく動かされているか否か、換言すれば、加速度ベクトルＶａ１の値が重力方向（鉛直方向）を示す値としては信頼できるものであるか否かを判定する処理である。本実施形態においては、上記ステップＳ１５の判定処理によって、加速度ベクトルＶａ１の値が重力方向を示す値としては信頼できない場合には補正を行わず、加速度ベクトルＶａ１の値が重力方向を示す値としては信頼できる場合にのみ補正を行うようにしている。これによって、重力方向を示す値としては信頼できない加速度ベクトルＶａ１を用いて第１の検出姿勢に対する補正が行われた結果、第１の検出姿勢が正しく補正されなくなることを防止することができる。
【００９１】
ステップＳ１６において、ＣＰＵ３１１は、補正度Ａの値を変換する。本実施形態では、補正度Ａを、検出された加速度ベクトルＶａ１の大きさＬが重力加速度の大きさに近いほど１に近くなるように、補正度Ａを変換する。具体的には、ＣＰＵ３１１は、メインメモリ３２に記憶されている補正度データ３３２を読み出し、当該補正度データ３３２により示される補正度Ａを、以下の式（３）〜（５）に従って変換する。
Ａ２＝１−（Ａ１／Ｒ）  …（３）
Ａ３＝Ａ２×Ａ２  …（４）
Ａ４＝Ａ３×Ｃ１  …（５）
上式（３）〜（５）において、変数Ａ１は変換前の補正度（メインメモリ３２に現在記憶されている補正度データ３３２により示される値）であり、変数Ａ４がステップＳ１６において最終的に変換される補正度である。上式（３）は、変換前の補正度Ａ１の大きさが重力加速度の大きさ（＝１）に近いほど１に近くなるように変換後の補正度Ａ２を得るための式である。上式（４）は、変換前の補正度Ａ２が１に近いほど大きい重みが付されるように変換後の補正度Ａ３を得るための式である。上式（５）は、補正量の大きさを調整するための式である。すなわち、定数Ｃ１は、定数Ｃ１の値が大きいほど補正量は大きくなる。定数Ｃ１は、予め定められ、０＜Ｃ１≦１の範囲（例えば０．０３）で設定される。以上の式（３）〜（５）による変換によって得られた補正度Ａ４を示すデータが、新たな補正度データ３３２としてメインメモリに記憶される。上記ステップＳ１６の次にステップＳ１７の処理が実行される。
【００９２】
なお、本実施形態においては、上式（３）〜（５）による変換を行ったが、他の実施形態においては、上式（３）〜（５）のうち一部または全部の変換を省略してもよい。ただし、上式（３）の変換を省略する場合には、後述するステップＳ１８で用いる式（７）において、加速度ベクトルＶａ２と重力方向ベクトル（０，−１，０）とを入れ替える必要がある。
【００９３】
ステップＳ１７において、ＣＰＵ３１１は、ＸＹＺ座標系で表現される加速度ベクトルＶａ１をｘｙｚ座標系の値Ｖａ２へと変換する。ｘｙｚ座標系における加速度ベクトルＶａ２は、正規化された加速度ベクトルＶａ１を、前回のフレームにおいて得られた第１の検出姿勢を表す第１姿勢行列Ｍ１を用いて変換することによって算出される。すなわち、ＣＰＵ３１１は、ステップＳ１３においてメインメモリ３２に記憶された（正規化された）加速度ベクトルＶａ１のデータと、第１姿勢データ３３０とを読み出す。そして、当該加速度ベクトルＶａ１と当該第１姿勢データ３３０により示される第１姿勢行列Ｍ１とを用いて、ｘｙｚ座標系における加速度ベクトルＶａ２を算出する。より具体的には、正規化された加速度ベクトルＶａ１＝（ｎｘ，ｎｙ，ｎｚ）とし、第１姿勢行列Ｍ１の各要素を上式（１）に示す変数とし、ｘｙｚ座標系で表現される加速度ベクトルＶａ２＝（ｖｘ，ｖｙ，ｖｚ）とすると、加速度ベクトルＶａ２は次の式（６）に従って算出される。
ｖｘ＝Ｘｘ×ｎｘ＋Ｙｘ×ｎｙ＋Ｚｘ×ｎｚ
ｖｙ＝Ｘｙ×ｎｘ＋Ｙｙ×ｎｙ＋Ｚｙ×ｎｚ
ｖｚ＝Ｘｚ×ｎｘ＋Ｙｚ×ｎｙ＋Ｚｚ×ｎｚ  …（６）
上式（６）に示されるように、加速度ベクトルＶａ２は、回転行列である第１姿勢行列Ｍ１によって加速度ベクトルＶａ１を回転させることによって得ることができる。ステップＳ１７において算出された加速度ベクトルＶａ２はメインメモリに記憶される。上記ステップＳ１７の次にステップＳ１８の処理が実行される。
【００９４】
ステップＳ１８において、ＣＰＵ３１１は、ｘｙｚ座標系で表現される加速度ベクトルＶａ２と補正度Ａとを用いて補正量ベクトルＶｇを算出する。補正量ベクトルＶｇは、上記ステップＳ１６による変換後の補正度と、ｘｙｚ座標系の鉛直下方向（重力方向）を示すベクトル（０，−１，０）とを用いて算出される。具体的には、ＣＰＵ３１１は、メインメモリ３２に記憶されている補正度データ３３２を読み出し、当該補正度データ３３２により示される補正度Ａを用いて、以下の式（７）に従って補正量ベクトルＶｇ＝（ｇｘ，ｇｙ，ｇｚ）を算出する。
ｇｘ＝（０−ｖｘ）×Ａ＋ｖｘ
ｇｙ＝（−１−ｖｙ）×Ａ＋ｖｙ
ｇｚ＝（０−ｖｚ）×Ａ＋ｖｚ    …（７）
上式（７）に示されるように、補正量ベクトルＶｇは、加速度ベクトルＶａ２の終点から重力方向ベクトル（０，−１，０）の終点までを結ぶ線分をＡ：（１−Ａ）に内分する点を終点とするベクトルである。したがって、補正量ベクトルＶｇは、補正度Ａの値が大きいほど、重力方向ベクトルに近づくこととなる。ＣＰＵ３１１は、上式（７）によって算出された補正量ベクトルＶｇを示すデータを、補正量ベクトルデータ３３３としてメインメモリに記憶する。上記ステップＳ１８の次にステップＳ１９の処理が実行される。
【００９５】
ステップＳ１９において、ＣＰＵ３１１は、上記ステップＳ１８で算出された補正量ベクトルＶｇを正規化する。すなわち、メインメモリに記憶されている補正量ベクトルデータ３３３を読み出し、当該補正量ベクトルデータ３３３により示されるベクトルを正規化する。そして、正規化されたベクトルを示すデータを新たな補正量ベクトルデータ３３３としてメインメモリに記憶する。なお、上記ステップＳ１９で算出された補正量ベクトルＶｇが、図９に示すベクトルｖ３に相当する。上記ステップＳ１９の次にステップＳ２０の処理が実行される。
【００９６】
ステップＳ２０において、ＣＰＵ３１１は、第１の検出姿勢を補正するための補正行列Ｍａを算出する。補正行列Ｍａは、ｘｙｚ座標系で表現される加速度ベクトルＶａ２と、ステップＳ１９において正規化された補正量ベクトルＶｇとに基づいて算出される。具体的には、ＣＰＵ３１１は、ステップＳ１７でメインメモリに記憶された加速度ベクトルＶａ２と、補正量ベクトルデータ３３３を読み出す。そして、上記加速度ベクトルＶａ２を補正量ベクトルＶｇと一致するように回転させる回転行列を算出し、算出された回転行列を補正行列Ｍａとする。ステップＳ２０で算出された補正行列Ｍａを示すデータは、補正行列データ３３４としてメインメモリに記憶される。
【００９７】
次に、ステップＳ２１において、ＣＰＵ３１１は、第１の検出姿勢を示す第１姿勢行列Ｍ１を補正行列Ｍａで補正する。具体的には、ＣＰＵ３１１は、メインメモリ３２に記憶されている第１姿勢データ３３０および補正行列データ３３４を読み出す。そして、当該第１姿勢データ３３０により示される第１姿勢行列Ｍ１を、当該補正行列データ３３４により示される補正行列Ｍａによって変換する（第１姿勢行列Ｍ１と補正行列Ｍａとの積を算出する）。変換後の第１姿勢行列Ｍ１が、補正された第１の検出姿勢を示すこととなる。つまり、ステップＳ２１の処理は、上記図７で示したような、第１の検出姿勢を第２の検出姿勢に近づけるように回転させる処理に相当する。ＣＰＵ３１１は、補正後（変換後）の第１姿勢行列Ｍ１を示すデータを、新たな第１姿勢データ３３０としてメインメモリに記憶する。上記ステップＳ２１の後、ＣＰＵ３１１は姿勢補正処理を終了する。
【００９８】
図１０に戻り、次に、ステップＳ６において、ＣＰＵ３１１は、上記補正後の第１姿勢データ３３０から、Ｘ方向ベクトルのｙ成分（式１の成分Ｘｙ）を取得する。
【００９９】
次に、ステップＳ７において、ＣＰＵ３１１は、上記取得した成分Ｘｙをハンドルの切り角度に反映させる（切り角度を決定する）処理を実行する。つまり、成分Ｘｙとして示される値がステアリング操作に反映される。
【０１００】
次に、ステップＳ８において、ＣＰＵ３１１は、その他の各種ゲーム処理を実行する。すなわち、上記ハンドルの切り角度に基づいてプレイヤオブジェクト１０１を移動させる処理や、他のオブジェクトの移動処理等の各種ゲーム処理が実行される。更に、これらゲーム処理が反映された仮想空間を仮想カメラで撮影した画像がゲーム画面として描画される。
【０１０１】
次に、ステップＳ９において、ＣＰＵ３１１は、ゲームを終了するか否かを判定する。ステップＳ９の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップＳ９の判定結果が否定である場合、ステップＳ３の処理が再度実行される。以降、ステップＳｘでゲームを終了すると判定されるまで、ステップＳ３〜Ｓ９の処理ループが繰り返し実行される。一方、ステップＳ９の判定結果が肯定である場合、ＣＰＵ３１１は、図１０に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【０１０２】
このように、本実施形態では、角速度データを用いて算出されたゲーム装置１０の姿勢を、加速度データを用いて補正し、補正後の姿勢のＸ軸方向ベクトルのｙ成分のみをステアリング操作（ハンドルの切り角）に反映する処理を行っている。つまり、重力方向に沿った姿勢の変化をステアリング操作に反映させている。これにより、重力方向を基準とした成分であるが故にその補正の信頼度が高い成分のみを利用して、プレイヤによって行われたゲーム装置１０の姿勢の変化をゲーム処理に反映できるため、プレイヤが行った操作内容に対して違和感がより少ないプレイヤオブジェクト等の動きを実現できる。換言すれば、上記補正後の姿勢におけるｙ成分のみを用いることで、角速度センサと加速度センサのそれぞれの利点を最大に活かしたゲーム処理等の各種情報処理を実行することができる。
【０１０３】
なお、上述した実施形態では、レーシングゲームにおけるステアリング操作を例に挙げていた。ステアリング操作は平面的な操作（左右の傾きのみがわかればよい）であることから、ゲーム装置１０の姿勢におけるＸ軸方向ベクトルのみを利用していた。このような場合に限らず、例えば、ゲーム装置１０の姿勢におけるＸ軸方向ベクトルに加えて、他の軸方向のベクトルを併用してもよい。例えば、操縦桿の操作を模した操作をプレイヤに行わせるような場合、Ｘ軸方向ベクトルおよびＺ軸方向ベクトルを利用してもよい。そして、このような場合も、それぞれのベクトルのｙ成分を利用してゲーム処理を行えばよい。どの軸のベクトルであっても、ｙ成分については、重力方向に沿った成分であり、その補正の信頼度が高いと考えられるためである。つまり、重力方向に沿った変化が生じるような操作であればどのような操作であっても、ｙ成分（重力方向に沿った軸方向）に関する変化についてはより高い精度で捉えて、操作内容に反映することが可能となる。
【０１０４】
また、上記実施形態では、ステアリング操作として上記補正後の姿勢のＸ軸ベクトルのｙ成分を用いた例を示したが、この他、補正後の第１の検出姿勢のＸ軸方向ベクトルと、鉛直方向に垂直なベクトルとの成す角度（上記図８のｙ成分相当の角度）を算出し、この角度をハンドルの切り角に反映させるような処理を行ってもよい。
【０１０５】
また、上記実施形態では、２つの表示装置を備えた携帯型ゲーム装置を例に説明したが、単一の表示装置を備え、その筐体の内部に加速度センサおよび角速度センサを備えた携帯端末であってもよい。
【０１０６】
また、上記実施形態では、３軸回りの角速度を検出する角速度センサを用いて、３次元の姿勢を検出する場合を例として説明したが、２次元平面上における姿勢（回転角度）を算出する場合においても本発明を適用することが可能である。
【０１０７】
また、上記実施形態においては、ゲーム装置１０の姿勢をステアリング操作に反映させるための一連の処理が単一の装置（ゲーム装置１０）において実行される場合を説明したが、他の実施形態においては、上記一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの一部の処理がサーバ側装置によって実行されてもよい。さらには、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、上記一連の処理のうちの主要な処理がサーバ側装置によって実行され、当該端末側装置では一部の処理が実行されてもよい。また、上記情報処理システムにおいて、サーバ側のシステムは、複数の情報処理装置によって構成され、サーバ側で実行するべき処理を複数の情報処理装置が分担して実行してもよい。
【符号の説明】
【０１０８】
１０  ゲーム装置
１１  下側ハウジング
１２  下側ＬＣＤ
１３  タッチパネル
１４  操作ボタン
１５  アナログスティック
１６  ＬＥＤ
２１  上側ハウジング
２２  上側ＬＣＤ
２３ａ  外側撮像部（左）
２３ｂ  外側撮像部（右）
２４  内側撮像部
２７  タッチペン
３１  情報処理部
３２  メインメモリ
３３  外部メモリＩ／Ｆ
３４  データ保存用外部メモリＩ／Ｆ
３５  データ保存用内部メモリ
３６  無線通信モジュール
３７  ローカル通信モジュール
３８  ＲＴＣ
３９  加速度センサ
４０  電源回路
４２  マイク
４３  スピーカ
４４  外部メモリ
４５  データ保存用外部メモリ
４７  角速度センサ
【図１】
0005816032.tif 000003
【図２】
0005816032.tif 000004
【図３】
0005816032.tif 000005
【図４】
0005816032.tif 000006
【図５】
0005816032.tif 000007
【図６】
0005816032.tif 000008
【図７】
0005816032.tif 000009
【図８】
0005816032.tif 000010
【図９】
0005816032.tif 000011
【図１０】
0005816032.tif 000012
【図１１】
0005816032.tif 000013