(58)【調査した分野】(Int.Cl.,DB名)
前記中心推定手段は、新たな検出磁気ベクトルの終点位置と、中心位置の推定に用いられた各検出磁気ベクトルの終点位置との関係とは独立して、当該新たな検出磁気ベクトルを用いて前記中心位置を更新する、請求項1または請求項2に記載の情報処理プログラム。
前記姿勢算出手段は、前記検出磁気ベクトルを用いる方法とは別の方法によって算出された前記入力装置の姿勢を前記方向ベクトルに基づいて補正する、請求項1から請求項3のいずれか1項に記載の情報処理プログラム。
前記情報処理プログラムは、前記中心位置から新たな検出磁気ベクトルの終点位置までの長さと、当該中心位置から当該中心位置の推定に用いられた検出磁気ベクトルの各終点位置までの長さにより決められる長さとの差に応じて補正度を設定する補正度設定手段として前記コンピュータをさらに機能させ、
前記姿勢算出手段は、前記方向ベクトルを用いた補正の度合いを前記補正度に応じて変化させる、請求項4に記載の情報処理プログラム。
前記中心推定手段は、中心位置から検出磁気ベクトルの終点位置までの長さに関する条件を用いて前記中心位置を算出する、請求項1から請求項5のいずれか1項に記載の情報処理プログラム。
前記中心推定手段は、前記検出磁気ベクトルが新たに取得された場合、中心位置から当該中心位置の推定に用いられる各検出磁気ベクトルの終点までの各長さがそれぞれ当該各長さの平均に近づくように、中心位置を更新する、請求項6に記載の情報処理プログラム。
前記姿勢算出手段は、取得された各前記検出磁気ベクトルの終点位置によって決められる領域が所定の基準よりも大きくなったことを少なくとも条件として、前記方向ベクトルを用いた姿勢の算出を行う、請求項8に記載の情報処理プログラム。
前記姿勢算出手段は、更新前後における前記中心位置の変化量が大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして前記姿勢を算出する、請求項8または請求項9に記載の情報処理プログラム。
前記姿勢算出手段は、現在の中心位置から、当該中心位置の推定に用いられた各検出磁気ベクトルの終点位置までの各長さのばらつきが大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして前記姿勢を算出する、請求項8から請求項10のいずれか1項に記載の情報処理プログラム。
【発明を実施するための形態】
【0038】
[1.情報処理システムの構成]
以下、本実施形態の一例に係る情報処理システム、情報処理装置、情報処理プログラム、および姿勢算出方法について説明する。
図1は、本実施形態に係る情報処理システムの一例を示すブロック図である。
図1において、情報処理システム1は、入力装置2および情報処理装置3を備える。本実施形態における情報処理システム1は、入力装置2の姿勢に応じた値を検出するセンサ(磁気センサ等)を用いて入力装置2の姿勢を算出するものである。
【0039】
情報処理システム1は入力装置2を含む。入力装置2は、可搬型であり、換言すれば、ユーザが把持可能な装置である。入力装置2は情報処理装置3と通信可能である。入力装置2は、入力装置2に対する操作を表す操作データを情報処理装置3へ送信する。入力装置2と情報処理装置3との間の通信は、無線送信であっても有線通信であってもよい。
【0040】
入力装置2は、磁気センサ4を有する。磁気センサ4は、磁界の大きさおよび方向を検知する。ここでは、磁気センサ4が検出する磁界の大きさおよび方向を表すベクトルを、検出磁気ベクトルと呼ぶ。入力装置2は、検出磁気ベクトルを表すデータを操作データとして情報処理装置3へ送信する。磁気センサ4は、本実施形態においては3次元の値で磁界の大きさおよび方向を検出するが、2次元以上の値で磁界の大きさおよび方向を検出してもよい。本明細書においては、磁気センサ4の検出結果に基づいて姿勢を算出する方法について詳細に説明する。
【0041】
入力装置2はジャイロセンサ5を備える。ジャイロセンサ5は、入力装置2の所定軸方向(本実施形態では3軸方向とするが、1軸以上でよい)を軸とした回転に関する角速度を検出する。また、入力装置2は加速度センサ6を有する。加速度センサ6は、入力装置2の所定軸方向(本実施形態では3軸方向とするが、1軸以上でよい)に関する加速度を検出する。入力装置2は、ジャイロセンサ5および加速度センサ6によって検出されたデータを操作データとして情報処理装置3へ送信する。ジャイロセンサ5および加速度センサ6は、入力装置2の姿勢を算出するために用いられる。つまり、本実施形態においては、情報処理システム1は、磁気センサ4を用いる方法以外の他の方法で入力装置2の姿勢を算出することが可能である。なお、他の実施形態においては、情報処理システム1は、上記他の方法で姿勢を算出する手段(ジャイロセンサ5および加速度センサ6)を備えていなくてもよい。また、上記他の方法はどのような方法であってもよく、例えば、情報処理システム1は、入力装置2を撮影可能なカメラ、あるいは、入力装置2に設けられるカメラによって撮像される画像に基づいて入力装置2の姿勢を算出してもよい。
【0042】
入力装置2は操作部7を有する。操作部7は、ボタン(キー)、スティック、およびタッチパネル等の任意の操作装置である。入力装置2は、操作部7に対する操作を表すデータを操作データとして情報処理装置3へ送信する。
【0043】
なお、入力装置2は、入力装置2の姿勢に応じた値を出力するセンサを備える任意の構成でよい。例えば他の実施形態においては、
図1に示す構成のいくつかを備えていない構成であってもよいし、上記以外の他の構成を備えていてもよい。
【0044】
情報処理システム1は情報処理装置3を含む。情報処理装置3は、入力装置2から送信される操作データ(検出磁気ベクトルのデータ)を受信し、当該データに基づいて入力装置2の姿勢を算出する。また、本実施形態において、情報処理装置3は、算出された姿勢を入力として所定の情報処理を実行する。この所定の情報処理はどのような処理であってもよく、例えばゲーム処理(仮想空間に配置されるゲームオブジェクトの動作を姿勢に応じて制御する処理)であってもよい。また、情報処理装置3は、上記情報処理によって画像を生成し、生成された画像を表示装置に表示させてもよい。表示装置は、入力装置2および情報処理装置3とは別に設けられてもよいし、情報処理装置3あるいは入力装置2が有する表示部であってもよい。
【0045】
本実施形態においては、情報処理装置3は、CPU(制御部)8およびメモリ9を有し、CPU8がメモリ9を用いて所定の情報処理プログラムを実行することによって、情報処理装置3における各種機能(
図14〜
図16に示す情報処理)が実現される。なお、情報処理装置3は、入力装置2の姿勢を算出する処理を実行することができればどのような構成であってもよい。
【0046】
なお、他の実施形態においては、情報処理システム1は1つの装置によって構成されてもよい。すなわち、入力装置2と情報処理装置3とは一体の装置として構成されてもよい。例えば、情報処理システム1は、スマートフォンや携帯型ゲーム装置等の携帯端末であってもよい。
【0047】
[2.姿勢算出の方法]
以下、磁気センサ4による検出結果に基づいて入力装置2の姿勢を算出する方法について説明する。本実施形態において、情報処理システム1(情報処理装置3)は、磁気センサ4によって検出される検出磁気ベクトルに基づいて姿勢を算出する。ここで、磁気センサ4が検出する磁界は、磁界の方向が入力装置2の姿勢に依存しない成分と、磁界の方向が入力装置2の姿勢に依存する成分とに分けられる。磁界の方向が入力装置2の姿勢に依存しない成分とは、例えば、入力装置2自身によって発生する磁界(入力装置2が帯びている磁気)である。この成分に関しては、入力装置2の姿勢が変化しても、磁気センサ4で検出される方向が変化しない。
【0048】
一方、磁界の方向が入力装置2の姿勢に依存する成分とは、例えば地磁気等、入力装置2の周囲の空間に生じている磁界による成分である。この成分に関しては、入力装置2の姿勢が変化することに応じて、磁気センサ4で検出される方向が変化する。したがって、情報処理装置3は、検出磁気ベクトルから、入力装置2の姿勢に依存する成分を算出(推定)することによって、入力装置2の姿勢を算出する。以下では、検出磁気ベクトルから算出される、入力装置2の姿勢に依存する成分を表すベクトル、すなわち、姿勢に応じた方向を表すベクトルを「方向ベクトル」と呼ぶ。
【0049】
図2は、検出磁気ベクトルおよび方向ベクトルの一例を示す図である。なお、
図2においては、検出磁気ベクトルVdの始点を原点とするxyz座標系において各ベクトルを表している。上記検出磁気ベクトルVdの大きさおよび方向は、入力装置2の姿勢の変換に応じて変化する。入力装置2が全方向を向くように姿勢を変化させた場合、検出磁気ベクトルVdの終点(先端)は、
図2に示すように球状体の面を形成する。この球状体は、理想的には球体であるが、厳密には球体とならず、やや歪む(楕円球状になる)場合もある(つまり、方向ベクトルの大きさは入力装置2の姿勢によって若干変化する)。以下では、上記の球状体を「磁気球体」と呼ぶ。
【0050】
ここで、検出磁気ベクトルVdは、ベクトルVoとベクトルVaとに分けることができる。ベクトルVoは、原点(検出磁気ベクトルVdの始点)を始点とし、磁気球体の中心位置Pを終点とするベクトルであり、入力装置2の姿勢に依存しない成分を表す。一方、ベクトルVaは、中心位置Pを始点とし、検出磁気ベクトルVdの終点を終点とするベクトルである。ベクトルVaは、入力装置2の姿勢に依存する成分を表すベクトル、すなわち、方向ベクトルである。
【0051】
以上より、磁気球体の中心位置Pを推定し、それによって方向ベクトルVaを算出することで、入力装置2の姿勢を算出することができる。すなわち、情報処理システム1(情報処理装置3)は、磁気センサ4が検出する検出磁気ベクトルVdを取得する。そして、複数の検出磁気ベクトルVdの各終点位置から推定される曲面を有する球状体(磁気球体)の中心位置Pを推定する。さらに、中心位置Pから検出磁気ベクトルVdの終点位置への方向を表す方向ベクトルVaに基づいて入力装置2の姿勢を算出する。以下、入力装置2の姿勢を算出するための姿勢算出処理についてより詳細に説明する。
【0052】
[3.姿勢算出処理]
(3−1:姿勢算出処理の流れ)
本実施形態では、姿勢算出処理において、情報処理装置3は以下の第1〜第3処理を実行する。
・第1処理:検出磁気ベクトルを繰り返し取得し、取得された複数の検出磁気ベクトルが所定の条件を満たす場合に磁気球体の中心位置(初期中心位置)を推定する処理
・第2処理:初期中心位置が推定された後、取得された検出磁気ベクトルに基づいて中心位置を更新する処理
・第3処理:初期中心位置が算出された後、中心位置に基づいて決定される方向ベクトルを用いて入力装置2の姿勢を算出する処理
【0053】
姿勢算出処理は、どのようなタイミングで開始されてもよいが、本実施形態においては、ユーザが所定の操作を行ったことに応じて開始される。姿勢算出処理が開始されると、まず上記第1処理が実行される。第1処理においては、情報処理装置3は、入力装置2から検出磁気ベクトルを繰り返し取得する。また、情報処理装置3は、取得された複数の検出磁気ベクトルが所定の条件を満たした場合、当該複数の検出磁気ベクトルに基づいて初期中心位置を推定する。なお、初期中心位置とは、姿勢算出処理において最初に推定(算出)される中心位置である。
【0054】
上記第1処理によって中心位置が算出されると、上記第2処理および第3処理が実行される。第2処理においては、情報処理装置3は、検出磁気ベクトルが取得される度に、新たに取得された検出磁気ベクトルを考慮して中心位置を更新する。これによって、中心位置をより正確な位置に修正することができ、入力装置2の姿勢を精度良く算出することができる。
【0055】
また、第3処理においては、中心位置を用いることで検出磁気ベクトルから方向ベクトルを算出することが可能となる。本実施形態においては、情報処理装置3は、所定の条件が満たされた場合、新たに取得された検出磁気ベクトルに対応する方向ベクトルを算出し、算出された方向ベクトルを用いて入力装置2の姿勢を算出する。
【0056】
なお、上記第2処理と第3処理は並行して実行される。つまり、中心位置が算出された後は、第2処理と第3処理とが繰り返し実行される。したがって、中心位置が算出された後は、検出磁気ベクトルの取得処理、中心位置の更新処理、および、方向ベクトルに基づく姿勢の算出処理が繰り返し実行される。
【0057】
以下、上記第1〜第3処理を具体的に説明する。なお、以下の説明で用いる図面では、図面をわかりやすくする目的で、2次元平面を用いて説明を行う。ただし、本実施形態においては、実際には3次元空間における3次元のベクトルおよび位置等を用いた計算が行われる。なお、他の実施形態においては、2次元平面における入力装置2の姿勢を算出するべく、2次元平面における2次元のベクトルおよび位置等を用いて第1〜第3処理が実行されてもよい。
【0058】
(3−2:第1処理)
第1処理においては、情報処理装置3は、検出磁気ベクトルを繰り返し取得する。取得された検出磁気ベクトルは、情報処理装置3がアクセス可能な記憶部に設けられるバッファに記憶される。詳細は後述するが、本実施形態においては、バッファに記憶される検出磁気ベクトルの最大数には制限があり、所定の条件を満たす検出磁気ベクトルがバッファに残され、不要と判断された検出磁気ベクトルはバッファから削除される。そして、バッファに記憶されている検出磁気ベクトルが中心位置の推定(算出)に用いられる。なお、以下においては、情報処理装置3によって推定(算出)される中心位置と区別する意図で、磁気球体の正確な中心位置を「実際の中心位置」と記載する。
【0059】
(初期中心位置を算出するか否かの判定)
第1処理において、情報処理装置3は、検出磁気ベクトルが取得される度に、初期中心位置を算出するか否かを判定する。すなわち、情報処理装置3は、検出磁気ベクトルを取得する度に、それまでに取得された検出磁気ベクトルが所定の条件を満たすか否かを判定する。そして、所定の条件が満たされた場合、最初の中心位置(初期中心位置)が推定(算出)される。上記所定の条件は、中心位置を推定するのに十分な検出磁気ベクトルが取得されたか否かを判定するための条件である。本実施形態によれば、所定の条件を満たしたことに応じて中心位置が推定されるので、姿勢の算出に用いることができないほど不正確な中心位置が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【0060】
ただし、本実施形態における姿勢算出処理は、中心位置を推定するために非常に多くの検出磁気ベクトルを必要とするわけではない。詳細は後述するが、本実施形態における姿勢算出処理においては、上記磁気球体の球面の一部分に相当する検出磁気ベクトルが取得されれば中心位置を推定することが可能である。つまり、本実施形態においては、中心位置を推定するために入力装置2をいろいろな方向に向ける必要は無く、入力装置2がほぼ一方向を向いた状態であっても中心位置を推定することが可能である。なお、上記中心位置を推定するために、例えば8の字に入力装置2を動かす操作をユーザに行わせ、いろいろな方向を向く検出磁気ベクトルを取得する方法が考えられる。本実施形態においては、そのような操作をユーザに行わせることなく(より精度良く中心位置を推定する等の目的でそのような操作を行わせてもよい)中心位置を推定することが可能である。
【0061】
本実施形態においては、情報処理装置3は、複数の検出磁気ベクトルの各終点位置を含むように決定される領域が所定の大きさとなったことを条件として、初期中心位置を算出する。具体的には、情報処理装置3は、検出磁気ベクトルに基づいて記録範囲を設定し、設定された記録範囲が所定の大きさとなったか否かを判定する。以下、
図3を参照して初期中心位置を算出するか否かの判定について詳細に説明する。
【0062】
図3は、設定される初期中心位置の一例を示す図である。情報処理装置3は、検出磁気ベクトルが取得される度に、記録範囲を設定する(
図3参照)。記録範囲は、バッファに記憶される各検出磁気ベクトルの各終点を含むように設定される。本実施形態においては、記録範囲は、上記各終点を含み、大きさが最小となる直方体として設定される。より具体的には、記録範囲は、計算を容易にするべく、検出磁気ベクトルを表すための3次元座標系(xyz座標系)におけるいずれか2軸を含む平面(xy平面、yz平面、およびxz平面)に平行な面で構成される直方体として設定される。なお、記録範囲は、検出磁気ベクトル(検出磁気ベクトルの終点位置)に基づいて決定される任意の領域であってもよい。例えば、記録範囲の形状は、直方体に限らず、球体等、どのような形状であってもよい。
【0063】
記録範囲が設定されると、情報処理装置3は、記録範囲が所定の大きさよりも大きくなったか否かの判定処理を実行する。具体的には、情報処理装置3は、記録範囲である直方体のいずれか1辺が、所定長さより長くなったか否かを判定する。なお、詳細は後述するが、この所定長さは、姿勢が算出可能であると想定される最小の磁気球体の直径よりも短い長さであり、例えば
図12に示す多面体の一辺の半分の長さ程度(直径よりも十分に短い程度)に設定されてもよい。このように、本実施形態においては、入力装置2の姿勢を大きく変化させなくても、中心位置の算出を開始することができる。
【0064】
上記判定処理において記録範囲が所定の大きさよりも大きくなったと判定された場合、初期中心位置が算出される。なお、上記判定処理は、記録範囲の大きさを判定する任意の判定方法で行われてもよい。例えば、情報処理装置3は、記録範囲の体積が所定の大きさよりも大きくなったか否かを判定してもよい。
【0065】
以上のように、本実施形態においては、中心位置の算出に用いられる複数の検出磁気ベクトルの各終点位置を含むように決定される領域(記録範囲)が所定の大きさよりも大きくなったことを条件として、初期中心位置が算出される。なお、他の実施形態においては、情報処理装置3は、上記複数の検出磁気ベクトルの各方向が所定の範囲よりも大きくなったことを条件として、初期中心位置を算出してもよい。例えば、上記複数の検出磁気ベクトルの各方向を含むように決定される立体角が所定の大きさよりも大きくなったことを条件として、初期中心位置が算出されてもよい。
【0066】
(初期中心位置の算出方法)
初期中心位置は、バッファに記憶されている複数の検出磁気ベクトルに基づいて算出される。本実施形態においては、初期中心位置は、上記複数の検出磁気ベクトルの各終点位置を含むように決定される領域(ここでは上記記録範囲)の内部に設定される。換言すれば、初期中心位置は、上記記録範囲である直方体の内部に設定される。これによれば、初期中心位置は、上記複数の検出磁気ベクトルの各終点の周囲に設定され、後述する中心位置の更新処理(第2処理)によって、磁気球体の中心へ次第に近づけることができる。つまり、初期中心位置が(更新処理によって磁気球体の中心へ近づけることが困難な程度に)大きく外れた位置に設定される可能性を低減することができ、初期中心位置を適切な位置に設定することができる。
【0067】
図3に示されるように、初期中心位置p1は、バッファに記憶されている各検出磁気ベクトル(Vd1〜Vd3)のうちの基準磁気ベクトルの終点s1から、記録範囲の中心cの方向へ伸びる直線L上であって、当該終点s1から所定距離だけ離れた位置p1に設定される。上記基準磁気ベクトルは、どのように決定されてもよいが、本実施形態においては、最初に取得された検出磁気ベクトルVd1とする。なお、他の実施形態においては、上記各検出磁気ベクトルのうち、原点から記録範囲の中心cへの方向に最も近い方向を向く検出磁気ベクトルを基準磁気ベクトルとしてもよい。
【0068】
上記のように、基準磁気ベクトルの終点の位置s1から記録範囲の中心cの方向へ伸びる直線L上に初期中心位置を設定することによって、初期中心位置p1は、上記各検出磁気ベクトルの各終点s1〜s3から推定される曲面(
図3では、弧s2s3)に関して凹側の位置に設定されることとなる。なお、初期中心位置が仮に上記曲面の凸側の位置に設定されると、後述する中心位置の更新処理(第2処理)によって、中心位置はより凸側へ移動していき、磁気球体の実際の中心位置Pへと正しく収束しない可能性がある。これに対して、初期中心位置を上記曲面の凹側の位置に設定することによって、上記更新処理によって中心位置をより確実に収束させることができる(凸側に誤って収束する可能性を低減することができる)。
【0069】
また、上記所定距離は、どのように決定されてもよいが、本実施形態においては、記録範囲の最長辺の半分の長さに設定される(
図3参照)。これによって、初期中心位置p1を確実に記録範囲内の位置とすることができる。また、上記所定距離を最長辺の半分の長さとすることで、各検出磁気ベクトルの各終点から推定される曲面に関してより凹側となる位置に初期中心位置を設定することができる。これによれば、磁気球体の実際の中心位置Pにより近い(可能性が高い)位置に初期中心位置p1を設定することができるので、中心位置が実際の中心位置Pへ収束しやすくなる。なお、他の実施形態においては、初期中心位置は、上記直線L上の他の位置に設定されてもよく、例えば、上記直線Lと記録範囲の面との交点に設定されてもよい。
【0070】
なお、他の実施形態においては、情報処理装置3は、上記各検出磁気ベクトルの各終点の重心位置に初期中心位置を設定してもよい。また、他の実施形態においては、上記記録範囲の中心の位置に代えて上記重心位置を用いてもよい。これらによっても、各検出磁気ベクトルの各終点位置を含むように決定される領域(記録範囲)の内部に初期中心位置を設定することができ、上記曲面の凹側の位置に初期中心位置を設定することができる。
【0071】
また、他の実施形態においては、情報処理装置3は、上記各検出磁気ベクトルの各終点から等距離となる位置、すなわち、実際の中心位置Pを算出(推定)する方法を採用してもよい。なお、本実施形態によれば、上記の方法よりも容易かつ迅速に初期中心位置を算出することができる。
【0072】
(3−3:第2処理)
上述のようにして初期中心位置が設定された後、情報処理装置3は、中心位置を逐次更新する。すなわち、検出磁気ベクトルが取得される度に、取得された検出磁気ベクトルに基づいて新たな中心位置が算出される。本実施形態においては、情報処理装置3は、中心位置から検出磁気ベクトルの終点位置までの線分(半径)の長さに関する条件を用いて(更新後の)中心位置を算出する。具体的には、情報処理装置3は、検出磁気ベクトルが新たに取得された場合、中心位置から(当該中心位置の推定に用いられる)各検出磁気ベクトルの終点までの各半径の長さがそれぞれ、当該各半径の長さの平均に近づくように、中心位置を更新する。以下、
図4を参照して、中心位置の更新処理の詳細を説明する。
【0073】
図4は、更新処理によって更新される前後の中心位置の一例を示す図である。
図4においては、
図3に示した初期中心位置p1が設定された後、新たな検出磁気ベクトルVd4が取得された場合を示している。この場合、情報処理装置3は、現在の中心位置p1から各検出磁気ベクトル(Vd1〜Vd4)の終点への各線分r1〜r4の長さをそれぞれ算出する。なお、中心位置から検出磁気ベクトルの終点への線分は、磁気球体の半径であるとも言える。そのため本明細書では、上記線分を「半径」と記載することがある。なお、推定された中心位置が実際の中心位置に一致しない場合には、推定された中心位置から複数の検出磁気ベクトルの各終点位置までのそれぞれの「半径」は、同じ長さにならない場合がある点に留意する。また、情報処理装置3は、上記各線分の平均値(平均半径)を算出する。
【0074】
情報処理装置3は、上記各半径r1〜r4の長さが平均半径に近づくように、中心位置p1を更新する。具体的には、情報処理装置3は、半径と平均半径との差の所定割合(例えば差の20%)だけ、半径の長さを変更する処理を、検出磁気ベクトル毎に行う。この処理は、換言すれば、半径の長さが変更されるように、中心位置を当該半径の方向に沿って移動させる処理である。
図5は、
図4に示す領域の一部を拡大した図である。
図4および
図5に示す例においては、半径r1を変更する処理によって、中心位置p1は半径r1に平行な方向へ移動する。なお、この例では平均半径は半径r1よりも大きいので、半径r1が大きくなる方向へ中心位置p1は移動する(
図5に示す矢印参照)。同様に、半径r2を変更する処理によって、中心位置p1は半径r2に平行な方向へ移動し、半径r3を変更する処理によって、中心位置p1が半径r3に平行な方向へ移動し、半径r4を変更する処理によって、中心位置p1が半径r4に平行な方向へ移動する(
図5に示す矢印参照)。上記半径r1〜r4の長さを変更する処理の結果、中心位置p1は中心位置p2へと移動する。
【0075】
上記のように、中心位置の更新処理によって、各半径は平均半径に近づく、すなわち、各半径は均等に近づくように変更される。つまり、中心位置は、磁気球体の実際の中心位置Pへと近づくように更新される(
図5参照)。したがって、更新処理によって、中心位置をより精度良く算出することができ、入力装置2の姿勢をより正確に算出することができるようになる。なお、本実施形態においては、各検出磁気ベクトルの終点の周囲(上記記録範囲内)に初期中心位置が設定される。そのため、本実施形態においては、初期中心位置は、実際の中心位置Pよりも各終点に近い側に設定される(設定される可能性が高い)。したがって、上記更新処理は、各終点から遠ざかる方向へ中心位置を移動する処理と言うことができる。
【0076】
なお、本実施形態においては、情報処理装置3は、1回の更新処理として、検出磁気ベクトルの数に応じた回数だけ中心位置を移動させる処理を実行する。この処理は、各半径が平均半径となるまで中心位置の移動を繰り返す処理ではないので、情報処理装置3は1回の更新処理を迅速に行うことができる。
【0077】
なお、他の実施形態においては、1回の更新処理においては、バッファに記憶される複数の検出磁気ベクトルのうちの一部に関して、中心位置を移動させる処理を実行してもよい。つまり、情報処理装置3は、検出磁気ベクトルが新たに取得された場合、中心位置の推定に用いられる各検出磁気ベクトルのうちのいくつかの検出磁気ベクトルについて、中心位置から当該いくつかの検出磁気ベクトルの終点までの半径の長さがそれぞれ、各半径(中心位置の推定に用いられる各検出磁気ベクトルに対応する各半径)の長さの平均に近づくように、中心位置を更新してもよい。例えば、1回の更新処理においては上記複数の検出磁気ベクトルの半分について中心位置の移動処理が実行され、次の1回の更新処理において残りの半分の検出磁気ベクトルについて中心位置の移動処理が実行される結果、2回の更新処理によって、当該複数の検出磁気ベクトルの全てについて中心位置の移動が行われるようにしてもよい。これによれば、1回の更新処理における情報処理装置3の処理負担を軽減することができる。
【0078】
本実施形態においては、情報処理装置3は、検出磁気ベクトルが新たに取得される度に、新たに取得された検出磁気ベクトルを少なくとも用いて中心位置を更新する。したがって、検出磁気ベクトルが取得される度に、中心位置は実際の中心位置Pへと次第に近づいていく。その結果、ある程度の時間が経過すると、中心位置は実際の中心位置Pの付近の位置となる。
【0079】
なお、本実施形態においては、仮に中心位置が実際の中心位置Pの付近に位置していると推定される場合(例えば、更新処理によって中心がほとんど移動しない場合)であっても、情報処理装置3は、検出磁気ベクトルが新たに取得される度に更新処理を実行する。これによれば、仮に入力装置2の周囲の磁界が何らかの理由で変化し、磁気球体が変化した場合であっても、変化に応じて中心位置が変更されるので、より正確に中心位置を算出することができる。
【0080】
(3−4:第3処理)
上記第1処理によって中心位置が設定された後は、方向ベクトルを算出可能になる。したがって、情報処理装置3は、第3処理において、中心位置から方向ベクトルを算出し、方向ベクトルに基づいて入力装置2の姿勢を算出する。
【0081】
なお、上述のように、情報処理装置3は、取得された各検出磁気ベクトルの終点位置によって決められる領域(記録範囲)が所定の基準よりも大きくなったことを少なくとも条件として、方向ベクトルを用いた姿勢の算出を行う(第3処理)。これによれば、不正確な中心位置が算出され、不正確な中心位置を用いて不正確な姿勢が算出される可能性を低減することができ、姿勢をより精度良く算出することができる。
【0082】
また、上述のように、情報処理装置3は、検出磁気ベクトルが新たに取得される度に、新たに取得された検出磁気ベクトルを少なくとも用いて中心位置を更新する(第2処理)。そして、情報処理装置3は、検出磁気ベクトルが新たに取得される度に、更新された中心位置により決められる方向ベクトルに基づいて入力装置2の姿勢を算出する。これによれば、より正確な中心位置に基づくことによって、より精度良く入力装置2の姿勢を算出することができる。なお、上述のように、1回の更新処理においては、バッファに記憶される複数の検出磁気ベクトルのうちの一部に関して中心位置の移動処理が実行されてもよい。
【0083】
(他の方法による姿勢の補正)
本実施形態においては、情報処理装置3は、磁気センサ4とは別のセンサ(ジャイロセンサ5および加速度センサ6)を用いる方法で得られる入力装置2の姿勢を、方向ベクトルを用いて補正することで、入力装置2の姿勢を算出する。つまり、情報処理装置3は、検出磁気ベクトルを用いる方法とは別の方法によって算出された入力装置2の姿勢を方向ベクトルに基づいて補正する。以下、
図6を参照して、方向ベクトルを用いた入力装置2の姿勢の補正方法について説明する。
【0084】
図6は、方向ベクトルを用いて入力装置2の姿勢を補正する方法の一例を示す図である。まず、情報処理装置3は、所定の基準時における方向ベクトル(基準方向ベクトル)Vaを設定する(
図6に示す(a))。基準方向ベクトルVaは、例えば、基準磁気ベクトルに対応する方向ベクトルである。なお、基準磁気ベクトルの検出時には中心位置が算出されていないが、中心位置の算出後に、中心位置と基準磁気ベクトルとから基準方向ベクトルを算出することができる。なお、方向ベクトルは入力装置2を基準として算出されるので、情報処理装置3は、空間を基準とする座標系(入力装置2の姿勢を表すための座標系)における基準方向ベクトルVaの値を算出しておく。つまり、情報処理装置3は、上記xyz座標系から、入力装置2の姿勢を表す座標系へと基準方向ベクトルの座標系を変換する。
【0085】
中心位置が設定された後のある時点において、情報処理装置3は、上記他の方法を用いて入力装置2の姿勢を算出する。なお、
図6の(b)欄に示される入力装置2の姿勢は、上記他の方法を用いて算出された姿勢である。また、情報処理装置3は、この時点における方向ベクトルVa1を算出する。
【0086】
ここで、方向ベクトルは空間に対して固定であるので、上記ある時点における方向ベクトルVa1は、本来は基準方向ベクトルVaと同じ向きとなるはずである。(検出磁気ベクトルに基づく姿勢が正確であるとの前提に立てば)方向ベクトルVa1と基準方向ベクトルVaとのずれは、上記基準時点から上記ある時点までに生じた、上記他の方法を用いて算出される姿勢の誤差であると考えられる。そのため、情報処理装置3は、上記方向ベクトルVa1が基準方向ベクトルVaと同じ向きとなるように、他の方法を用いて算出される入力装置2の姿勢を回転させる補正を行う(
図6に示す(b)の矢印参照)。なお、
図6の(c)欄に示される入力装置2の姿勢は、方向ベクトルによる補正後の入力装置2の姿勢を示す。
【0087】
(補正度の算出)
なお、
図6においては、方向ベクトルVa1が基準方向ベクトルVaと一致するように補正を行うものとして説明したが、本実施形態においては、情報処理装置3は、方向ベクトルVa1が基準方向ベクトルVaの方向へ補正度に応じた割合だけ近づくように補正を行う。補正度はどのように決定されてもよいが、本実施形態においては、いくつかの要素に基づいて複数種類の補正率(第1補正率および第2補正率)を算出し、これらの補正度に基づいて最終的に用いる補正度を設定する。以下、補正度の設定方法について説明する。
【0088】
(第1補正率)
第1補正率は、新たに取得された検出磁気ベクトル(の終点)が、これまでに取得された検出磁気ベクトル(の終点)に対して離れている度合い(「離間度」と呼ぶ)に応じて設定される。なお、「これまでに取得された検出磁気ベクトル」とは、その時点における中心位置の推定に用いられた検出磁気ベクトルのことであり、換言すれば、バッファに記憶されている検出磁気ベクトルのことである。情報処理装置3は、上記離間度が大きいほど補正率が小さくなるように第1補正率を設定する。第1補正率は、例えば0以上100以下の値で表され、値が大きいほど検出磁気ベクトルに基づく補正の度合いが大きくなる(
図6の例で言えば、方向ベクトルVa1が基準方向ベクトルVaにより近づく)ものとする。
【0089】
図7は、第1補正率の設定方法の一例を示す図である。
図7においては、基準磁気ベクトルVd1を含む複数の検出磁気ベクトルが取得されている状態において、新たな検出磁気ベクトルとしてベクトルVd2が取得された場合と、ベクトルVd3が取得された場合とを示している。また、
図7に示す斜線部分は、上記複数の検出磁気ベクトルの範囲を表す。つまり、当該複数の検出磁気ベクトルは、斜線部分の範囲内で取得されたものとする。また、新たな検出磁気ベクトル(Vd2またはVd3)が取得された時の中心位置を位置pとする。中心位置pは、上記複数の基準方向ベクトルに基づいて設定され、実際の中心位置Pとは若干異なっているものとする。
【0090】
図7において、検出磁気ベクトルVd2が取得された場合を考える。検出磁気ベクトルVd2は、これまでに取得された上記複数の検出磁気ベクトルの範囲から離れている。ここで、新たな検出磁気ベクトルVd2が上記範囲から離れている場合には、当該新たな検出磁気ベクトルに対応する方向ベクトルVa2の方向は、正しい方向(実際の中心位置Pから検出磁気ベクトルVd2の終点へのベクトルVa2’の方向)との差異が大きくなるおそれがある(
図7参照)。つまり、方向ベクトルVa2は正確でない可能性がある。したがって、上記の場合、第1補正率は、相対的に小さく設定される。
【0091】
一方、
図7において、検出磁気ベクトルVd3が取得された場合を考える。検出磁気ベクトルVd3は、これまでに取得された上記複数の検出磁気ベクトルの範囲内に含まれている(範囲に近い)。このように、新たな検出磁気ベクトルVd3が上記範囲に近い場合には、当該新たな検出磁気ベクトルに対応する方向ベクトルVa3の方向は、正しい方向(実際の中心位置Pから検出磁気ベクトルVd3の終点へのベクトルVa3’の方向)との差異が小さくなる。つまり、方向ベクトルVa3はある程度正確であると考えることができる。したがって、上記の場合、第1補正率は、相対的に大きく設定される。
【0092】
以上のように、本実施形態においては、情報処理装置3は、新たに取得された検出磁気ベクトルの終点位置が、中心位置の推定に用いられた検出磁気ベクトルの終点位置に対して離れているほど、補正度(第1補正率)を小さく設定する。これによれば、新たな検出磁気ベクトルに対応する方向ベクトルが正確でない可能性がある場合には例えば補正度を低く設定し、当該方向ベクトルによる影響を小さくして入力装置2の姿勢を算出することができる。これによって、不正確な姿勢が算出される可能性を低減することができる。また例えば、新たな検出磁気ベクトルに対応する方向ベクトルが正確であると考えられる場合には例えば補正度を高く設定し、当該方向ベクトルによる影響を大きくして入力装置2の姿勢を算出することができる。これによって、正確な姿勢が算出される可能性を向上することができる。このように、上記離間度に応じて補正度を設定することによって、入力装置2の姿勢を精度良く算出することができる。
【0093】
また、本実施形態においては、情報処理装置3は、中心位置から新たな検出磁気ベクトルの終点位置までの長さ(半径)と、当該中心位置の推定に用いられた検出磁気ベクトルにより決められる半径との差を用いて上記離間度を判断する。すなわち、上記差が大きい場合、離間度が大きいと判断し、上記差が小さい場合、離間度が小さいと判断することができる。したがって、本実施形態においては、情報処理装置3は、上記差に応じて補正度(第1補正率)を設定する。このように、半径の差を用いることによって、離間度を正確に判断することができる。
【0094】
なお、上記「中心位置から当該中心位置の推定に用いられた検出磁気ベクトルにより決められる半径」とは、中心位置から、当該中心位置の推定に用いられた検出磁気ベクトルの各終点位置までの長さ(半径)により決められる半径である。この半径は、例えば、基準磁気ベクトルに対応する半径(
図7に示す方向ベクトルVa1の大きさ)として決定されてもよいし、上述の平均半径として決定されてもよい。
【0095】
上記のように、本実施形態においては、情報処理装置3は、上記離間度が大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置2の姿勢を算出する。つまり、本実施形態においては、入力装置2の姿勢算出に対して、新たな検出磁気ベクトルによる影響を調整する方法として、補正度を用いている。ここで、他の実施形態においては、上記方法はどのような方法であってもよく、補正度を用いる方法に限られない。例えば他の実施形態においては、離間度が所定の基準よりも大きい場合、方向ベクトルを用いた補正を行わず(補正度を“0”にする)、離間度が当該所定の基準以下である場合、方向ベクトルを用いた補正を行うようにしてもよい。
【0096】
また、磁気センサ4によって姿勢を算出する方法とは別の他の姿勢算出方法を用いない場合であっても、情報処理装置3は、新たな検出磁気ベクトルによる影響を上記離間度に応じて変化させて入力装置2の姿勢を算出してもよい。例えば、情報処理装置3は、過去に取得された検出磁気ベクトルに基づいて算出される第1の姿勢と、新たに取得された検出磁気ベクトルに基づいて算出される第2の姿勢とに基づいて現在の姿勢を算出するようにしてもよい。換言すれば、情報処理装置3は、過去に算出された入力装置の姿勢を、新たに取得された検出磁気ベクトル(当該検出磁気ベクトルに対応する方向ベクトル)に基づいて補正するようにしてもよい。このとき、情報処理装置3は、現在の姿勢に対して第2の姿勢を反映させる割合を離間度に応じて決定してもよい。
【0097】
以上のように、本実施形態においては、情報処理装置3は、新たに取得された検出磁気ベクトルの終点位置が、中心位置の推定に用いられた各検出磁気ベクトルの終点位置に対して離れているほど、新たな検出磁気ベクトルによる影響(姿勢算出に対する影響)を相対的に小さくして入力装置2の姿勢を算出する。これによれば、推定される中心位置が実際の中心位置の近傍に収束していない場合でも、入力装置2の姿勢を算出することができる。例えば
図7を例にとって説明すると、推定される中心位置pは、実際の中心位置Pからやや離れている状態である。このような状態では、方向ベクトルは正確ではない可能性があるので、姿勢を正確に算出することができないように一見思われる。しかしながら、このような状態であっても、場合によっては(すなわち、上記離間度が小さい場合には)、方向ベクトルはある程度正確であると考えられ、姿勢を算出することが可能である。つまり、本実施形態においては、情報処理装置3は、推定される中心位置が実際の中心位置の近傍に十分に収束していない場合でも、不正確な姿勢が算出されることがない範囲で、方向ベクトルを用いて姿勢算出を行うのである。これによれば、中心位置が十分に収束する前に姿勢を算出することが可能であるので、早期に姿勢を算出することができる。また、実際の中心位置を算出するのに必要となる十分な検出磁気ベクトルを取得できない場合でも姿勢を算出することが可能となるので、より多くの機会に姿勢を算出することができる。したがって、例えば、上述した8の字に入力装置2を動かすような予備的な操作をユーザに行わせることなく、入力装置2を用いた通常の操作が行われる間に入力装置2の姿勢を算出することができる。
【0098】
また、磁気センサ4は、何らかの理由で異常な検出磁気ベクトルを検出する場合がある。異常な検出磁気ベクトルとは、典型的には、他の検出磁気ベクトルから推定される磁気球体の面とは全く異なる位置に終点が位置するようなベクトルである。このような異常な検出磁気ベクトルを用いて中心位置が推定されると、中心位置を正確に算出することができない可能性がある。ここで、上記のように、離間度に応じて新たな検出磁気ベクトルによる影響を変化させることによって、当該異常な検出磁気ベクトルの影響を少なくすることができ、入力装置2の姿勢を精度良く算出することができる。
【0099】
また、本実施形態においては、情報処理装置3は、上記離間度を、上述した半径の差を用いて判断する。ここで、本実施形態においては、上記更新処理によって中心位置が正確になると(実際の中心位置に近づく)と、半径の差は小さくなる。したがって、情報処理装置3は、半径の差を用いることで、上記離間度に加えて、中心位置の正確さを考慮して、姿勢算出に対する新たな検出磁気ベクトルによる影響を調整することができる。また、本実施形態においては、上記更新処理によって中心位置は時間の経過に従って次第に正確になっていくので、上記の影響を時間の経過に従って大きくすることができる。つまり、本実施形態によれば、最初は検出磁気ベクトルに基づく姿勢算出が行われる範囲(あるいは、当該姿勢算出の影響が大きい範囲)が限定的であっても、時間の経過に従って当該範囲を拡大することができるようになる。また、時間の経過に従って姿勢を正確に算出することができるようになる。
【0100】
なお、上記離間度はどのような方法で判断されてもよい。例えば、他の実施形態においては、各検出磁気ベクトルの終点位置に基づいて離間度が算出されてもよい。具体的には、上記記録範囲と新たな検出磁気ベクトルとの距離に応じて離間度が算出されてもよい。また、他の実施形態においては、新たな検出磁気ベクトルに対応する方向ベクトルの方向と、これまでに取得された検出磁気ベクトルに対応する方向ベクトルとの方向の差に応じて離間度が算出されてもよい。
【0101】
また、本実施形態においては、上述した中心位置の更新処理(第2処理)は、上記第1補正率の値とは独立して(第1補正率の値にかかわらず)実行される。つまり、情報処理装置3は、新たな検出磁気ベクトルの終点位置と、中心位置の推定に用いられた各検出磁気ベクトルの終点位置との関係とは独立して、当該新たな検出磁気ベクトルを用いて中心位置を更新する。これによれば、上記の度合いが大きいために姿勢の算出が行われない(あるいは、検出磁気ベクトルに基づく姿勢算出の影響が小さい)場合でも、中心位置はより正確な位置に更新される。そのため、中心位置を精度良く算出することができるとともに、ある時点において姿勢の算出が行われない場合でも、その後に姿勢の算出を行うことができる。
【0102】
(第2補正率)
第2補正率は、新たに取得された検出磁気ベクトルに対応する方向ベクトルの方向と、ユーザが所定の操作を行った時の検出磁気ベクトル(ここでは、基準磁気ベクトル)に対応する方向ベクトルの方向との差に応じて設定される。情報処理装置3は、上記の方向の差が大きいほど補正率が小さくなるように第2補正率を設定する。第2補正率は、第1補正率と同様、例えば0以上100以下の値で表され、値が大きいほど検出磁気ベクトルに基づく補正の度合いが大きくなるものとする。
【0103】
図8は、第2補正率の設定方法の一例を示す図である。
図8においては、基準磁気ベクトルVd1を含む複数の検出磁気ベクトルが取得されている状態において、新たな検出磁気ベクトルとしてベクトルVd4が取得された場合と、ベクトルVd5が取得された場合とを示している。また、新たな検出磁気ベクトル(Vd4またはVd5)が取得された時の中心位置を位置pとする。
【0104】
図8において、検出磁気ベクトルVd4が取得された場合を考える。検出磁気ベクトルVd4に対応する方向ベクトルVa4の方向は、基準磁気ベクトルVd1に対応する基準方向ベクトルVa1の方向との差(角度θ1)が比較的大きい。ここで、上記の方向の差が大きい場合には、基準時(入力装置2の使用開始時)における姿勢から、入力装置2の姿勢が大きく変化していると考えられる。また、基準時における姿勢から入力装置2の姿勢が大きく変化すると、入力装置2の周囲の磁界が変化する可能性がある。例えば、入力装置2の姿勢を変えたために位置も変化し、その結果、周囲の磁界も変化することがあり得る。具体的には、入力装置2が金属の壁に近づいたために周囲の磁界が変化することが考えられる。このように、入力装置2の姿勢が基準時の姿勢から大きく変化すると、検出磁気ベクトルに基づく姿勢算出を正確に行うことができない可能性がある。そのため、情報処理装置3は、上記の方向の差が大きい場合には、第2補正率を相対的に小さく設定する。
【0105】
一方、
図8において、検出磁気ベクトルVd5が取得された場合を考える。検出磁気ベクトルVd5に対応する方向ベクトルVa5の方向は、基準磁気ベクトルVd1に対応する基準方向ベクトルVa1の方向との差(角度θ2)が比較的小さい。このように、上記の方向の差が小さい場合には、入力装置2の周囲の磁界が変化している可能性は低いので、姿勢算出を正確に行うことができない可能性も低いと考えられる。そのため、情報処理装置3は、上記の方向の差が小さい場合には、第2補正率を相対的に大きく設定する。
【0106】
以上のように、本実施形態においては、情報処理装置3は、ユーザが所定の操作を行った時に検出された検出磁気ベクトルを基準磁気ベクトルに設定する。そして、中心位置から新たな検出磁気ベクトルへの方向が、当該中心位置から基準磁気ベクトルへの方向に対して離れているほど、当該新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置2の姿勢を算出する。これによれば、入力装置2の周囲の磁界が変化することに起因して不正確な姿勢が算出される可能性を低減することができ、ひいては、姿勢を精度良く算出することができる。
【0107】
(最終的な補正度の算出)
本実施形態においては、上記第1補正率および第2補正率に基づいて、最終的な補正度を算出する。例えば、情報処理装置3は、第1補正率と第2補正率とを乗算し、所定の係数をさらに乗算した補正度を算出する。なお、他の実施形態においては、上記第1補正率および第2補正率のうちいずれか一方に基づいて最終的な補正度を算出してもよい。例えば、入力装置2の姿勢が全方向にわたって変化するような操作方法が想定される場合には、第2補正率を用いずに補正度が算出されてもよい。また、情報処理装置3は、補正度が急激に大きくなることを防止してもよい(後述するステップS36およびS37参照)。情報処理装置3が算出する入力装置2の姿勢が、方向ベクトルを用いた補正によって急激に変化することを防止するためである。
【0108】
なお、本実施形態においては、他の方法(ジャイロセンサ5および加速度センサ6を用いる方法)で算出される入力装置2の姿勢を方向ベクトルで補正するものとした。ここで、他の実施形態においては、情報処理装置3は、他の方法を用いず、方向ベクトルに基づいて入力装置2の姿勢を算出するようにしてもよい。
【0109】
(姿勢を算出するか否かの判定)
本実施形態においては、第3処理において、情報処理装置3は、中心位置に関する所定の条件が満たされた場合に、方向ベクトルに基づく入力装置2の姿勢を算出する。つまり、推定された中心位置が磁気球体の実際の中心位置を表すものとして信頼できる度合いが低い場合には、情報処理装置3は検出磁気ベクトルに基づく入力装置2の姿勢を算出しないことにより、不正確な姿勢を算出する可能性を低減するものである。
【0110】
本実施形態においては、情報処理装置3は、中心位置と、バッファに記憶される各検出磁気ベクトルとに基づいて、中心位置の信頼度を算出する。そして、信頼度が所定の基準より高い場合には入力装置2の姿勢を算出し、信頼度が所定の基準より低い場合には入力装置2の姿勢を算出しない。
【0111】
具体的には、情報処理装置3は、上記更新処理によって中心位置が更新される場合における更新前後の移動量が大きいほど、信頼度を低く算出する。また、情報処理装置3は、上記各検出磁気ベクトルの終点と中心位置とを結ぶ各半径の長さのばらつきが大きいほど、信頼度を低く算出する。更新前後の移動量が大きい場合、および、各半径の長さのばらつきが大きい場合には、中心位置が十分に収束しておらず、不正確である可能性が高いためである。例えば
図4に示す場合、各半径r1〜r4の長さのばらつきが大きく、中心位置の移動は大きい。そのため、信頼度は低く算出され、その結果、姿勢の算出が行われない。一方、
図9は、信頼度が高く算出される場合における中心位置の一例を示す図である。
図9に示す場合、各半径r1〜r4の長さのばらつきが小さく、中心位置の移動は小さくなる。そのため、信頼度は高く算出され、その結果、姿勢の算出が行われる。
【0112】
なお、本実施形態においては、各半径の長さのばらつきを表す指標として、平均半径と半径との差の2乗を各半径について累積加算した値が用いられる。なお、この指標は、どのようなものであってもよく、例えば、最大の半径と最小の半径との差、平均半径と最大または最小の半径との差、および、各半径の標準偏差等であってもよい。
【0113】
また、本実施形態においては、信頼度の算出は、入力装置2の姿勢が所定の基準よりも変化したことに応じて行われる。すなわち、情報処理装置3は、検出磁気ベクトルが取得される度に、検出磁気ベクトルに対応する方向ベクトルの方向が所定の基準よりも変化したか否かを判定する。そして、方向ベクトルの方向が所定の基準よりも変化した場合、情報処理装置3は信頼度を新たに算出する。一方、方向ベクトルの方向が所定の基準よりも変化しない場合、信頼度を新たに算出されないので、従前の信頼度が維持される。入力装置2の姿勢(検出磁気ベクトル)が変化しない場合、中心位置が信頼できる度合いも変化しないと考えられるためである。このように、本実施形態によれば、信頼度の算出による処理負荷を軽減することができる。なお、他の実施形態においては、信頼度は、所定期間に1回の割合で(例えば検出磁気ベクトルが取得される度に)算出されてもよい。
【0114】
以上のように、本実施形態においては、情報処理装置は、中心位置の更新前後の移動量、および、各半径の長さのばらつきを、中心位置の信頼度を反映する指標として用いて、当該指標に基づいて、入力装置2の姿勢を算出するか否かを決定する。ここで、他の実施形態においては、情報処理装置3は、取得された検出磁気ベクトルが姿勢算出に与える影響を上記指標に応じて変化させてもよい。例えば、情報処理装置3は、上記の補正度を上記指標に基づいて設定してもよい。
【0115】
上記のように、情報処理装置3は、更新前後における中心位置の変化量が大きいほど、新たな検出磁気ベクトルによる影響を相対的に小さくして入力装置2の姿勢を算出する。これによれば、不正確な姿勢が算出される可能性を低減することができ、姿勢算出の精度を向上することができる。
【0116】
また、情報処理装置3は、現在の中心位置から、当該中心位置の推定に用いられた各検出磁気ベクトルの終点位置までの各長さ(各半径の長さ)のばらつきが大きいほど、新たに取得された検出磁気ベクトルによる影響を相対的に小さくして姿勢を算出する。これによれば、不正確な姿勢が算出される可能性を低減することができ、姿勢算出の精度を向上することができる。
【0117】
なお、他の実施形態においては、情報処理装置3は、中心位置の更新前後の移動量、および、各半径の長さのばらつきのいずれか1つに基づいて信頼度を算出してもよい。すなわち、中心位置の更新前後の移動量、および、各半径の長さのばらつきのいずれか1つに基づいて、姿勢算出に対する新たな検出磁気ベクトルによる影響を調整してもよい。
【0118】
(3−5:検出磁気ベクトルを記憶する方法)
本実施形態においては、情報処理装置3は、検出磁気ベクトルを条件に応じて分類して記憶するバッファを用いる。そして、バッファに記憶される検出磁気ベクトルを用いて中心位置を推定(算出)する。つまり、本実施形態においては、バッファから消去された検出磁気ベクトルは中心位置の推定に用いられない。情報処理装置3は、効率良く、かつ、精度良く中心位置を算出するべく、中心位置の算出に用いる検出磁気ベクトルを、上記のバッファを用いて選別する。以下、取得された検出磁気ベクトルをバッファに記憶する方法について説明する。
【0119】
本実施形態においては、情報処理装置3は、基準位置から、取得された検出磁気ベクトルの終点位置への方向に応じたカテゴリに分類して検出磁気ベクトルを上記バッファに記憶する。なお、各カテゴリは、基準位置から検出磁気ベクトルの終点位置への方向に応じて設定される。上記基準位置は、検出磁気ベクトルに基づいて定められ、本実施形態においては、中心位置が設定されている場合には、中心位置である。つまり、本実施形態においては、検出磁気ベクトルに対応する方向ベクトルの向きが同じまたは近いものは、同じカテゴリに分類される。以下、
図10および
図11を参照して、詳細を説明する。
【0120】
図10は、本実施形態におけるバッファの構成の一例を示す図である。
図10に示すように、バッファには、複数(
図10では16個)の分類ベクトル毎に検出磁気ベクトルを格納する領域が設けられる。分類ベクトルは、検出磁気ベクトルを表すための空間(xyz空間)における方向を表すベクトル(ここでは、単位ベクトル)である。各分類ベクトルVc1〜Vc16は、それぞれ異なる方向を表す。また、詳細は後述するが、各分類ベクトルVc1〜Vc16はその方向が均等に散らばるように設定される。また、各分類ベクトルは予め設定される。分類ベクトルの数はいくつであってもよい。本実施形態において、分類ベクトルの数は固定である。
【0121】
なお、上記バッファは、情報処理装置3がアクセス可能な記憶部であればよい。例えば、本実施形態においては、情報処理装置3が備えるメモリ9に上記バッファが用意される。
【0122】
図11は、検出磁気ベクトルの分類方法の一例を示す図である。
図11においては、検出磁気ベクトルVdxが取得されたものとし、そのときの中心位置は位置pであるとする。このとき、情報処理装置3は、検出磁気ベクトルVdxに対応する方向ベクトルVaxを算出する。そして、上記複数の分類ベクトルVc1〜Vc16のうち、方向ベクトルVaxに最も方向が近いベクトルを選出する。
図11の例では、方向ベクトルVaxに最も方向が近い分類ベクトルVc11が選出される。情報処理装置3は、選出された分類ベクトルに対応する領域に、取得された検出磁気ベクトルを記憶する。
図11の例では、方向ベクトルVaxに最も方向が近い分類ベクトルVc11が選出されるので、方向ベクトルVaxに対応する検出磁気ベクトルVdxは、分類ベクトルVc11に対応する領域に格納される(
図10参照)。なお、本実施形態においては、新たな検出磁気ベクトルを格納すべき領域にすでに検出磁気ベクトルが格納されている場合には、当該領域には新たな検出磁気ベクトルが上書きして記憶され、前の検出磁気ベクトルは消去される。
【0123】
以上のように、本実施形態においては、基準位置から検出磁気ベクトルの終点への方向に応じて検出磁気ベクトルを分類し、同じカテゴリに分類されるうちの1つを用いて中心位置を推定する。これによって、中心位置の推定に用いられる検出磁気ベクトルの数を一定数に制限することができ、中心位置の推定処理の処理負荷を軽減することができる。
【0124】
また、本実施形態においては、検出磁気ベクトルは、基準位置から検出磁気ベクトルの終点への方向に応じて分類される。ここで、推定される中心位置は、種々の方向を向く方向ベクトルを用いることによって、より正確に算出されやすくなる。したがって、基準位置から検出磁気ベクトルの終点への方向に応じて検出磁気ベクトルを分類することによって、種々の方向を向く検出磁気ベクトルを用いて中心位置をより正確に推定することができる。
【0125】
また、本実施形態において、上記基準位置は中心位置に設定される。つまり、情報処理装置3は、磁気球体の面または当該面の内側に基準位置を設定する。これによれば、種々の方向を向く方向ベクトルに対応する検出磁気ベクトルをバッファに記憶することができるので、より正確に中心位置を推定することができる。
【0126】
なお、本実施形態においては、中心位置が設定される前は、基準磁気ベクトルの終点位置が基準位置に設定される。また、中心位置が設定される前において、新たな検出磁気ベクトルが取得される度に、中心位置の更新処理と同様の方法で基準位置が更新される。したがって、中心位置が設定される前においても、磁気球体の面または当該面の内側に基準位置が設定される。
【0127】
また、中心位置が設定された後において、情報処理装置3は、検出磁気ベクトルが取得される度に、最新の中心位置を基準位置として、取得された検出磁気ベクトルを分類する。これによれば、分類に用いられる方向ベクトルをより正確なものにすることができる。これによって、検出磁気ベクトルの分類をより正確に行うことができる。なお、上述のように、情報処理装置3は、検出磁気ベクトルが新たに記憶される度に中心位置を更新する。したがって、検出磁気ベクトルが取得される度に中心位置および基準位置が更新されるので、分類に用いられる方向ベクトルをより正確なものにすることができる。
【0128】
また、本実施形態においては、分類ベクトルを用いて検出磁気ベクトルを分類する。すなわち、情報処理装置3は、互いに異なる方向を向く複数の分類ベクトルのうちから、基準位置から検出磁気ベクトルの終点への方向に最も近い方向を向く分類ベクトルを選択し、異なる分類ベクトルが選択される検出磁気ベクトルを異なるカテゴリに分類する。これによれば、検出磁気ベクトルを容易に分類することができる。例えば、分類ベクトルと、基準位置から検出磁気ベクトルの終点への方向を表すベクトルとの内積を計算することによって、検出磁気ベクトルを容易に分類することができる。
【0129】
なお、他の実施形態においては、分類ベクトルに代えて、方向に関する範囲がバッファの各領域に対して設定されていてもよい。このとき、情報処理装置3は、各領域に設定される範囲のうち、基準位置から検出磁気ベクトルの終点への方向が属する範囲を選択し、選択された範囲に対応する領域に検出磁気ベクトルを格納する。これによっても、検出磁気ベクトルを容易に分類することができる。
【0130】
また、本実施形態においては、情報処理装置3は、同じカテゴリに分類される検出磁気ベクトルを1つにまとめてバッファに記憶する。つまり、同じ分類に属する検出磁気ベクトルから得られる1つの検出磁気ベクトルがバッファに記憶される。これによって、バッファに記憶される検出磁気ベクトルの数を一定数に制限することができ、バッファのデータサイズを低減することができる。
【0131】
なお、他の実施形態においては、各カテゴリに分類した検出磁気ベクトルを1つのカテゴリにつき複数(全部でもよい)記憶しておいてもよい。このとき、情報処理装置3は、各カテゴリから、1つのカテゴリにつき所定数(例えば1つ)の検出磁気ベクトルを抽出し、抽出した検出磁気ベクトルを用いて中心位置を推定してもよい。これによっても本実施形態と同様、中心位置の推定に用いる検出磁気ベクトルを選別することができ、効率良く中心位置を算出することができる。
【0132】
さらに、本実施形態においては、バッファ内の同じ領域に検出磁気ベクトルがすでに格納されている場合、新たな検出磁気ベクトルが上書きして記憶(格納)される。すなわち、情報処理装置3は、新たな検出磁気ベクトルが取得された場合に、当該新たな検出磁気ベクトルを分類すべきカテゴリについて検出磁気ベクトルがすでに記憶されていれば、すでに記憶されている検出磁気ベクトルに当該新たな検出磁気ベクトルを上書きして記憶する。これによれば、同じ領域にすでに格納されている検出磁気ベクトルは消去される。
【0133】
なお、上述のように、磁気センサ4は、何らかの理由で異常な検出磁気ベクトルを検出する場合がある。本実施形態においては、検出磁気ベクトルは上書きされるので、仮に異常な検出磁気ベクトルがバッファに記憶されても、その後に異常でない検出磁気ベクトルで上書きされることによって、異常な検出磁気ベクトルによる影響を無くして中心位置を算出することができる。これによって、中心位置を精度良く算出することができる。
【0134】
なお、同じカテゴリに分類される検出磁気ベクトルを1つにまとめてバッファに記憶する方法としては、新たな検出磁気ベクトルを上書きする方法の他に、同じカテゴリに分類される複数の検出磁気ベクトルに基づいて生成される検出磁気ベクトルを記憶する方法がある。例えば、他の実施形態においては、同じカテゴリに分類される複数の検出磁気ベクトルに基づいて平均のベクトルを生成し、当該平均のベクトルをバッファに記憶してもよい。これによれば、異常な検出磁気ベクトルによる影響を少なくして中心位置を算出することができる。
【0135】
本実施形態においては、上記各分類ベクトルは、方向が均等に散らばるように設定される。すなわち、複数の分類ベクトルは、各分類ベクトルの始点を球体の中心に配置した場合に各分類ベクトルの終点が当該球体の球面上に(後述するように、分類ベクトルの数を半分にする場合には、球面の半分の面上であってもよい)均等に散らばって配置されるように設定される。
図12は、本実施形態において3次元空間に配置される各分類ベクトルの終点位置の一例を示す図である。なお、
図11においては、各分類ベクトルが平面に配置されるように示しているが、本実施形態においては、実際には
図12に示すように、各分類ベクトルは3次元空間に配置される。各分類ベクトルは、例えば、
図12に示す多面体の中心を始点とし、当該多面体の各頂点を終点とするベクトルとして設定される。
図12に示されるように、複数の分類ベクトルは、方向が均等に散らばるように設定される。これによって、均等に散らばった検出磁気ベクトルを用いて中心位置を推定することができるので、中心位置をより正確に推定することができる。なお、各分類ベクトルは、方向が厳密に均等に散らばるように設定される必要はなく、概ね均等に散らばるように設定されれば、中心位置を正確に推定する効果を得ることができる。
【0136】
また、本実施形態においては、分類ベクトルは、方向が逆向きとなる他の分類ベクトルが存在するように設定される。すなわち、情報処理装置3は、互いに逆方向を向く2つの分類ベクトルを1組として、複数組の分類ベクトルを設定する。また、情報処理装置3は、2つのベクトルの内積を計算することによって分類ベクトルを選択する。すなわち、情報処理装置3は、分類ベクトルと、基準位置から検出磁気ベクトルの終点への方向を表す方向ベクトルとの内積を計算し、内積値が最大となる分類ベクトルを選択する。
【0137】
ここで、本実施形態においては、方向が逆向きとなる他の分類ベクトルが存在するように分類ベクトルが設定されるので、情報処理装置3は、1組の分類ベクトルのうちのいずれか一方について上記内積を計算する処理を組毎に実行することによって、分類ベクトルを選択することができる。具体的には、内積値の絶対値が最大となる分類ベクトルを特定し、当該内積値の符号が正である場合には、当該特定された分類ベクトルを選択すればよく、当該内積値の符号が負である場合には、当該特定された分類ベクトルの逆方向を向く分類ベクトルを選択すればよい。このように、方向が互いに逆向きとなる1組の分類ベクトルを用いることによって、分類ベクトルを選択するための内積計算の回数を半分にすることができる。
【0138】
なお、他の実施形態においては、情報処理装置3は、上記実施形態の半分の分類ベクトルを用いて検出磁気ベクトルの分類を行ってもよい。すなわち、他の実施形態においては、上記各組の分類ベクトルのうちいずれか一方のみが設定されてもよい。このとき、情報処理装置3は、まず、内積の絶対値に基づいて分類ベクトルの選択を行う。具体的には、本実施形態と同様に内積を計算する処理を分類ベクトル毎に実行し、絶対値が最大となる分類ベクトルを選択する。さらに、情報処理装置3は、内積値の正負に応じて異なるカテゴリに検出磁気ベクトルを分類する。これによれば、内積計算の回数を半分にすることができるとともに、用意すべき分類ベクトルの数を低減することができる。
【0139】
[4.情報処理システムで実行される具体的な処理例]
以下、
図13〜
図16を参照して、本実施形態において情報処理システム1(情報処理装置3)で実行される具体的な処理の一例について説明する。
図13は、本実施形態において情報処理システム1の記憶部(メモリ9)に設定されるデータ領域の一例を示す図である。
図13に示すように、情報処理装置3のメモリ9には、プログラム格納領域11、操作データ格納領域13、処理用データ格納領域15、およびバッファ領域27が設定される。なお、メモリ9には、
図13に示すデータの他、表示装置へ出力すべき画像やそれを生成するために用いられる画像のデータ等を格納するための領域が設定されてもよい。
【0140】
プログラム格納領域11には、情報処理プログラム12が記憶される。情報処理プログラム12は、情報処理装置3のコンピュータ(CPU8)に実行させるためのプログラムである。なお、情報処理プログラム12は、情報処理装置3がアクセス可能であって情報処理装置3の内部または外部に設けられるプログラム格納部(記憶装置または記憶媒体等)に記憶されている。プログラム格納部に記憶される情報処理プログラム12の一部または全部が適宜のタイミングで読み込まれてメモリ9に記憶され、CPU8によって実行される。また、情報処理プログラム12の一部または全部は、情報処理プログラム12を実行する情報処理装置内に(例えばライブラリとして)予め記憶されていてもよい。
【0141】
操作データ格納領域13には、入力装置2から送信されてくる操作データが記憶される。本実施形態においては、操作データ格納領域13には、操作データとして、上記検出磁気ベクトルを表す検出磁気データ14が記憶される。また、操作データ格納領域13には、ジャイロセンサ5の検出結果(角速度)を表すデータ、加速度センサ6の検出結果(加速度)を表すデータ、および、操作部7に対する操作を表すデータが記憶される。
【0142】
処理用データ格納領域15には、情報処理装置3において実行される情報処理(
図14に示す情報処理)において用いられる各種のデータが記憶される。処理用データ格納領域15には、第1姿勢データ16、第2姿勢データ17、基準磁気データ18、平均半径データ19、中心位置データ20、記録範囲データ21、方向ベクトルデータ22、信頼度データ23、第1補正率データ24、第2補正率データ25、および、補正度データ26が記憶される。
【0143】
第1姿勢データ16は、磁気センサ4(検出磁気ベクトル)を用いる方法以外の他の方法で算出される入力装置2の姿勢を表すデータである。第2姿勢データ17は、検出磁気ベクトルに基づいて算出される入力装置2の姿勢を表すデータである。本実施形態においては、第2姿勢データ17は、第1姿勢データ16が表す姿勢を、方向ベクトルを用いて補正した姿勢を表すデータである。
【0144】
基準磁気データ18は、上記基準磁気ベクトルを表すデータである。平均半径データ19は、上記平均半径の長さを表すデータである。中心位置データ20は、情報処理装置3によって推定される上記中心位置を表すデータである。記録範囲データ21は、上記記録範囲の領域を表すデータである。
【0145】
ここで、本実施形態においては、中心位置が設定された後は、中心位置が基準位置に設定される。また、中心位置が設定される前において、基準位置は中心位置と同じ方法で更新される。したがって、基準位置と中心位置とは同じ値であるので、情報処理装置3は、基準位置と中心位置とを別のデータとして記憶しなくてもよく、1つのデータとして記憶しておくことができる。そのため、ここで説明する処理例においては、情報処理装置3は、基準位置および中心位置を表すためのデータとして、中心位置データ20を用いる。つまり、中心位置データ20は、初期中心位置が設定される前の段階では、基準位置を表す。
【0146】
方向ベクトルデータ22は、上記方向ベクトルを表すデータである。ここでは、方向ベクトルデータ22が表す方向ベクトルは、最新の中心位置に基づいて決定される方向ベクトルである。また、方向ベクトルデータ22が表す方向ベクトルは、新たに取得された検出磁気ベクトル(最新の検出磁気ベクトル)に対応する方向ベクトルである。
【0147】
信頼度データ23は、上記信頼度を表すデータである。第1補正率データ24は、上記第1補正率を表すデータである。第2補正率データ25は、上記第2補正率を表すデータである。補正度データ26は、第1姿勢データ16が表す姿勢を、方向ベクトルに基づく姿勢で補正する際の補正度合いを表すデータである。補正度データ26は、上記第1補正率および第2補正率に基づいて算出される補正度を表す。
【0148】
バッファ領域27は、検出磁気ベクトルを記憶するための上記バッファの領域である。バッファ領域27には、上記検出磁気データ14として記憶されたデータのうち、上記“(3−5:検出磁気ベクトルをバッファに記憶する方法)”で述べた方法で分類された検出磁気データが記憶される。
【0149】
上記のデータの他、メモリ9には、上記分類ベクトルや、判定に用いる閾値等、情報処理装置における処理(
図14)において用いられるデータが記憶される。
【0150】
次に、本実施形態における情報処理の詳細な流れを説明する。
図14は、本実施形態において情報処理装置3のCPU8が実行する情報処理の流れの一例を示すフローチャートである。本実施形態においては、情報処理システム1が起動されると、情報処理装置3のCPU8は、メモリ9等の記憶部を初期化し、プログラム格納部から情報処理プログラム12をメモリ9に読み込む。そして、CPU8によって当該情報処理プログラム12の実行が開始される。
【0151】
なお、
図14〜
図16に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU8が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU8以外のプロセッサや専用回路が実行するようにしてもよい。
【0152】
本実施形態においては、まずステップS1において、CPU8は、入力装置2から送信されてくる操作データを取得する。本実施形態においては、入力装置2は、所定時間に1回の割合で操作データを情報処理装置3へ繰り返し送信する。これに応じて、情報処理装置3は操作データを逐次受信する。情報処理装置3は、受信した操作データをメモリ9の操作データ格納領域13に記憶する。これによって、検出磁気データ14を含む操作データが取得される。
【0153】
ステップS2において、CPU8は、磁気センサ4を用いる方法以外の他の方法で入力装置2の姿勢を算出する。本実施形態においては、CPU8は、ジャイロセンサ5および加速度センサ6を用いて入力装置2の姿勢を算出する。具体的な処理としては、CPU8は、操作データをメモリ9から読み出し、操作データに含まれる、ジャイロセンサ5および加速度センサ6によって検出されたデータに基づいて姿勢を算出する。なお、ジャイロセンサ5によって検出される角速度と、加速度センサ6によって検出される加速度に基づいて入力装置2の姿勢を算出するための具体的な方法は、どのような方法であってもよい。CPU8は、算出した姿勢を表すデータを第1姿勢データとしてメモリ9に記憶する。
【0154】
ステップS3において、CPU8は、検出磁気ベクトルに基づく姿勢算出処理を実行する。検出磁気ベクトルに基づく姿勢算出処理は、検出磁気ベクトルに基づいて入力装置2の姿勢を算出する処理である。本実施形態においては、検出磁気ベクトルに基づく姿勢算出処理において、ステップS2で算出された姿勢を、検出磁気ベクトルを用いて補正する処理が実行される。以下、
図15を参照して、検出磁気ベクトルに基づく姿勢算出処理の詳細を説明する。
【0155】
図15は、検出磁気ベクトルに基づく姿勢算出処理の詳細な流れの一例を示すフローチャートである。検出磁気ベクトルに基づく姿勢算出処理においては、まずステップS11において、CPU8は、検出磁気ベクトルに基づく姿勢算出処理を実行するか否かを判定する。ステップS11の判定は、後述するステップS12で姿勢算出処理を開始すると判定された後であるか否かによって行われる。ステップS11の判定結果が肯定である場合、ステップS12の処理が実行される。一方、ステップS11の判定結果が否定である場合、CPU8は検出磁気ベクトルに基づく姿勢算出処理を終了する。
【0156】
ステップS12において、CPU8は、姿勢算出処理を開始するか否かを判定する。本実施形態においては、ステップS12の判定は、ユーザが所定の操作を行ったか否かに基づいて判定される。すなわち、CPU8は、メモリ9に記憶された操作データを参照して、入力装置2の操作部7に対して所定の操作が行われたか否かを判定する。ステップS12の判定結果が肯定である場合、ステップS13の処理が実行される。一方、ステップS12の判定結果が否定である場合、後述するステップS15の処理が実行される。なお、
図14に示す情報処理が開始されてから、上記所定の操作が行われたのが2回目以降である場合には、CPU8は、当該所定の操作を無視してステップS15の処理を実行してもよい。あるいは、上記の場合、CPU8は、ステップS12の処理を実行してもよい(つまり、姿勢算出処理をリセットしてもよい)。
【0157】
ステップS13において、CPU8は、基準磁気ベクトルを記憶する。すなわち、CPU8は、取得された最新の検出磁気ベクトルを、基準磁気ベクトルとして記憶する。具体的な処理としては、CPU8は、メモリ9の操作データ格納領域13に記憶される検出磁気データ14を読み出し、基準磁気データ18としてメモリに記憶する。
【0158】
ステップS14において、CPU8は、初期化処理を実行する。初期化処理は、姿勢算出処理で用いる各種の情報(データ)を処理化する処理である。本実施形態においては、CPU8は、以下の処理を実行する。すなわち、CPU8は、検出磁気ベクトルを記憶するバッファ(バッファ領域27)を空にする。また、基準位置(中心位置)は、基準磁気ベクトルに基づいて設定される。ここでは、基準磁気ベクトルの終点位置が基準位置として設定される。CPU8は、当該終点位置を表すデータを中心位置データ20としてメモリ9に記憶する。また、上記記録範囲、平均半径、および補正度は、それぞれ0に設定される。CPU8は、平均半径データ19、記録範囲データ21、および補正度データ26として0を表すデータをメモリ9に記憶する。また、姿勢算出処理における処理段階は第1段階に設定される。ここで、姿勢算出処理における処理段階は、初期中心位置を設定するまでの第1段階と、初期中心地位が設定された第2段階とに分けられる。第1段階は、検出磁気ベクトルに基づく姿勢算出が不可能な段階である。第2段階は、検出磁気ベクトルに基づく姿勢算出が可能な段階である。
【0159】
また、上記ステップS14において、CPU8は、現時点における上記他の方法を用いて算出された姿勢(第1姿勢データ16)を、基準姿勢としてメモリ9に記憶する。この基準姿勢は、後述する補正処理(ステップS25)において、上記他の方法を用いて算出された姿勢を検出磁気ベクトルで補正する場合に用いられる。
【0160】
以上のステップS14の後、CPU8は検出磁気ベクトルに基づく姿勢算出処理を終了する。この後、次回以降のステップS1〜S5の処理ループにおけるステップS3の処理においては、ステップS15以降の処理が実行されることとなる。
【0161】
ステップS15において、CPU8は検出磁気ベクトルを取得する。すなわち、CPU8は、メモリ9の操作データ格納領域に記憶されている検出磁気データを読み出す。なお、他の実施形態においては、CPU8は、ステップS15の時点で入力装置2から操作データ(検出磁気データ)を取得してもよい。
【0162】
ステップS16において、CPU8は方向ベクトルを算出する。方向ベクトルは、基準位置(中心位置)と、新たに取得された検出磁気ベクトルとに基づいて算出される。例えば、方向ベクトルは、新たに取得された検出磁気ベクトルから、当該検出磁気ベクトルの始点(原点)から基準位置へのベクトルを減算することで算出される。具体的な処理としては、CPU8は、中心位置データ20をメモリ9から読み出し、ステップS15で取得された検出磁気ベクトルと、当該中心位置データ20とに基づいて方向ベクトルを算出する。CPU8は、算出された方向ベクトルを表すデータを方向ベクトルデータ22としてメモリ9に記憶する。
【0163】
ステップS17において、CPU8は、新たに取得された検出磁気ベクトルをバッファに記憶する。すなわち、CPU8は、方向ベクトルデータ22と分類ベクトルとをメモリ9から読み出し、方向ベクトルと分類ベクトルとに基づいて、方向ベクトルに最も方向が近い分類ベクトルを選出する。そして、バッファにおける各領域のうち、選出された分類ベクトルに対応する領域に上記検出磁気ベクトル(ステップS15で読み出された検出磁気データ)を記憶する。なお、分類ベクトルの選出は、例えば、上述の“(3−5:検出磁気ベクトルをバッファに記憶する方法)”で説明した方法で行われる。
【0164】
ステップS18において、CPU8は、バッファに記憶された複数の検出磁気ベクトルに基づいて平均半径を算出する。すなわち、CPU8は、バッファ領域27に記憶される検出磁気データと、中心位置データ20とをメモリ9から読み出し、各検出磁気ベクトルと中心位置(基準位置)に基づいて平均半径を算出する。なお、平均半径は、中心位置から各検出磁気ベクトルの終点までの各距離(各半径)の平均として算出することができる。CPU8は、算出された平均半径を表すデータを平均半径データ19としてメモリ9に記憶する。なお、本実施形態においては、後述するステップS32の処理において各半径を用いるので、CPU8は、当該各半径を表すデータをメモリ9に記憶しておく。
【0165】
ステップS19において、CPU8は、中心位置(基準位置)を更新する。中心位置(基準位置)の更新は、中心位置(基準位置)の算出に用いられた各検出磁気ベクトルと、更新前の中心位置(基準位置)と、平均半径とに基づいて行われる。なお、中心位置(基準位置)の具体的な更新方法としては、例えば、上述の“(3−3:第2処理)”で説明した方法(
図5参照)が用いられる。具体的な処理としては、CPU8は、バッファ領域27に記憶される検出磁気データと、中心位置データ20と、平均半径データ19とをメモリ9から読み出し、これらのデータに基づいて、更新後の中心位置を算出する。CPU8は、算出した中心位置を表すデータを、新たな中心位置データ20としてメモリ9に記憶する。なお、本実施形態においては、後述するステップS32の処理において更新前の中心位置が用いられるので、CPU8は、更新前の中心位置を表すデータをメモリ9に記憶しておく。
【0166】
なお、情報処理装置3は、上記のステップS18の処理とステップS19の処理とを並行して実行してもよい。例えば、CPU8は、まず中心位置データ20および平均半径データ19を読み出す。次に、CPU8は、バッファ領域27から1つの検出磁気ベクトルを読み出す処理、当該検出磁気ベクトルに対応する半径を累積加算する処理、および、当該検出磁気ベクトルに対応する半径の方向に沿って中心位置を移動する処理(
図5参照)からなる一連の処理を実行する。CPU8は、上記一連の処理を、バッファ領域27に記憶される検出磁気ベクトル毎に(検出磁気ベクトルを読み出す度に)実行する。最後に、CPU8は、累積加算された半径の値を用いて平均半径を算出する。このとき、算出された平均半径は次回の処理ループで用いられることとなる。なお、他の実施形態においては、CPU8は、中心位置が移動される度に平均半径を算出するようにしてもよい。CPU8は、以上の処理によってステップS18およびS19の処理を実行してもよい。
【0167】
ステップS20において、CPU8は、処理段階は第1段階であるか否かを判定する。後述するステップS24において処理段階が第2段階に設定される前においては、処理段階は第1段階であると判定される。ステップS20の判定結果が肯定である場合、ステップS21の処理が実行される。一方、ステップS20の判定結果が否定である場合、後述するステップS25の処理が実行される。
【0168】
ステップS21において、CPU8は、記録範囲を算出する。記録範囲はどのように算出されてもよいが、例えば直方体の記録範囲を設定する場合には、現時点の記録範囲(記録範囲データ21)と、新たに取得された検出磁気ベクトル(ステップS15で取得された検出磁気ベクトル)とに基づいて算出することができる。すなわち、CPU8は、新たに取得された検出磁気ベクトルの終点が現時点の記録範囲の外側である場合、当該終点を含むように記録範囲の1つの面を更新する。また、当該終点が現時点の記録範囲の内側である場合、記録範囲を更新しない。具体的な処理としては、CPU8は、記録範囲データ21をメモリ9から読み出し、ステップS15で取得された検出磁気データと記録範囲データ21とに基づいて記録範囲を算出する。そして、算出された記録範囲を表すデータを新たな記録範囲データ21としてメモリ9に記憶する。
【0169】
ステップS22において、CPU8は、記録範囲が所定の基準より大きいか否かを判定する。この判定は、例えば、記録範囲である直方体のいずれか1辺が、所定の閾値(所定長さを表す)より長いか否かによって行われる。具体的な処理としては、CPU8は、記録範囲データ21と上記閾値を表すデータとをメモリ9から読み出し、上記の判定を行う。ステップS22の判定結果が肯定である場合、ステップS23の処理が実行される。一方、ステップS22の判定結果が否定である場合、CPU8は検出磁気ベクトルに基づく姿勢算出処理を終了する。この場合、次の処理ループにおいてはステップS11,S12,およびS15〜S22の処理が実行される。そして、ステップS22の判定結果が肯定となるまで、ステップS3の姿勢算出処理においてはステップS11,S12,およびS15〜S22の処理が実行される。
【0170】
ステップS23において、CPU8は、初期中心位置を算出する。初期中心位置は、例えば基準磁気ベクトルおよび記録範囲に基づいて算出される。初期中心位置の具体的な算出方法としては、例えば、上述の“(3−2:第1処理)”で説明した方法(
図3参照)が用いられる。具体的な処理としては、CPU8は、基準磁気データ18と記録範囲データ21とをメモリ9から読み出し、これらのデータに基づいて初期中心位置を算出する。算出された初期中心位置を表すデータは、新たな中心位置データ20としてメモリ9に記憶される。これによって、中心位置データ20は中心位置(および基準位置)を表すものとなる。
【0171】
ステップS24において、CPU8は、処理段階を第2段階に設定する。ステップS24の後、CPU8は検出磁気ベクトルに基づく姿勢算出処理を終了する。ステップS24の処理によって、次の処理ループにおけるステップS3の処理においては、ステップS20の次にステップS25の処理が実行されることとなる。
【0172】
ステップS25において、CPU8は、補正処理を実行する。補正処理は、上述の他の方法で算出された入力装置2の姿勢を、方向ベクトルを用いて補正する処理である。以下、
図16を参照して、補正処理の詳細を説明する。
【0173】
図16は、補正処理の詳細な流れの一例を示すフローチャートである。補正処理においては、まずステップS31において、CPU8は、入力装置2の姿勢が所定の基準よりも変化したか否かを判定する。ステップS31の判定は、例えば、入力装置2の姿勢の変化量が所定量以上であるか否かによって行われる。本実施形態においては、上記の判定は、上記のバッファを用いて行われる。すなわち、CPU8は、新たに取得された検出磁気ベクトルが、その前に取得された検出磁気ベクトルとは別のカテゴリに分類されたか否かを判定する。なお、上記の判定はどのように行われてもよい。例えば他の実施形態においては、上記他の方法で算出される姿勢を用いて上記の判定が行われてもよい。ステップS31の判定結果が肯定である場合、ステップS32の処理が実行される。一方、ステップS31の判定結果が否定である場合、ステップS32の処理がスキップされてステップS33の処理が実行される。
【0174】
ステップS32において、CPU8は、信頼度を算出する。本実施形態においては、信頼度は、中心位置の更新前後の移動量と、各検出磁気ベクトルに対応する各半径の長さのばらつきとに基づいて算出される。信頼度の具体的な算出方法としては、例えば、上述の“(姿勢を算出するか否かの判定)”で説明した方法が用いられる。具体的な処理としては、CPU8は、上記ステップS19で記憶される更新前後の中心位置を表すデータと、上記ステップS18で記憶される各半径を表すデータとをメモリ9から読み出し、これらのデータを用いて信頼度を算出する。算出された信頼度を表すデータは、信頼度データ23としてメモリ9に記憶される。
【0175】
ステップS33において、CPU8は、信頼度は所定の基準よりも大きいか否かを判定する。この判定は、例えば、信頼度が所定の閾値より大きいか否かによって行われる。具体的な処理としては、CPU8は、信頼度データ23と上記閾値を表すデータとをメモリ9から読み出し、上記の判定を行う。ステップS33の判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS33の判定結果が否定である場合、CPU8は補正処理を終了する。
【0176】
ステップS34において、CPU8は第1補正率を算出する。本実施形態においては、第1補正率は、中心位置から新たな検出磁気ベクトルの終点位置までの半径と、基準磁気ベクトルに対応する半径(上記平均半径でもよい)との差に基づいて算出される。第1補正率の具体的な算出方法としては、例えば、上述の“(第1補正率)”で説明した方法が用いられる。具体的な処理としては、CPU8は、基準磁気データ18と中心位置データ20とを読み出し、読み出したデータとステップS15で取得された検出磁気データ14とを用いて第1補正率を算出する。CPU8は、算出された第1補正率を表すデータを第1補正率データ24としてメモリ9に記憶する。
【0177】
ステップS35において、CPU8は第2補正率を算出する。本実施形態においては、第2補正率は、新たに取得された検出磁気ベクトルに対応する方向ベクトルの方向と、基準磁気ベクトルに対応する方向ベクトルの方向との差に基づいて設定される。第2補正率の具体的な算出方法としては、例えば、上述の“(第2補正率)”で説明した方法が用いられる。具体的な処理としては、CPU8は、方向ベクトルデータ22と、基準磁気データ18と、中心位置データ20とを読み出し、読み出したデータを用いて第2補正率を算出する。CPU8は、算出された第2補正率を表すデータを第2補正率データ25としてメモリ9に記憶する。
【0178】
ステップS36において、CPU8は補正度の目標値を算出する。本実施形態において、補正度の目標値は、上記第1補正率および第2補正率に基づいて算出される。具体的には、補正度の目標値は、第1補正率と第2補正率とを乗算し、所定の係数をさらに乗算することによって算出される。具体的な処理としては、CPU8は、第1補正率データ24と、第2補正率データ25と、上記所定の係数を表すデータとをメモリ9から読み出し、読み出したデータを用いて補正度の目標値を算出する。CPU8は、算出された目標値を表すデータをメモリ9に記憶する。
【0179】
ステップS37において、CPU8は補正度を算出する。本実施形態においては、補正度は、上記補正度の目標値に基づいて算出される。具体的には、CPU8は、現在の補正度より目標値が大きい場合(補正度を大きくする場合)、現在の補正度を上記目標値に所定の割合で近づけることによって新たな補正度を算出する。これによって、補正度の急激な増加を抑えることができ、算出される入力装置2の姿勢が補正度の急激な増加によって急激に変化することを抑えることができる。一方、現在の補正度より目標値が小さい場合(補正度を小さくする場合)、CPU8は上記目標値を新たな補正度とする。なお、補正度が小さくなる場合には、補正度が急激に変化しても入力装置2の姿勢は急激に変化しないので、補正度の急激な変化を抑えなくてもよい。具体的な処理としては、CPU8は、補正度データ26と上記目標値を表すデータとをメモリ9から読み出し、読み出したデータを用いて新たな補正度を算出する。CPU8は、算出された補正度を表すデータを補正度データ26としてメモリ9に記憶する。
【0180】
ステップS38において、CPU8は、方向ベクトルを用いて姿勢を補正する。すなわち、他の方法で算出される姿勢が、最新の検出磁気ベクトルに対応する方向ベクトルに基づいて補正される。ステップS38における補正方法としては、例えば、上述の“(他の方法による姿勢の補正)”および“(補正度の算出)”で説明した方法が用いられる。具体的な処理としては、CPU8は、第1姿勢データ16と、方向ベクトルデータ22と、補正度データ26とをメモリ9から読み出し、読み出したデータを用いて補正後の姿勢を算出する。CPU8は、算出された姿勢を表すデータを第2姿勢データ17としてメモリ9に記憶する。これによって、検出磁気ベクトルに基づく入力装置2の姿勢が算出されたこととなる。
【0181】
ステップS38の後、CPU8は、
図16に示す補正処理(ステップS25)を終了する。また、ステップS25の後、CPU8は、
図15に示す、検出磁気ベクトルに基づく姿勢算出処理(ステップS3)を終了する。
【0182】
図14に示すステップS4において、CPU8は、入力装置2の姿勢に基づく情報処理を実行する。この情報処理は、ステップS3で算出された姿勢を入力として実行される。例えば、CPU8は、上記姿勢に応じた情報処理の結果得られる画像を表示装置に表示させる。
【0183】
ステップS5において、CPU8は、情報処理を終了するか否かを判定する。この判定はどのように行われてもよく、例えば、ユーザによって所定の終了指示が行われたか否かによって行われる。ステップS5の判定結果が否定の場合、ステップS1の処理が再度実行される。一方、ステップS5の判定結果が肯定の場合、CPU8は
図14に示す情報処理を終了する。以降、ステップS1〜S5の一連の処理は、ステップS5で情報処理を終了すると判定されるまで繰り返し実行される。以上によって、
図14に示す情報処理の説明を終了する。
【0184】
[5.他の実施形態]
上記実施形態においては、入力装置の姿勢に応じて変化する値を検出するセンサとして磁気センサを用いる場合を例として説明した。ここで、他の実施形態においては、入力装置の姿勢に応じて変化する値を検出するセンサは、他のセンサであってもよい。本実施形態における姿勢算出処理は、入力装置の姿勢に応じて変化する値を検出するセンサから取得される検出ベクトルが、入力装置の姿勢に依存しない成分と、入力装置の姿勢に依存する成分とを含む場合に有効である。すなわち、情報処理装置3は、上記検出ベクトルを取得し、検出ベクトルの各終点位置から推定される曲面を有する球状体の中心位置を推定し、中心位置から検出ベクトルの終点位置への方向を表す方向ベクトルに基づいて入力装置の姿勢を算出するものであってもよい。