(57)【要約】【課題】入力装置に備えられた加速度センサから得られたデータを用いて正確に当該入力装置の動きを判断することができる情報処理プログラムおよび情報処理装置を提供する。【解決手段】加速度を検出する加速度センサおよび角速度を検出する角速度センサをそれぞれ備えた入力装置から、当該加速度を示す加速度データおよび当該角速度を示す角速度データをそれぞれ取得する情報処理装置のコンピュータで実行される情報処理プログラムである。情報処理プログラムは、データ取得手段および加速度補正手段として、コンピュータを機能させる。データ取得手段は、加速度データおよび角速度データを繰り返し取得する。加速度補正手段は、角速度データが示す角速度の大きさに基づいて加速度データが示す加速度の補正を行う。【選択図】図１２
2010259612.tif 000002
【特許請求の範囲】
【請求項１】
加速度を検出する加速度センサおよび角速度を検出する角速度センサをそれぞれ備えた入力装置から、当該加速度を示す加速度データおよび当該角速度を示す角速度データをそれぞれ取得する情報処理装置のコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記加速度データおよび前記角速度データを繰り返し取得するデータ取得手段と、
前記角速度データが示す角速度の大きさに基づいて前記加速度データが示す加速度の補正を行う加速度補正手段として機能させる、情報処理プログラム。
【請求項２】
前記加速度補正手段で補正された加速度を用いて所定の処理を行う処理手段として、さらに前記コンピュータを機能させる、請求項１に記載の情報処理プログラム。
【請求項３】
前記加速度補正手段は、前記角速度の大きさが大きい場合、前記加速度データが示す加速度の補正量を大きく補正する、請求項１または２に記載の情報処理プログラム。
【請求項４】
前記加速度補正手段は、前記角速度データが示す角速度の大きさが大きい程、前記加速度の補正を行う度合を大きくする補正度合値を算出する補正度合値算出手段を含み、
前記加速度補正手段は、前記補正度合値が示す度合で前記加速度データが示す加速度を補正する、請求項１または２に記載の情報処理プログラム。
【請求項５】
前記加速度補正手段は、
前回の処理で用いられた前記補正度合値より、前記補正度合値算出手段が今回の処理で算出した補正度合値が小さいか否かを判定する補正度合値判定手段と、
前回の処理で用いられた前記補正度合値より、前記補正度合値算出手段が今回の処理で算出した補正度合値が小さいと前記補正度合値判定手段が判定した場合、前記補正度合値算出手段が今回の処理で算出した補正度合値を、前回の処理で用いられた前記補正度合値に少なくとも近づけて今回の処理で用いる補正度合値として更新する補正度合値更新手段とを、さらに含む、請求項４に記載の情報処理プログラム。
【請求項６】
前記補正度合値更新手段は、前記補正度合値算出手段が今回の処理で算出した補正度合値を、前回の処理で用いられた前記補正度合値に所定割合または所定量近づけて今回の処理で用いる補正度合値として更新する、請求項５に記載の情報処理プログラム。
【請求項７】
前記加速度補正手段は、
前回の処理で用いられた前記補正度合値より、前記補正度合値算出手段が今回の処理で算出した補正度合値が小さいか否かを判定する補正度合値判定手段と、
前回の処理で用いられた前記補正度合値より、前記補正度合値算出手段が今回の処理で算出した補正度合値が小さいと前記補正度合値判定手段が判定した場合、前回の処理で用いられた前記補正度合値を、前記補正度合値算出手段が今回の処理で算出した補正度合値に少なくとも近づけて今回の処理で用いる補正度合値として更新する補正度合値更新手段とを、さらに含む、請求項４に記載の情報処理プログラム。
【請求項８】
前記補正度合値更新手段は、前回の処理で用いられた前記補正度合値を、前記補正度合値算出手段が今回の処理で算出した補正度合値に所定割合または所定量近づけて今回の処理で用いる補正度合値として更新する、請求項７に記載の情報処理プログラム。
【請求項９】
前記補正度合値更新手段は、前回の処理で用いられた前記補正度合値より、前記補正度合値算出手段が今回の処理で算出した補正度合値が大きいと前記補正度合値判定手段が判定した場合、前記補正度合値算出手段が今回の処理で算出した補正度合値を、そのまま今回の処理で用いる補正度合値として更新する、請求項５または請求項７に記載の情報処理プログラム。
【請求項１０】
前記加速度センサは、前記入力装置に設定された複数軸方向に対してそれぞれ生じた加速度を検出して、当該加速度をそれぞれ示す加速度データを出力し、
前記角速度センサは、前記入力装置に設定された複数軸周りの角速度をそれぞれ検出して、当該角速度をそれぞれ示す角速度データを出力し、
前記加速度補正手段は、前記角速度データが示す複数軸周りそれぞれの角速度の大きさに基づいて、前記加速度データが示す複数軸方向それぞれの加速度を補正する、請求項１または２に記載の情報処理プログラム。
【請求項１１】
前記加速度センサが加速度をそれぞれ検出する方向である前記複数軸と、前記角速度センサが角速度を検出する回転軸である前記複数軸とは、前記入力装置に対してそれぞれ同じ方向に設定されており、
前記加速度補正手段は、前記複数軸に含まれる第１軸の方向の加速度を補正する場合、前記複数軸に含まれる当該第１軸とは異なる軸周りの角速度の大きさに基づいて補正する、請求項１０に記載の情報処理プログラム。
【請求項１２】
前記加速度補正手段は、前記複数軸に含まれる第１軸の方向の加速度を補正する場合、前記複数軸に含まれる当該第１軸とは異なる軸周りの角速度の大きさを全て加算した値に基づいて補正する、請求項１１に記載の情報処理プログラム。
【請求項１３】
前記複数軸は、互いに直交する第１軸、第２軸、および第３軸から構成され、
前記加速度補正手段は、前記第１軸の方向の加速度を補正する場合、前記第２軸周りの角速度の大きさおよび前記第３軸周りの角速度の大きさに基づいて当該第１軸方向の加速度を補正する、請求項１１に記載の情報処理プログラム。
【請求項１４】
前記加速度補正手段は、前記角速度データが示す前記第１軸周りの角速度、前記第２軸周りの角速度、および前記第３軸周りの角速度の大きさがそれぞれ大きい程、前記加速度の補正を行う度合を大きくする補正度合値を前記第１軸、前記第２軸、および前記第３軸毎に算出する補正度合値算出手段を含み、
前記加速度補正手段は、前記第１軸の方向の加速度を補正する場合、前記第２軸の補正度合値と前記第３軸の補正度合値とを加算した値が示す度合で当該第１軸方向の加速度を補正する、請求項１３に記載の情報処理プログラム。
【請求項１５】
前記加速度データが示す加速度に基づいて、前記入力装置に生じていると推定される重力加速度を算出する重力加速度算出手段として、さらに前記コンピュータを機能させ、
前記加速度補正手段は、前記加速度データが示す加速度から前記重力加速度算出手段で算出された重力加速度を除いた加速度に対して補正を行う、請求項１または２に記載の情報処理プログラム。
【請求項１６】
前記処理手段は、
前記角速度データが示す角速度に基づいて得られた前記入力装置の回転に応じた第１処理を、前記所定の処理の一部として行う第１処理手段と、
前記加速度補正手段で補正された加速度に基づいて得られた前記入力装置の移動に応じた第２処理を、前記所定の処理の一部として行う第２処理手段とを含む、請求項２に記載の情報処理プログラム。
【請求項１７】
前記処理手段は、前記入力装置の回転量に応じて、仮想世界に配置されたオブジェクトを前記入力装置が回転している方向に傾けて表示装置に表示し、
前記処理手段は、前記入力装置の移動量に応じて、前記オブジェクトを前記入力装置が移動している方向に移動させて前記表示装置に表示する、請求項１６に記載の情報処理プログラム。
【請求項１８】
前記入力装置は、
前記加速度センサおよび前記角速度センサをそれぞれ備える第１ユニットと、
前記加速度センサとは別の加速度センサを備え、前記第１ユニットと別設される第２ユニットとを含み、
前記処理手段は、前記加速度補正手段で補正された加速度の大きさと前記別の加速度センサが出力する加速度データが示す加速度の大きさとを比較し、当該大きさが小さい方の加速度を用いて前記所定の処理を行う、請求項２に記載の情報処理プログラム。
【請求項１９】
加速度を検出する加速度センサおよび角速度を検出する角速度センサをそれぞれ備えた入力装置から、当該加速度を示す加速度データおよび当該角速度を示す角速度データをそれぞれ取得する情報処理装置であって、
前記加速度データおよび前記角速度データを繰り返し取得するデータ取得手段と、
前記角速度データが示す角速度の大きさに基づいて前記加速度データが示す加速度の補正を行う加速度補正手段とを備える、情報処理装置。
【請求項２０】
前記加速度補正手段で補正された加速度を用いて所定の処理を行う処理手段を、さらに備える、請求項１９に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、加速度センサを備えた入力装置の動きを検出し、当該検出された動きに基づいて所定の処理を行う情報処理装置および当該情報処理装置で実行される情報処理プログラムに関する。
【背景技術】
【０００２】
従来、加速度センサを備えた入力装置において、入力装置本体の動きを検出し、当該検出結果に応じた処理を行うものが知られている（例えば、特許文献１参照）。上記特許文献１で開示されたコントロールキー装置は、３軸加速度センサを内蔵しており、当該加速度センサから得られる加速度データに応じて当該３軸方向それぞれに作用している加速度が検出される。そして、コントロールキー装置は、３軸方向それぞれに作用している加速度に基づいて、装置全体の姿勢や動きが判断される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０６−１９０１４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１で開示されたコントロールキー装置のように、３軸方向それぞれに作用している加速度を用いて装置全体の姿勢や動きを判断する場合、入力装置全体がどのような動きをすることによって得られた加速度であるのか瞬時に判断することが非常に難しい。例えば、入力装置全体が回転することによって生じた加速度であるのか、入力装置全体が平行移動することによって生じた加速度であるのかを、３軸方向それぞれに作用している加速度を用いて瞬時に判断することができなかった。
【０００５】
それ故に、本発明の目的は、入力装置に備えられた加速度センサから得られたデータを用いて正確に当該入力装置の動きを判断することができる情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【０００６】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００７】
本発明は、加速度を検出する加速度センサ（７０１）および角速度を検出する角速度センサ（９５、９６）をそれぞれ備えた入力装置（６）から、当該加速度を示す加速度データ（Ｄｂ）および当該角速度を示す角速度データ（Ｄａ）をそれぞれ取得する情報処理装置（５）のコンピュータ（１０）で実行される情報処理プログラムである。情報処理プログラムは、データ取得手段（ステップ４１およびステップ４２を実行するＣＰＵ１０；以下、単にステップ番号のみ記載する）および加速度補正手段（Ｓ４４〜Ｓ４６）として、コンピュータを機能させる。データ取得手段は、加速度データおよび角速度データを繰り返し取得する。加速度補正手段は、角速度データが示す角速度の大きさ（ｆ）に基づいて加速度データが示す加速度（ａ）の補正を行う（ｐの算出）。
【０００８】
上記によれば、入力装置に備えられた加速度センサが検出する加速度が当該入力装置に備えられた角速度センサから得られる角速度の大きさに基づいて補正される。これによって、加速度センサが検出する加速度に対して、入力装置が回転することによる加速度を考慮した補正が可能となる。
【０００９】
また、本発明は、処理手段（Ｓ４７）として、さらにコンピュータを機能させてもよい。処理手段は、加速度補正手段で補正された加速度（ｐ）を用いて所定の処理を行う。
【００１０】
上記によれば、補正後の加速度を用いて様々な処理が可能となり、例えば補正後の加速度を用いて正確に入力装置の動きを判断する処理が可能となる。
【００１１】
また、加速度補正手段は、角速度の大きさが大きい場合、加速度データが示す加速度の補正量（補正する絶対量または補正の割合）を大きく補正してもよい。
【００１２】
上記によれば、加速度センサが検出する加速度から、入力装置が回転することによる加速度を除くことが可能となるため、入力装置が平行移動することによって生じている加速度を用いた処理が可能となる。
【００１３】
また、加速度補正手段は、補正度合値算出手段（Ｓ４４）を含んでいてもよい。補正度合値算出手段は、角速度データが示す角速度の大きさが大きい程、加速度の補正を行う度合を大きくする補正度合値（ｆ）を算出する。この場合、加速度補正手段は、補正度合値が示す度合で加速度データが示す加速度を補正する。
【００１４】
上記によれば、加速度センサが検出する加速度から、入力装置が回転することによる加速度を除く度合で補正することが可能となるため、入力装置が平行移動することによって生じている加速度を用いた処理が可能となる。
【００１５】
また、加速度補正手段は、補正度合値判定手段（Ｓ６６）および補正度合値更新手段（Ｓ６７）を、さらに含んでいてもよい。補正度合値判定手段は、前回の処理で用いられた補正度合値（ｆ０）より、補正度合値算出手段が今回の処理で算出した補正度合値（ｆ）が小さいか否かを判定する。一例として、補正度合値更新手段は、前回の処理で用いられた補正度合値より、補正度合値算出手段が今回の処理で算出した補正度合値が小さいと補正度合値判定手段が判定した場合、補正度合値算出手段が今回の処理で算出した補正度合値を、前回の処理で用いられた補正度合値に少なくとも近づけて今回の処理で用いる補正度合値として更新する。
【００１６】
また、補正度合値更新手段は、補正度合値算出手段が今回の処理で算出した補正度合値を、前回の処理で用いられた補正度合値に所定割合または所定量近づけて今回の処理で用いる補正度合値として更新してもかまわない。
【００１７】
他の例として、補正度合値更新手段は、前回の処理で用いられた補正度合値より、補正度合値算出手段が今回の処理で算出した補正度合値が小さいと補正度合値判定手段が判定した場合、前回の処理で用いられた補正度合値を、補正度合値算出手段が今回の処理で算出した補正度合値に少なくとも近づけて今回の処理で用いる補正度合値として更新する。
【００１８】
また、補正度合値更新手段は、前回の処理で用いられた補正度合値を、補正度合値算出手段が今回の処理で算出した補正度合値に所定割合または所定量近づけて今回の処理で用いる補正度合値として更新してもかまわない。
【００１９】
上記によれば、補正度合値が前回用いられた補正度合値より小さくなった場合は、補正度合値が変化する速度が遅くなることになる。ここで、補正度合値が前回用いられた補正度合値より小さくなる場合は、入力装置に生じている角速度が遅くなる場合である。また、ユーザが入力装置自体の回転を止めようとした場合、当該回転を止めるための加速度が生じるために、当該回転が止まった場合でも当該回転を止めるための加速度が残ることがある。上記によれば、このような入力装置の回転を止める際の加速度を抑制することによって、入力装置が平行移動することによる加速度成分を正確に認識することができる。
【００２０】
また、補正度合値更新手段は、前回の処理で用いられた補正度合値より、補正度合値算出手段が今回の処理で算出した補正度合値が大きいと補正度合値判定手段が判定した場合、補正度合値算出手段が今回の処理で算出した補正度合値を、そのまま今回の処理で用いる補正度合値として更新してもよい。
【００２１】
上記によれば、補正度合値が前回用いられた補正度合値より大きくなった場合は、入力装置自体の回転変化に応じて、即時に補正度合値を変化させて加速度の補正に反映することができる。
【００２２】
また、加速度センサは、入力装置に設定された複数軸（ＸＹＺ軸）方向に対してそれぞれ生じた加速度を検出して、当該加速度をそれぞれ示す加速度データ（Ｄｂ１、Ｄｂ２、Ｄｂ３）を出力してもよい。角速度センサは、入力装置に設定された複数軸（ＸＹＺ軸）周りの角速度をそれぞれ検出して、当該角速度をそれぞれ示す角速度データ（Ｄａ１、Ｄａ２、Ｄａ３）を出力してもよい。この場合、加速度補正手段は、角速度データが示す複数軸周りそれぞれの角速度の大きさに基づいて、加速度データが示す複数軸方向それぞれの加速度を補正する。
【００２３】
上記によれば、複数軸毎に得られた加速度をそれぞれ補正するため、生じている加速度の方向および角速度の方向に基づいて効率よく補正することが可能となる。
【００２４】
また、加速度センサが加速度をそれぞれ検出する方向である複数軸と、角速度センサが角速度を検出する回転軸である複数軸とは、入力装置に対してそれぞれ同じ方向に設定してもよい。この場合、加速度補正手段は、複数軸に含まれる第１軸の方向の加速度を補正する場合、複数軸に含まれる当該第１軸とは異なる軸周りの角速度の大きさに基づいて補正する。
【００２５】
上記によれば、ある方向に生じている加速度に対しては、当該方向以外の方向を回転軸とする角速度を用いて補正することによって、当該方向に生じる加速度に影響を与える角速度のみを対象とした加速度の補正が可能となる。
【００２６】
また、加速度補正手段は、複数軸に含まれる第１軸の方向の加速度を補正する場合、複数軸に含まれる当該第１軸とは異なる軸周りの角速度の大きさを全て加算した値に基づいて補正してもよい。
【００２７】
上記によれば、ある方向に生じている加速度に対しては、当該方向以外の方向を回転軸とする角速度の大きさを全て合算した値を用いて補正することによって、当該方向に生じる加速度に影響を与える角速度全てを対象とした加速度の補正が可能となる。
【００２８】
また、複数軸は、互いに直交する第１軸、第２軸、および第３軸から構成されてもよい。この場合、加速度補正手段は、第１軸の方向の加速度を補正する場合、第２軸周りの角速度の大きさおよび第３軸周りの角速度の大きさに基づいて当該第１軸方向の加速度を補正する。
【００２９】
上記によれば、互いに直交する３軸に含まれる第１軸方向に生じている加速度に対しては、第２軸および第３軸をそれぞれ回転軸とする角速度を用いて補正することによって、第１軸方向に生じる加速度に影響を与える角速度を対象とした第１軸方向の加速度の補正が可能となる。
【００３０】
また、加速度補正手段は、補正度合値算出手段を含んでいてもよい。補正度合値算出手段は、角速度データが示す第１軸周りの角速度、第２軸周りの角速度、および第３軸周りの角速度の大きさがそれぞれ大きい程、加速度の補正を行う度合を大きくする補正度合値を第１軸、第２軸、および第３軸毎に算出する。この場合、加速度補正手段は、第１軸の方向の加速度を補正する場合、第２軸の補正度合値と第３軸の補正度合値とを加算した値が示す度合で当該第１軸方向の加速度を補正する。
【００３１】
上記によれば、互いに直交する３軸に含まれる第１軸方向に生じている加速度に対しては、第２軸および第３軸をそれぞれ回転軸とする角速度の大きさを加算した値を用いて補正することによって、第１軸方向に生じる加速度に影響を与える角速度を全て対象とした第１軸方向の加速度の補正が可能となる。
【００３２】
また、本発明は、重力加速度算出手段（Ｓ４３）として、さらにコンピュータを機能させてもよい。重力加速度算出手段は、加速度データが示す加速度に基づいて、入力装置に生じていると推定される重力加速度（ｇ）を算出する。この場合、加速度補正手段は、加速度データが示す加速度から重力加速度算出手段で算出された重力加速度を除いた加速度に対して補正を行う。
【００３３】
上記によれば、入力装置に作用する重力加速度を除いた加速度を用いることができるため、入力装置が動くことによる加速度のみを用いた処理が可能となる。
【００３４】
また、処理手段は、第１処理手段および第２処理手段を含んでいてもよい。第１処理手段は、角速度データが示す角速度に基づいて得られた入力装置の回転に応じた第１処理を、所定の処理の一部として行う。第２処理手段は、加速度補正手段で補正された加速度に基づいて得られた入力装置の移動に応じた第２処理を、所定の処理の一部として行う。
【００３５】
上記によれば、入力装置の回転（例えば傾き角度）および入力装置の移動（例えば平行移動量）に応じた処理が可能となる。
【００３６】
また、処理手段は、入力装置の回転量に応じて、仮想世界に配置されたオブジェクト（ＰＣ）を入力装置が回転している方向に傾けて表示装置（２）に表示してもよい。処理手段は、入力装置の移動量に応じて、オブジェクトを入力装置が移動している方向に移動させて表示装置に表示してもよい。
【００３７】
上記によれば、入力装置の回転量（傾き角度）に応じて仮想世界のオブジェクトを回転させ、入力装置の移動量（平行移動量）に応じて当該オブジェクトを移動させるような移動制御が可能となる。
【００３８】
また、入力装置は、第１ユニット（７）および第２ユニット（７６）を含んでいてもよい。第１ユニットは、加速度センサおよび角速度センサをそれぞれ備える。第２ユニットは、加速度センサとは別の加速度センサ（７６２）を備え、第１ユニットと別設される。この場合、処理手段は、加速度補正手段で補正された加速度の大きさと別の加速度センサが出力する加速度データが示す加速度の大きさとを比較し、当該大きさが小さい方の加速度を用いて所定の処理を（Ｓ１０９〜Ｓ１１１）行う。
【００３９】
上記によれば、２つのユニットから構成される入力装置を用いる場合であっても、入力装置全体が平行移動しているときに生じている加速度を取得することが可能となる。
【００４０】
また、本発明は、上記各手段を備える情報処理装置の形態で実施されてもよい。
【発明の効果】
【００４１】
本発明によれば、入力装置に備えられた加速度センサが検出する加速度が当該入力装置に備えられた角速度センサから得られる角速度の大きさに基づいて補正される。これによって、加速度センサが検出する加速度に対して、入力装置が回転することによる加速度を考慮した補正が可能となる。
【図面の簡単な説明】
【００４２】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１の入力装置６の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図４のコントローラ７の下筐体を外した状態を示す斜視図
【図７】図３の入力装置６の構成を示すブロック図
【図８】入力装置６を水平に維持して操作した場合にモニタ２に表示されるゲーム画面の一例を示す図
【図９】入力装置６を上方へ平行移動させて動かして操作した場合にモニタ２に表示されるゲーム画面の一例を示す図
【図１０】入力装置６を左へ傾けて操作した場合にモニタ２に表示されるゲーム画面の一例を示す図
【図１１】ゲーム装置本体５のメインメモリに記憶される主なデータおよびプログラムの一例を示す図
【図１２】ゲーム装置本体５において実行される第１の実施形態に係るゲーム処理の一例を示すフローチャート
【図１３】図１２におけるステップ４３の重力加速度更新処理の一例を示すサブルーチン
【図１４】図１２におけるステップ４４の補正度合値算出処理の一例を示すサブルーチン
【図１５】プレイヤが第２の実施形態で用いる入力装置６を操作している一例を示す外観図
【図１６】図１５のサブユニット７６の一例を示す斜視図
【図１７】図１５のサブユニット７６の上筐体を外した状態の一例を示す斜視図
【図１８】第２の実施形態に係る入力装置６の構成の一例を示すブロック図
【図１９】サブユニット７６が接続された入力装置６を右へ傾けて操作した場合にモニタ２に表示されるゲーム画面の一例を示す図
【図２０】サブユニット７６が接続された入力装置６を上方へ平行移動させて動かして操作した場合にモニタ２に表示されるゲーム画面の一例を示す図
【図２１】第２の実施形態において、ゲーム装置本体５のメインメモリに記憶される主なデータおよびプログラムの一例を示す図
【図２２】第２の実施形態においてゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャート
【図２３】図２２におけるステップ１０４のサブ重力加速度更新処理の一例を示すサブルーチン
【発明を実施するための形態】
【００４３】
（第１の実施形態）
図１を参照して、本発明の第１の実施形態に係る情報処理プログラムを実行する情報処理装置について説明する。以下、説明を具体的にするために、当該情報処理装置の一例の据置型のゲーム装置本体５を含むゲームシステムについて説明する。なお、図１は据置型のゲーム装置３を含むゲームシステム１の外観図であり、図２はゲーム装置本体５のブロック図である。以下、当該ゲームシステム１について説明する。
【００４４】
図１において、ゲームシステム１は、表示手段の一例の家庭用テレビジョン受像機（以下、モニタと記載する）２と、当該モニタ２に接続コードを介して接続する据置型のゲーム装置３とから構成される。モニタ２は、ゲーム装置３から出力された音声信号を音声出力するためのスピーカ２ａを備える。また、ゲーム装置３は、本願発明の情報処理プログラムの一例となるゲームプログラムを記録した光ディスク４と、当該光ディスク４のゲームプログラムを実行してゲーム画面をモニタ２に表示出力させるためのコンピュータを搭載したゲーム装置本体５と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体５に与えるための入力装置６とを備えている。
【００４５】
また、ゲーム装置本体５は、無線コントローラモジュール１９（図２参照）を内蔵する。無線コントローラモジュール１９は、入力装置６から無線送信されるデータを受信し、ゲーム装置本体５から入力装置６へデータを送信して、コントローラ７とゲーム装置本体５とを無線通信によって接続する。さらに、ゲーム装置本体５には、当該ゲーム装置本体５に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。
【００４６】
また、ゲーム装置本体５には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ１７（図２参照）が搭載される。ゲーム装置本体５は、光ディスク４に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ２に表示する。また、ゲームプログラム等は、光ディスク４に限らず、フラッシュメモリ１７に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体５は、フラッシュメモリ１７に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、入力装置６を操作することによって、ゲーム進行を楽しむことができる。
【００４７】
入力装置６は、自機に対して行われた操作の内容を示す操作データをゲーム装置本体５に与えるものである。本実施形態では、入力装置６は、コントローラ７と角速度検出ユニット９とを含む。詳細は後述するが、入力装置６は、コントローラ７に対して角速度検出ユニット９が着脱可能に接続されている構成である。
【００４８】
コントローラ７は、無線コントローラモジュール１９を内蔵するゲーム装置本体５へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて操作情報等の送信データを無線送信する。コントローラ７は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン（十字キーやスティック等を含む）とが設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。そして、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって例えば赤外光を出力する。また、コントローラ７は、ゲーム装置本体５の無線コントローラモジュール１９から無線送信された送信データを通信部７５で受信して、当該送信データに応じた音や振動を発生させることもできる。
【００４９】
次に、図２を参照して、ゲーム装置本体５の内部構成について説明する。図２は、ゲーム装置本体５の構成を示すブロック図である。ゲーム装置本体５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ／Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１３、ディスクドライブ１４、およびＡＶ−ＩＣ（Ａｕｄｉｏ  Ｖｉｄｅｏ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）１５等を有する。
【００５０】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムＬＳＩ１１の内部構成については、後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体５の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ３５または外部メインメモリ１２に読み出したデータを書き込む。
【００５１】
また、システムＬＳＩ１１には、入出力プロセッサ３１、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）３２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３３、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３４、および内部メインメモリ３５が設けられる。図示は省略するが、これらの構成要素３１〜３５は、内部バスによって互いに接続される。
【００５２】
ＧＰＵ３２は、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ３４は、ＧＰＵ３２がグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ３２は、ＶＲＡＭ３４に記憶されたデータを用いて画像データを作成する。
【００５３】
ＤＳＰ３３は、オーディオプロセッサとして機能し、内部メインメモリ３５や外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００５４】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、ＡＶコネクタ１６を介して、読み出した画像データをモニタ２に出力するとともに、読み出した音声データをモニタ２に内蔵されるスピーカ２ａに出力する。これによって、画像がモニタ２に表示されるとともに音がスピーカ２ａから出力される。
【００５５】
入出力プロセッサ（Ｉ／Ｏプロセッサ）３１は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ３１は、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５６】
入出力プロセッサ３１は、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ３１は、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介して当該データをネットワークに送信する。また、入出力プロセッサ３１は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２、および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０は、ゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体５と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体５を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５７】
また、入出力プロセッサ３１は、アンテナ２３および無線コントローラモジュール１９を介して、コントローラ７から送信される操作データ等を受信し、内部メインメモリ３５または外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。なお、内部メインメモリ３５には、外部メインメモリ１２と同様に、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、ＣＰＵ１０のワーク領域やバッファ領域として用いられてもかまわない。
【００５８】
さらに、入出力プロセッサ３１には、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ３１は、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５９】
また、ゲーム装置本体５（例えば、前部主面）には、当該ゲーム装置本体５の電源ボタン２４、ゲーム処理のリセットボタン２５、光ディスク４を脱着する投入口、およびゲーム装置本体５の投入口から光ディスク４を取り出すイジェクトボタン２６等が設けられている。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置本体５の各構成要素に対して、図示しないＡＣアダプタを介して電力が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体５の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００６０】
図３および図４を参照して、入力装置６について説明する。なお、図３は、入力装置６の上側後方から見た一例を示す斜視図である。図４は、コントローラ７を下側前方から見た一例を示す斜視図である。
【００６１】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００６２】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００６３】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、十字キー７２ａの代わりに設けてもかまわない。
【００６４】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置本体５が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６５】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置本体５の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６６】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール１９からコントローラ７へ、複数のＬＥＤ７０２のうち、上記コントローラ種別に対応するＬＥＤを点灯させるための信号が送信される。
【００６７】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５に示すスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６８】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６９】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。図１および図３に示した入力装置６の一例では、コネクタ７３を介して、コントローラ７の後面に角速度検出ユニット９が着脱自在に装着される。
【００７０】
ここで、以下の説明を具体的にするために、入力装置６（コントローラ７）に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸を入力装置６（コントローラ７）に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（操作ボタン７２ａが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の右側面（図３で表されている側面）方向をＸ軸正方向とする。
【００７１】
角速度検出ユニット９は、３軸周りの角速度を検知するジャイロセンサ（図７に示す２軸ジャイロセンサ９５および１軸ジャイロセンサ９６）を有する。角速度検出ユニット９の前端（図３に示すＺ軸正方向側の端部）には、コネクタ７３に接続可能なプラグ（図７に示すプラグ９３）が設けられる。さらに、プラグ９３の両側にはフック（図示せず）が設けられる。角速度検出ユニット９がコントローラ７に対して装着される状態では、プラグ９３がコネクタ７３に接続されるとともに、上記フックがコントローラ７の係止穴７３ａに係止する。これによって、コントローラ７と角速度検出ユニット９とがしっかりと固定される。また、角速度検出ユニット９は、側面（図３に示すＸ軸方向の面）にボタン９１を有している。ボタン９１は、それを押下すれば上記フックの係止穴７３ａに対する係止状態を解除することができるように構成されている。したがって、ボタン９１を押下しながらプラグ９３をコネクタ７３から抜くことによって、角速度検出ユニット９をコントローラ７から離脱することができる。
【００７２】
また、角速度検出ユニット９の後端には、上記コネクタ７３と同形状のコネクタ９７（図１８参照）が設けられる。したがって、コントローラ７（のコネクタ７３）に対して装着可能な他の機器（例えば、後述するサブユニット７６）は、角速度検出ユニット９の後端コネクタ９７に対しても装着可能である。なお、図３においては、当該後端コネクタ９７に対してカバー９２が着脱可能に装着されている。
【００７３】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００７４】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の動きを良好な感度でゲーム装置本体５等が判定することができる。
【００７５】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体５から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００７６】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置本体５から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００７７】
次に、図７を参照して、入力装置６（コントローラ７および角速度検出ユニット９）の内部構成について説明する。なお、図７は、入力装置６の構成の一例を示すブロック図である。
【００７８】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００７９】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００８０】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、少なくとも１軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて、加速度センサ７０１が提供されてもよい。
【００８１】
加速度センサ７０１に用いられるような加速度検出手段は、加速度センサ７０１の持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、それら３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００８２】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）等のコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【００８３】
例えば、加速度センサ７０１を搭載するコントローラ７が静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサ７０１によって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラ７が現実に静的な状態であれば、検出された加速度に基づいてコントローラ７の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ７０１の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に１Ｇ（重力加速度）が作用しているか否かだけでコントローラ７が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ７が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ７０１の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ７がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ７０１からの出力に基づいて、おおよそのコントローラ７の傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢、または位置を判定することができる。
【００８４】
一方、加速度センサ７０１が動的な状態であることを前提とする場合には、当該加速度センサ７０１が重力加速度成分に加えて加速度センサ７０１の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ７の動き方向等を知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７の様々な動きおよび／または位置を算出することができる。なお、加速度センサ７０１が動的な状態であることを前提とする場合であっても、加速度センサ７０１の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ７の傾きを知ることが可能である。
【００８５】
他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ７０１が静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。加速度センサ７０１でそれぞれ検知された加速度を示すデータは、通信部７５に出力される。
【００８６】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体５からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体５から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体５から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。また、マイコン７５１は、コネクタ７３に接続されている。角速度検出ユニット９から送信されてくるデータは、コネクタ７３を介してマイコン７５１に入力される。以下、角速度検出ユニット９の構成について説明する。
【００８７】
角速度検出ユニット９は、プラグ９３、マイコン９４、２軸ジャイロセンサ９５、および１軸ジャイロセンサ９６を備えている。上述のように、角速度検出ユニット９は、３軸（本実施形態では、ＸＹＺ軸）周りの角速度を検出し、検出した角速度を示すデータ（角速度データ）をコントローラ７へ出力する。
【００８８】
２軸ジャイロセンサ９５は、Ｘ軸周りの角速度およびＹ軸周りの（単位時間あたりの）角速度を検出する。また、１軸ジャイロセンサ９６は、Ｚ軸周りの（単位時間あたりの）角速度を検出する。なお、本明細書では、図３に示すように、コントローラ７の前後方向となるハウジング７１の長手方向周り（Ｚ軸周り）の回転方向をロール方向、コントローラ７の上下方向周り（Ｙ軸周り）の回転方向をヨー方向、コントローラ７の左右方向周り（Ｘ軸周り）の回転方向をピッチ方向と呼ぶ。すなわち、２軸ジャイロセンサ９５は、ピッチ方向（Ｘ軸周りの回転方向）およびヨー方向（Ｙ軸周りの回転方向）の角速度を検出し、１軸ジャイロセンサ９６は、ロール方向（Ｚ軸周りの回転方向）の角速度を検出する。
【００８９】
なお、本実施形態では、３軸周りの角速度を検出するために、２軸ジャイロセンサ９５と１軸ジャイロセンサ９６とを用いる構成としたが、他の実施形態においては、３軸周りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。また、２軸ジャイロセンサ９５と１軸ジャイロセンサ９６は、本発明において角速度を検出する手段の一例であり、様々な種類の角速度センサを用いることが可能である。例えば、振動式、機械式、流体式、光学式等の角速度センサを用いることが可能である。具体的には、角速度を検出する手段として、振動する物体に作用するコリオリ力を用いた振動式ジャイロスコープやサニャック（Ｓａｇｎａｃ）効果を用いた光学式ジャイロスコープ等を用いることが可能である。なお、２軸ジャイロセンサ９５および１軸ジャイロセンサ９６を総称して説明する場合は、ジャイロセンサ９５および９６と記載する。
【００９０】
各ジャイロセンサ９５および９６で検出された角速度を示すデータは、マイコン９４に出力される。したがって、マイコン９４には、ＸＹＺ軸の３軸周りの角速度を示すデータが入力されることになる。マイコン９４は、上記３軸周りの角速度を示すデータを角速度データとしてプラグ９３を介してコントローラ７へ出力する。なお、マイコン９４からコントローラ７への出力は、所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で出力を行うことが好ましい。一例として、各ジャイロセンサ９５および９６が角速度を検出してコントローラ７への出力する動作が、１／２００秒毎に行われる。
【００９１】
コントローラ７の説明に戻り、コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、撮像情報演算部７４からの処理結果データ、および角速度検出ユニット９からの３軸周りの角速度を示すデータ（Ｘ、Ｙ、Ｚ軸周り角速度データ）は、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ、Ｘ、Ｙ、およびＺ軸周り角速度データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、撮像情報演算部７４からの処理結果データ、角速度検出ユニット９からのＸ、Ｙ、およびＺ軸周り角速度データが、コントローラ７から送信される。そして、ゲーム装置本体５の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置本体５で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ、Ｘ、Ｙ、およびＺ軸周り角速度データ）を取得する。そして、ゲーム装置本体５のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００９２】
入力装置６を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ７自体を任意の傾斜角度に傾けたり、任意の方向に動かしたりする操作を行うことができる。その他、入力装置６によれば、プレイヤは、入力装置６を指し示すことによって、画面上の任意の位置を指示する操作を行うこともできる。
【００９３】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、図８〜図１０を用いてゲーム装置本体５で行う処理の概要について説明する。なお、図８は、入力装置６を水平に維持して操作した場合にモニタ２に表示されるゲーム画面の一例を示す図である。図９は、入力装置６を上方へ平行移動させて動かして操作した場合にモニタ２に表示されるゲーム画面の一例を示す図である。図１０は、入力装置６を左へ傾けて操作した場合にモニタ２に表示されるゲーム画面の一例を示す図である。
【００９４】
図８〜図１０において、モニタ２には、仮想ゲーム空間においてウェイクボードをするプレイヤキャラクタＰＣが表示されている。ここで、ウェイクボードは、ボード上に競技者の両足が固定された状態でボートに引かれることによって、当該ボードで水面上を滑る競技である。そして、図８〜図１０に示される仮想ゲーム空間におけるウェイクボードにおいては、入力装置６を操作するプレイヤが入力装置６自体を傾けたり動かしたりすることによって、プレイヤキャラクタＰＣを旋回させたりジャンプさせたりすることができる。
【００９５】
具体的には、図８に示すように、プレイヤが入力装置６を水平に維持して操作する場合、プレイヤキャラクタＰＣは、仮想ゲーム空間において引かれているボートに向かって真っ直ぐ滑るように動作する。また、図９に示すように、プレイヤが入力装置６を上方へ平行移動させて動かして操作した場合、プレイヤキャラクタＰＣは、仮想ゲーム空間において水面から上方へジャンプするように動作する。また、図１０に示すように、プレイヤが入力装置６を左へ傾けて操作した場合、プレイヤキャラクタＰＣは、仮想ゲーム空間において水面上を左へ旋回して滑るように動作する。
【００９６】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１１を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１１は、ゲーム装置本体５の外部メインメモリ１２および／または内部メインメモリ３５（以下、２つのメインメモリを総称して、単にメインメモリと記載する）に記憶される主なデータおよびプログラムの一例を示す図である。
【００９７】
図１１に示すように、メインメモリのデータ記憶領域には、角速度データＤａ、加速度データＤｂ、前回加速度データＤｃ、一時的な信用度データＤｄ、信用度データＤｅ、前回信用度データＤｆ、重力加速度データＤｇ、前回重力加速度データＤｈ、補正度合値データＤｉ、前回補正度合値データＤｊ、平行移動加速度データＤｋ、および画像データＤｌ等が記憶される。なお、メインメモリには、図１１に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。また、メインメモリのプログラム記憶領域には、ゲームプログラムを構成する各種プログラム群Ｐａが記憶される。各種プログラム群Ｐａは、ゲーム装置本体５に電源が投入された後の適宜のタイミングで光ディスク４やその他の記録媒体からその一部または全部が読み込まれてメインメモリに記憶される。
【００９８】
角速度データＤａは、角速度検出ユニット９のジャイロセンサ９５および９６によって検出された角速度を示すデータであり、使用される入力装置６毎に対応させて格納される。例えば、角速度データＤａは、入力装置６（ジャイロセンサ９５および９６）に生じた角速度を示すデータであり、入力装置６から送信データとして送信されてくる一連の操作情報に含まれる角速度データが格納される。角速度データＤａには、ジャイロセンサ９５および９６が検出したＸ軸周りの角速度ωｘを示すＸ軸周り角速度データＤａ１、Ｙ軸周りの角速度ωｙを示すＹ軸周り角速度データＤａ２、Ｚ軸周りの角速度ωｚを示すＺ軸周り角速度データＤａ３が含まれる。なお、ゲーム装置本体５に備える無線コントローラモジュール１９は、コントローラ７から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれる角速度データを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、例えば、上記バッファに蓄えられた角速度データがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に当該期間中に蓄えられたデータが読み出されて、メインメモリの角速度データＤａが更新される。
【００９９】
加速度データＤｂは、コントローラ７に生じた加速度を示すデータであり、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データが格納される。この加速度データＤｂには、加速度センサ７０１がＸ軸成分に対して検出した加速度ａｘを示すＸ軸方向加速度データＤｂ１、Ｙ軸成分に対して検出した加速度ａｙを示すＹ軸方向加速度データＤｂ２、およびＺ軸成分に対して検出した加速度ａｚを示すＺ軸方向加速度データＤｂ３が含まれる。なお、上記角速度データＤａと同様に、ゲーム装置本体５に備える無線コントローラモジュール１９は、コントローラ７から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた加速度データがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に読み出されて、メインメモリの加速度データＤｂが更新される。
【０１００】
このように、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。後述する処理の説明においては、後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを常に用いて処理して、次のステップに進める態様を用いる。
【０１０１】
また、後述する処理フローでは、角速度データＤａおよび加速度データＤｂがゲーム処理周期である１フレーム毎にそれぞれ更新される例を用いて説明するが、他の処理周期でそれぞれ更新されてもかまわない。例えば、コントローラ７からの送信周期毎に角速度データＤａおよび加速度データＤｂを更新し、当該更新された角速度データＤａおよび加速度データＤｂをそれぞれゲーム処理周期毎に利用する態様でもかまわない。この場合、角速度データＤａに記憶する角速度データＤａ１〜Ｄａ３および加速度データＤｂに記憶する加速度データＤｂ１〜Ｄｂ３をそれぞれ更新する周期と、ゲーム処理周期とが異なることになる。
【０１０２】
前回加速度データＤｃは、前回の処理において用いられた加速度データが格納される。具体的には、前回加速度データＤｃには、前回の処理において用いられたＸ軸成分の加速度ａ０ｘを示すＸ軸方向加速度データＤｃ１、前回の処理において用いられたＹ軸成分の加速度ａ０ｙを示すＹ軸方向加速度データＤｃ２、および前回の処理において用いられたＺ軸成分の加速度ａ０ｚを示すＺ軸方向加速度データＤｃ３が含まれる。
【０１０３】
一時的な信用度データＤｄは、コントローラ７に作用する重力加速度を推定する際に、コントローラ７に作用している加速度が重力加速度として信用できるものなのか否かを表す信用度を一時的に示す（一時的な信用度ｄ）データが格納される。信用度データＤｅは、コントローラ７に作用している加速度が重力加速度として信用できるものなのか否かを表す最終的な信用度（信用度ｔ）を示すデータが格納される。前回信用度データＤｆは、前回の処理において用いられた最終的な信用度（信用度ｔ０）を示すデータが格納される。
【０１０４】
重力加速度データＤｇは、コントローラ７に作用していると推定される重力加速度を示すデータが格納される。具体的には、重力加速度データＤｇには、コントローラ７に作用していると推定される重力加速度の大きさおよび方向を示す重力加速度ベクトルｇを示すデータが格納される。前回重力加速度データＤｈは、前回の処理においてコントローラ７に作用していると推定された重力加速度ベクトル（重力加速度ベクトルｇ０）を示すデータが格納される。
【０１０５】
補正度合値データＤｉは、コントローラ７から得られた加速度を補正する度合を表す補正度合値ｆを示すデータが格納される。具体的には、補正度合値データＤｉには、Ｘ軸成分に対する補正度合値ｆｘを示すＸ軸方向補正度合値データＤｉ１、Ｙ軸成分に対する補正度合値ｆｙを示すＹ軸方向補正度合値データＤｉ２、およびＺ軸成分に対する補正度合値ｆｚを示すＺ軸方向補正度合値データＤｉ３が含まれる。前回補正度合値データＤｊは、前回の処理において算出された補正度合値（補正度合値ｆ０）を示すデータが格納される。具体的には、前回補正度合値データＤｊには、前回の処理において用いられたＸ軸成分に対する補正度合値ｆ０ｘを示すＸ軸方向補正度合値データＤｊ１、前回の処理において用いられたＹ軸成分に対する補正度合値ｆ０ｙを示すＹ軸方向補正度合値データＤｊ２、および前回の処理において用いられたＺ軸成分に対する補正度合値ｆ０ｚを示すＺ軸方向補正度合値データＤｊ３が含まれる。
【０１０６】
平行移動加速度データＤｋは、コントローラ７から得られた加速度のうち、コントローラ７が平行移動することによって得られた加速度を表す平行移動加速度を示すデータが格納される。具体的には、平行移動加速度データＤｋには、コントローラ７が平行移動することによって得られた加速度を表す平行移動加速度ベクトルｐを示すデータが格納される。
【０１０７】
画像データＤｌは、プレイヤキャラクタＰＣ（図８〜図１０参照）、他のオブジェクト、および背景等を仮想ゲーム空間に配置して画像を生成するためのデータが格納される。
【０１０８】
次に、図１２〜図１４を参照して、ゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図１２は、ゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャートである。図１３は、図１２におけるステップ４３の重力加速度更新処理の一例を示すサブルーチンである。図１４は、図１２におけるステップ４４の補正度合値算出処理の一例を示すサブルーチンである。ここで、図１２〜図１４に示すフローチャートにおいては、ゲーム処理のうち、コントローラ７から得られる加速度が角速度データに応じて補正される動作や重力加速度が推定される動作について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１２〜図１４では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１０９】
ゲーム装置本体５の電源が投入されると、ゲーム装置本体５のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１２〜図１４に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１１０】
図１２において、ＣＰＵ１０は、ゲーム処理の初期処理を行い（ステップ４０）、次のステップに処理を進める。例えば、上記ステップ４０における初期処理では、ＣＰＵ１０は、以降のゲーム処理を行うための各パラメータの初期設定を行う。具体的には、ＣＰＵ１０は、角速度データＤａ、加速度データＤｂ、前回加速度データＤｃ、一時的な信用度データＤｄ、信用度データＤｅ、前回信用度データＤｆ、重力加速度データＤｇ、前回重力加速度データＤｈ、補正度合値データＤｉ、前回補正度合値データＤｊ、および平行移動加速度データＤｋに格納されているデータが示す値を、それぞれ初期値（例えば、０）に設定する。
【０１１１】
次に、ＣＰＵ１０は、入力装置６から角速度を示すデータを取得して（ステップ４１）、次のステップに処理を進める。例えば、ＣＰＵ１０は、入力装置６（コントローラ７）から受信した操作情報を取得し、当該操作情報に含まれる最新の角速度データが示す角速度を用いて角速度データＤａに格納する。具体的には、ＣＰＵ１０は、コントローラ７から受信した最新の操作情報に含まれるＸ軸周りの角速度データが示す角速度ωｘを用いて、Ｘ軸周り角速度データＤａ１を更新する。また、ＣＰＵ１０は、最新の操作情報に含まれるＹ軸周りの角速度データが示す角速度ωｙを用いて、Ｙ軸周り角速度データＤａ２を更新する。そして、ＣＰＵ１０は、最新の操作情報に含まれるＺ軸周りの角速度データが示す角速度ωｚを用いて、Ｚ軸周り角速度データＤａ３を更新する。
【０１１２】
次に、ＣＰＵ１０は、コントローラ７から加速度を示すデータを取得して（ステップ４２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、コントローラ７から受信した操作情報を取得し、当該操作情報に含まれる最新の加速度データが示す加速度を用いて加速度データＤｂに格納する。具体的には、ＣＰＵ１０は、コントローラ７から受信した最新の操作情報に含まれるＸ軸方向の加速度データが示す加速度ａｘを用いて、Ｘ軸方向加速度データＤｂ１を更新する。また、ＣＰＵ１０は、最新の操作情報に含まれるＹ軸方向の加速度データが示す加速度ａｙを用いて、Ｙ軸方向加速度データＤｂ２を更新する。そして、ＣＰＵ１０は、最新の操作情報に含まれるＺ軸方向の加速度データが示す加速度ａｚを用いて、Ｚ軸方向加速度データＤｂ３を更新する。
【０１１３】
次に、ＣＰＵ１０は、重力加速度更新処理を行い（ステップ４３）、次のステップに処理を進める。以下、図１３を参照して、上記ステップ４３で行う重力加速度更新処理について説明する。
【０１１４】
図１３において、ＣＰＵ１０は、一時的な信用度ｄを算出し、算出された一時的な信用度ｄを用いて一時的な信用度データＤｄを更新して（ステップ５１）、次のステップに処理を進める。ここで、当該重力加速度更新処理においては、現時点でコントローラ７に作用している加速度と、前回の処理において得られた加速度との差分が一定値以下の場合、すなわち加速度変化が閾値以下の場合、現時点でコントローラ７に作用している加速度が重力加速度であると推定する方法を用いている。そして、一時的な信用度ｄは、入力装置６（コントローラ７）に作用する重力加速度を推定する際に、現時点でコントローラ７に作用している加速度が重力加速度としてどれくらい信用できるものなのかを示す度合を、算出の過程において一時的に示すパラメータである。例えば、一時的な信用度ｄ＝１の場合、現時点でコントローラ７に作用している加速度が重力加速度として完全に信用できることを示す。一方、一時的な信用度ｄ＝０の場合、現時点でコントローラ７に作用している加速度が重力加速度として全く信用できないことを示す。
【０１１５】
具体的には、一時的な信用度ｄは、
ｄ＝１−（｜ａ−ａ０｜−ａｄｍｉｎ）／（ａｄｍａｘ−ａｄｍｉｎ）  …（１）
で算出される。ここで、ａは、現時点でコントローラ７に作用している加速度の大きさを示し、加速度データＤｂを参照して算出される。ａ０は、前回の処理において用いられた加速度の大きさを示し、前回加速度データＤｃを参照して算出される。ａｄｍａｘは、予め定められた定数であり、加速度の大きさａと加速度の大きさａ０との差分において、当該差分が定数ａｄｍａｘ以上の場合に現時点でコントローラ７に作用している加速度が重力加速度として全く信用できないものとする値である。ａｄｍｉｎは、予め定められた定数であり、加速度の大きさａと加速度の大きさａ０との差分において、当該差分が定数ａｄｍｉｎ以下の場合に現時点でコントローラ７に作用している加速度が重力加速度として完全に信用できるものとする値である。このように、上記数式（１）によって一時的な信用度ｄを算出することによって、加速度の変化量｜ａ−ａ０｜が小さければ一時的な信用度ｄが１に近づくため、現時点でコントローラ７に作用している加速度を重力加速度として信用できることを、一時的な信用度ｄの値によって示すことができる。一方、加速度の変化量｜ａ−ａ０｜が大きければ一時的な信用度ｄが０に近づくため、現時点でコントローラ７に作用している加速度を重力加速度として信用できないことを、一時的な信用度ｄの値によって示すことができる。
【０１１６】
次に、ＣＰＵ１０は、上記ステップ５１で算出された一時的な信用度ｄが１より大きいか否かを判断する（ステップ５２）。そして、ＣＰＵ１０は、一時的な信用度ｄが１より大きい場合、次のステップ５３に処理を進める。一方、ＣＰＵ１０は、一時的な信用度ｄが１以下の場合、次のステップ５４に処理を進める。
【０１１７】
ステップ５３において、ＣＰＵ１０は、一時的な信用度ｄを１に設定し、設定された一時的な信用度ｄを用いて一時的な信用度データＤｄを更新して、次のステップ５６に処理を進める。つまり、一時的な信用度ｄの値が１より大きい場合、当該値が１に丸められることになる。
【０１１８】
一方、一時的な信用度ｄが１以下の場合、ステップ５４において、ＣＰＵ１０は、上記ステップ５１で算出された一時的な信用度ｄが０より小さいか否かを判断する。そして、ＣＰＵ１０は、一時的な信用度ｄが０より小さい場合、次のステップ５５に処理を進める。一方、ＣＰＵ１０は、一時的な信用度ｄが０以上の場合、次のステップ５６に処理を進める。
【０１１９】
ステップ５５において、ＣＰＵ１０は、一時的な信用度ｄを０に設定し、設定された一時的な信用度ｄを用いて一時的な信用度データＤｄを更新して、次のステップ５６に処理を進める。つまり、一時的な信用度ｄの値が０より小さい場合、当該値が０に丸められることになる。
【０１２０】
ステップ５６において、ＣＰＵ１０は、前回信用度データＤｆを参照して、上記ステップ５１で算出された一時的な信用度ｄが前回算出された信用度ｔ０より大きいか否かを判断する。そして、ＣＰＵ１０は、一時的な信用度ｄが前回算出された信用度ｔ０より大きい場合（すなわち、ｔ０＜ｄの場合）、次のステップ５７に処理を進める。一方、ＣＰＵ１０は、一時的な信用度ｄが前回算出された信用度ｔ０以下の場合（すなわち、ｄ≦ｔ０の場合）、次のステップ５８に処理を進める。
【０１２１】
ステップ５７において、ＣＰＵ１０は、前回信用度データＤｆが示す前回の信用度ｔ０および上記ステップ５１で算出された一時的な信用度ｄを用いて、最終的な信用度ｔを算出し、次のステップ５９に処理を進める。具体的には、ＣＰＵ１０は、最終的な信用度ｔを
ｔ＝ｔ０＊Ｔ＋（１−Ｔ）＊ｄ  …（２）
で算出し、算出された信用度ｔを用いて、信用度データＤｅを更新する。ここで、Ｔは、０＜Ｔ＜１を満たす予め定められた定数である。上記数式（２）から明らかなように、定数Ｔの大きさに応じて、前回の信用度ｔ０に対して信用度ｔが更新される速さを調整することができ、定数Ｔの大きさが大きいほど信用度ｔが変化する速度が遅くなる。
【０１２２】
一方、ステップ５８において、ＣＰＵ１０は、上記ステップ５１で算出された一時的な信用度ｄを用いて最終的な信用度ｔを更新し、更新された最終的な信用度ｔを用いて信用度データＤｅを更新して、次のステップ５９に処理を進める。
【０１２３】
上記ステップ５６〜ステップ５８の処理から明らかなように、一時的な信用度ｄが前回算出された信用度ｔ０より低く（小さく）なった場合は、一時的な信用度ｄが最終的な信用度ｔに即時に反映される。一方、一時的な信用度ｄが前回算出された信用度ｔ０より高く（大きく）なった場合は、一時的な信用度ｄが最終的な信用度ｔに即時に反映されずに、最終的な信用度ｔが変化する速度が遅くなる。ここで、コントローラ７に搭載されている加速度センサの特性では、コントローラ７の動きを止めた際にその慣性で生じる加速度が前回の得られた加速度から徐々に減少する方向に変化していき、当該加速度の差分がそれほど大きい値にならない。したがって、算出された一時的な信用度ｄを最終的な信用度ｔに即座に反映させると、上記慣性により生じている加速度を安定した加速度（重力加速度）として扱ってしまうことがある。このような誤認識を回避するために、一時的な信用度ｄが前回算出された信用度ｔ０より高く変化した際には、前回の信用度ｔ０から徐々に変化するように更新する。また、逆に一時的な信用度ｄが前回算出された信用度ｔ０より低く変化した際には算出された一時的な信用度ｄを信用度ｔに即座に反応させるようにしている。
【０１２４】
ステップ５９において、ＣＰＵ１０は、信用度データＤｅが示す最終的な信用度ｔに基づいて、重力加速度を算出し、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ１０は、信用度データＤｅに格納されている信用度ｔと加速度データＤｂに格納されている加速度ａｘ、ａｙ、およびａｚとを用いて、重力加速度ベクトルｇを算出し、算出された重力加速度ベクトルｇを用いて重力加速度データＤｇを更新する。具体的には、重力加速度ベクトルｇは、
ｇ＝ａｎ＊ｔ＋ｇ０＊（１−ｔ）  …（３）
で算出されたベクトルを、重力の長さ（例えば、１）に正規化することによって算出される。ここで、ａｎは、現時点でコントローラ７に生じている加速度ベクトル（ａｘ，ａｙ，ａｚ）を正規化（例えば、長さ１に正規化）したベクトルである。また、ｇ０は、前回の処理において算出された重力加速度ベクトルであり、前回重力加速度データＤｈに格納されている重力加速度ベクトルｇ０である。この数式（３）によって、重力加速度ベクトルｇは、現時点の加速度ベクトルａおよび前回算出された重力加速度ベクトルｇ０が、信用度ｔの割合で線形補間されたベクトルとなる。
【０１２５】
図１２に戻り、上記ステップ４３の重力加速度更新処理の後、ＣＰＵ１０は、補正度合値算出処理を行い（ステップ４４）、次のステップに処理を進める。以下、図１４を参照して、上記ステップ４４で行う補正度合値算出処理について説明する。
【０１２６】
図１４において、ＣＰＵ１０は、入力装置６に設定されているＸＹＺ軸から、補正度合値ｆを算出する対象軸を選択する（ステップ６０）。そして、ＣＰＵ１０は、角速度データＤａを参照して対象軸における補正度合値ｆを算出し、算出された補正度合値ｆを用いて補正度合値データＤｉを更新して（ステップ６１）、次のステップに処理を進める。具体的には、対象軸がＸ軸である場合、補正度合値ｆｘは、
ｆｘ＝（｜ωｘ｜−Ｆｍｉｎ）／（Ｆｍａｘ−Ｆｍｉｎ）
で算出され、算出された補正度合値ｆｘを用いてＸ軸方向補正度合値データＤｉ１が更新される。ここで、｜ωｘ｜は、現時点で入力装置６に生じているＸ軸周りそれぞれの角速度ωｘの絶対値であり、角速度データＤａ１に格納されている角速度ωｘを参照することによって得られる。また、対象軸がＹ軸である場合、補正度合値ｆｙは、
ｆｙ＝（｜ωｙ｜−Ｆｍｉｎ）／（Ｆｍａｘ−Ｆｍｉｎ）
で算出され、算出された補正度合値ｆｙを用いてＹ軸方向補正度合値データＤｉ２が更新される。ここで、｜ωｙ｜は、現時点で入力装置６に生じているＹ軸周りそれぞれの角速度ωｙの絶対値であり、角速度データＤａ２に格納されている角速度ωｙを参照することによって得られる。さらに、対象軸がＺ軸である場合、補正度合値ｆｚは、
ｆｚ＝（｜ωｚ｜−Ｆｍｉｎ）／（Ｆｍａｘ−Ｆｍｉｎ）
で算出され、算出された補正度合値ｆｚを用いてＺ軸方向補正度合値データＤｉ３が更新される。ここで、｜ωｚ｜は、現時点で入力装置６に生じているＺ軸周りそれぞれの角速度ωｚの絶対値であり、角速度データＤａ３に格納されている角速度ωｚを参照することによって得られる。ここで、Ｆｍａｘは、予め定められた定数であり、入力装置６に生じる角速度ωｘ、ωｙ、およびωｚの大きさがそれぞれ定数Ｆｍａｘ以上の場合に、補正度合値ｆｘ、ｆｙ、およびｆｚをそれぞれ１以上とする値である。Ｆｍｉｎは、予め定められた定数であり、入力装置６に生じる角速度ωｘ、ωｙ、およびωｚの大きさがそれぞれ定数Ｆｍｉｎ以下の場合に、補正度合値ｆｘ、ｆｙ、およびｆｚをそれぞれ０以下とする値である。
【０１２７】
次に、ＣＰＵ１０は、上記ステップ６１で算出された補正度合値ｆが１より大きいか否かを判断する（ステップ６２）。そして、ＣＰＵ１０は、補正度合値ｆが１より大きい場合、次のステップ６３に処理を進める。一方、ＣＰＵ１０は、補正度合値ｆが１以下の場合、次のステップ６４に処理を進める。
【０１２８】
ステップ６３において、ＣＰＵ１０は、現在選択されている対象軸の補正度合値ｆを１に設定し、設定された補正度合値ｆを用いて対応する補正度合値データＤｉを更新して、次のステップ６６に処理を進める。つまり、補正度合値ｆの値が１より大きい場合、当該値が１に丸められることになる。
【０１２９】
一方、補正度合値ｆが１以下の場合、ステップ６４において、ＣＰＵ１０は、上記ステップ６１で算出された補正度合値ｆが０より小さいか否かを判断する。そして、ＣＰＵ１０は、補正度合値ｆが０より小さい場合、次のステップ６５に処理を進める。一方、ＣＰＵ１０は、補正度合値ｆが０以上の場合、次のステップ６６に処理を進める。
【０１３０】
ステップ６５において、ＣＰＵ１０は、現在選択されている対象軸の補正度合値ｆを０に設定し、設定された補正度合値ｆを用いて対応する補正度合値データＤｉを更新して、次のステップ６６に処理を進める。つまり、補正度合値ｆの値が０より小さい場合、当該値が０に丸められることになる。
【０１３１】
このように、補正度合値ｆは、現時点で入力装置６に生じている角速度の大きさが大きければ補正度合値ｆの値が１に近づき、角速度の大きさが小さければ補正度合値ｆの値が０に近づく。したがって、補正度合値ｆは、入力装置６に生じている角速度の大きさの度合を０〜１の間の値で示すパラメータとして用いることができる。
【０１３２】
ステップ６６において、ＣＰＵ１０は、前回補正度合値データＤｊを参照して、上記ステップ６１〜ステップ６５で算出された補正度合値ｆが、同じ対象軸に対して前回算出された補正度合値ｆ０より小さいか否かを判断する。そして、ＣＰＵ１０は、補正度合値ｆが前回算出された補正度合値ｆ０より小さい場合（すなわち、ｆ＜ｆ０の場合）、次のステップ６７に処理を進める。一方、ＣＰＵ１０は、補正度合値ｆが前回算出された補正度合値ｆ０以上の場合（すなわち、ｆ０≦ｆの場合）、次のステップ６８に処理を進める。
【０１３３】
ステップ６７において、ＣＰＵ１０は、上記ステップ６１で算出された補正度合値ｆおよび前回補正度合値データＤｊが示す同じ対象軸に対する前回の補正度合値ｆ０を用いて、補正度合値ｆを更新し、次のステップ６８に処理を進める。具体的には、ＣＰＵ１０は、対象軸がＸ軸である場合、補正度合値ｆｘを
ｆｘ←ｆｘ＊Ｓ＋（１−Ｓ）＊ｆ０ｘ
で更新し、算出された補正度合値ｆｘを用いて、Ｘ軸方向補正度合値データＤｉ１を更新する。ここで、ｆ０ｘは、Ｘ軸成分に対して前回算出された補正度合値であり、Ｘ軸方向補正度合値データＤｊ１を参照することによって得られる。また、Ｓは、０＜Ｓ＜１を満たす予め定められた定数である。上記数式から明らかなように、定数Ｓの大きさに応じて、前回の補正度合値ｆ０ｘに対して補正度合値ｆｘが更新される速さを調整することができ、定数Ｓの大きさが小さいほど補正度合値ｆｘが変化する速度が遅くなる。また、ＣＰＵ１０は、対象軸がＹ軸である場合、補正度合値ｆｙを
ｆｙ←ｆｙ＊Ｓ＋（１−Ｓ）＊ｆ０ｙ
で更新し、算出された補正度合値ｆｙを用いて、Ｙ軸方向補正度合値データＤｉ２を更新する。ここで、ｆ０ｙは、Ｙ軸成分に対して前回算出された補正度合値であり、Ｙ軸方向補正度合値データＤｊ２を参照することによって得られる。さらに、ＣＰＵ１０は、対象軸がＺ軸である場合、補正度合値ｆｚを
ｆｚ←ｆｚ＊Ｓ＋（１−Ｓ）＊ｆ０ｚ
で更新し、算出された補正度合値ｆｚを用いて、Ｚ軸方向補正度合値データＤｉ３を更新する。ここで、ｆ０ｚは、Ｚ軸成分に対して前回算出された補正度合値であり、Ｚ軸方向補正度合値データＤｊ３を参照することによって得られる。
【０１３４】
ここで、上記ステップ６７では、上記ステップ６１で算出された補正度合値ｆを前回の補正度合値ｆ０に所定割合（すなわち、Ｓ対１−Ｓの割合）近づけることによって、最終的な補正度合値ｆとしている。あるいは、前回の補正度合値ｆ０を上記ステップ６１で算出された補正度合値ｆに所定割合（すなわち、１−Ｓ対Ｓの割合）近づけることによって、最終的な補正度合値ｆとしている。なお、上記ステップ６７で補正度合値ｆを前回の補正度合値ｆ０に近づける、または前回の補正度合値ｆ０を補正度合値ｆに近づける大きさは、上記所定割合で算出しなくてもかまわない。例えば、上記ステップ６１で算出された補正度合値ｆを前回の補正度合値ｆ０に所定量（典型的には、一定量）近づけることによって、最終的な補正度合値ｆとしてもかまわない。あるいは、前回の補正度合値ｆ０を上記ステップ６１で算出された補正度合値ｆに所定量（典型的には、一定量）近づけることによって、最終的な補正度合値ｆとしてもかまわない。
【０１３５】
ステップ６８において、ＣＰＵ１０は、入力装置６に設定されているＸＹＺ軸全てに対して、それぞれ補正度合値ｆの算出が終了したか否かを判断する。そして、ＣＰＵ１０は、ＸＹＺ軸全てに対して、それぞれ補正度合値ｆの算出が終了している場合、当該サブルーチンによる処理を終了する。一方、ＣＰＵ１０は、ＸＹＺ軸のうち、補正度合値ｆの算出が終了していない軸がある場合、上記ステップ６０に戻って処理を繰り返す。
【０１３６】
上記ステップ６１〜ステップ６７の処理から明らかなように、補正度合値ｆが前回算出された補正度合値ｆ０以上の場合は、上記ステップ６１〜ステップ６５で算出された補正度合値ｆがそのまま採用される。一方、補正度合値ｆが前回算出された補正度合値ｆ０より小さくなった場合は、上記ステップ６１〜ステップ６５で算出された補正度合値ｆがそのまま採用されずに、補正度合値ｆが変化する速度が遅くなる。すなわち、補正度合値ｆは、その値が大きくなる場合と比較して、その値が小さくなる速度が抑制されることになる。
【０１３７】
図１２に戻り、上記ステップ４４の補正度合値算出処理の後、ＣＰＵ１０は、加速度ベクトルのＸＹＺ軸成分それぞれに作用する形式となる形式値ｅに補正度合値ｆを変換して（ステップ４５）、次のステップに処理を進める。例えば、ＣＰＵ１０は、以下の数式を用いて、補正度合値ｆｘ、ｆｙ、およびｆｚを形式値ｅに変換する。
ｅ＝（ｆｙ＋ｆｚ，ｆｘ＋ｆｚ，ｆｘ＋ｆｙ）
そして、ＣＰＵ１０は、形式値ｅの各成分値を０〜１の範囲内に丸める。具体的には、ＣＰＵ１０は、形式値ｅの各成分値の何れかが１より大きい場合、当該成分値を１とする。また、ＣＰＵ１０は、形式値ｅの各成分値の何れかが０より小さい場合、当該成分値を０とする。
【０１３８】
ここで、形式値ｅの各成分値について説明する。例えば、入力装置６においてＺ軸方向（図３参照）に作用している加速度には、Ｚ軸に垂直な軸周り、すなわちＸ軸周りおよびＹ軸周りに入力装置６自体が回転することによって生じている加速度も含まれている。したがって、Ｚ軸方向に作用している加速度のうち、入力装置６自体が平行移動することによって生じている加速度のみを取得したい場合、Ｘ軸周りおよびＹ軸周りに入力装置６自体が回転することによって生じている加速度を、Ｚ軸方向の加速度から割り引く必要がある。
【０１３９】
形式値ｅの３つ目の成分値はＺ軸に関する成分値であり、ｆｘ＋ｆｙで算出される。ここで、補正度合値ｆｘは、現時点で入力装置６に生じているＸ軸周りの角速度の大きさが大きければ値が大きくなるパラメータである。また、補正度合値ｆｙは、現時点で入力装置６に生じているＹ軸周りの角速度の大きさが大きければ値が大きくなるパラメータである。つまり、形式値ｅのＺ軸に関する成分値は、Ｘ軸周りおよびＹ軸周りの角速度が大きくなるとその値が大きくなる、すなわち、入力装置６自体がＸ軸周りおよびＹ軸周りに回転することによって生じている加速度が大きくなるとその値が大きくなるパラメータとなる。したがって、形式値ｅのＺ軸に関する成分値は、入力装置６においてＺ軸方向に作用している加速度から、入力装置６自体が回転することによって生じている加速度を割り引く際のパラメータとして用いることができる。
【０１４０】
同様に、形式値ｅの１つ目の成分値は、ｆｙ＋ｆｚで算出されるＸ軸に関する成分値であり、入力装置６自体がＹ軸周りおよびＺ軸周りに回転することによって生じている加速度が大きくなるとその値が大きくなるパラメータとなる。したがって、形式値ｅのＸ軸に関する成分値は、入力装置６においてＸ軸方向に作用している加速度から、入力装置６自体が回転することによって生じている加速度を割り引く際のパラメータとして用いることができる。さらに、形式値ｅの２つ目の成分値は、ｆｘ＋ｆｚで算出されるＹ軸に関する成分値であり、入力装置６自体がＸ軸周りおよびＺ軸周りに回転することによって生じている加速度が大きくなるとその値が大きくなるパラメータとなる。したがって、形式値ｅのＹ軸に関する成分値は、入力装置６においてＹ軸方向に作用している加速度から、入力装置６自体が回転することによって生じている加速度を割り引く際のパラメータとして用いることができる。
【０１４１】
次に、ＣＰＵ１０は、上記ステップ４５で変換された形式値ｅを用いて、平行移動加速度を算出し（ステップ４６）、次のステップに処理を進める。例えば、ＣＰＵ１０は、加速度データＤｂが示す加速度ａｘ、ａｙ、およびａｚと重力加速度データＤｇが示す重力加速度ベクトルｇと形式値ｅとを用いて平行移動加速度を示す平行移動加速度ベクトルｐを算出し、平行移動加速度ベクトルｐを示すデータを用いて平行移動加速度データＤｋを更新する。具体的には、平行移動加速度ベクトルｐは、
ｐ＝（ａ−ｇ）ｍｕｌ（１−ｅ）  …（４）
で算出される。ここで、ａは、現時点で入力装置６に作用している加速度ベクトルを示す。ｇは、現時点で入力装置６に作用していると推定される重力加速度ベクトルを示す。ｅは、上記ステップ４５で算出された形式値を示す。そして、ｍｕｌは、ＸＹＺ軸成分毎に積算することを示している。したがって、平行移動加速度ベクトルｐのＸＹＺ軸成分が（ｐｘ，ｐｙ，ｐｚ）、重力加速度ベクトルｇのＸＹＺ軸成分が（ｇｘ，ｇｙ，ｇｚ）、形式値ｅのＸＹＺ軸成分が（ｅｘ，ｅｙ，ｅｘ）でそれぞれ示されるとすると、上記数式（４）は、以下のようなＸＹＺ軸成分毎の数式で示される。
ｐｘ＝（ａｘ−ｇｘ）＊（１−ｅｘ）
ｐｙ＝（ａｙ−ｇｙ）＊（１−ｅｙ）
ｐｚ＝（ａｚ−ｇｚ）＊（１−ｅｚ）
【０１４２】
このように、平行移動加速度ベクトルｐは、現時点で入力装置６に作用している加速度から重力加速度を減算することによって重力加速度を除いた加速度を算出し、重力加速度が減算された加速度に（１−ｅ）を積算することによって得られる。ここで、上述したように形式値ｅのＸＹＺ軸成分値は、それぞれの軸方向に作用する加速度に影響を与える角速度の大きさを示す０〜１の範囲で設定されるパラメータであり、当該角速度が大きいほど１に近づくパラメータである。したがって、積算される（１−ｅ）は、それぞれの軸方向に作用する加速度に影響を与える角速度の大きさが大きいほど０に近づく０〜１の範囲の値となる。つまり、平行移動加速度ベクトルｐは、重力加速度が減算された加速度に（１−ｅ）を積算することによって、現時点で入力装置６に作用している加速度から重力加速度および入力装置６が回転することによって生じている加速度をそれぞれ割り引いたパラメータとなるため、入力装置６自体が平行移動することによって生じた加速度を示すベクトルとして用いることができる。
【０１４３】
次に、ＣＰＵ１０は、平行移動加速度データＤｋが示す平行移動加速度ベクトルｐと角速度データＤａが示す角速度ωｘ、ωｙ、およびωｚとを用いて、ゲーム処理を行い（ステップ４７）、次のステップに処理を進める。例えば、ＣＰＵ１０は、平行移動加速度ベクトルｐと角速度ωｘ、ωｙ、およびωｚとを用いて、プレイヤキャラクタＰＣの動作を制御する。
【０１４４】
具体的には、ＣＰＵ１０は、平行移動加速度ベクトルｐが所定値以上の大きさで入力装置６の上方を示している場合、平行移動加速度ベクトルｐの大きさの応じてプレイヤキャラクタＰＣをジャンプさせる（図９参照）。平行移動加速度ベクトルｐの実空間内における方向は、どのような方法で算出されてもよい。一例として、現時点で重力加速度が生じている方向（重力加速度ベクトルｇの方向）が実空間における鉛直方向とし、当該鉛直方向を基準として、平行移動加速度ベクトルｐの実空間内における方向を算出する。他の例として、後述する入力装置６の姿勢を基準として、平行移動加速度ベクトルｐの実空間内における方向を算出する。
【０１４５】
また、ＣＰＵ１０は、入力装置６の姿勢に応じて、プレイヤキャラクタＰＣの移動方向を算出する。例えば、入力装置６が左または右に傾けられた姿勢であることを角速度ωｘ、ωｙ、およびωｚが示す場合、入力装置６の姿勢（例えば、傾き角度）に応じて、入力装置６が傾いている方向へプレイヤキャラクタＰＣを旋回させる（図１０参照）。また、入力装置６が水平に維持された姿勢であることを角速度ωｘ、ωｙ、およびωｚが示す場合、プレイヤキャラクタＰＣを直進させる（図８参照）。入力装置６の姿勢（角度）は、角速度ωｘ、ωｙ、およびωｚを用いて算出することが可能であり、角速度ωｘ、ωｙ、およびωｚから入力装置６の姿勢（角度）を算出する方法はどのような方法であってもよい。例えば、入力装置６の初期姿勢に（単位時間あたりの）角速度ωｘ、ωｙ、およびωｚを逐次加算する方法がある。すなわち、ジャイロセンサ９５および９６から逐次出力された角速度ωｘ、ωｙ、およびωｚを積分し、初期状態からの姿勢の変化量（角度の変化量）を積分結果から算出することによって、現在の入力装置６の姿勢を算出することができる。
【０１４６】
次に、ＣＰＵ１０は、上記ステップ４１〜ステップ４７の処理によって算出されたパラメータを用いて前回のパラメータを更新して（ステップ４８）、次のステップに処理を進める。具体的には、ＣＰＵ１０は、加速度データＤｂが示す加速度ａｘ、ａｙ、およびａｚを用いて加速度ａ０ｘ、ａ０ｙ、およびａ０ｚをそれぞれ更新し、更新された加速度ａ０ｘ、ａ０ｙ、およびａ０ｚを用いて前回加速度データＤｃを更新する。ＣＰＵ１０は、信用度データＤｅが示す信用度ｔを用いて前回の信用度ｔ０を更新し、更新された信用度ｔ０を用いて前回信用度データＤｆを更新する。ＣＰＵ１０は、重力加速度データＤｇが示す重力加速度ベクトルｇを用いて前回の重力加速度ベクトルｇ０を更新し、更新された重力加速度ベクトルｇ０を用いて前回重力加速度データＤｈを更新する。そして、ＣＰＵ１０は、補正度合値データＤｉが示す補正度合値ｆｘ、ｆｙ、およびｆｚを用いて前回の補正度合値ｆ０ｘ、ｆ０ｙ、およびｆ０ｚをそれぞれ更新し、更新された補正度合値ｆ０ｘ、ｆ０ｙ、およびｆ０ｚを用いて前回補正度合値データＤｊを更新する。
【０１４７】
次に、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ４９）。ゲームを終了する条件としては、例えば、ステップ４７でゲーム処理されているゲームがゲームオーバーとなる条件が満たされたことや、プレイヤが当該ゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合、上記ステップ４１に戻って処理を繰り返す。一方、ＣＰＵ１０は、ゲームを終了する場合、当該フローチャートによる処理を終了する。
【０１４８】
このように、第１の実施形態に係るゲーム処理によれば、３軸方向それぞれに作用している加速度を用いて入力装置６自体の姿勢や動きを判断するために、入力装置６に生じている角速度を用いて入力装置６の回転を判定し、入力装置６が平行移動しているときに生じている加速度を取得している。これによって、上記ゲーム処理では、入力装置６が平行移動することによって得られた加速度を瞬時に判断することができる。したがって、上記ゲーム処理では、入力装置６全体を引き上げたり、入力装置６全体を突き出したりするような平行移動動作を、入力装置６から得られる加速度を用いて正確に認識することができる。
【０１４９】
（第２の実施形態）
次に、本発明の第２の実施形態に係る情報処理プログラムを実行する情報処理装置について説明する。なお、第２の実施形態に係る情報処理装置の一例である据置型のゲーム装置本体５を含むゲームシステムは、第１の実施形態に対して入力装置６の構成が異なり、他の構成については第１の実施形態におけるゲームシステムと同様であるため、同一の構成については同一の参照符号を付して詳細な説明を省略する。
【０１５０】
図１５を参照して、第２の実施形態で用いる入力装置６の構成について説明する。なお、図１５は、プレイヤが第２の実施形態で用いる入力装置６を操作している一例を示す外観図である。
【０１５１】
図１５において、入力装置６は、さらにサブユニット７６を有している。サブユニット７６は、片手で把持可能であり、接続ケーブル７３１を介して角速度検出ユニット９（コントローラ７）と接続されている。サブユニット７６の後端から延びる接続ケーブル７３１の先端にはコネクタ７３２が設けられ、角速度検出ユニット９の後端に設けられているコネクタ９７と接続される。コネクタ７３２をコネクタ９７に接続することで、サブユニット７６は、角速度検出ユニット９（コントローラ７）と物理的および電気的に結合される。
【０１５２】
サブユニット７６の入力データは、接続ケーブル７３１および角速度検出ユニット９を介して、コントローラ７に与えられる。コントローラ７は、コントローラ７自身の入力データと、角速度検出ユニット９からの角速度データと、サブユニット７６の入力データとを含む操作データをゲーム装置本体５に送信する。このとき、上記操作データを一度に送信してもいいが、一度に送信するデータ量に制限がある場合、角速度検出ユニット９からの角速度データとサブユニット７６からの入力データとを交互に、角速度検出ユニット９がコントローラ７へ出力することによって、両者のデータを送信することもできる。このデータ送信制御は、角速度検出ユニット９によって行われるため、コントローラ７やサブユニット７６には角速度検出ユニット９の搭載によって何ら設計の変更をする必要がない。
【０１５３】
図１６および図１７を参照して、サブユニット７６について説明する。なお、図１６は、サブユニット７６の一例を示す斜視図である。図１７は、図１６のサブユニット７６の上筐体（ハウジング７６３の一部）を外した状態の一例を示す斜視図である。
【０１５４】
図１６において、サブユニット７６は、例えばプラスチック成型によって形成されたハウジング７６３を有している。ハウジング７６３は、その前後方向を長手方向とし、サブユニット７６において最太部となる頭部を前方に形成した流線型の立体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【０１５５】
ハウジング７６３上面の上記最太部近傍に、スティック７６１ａが設けられる。スティック７６１ａは、ハウジング７６３上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部である。例えば、プレイヤがスティック先端を３６０°任意の方向に傾倒することによって任意の方向や位置を指定することができ、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【０１５６】
サブユニット７６のハウジング７６３の前面に、複数の操作ボタン７６１ｂおよび７６１ｃが設けられる。操作ボタン７６１ｂおよび７６１ｃは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７６１ｂおよび７６１ｃに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７６１ｂおよび７６１ｃには、ＸボタンおよびＹボタン等としての機能が割り当てられる。これら操作ボタン７６１ｂおよび７６１ｃは、ゲーム装置本体５が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図１６に示した配置例では、操作ボタン７６１ｂおよび７６１ｃは、ハウジング７６３前面の上下方向に沿って並設されている。なお、サブユニット７６に設けられる操作部（スティック７６１ａ、操作ボタン７６１ｂおよび７６１ｃ）を総称して説明する場合、以下の説明では操作部７６１と記載することがある。
【０１５７】
ここで、以下の説明を具体的にするために、サブユニット７６に対して設定する座標系について定義する。図１６に示すように、互いに直交するＸＹＺ軸をサブユニット７６に対して定義する。具体的には、サブユニット７６の前後方向となるハウジング７６３の長手方向をＺ軸とし、サブユニット７６の前面（操作ボタン７６１ｂおよび７６１ｃが設けられている面）方向をＺ軸正方向とする。また、サブユニット７６の上下方向をＹ軸とし、ハウジング７６３の上面方向（スティック７６１ａが突出する方向）をＹ軸正方向とする。さらに、サブユニット７６の左右方向をＸ軸とし、ハウジング７６３の右側面（図１６では表されない側面）方向をＸ軸正方向とする。
【０１５８】
図１７において、ハウジング７６３の内部には基板が固設されており、当該基板の上主面上にスティック７６１ａおよび加速度センサ７６２等が設けられる。そして、これらは、基板等に形成された配線（図示せず）を介して接続ケーブル７３１と接続されている。なお、サブユニット７６もコントローラ７と同様に、３軸の加速度センサ７６２を備えていることが好ましく、加速度センサ７６２は、サブユニット７６に生じたＸＹＺ軸方向それぞれの加速度を検出する。加速度センサ７６２は、加速度センサ７０１と同様の機能や構成を有するため、詳細な説明を省略する。
【０１５９】
次に、図１８を参照して、第２の実施形態に係る入力装置６の内部構成について説明する。なお、図１８は、第２の実施形態に係る入力装置６の構成の一例を示すブロック図である。以下においては、図７を用いて説明した第１の実施形態との主な相違点である角速度検出ユニット９およびサブユニット７６について、主に説明する。
【０１６０】
角速度検出ユニット９のコネクタ９７には、サブユニット７６から延びる接続ケーブル７３１のコネクタ７３２が接続される。コネクタ７３２には、サブユニット７６の操作部７６１および加速度センサ７６２が接続される。操作部７６１が操作されると、接続ケーブル７３１、コネクタ７３２、およびコネクタ９７を介して、操作部７６１の操作内容を示すデータが角速度検出ユニット９のマイコン９４に与えられる。マイコン９４は、プラグ９３およびコネクタ７３を介して、操作部７６１の操作内容を示すデータを通信部７５に出力する。また、加速度センサ７６２も加速度センサ７０１と同様のサンプリング周期を有しており、接続ケーブル７３１、コネクタ７３２、およびコネクタ９７を介して、加速度センサ７６２が検出した加速度を示すデータも角速度検出ユニット９のマイコン９４に与えられる。そして、マイコン９４は、プラグ９３およびコネクタ７３を介して、加速度センサ７６２が検出した加速度を示すデータを通信部７５に出力する。
【０１６１】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、図１９および図２０を用いてゲーム装置本体５で行う処理の概要について説明する。なお、図１９は、サブユニット７６が接続された入力装置６を右へ傾けて操作した場合にモニタ２に表示されるゲーム画面の一例を示す図である。図２０は、サブユニット７６が接続された入力装置６を上方へ平行移動させて動かして操作した場合にモニタ２に表示されるゲーム画面の一例を示す図である。
【０１６２】
図１９および図２０において、モニタ２には、仮想ゲーム空間においてパーソナルウォータークラフト（水上オートバイ）を操縦するプレイヤキャラクタＰＣが表示されている。ここで、パーソナルウォータークラフトは、操縦者によって操縦され、水面を滑走しながら航走する小型舟艇である。そして、図１９および図２０に示される仮想ゲーム空間におけるパーソナルウォータークラフトにおいては、入力装置６を操作するプレイヤが入力装置６自体（コントローラ７およびサブユニット７６）を同じ方向に傾けたり動かしたりすることによって、プレイヤキャラクタＰＣが操作するパーソナルウォータークラフトを旋回させたりジャンプさせたりすることができる。典型的には、プレイヤは、コントローラ７を右手に把持しサブユニット７６を左手に把持して、あたかもパーソナルウォータークラフトのハンドルバーを両手で操縦するように操作する。
【０１６３】
具体的には、図１９に示すように、プレイヤがコントローラ７およびサブユニット７６を共に右へ傾けて操作した場合、プレイヤキャラクタＰＣは、仮想ゲーム空間において水面上を右へ旋回してパーソナルウォータークラフトを航走する。また、図２０に示すように、プレイヤがコントローラ７およびサブユニット７６を共に上方へ平行移動させて動かして操作した場合、プレイヤキャラクタＰＣは、仮想ゲーム空間において水面から上方へジャンプするようにパーソナルウォータークラフトを航走する。
【０１６４】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図２１を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図２１は、ゲーム装置本体５のメインメモリに記憶される主なデータおよびプログラムの一例を示す図である。
【０１６５】
図２１に示すように、メインメモリのデータ記憶領域には、角速度データＤａ、加速度データＤｂ、前回加速度データＤｃ、一時的な信用度データＤｄ、信用度データＤｅ、前回信用度データＤｆ、重力加速度データＤｇ、前回重力加速度データＤｈ、補正度合値データＤｉ、前回補正度合値データＤｊ、平行移動加速度データＤｋ、および画像データＤｌに加えて、サブ加速度データＤｍ、前回サブ加速度データＤｎ、一時的なサブ信用度データＤｏ、サブ信用度データＤｐ、前回サブ信用度データＤｑ、サブ重力加速度データＤｒ、および前回サブ重力加速度データＤｓ等が記憶される。なお、メインメモリには、図２１に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。また、メインメモリのプログラム記憶領域には、ゲームプログラムを構成する各種プログラム群Ｐａが記憶される。各種プログラム群Ｐａは、ゲーム装置本体５に電源が投入された後の適宜のタイミングで光ディスク４やその他の記録媒体からその一部または全部が読み込まれてメインメモリに記憶される。
【０１６６】
メインメモリのデータ記憶領域に記憶される角速度データＤａ、加速度データＤｂ、前回加速度データＤｃ、一時的な信用度データＤｄ、信用度データＤｅ、前回信用度データＤｆ、重力加速度データＤｇ、前回重力加速度データＤｈ、補正度合値データＤｉ、前回補正度合値データＤｊ、平行移動加速度データＤｋ、および画像データＤｌについては、第１の実施形態で説明したデータと同様であるため、詳細な説明を省略する。以下、第２の実施形態において加えられているサブ加速度データＤｍ、前回サブ加速度データＤｎ、一時的なサブ信用度データＤｏ、サブ信用度データＤｐ、前回サブ信用度データＤｑ、サブ重力加速度データＤｒ、および前回サブ重力加速度データＤｓについて説明する。
【０１６７】
サブ加速度データＤｍは、サブユニット７６に生じた加速度を示すデータであり、サブユニット７６からコントローラ７を介して送信データとして送信されてくる一連の操作情報に含まれる加速度データ（サブ加速度データ）が格納される。このサブ加速度データＤｍには、加速度センサ７６２がＸ軸成分に対して検出した加速度ａｓｘを示すＸ軸方向加速度データＤｍ１、Ｙ軸成分に対して検出した加速度ａｓｙを示すＹ軸方向加速度データＤｍ２、およびＺ軸成分に対して検出した加速度ａｓｚを示すＺ軸方向加速度データＤｍ３が含まれる。なお、サブ加速度データＤｍが更新される周期については、上述した加速度データＤｂと同様であるため、詳細な説明を省略する。
【０１６８】
前回サブ加速度データＤｎは、前回の処理において用いられたサブ加速度データが格納される。具体的には、前回サブ加速度データＤｎには、前回の処理において用いられたサブユニット７６のＸ軸成分の加速度ａｓ０ｘを示すＸ軸方向加速度データＤｎ１、前回の処理において用いられたサブユニット７６のＹ軸成分の加速度ａｓ０ｙを示すＹ軸方向加速度データＤｎ２、および前回の処理において用いられたサブユニット７６のＺ軸成分の加速度ａｓ０ｚを示すＺ軸方向加速度データＤｎ３が含まれる。
【０１６９】
一時的なサブ信用度データＤｏは、サブユニット７６に作用する重力加速度を推定する際に、サブユニット７６に作用している加速度が重力加速度として信用できるものなのか否かを表す信用度を一時的に示す（一時的なサブ信用度ｄｓ）データが格納される。サブ信用度データＤｐは、サブユニット７６に作用している加速度が重力加速度として信用できるものなのか否かを表す最終的な信用度（サブ信用度ｔｓ）を示すデータが格納される。前回サブ信用度データＤｑは、前回の処理において用いられた最終的な信用度（サブ信用度ｔｓ０）を示すデータが格納される。
【０１７０】
サブ重力加速度データＤｒは、サブユニット７６に作用していると推定される重力加速度を示すデータが格納される。具体的には、サブ重力加速度データＤｒには、サブユニット７６に作用していると推定される重力加速度の大きさおよび方向を示すサブ重力加速度ベクトルｇｓを示すデータが格納される。前回サブ重力加速度データＤｓは、前回の処理においてサブユニット７６に作用していると推定された重力加速度ベクトル（サブ重力加速度ベクトルｇｓ０）を示すデータが格納される。
【０１７１】
次に、図２２および図２３を参照して、第２の実施形態においてゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図２２は、第２の実施形態においてゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャートである。図２３は、図２２におけるステップ１０４のサブ重力加速度更新処理の一例を示すサブルーチンである。なお、図２２および図２３では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１７２】
図２１において、ＣＰＵ１０は、ゲーム処理の初期処理を行い（ステップ１００）、次のステップに処理を進める。例えば、上記ステップ１００における初期処理では、ＣＰＵ１０は、以降のゲーム処理を行うための各パラメータの初期設定を行う。具体的には、ＣＰＵ１０は、角速度データＤａ、加速度データＤｂ、前回加速度データＤｃ、一時的な信用度データＤｄ、信用度データＤｅ、前回信用度データＤｆ、重力加速度データＤｇ、前回重力加速度データＤｈ、補正度合値データＤｉ、前回補正度合値データＤｊ、平行移動加速度データＤｋ、サブ加速度データＤｍ、前回サブ加速度データＤｎ、一時的なサブ信用度データＤｏ、サブ信用度データＤｐ、前回サブ信用度データＤｑ、サブ重力加速度データＤｒ、および前回サブ重力加速度データＤｓに格納されているデータが示す値を、それぞれ初期値（例えば、０）に設定する。
【０１７３】
次に、ＣＰＵ１０は、入力装置６から角速度を示すデータを取得して（ステップ１０１）、次のステップに処理を進める。なお、上記ステップ１０１で行う処理は、上述したステップ４１の処理と同様であるため、詳細な説明を省略する。
【０１７４】
次に、ＣＰＵ１０は、コントローラ７およびサブユニット７６からそれぞれ加速度を示すデータを取得して（ステップ１０２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、入力装置６（コントローラ７）から受信した操作情報を取得し、加速度センサ７０１から得られる最新の加速度データが示す加速度を用いて上記ステップ４２と同様に加速度データＤｂに格納する。また、ＣＰＵ１０は、入力装置６（コントローラ７）から受信した操作情報を取得し、加速度センサ７６２から得られる最新の加速度データが示す加速度を用いてサブ加速度データＤｍに格納する。具体的には、ＣＰＵ１０は、サブユニット７６から受信した最新の操作情報に含まれるサブユニット７６のＸ軸方向の加速度データが示す加速度ａｓｘを用いて、Ｘ軸方向加速度データＤｍ１を更新する。また、ＣＰＵ１０は、最新の操作情報に含まれるサブユニット７６のＹ軸方向の加速度データが示す加速度ａｓｙを用いて、Ｙ軸方向加速度データＤｍ２を更新する。そして、ＣＰＵ１０は、最新の操作情報に含まれるサブユニット７６のＺ軸方向の加速度データが示す加速度ａｓｚを用いて、Ｚ軸方向加速度データＤｍ３を更新する。
【０１７５】
次に、ＣＰＵ１０は、重力加速度更新処理を行い（ステップ１０３）、次のステップに処理を進める。なお、上記ステップ１０３で行う重力加速度更新処理は、上述したステップ４３で行う重力加速度更新処理と同様であるため、詳細な説明を省略する。
【０１７６】
次に、ＣＰＵ１０は、サブ重力加速度更新処理を行い（ステップ１０４）、次のステップに処理を進める。以下、図２３を参照して、上記ステップ１０４で行うサブ重力加速度更新処理について説明する。
【０１７７】
図２３において、ＣＰＵ１０は、一時的なサブ信用度ｄｓを算出し、算出された一時的なサブ信用度ｄｓを用いて一時的なサブ信用度データＤｏを更新して（ステップ１２１）、次のステップに処理を進める。ここで、当該サブ重力加速度更新処理においても、現時点でサブユニット７６に作用している加速度と、前回の処理において得られたサブユニット７６の加速度との差分が一定値以下の場合、すなわち加速度変化が閾値以下の場合、現時点でサブユニット７６に作用している加速度が重力加速度であると推定する方法を用いている。そして、一時的なサブ信用度ｄｓは、サブユニット７６に作用する重力加速度を推定する際に、現時点でサブユニット７６に作用している加速度が重力加速度としてどれくらい信用できるものなのかを示す度合を、算出の過程において一時的に示すパラメータである。例えば、一時的なサブ信用度ｄｓ＝１の場合、現時点でサブユニット７６に作用している加速度が重力加速度として完全に信用できることを示す。一方、一時的なサブ信用度ｄｓ＝０の場合、現時点でサブユニット７６に作用している加速度が重力加速度として全く信用できないことを示す。
【０１７８】
具体的には、一時的なサブ信用度ｄｓは、一時的な信用度ｄと同様に
ｄｓ＝１−（｜ａｓ−ａｓ０｜−ａｓｄｍｉｎ）／（ａｓｄｍａｘ−ａｓｄｍｉｎ）  …（５）
で算出される。ここで、ａｓは、現時点でサブユニット７６に作用している加速度の大きさを示し、サブ加速度データＤｍを参照して算出される。ａｓ０は、前回の処理において用いられたサブユニット７６の加速度の大きさを示し、前回サブ加速度データＤｎを参照して算出される。ａｓｄｍａｘは、予め定められた定数であり、加速度の大きさａｓと加速度の大きさａｓ０との差分において、当該差分が定数ａｓｄｍａｘ以上の場合に現時点でサブユニット７６に作用している加速度が重力加速度として全く信用できないものとする値である。ａｓｄｍｉｎは、予め定められた定数であり、加速度の大きさａｓと加速度の大きさａｓ０との差分において、当該差分が定数ａｓｄｍｉｎ以下の場合に現時点でサブユニット７６に作用している加速度が重力加速度として完全に信用できるものとする値である。このように、上記数式（５）によって一時的なサブ信用度ｄｓを算出することによって、サブユニット７６の加速度の変化量｜ａｓ−ａｓ０｜が小さければ一時的なサブ信用度ｄｓが１に近づくため、現時点でサブユニット７６に作用している加速度を重力加速度として信用できることを、一時的なサブ信用度ｄｓの値によって示すことができる。一方、サブユニット７６の加速度の変化量｜ａｓ−ａｓ０｜が大きければ一時的なサブ信用度ｄｓが０に近づくため、現時点でサブユニット７６に作用している加速度を重力加速度として信用できないことを、一時的なサブ信用度ｄｓの値によって示すことができる。
【０１７９】
次に、ＣＰＵ１０は、上記ステップ１２１で算出された一時的なサブ信用度ｄｓが１より大きいか否かを判断する（ステップ１２２）。そして、ＣＰＵ１０は、一時的なサブ信用度ｄｓが１より大きい場合、次のステップ１２３に処理を進める。一方、ＣＰＵ１０は、一時的なサブ信用度ｄｓが１以下の場合、次のステップ１２４に処理を進める。
【０１８０】
ステップ１２３において、ＣＰＵ１０は、一時的なサブ信用度ｄｓを１に設定し、設定された一時的なサブ信用度ｄｓを用いて一時的なサブ信用度データＤｏを更新して、次のステップ１２６に処理を進める。つまり、一時的なサブ信用度ｄｓの値が１より大きい場合、当該値が１に丸められることになる。
【０１８１】
一方、一時的なサブ信用度ｄｓが１以下の場合、ステップ１２４において、ＣＰＵ１０は、上記ステップ１２１で算出された一時的なサブ信用度ｄｓが０より小さいか否かを判断する。そして、ＣＰＵ１０は、一時的なサブ信用度ｄｓが０より小さい場合、次のステップ１２５に処理を進める。一方、ＣＰＵ１０は、一時的なサブ信用度ｄｓが０以上の場合、次のステップ１２６に処理を進める。
【０１８２】
ステップ１２５において、ＣＰＵ１０は、一時的なサブ信用度ｄｓを０に設定し、設定された一時的なサブ信用度ｄｓを用いて一時的なサブ信用度データＤｏを更新して、次のステップ１２６に処理を進める。つまり、一時的なサブ信用度ｄｓの値が０より小さい場合、当該値が０に丸められることになる。
【０１８３】
ステップ１２６において、ＣＰＵ１０は、前回サブ信用度データＤｑを参照して、上記ステップ１２１で算出された一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より大きいか否かを判断する。そして、ＣＰＵ１０は、一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より大きい場合（すなわち、ｔｓ０＜ｄｓの場合）、次のステップ１２７に処理を進める。一方、ＣＰＵ１０は、一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０以下の場合（すなわち、ｄｓ≦ｔｓ０の場合）、次のステップ１２８に処理を進める。
【０１８４】
ステップ１２７において、ＣＰＵ１０は、前回サブ信用度データＤｑが示す前回のサブ信用度ｔｓ０および上記ステップ１２１で算出された一時的なサブ信用度ｄｓを用いて、最終的なサブ信用度ｔｓを算出し、次のステップ１２９に処理を進める。具体的には、ＣＰＵ１０は、最終的なサブ信用度ｔｓを
ｔｓ＝ｔｓ０＊Ｔｓ＋（１−Ｔｓ）＊ｄｓ  …（６）
で算出し、算出されたサブ信用度ｔｓを用いて、サブ信用度データＤｐを更新する。ここで、Ｔｓは、０＜Ｔｓ＜１を満たす予め定められた定数である。上記数式（６）から明らかなように、定数Ｔｓの大きさに応じて、前回のサブ信用度ｔｓ０に対してサブ信用度ｔｓが更新される速さを調整することができ、定数Ｔｓの大きさが大きいほどサブ信用度ｔｓが変化する速度が遅くなる。
【０１８５】
一方、ステップ１２８において、ＣＰＵ１０は、上記ステップ１２１で算出された一時的なサブ信用度ｄｓを用いて最終的なサブ信用度ｔｓを更新し、更新された最終的なサブ信用度ｔｓを用いてサブ信用度データＤＳｐを更新して、次のステップ１２９に処理を進める。
【０１８６】
上記ステップ１２６〜ステップ１２８の処理から明らかなように、一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より低く（小さく）なった場合は、一時的なサブ信用度ｄｓが最終的なサブ信用度ｔｓに即時に反映される。一方、一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より高く（大きく）なった場合は、一時的なサブ信用度ｄｓが最終的なサブ信用度ｔｓに即時に反映されずに、最終的なサブ信用度ｔｓが変化する速度が遅くなる。ここで、サブユニット７６に搭載されている加速度センサの特性では、サブユニット７６の動きを止めた際にその慣性で生じる加速度が前回の得られた加速度から徐々に減少する方向に変化していき、当該加速度の差分がそれほど大きい値にならない。したがって、算出された一時的なサブ信用度ｄｓをサブ信用度ｔｓに即座に反映させると、上記慣性により生じている加速度を安定した加速度（重力加速度）として扱ってしまうことがある。このような誤認識を回避するために、一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より高く変化した際には、前回のサブ信用度ｔｓ０から徐々に変化するように更新する。また、逆に一時的なサブ信用度ｄｓが前回算出されたサブ信用度ｔｓ０より低く変化した際には算出された一時的なサブ信用度ｄｓを信用度ｔｓに即座に反応させるようにしている。
【０１８７】
ステップ１２９において、ＣＰＵ１０は、サブ信用度データＤｐが示す最終的なサブ信用度ｔｓに基づいて、重力加速度を算出し、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ１０は、サブ信用度データＤｐに格納されているサブ信用度ｔｓとサブ加速度データＤｍに格納されている加速度ａｓｘ、ａｓｙ、およびａｓｚとを用いて、サブ重力加速度ベクトルｇｓを算出し、算出されたサブ重力加速度ベクトルｇｓを用いてサブ重力加速度データＤｒを更新する。具体的には、サブ重力加速度ベクトルｇｓは、
ｇｓ＝ａｓｎ＊ｔｓ＋ｇｓ０＊（１−ｔｓ）  …（７）
で算出されたベクトルを、重力の長さ（例えば、１）に正規化することによって算出される。ここで、ａｓｎは、現時点でサブユニット７６に生じている加速度ベクトル（ａｓｘ，ａｓｙ，ａｓｚ）を正規化（例えば、長さ１に正規化）したベクトルである。また、ｇｓ０は、前回の処理において算出されたサブ重力加速度ベクトルｇｓであり、前回サブ重力加速度データＤｓに格納されているサブ重力加速度ベクトルｇｓ０である。この数式（７）によって、サブ重力加速度ベクトルｇｓは、現時点でサブユニット７６における加速度ベクトルａｓおよび前回算出されたサブ重力加速度ベクトルｇｓ０が、サブ信用度ｔｓの割合で線形補間されたベクトルとなる。
【０１８８】
図２２に戻り、上記ステップ１０４のサブ重力加速度更新処理の後、ＣＰＵ１０は、ステップ１０５〜ステップ１０７の処理を行って、次のステップ１０８に処理を進める。なお、上記ステップ１０５〜ステップ１０７で行う処理については、上述したステップ４４〜ステップ４６の処理と同様であるため、詳細な説明を省略する。
【０１８９】
ステップ１０８において、ＣＰＵ１０は、平行移動加速度とサブユニット７６に生じている加速度とを比較し、次のステップに処理を進める。例えば、ＣＰＵ１０は、上記ステップ１０７で算出された平行移動加速度の大きさ（すなわち、コントローラ７が平行移動することによって生じている加速度の大きさ）とサブユニット７６に生じている加速度から重力加速度を減じた加速度の大きさ（すなわち、重力以外でサブユニット７６に生じている加速度の大きさ）とを比較する。具体的には、ＣＰＵ１０は、平行移動加速度データＤｋが示す平行移動加速度ベクトルｐの大きさを平行移動加速度の大きさとして算出する。また、ＣＰＵ１０は、サブ加速度データＤｍが示す現時点でサブユニット７６に生じている加速度ベクトル（ａｓｘ，ａｓｙ，ａｓｚ）から、サブ重力加速度データＤｒが示すサブ重力加速度ベクトルｇｓ０を減算したベクトルの大きさを、重力以外でサブユニット７６に生じている加速度の大きさとして算出する。
【０１９０】
次に、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度の大きさが平行移動加速度の大きさより大きいか否かを判断する（ステップ１０９）。そして、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度の大きさが平行移動加速度の大きさより大きい場合、次のステップ１１０に処理を進める。一方、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度の大きさが平行移動加速度の大きさ以下の場合、次のステップ１１１に処理を進める。
【０１９１】
ステップ１１０において、ＣＰＵ１０は、平行移動加速度データＤｋが示す平行移動加速度ベクトルｐと角速度データＤａが示す角速度ωｘ、ωｙ、およびωｚとを用いて、ゲーム処理を行い、次のステップ１１２に処理を進める。例えば、ＣＰＵ１０は、平行移動加速度ベクトルｐと角速度ωｘ、ωｙ、およびωｚとを用いて、プレイヤキャラクタＰＣの動作を制御する。
【０１９２】
具体的には、ＣＰＵ１０は、入力装置６（コントローラ７）の姿勢に応じて、プレイヤキャラクタＰＣの移動方向を算出する。例えば、入力装置６が左または右に傾けられた姿勢であることを角速度ωｘ、ωｙ、およびωｚが示す場合、入力装置６の姿勢（例えば、傾き角度）に応じて、入力装置６が傾いている方向へプレイヤキャラクタＰＣが操縦するパーソナルウォータークラフトを旋回させる（図１９参照）。また、入力装置６が水平に維持された姿勢であることを角速度ωｘ、ωｙ、およびωｚが示す場合、プレイヤキャラクタＰＣが操縦するパーソナルウォータークラフトを直進させる。入力装置６の姿勢（角度）は、角速度ωｘ、ωｙ、およびωｚを用いて算出することが可能であり、角速度ωｘ、ωｙ、およびωｚから入力装置６の姿勢（角度）を算出する方法はどのような方法であってもよい。
【０１９３】
また、ＣＰＵ１０は、平行移動加速度ベクトルｐが所定値以上の大きさでコントローラ７の上方を示している場合、平行移動加速度ベクトルｐの大きさの応じてプレイヤキャラクタＰＣが操縦するパーソナルウォータークラフトをジャンプさせる（図２０参照）。平行移動加速度ベクトルｐの実空間内における方向は、どのような方法で算出されてもよい。一例として、現時点で重力加速度が生じている方向（重力加速度ベクトルｇの方向）が実空間における鉛直方向とし、当該鉛直方向を基準として、平行移動加速度ベクトルｐの実空間内における方向を算出する。他の例として、後述する入力装置６の姿勢を基準として、平行移動加速度ベクトルｐの実空間内における方向を算出する。
【０１９４】
ここで、上記ステップ１１０のゲーム処理は、重力以外でサブユニット７６に生じている加速度の大きさが平行移動加速度の大きさより大きい場合に行われる処理である。また、上記ステップ１１０のゲーム処理では、サブユニット７６に生じている加速度がプレイヤキャラクタＰＣの動作制御に用いられていない。したがって、プレイヤがサブユニット７６のみを振り動かしたとしても、プレイヤキャラクタＰＣを操作することはできない。つまり、入力装置６を操作するプレイヤは、プレイヤキャラクタＰＣを操作するために、サブユニット７６だけでなくコントローラ７自体を少なくとも動かすような操作が求められることになる。
【０１９５】
一方、ステップ１１１において、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度と角速度データＤａが示す角速度ωｘ、ωｙ、およびωｚとを用いて、ゲーム処理を行い、次のステップ１１２に処理を進める。例えば、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度と角速度ωｘ、ωｙ、およびωｚとを用いて、プレイヤキャラクタＰＣの動作を制御する。
【０１９６】
具体的には、上記ステップ１１０と同様に、ＣＰＵ１０は、入力装置６（コントローラ７）の姿勢（角速度ωｘ、ωｙ、およびωｚ）に応じて、プレイヤキャラクタＰＣの移動方向を算出する。また、ＣＰＵ１０は、重力以外でサブユニット７６に生じている加速度が所定値以上の大きさでサブユニット７６の上方を示している場合、当該加速度の大きさに応じてプレイヤキャラクタＰＣが操縦するパーソナルウォータークラフトをジャンプさせる（図２０参照）。重力以外でサブユニット７６に生じている加速度の実空間内における方向は、どのような方法で算出されてもよい。一例として、現時点でサブユニット７６に重力加速度が生じている方向（サブ重力加速度ベクトルｇｓの方向）が実空間における鉛直方向とし、当該鉛直方向を基準として、重力以外でサブユニット７６に生じている加速度の実空間内における方向を算出する。
【０１９７】
ここで、上記ステップ１１１のゲーム処理は、重力以外でサブユニット７６に生じている加速度の大きさが平行移動加速度の大きさ以下の場合に行われる処理である。また、上記ステップ１１１のゲーム処理では、コントローラ７に生じている加速度がプレイヤキャラクタＰＣの動作制御に用いられていない。したがって、プレイヤがコントローラ７のみを振り動かしたとしても、プレイヤキャラクタＰＣが操縦するパーソナルウォータークラフトをジャンプさせることはできない。つまり、入力装置６を操作するプレイヤは、パーソナルウォータークラフトをジャンプさせるために、コントローラ７だけでなくサブユニット７６を少なくとも動かすような操作が求められることになる。上記ステップ１１０のゲーム処理と上記ステップ１１０のゲーム処理から明らかなように、入力装置６を操作するプレイヤがプレイヤキャラクタＰＣを操作するためには、コントローラ７およびサブユニット７６の一方を操作するだけではプレイヤ所望の操作ができないため、結果的にコントローラ７およびサブユニット７６を共に動かすような操作が求められることになる。
【０１９８】
なお、上述した処理では、サブユニット７６に生じている加速度から重力加速度成分を減じた加速度を用いてゲーム処理されているが、ゲーム処理に用いられる加速度にサブユニット７６を傾けることによって生じる加速度成分も含まれている。一方、コントローラ７に生じている加速度は、重力加速度成分と共にコントローラ７を傾けることによって生じている加速度成分も減じた状態でゲーム処理に用いられている。したがって、プレイヤがコントローラ７およびサブユニット７６を共に把持した状態で同じような操作をしている場合は、常にコントローラ７から得られた加速度に基づいてゲーム処理されることになる。
【０１９９】
ステップ１１２において、ＣＰＵ１０は、上記ステップ１０１〜ステップ１０８の処理によって算出されたパラメータを用いて前回のパラメータを更新して、次のステップに処理を進める。具体的には、ＣＰＵ１０は、上記ステップ４８と同様に、前回加速度データＤｃ、前回信用度データＤｆ、前回重力加速度データＤｈ、および前回補正度合値データＤｊを更新する。また、ＣＰＵ１０は、サブ加速度データＤｍが示す加速度ａｓｘ、ａｓｙ、およびａｓｚを用いて加速度ａｓ０ｘ、ａｓ０ｙ、およびａｓ０ｚをそれぞれ更新し、更新された加速度ａｓ０ｘ、ａｓ０ｙ、およびａｓ０ｚを用いて前回サブ加速度データＤｎを更新する。ＣＰＵ１０は、サブ信用度データＤｐが示すサブ信用度ｔｓを用いて前回のサブ信用度ｔｓ０を更新し、更新されたサブ信用度ｔｓ０を用いて前回サブ信用度データＤｑを更新する。そして、ＣＰＵ１０は、サブ重力加速度データＤｒが示すサブ重力加速度ベクトルｇｓを用いて前回のサブ重力加速度ベクトルｇｓ０を更新し、更新されたサブ重力加速度ベクトルｇｓ０を用いて前回サブ重力加速度データＤｓを更新する。
【０２００】
次に、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ１１３）。ゲームを終了する条件としては、例えば、ステップ１１０またはステップ１１１でゲーム処理されているゲームがゲームオーバーとなる条件が満たされたことや、プレイヤが当該ゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合、上記ステップ１０１に戻って処理を繰り返す。一方、ＣＰＵ１０は、ゲームを終了する場合、当該フローチャートによる処理を終了する。
【０２０１】
このように、第２の実施形態に係るゲーム処理によれば、コントローラ７とサブユニット７６とが接続された形態の入力装置６を用いる場合、コントローラ７においては、３軸方向それぞれに作用している加速度を用いてコントローラ７自体の姿勢や動きを判断するために、コントローラ７に生じている角速度を用いて入力装置６全体の回転を判定し、入力装置６全体が平行移動しているときに生じている加速度を取得している。これによって、上記ゲーム処理では、入力装置６が平行移動することによって得られた加速度を瞬時に判断することができる。したがって、上記ゲーム処理では、コントローラ７とサブユニット７６とが接続された形態の入力装置６全体を引き上げたり、入力装置６全体を突き出したりするような平行移動動作を、入力装置６から得られる加速度を用いて正確に認識することができる。
【０２０２】
また、第２の実施形態に係るゲーム処理によれば、コントローラ７とサブユニット７６とが接続された形態の入力装置６を用いる場合、コントローラ７に生じている加速度を示すデータとサブユニット７６に生じている加速度を示すデータとを利用可能である。その一方で、角速度を検出する角速度検出ユニット９がコントローラ７にのみ装着されているために、サブユニット７６に生じている角速度を直接検出することができない。しかしながら、上記ゲーム処理では、コントローラ７に生じている加速度とサブユニット７６に生じている加速度とを比較分析して、何れか一方の加速度をゲーム処理に採用することによって、入力装置６全体が平行移動しているときに生じている加速度を取得してゲーム処理に用いることができる。また、コントローラ７に生じている加速度とサブユニット７６に生じている加速度とを比較分析して、加速度の大きさが小さい方の加速度をゲーム処理に採用することによって、コントローラ７およびサブユニット７６の一方を操作するだけではプレイヤ所望の操作ができないため、プレイヤにコントローラ７およびサブユニット７６を共に動かすような操作が求めることができる。
【０２０３】
ここで、上記ステップ６１〜ステップ６７で示すゲーム処理においては、補正度合値ｆが前回算出された補正度合値ｆ０以上の場合と、補正度合値ｆが前回算出された補正度合値ｆ０より小さくなった場合とによって、それぞれ異なる方式で補正度合値ｆを更新している。具体的には、補正度合値ｆが前回算出された補正度合値ｆ０より小さくなった場合、補正度合値ｆは、
ｆ←ｆ＊Ｓ＋（１−Ｓ）＊ｆ０
で求められ、Ｓは０＜Ｓ＜１を満たす予め定められた定数である。これによって、補正度合値ｆが前回算出された補正度合値ｆ０より小さくなった場合は、補正度合値ｆが変化する速度が遅くなることになる。ここで、補正度合値ｆが前回算出された補正度合値ｆ０より小さくなる場合は、コントローラ７全体の回転速度（角速度）が遅くなる場合である。また、補正度合値ｆが大きい場合は、以降の処理によってコントローラ７に生じている加速度に、コントローラ７が回転することによって生じている加速度が多く含まれているとみなされる。一方、プレイヤがコントローラ７全体の回転を止めようとした場合、コントローラ７の回転が止めるためのプレイヤの操作が加速度を生じさせるために、コントローラ７の回転が止まった場合でも当該回転を止めるための加速度が残ることがある。このように、補正度合値ｆが変化する速度を遅くすることによって、コントローラ７の回転を止める際の加速度も抑制して、コントローラ７が平行移動することによる加速度成分を正確に認識することができる。
【０２０４】
しかしながら、上述した効果を期待しない場合は、補正度合値ｆと前回算出された補正度合値ｆ０との比較結果とは無関係に同じ方式で補正度合値ｆを更新してもかまわない。例えば、上記ステップ６１〜ステップ６５で算出された補正度合値ｆの値が、常にそのまま補正度合値ｆとして採用されるようにしてもよい。この場合、上記ステップ６６およびステップ６７の処理が不要となり、前回算出された補正度合値ｆ０をメインメモリに格納することも不要となる。
【０２０５】
また、コントローラ７とサブユニット７６とが接続された形態の入力装置６を用いる場合、角速度検出ユニット９がコントローラ７にのみ装着される例を用いて説明したが、角速度検出ユニット９を装着する態様が異なるものであっても、本発明を適用することができる。第１の例として、角速度検出ユニット９をサブユニット７６のみに装着する。この場合、上述した第２の実施形態に係るゲーム処理において、コントローラ７側から得られるデータを用いた処理をサブユニット７６側から得られる処理に置き換え、サブユニット７６側から得られるデータを用いた処理をコントローラ７側から得られる処理に置き換えれば、同様のゲーム処理が可能となる。第２の例として、２つの角速度検出ユニット９をコントローラ７およびサブユニット７６にそれぞれ装着する。この場合、上述した第２の実施形態に係るゲーム処理において、コントローラ７側から得られるデータを用いた処理をサブユニット７６側から得られる角速度データの処理にも適用すれば、コントローラ７から得られる加速度およびサブユニット７６から得られる加速度を補正する処理をそれぞれ独立して行うことが可能となる。
【０２０６】
また、サブユニット７６から出力されるデータ（操作部７６１の操作内容を示すデータ、加速度センサ７６２が検出した加速度を示すデータ）は、角速度検出ユニット９のマイコン９４を介してコントローラ７へ出力されているが、マイコン９４を介さずにコントローラ７へ出力されてもかまわない。この場合、サブユニット７６から出力されるデータは、接続ケーブル７３１、コネクタ７３２、コネクタ９７、プラグ９３、およびコネクタ７３を介して、通信部７５に出力されることになる（図１８に示す破線のルート）。
【０２０７】
また、上述した処理においては、加速度センサ７０１が加速度をそれぞれ検出する複数の軸（ＸＹＺ軸）と、角速度検出ユニット９が角速度をそれぞれ検出する複数の回転軸（ＸＹＺ軸）とを一致させているが、これらの軸が異なっていてもかまわない。加速度センサ７０１が加速度をそれぞれ検出する複数の軸と、角速度検出ユニット９が角速度をそれぞれ検出する複数の回転軸とのそれぞれの差を示す角度が予め判明している場合、当該角度を用いて座標変換することができる。一例として、上記差を示す角度を用いて、加速度センサ７０１が検出した複数の軸方向を基準とした加速度を、上記回転軸を基準とした加速度に座標変換することによって、本発明を実現することができる。他の例として、上記差を示す角度を用いて、角速度検出ユニット９が検出した複数の回転軸を基準とした角速度を、加速度センサ７０１が加速度をそれぞれ検出する複数の軸を基準とした角速度に座標変換することによって、本発明を実現することができる。また、上述した説明においては、加速度センサ７０１が加速度をそれぞれ検出する軸（ＸＹＺ軸）と、角速度検出ユニット９が角速度をそれぞれ検出する回転軸（ＸＹＺ軸）とを、それぞれ３軸としたが、それぞれの軸が１軸または２軸であってもかまわない。
【０２０８】
また、上述した処理では、上記ステップ４７、ステップ１１０、およびステップ１１１において、補正された加速度がゲーム処理に用いられる例を用いたが、本発明は、補正された加速度を他の装置へ出力する情報処理装置や当該情報処理装置で実行される情報処理プログラムであってもかまわない。この場合、上記ステップ４７、ステップ１１０、およびステップ１１１を他の装置に加速度データを出力するステップに変更し、当該出力する加速度データを上記ステップ４７、ステップ１１０、およびステップ１１１のゲーム処理で用いられている加速度を示すデータとすれば、本発明がゲーム処理を実行しない情報処理プログラムおよび情報処理装置として実現することができる。
【０２０９】
上述した説明では、上記ステップ４３、ステップ１０３、およびステップ１０４において、コントローラ７および／またはサブユニット７６に生じている重力加速度を推定する処理がそれぞれ行われている。具体的には、上記重力加速度を推定する処理では、コントローラ７および／またはサブユニット７６に生じている加速度の変化量（加速度のサンプリング前後の差分）が一定値以下、すなわち加速度の変化が少ないときに、当該加速度を重力加速度として推定している。
【０２１０】
なお、コントローラ７および／またはサブユニット７６に生じている重力加速度を推定する方法は、他の方法でもかまわない。一例として、コントローラ７および／またはサブユニット７６に生じている加速度の大きさ（加速度の絶対値）が重力の大きさ（例えば、１Ｇ）に対して所定値以内のとき、すなわち重力の大きさに近いとき、当該加速度を重力加速度として推定してもかまわない。他の例として、コントローラ７および／またはサブユニット７６に生じている加速度を示す加速度ベクトルに所定の時間差で追従するベクトルを算出し、当該ベクトルを重力加速度が示されているベクトルとして推定してもかまわない。
【０２１１】
また、角速度データＤａに適宜格納される角速度データは、当該格納される前に所定の補正が行われてもかまわない。以下、角速度データの補正例について説明する。
【０２１２】
例えば、ジャイロセンサ９５および９６から出力された角速度データが示す角速度ｖを、
ｖ←ｖ＋（ｓｕｍ／ｃｔ−ｖ）×ａ
によって一次補正する。ここで、ｃｔは、角速度ｖが格納されたデータバッファ（図示せず）から遡って、角速度が連続して安定範囲（下限）ｓ１および安定範囲（上限）ｓ２で設定された安定範囲内に収まると判断されたデータの数（連続個数ｃｔ）である。ｓｕｍは、上記安定範囲内に収まると判断されたデータバッファ内の値の合計値（合計値ｓｕｍ）である。つまり、角速度ｖを書き込んだデータバッファの位置から遡って、新しいデータバッファから古いデータバッファへ順に、連続して上記安定範囲内に含まれるデータを繰り返し取得した場合の、その個数（連続個数ｃｔ）および合計値（合計値ｓｕｍ）である（ただし、検索上限数が設定される）。また、ａは、静止具合値を示す。静止具合値ａは、０〜１の範囲内の数値であり、ジャイロセンサ９５および９６の動きの変化が少ない（安定している）期間が長ければ長いほど１に近づく値である。そして、静止具合値ａは、連続個数ｃｔが上記検索上限数と等しいとき、すなわち角速度ｖが格納されたデータバッファから遡って連続して検索上限数分のデータバッファの値が全て上記安定範囲内に入っていたとき、最大値１になるようにして正規化される。
【０２１３】
そして、上記一次補正後の角速度ｖからゼロ点オフセット値（静止時出力値）ｏｆｓを減算することでオフセット補正する。ここで、ゼロ点オフセット値ｏｆｓは、ジャイロセンサ９５および９６が静止時に示すと想定されるデータの値であって、予め定められたデバイス固有値に設定されているが、上記一次補正後の角速度ｖに応じて、順次補正されて再設定される。具体的には、ゼロ点オフセット値ｏｆｓは、
ｏｆｓ←ｏｆｓ＋（ｖ−ｏｆｓ）×ａ×Ｃ
によって順次補正されて再設定される。ここで、Ｃは、定数であり、例えばＣ＝０．０１に設定される。定数Ｃを小さい値にすることによって、短期間で角速度ｖが、入力装置６の静止状態における角速度（ゼロ点）であるように補正されることを防止している。そして、ジャイロセンサ９５および９６の静止時のように角速度に変化が少ない場合は、ゼロ点がその平均値に近づいていくようにゼロ点の補正が行われる。
【０２１４】
そして、上記一次補正後の角速度ｖは、ゼロ点オフセット値ｏｆｓを用いてオフセット補正される。例えば、上記一次補正後の角速度ｖは、
ｖ←ｖ―ｏｆｓ
によって、オフセット補正される。これによって、ジャイロセンサ９５および９６から出力された角速度データが示す角速度ｖは、ゼロ点（静止時出力値）を考慮した上で再度補正される。そして、上記オフセット補正後の角速度ｖを用いて、角速度データＤａが適宜更新されることになる。なお、角速度データＤａに適宜格納される角速度データは、上記一次補正をすることなく上記オフセット補正だけを行った角速度データであってもかまわない。また、ゼロ点オフセット値ｏｆｓを固定値にして、上記オフセット補正のみを行ってもかまわない。
【０２１５】
また、上述した実施形態においては、コントローラ７に搭載されている撮像情報演算部７４からの処理結果データを用いていない。したがって、本発明を実現する場合には、撮像情報演算部７４がコントローラ７に搭載されていなくてもかまわない。また、上述した実施形態においては、コントローラ７に対してジャイロセンサ９５および９６が設けられている角速度検出ユニット９が着脱可能に接続される構成を用いたが、ジャイロセンサ９５および９６は、コントローラ７の内部に設けられてもかまわない。
【０２１６】
また、上述した説明では、据置型のゲーム装置に本願発明を適用した例を説明したが、ジャイロセンサおよび加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置のジャイロセンサから出力される角速度データおよび入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が入力装置の姿勢や動き等を算出する等、入力装置に生じる角速度および加速度に基づいた様々な情報処理に用いることができる。
【０２１７】
また、上述した説明では、コントローラ７（入力装置６）とゲーム装置本体５とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置本体５とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置本体５の接続端子に接続する。
【０２１８】
また、上述した説明では、コントローラ７およびサブユニット７６のうち、コントローラ７のみに通信部７５を設けたが、コントローラ７とサブユニット７６とが接続された入力装置６を用いる場合、サブユニット７６にゲーム装置本体５へ送信データを無線送信する通信部を設けてもかまわない。また、コントローラ７およびサブユニット７６それぞれに上記通信部を設けてもかまわない。例えば、コントローラ７およびサブユニット７６に設けられた通信部がそれぞれゲーム装置本体５へ送信データを無線送信してもいいし、サブユニット７６の通信部からコントローラ７へ送信データを無線送信してコントローラ７の通信部７５で受信した後、コントローラ７の通信部７５がサブユニット７６の送信データと共にコントローラ７の送信データをゲーム装置本体５へ無線送信してもいい。これらの場合、コントローラ７とサブユニット７６とを電気的に接続する接続ケーブル７３１が不要となる。
【０２１９】
また、上述したコントローラ７、サブユニット７６、および角速度検出ユニット９の形状や、操作部７２および７６１の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数、判定値、数式、処理順序等は、単なる一例に過ぎず他の値や数式や処理順序であっても、本発明を実現できることは言うまでもない。
【０２２０】
また、本発明のゲームプログラムは、光ディスク４等の外部記憶媒体を通じてゲーム装置本体５に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体５に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体５内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【０２２１】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【０２２２】
本発明に係る情報処理プログラムおよび情報処理装置は、入力装置に備えられた加速度センサから得られたデータを用いて正確に当該入力装置の動きを判断することができ、入力装置の動き等を示すデータを用いて所定の処理を実行する装置や当該装置で実行されるプログラムとして有用であり、入力装置の動き等を示すデータを出力する装置や当該装置で実行されるプログラムとしても有用である。
【符号の説明】
【０２２３】
１…ゲームシステム
２…モニタ
２ａ、７０６…スピーカ
３…ゲーム装置
４…光ディスク
５…ゲーム装置本体
６…入力装置
１０…ＣＰＵ
１１…システムＬＳＩ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２、２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３１…入出力プロセッサ
３２…ＧＰＵ
３３…ＤＳＰ
３４…ＶＲＡＭ
３５…内部メインメモリ
７…コントローラ
７１、７６３…ハウジング
７２、７６１…操作部
７３、９７、７３２…コネクタ
７３１…接続ケーブル
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１、９４…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７６…サブユニット
７００…基板
７０１、７６２…加速度センサ
７０２…ＬＥＤ
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
８…マーカ
９…角速度検出ユニット
９１…ボタン
９２…カバー
９３…プラグ
９５…２軸ジャイロセンサ
９６…１軸ジャイロセンサ
【図１】
2010259612.tif 000003
【図２】
2010259612.tif 000004
【図３】
2010259612.tif 000005
【図４】
2010259612.tif 000006
【図５】
2010259612.tif 000007
【図６】
2010259612.tif 000008
【図７】
2010259612.tif 000009
【図８】
2010259612.tif 000010
【図９】
2010259612.tif 000011
【図１０】
2010259612.tif 000012
【図１１】
2010259612.tif 000013
【図１２】
2010259612.tif 000014
【図１３】
2010259612.tif 000015
【図１４】
2010259612.tif 000016
【図１５】
2010259612.tif 000017
【図１６】
2010259612.tif 000018
【図１７】
2010259612.tif 000019
【図１８】
2010259612.tif 000020
【図１９】
2010259612.tif 000021
【図２０】
2010259612.tif 000022
【図２１】
2010259612.tif 000023
【図２２】
2010259612.tif 000024
【図２３】
2010259612.tif 000025