(57)【要約】【課題】入力装置の姿勢を精度良く算出する。【解決手段】情報処理装置は、磁気センサを備える入力装置の姿勢を算出する。情報処理装置は、磁気センサが検出する検出磁気ベクトルを繰り返し取得する。情報処理装置は、複数の検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を繰り返し推定する。入力装置の姿勢は、中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて算出される。情報処理装置は、検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置を更新する。【選択図】図４
2014021837.tif 000002
【特許請求の範囲】
【請求項１】
磁気センサを備える入力装置の姿勢を算出する情報処理装置のコンピュータにおいて実行される情報処理プログラムであって、
前記情報処理プログラムは、
前記磁気センサが検出する検出磁気ベクトルを繰り返し取得する取得手段と、
複数の前記検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定する中心推定手段と、
前記中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて前記入力装置の姿勢を算出する姿勢算出手段として前記コンピュータを機能させ、
前記中心推定手段は、前記検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置を更新する、情報処理プログラム。
【請求項２】
前記中心推定手段は、前記複数の検出磁気ベクトルが所定の条件を満たしたことに応じて、当該複数の検出磁気ベクトルから前記中心位置を推定する、請求項１に記載の情報処理プログラム。
【請求項３】
前記中心推定手段は、前記複数の検出磁気ベクトルの各終点位置を含むように決定される領域が所定の大きさよりも大きくなったことを前記所定の条件とする、請求項２に記載の情報処理プログラム。
【請求項４】
前記中心推定手段は、前記複数の検出磁気ベクトルの各向きが所定の範囲よりも大きくなったことを前記所定の条件とする、請求項２に記載の情報処理プログラム。
【請求項５】
前記中心推定手段は、前記所定の条件が満たされたことに応じて、前記複数の検出磁気ベクトルの各終点位置から推定される曲面の凹側の位置に最初の中心位置を設定する、請求項２から請求項４のいずれか１項に記載の情報処理プログラム。
【請求項６】
前記中心推定手段は、前記複数の検出磁気ベクトルの各終点位置を含むように決定される領域の内部に最初の中心位置を設定する、請求項２から請求項４のいずれか１項に記載の情報処理プログラム。
【請求項７】
前記中心推定手段は、前記複数の検出磁気ベクトルの各終点位置を含み、かつ、大きさが最小となる直方体の内部に最初の中心位置を設定する、請求項２から請求項４のいずれか１項に記載の情報処理プログラム。
【請求項８】
前記中心推定手段は、前記複数の検出磁気ベクトルの各終点位置の重心位置に最初の中心位置を設定する、請求項２から請求項４のいずれか１項に記載の情報処理プログラム。
【請求項９】
前記姿勢算出手段は、前記所定の条件が満たされたことを少なくとも条件として前記方向ベクトルに基づく前記入力装置の姿勢の算出を行う、請求項２から請求項８のいずれか１項に記載の情報処理プログラム。
【請求項１０】
前記姿勢算出手段は、更新前後における前記中心位置の変化量が大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして前記姿勢を算出する、請求項１から請求項９のいずれか１項に記載の情報処理プログラム。
【請求項１１】
前記姿勢算出手段は、現在の中心位置から、当該中心位置の推定に用いられた各検出磁気ベクトルの終点位置までの各長さのばらつきが大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして前記姿勢を算出する、請求項１から請求項１０のいずれか１項に記載の情報処理プログラム。
【請求項１２】
磁気センサを備える入力装置の姿勢を算出する情報処理装置であって、
前記磁気センサが検出する検出磁気ベクトルを繰り返し取得する取得部と、
複数の前記検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定する中心推定部と、
前記中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて前記入力装置の姿勢を算出する姿勢算出部とを備え、
前記中心推定部は、前記検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置を更新する、情報処理装置。
【請求項１３】
磁気センサを備える入力装置の姿勢を算出する情報処理システムであって、
前記磁気センサが検出する検出磁気ベクトルを繰り返し取得する取得部と、
複数の前記検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定する中心推定部と、
前記中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて前記入力装置の姿勢を算出する姿勢算出部とを備え、
前記中心推定部は、前記検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置を更新する、情報処理システム。
【請求項１４】
磁気センサを備える入力装置の姿勢を算出する姿勢算出方法であって、
前記磁気センサが検出する検出磁気ベクトルを繰り返し取得する取得ステップと、
複数の前記検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定する中心推定ステップと、
前記中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて前記入力装置の姿勢を算出する姿勢算出ステップとを備え、
前記中心推定ステップにおいては、前記検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置が更新する、姿勢算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力装置の姿勢を算出するための情報処理プログラム、情報処理装置、情報処理システム、および、姿勢算出方法に関する。
【背景技術】
【０００２】
従来、磁気センサを用いて装置の姿勢を算出する技術がある。例えば、磁気センサによって磁界の向きを検知することによって、磁界の向きに対する装置の姿勢を算出することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−０９５８０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
磁気センサを用いて姿勢を算出する場合、精度良く姿勢を算出することが求められる。
【０００５】
それ故、本発明の目的は、装置の姿勢を精度良く算出することが可能な情報処理プログラム、情報処理装置、情報処理システム、および、姿勢算出方法を提供することである。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明は、以下の（１）〜（１１）の構成を採用した。
【０００７】
（１）
本発明の一例は、磁気センサを備える入力装置の姿勢を算出する情報処理装置のコンピュータにおいて実行される情報処理プログラムである。情報処理プログラムは、取得手段と、中心推定手段と、姿勢算出手段としてコンピュータを機能させる。
取得手段は、磁気センサが検出する検出磁気ベクトルを繰り返し取得する。中心推定手段は、複数の検出磁気ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定する。姿勢算出手段は、中心位置から検出磁気ベクトルの終点位置への方向を表す方向ベクトルに基づいて入力装置の姿勢を算出する。
中心推定手段は、検出磁気ベクトルが取得される度に、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さのうちの少なくともいくつかがそれぞれ当該各長さの平均に近づくように、中心位置を更新する。
【０００８】
上記（１）の構成によれば、検出磁気ベクトルが取得される度に、各長さが均等に近くなるように中心位置が更新されるので、最新の検出磁気ベクトルに応じてより正確な中心位置を算出することができる。これによって、より精度良く入力装置の姿勢を算出することができる。また、検出磁気ベクトルが取得される度に中心位置が更新されるので、十分に多くの検出磁気ベクトルを取得する前から中心位置の算出を開始することができ、姿勢の算出を早期に開始することができる。
【０００９】
（２）
中心推定手段は、複数の検出磁気ベクトルが所定の条件を満たしたことに応じて、当該複数の検出磁気ベクトルから中心位置を推定してもよい。
【００１０】
上記（２）の構成によれば、所定の条件を満たしたことに応じて中心位置が推定されるので、姿勢の算出に用いることができないほど不正確な中心位置が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【００１１】
（３）
中心推定手段は、複数の検出磁気ベクトルの各終点位置を含むように決定される領域が所定の大きさよりも大きくなったことを所定の条件としてもよい。
【００１２】
上記（３）の構成によれば、複数の検出磁気ベクトルの各終点位置に基づく領域が所定の大きさよりも大きくなった場合に中心位置が算出される。これによって、中心位置を精度良く算出することができ、ひいては、姿勢をより精度良く算出することができる。
【００１３】
（４）
中心推定手段は、複数の検出磁気ベクトルの各向きが所定の範囲よりも大きくなったことを所定の条件としてもよい。
【００１４】
上記（４）の構成によれば、複数の検出磁気ベクトルの各向きが所定の範囲よりも大きくなった場合に中心位置が算出される。これによって、中心位置を精度良く算出することができ、ひいては、姿勢をより精度良く算出することができる。
【００１５】
（５）
中心推定手段は、所定の条件が満たされたことに応じて、複数の検出磁気ベクトルの各終点位置から推定される曲面の凹側の位置に最初の中心位置を設定してもよい。
【００１６】
上記（５）の構成によれば、最初の中心位置は、上記曲面の凹側の位置に設定される。これによって、その後に中心位置を更新することによって、中心位置をより確実に正確な位置へと収束させることができる。
【００１７】
（６）
中心推定手段は、複数の検出磁気ベクトルの各終点位置を含むように決定される領域の内部に最初の中心位置を設定してもよい。
【００１８】
上記（６）の構成によれば、最初の中心位置は、複数の検出磁気ベクトルの各終点位置を含むように決定される領域の内部に設定される。これによれば、その後に中心位置を更新することによって、球状体の実際の中心位置へと中心位置を次第に近づけることができる。上記によれば、更新によって球状体の実際の中心へと近づけることが困難なほど外れた位置に中心位置が設定される可能性を低減することができ、中心位置を精度良く推定することができる。
【００１９】
（７）
中心推定手段は、複数の検出磁気ベクトルの各終点位置を含み、かつ、大きさが最小となる直方体の内部に最初の中心位置を設定してもよい。
【００２０】
上記（７）の構成によれば、複数の検出磁気ベクトルの各終点位置を含むように決定される領域の内部に最初の中心位置を容易に設定することができる。
【００２１】
（８）
中心推定手段は、複数の検出磁気ベクトルの各終点位置の重心位置に最初の中心位置を設定してもよい。
【００２２】
上記（８）の構成によれば、最初の中心位置を上記曲面の凹側の位置に確実に設定することができる。
【００２３】
（９）
姿勢算出手段は、所定の条件が満たされたことを少なくとも条件として方向ベクトルに基づく入力装置の姿勢の算出を行ってもよい。
【００２４】
上記（９）の構成によれば、不正確な中心位置を用いて不正確な姿勢が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【００２５】
（１０）
姿勢算出手段は、更新前後における中心位置の変化量が大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして姿勢を算出してもよい。
【００２６】
上記（１０）の構成によれば、中心位置の変化量（移動量）が大きい場合には、姿勢算出に対する新たな検出磁気ベクトルによる影響は小さくなる。ここで、中心位置の変化量が大きい場合は、中心位置が不正確である可能性があると考えられる。したがって、上記（１０）の構成によれば、不正確な可能性がある中心位置を用いることで不正確な姿勢が算出される可能性を低減することができ、ひいては姿勢を精度良く算出することができる。
【００２７】
（１１）
姿勢算出手段は、現在の中心位置から、当該中心位置の推定に用いられた各検出磁気ベクトルの終点位置までの各長さのばらつきが大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして姿勢を算出してもよい。
【００２８】
上記（１１）の構成によれば、上記のばらつきが大きい場合には、姿勢算出に対する新たな検出磁気ベクトルによる影響は小さくなる。ここで、上記のばらつきが大きい場合は、中心位置が不正確である可能性があると考えられる。したがって、上記（１１）の構成によれば、不正確な可能性がある中心位置を用いることで不正確な姿勢が算出される可能性を低減することができ、ひいては姿勢を精度良く算出することができる。
【００２９】
なお、本発明の別の一例は、上記（１）〜（１１）の情報処理プログラムを実行することによって実現される各手段と同等の手段を備える情報処理装置あるいは情報処理システムであってもよいし、上記（１）〜（１１）において実行される姿勢算出方法であってもよい。
【発明の効果】
【００３０】
本発明によれば、検出磁気ベクトルが取得される度に中心位置を更新することによって、より精度良く入力装置の姿勢を算出することができる。
【図面の簡単な説明】
【００３１】
【図１】本実施形態に係る情報処理システムの一例を示すブロック図
【図２】検出磁気ベクトルおよび方向ベクトルの一例を示す図
【図３】設定される初期中心位置の一例を示す図
【図４】更新処理によって更新される前後の中心位置の一例を示す図
【図５】図４に示す領域の一部を拡大した図
【図６】方向ベクトルを用いて入力装置２の姿勢を補正する方法の一例を示す図
【図７】第１補正率の設定方法の一例を示す図
【図８】第２補正率の設定方法の一例を示す図
【図９】信頼度が高く算出される場合における中心位置の一例を示す図
【図１０】バッファの構成の一例を示す図
【図１１】検出磁気ベクトルの分類方法の一例を示す図
【図１２】３次元空間に配置される各分類ベクトルの終点位置の一例を示す図
【図１３】情報処理システムの記憶部に設定されるデータ領域の一例を示す図
【図１４】情報処理装置のＣＰＵが実行する情報処理の流れの一例を示すフローチャート
【図１５】検出磁気ベクトルに基づく姿勢算出処理の詳細な流れの一例を示すフローチャート
【図１６】補正処理の詳細な流れの一例を示すフローチャート
【発明を実施するための形態】
【００３２】
［１．情報処理システムの構成］
以下、本実施形態の一例に係る情報処理システム、情報処理装置、情報処理プログラム、および姿勢算出方法について説明する。図１は、本実施形態に係る情報処理システムの一例を示すブロック図である。図１において、情報処理システム１は、入力装置２および情報処理装置３を備える。本実施形態における情報処理システム１は、入力装置２の姿勢に応じた値を検出するセンサ（磁気センサ等）を用いて入力装置２の姿勢を算出するものである。
【００３３】
情報処理システム１は入力装置２を含む。入力装置２は、可搬型であり、換言すれば、ユーザが把持可能な装置である。入力装置２は情報処理装置３と通信可能である。入力装置２は、入力装置２に対する操作を表す操作データを情報処理装置３へ送信する。入力装置２と情報処理装置３との間の通信は、無線送信であっても有線通信であってもよい。
【００３４】
入力装置２は、磁気センサ４を有する。磁気センサ４は、磁界の大きさおよび方向を検知する。ここでは、磁気センサ４が検出する磁界の大きさおよび方向を表すベクトルを、検出磁気ベクトルと呼ぶ。入力装置２は、検出磁気ベクトルを表すデータを操作データとして情報処理装置３へ送信する。磁気センサ４は、本実施形態においては３次元の値で磁界の大きさおよび方向を検出するが、２次元以上の値で磁界の大きさおよび方向を検出してもよい。本明細書においては、磁気センサ４の検出結果に基づいて姿勢を算出する方法について詳細に説明する。
【００３５】
入力装置２はジャイロセンサ５を備える。ジャイロセンサ５は、入力装置２の所定軸方向（本実施形態では３軸方向とするが、１軸以上でよい）を軸とした回転に関する角速度を検出する。また、入力装置２は加速度センサ６を有する。加速度センサ６は、入力装置２の所定軸方向（本実施形態では３軸方向とするが、１軸以上でよい）に関する加速度を検出する。入力装置２は、ジャイロセンサ５および加速度センサ６によって検出されたデータを操作データとして情報処理装置３へ送信する。ジャイロセンサ５および加速度センサ６は、入力装置２の姿勢を算出するために用いられる。つまり、本実施形態においては、情報処理システム１は、磁気センサ４を用いる方法以外の他の方法で入力装置２の姿勢を算出することが可能である。なお、他の実施形態においては、情報処理システム１は、上記他の方法で姿勢を算出する手段（ジャイロセンサ５および加速度センサ６）を備えていなくてもよい。また、上記他の方法はどのような方法であってもよく、例えば、情報処理システム１は、入力装置２を撮影可能なカメラ、あるいは、入力装置２に設けられるカメラによって撮像される画像に基づいて入力装置２の姿勢を算出してもよい。
【００３６】
入力装置２は操作部７を有する。操作部７は、ボタン（キー）、スティック、およびタッチパネル等の任意の操作装置である。入力装置２は、操作部７に対する操作を表すデータを操作データとして情報処理装置３へ送信する。
【００３７】
なお、入力装置２は、入力装置２の姿勢に応じた値を出力するセンサを備える任意の構成でよい。例えば他の実施形態においては、図１に示す構成のいくつかを備えていない構成であってもよいし、上記以外の他の構成を備えていてもよい。
【００３８】
情報処理システム１は情報処理装置３を含む。情報処理装置３は、入力装置２から送信される操作データ（検出磁気ベクトルのデータ）を受信し、当該データに基づいて入力装置２の姿勢を算出する。また、本実施形態において、情報処理装置３は、算出された姿勢を入力として所定の情報処理を実行する。この所定の情報処理はどのような処理であってもよく、例えばゲーム処理（仮想空間に配置されるゲームオブジェクトの動作を姿勢に応じて制御する処理）であってもよい。また、情報処理装置３は、上記情報処理によって画像を生成し、生成された画像を表示装置に表示させてもよい。表示装置は、入力装置２および情報処理装置３とは別に設けられてもよいし、情報処理装置３あるいは入力装置２が有する表示部であってもよい。
【００３９】
本実施形態においては、情報処理装置３は、ＣＰＵ（制御部）８およびメモリ９を有し、ＣＰＵ８がメモリ９を用いて所定の情報処理プログラムを実行することによって、情報処理装置３における各種機能（図１４〜図１６に示す情報処理）が実現される。なお、情報処理装置３は、入力装置２の姿勢を算出する処理を実行することができればどのような構成であってもよい。
【００４０】
なお、他の実施形態においては、情報処理システム１は１つの装置によって構成されてもよい。すなわち、入力装置２と情報処理装置３とは一体の装置として構成されてもよい。例えば、情報処理システム１は、スマートフォンや携帯型ゲーム装置等の携帯端末であってもよい。
【００４１】
［２．姿勢算出の方法］
以下、磁気センサ４による検出結果に基づいて入力装置２の姿勢を算出する方法について説明する。本実施形態において、情報処理システム１（情報処理装置３）は、磁気センサ４によって検出される検出磁気ベクトルに基づいて姿勢を算出する。ここで、磁気センサ４が検出する磁界は、磁界の方向が入力装置２の姿勢に依存しない成分と、磁界の方向が入力装置２の姿勢に依存する成分とに分けられる。磁界の方向が入力装置２の姿勢に依存しない成分とは、例えば、入力装置２自身によって発生する磁界（入力装置２が帯びている磁気）である。この成分に関しては、入力装置２の姿勢が変化しても、磁気センサ４で検出される方向が変化しない。
【００４２】
一方、磁界の方向が入力装置２の姿勢に依存する成分とは、例えば地磁気等、入力装置２の周囲の空間に生じている磁界による成分である。この成分に関しては、入力装置２の姿勢が変化することに応じて、磁気センサ４で検出される方向が変化する。したがって、情報処理装置３は、検出磁気ベクトルから、入力装置２の姿勢に依存する成分を算出（推定）することによって、入力装置２の姿勢を算出する。以下では、検出磁気ベクトルから算出される、入力装置２の姿勢に依存する成分を表すベクトル、すなわち、姿勢に応じた方向を表すベクトルを「方向ベクトル」と呼ぶ。
【００４３】
図２は、検出磁気ベクトルおよび方向ベクトルの一例を示す図である。なお、図２においては、検出磁気ベクトルＶｄの始点を原点とするｘｙｚ座標系において各ベクトルを表している。上記検出磁気ベクトルＶｄの大きさおよび方向は、入力装置２の姿勢の変換に応じて変化する。入力装置２が全方向を向くように姿勢を変化させた場合、検出磁気ベクトルＶｄの終点（先端）は、図２に示すように球状体の面を形成する。この球状体は、理想的には球体であるが、厳密には球体とならず、やや歪む（楕円球状になる）場合もある（つまり、方向ベクトルの大きさは入力装置２の姿勢によって若干変化する）。以下では、上記の球状体を「磁気球体」と呼ぶ。
【００４４】
ここで、検出磁気ベクトルＶｄは、ベクトルＶｏとベクトルＶａとに分けることができる。ベクトルＶｏは、原点（検出磁気ベクトルＶｄの始点）を始点とし、磁気球体の中心位置Ｐを終点とするベクトルであり、入力装置２の姿勢に依存しない成分を表す。一方、ベクトルＶａは、中心位置Ｐを始点とし、検出磁気ベクトルＶｄの終点を終点とするベクトルである。ベクトルＶａは、入力装置２の姿勢に依存する成分を表すベクトル、すなわち、方向ベクトルである。
【００４５】
以上より、磁気球体の中心位置Ｐを推定し、それによって方向ベクトルＶａを算出することで、入力装置２の姿勢を算出することができる。すなわち、情報処理システム１（情報処理装置３）は、磁気センサ４が検出する検出磁気ベクトルＶｄを取得する。そして、複数の検出磁気ベクトルＶｄの各終点位置から推定される曲面を有する球状体（磁気球体）の中心位置Ｐを推定する。さらに、中心位置Ｐから検出磁気ベクトルＶｄの終点位置への方向を表す方向ベクトルＶａに基づいて入力装置２の姿勢を算出する。以下、入力装置２の姿勢を算出するための姿勢算出処理についてより詳細に説明する。
【００４６】
［３．姿勢算出処理］
（３−１：姿勢算出処理の流れ）
本実施形態では、姿勢算出処理において、情報処理装置３は以下の第１〜第３処理を実行する。
・第１処理：検出磁気ベクトルを繰り返し取得し、取得された複数の検出磁気ベクトルが所定の条件を満たす場合に磁気球体の中心位置（初期中心位置）を推定する処理
・第２処理：初期中心位置が推定された後、取得された検出磁気ベクトルに基づいて中心位置を更新する処理
・第３処理：初期中心位置が算出された後、中心位置に基づいて決定される方向ベクトルを用いて入力装置２の姿勢を算出する処理
【００４７】
姿勢算出処理は、どのようなタイミングで開始されてもよいが、本実施形態においては、ユーザが所定の操作を行ったことに応じて開始される。姿勢算出処理が開始されると、まず上記第１処理が実行される。第１処理においては、情報処理装置３は、入力装置２から検出磁気ベクトルを繰り返し取得する。また、情報処理装置３は、取得された複数の検出磁気ベクトルが所定の条件を満たした場合、当該複数の検出磁気ベクトルに基づいて初期中心位置を推定する。なお、初期中心位置とは、姿勢算出処理において最初に推定（算出）される中心位置である。
【００４８】
上記第１処理によって中心位置が算出されると、上記第２処理および第３処理が実行される。第２処理においては、情報処理装置３は、検出磁気ベクトルが取得される度に、新たに取得された検出磁気ベクトルを考慮して中心位置を更新する。これによって、中心位置をより正確な位置に修正することができ、入力装置２の姿勢を精度良く算出することができる。
【００４９】
また、第３処理においては、中心位置を用いることで検出磁気ベクトルから方向ベクトルを算出することが可能となる。本実施形態においては、情報処理装置３は、所定の条件が満たされた場合、新たに取得された検出磁気ベクトルに対応する方向ベクトルを算出し、算出された方向ベクトルを用いて入力装置２の姿勢を算出する。
【００５０】
なお、上記第２処理と第３処理は並行して実行される。つまり、中心位置が算出された後は、第２処理と第３処理とが繰り返し実行される。したがって、中心位置が算出された後は、検出磁気ベクトルの取得処理、中心位置の更新処理、および、方向ベクトルに基づく姿勢の算出処理が繰り返し実行される。
【００５１】
以下、上記第１〜第３処理を具体的に説明する。なお、以下の説明で用いる図面では、図面をわかりやすくする目的で、２次元平面を用いて説明を行う。ただし、本実施形態においては、実際には３次元空間における３次元のベクトルおよび位置等を用いた計算が行われる。なお、他の実施形態においては、２次元平面における入力装置２の姿勢を算出するべく、２次元平面における２次元のベクトルおよび位置等を用いて第１〜第３処理が実行されてもよい。
【００５２】
（３−２：第１処理）
第１処理においては、情報処理装置３は、検出磁気ベクトルを繰り返し取得する。取得された検出磁気ベクトルは、情報処理装置３がアクセス可能な記憶部に設けられるバッファに記憶される。詳細は後述するが、本実施形態においては、バッファに記憶される検出磁気ベクトルの最大数には制限があり、所定の条件を満たす検出磁気ベクトルがバッファに残され、不要と判断された検出磁気ベクトルはバッファから削除される。そして、バッファに記憶されている検出磁気ベクトルが中心位置の推定（算出）に用いられる。なお、以下においては、情報処理装置３によって推定（算出）される中心位置と区別する意図で、磁気球体の正確な中心位置を「実際の中心位置」と記載する。
【００５３】
（初期中心位置を算出するか否かの判定）
第１処理において、情報処理装置３は、検出磁気ベクトルが取得される度に、初期中心位置を算出するか否かを判定する。すなわち、情報処理装置３は、検出磁気ベクトルを取得する度に、それまでに取得された検出磁気ベクトルが所定の条件を満たすか否かを判定する。そして、所定の条件が満たされた場合、最初の中心位置（初期中心位置）が推定（算出）される。上記所定の条件は、中心位置を推定するのに十分な検出磁気ベクトルが取得されたか否かを判定するための条件である。本実施形態によれば、所定の条件を満たしたことに応じて中心位置が推定されるので、姿勢の算出に用いることができないほど不正確な中心位置が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【００５４】
ただし、本実施形態における姿勢算出処理は、中心位置を推定するために非常に多くの検出磁気ベクトルを必要とするわけではない。詳細は後述するが、本実施形態における姿勢算出処理においては、上記磁気球体の球面の一部分に相当する検出磁気ベクトルが取得されれば中心位置を推定することが可能である。つまり、本実施形態においては、中心位置を推定するために入力装置２をいろいろな方向に向ける必要は無く、入力装置２がほぼ一方向を向いた状態であっても中心位置を推定することが可能である。なお、上記中心位置を推定するために、例えば８の字に入力装置２を動かす操作をユーザに行わせ、いろいろな方向を向く検出磁気ベクトルを取得する方法が考えられる。本実施形態においては、そのような操作をユーザに行わせることなく（より精度良く中心位置を推定する等の目的でそのような操作を行わせてもよい）中心位置を推定することが可能である。
【００５５】
本実施形態においては、情報処理装置３は、複数の検出磁気ベクトルの各終点位置を含むように決定される領域が所定の大きさとなったことを条件として、初期中心位置を算出する。具体的には、情報処理装置３は、検出磁気ベクトルに基づいて記録範囲を設定し、設定された記録範囲が所定の大きさとなったか否かを判定する。以下、図３を参照して初期中心位置を算出するか否かの判定について詳細に説明する。
【００５６】
図３は、設定される初期中心位置の一例を示す図である。情報処理装置３は、検出磁気ベクトルが取得される度に、記録範囲を設定する（図３参照）。記録範囲は、バッファに記憶される各検出磁気ベクトルの各終点を含むように設定される。本実施形態においては、記録範囲は、上記各終点を含み、大きさが最小となる直方体として設定される。より具体的には、記録範囲は、計算を容易にするべく、検出磁気ベクトルを表すための３次元座標系（ｘｙｚ座標系）におけるいずれか２軸を含む平面（ｘｙ平面、ｙｚ平面、およびｘｚ平面）に平行な面で構成される直方体として設定される。なお、記録範囲は、検出磁気ベクトル（検出磁気ベクトルの終点位置）に基づいて決定される任意の領域であってもよい。例えば、記録範囲の形状は、直方体に限らず、球体等、どのような形状であってもよい。
【００５７】
記録範囲が設定されると、情報処理装置３は、記録範囲が所定の大きさよりも大きくなったか否かの判定処理を実行する。具体的には、情報処理装置３は、記録範囲である直方体のいずれか１辺が、所定長さより長くなったか否かを判定する。なお、詳細は後述するが、この所定長さは、姿勢が算出可能であると想定される最小の磁気球体の直径よりも短い長さであり、例えば図１２に示す多面体の一辺の半分の長さ程度（直径よりも十分に短い程度）に設定されてもよい。このように、本実施形態においては、入力装置２の姿勢を大きく変化させなくても、中心位置の算出を開始することができる。
【００５８】
上記判定処理において記録範囲が所定の大きさよりも大きくなったと判定された場合、初期中心位置が算出される。なお、上記判定処理は、記録範囲の大きさを判定する任意の判定方法で行われてもよい。例えば、情報処理装置３は、記録範囲の体積が所定の大きさよりも大きくなったか否かを判定してもよい。
【００５９】
以上のように、本実施形態においては、中心位置の算出に用いられる複数の検出磁気ベクトルの各終点位置を含むように決定される領域（記録範囲）が所定の大きさよりも大きくなったことを条件として、初期中心位置が算出される。なお、他の実施形態においては、情報処理装置３は、上記複数の検出磁気ベクトルの各方向が所定の範囲よりも大きくなったことを条件として、初期中心位置を算出してもよい。例えば、上記複数の検出磁気ベクトルの各方向を含むように決定される立体角が所定の大きさよりも大きくなったことを条件として、初期中心位置が算出されてもよい。
【００６０】
（初期中心位置の算出方法）
初期中心位置は、バッファに記憶されている複数の検出磁気ベクトルに基づいて算出される。本実施形態においては、初期中心位置は、上記複数の検出磁気ベクトルの各終点位置を含むように決定される領域（ここでは上記記録範囲）の内部に設定される。換言すれば、初期中心位置は、上記記録範囲である直方体の内部に設定される。これによれば、初期中心位置は、上記複数の検出磁気ベクトルの各終点の周囲に設定され、後述する中心位置の更新処理（第２処理）によって、磁気球体の中心へ次第に近づけることができる。つまり、初期中心位置が（更新処理によって磁気球体の中心へ近づけることが困難な程度に）大きく外れた位置に設定される可能性を低減することができ、初期中心位置を適切な位置に設定することができる。
【００６１】
図３に示されるように、初期中心位置ｐ１は、バッファに記憶されている各検出磁気ベクトル（Ｖｄ１〜Ｖｄ３）のうちの基準磁気ベクトルの終点ｓ１から、記録範囲の中心ｃの方向へ伸びる直線Ｌ上であって、当該終点ｓ１から所定距離だけ離れた位置ｐ１に設定される。上記基準磁気ベクトルは、どのように決定されてもよいが、本実施形態においては、最初に取得された検出磁気ベクトルＶｄ１とする。なお、他の実施形態においては、上記各検出磁気ベクトルのうち、原点から記録範囲の中心ｃへの方向に最も近い方向を向く検出磁気ベクトルを基準磁気ベクトルとしてもよい。
【００６２】
上記のように、基準磁気ベクトルの終点の位置ｓ１から記録範囲の中心ｃの方向へ伸びる直線Ｌ上に初期中心位置を設定することによって、初期中心位置ｐ１は、上記各検出磁気ベクトルの各終点ｓ１〜ｓ３から推定される曲面（図３では、弧ｓ２ｓ３）に関して凹側の位置に設定されることとなる。なお、初期中心位置が仮に上記曲面の凸側の位置に設定されると、後述する中心位置の更新処理（第２処理）によって、中心位置はより凸側へ移動していき、磁気球体の実際の中心位置Ｐへと正しく収束しない可能性がある。これに対して、初期中心位置を上記曲面の凹側の位置に設定することによって、上記更新処理によって中心位置をより確実に収束させることができる（凸側に誤って収束する可能性を低減することができる）。
【００６３】
また、上記所定距離は、どのように決定されてもよいが、本実施形態においては、記録範囲の最長辺の半分の長さに設定される（図３参照）。これによって、初期中心位置ｐ１を確実に記録範囲内の位置とすることができる。また、上記所定距離を最長辺の半分の長さとすることで、各検出磁気ベクトルの各終点から推定される曲面に関してより凹側となる位置に初期中心位置を設定することができる。これによれば、磁気球体の実際の中心位置Ｐにより近い（可能性が高い）位置に初期中心位置ｐ１を設定することができるので、中心位置が実際の中心位置Ｐへ収束しやすくなる。なお、他の実施形態においては、初期中心位置は、上記直線Ｌ上の他の位置に設定されてもよく、例えば、上記直線Ｌと記録範囲の面との交点に設定されてもよい。
【００６４】
なお、他の実施形態においては、情報処理装置３は、上記各検出磁気ベクトルの各終点の重心位置に初期中心位置を設定してもよい。また、他の実施形態においては、上記記録範囲の中心の位置に代えて上記重心位置を用いてもよい。これらによっても、各検出磁気ベクトルの各終点位置を含むように決定される領域（記録範囲）の内部に初期中心位置を設定することができ、上記曲面の凹側の位置に初期中心位置を設定することができる。
【００６５】
また、他の実施形態においては、情報処理装置３は、上記各検出磁気ベクトルの各終点から等距離となる位置、すなわち、実際の中心位置Ｐを算出（推定）する方法を採用してもよい。なお、本実施形態によれば、上記の方法よりも容易かつ迅速に初期中心位置を算出することができる。
【００６６】
（３−３：第２処理）
上述のようにして初期中心位置が設定された後、情報処理装置３は、中心位置を逐次更新する。すなわち、検出磁気ベクトルが取得される度に、取得された検出磁気ベクトルに基づいて新たな中心位置が算出される。本実施形態においては、情報処理装置３は、中心位置から検出磁気ベクトルの終点位置までの線分（半径）の長さに関する条件を用いて（更新後の）中心位置を算出する。具体的には、情報処理装置３は、検出磁気ベクトルが新たに取得された場合、中心位置から（当該中心位置の推定に用いられる）各検出磁気ベクトルの終点までの各半径の長さがそれぞれ、当該各半径の長さの平均に近づくように、中心位置を更新する。以下、図４を参照して、中心位置の更新処理の詳細を説明する。
【００６７】
図４は、更新処理によって更新される前後の中心位置の一例を示す図である。図４においては、図３に示した初期中心位置ｐ１が設定された後、新たな検出磁気ベクトルＶｄ４が取得された場合を示している。この場合、情報処理装置３は、現在の中心位置ｐ１から各検出磁気ベクトル（Ｖｄ１〜Ｖｄ４）の終点への各線分ｒ１〜ｒ４の長さをそれぞれ算出する。なお、中心位置から検出磁気ベクトルの終点への線分は、磁気球体の半径であるとも言える。そのため本明細書では、上記線分を「半径」と記載することがある。なお、推定された中心位置が実際の中心位置に一致しない場合には、推定された中心位置から複数の検出磁気ベクトルの各終点位置までのそれぞれの「半径」は、同じ長さにならない場合がある点に留意する。また、情報処理装置３は、上記各線分の平均値（平均半径）を算出する。
【００６８】
情報処理装置３は、上記各半径ｒ１〜ｒ４の長さが平均半径に近づくように、中心位置ｐ１を更新する。具体的には、情報処理装置３は、半径と平均半径との差の所定割合（例えば差の２０％）だけ、半径の長さを変更する処理を、検出磁気ベクトル毎に行う。この処理は、換言すれば、半径の長さが変更されるように、中心位置を当該半径の方向に沿って移動させる処理である。図５は、図４に示す領域の一部を拡大した図である。図４および図５に示す例においては、半径ｒ１を変更する処理によって、中心位置ｐ１は半径ｒ１に平行な方向へ移動する。なお、この例では平均半径は半径ｒ１よりも大きいので、半径ｒ１が大きくなる方向へ中心位置ｐ１は移動する（図５に示す矢印参照）。同様に、半径ｒ２を変更する処理によって、中心位置ｐ１は半径ｒ２に平行な方向へ移動し、半径ｒ３を変更する処理によって、中心位置ｐ１が半径ｒ３に平行な方向へ移動し、半径ｒ４を変更する処理によって、中心位置ｐ１が半径ｒ４に平行な方向へ移動する（図５に示す矢印参照）。上記半径ｒ１〜ｒ４の長さを変更する処理の結果、中心位置ｐ１は中心位置ｐ２へと移動する。
【００６９】
上記のように、中心位置の更新処理によって、各半径は平均半径に近づく、すなわち、各半径は均等に近づくように変更される。つまり、中心位置は、磁気球体の実際の中心位置Ｐへと近づくように更新される（図５参照）。したがって、更新処理によって、中心位置をより精度良く算出することができ、入力装置２の姿勢をより正確に算出することができるようになる。なお、本実施形態においては、各検出磁気ベクトルの終点の周囲（上記記録範囲内）に初期中心位置が設定される。そのため、本実施形態においては、初期中心位置は、実際の中心位置Ｐよりも各終点に近い側に設定される（設定される可能性が高い）。したがって、上記更新処理は、各終点から遠ざかる方向へ中心位置を移動する処理と言うことができる。
【００７０】
なお、本実施形態においては、情報処理装置３は、１回の更新処理として、検出磁気ベクトルの数に応じた回数だけ中心位置を移動させる処理を実行する。この処理は、各半径が平均半径となるまで中心位置の移動を繰り返す処理ではないので、情報処理装置３は１回の更新処理を迅速に行うことができる。
【００７１】
なお、他の実施形態においては、１回の更新処理においては、バッファに記憶される複数の検出磁気ベクトルのうちの一部に関して、中心位置を移動させる処理を実行してもよい。つまり、情報処理装置３は、検出磁気ベクトルが新たに取得された場合、中心位置の推定に用いられる各検出磁気ベクトルのうちのいくつかの検出磁気ベクトルについて、中心位置から当該いくつかの検出磁気ベクトルの終点までの半径の長さがそれぞれ、各半径（中心位置の推定に用いられる各検出磁気ベクトルに対応する各半径）の長さの平均に近づくように、中心位置を更新してもよい。例えば、１回の更新処理においては上記複数の検出磁気ベクトルの半分について中心位置の移動処理が実行され、次の１回の更新処理において残りの半分の検出磁気ベクトルについて中心位置の移動処理が実行される結果、２回の更新処理によって、当該複数の検出磁気ベクトルの全てについて中心位置の移動が行われるようにしてもよい。これによれば、１回の更新処理における情報処理装置３の処理負担を軽減することができる。
【００７２】
本実施形態においては、情報処理装置３は、検出磁気ベクトルが新たに取得される度に、新たに取得された検出磁気ベクトルを少なくとも用いて中心位置を更新する。したがって、検出磁気ベクトルが取得される度に、中心位置は実際の中心位置Ｐへと次第に近づいていく。その結果、ある程度の時間が経過すると、中心位置は実際の中心位置Ｐの付近の位置となる。
【００７３】
なお、本実施形態においては、仮に中心位置が実際の中心位置Ｐの付近に位置していると推定される場合（例えば、更新処理によって中心がほとんど移動しない場合）であっても、情報処理装置３は、検出磁気ベクトルが新たに取得される度に更新処理を実行する。これによれば、仮に入力装置２の周囲の磁界が何らかの理由で変化し、磁気球体が変化した場合であっても、変化に応じて中心位置が変更されるので、より正確に中心位置を算出することができる。
【００７４】
（３−４：第３処理）
上記第１処理によって中心位置が設定された後は、方向ベクトルを算出可能になる。したがって、情報処理装置３は、第３処理において、中心位置から方向ベクトルを算出し、方向ベクトルに基づいて入力装置２の姿勢を算出する。
【００７５】
なお、上述のように、情報処理装置３は、取得された各検出磁気ベクトルの終点位置によって決められる領域（記録範囲）が所定の基準よりも大きくなったことを少なくとも条件として、方向ベクトルを用いた姿勢の算出を行う（第３処理）。これによれば、不正確な中心位置が算出され、不正確な中心位置を用いて不正確な姿勢が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【００７６】
また、上述のように、情報処理装置３は、検出磁気ベクトルが新たに取得される度に、新たに取得された検出磁気ベクトルを少なくとも用いて中心位置を更新する（第２処理）。そして、情報処理装置３は、検出磁気ベクトルが新たに取得される度に、更新された中心位置により決められる方向ベクトルに基づいて入力装置２の姿勢を算出する。これによれば、より正確な中心位置に基づくことによって、より精度良く入力装置２の姿勢を算出することができる。なお、上述のように、１回の更新処理においては、バッファに記憶される複数の検出磁気ベクトルのうちの一部に関して中心位置の移動処理が実行されてもよい。
【００７７】
（他の方法による姿勢の補正）
本実施形態においては、情報処理装置３は、磁気センサ４とは別のセンサ（ジャイロセンサ５および加速度センサ６）を用いる方法で得られる入力装置２の姿勢を、方向ベクトルを用いて補正することで、入力装置２の姿勢を算出する。つまり、情報処理装置３は、検出磁気ベクトルを用いる方法とは別の方法によって算出された入力装置２の姿勢を方向ベクトルに基づいて補正する。以下、図６を参照して、方向ベクトルを用いた入力装置２の姿勢の補正方法について説明する。
【００７８】
図６は、方向ベクトルを用いて入力装置２の姿勢を補正する方法の一例を示す図である。まず、情報処理装置３は、所定の基準時における方向ベクトル（基準方向ベクトル）Ｖａを設定する（図６に示す（ａ））。基準方向ベクトルＶａは、例えば、基準磁気ベクトルに対応する方向ベクトルである。なお、基準磁気ベクトルの検出時には中心位置が算出されていないが、中心位置の算出後に、中心位置と基準磁気ベクトルとから基準方向ベクトルを算出することができる。なお、方向ベクトルは入力装置２を基準として算出されるので、情報処理装置３は、空間を基準とする座標系（入力装置２の姿勢を表すための座標系）における基準方向ベクトルＶａの値を算出しておく。つまり、情報処理装置３は、上記ｘｙｚ座標系から、入力装置２の姿勢を表す座標系へと基準方向ベクトルの座標系を変換する。
【００７９】
中心位置が設定された後のある時点において、情報処理装置３は、上記他の方法を用いて入力装置２の姿勢を算出する。なお、図６の（ｂ）欄に示される入力装置２の姿勢は、上記他の方法を用いて算出された姿勢である。また、情報処理装置３は、この時点における方向ベクトルＶａ１を算出する。
【００８０】
ここで、方向ベクトルは空間に対して固定であるので、上記ある時点における方向ベクトルＶａ１は、本来は基準方向ベクトルＶａと同じ向きとなるはずである。（検出磁気ベクトルに基づく姿勢が正確であるとの前提に立てば）方向ベクトルＶａ１と基準方向ベクトルＶａとのずれは、上記基準時点から上記ある時点までに生じた、上記他の方法を用いて算出される姿勢の誤差であると考えられる。そのため、情報処理装置３は、上記方向ベクトルＶａ１が基準方向ベクトルＶａと同じ向きとなるように、他の方法を用いて算出される入力装置２の姿勢を回転させる補正を行う（図６に示す（ｂ）の矢印参照）。なお、図６の（ｃ）欄に示される入力装置２の姿勢は、方向ベクトルによる補正後の入力装置２の姿勢を示す。
【００８１】
（補正度の算出）
なお、図６においては、方向ベクトルＶａ１が基準方向ベクトルＶａと一致するように補正を行うものとして説明したが、本実施形態においては、情報処理装置３は、方向ベクトルＶａ１が基準方向ベクトルＶａの方向へ補正度に応じた割合だけ近づくように補正を行う。補正度はどのように決定されてもよいが、本実施形態においては、いくつかの要素に基づいて複数種類の補正率（第１補正率および第２補正率）を算出し、これらの補正度に基づいて最終的に用いる補正度を設定する。以下、補正度の設定方法について説明する。
【００８２】
（第１補正率）
第１補正率は、新たに取得された検出磁気ベクトル（の終点）が、これまでに取得された検出磁気ベクトル（の終点）に対して離れている度合い（「離間度」と呼ぶ）に応じて設定される。なお、「これまでに取得された検出磁気ベクトル」とは、その時点における中心位置の推定に用いられた検出磁気ベクトルのことであり、換言すれば、バッファに記憶されている検出磁気ベクトルのことである。情報処理装置３は、上記離間度が大きいほど補正率が小さくなるように第１補正率を設定する。第１補正率は、例えば０以上１００以下の値で表され、値が大きいほど検出磁気ベクトルに基づく補正の度合いが大きくなる（図６の例で言えば、方向ベクトルＶａ１が基準方向ベクトルＶａにより近づく）ものとする。
【００８３】
図７は、第１補正率の設定方法の一例を示す図である。図７においては、基準磁気ベクトルＶｄ１を含む複数の検出磁気ベクトルが取得されている状態において、新たな検出磁気ベクトルとしてベクトルＶｄ２が取得された場合と、ベクトルＶｄ３が取得された場合とを示している。また、図７に示す斜線部分は、上記複数の検出磁気ベクトルの範囲を表す。つまり、当該複数の検出磁気ベクトルは、斜線部分の範囲内で取得されたものとする。また、新たな検出磁気ベクトル（Ｖｄ２またはＶｄ３）が取得された時の中心位置を位置ｐとする。中心位置ｐは、上記複数の基準方向ベクトルに基づいて設定され、実際の中心位置Ｐとは若干異なっているものとする。
【００８４】
図７において、検出磁気ベクトルＶｄ２が取得された場合を考える。検出磁気ベクトルＶｄ２は、これまでに取得された上記複数の検出磁気ベクトルの範囲から離れている。ここで、新たな検出磁気ベクトルＶｄ２が上記範囲から離れている場合には、当該新たな検出磁気ベクトルに対応する方向ベクトルＶａ２の方向は、正しい方向（実際の中心位置Ｐから検出磁気ベクトルＶｄ２の終点へのベクトルＶａ２’の方向）との差異が大きくなるおそれがある（図７参照）。つまり、方向ベクトルＶａ２は正確でない可能性がある。したがって、上記の場合、第１補正率は、相対的に小さく設定される。
【００８５】
一方、図７において、検出磁気ベクトルＶｄ３が取得された場合を考える。検出磁気ベクトルＶｄ３は、これまでに取得された上記複数の検出磁気ベクトルの範囲内に含まれている（範囲に近い）。このように、新たな検出磁気ベクトルＶｄ３が上記範囲に近い場合には、当該新たな検出磁気ベクトルに対応する方向ベクトルＶａ３の方向は、正しい方向（実際の中心位置Ｐから検出磁気ベクトルＶｄ３の終点へのベクトルＶａ３’の方向）との差異が小さくなる。つまり、方向ベクトルＶａ３はある程度正確であると考えることができる。したがって、上記の場合、第１補正率は、相対的に大きく設定される。
【００８６】
以上のように、本実施形態においては、情報処理装置３は、新たに取得された検出磁気ベクトルの終点位置が、中心位置の推定に用いられた検出磁気ベクトルの終点位置に対して離れているほど、補正度（第１補正率）を小さく設定する。これによれば、新たな検出磁気ベクトルに対応する方向ベクトルが正確でない可能性がある場合には例えば補正度を低く設定し、当該方向ベクトルによる影響を小さくして入力装置２の姿勢を算出することができる。これによって、不正確な姿勢が算出される可能性を低減することができる。また例えば、新たな検出磁気ベクトルに対応する方向ベクトルが正確であると考えられる場合には例えば補正度を高く設定し、当該方向ベクトルによる影響を大きくして入力装置２の姿勢を算出することができる。これによって、正確な姿勢が算出される可能性を向上することができる。このように、上記離間度に応じて補正度を設定することによって、入力装置２の姿勢を精度良く算出することができる。
【００８７】
また、本実施形態においては、情報処理装置３は、中心位置から新たな検出磁気ベクトルの終点位置までの長さ（半径）と、当該中心位置の推定に用いられた検出磁気ベクトルにより決められる半径との差を用いて上記離間度を判断する。すなわち、上記差が大きい場合、離間度が大きいと判断し、上記差が小さい場合、離間度が小さいと判断することができる。したがって、本実施形態においては、情報処理装置３は、上記差に応じて補正度（第１補正率）を設定する。このように、半径の差を用いることによって、離間度を正確に判断することができる。
【００８８】
なお、上記「中心位置から当該中心位置の推定に用いられた検出磁気ベクトルにより決められる半径」とは、中心位置から、当該中心位置の推定に用いられた検出磁気ベクトルの各終点位置までの長さ（半径）により決められる半径である。この半径は、例えば、基準磁気ベクトルに対応する半径（図７に示す方向ベクトルＶａ１の大きさ）として決定されてもよいし、上述の平均半径として決定されてもよい。
【００８９】
上記のように、本実施形態においては、情報処理装置３は、上記離間度が大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置２の姿勢を算出する。つまり、本実施形態においては、入力装置２の姿勢算出に対して、新たな検出磁気ベクトルによる影響を調整する方法として、補正度を用いている。ここで、他の実施形態においては、上記方法はどのような方法であってもよく、補正度を用いる方法に限られない。例えば他の実施形態においては、離間度が所定の基準よりも大きい場合、方向ベクトルを用いた補正を行わず（補正度を“０”にする）、離間度が当該所定の基準以下である場合、方向ベクトルを用いた補正を行うようにしてもよい。
【００９０】
また、磁気センサ４によって姿勢を算出する方法とは別の他の姿勢算出方法を用いない場合であっても、情報処理装置３は、新たな検出磁気ベクトルによる影響を上記離間度に応じて変化させて入力装置２の姿勢を算出してもよい。例えば、情報処理装置３は、過去に取得された検出磁気ベクトルに基づいて算出される第１の姿勢と、新たに取得された検出磁気ベクトルに基づいて算出される第２の姿勢とに基づいて現在の姿勢を算出するようにしてもよい。換言すれば、情報処理装置３は、過去に算出された入力装置の姿勢を、新たに取得された検出磁気ベクトル（当該検出磁気ベクトルに対応する方向ベクトル）に基づいて補正するようにしてもよい。このとき、情報処理装置３は、現在の姿勢に対して第２の姿勢を反映させる割合を離間度に応じて決定してもよい。
【００９１】
以上のように、本実施形態においては、情報処理装置３は、新たに取得された検出磁気ベクトルの終点位置が、中心位置の推定に用いられた各検出磁気ベクトルの終点位置に対して離れているほど、新たな検出磁気ベクトルによる影響（姿勢算出に対する影響）を相対的に小さくして入力装置２の姿勢を算出する。これによれば、推定される中心位置が実際の中心位置の近傍に収束していない場合でも、入力装置２の姿勢を算出することができる。例えば図７を例にとって説明すると、推定される中心位置ｐは、実際の中心位置Ｐからやや離れている状態である。このような状態では、方向ベクトルは正確ではない可能性があるので、姿勢を正確に算出することができないように一見思われる。しかしながら、このような状態であっても、場合によっては（すなわち、上記離間度が小さい場合には）、方向ベクトルはある程度正確であると考えられ、姿勢を算出することが可能である。つまり、本実施形態においては、情報処理装置３は、推定される中心位置が実際の中心位置の近傍に十分に収束していない場合でも、不正確な姿勢が算出されることがない範囲で、方向ベクトルを用いて姿勢算出を行うのである。これによれば、中心位置が十分に収束する前に姿勢を算出することが可能であるので、早期に姿勢を算出することができる。また、実際の中心位置を算出するのに必要となる十分な検出磁気ベクトルを取得できない場合でも姿勢を算出することが可能となるので、より多くの機会に姿勢を算出することができる。したがって、例えば、上述した８の字に入力装置２を動かすような予備的な操作をユーザに行わせることなく、入力装置２を用いた通常の操作が行われる間に入力装置２の姿勢を算出することができる。
【００９２】
また、磁気センサ４は、何らかの理由で異常な検出磁気ベクトルを検出する場合がある。異常な検出磁気ベクトルとは、典型的には、他の検出磁気ベクトルから推定される磁気球体の面とは全く異なる位置に終点が位置するようなベクトルである。このような異常な検出磁気ベクトルを用いて中心位置が推定されると、中心位置を正確に算出することができない可能性がある。ここで、上記のように、離間度に応じて新たな検出磁気ベクトルによる影響を変化させることによって、当該異常な検出磁気ベクトルの影響を少なくすることができ、入力装置２の姿勢を精度良く算出することができる。
【００９３】
また、本実施形態においては、情報処理装置３は、上記離間度を、上述した半径の差を用いて判断する。ここで、本実施形態においては、上記更新処理によって中心位置が正確になると（実際の中心位置に近づく）と、半径の差は小さくなる。したがって、情報処理装置３は、半径の差を用いることで、上記離間度に加えて、中心位置の正確さを考慮して、姿勢算出に対する新たな検出磁気ベクトルによる影響を調整することができる。また、本実施形態においては、上記更新処理によって中心位置は時間の経過に従って次第に正確になっていくので、上記の影響を時間の経過に従って大きくすることができる。つまり、本実施形態によれば、最初は検出磁気ベクトルに基づく姿勢算出が行われる範囲（あるいは、当該姿勢算出の影響が大きい範囲）が限定的であっても、時間の経過に従って当該範囲を拡大することができるようになる。また、時間の経過に従って姿勢を正確に算出することができるようになる。
【００９４】
なお、上記離間度はどのような方法で判断されてもよい。例えば、他の実施形態においては、各検出磁気ベクトルの終点位置に基づいて離間度が算出されてもよい。具体的には、上記記録範囲と新たな検出磁気ベクトルとの距離に応じて離間度が算出されてもよい。また、他の実施形態においては、新たな検出磁気ベクトルに対応する方向ベクトルの方向と、これまでに取得された検出磁気ベクトルに対応する方向ベクトルとの方向の差に応じて離間度が算出されてもよい。
【００９５】
また、本実施形態においては、上述した中心位置の更新処理（第２処理）は、上記第１補正率の値とは独立して（第１補正率の値にかかわらず）実行される。つまり、情報処理装置３は、新たな検出磁気ベクトルの終点位置と、中心位置の推定に用いられた各検出磁気ベクトルの終点位置との関係とは独立して、当該新たな検出磁気ベクトルを用いて中心位置を更新する。これによれば、上記の度合いが大きいために姿勢の算出が行われない（あるいは、検出磁気ベクトルに基づく姿勢算出の影響が小さい）場合でも、中心位置はより正確な位置に更新される。そのため、中心位置を精度良く算出することができるとともに、ある時点において姿勢の算出が行われない場合でも、その後に姿勢の算出を行うことができる。
【００９６】
（第２補正率）
第２補正率は、新たに取得された検出磁気ベクトルに対応する方向ベクトルの方向と、ユーザが所定の操作を行った時の検出磁気ベクトル（ここでは、基準磁気ベクトル）に対応する方向ベクトルの方向との差に応じて設定される。情報処理装置３は、上記の方向の差が大きいほど補正率が小さくなるように第２補正率を設定する。第２補正率は、第１補正率と同様、例えば０以上１００以下の値で表され、値が大きいほど検出磁気ベクトルに基づく補正の度合いが大きくなるものとする。
【００９７】
図８は、第２補正率の設定方法の一例を示す図である。図８においては、基準磁気ベクトルＶｄ１を含む複数の検出磁気ベクトルが取得されている状態において、新たな検出磁気ベクトルとしてベクトルＶｄ４が取得された場合と、ベクトルＶｄ５が取得された場合とを示している。また、新たな検出磁気ベクトル（Ｖｄ４またはＶｄ５）が取得された時の中心位置を位置ｐとする。
【００９８】
図８において、検出磁気ベクトルＶｄ４が取得された場合を考える。検出磁気ベクトルＶｄ４に対応する方向ベクトルＶａ４の方向は、基準磁気ベクトルＶｄ１に対応する基準方向ベクトルＶａ１の方向との差（角度θ１）が比較的大きい。ここで、上記の方向の差が大きい場合には、基準時（入力装置２の使用開始時）における姿勢から、入力装置２の姿勢が大きく変化していると考えられる。また、基準時における姿勢から入力装置２の姿勢が大きく変化すると、入力装置２の周囲の磁界が変化する可能性がある。例えば、入力装置２の姿勢を変えたために位置も変化し、その結果、周囲の磁界も変化することがあり得る。具体的には、入力装置２が金属の壁に近づいたために周囲の磁界が変化することが考えられる。このように、入力装置２の姿勢が基準時の姿勢から大きく変化すると、検出磁気ベクトルに基づく姿勢算出を正確に行うことができない可能性がある。そのため、情報処理装置３は、上記の方向の差が大きい場合には、第２補正率を相対的に小さく設定する。
【００９９】
一方、図８において、検出磁気ベクトルＶｄ５が取得された場合を考える。検出磁気ベクトルＶｄ５に対応する方向ベクトルＶａ５の方向は、基準磁気ベクトルＶｄ１に対応する基準方向ベクトルＶａ１の方向との差（角度θ２）が比較的小さい。このように、上記の方向の差が小さい場合には、入力装置２の周囲の磁界が変化している可能性は低いので、姿勢算出を正確に行うことができない可能性も低いと考えられる。そのため、情報処理装置３は、上記の方向の差が小さい場合には、第２補正率を相対的に大きく設定する。
【０１００】
以上のように、本実施形態においては、情報処理装置３は、ユーザが所定の操作を行った時に検出された検出磁気ベクトルを基準磁気ベクトルに設定する。そして、中心位置から新たな検出磁気ベクトルへの方向が、当該中心位置から基準磁気ベクトルへの方向に対して離れているほど、当該新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置２の姿勢を算出する。これによれば、入力装置２の周囲の磁界が変化することに起因して不正確な姿勢が算出される可能性を低減することができ、ひいては、姿勢を精度良く算出することができる。
【０１０１】
（最終的な補正度の算出）
本実施形態においては、上記第１補正率および第２補正率に基づいて、最終的な補正度を算出する。例えば、情報処理装置３は、第１補正率と第２補正率とを乗算し、所定の係数をさらに乗算した補正度を算出する。なお、他の実施形態においては、上記第１補正率および第２補正率のうちいずれか一方に基づいて最終的な補正度を算出してもよい。例えば、入力装置２の姿勢が全方向にわたって変化するような操作方法が想定される場合には、第２補正率を用いずに補正度が算出されてもよい。また、情報処理装置３は、補正度が急激に大きくなることを防止してもよい（後述するステップＳ３６およびＳ３７参照）。情報処理装置３が算出する入力装置２の姿勢が、方向ベクトルを用いた補正によって急激に変化することを防止するためである。
【０１０２】
なお、本実施形態においては、他の方法（ジャイロセンサ５および加速度センサ６を用いる方法）で算出される入力装置２の姿勢を方向ベクトルで補正するものとした。ここで、他の実施形態においては、情報処理装置３は、他の方法を用いず、方向ベクトルに基づいて入力装置２の姿勢を算出するようにしてもよい。
【０１０３】
（姿勢を算出するか否かの判定）
本実施形態においては、第３処理において、情報処理装置３は、中心位置に関する所定の条件が満たされた場合に、方向ベクトルに基づく入力装置２の姿勢を算出する。つまり、推定された中心位置が磁気球体の実際の中心位置を表すものとして信頼できる度合いが低い場合には、情報処理装置３は検出磁気ベクトルに基づく入力装置２の姿勢を算出しないことにより、不正確な姿勢を算出する可能性を低減するものである。
【０１０４】
本実施形態においては、情報処理装置３は、中心位置と、バッファに記憶される各検出磁気ベクトルとに基づいて、中心位置の信頼度を算出する。そして、信頼度が所定の基準より高い場合には入力装置２の姿勢を算出し、信頼度が所定の基準より低い場合には入力装置２の姿勢を算出しない。
【０１０５】
具体的には、情報処理装置３は、上記更新処理によって中心位置が更新される場合における更新前後の移動量が大きいほど、信頼度を低く算出する。また、情報処理装置３は、上記各検出磁気ベクトルの終点と中心位置とを結ぶ各半径の長さのばらつきが大きいほど、信頼度を低く算出する。更新前後の移動量が大きい場合、および、各半径の長さのばらつきが大きい場合には、中心位置が十分に収束しておらず、不正確である可能性が高いためである。例えば図４に示す場合、各半径ｒ１〜ｒ４の長さのばらつきが大きく、中心位置の移動は大きい。そのため、信頼度は低く算出され、その結果、姿勢の算出が行われない。一方、図９は、信頼度が高く算出される場合における中心位置の一例を示す図である。図９に示す場合、各半径ｒ１〜ｒ４の長さのばらつきが小さく、中心位置の移動は小さくなる。そのため、信頼度は高く算出され、その結果、姿勢の算出が行われる。
【０１０６】
なお、本実施形態においては、各半径の長さのばらつきを表す指標として、平均半径と半径との差の２乗を各半径について累積加算した値が用いられる。なお、この指標は、どのようなものであってもよく、例えば、最大の半径と最小の半径との差、平均半径と最大または最小の半径との差、および、各半径の標準偏差等であってもよい。
【０１０７】
また、本実施形態においては、信頼度の算出は、入力装置２の姿勢が所定の基準よりも変化したことに応じて行われる。すなわち、情報処理装置３は、検出磁気ベクトルが取得される度に、検出磁気ベクトルに対応する方向ベクトルの方向が所定の基準よりも変化したか否かを判定する。そして、方向ベクトルの方向が所定の基準よりも変化した場合、情報処理装置３は信頼度を新たに算出する。一方、方向ベクトルの方向が所定の基準よりも変化しない場合、信頼度を新たに算出されないので、従前の信頼度が維持される。入力装置２の姿勢（検出磁気ベクトル）が変化しない場合、中心位置が信頼できる度合いも変化しないと考えられるためである。このように、本実施形態によれば、信頼度の算出による処理負荷を軽減することができる。なお、他の実施形態においては、信頼度は、所定期間に１回の割合で（例えば検出磁気ベクトルが取得される度に）算出されてもよい。
【０１０８】
以上のように、本実施形態においては、情報処理装置は、中心位置の更新前後の移動量、および、各半径の長さのばらつきを、中心位置の信頼度を反映する指標として用いて、当該指標に基づいて、入力装置２の姿勢を算出するか否かを決定する。ここで、他の実施形態においては、情報処理装置３は、取得された検出磁気ベクトルが姿勢算出に与える影響を上記指標に応じて変化させてもよい。例えば、情報処理装置３は、上記の補正度を上記指標に基づいて設定してもよい。
【０１０９】
上記のように、情報処理装置３は、更新前後における中心位置の変化量が大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置２の姿勢を算出する。これによれば、不正確な姿勢が算出される可能性を低減することができ、姿勢算出の精度を向上することができる。
【０１１０】
また、情報処理装置３は、現在の中心位置から、当該中心位置の推定に用いられた各検出磁気ベクトルの終点位置までの各長さ（各半径の長さ）のばらつきが大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして姿勢を算出する。これによれば、不正確な姿勢が算出される可能性を低減することができ、姿勢算出の精度を向上することができる。
【０１１１】
なお、他の実施形態においては、情報処理装置３は、中心位置の更新前後の移動量、および、各半径の長さのばらつきのいずれか１つに基づいて信頼度を算出してもよい。すなわち、中心位置の更新前後の移動量、および、各半径の長さのばらつきのいずれか１つに基づいて、姿勢算出に対する新たな検出磁気ベクトルによる影響を調整してもよい。
【０１１２】
（３−５：検出磁気ベクトルを記憶する方法）
本実施形態においては、情報処理装置３は、検出磁気ベクトルを条件に応じて分類して記憶するバッファを用いる。そして、バッファに記憶される検出磁気ベクトルを用いて中心位置を推定（算出）する。つまり、本実施形態においては、バッファから消去された検出磁気ベクトルは中心位置の推定に用いられない。情報処理装置３は、効率良く、かつ、精度良く中心位置を算出するべく、中心位置の算出に用いる検出磁気ベクトルを、上記のバッファを用いて選別する。以下、取得された検出磁気ベクトルをバッファに記憶する方法について説明する。
【０１１３】
本実施形態においては、情報処理装置３は、基準位置から、取得された検出磁気ベクトルの終点位置への方向に応じたカテゴリに分類して検出磁気ベクトルを上記バッファに記憶する。なお、各カテゴリは、基準位置から検出磁気ベクトルの終点位置への方向に応じて設定される。上記基準位置は、検出磁気ベクトルに基づいて定められ、本実施形態においては、中心位置が設定されている場合には、中心位置である。つまり、本実施形態においては、検出磁気ベクトルに対応する方向ベクトルの向きが同じまたは近いものは、同じカテゴリに分類される。以下、図１０および図１１を参照して、詳細を説明する。
【０１１４】
図１０は、本実施形態におけるバッファの構成の一例を示す図である。図１０に示すように、バッファには、複数（図１０では１６個）の分類ベクトル毎に検出磁気ベクトルを格納する領域が設けられる。分類ベクトルは、検出磁気ベクトルを表すための空間（ｘｙｚ空間）における方向を表すベクトル（ここでは、単位ベクトル）である。各分類ベクトルＶｃ１〜Ｖｃ１６は、それぞれ異なる方向を表す。また、詳細は後述するが、各分類ベクトルＶｃ１〜Ｖｃ１６はその方向が均等に散らばるように設定される。また、各分類ベクトルは予め設定される。分類ベクトルの数はいくつであってもよい。本実施形態において、分類ベクトルの数は固定である。
【０１１５】
なお、上記バッファは、情報処理装置３がアクセス可能な記憶部であればよい。例えば、本実施形態においては、情報処理装置３が備えるメモリ９に上記バッファが用意される。
【０１１６】
図１１は、検出磁気ベクトルの分類方法の一例を示す図である。図１１においては、検出磁気ベクトルＶｄｘが取得されたものとし、そのときの中心位置は位置ｐであるとする。このとき、情報処理装置３は、検出磁気ベクトルＶｄｘに対応する方向ベクトルＶａｘを算出する。そして、上記複数の分類ベクトルＶｃ１〜Ｖｃ１６のうち、方向ベクトルＶａｘに最も方向が近いベクトルを選出する。図１１の例では、方向ベクトルＶａｘに最も方向が近い分類ベクトルＶｃ１１が選出される。情報処理装置３は、選出された分類ベクトルに対応する領域に、取得された検出磁気ベクトルを記憶する。図１１の例では、方向ベクトルＶａｘに最も方向が近い分類ベクトルＶｃ１１が選出されるので、方向ベクトルＶａｘに対応する検出磁気ベクトルＶｄｘは、分類ベクトルＶｃ１１に対応する領域に格納される（図１０参照）。なお、本実施形態においては、新たな検出磁気ベクトルを格納すべき領域にすでに検出磁気ベクトルが格納されている場合には、当該領域には新たな検出磁気ベクトルが上書きして記憶され、前の検出磁気ベクトルは消去される。
【０１１７】
以上のように、本実施形態においては、基準位置から検出磁気ベクトルの終点への方向に応じて検出磁気ベクトルを分類し、同じカテゴリに分類されるうちの１つを用いて中心位置を推定する。これによって、中心位置の推定に用いられる検出磁気ベクトルの数を一定数に制限することができ、中心位置の推定処理の処理負荷を軽減することができる。
【０１１８】
また、本実施形態においては、検出磁気ベクトルは、基準位置から検出磁気ベクトルの終点への方向に応じて分類される。ここで、推定される中心位置は、種々の方向を向く方向ベクトルを用いることによって、より正確に算出されやすくなる。したがって、基準位置から検出磁気ベクトルの終点への方向に応じて検出磁気ベクトルを分類することによって、種々の方向を向く検出磁気ベクトルを用いて中心位置をより正確に推定することができる。
【０１１９】
また、本実施形態において、上記基準位置は中心位置に設定される。つまり、情報処理装置３は、磁気球体の面または当該面の内側に基準位置を設定する。これによれば、種々の方向を向く方向ベクトルに対応する検出磁気ベクトルをバッファに記憶することができるので、より正確に中心位置を推定することができる。
【０１２０】
なお、本実施形態においては、中心位置が設定される前は、基準磁気ベクトルの終点位置が基準位置に設定される。また、中心位置が設定される前において、新たな検出磁気ベクトルが取得される度に、中心位置の更新処理と同様の方法で基準位置が更新される。したがって、中心位置が設定される前においても、磁気球体の面または当該面の内側に基準位置が設定される。
【０１２１】
また、中心位置が設定された後において、情報処理装置３は、検出磁気ベクトルが取得される度に、最新の中心位置を基準位置として、取得された検出磁気ベクトルを分類する。これによれば、分類に用いられる方向ベクトルをより正確なものにすることができる。これによって、検出磁気ベクトルの分類をより正確に行うことができる。なお、上述のように、情報処理装置３は、検出磁気ベクトルが新たに記憶される度に中心位置を更新する。したがって、検出磁気ベクトルが取得される度に中心位置および基準位置が更新されるので、分類に用いられる方向ベクトルをより正確なものにすることができる。
【０１２２】
また、本実施形態においては、分類ベクトルを用いて検出磁気ベクトルを分類する。すなわち、情報処理装置３は、互いに異なる方向を向く複数の分類ベクトルのうちから、基準位置から検出磁気ベクトルの終点への方向に最も近い方向を向く分類ベクトルを選択し、異なる分類ベクトルが選択される検出磁気ベクトルを異なるカテゴリに分類する。これによれば、検出磁気ベクトルを容易に分類することができる。例えば、分類ベクトルと、基準位置から検出磁気ベクトルの終点への方向を表すベクトルとの内積を計算することによって、検出磁気ベクトルを容易に分類することができる。
【０１２３】
なお、他の実施形態においては、分類ベクトルに代えて、方向に関する範囲がバッファの各領域に対して設定されていてもよい。このとき、情報処理装置３は、各領域に設定される範囲のうち、基準位置から検出磁気ベクトルの終点への方向が属する範囲を選択し、選択された範囲に対応する領域に検出磁気ベクトルを格納する。これによっても、検出磁気ベクトルを容易に分類することができる。
【０１２４】
また、本実施形態においては、情報処理装置３は、同じカテゴリに分類される検出磁気ベクトルを１つにまとめてバッファに記憶する。つまり、同じ分類に属する検出磁気ベクトルから得られる１つの検出磁気ベクトルがバッファに記憶される。これによって、バッファに記憶される検出磁気ベクトルの数を一定数に制限することができ、バッファのデータサイズを低減することができる。
【０１２５】
なお、他の実施形態においては、各カテゴリに分類した検出磁気ベクトルを１つのカテゴリにつき複数（全部でもよい）記憶しておいてもよい。このとき、情報処理装置３は、各カテゴリから、１つのカテゴリにつき所定数（例えば１つ）の検出磁気ベクトルを抽出し、抽出した検出磁気ベクトルを用いて中心位置を推定してもよい。これによっても本実施形態と同様、中心位置の推定に用いる検出磁気ベクトルを選別することができ、効率良く中心位置を算出することができる。
【０１２６】
さらに、本実施形態においては、バッファ内の同じ領域に検出磁気ベクトルがすでに格納されている場合、新たな検出磁気ベクトルが上書きして記憶（格納）される。すなわち、情報処理装置３は、新たな検出磁気ベクトルが取得された場合に、当該新たな検出磁気ベクトルを分類すべきカテゴリについて検出磁気ベクトルがすでに記憶されていれば、すでに記憶されている検出磁気ベクトルに当該新たな検出磁気ベクトルを上書きして記憶する。これによれば、同じ領域にすでに格納されている検出磁気ベクトルは消去される。
【０１２７】
なお、上述のように、磁気センサ４は、何らかの理由で異常な検出磁気ベクトルを検出する場合がある。本実施形態においては、検出磁気ベクトルは上書きされるので、仮に異常な検出磁気ベクトルがバッファに記憶されても、その後に異常でない検出磁気ベクトルで上書きされることによって、異常な検出磁気ベクトルによる影響を無くして中心位置を算出することができる。これによって、中心位置を精度良く算出することができる。
【０１２８】
なお、同じカテゴリに分類される検出磁気ベクトルを１つにまとめてバッファに記憶する方法としては、新たな検出磁気ベクトルを上書きする方法の他に、同じカテゴリに分類される複数の検出磁気ベクトルに基づいて生成される検出磁気ベクトルを記憶する方法がある。例えば、他の実施形態においては、同じカテゴリに分類される複数の検出磁気ベクトルに基づいて平均のベクトルを生成し、当該平均のベクトルをバッファに記憶してもよい。これによれば、異常な検出磁気ベクトルによる影響を少なくして中心位置を算出することができる。
【０１２９】
本実施形態においては、上記各分類ベクトルは、方向が均等に散らばるように設定される。すなわち、複数の分類ベクトルは、各分類ベクトルの始点を球体の中心に配置した場合に各分類ベクトルの終点が当該球体の球面上に（後述するように、分類ベクトルの数を半分にする場合には、球面の半分の面上であってもよい）均等に散らばって配置されるように設定される。図１２は、本実施形態において３次元空間に配置される各分類ベクトルの終点位置の一例を示す図である。なお、図１１においては、各分類ベクトルが平面に配置されるように示しているが、本実施形態においては、実際には図１２に示すように、各分類ベクトルは３次元空間に配置される。各分類ベクトルは、例えば、図１２に示す多面体の中心を始点とし、当該多面体の各頂点を終点とするベクトルとして設定される。図１２に示されるように、複数の分類ベクトルは、方向が均等に散らばるように設定される。これによって、均等に散らばった検出磁気ベクトルを用いて中心位置を推定することができるので、中心位置をより正確に推定することができる。なお、各分類ベクトルは、方向が厳密に均等に散らばるように設定される必要はなく、概ね均等に散らばるように設定されれば、中心位置を正確に推定する効果を得ることができる。
【０１３０】
また、本実施形態においては、分類ベクトルは、方向が逆向きとなる他の分類ベクトルが存在するように設定される。すなわち、情報処理装置３は、互いに逆方向を向く２つの分類ベクトルを１組として、複数組の分類ベクトルを設定する。また、情報処理装置３は、２つのベクトルの内積を計算することによって分類ベクトルを選択する。すなわち、情報処理装置３は、分類ベクトルと、基準位置から検出磁気ベクトルの終点への方向を表す方向ベクトルとの内積を計算し、内積値が最大となる分類ベクトルを選択する。
【０１３１】
ここで、本実施形態においては、方向が逆向きとなる他の分類ベクトルが存在するように分類ベクトルが設定されるので、情報処理装置３は、１組の分類ベクトルのうちのいずれか一方について上記内積を計算する処理を組毎に実行することによって、分類ベクトルを選択することができる。具体的には、内積値の絶対値が最大となる分類ベクトルを特定し、当該内積値の符号が正である場合には、当該特定された分類ベクトルを選択すればよく、当該内積値の符号が負である場合には、当該特定された分類ベクトルの逆方向を向く分類ベクトルを選択すればよい。このように、方向が互いに逆向きとなる１組の分類ベクトルを用いることによって、分類ベクトルを選択するための内積計算の回数を半分にすることができる。
【０１３２】
なお、他の実施形態においては、情報処理装置３は、上記実施形態の半分の分類ベクトルを用いて検出磁気ベクトルの分類を行ってもよい。すなわち、他の実施形態においては、上記各組の分類ベクトルのうちいずれか一方のみが設定されてもよい。このとき、情報処理装置３は、まず、内積の絶対値に基づいて分類ベクトルの選択を行う。具体的には、本実施形態と同様に内積を計算する処理を分類ベクトル毎に実行し、絶対値が最大となる分類ベクトルを選択する。さらに、情報処理装置３は、内積値の正負に応じて異なるカテゴリに検出磁気ベクトルを分類する。これによれば、内積計算の回数を半分にすることができるとともに、用意すべき分類ベクトルの数を低減することができる。
【０１３３】
［４．情報処理システムで実行される具体的な処理例］
以下、図１３〜図１６を参照して、本実施形態において情報処理システム１（情報処理装置３）で実行される具体的な処理の一例について説明する。図１３は、本実施形態において情報処理システム１の記憶部（メモリ９）に設定されるデータ領域の一例を示す図である。図１３に示すように、情報処理装置３のメモリ９には、プログラム格納領域１１、操作データ格納領域１３、処理用データ格納領域１５、およびバッファ領域２７が設定される。なお、メモリ９には、図１３に示すデータの他、表示装置へ出力すべき画像やそれを生成するために用いられる画像のデータ等を格納するための領域が設定されてもよい。
【０１３４】
プログラム格納領域１１には、情報処理プログラム１２が記憶される。情報処理プログラム１２は、情報処理装置３のコンピュータ（ＣＰＵ８）に実行させるためのプログラムである。なお、情報処理プログラム１２は、情報処理装置３がアクセス可能であって情報処理装置３の内部または外部に設けられるプログラム格納部（記憶装置または記憶媒体等）に記憶されている。プログラム格納部に記憶される情報処理プログラム１２の一部または全部が適宜のタイミングで読み込まれてメモリ９に記憶され、ＣＰＵ８によって実行される。また、情報処理プログラム１２の一部または全部は、情報処理プログラム１２を実行する情報処理装置内に（例えばライブラリとして）予め記憶されていてもよい。
【０１３５】
操作データ格納領域１３には、入力装置２から送信されてくる操作データが記憶される。本実施形態においては、操作データ格納領域１３には、操作データとして、上記検出磁気ベクトルを表す検出磁気データ１４が記憶される。また、操作データ格納領域１３には、ジャイロセンサ５の検出結果（角速度）を表すデータ、加速度センサ６の検出結果（加速度）を表すデータ、および、操作部７に対する操作を表すデータが記憶される。
【０１３６】
処理用データ格納領域１５には、情報処理装置３において実行される情報処理（図１４に示す情報処理）において用いられる各種のデータが記憶される。処理用データ格納領域１５には、第１姿勢データ１６、第２姿勢データ１７、基準磁気データ１８、平均半径データ１９、中心位置データ２０、記録範囲データ２１、方向ベクトルデータ２２、信頼度データ２３、第１補正率データ２４、第２補正率データ２５、および、補正度データ２６が記憶される。
【０１３７】
第１姿勢データ１６は、磁気センサ４（検出磁気ベクトル）を用いる方法以外の他の方法で算出される入力装置２の姿勢を表すデータである。第２姿勢データ１７は、検出磁気ベクトルに基づいて算出される入力装置２の姿勢を表すデータである。本実施形態においては、第２姿勢データ１７は、第１姿勢データ１６が表す姿勢を、方向ベクトルを用いて補正した姿勢を表すデータである。
【０１３８】
基準磁気データ１８は、上記基準磁気ベクトルを表すデータである。平均半径データ１９は、上記平均半径の長さを表すデータである。中心位置データ２０は、情報処理装置３によって推定される上記中心位置を表すデータである。記録範囲データ２１は、上記記録範囲の領域を表すデータである。
【０１３９】
ここで、本実施形態においては、中心位置が設定された後は、中心位置が基準位置に設定される。また、中心位置が設定される前において、基準位置は中心位置と同じ方法で更新される。したがって、基準位置と中心位置とは同じ値であるので、情報処理装置３は、基準位置と中心位置とを別のデータとして記憶しなくてもよく、１つのデータとして記憶しておくことができる。そのため、ここで説明する処理例においては、情報処理装置３は、基準位置および中心位置を表すためのデータとして、中心位置データ２０を用いる。つまり、中心位置データ２０は、初期中心位置が設定される前の段階では、基準位置を表す。
【０１４０】
方向ベクトルデータ２２は、上記方向ベクトルを表すデータである。ここでは、方向ベクトルデータ２２が表す方向ベクトルは、最新の中心位置に基づいて決定される方向ベクトルである。また、方向ベクトルデータ２２が表す方向ベクトルは、新たに取得された検出磁気ベクトル（最新の検出磁気ベクトル）に対応する方向ベクトルである。
【０１４１】
信頼度データ２３は、上記信頼度を表すデータである。第１補正率データ２４は、上記第１補正率を表すデータである。第２補正率データ２５は、上記第２補正率を表すデータである。補正度データ２６は、第１姿勢データ１６が表す姿勢を、方向ベクトルに基づく姿勢で補正する際の補正度合いを表すデータである。補正度データ２６は、上記第１補正率および第２補正率に基づいて算出される補正度を表す。
【０１４２】
バッファ領域２７は、検出磁気ベクトルを記憶するための上記バッファの領域である。バッファ領域２７には、上記検出磁気データ１４として記憶されたデータのうち、上記“（３−５：検出磁気ベクトルをバッファに記憶する方法）”で述べた方法で分類された検出磁気データが記憶される。
【０１４３】
上記のデータの他、メモリ９には、上記分類ベクトルや、判定に用いる閾値等、情報処理装置における処理（図１４）において用いられるデータが記憶される。
【０１４４】
次に、本実施形態における情報処理の詳細な流れを説明する。図１４は、本実施形態において情報処理装置３のＣＰＵ８が実行する情報処理の流れの一例を示すフローチャートである。本実施形態においては、情報処理システム１が起動されると、情報処理装置３のＣＰＵ８は、メモリ９等の記憶部を初期化し、プログラム格納部から情報処理プログラム１２をメモリ９に読み込む。そして、ＣＰＵ８によって当該情報処理プログラム１２の実行が開始される。
【０１４５】
なお、図１４〜図１６に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて（または代えて）別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をＣＰＵ８が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、ＣＰＵ８以外のプロセッサや専用回路が実行するようにしてもよい。
【０１４６】
本実施形態においては、まずステップＳ１において、ＣＰＵ８は、入力装置２から送信されてくる操作データを取得する。本実施形態においては、入力装置２は、所定時間に１回の割合で操作データを情報処理装置３へ繰り返し送信する。これに応じて、情報処理装置３は操作データを逐次受信する。情報処理装置３は、受信した操作データをメモリ９の操作データ格納領域１３に記憶する。これによって、検出磁気データ１４を含む操作データが取得される。
【０１４７】
ステップＳ２において、ＣＰＵ８は、磁気センサ４を用いる方法以外の他の方法で入力装置２の姿勢を算出する。本実施形態においては、ＣＰＵ８は、ジャイロセンサ５および加速度センサ６を用いて入力装置２の姿勢を算出する。具体的な処理としては、ＣＰＵ８は、操作データをメモリ９から読み出し、操作データに含まれる、ジャイロセンサ５および加速度センサ６によって検出されたデータに基づいて姿勢を算出する。なお、ジャイロセンサ５によって検出される角速度と、加速度センサ６によって検出される加速度に基づいて入力装置２の姿勢を算出するための具体的な方法は、どのような方法であってもよい。ＣＰＵ８は、算出した姿勢を表すデータを第１姿勢データとしてメモリ９に記憶する。
【０１４８】
ステップＳ３において、ＣＰＵ８は、検出磁気ベクトルに基づく姿勢算出処理を実行する。検出磁気ベクトルに基づく姿勢算出処理は、検出磁気ベクトルに基づいて入力装置２の姿勢を算出する処理である。本実施形態においては、検出磁気ベクトルに基づく姿勢算出処理において、ステップＳ２で算出された姿勢を、検出磁気ベクトルを用いて補正する処理が実行される。以下、図１５を参照して、検出磁気ベクトルに基づく姿勢算出処理の詳細を説明する。
【０１４９】
図１５は、検出磁気ベクトルに基づく姿勢算出処理の詳細な流れの一例を示すフローチャートである。検出磁気ベクトルに基づく姿勢算出処理においては、まずステップＳ１１において、ＣＰＵ８は、検出磁気ベクトルに基づく姿勢算出処理を実行するか否かを判定する。ステップＳ１１の判定は、後述するステップＳ１２で姿勢算出処理を開始すると判定された後であるか否かによって行われる。ステップＳ１１の判定結果が肯定である場合、ステップＳ１２の処理が実行される。一方、ステップＳ１１の判定結果が否定である場合、ＣＰＵ８は検出磁気ベクトルに基づく姿勢算出処理を終了する。
【０１５０】
ステップＳ１２において、ＣＰＵ８は、姿勢算出処理を開始するか否かを判定する。本実施形態においては、ステップＳ１２の判定は、ユーザが所定の操作を行ったか否かに基づいて判定される。すなわち、ＣＰＵ８は、メモリ９に記憶された操作データを参照して、入力装置２の操作部７に対して所定の操作が行われたか否かを判定する。ステップＳ１２の判定結果が肯定である場合、ステップＳ１３の処理が実行される。一方、ステップＳ１２の判定結果が否定である場合、後述するステップＳ１５の処理が実行される。なお、図１４に示す情報処理が開始されてから、上記所定の操作が行われたのが２回目以降である場合には、ＣＰＵ８は、当該所定の操作を無視してステップＳ１５の処理を実行してもよい。あるいは、上記の場合、ＣＰＵ８は、ステップＳ１２の処理を実行してもよい（つまり、姿勢算出処理をリセットしてもよい）。
【０１５１】
ステップＳ１３において、ＣＰＵ８は、基準磁気ベクトルを記憶する。すなわち、ＣＰＵ８は、取得された最新の検出磁気ベクトルを、基準磁気ベクトルとして記憶する。具体的な処理としては、ＣＰＵ８は、メモリ９の操作データ格納領域１３に記憶される検出磁気データ１４を読み出し、基準磁気データ１８としてメモリに記憶する。
【０１５２】
ステップＳ１４において、ＣＰＵ８は、初期化処理を実行する。初期化処理は、姿勢算出処理で用いる各種の情報（データ）を処理化する処理である。本実施形態においては、ＣＰＵ８は、以下の処理を実行する。すなわち、ＣＰＵ８は、検出磁気ベクトルを記憶するバッファ（バッファ領域２７）を空にする。また、基準位置（中心位置）は、基準磁気ベクトルに基づいて設定される。ここでは、基準磁気ベクトルの終点位置が基準位置として設定される。ＣＰＵ８は、当該終点位置を表すデータを中心位置データ２０としてメモリ９に記憶する。また、上記記録範囲、平均半径、および補正度は、それぞれ０に設定される。ＣＰＵ８は、平均半径データ１９、記録範囲データ２１、および補正度データ２６として０を表すデータをメモリ９に記憶する。また、姿勢算出処理における処理段階は第１段階に設定される。ここで、姿勢算出処理における処理段階は、初期中心位置を設定するまでの第１段階と、初期中心地位が設定された第２段階とに分けられる。第１段階は、検出磁気ベクトルに基づく姿勢算出が不可能な段階である。第２段階は、検出磁気ベクトルに基づく姿勢算出が可能な段階である。
【０１５３】
また、上記ステップＳ１４において、ＣＰＵ８は、現時点における上記他の方法を用いて算出された姿勢（第１姿勢データ１６）を、基準姿勢としてメモリ９に記憶する。この基準姿勢は、後述する補正処理（ステップＳ２５）において、上記他の方法を用いて算出された姿勢を検出磁気ベクトルで補正する場合に用いられる。
【０１５４】
以上のステップＳ１４の後、ＣＰＵ８は検出磁気ベクトルに基づく姿勢算出処理を終了する。この後、次回以降のステップＳ１〜Ｓ５の処理ループにおけるステップＳ３の処理においては、ステップＳ１５以降の処理が実行されることとなる。
【０１５５】
ステップＳ１５において、ＣＰＵ８は検出磁気ベクトルを取得する。すなわち、ＣＰＵ８は、メモリ９の操作データ格納領域に記憶されている検出磁気データを読み出す。なお、他の実施形態においては、ＣＰＵ８は、ステップＳ１５の時点で入力装置２から操作データ（検出磁気データ）を取得してもよい。
【０１５６】
ステップＳ１６において、ＣＰＵ８は方向ベクトルを算出する。方向ベクトルは、基準位置（中心位置）と、新たに取得された検出磁気ベクトルとに基づいて算出される。例えば、方向ベクトルは、新たに取得された検出磁気ベクトルから、当該検出磁気ベクトルの始点（原点）から基準位置へのベクトルを減算することで算出される。具体的な処理としては、ＣＰＵ８は、中心位置データ２０をメモリ９から読み出し、ステップＳ１５で取得された検出磁気ベクトルと、当該中心位置データ２０とに基づいて方向ベクトルを算出する。ＣＰＵ８は、算出された方向ベクトルを表すデータを方向ベクトルデータ２２としてメモリ９に記憶する。
【０１５７】
ステップＳ１７において、ＣＰＵ８は、新たに取得された検出磁気ベクトルをバッファに記憶する。すなわち、ＣＰＵ８は、方向ベクトルデータ２２と分類ベクトルとをメモリ９から読み出し、方向ベクトルと分類ベクトルとに基づいて、方向ベクトルに最も方向が近い分類ベクトルを選出する。そして、バッファにおける各領域のうち、選出された分類ベクトルに対応する領域に上記検出磁気ベクトル（ステップＳ１５で読み出された検出磁気データ）を記憶する。なお、分類ベクトルの選出は、例えば、上述の“（３−５：検出磁気ベクトルをバッファに記憶する方法）”で説明した方法で行われる。
【０１５８】
ステップＳ１８において、ＣＰＵ８は、バッファに記憶された複数の検出磁気ベクトルに基づいて平均半径を算出する。すなわち、ＣＰＵ８は、バッファ領域２７に記憶される検出磁気データと、中心位置データ２０とをメモリ９から読み出し、各検出磁気ベクトルと中心位置（基準位置）に基づいて平均半径を算出する。なお、平均半径は、中心位置から各検出磁気ベクトルの終点までの各距離（各半径）の平均として算出することができる。ＣＰＵ８は、算出された平均半径を表すデータを平均半径データ１９としてメモリ９に記憶する。なお、本実施形態においては、後述するステップＳ３２の処理において各半径を用いるので、ＣＰＵ８は、当該各半径を表すデータをメモリ９に記憶しておく。
【０１５９】
ステップＳ１９において、ＣＰＵ８は、中心位置（基準位置）を更新する。中心位置（基準位置）の更新は、中心位置（基準位置）の算出に用いられた各検出磁気ベクトルと、更新前の中心位置（基準位置）と、平均半径とに基づいて行われる。なお、中心位置（基準位置）の具体的な更新方法としては、例えば、上述の“（３−３：第２処理）”で説明した方法（図５参照）が用いられる。具体的な処理としては、ＣＰＵ８は、バッファ領域２７に記憶される検出磁気データと、中心位置データ２０と、平均半径データ１９とをメモリ９から読み出し、これらのデータに基づいて、更新後の中心位置を算出する。ＣＰＵ８は、算出した中心位置を表すデータを、新たな中心位置データ２０としてメモリ９に記憶する。なお、本実施形態においては、後述するステップＳ３２の処理において更新前の中心位置が用いられるので、ＣＰＵ８は、更新前の中心位置を表すデータをメモリ９に記憶しておく。
【０１６０】
なお、情報処理装置３は、上記のステップＳ１８の処理とステップＳ１９の処理とを並行して実行してもよい。例えば、ＣＰＵ８は、まず中心位置データ２０および平均半径データ１９を読み出す。次に、ＣＰＵ８は、バッファ領域２７から１つの検出磁気ベクトルを読み出す処理、当該検出磁気ベクトルに対応する半径を累積加算する処理、および、当該検出磁気ベクトルに対応する半径の方向に沿って中心位置を移動する処理（図５参照）からなる一連の処理を実行する。ＣＰＵ８は、上記一連の処理を、バッファ領域２７に記憶される検出磁気ベクトル毎に（検出磁気ベクトルを読み出す度に）実行する。最後に、ＣＰＵ８は、累積加算された半径の値を用いて平均半径を算出する。このとき、算出された平均半径は次回の処理ループで用いられることとなる。なお、他の実施形態においては、ＣＰＵ８は、中心位置が移動される度に平均半径を算出するようにしてもよい。ＣＰＵ８は、以上の処理によってステップＳ１８およびＳ１９の処理を実行してもよい。
【０１６１】
ステップＳ２０において、ＣＰＵ８は、処理段階は第１段階であるか否かを判定する。後述するステップＳ２４において処理段階が第２段階に設定される前においては、処理段階は第１段階であると判定される。ステップＳ２０の判定結果が肯定である場合、ステップＳ２１の処理が実行される。一方、ステップＳ２０の判定結果が否定である場合、後述するステップＳ２５の処理が実行される。
【０１６２】
ステップＳ２１において、ＣＰＵ８は、記録範囲を算出する。記録範囲はどのように算出されてもよいが、例えば直方体の記録範囲を設定する場合には、現時点の記録範囲（記録範囲データ２１）と、新たに取得された検出磁気ベクトル（ステップＳ１５で取得された検出磁気ベクトル）とに基づいて算出することができる。すなわち、ＣＰＵ８は、新たに取得された検出磁気ベクトルの終点が現時点の記録範囲の外側である場合、当該終点を含むように記録範囲の１つの面を更新する。また、当該終点が現時点の記録範囲の内側である場合、記録範囲を更新しない。具体的な処理としては、ＣＰＵ８は、記録範囲データ２１をメモリ９から読み出し、ステップＳ１５で取得された検出磁気データと記録範囲データ２１とに基づいて記録範囲を算出する。そして、算出された記録範囲を表すデータを新たな記録範囲データ２１としてメモリ９に記憶する。
【０１６３】
ステップＳ２２において、ＣＰＵ８は、記録範囲が所定の基準より大きいか否かを判定する。この判定は、例えば、記録範囲である直方体のいずれか１辺が、所定の閾値（所定長さを表す）より長いか否かによって行われる。具体的な処理としては、ＣＰＵ８は、記録範囲データ２１と上記閾値を表すデータとをメモリ９から読み出し、上記の判定を行う。ステップＳ２２の判定結果が肯定である場合、ステップＳ２３の処理が実行される。一方、ステップＳ２２の判定結果が否定である場合、ＣＰＵ８は検出磁気ベクトルに基づく姿勢算出処理を終了する。この場合、次の処理ループにおいてはステップＳ１１，Ｓ１２，およびＳ１５〜Ｓ２２の処理が実行される。そして、ステップＳ２２の判定結果が肯定となるまで、ステップＳ３の姿勢算出処理においてはステップＳ１１，Ｓ１２，およびＳ１５〜Ｓ２２の処理が実行される。
【０１６４】
ステップＳ２３において、ＣＰＵ８は、初期中心位置を算出する。初期中心位置は、例えば基準磁気ベクトルおよび記録範囲に基づいて算出される。初期中心位置の具体的な算出方法としては、例えば、上述の“（３−２：第１処理）”で説明した方法（図３参照）が用いられる。具体的な処理としては、ＣＰＵ８は、基準磁気データ１８と記録範囲データ２１とをメモリ９から読み出し、これらのデータに基づいて初期中心位置を算出する。算出された初期中心位置を表すデータは、新たな中心位置データ２０としてメモリ９に記憶される。これによって、中心位置データ２０は中心位置（および基準位置）を表すものとなる。
【０１６５】
ステップＳ２４において、ＣＰＵ８は、処理段階を第２段階に設定する。ステップＳ２４の後、ＣＰＵ８は検出磁気ベクトルに基づく姿勢算出処理を終了する。ステップＳ２４の処理によって、次の処理ループにおけるステップＳ３の処理においては、ステップＳ２０の次にステップＳ２５の処理が実行されることとなる。
【０１６６】
ステップＳ２５において、ＣＰＵ８は、補正処理を実行する。補正処理は、上述の他の方法で算出された入力装置２の姿勢を、方向ベクトルを用いて補正する処理である。以下、図１６を参照して、補正処理の詳細を説明する。
【０１６７】
図１６は、補正処理の詳細な流れの一例を示すフローチャートである。補正処理においては、まずステップＳ３１において、ＣＰＵ８は、入力装置２の姿勢が所定の基準よりも変化したか否かを判定する。ステップＳ３１の判定は、例えば、入力装置２の姿勢の変化量が所定量以上であるか否かによって行われる。本実施形態においては、上記の判定は、上記のバッファを用いて行われる。すなわち、ＣＰＵ８は、新たに取得された検出磁気ベクトルが、その前に取得された検出磁気ベクトルとは別のカテゴリに分類されたか否かを判定する。なお、上記の判定はどのように行われてもよい。例えば他の実施形態においては、上記他の方法で算出される姿勢を用いて上記の判定が行われてもよい。ステップＳ３１の判定結果が肯定である場合、ステップＳ３２の処理が実行される。一方、ステップＳ３１の判定結果が否定である場合、ステップＳ３２の処理がスキップされてステップＳ３３の処理が実行される。
【０１６８】
ステップＳ３２において、ＣＰＵ８は、信頼度を算出する。本実施形態においては、信頼度は、中心位置の更新前後の移動量と、各検出磁気ベクトルに対応する各半径の長さのばらつきとに基づいて算出される。信頼度の具体的な算出方法としては、例えば、上述の“（姿勢を算出するか否かの判定）”で説明した方法が用いられる。具体的な処理としては、ＣＰＵ８は、上記ステップＳ１９で記憶される更新前後の中心位置を表すデータと、上記ステップＳ１８で記憶される各半径を表すデータとをメモリ９から読み出し、これらのデータを用いて信頼度を算出する。算出された信頼度を表すデータは、信頼度データ２３としてメモリ９に記憶される。
【０１６９】
ステップＳ３３において、ＣＰＵ８は、信頼度は所定の基準よりも大きいか否かを判定する。この判定は、例えば、信頼度が所定の閾値より大きいか否かによって行われる。具体的な処理としては、ＣＰＵ８は、信頼度データ２３と上記閾値を表すデータとをメモリ９から読み出し、上記の判定を行う。ステップＳ３３の判定結果が肯定である場合、ステップＳ３４の処理が実行される。一方、ステップＳ３３の判定結果が否定である場合、ＣＰＵ８は補正処理を終了する。
【０１７０】
ステップＳ３４において、ＣＰＵ８は第１補正率を算出する。本実施形態においては、第１補正率は、中心位置から新たな検出磁気ベクトルの終点位置までの半径と、基準磁気ベクトルに対応する半径（上記平均半径でもよい）との差に基づいて算出される。第１補正率の具体的な算出方法としては、例えば、上述の“（第１補正率）”で説明した方法が用いられる。具体的な処理としては、ＣＰＵ８は、基準磁気データ１８と中心位置データ２０とを読み出し、読み出したデータとステップＳ１５で取得された検出磁気データ１４とを用いて第１補正率を算出する。ＣＰＵ８は、算出された第１補正率を表すデータを第１補正率データ２４としてメモリ９に記憶する。
【０１７１】
ステップＳ３５において、ＣＰＵ８は第２補正率を算出する。本実施形態においては、第２補正率は、新たに取得された検出磁気ベクトルに対応する方向ベクトルの方向と、基準磁気ベクトルに対応する方向ベクトルの方向との差に基づいて設定される。第２補正率の具体的な算出方法としては、例えば、上述の“（第２補正率）”で説明した方法が用いられる。具体的な処理としては、ＣＰＵ８は、方向ベクトルデータ２２と、基準磁気データ１８と、中心位置データ２０とを読み出し、読み出したデータを用いて第２補正率を算出する。ＣＰＵ８は、算出された第２補正率を表すデータを第２補正率データ２５としてメモリ９に記憶する。
【０１７２】
ステップＳ３６において、ＣＰＵ８は補正度の目標値を算出する。本実施形態において、補正度の目標値は、上記第１補正率および第２補正率に基づいて算出される。具体的には、補正度の目標値は、第１補正率と第２補正率とを乗算し、所定の係数をさらに乗算することによって算出される。具体的な処理としては、ＣＰＵ８は、第１補正率データ２４と、第２補正率データ２５と、上記所定の係数を表すデータとをメモリ９から読み出し、読み出したデータを用いて補正度の目標値を算出する。ＣＰＵ８は、算出された目標値を表すデータをメモリ９に記憶する。
【０１７３】
ステップＳ３７において、ＣＰＵ８は補正度を算出する。本実施形態においては、補正度は、上記補正度の目標値に基づいて算出される。具体的には、ＣＰＵ８は、現在の補正度より目標値が大きい場合（補正度を大きくする場合）、現在の補正度を上記目標値に所定の割合で近づけることによって新たな補正度を算出する。これによって、補正度の急激な増加を抑えることができ、算出される入力装置２の姿勢が補正度の急激な増加によって急激に変化することを抑えることができる。一方、現在の補正度より目標値が小さい場合（補正度を小さくする場合）、ＣＰＵ８は上記目標値を新たな補正度とする。なお、補正度が小さくなる場合には、補正度が急激に変化しても入力装置２の姿勢は急激に変化しないので、補正度の急激な変化を抑えなくてもよい。具体的な処理としては、ＣＰＵ８は、補正度データ２６と上記目標値を表すデータとをメモリ９から読み出し、読み出したデータを用いて新たな補正度を算出する。ＣＰＵ８は、算出された補正度を表すデータを補正度データ２６としてメモリ９に記憶する。
【０１７４】
ステップＳ３８において、ＣＰＵ８は、方向ベクトルを用いて姿勢を補正する。すなわち、他の方法で算出される姿勢が、最新の検出磁気ベクトルに対応する方向ベクトルに基づいて補正される。ステップＳ３８における補正方法としては、例えば、上述の“（他の方法による姿勢の補正）”および“（補正度の算出）”で説明した方法が用いられる。具体的な処理としては、ＣＰＵ８は、第１姿勢データ１６と、方向ベクトルデータ２２と、補正度データ２６とをメモリ９から読み出し、読み出したデータを用いて補正後の姿勢を算出する。ＣＰＵ８は、算出された姿勢を表すデータを第２姿勢データ１７としてメモリ９に記憶する。これによって、検出磁気ベクトルに基づく入力装置２の姿勢が算出されたこととなる。
【０１７５】
ステップＳ３８の後、ＣＰＵ８は、図１６に示す補正処理（ステップＳ２５）を終了する。また、ステップＳ２５の後、ＣＰＵ８は、図１５に示す、検出磁気ベクトルに基づく姿勢算出処理（ステップＳ３）を終了する。
【０１７６】
図１４に示すステップＳ４において、ＣＰＵ８は、入力装置２の姿勢に基づく情報処理を実行する。この情報処理は、ステップＳ３で算出された姿勢を入力として実行される。例えば、ＣＰＵ８は、上記姿勢に応じた情報処理の結果得られる画像を表示装置に表示させる。
【０１７７】
ステップＳ５において、ＣＰＵ８は、情報処理を終了するか否かを判定する。この判定はどのように行われてもよく、例えば、ユーザによって所定の終了指示が行われたか否かによって行われる。ステップＳ５の判定結果が否定の場合、ステップＳ１の処理が再度実行される。一方、ステップＳ５の判定結果が肯定の場合、ＣＰＵ８は図１４に示す情報処理を終了する。以降、ステップＳ１〜Ｓ５の一連の処理は、ステップＳ５で情報処理を終了すると判定されるまで繰り返し実行される。以上によって、図１４に示す情報処理の説明を終了する。
【０１７８】
［５．他の実施形態］
上記実施形態においては、入力装置の姿勢に応じて変化する値を検出するセンサとして磁気センサを用いる場合を例として説明した。ここで、他の実施形態においては、入力装置の姿勢に応じて変化する値を検出するセンサは、他のセンサであってもよい。本実施形態における姿勢算出処理は、入力装置の姿勢に応じて変化する値を検出するセンサから取得される検出ベクトルが、入力装置の姿勢に依存しない成分と、入力装置の姿勢に依存する成分とを含む場合に有効である。すなわち、情報処理装置３は、上記検出ベクトルを取得し、検出ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定し、中心位置から検出ベクトルの終点位置への方向を表す方向ベクトルに基づいて入力装置の姿勢を算出するものであってもよい。
【産業上の利用可能性】
【０１７９】
以上のように、本発明は、入力装置の姿勢を精度良く算出すること等を目的として、例えばゲーム操作のために入力装置を用いるゲームシステムやゲームプログラム等として利用することができる。
【符号の説明】
【０１８０】
１  情報処理システム
２  入力装置
３  情報処理装置
４  磁気センサ
５  ジャイロセンサ
６  加速度センサ
７  操作部
８  ＣＰＵ
９  メモリ
１２  情報処理プログラム
２７  バッファ領域
【図１】
2014021837.tif 000003
【図２】
2014021837.tif 000004
【図３】
2014021837.tif 000005
【図４】
2014021837.tif 000006
【図５】
2014021837.tif 000007
【図６】
2014021837.tif 000008
【図７】
2014021837.tif 000009
【図８】
2014021837.tif 000010
【図９】
2014021837.tif 000011
【図１０】
2014021837.tif 000012
【図１１】
2014021837.tif 000013
【図１２】
2014021837.tif 000014
【図１３】
2014021837.tif 000015
【図１４】
2014021837.tif 000016
【図１５】
2014021837.tif 000017
【図１６】
2014021837.tif 000018