(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0008】
  例示的なセンサ測定値較正システム
  
図1は例示的なセンサ測定値較正システム100のブロック図である。ある実施態様において、システム100は角速度センサ102(例えばMEMSジャイロ)、動き検出器104、モデルパラメータ推定器106、状態推定器108、較正データベース110、加速度センサ112および、必要に応じて設けられる干渉軽減モジュール114を含むことができる。システム100は、少なくとも以下に示すものを含む、様々なモバイル機器に組み込むことができる。ハンドヘルドコンピュータ、携帯情報端末(PDA)、携帯電話機、電子タブレット、ネットワーク家電、デジタルカメラ、ビデオカメラ、スマートフォン、EGPRS(enhanced general packet radio service)対応携帯電話機、メディアプレーヤ、ナビゲーション機器、電子メール機器、ゲーム機、またはこれらの2つ以上の組み合わせ。ある実施態様では、システム100の一部又は全部の構成要素が1つ以上の集積回路(IC)チップに含められてもよい。
 
【0009】
  ある実施態様では、機器の姿勢(attidude)は本体の角速度を用いて更新されてもよい。本体角速度は角速度ベクトルω→によって表すことができる。角速度ベクトルω→の成分は、機器の局所座標系(local coordinate frame)のx,yおよびz軸のそれぞれにおける角速度を表す。ある実施態様では、角速度ベクトルω→は、局所座標系のx,yおよびz軸のそれぞれに1つの、計3つのMEMSジャイロを用いて測定することができる。
 
【0010】
  一般に、機器の姿勢は以下の基準四元数(reference quaternion)q
ref→を用いて表すことができる。
【数1】
  ここで
  J→=回転軸方向の単位ベクトル
  f=総回転角である。
 
【0011】
  微小角近似に基づく基準四元数の変化率式(change rate formulation)は以下のように与えられる。
【数2】
 
【0012】
  式(2)は、基準四元数q
ref→によって表される機器の最終的な姿勢を得るために、離散的な時間、積分することができる。
 
【0013】
  角速度ベクトルω→は角度センサ102から出力され、動き検出器104に入力される。さらに、機器の現在温度Tが動き検出器104に入力される。現在温度Tは角度センサ102内の、あるいは機器内のどこかに配置された温度センサによって提供されてよい。ある実施態様では、角速度ベクトルω→は動き検出器104に入力される前にスケール補正されてよい。
 
【0014】
  ある実施態様では、動き検出器104は機器が静止している時を特定する。3軸角度センサ102からの角速度(度/秒)の直近nサンプルを、ω
1→,...,ω
n→とする。角速度ω
1→,...,ω
n→に対応する、直近の角速度センサ温度サンプルをT
1,...,T
nとする。
 
【0015】
  新たな較正時刻tごとに、以下の量が軸ごとに更新される。
【数3】
 
【0016】
  そして、式(3)および(4)から、軸ごとの変化が以下のように与えられる。
【数4】
 
【0017】
  機器が静止していれば角速度は理論上ゼロとなるべきであるから、σ
2が閾値ω ̄未満であれば、現在温度T ̄での角速度バイアスの推定値として使用できる。ω ̄,T ̄(まとめて”較正点”と呼ぶ)および較正時刻tは、較正データベース110に保存することができる。較正データベース110に保存された、T ̄に近い温度を有するω ̄,T ̄の古い値は削除してもよい。較正データベース110は、機器のエージングに伴って更新することができる。例えば、スケジュールに従って、あるいはトリガイベントに応答して、最古の較正点を較正データベース110から削除するというエージングアルゴリズムを適用することができる。例えば、較正データベース110は、1℃温度ビンのそれぞれで、直近のNの較正点以外を削除してもよい。さらに、ω→ ̄を現在の角度センサバイアスの測定値として状態推定器108に入力してもよい。
 
【0018】
  ある実施態様では、モデルパラメータ推定器106は較正データベース110に保存された複数の較正点の線形近似を追跡(track)してもよい。例えば、較正点が較正データベース110に追加されると、モデルパラメータ推定器106は以下の量を軸ごとに追跡することができる。
【数5】
 
【0019】
  角速度バイアス−温度勾配mは、軸ごとに式(7)〜(10)から以下のように計算することができる。
【数6】
 
【0020】
  角速度バイアス−温度オフセットbは、軸ごとに式(7)〜(10)から以下のように計算することができる。
【数7】
 
【0021】
  3軸センサについて、温度勾配ベクトルm→および温度バイアスオフセットベクトルb→=[b
x  b
y  b
z]は状態推定器108に入力され、
図2に関して説明するように、姿勢推定フィルタを用いた機器の推定姿勢の算出にこれらベクトル量が用いられる。
 
【0022】
  図2は、
図1の状態推定器108によって実施される様々な例示的な処理を示すフローチャートである。ある実施態様において、状態推定器108は状態変数を更新するために更新パス200〜204を実施することができる。本例において、角速度センサ102は3軸MEMSジャイロであってよい。
 
【0023】
  最初のパス200は、温度推定フィルタ、現在温度Tおよび、モデルパラメータ推定器106から受信する推定温度勾配ベクトルm→を用いる温度推定更新を実行することができる。勾配ベクトルm→および温度バイアスオフセットベクトルb→は、以下に与えられる、任意の温度Tについてのベースバイアスベクトルb
base→を記述する線型モデルを定義する。
【数8】
 
【0024】
  以下のように、ある時刻での真のバイアスb
true→とベースバイアスベクトルb
base→との差によってバイアスデルタベクトルβ→を定義することができる。
【数9】
  ここで、ベースバイアスベクトルb
base→は、長時間にわたるバイアスを示し、バイアスデルタベクトルβ→は(時間的な)局所変化についてのバイアスを示す。
 
【0025】
  2番目の更新パス201は、加速度センサ112から受信する加速度ベクトルa→を用いた加速度更新を実行することができる。加速度ベクトルa→は状態推定器108に入力される前にスケール補正されてよい。加速度ベクトルが過剰な動的加速度(dynamic acceleration)を有する場合、状態推定器108が何も行わずに更新を完了してもよい。加速度ベクトルが過剰な動的加速度を有さない場合、時間更新(time update)が実施可能であり、重力ベクトルg→を機器の局所座標系で算出することができる。重力ベクトルおよび他の量は、以下に説明するように姿勢推定フィルタで用いることができる。
 
【0026】
  3番目の更新パス202は、まずベースバイアスベクトルb
bias→を角速度ベクトルω→から減じて温度補償済み角速度ベクトルω
c→=(ω ̄−m*T−b)=[ω
cx  ω
cy  ω
cz]を生成し、その後バイアスデルタベクトルβ→を補償済み角速度ベクトルω
c→から減じて推定角速度ベクトルω→^=(ω
c→−β)=[ω^
x  ω^
y  ω^
z]を生成して、推定角速度ベクトルをバッファに保存することにより、ジャイロ更新を実施することができる。基準四元数q
ref→は、以下の式(15)を用いて伝播(propagate)されてよい。
【数10】
  ここで、○×は、四元数の乗算である。
 
【0027】
  四元数を更新するための他の近似または手法、あるいは方向余弦行列手法を用いることができる。推定角速度ベクトルω→^が実際の角速度ベクトルω→からずれていれば、時間更新を実行可能である。温度補償済み角速度ω
c→がある所定の閾値未満であれば、ローパスフィルタ(LPF)を以下のように更新することができる。
 
【0028】
  4番目の更新パス203は、推定角速度ベクトルω→^を算出し、姿勢推定フィルタを用いてバイアスデルタベクトルβ→を更新することによりジャイロバイアス更新を実行可能である。
 
【0029】
  5番目の更新パス204は、姿勢推定フィルタ内の温度バイアスモデルを、提供される新たなモデルに置換し、バイアスデルタベクトルβ→およびLPFを適切に更新することにより、ジャイロバイアス線形回帰更新(linear fit update)を実施することができる。
 
【0030】
例示的なカルマンフィルタ手法
  上述した温度推定フィルタおよび姿勢推定フィルタは、精度を向上するためにカルマンフィルタ手法を用いて実施することができる。ある実施態様では、2つの独立したカルマンフィルタを用いることができる。1つは温度を推定するための、もう一つは姿勢を推定するためのものである。これらのカルマンフィルタは、論理的な観点のみならず計算効率の観点からも分離することができる。
 
【0031】
  ある実施態様において、温度推定フィルタは、温度T及び温度レートT・を状態として用いるクラッシックカルマンフィルタであってよい。温度推定フィルタ状態および温度推定フィルタ遷移行列は、以下のように表すことができる。
【数11】
 
【0032】
  姿勢推定フィルタは乗法拡張(multiplicative extended)されたカルマンフィルタ手法に基づくことができる。フィルタは補償済み角速度ベクトルω
c→を有する基準四元数q
ref→を伝播することができる。姿勢推定フィルタ状態は、基準四元数q
ref→およびバイアスデルタベクトルβ→から得られる局所姿勢誤差ベクトルθ→を含むことができる。加速度計に関する姿勢推定フィルタ状態X、遷移行列Φ、姿勢処理ノイズ行列Qおよび測定値行列Hは、連続時間形式で以下のように表すことができる。
【数12】
  ここで、λはガウスマルコフ時定数、O
nxmはn×mのゼロ行列、I
nxmはn×mの恒等行列、|ω→|
x、|g→^|
xは左外積行列である。
 
【0033】
  実際には、姿勢推定フィルタおよび温度推定フィルタについて、二次離散近似を用いることができる。上述の手法では、対角行列要素N
θおよびN
βによって特定できるように、姿勢誤差とバイアスとに関する処理ノイズ行列Qが別個であると仮定されている。測定行列は加速度計測定行列であってよく、基準四元数q
ref→から生成されるフィルタの現在の重力推定値g→^に関して定義することができる。温度推定フィルタおよび姿勢推定フィルタについての測定ノイズ行列Rは対角であると仮定され、シミュレーションまたは他の既知の統計的方法を用いて実験的に求めることのできる値を有する。誤差共分散行列Pの初期値もまた、シミュレーションまたは他の既知の統計的方法を用いて実験的に選択することができる。
 
【0034】
  上述の行列は、以下のような時間更新フェーズおよび測定値更新フェーズを含む拡張カルマンフィルタ手法に用いることができる。
  A.時間更新
    1.状態の伝播
【数13】
    2.誤差共分散の伝播
【数14】
  B.測定値(観測)更新
    1.カルマンゲインの算出
【数15】
    2.測定値およびカルマンゲインを用いて推定値を更新
【数16】
    3.カルマンゲインを用いて誤差共分散を更新
【数17】
 
【0035】
  ローパスバイアス推定
  最終的にジャイロバイアス推定に寄与する多くの成分が存在しうる。一般に、これら成分は2つのカテゴリに分けることができる。バイアス/温度モデルおよび、温度モデルからのバイアスデルタである。
 
【0036】
  通常、所与の温度に対する時間平均バイアス値を定義する温度/バイアス関係はシステム100で維持されている。これは長期的な関係である。所与の温度における平均バイアスからの短期変動−バイアスデルタベクトル(β→)−は、ガウスマルコフノイズモデルに従うものと仮定することができる。
 
【0037】
  バイアスデルタベクトルは、カルマンフィルタ手法を通じて更新することができる。これらの更新は、加速度計測定値更新、動き検出器104による直接測定値更新、またはLPFによる直接測定値更新の3つの方法の1つで実行することができる。
 
【0038】
  ある実施態様において、温度補償済み角速度ベクトルω
c→の長期移動平均を、バイアスデルタベクトルβ→の初期段階推定値としてもよい。LPFは、動的更新レートを有する1次自己回帰フィルタLPF
n=α
n・LPF
n-1+(1−α
n)・ω
nとして実装されてもよい。補償済み角速度ベクトルω
c→の値は、補償済み角速度ベクトルの大きさの所定閾値未満であれば、LPFに供給される。更新レートα
nはω
c→の大きさが大きいほど大きく、ω
c→の大きさが小さいほど小さく選択することができる。
 
【0039】
  この推定は、直接測定と同様、姿勢推定フィルタに対して周期的に(例えば5Hz)適用することができる。測定ノイズは、LPFがどれだけの時間稼動し続けているかに大まかに依存して修正することができる。LPFの目的は、姿勢推定フィルタの共分散行列を通じて規定されるような、大きな不確定要素が存在する領域におけるβ→の更新を可能とするためである。これらの更新は機器がゆっくり動いている場合にも実行することができる。
 
【0040】
例示的な干渉軽減モジュール
  必要に応じて設けられる干渉軽減モジュール114は、外部磁場ベクトルにおける変化を検出するために、状態推定器108から出力される基準四元数を用いることができる。モジュールは時刻kにおける直近の既知の磁力計測定ベクトルm
k→および時刻kにおける機器の推定された姿勢A
kを記録し、状態推定器108に(例えばq
ref→によって)供給することができる。モジュール114は磁力計測定ベクトルm
k→を、A
kの逆数を用いて、基準グローバル座標系内の推定磁場ベクトルに変形する。
【数18】
 
【0041】
  基準グローバル座標系は、機器の推定姿勢A
kの基準フレームと同じ基準フレームを含んでもよい。時刻kで変形された推定磁場ベクトルは、それ以降の磁力計測定ベクトルが干渉を受けているかどうかを判定するための基準として保存することができる。時間iにおけるオフセット補正された磁力計測定ベクトルm
i→の各々に対してモジュール114は時間iにおける現在の推定姿勢A
iを読み出し、時間iにおける合成磁力計測定ベクトルm
si→を構築する。
【数19】
 
【0042】
  RatationMatrixで表される姿勢(例えばA
i)およびMagneticGlobalFrameで表される推定磁場ベクトル(例えばm
wi→)を用いる、合成磁力計測定ベクトルを算出するための例示的な擬似コードgyroCompassMagnetic(例えばm
si→)は、以下の通りである。
  gyroCompassMagnetic = (RotationMatrix.mult(MagneticGlobalFrame))
 
【0043】
  基準グローバル座標系で表される磁力計測定ベクトルm
wi→が実質的に一定なら、ベクトルm
si→とm
i→のなす角度
【数20】
はゼロとなる。規定されたウィンドウ内でのθ
iの変化が閾値未満であり、他の既知の磁力計干渉源(例えば震動源)が存在しない場合、オフセット補正された磁力計測定ベクトルm
i→はコンパス方位(heading)の算出に用いることができる。そうでなければ、合成磁力計測定ベクトルm
si→をコンパス方位の算出に用いることができる。ウィンドウは1つ以上の磁力計測定結果を包含する期間を含むことができる。θ
iの変化を算出するための例示的な擬似コードを以下に示す。
  //daltaAngleは、magnetic(例えばm
i→)と
  //gyroCompassMagnetic(例えばm
si→)との内角である。
  float deltaAngle = (magnetic.interiorAngle(gyroCompassMagnetic));
  //AngleVarianceはデータを合計するランニングバッファである。
  AngleVariance.addSample(deltaAngle*deltaAngle);
  // varAngleは変化の自乗である。
  float varAngle = (AngleVariance.getSum()/AngleVariance.getCurrentSize());
 
【0044】
  ある実施態様において、磁力計測定ベクトルの大きさの変化は、θ
iの角度変化に加えて、あるいはその代わりに用いることができる。大きさの変化が閾値を満足する場合、オフセット補正された磁力計測定ベクトルm
i→をコンパス方位の算出に用いることができる。そうでなければ、合成磁力計測定ベクトルm
si→をコンパス方位の算出に用いることができる。ベクトルの大きさ算出するための例示的な擬似コードを以下に示す。
  // x,y,zの3成分を有するベクトルの大きさを算出する
  mag() const {
    return sqrt( x*x + y*y + z*z);
  }
 
【0045】
  ある実施態様において、磁力計測定ベクトルの傾きの変化は、θ
iの変化および/または大きさの変化に加えて、あるいはその代わりに用いることができる。傾きの変化が閾値を満足する場合、オフセット補正された磁力計測定ベクトルm
i→をコンパス方位の算出に用いることができる。そうでなければ、合成磁力計測定ベクトルm
si→をコンパス方位の算出に用いることができる。磁力計測定ベクトルmagneticの傾きを算出するための擬似コードを以下に示す。
  // 磁気ベクトルmagnetic(例えばm
i→)と
  //重力ベクトルgravity(例えばg→)との間の傾き
  inclination = 90.0f - (magnetic.interiorAngle(gravity));
 
【0046】
  θ
iの変化、大きさの変化、および傾きの変化は、個別に、あるいは組み合わせて、磁力計モードおよび慣性モード(coasting mode)の一方を選択するためのモードセレクタを制御するものとして用いることができる。磁力計モードでは、オフセット補正された磁力計測定ベクトルm
i→をコンパス方位の算出に用いることができる。慣性モードでは、合成磁力計測定ベクトルm
si→をコンパス方位の算出に用いることができる。
 
【0047】
  モードセレクタはデータの観測によってトリガすることができる。モードセレクタはθ
iの変化、大きさの変化、および傾きの変化に関する様々な閾値を用いるように構成することができる。第1の閾値群の1つ以上が満たされた場合、コンパス方位は合成磁力計測定ベクトルm
si→を用いて算出することができ、第2の閾値群の1つ以上が満たされた場合、コンパス方位はオフセット補正された磁力計測定ベクトルm
i→を用いて算出することができる。磁力計モードから慣性モードへ切り替えるための例示的な擬似コードを以下に示す。
  // varMagnitudeは大きさの変化を測定可能である。varInclinationは傾きの変化を測定可能である。
  //  MaxAngleVariance、MaxMagnitudeVariance、および
  // MaxInclinationVarianceは個々の閾値である。
  if (varAngle > MaxAngleVariance || varMagnitude > MaxMagnitudeVariance ||
      varInclination > MaxInclinationVariance)) {
      ActivateCoastingMode();
  }
 
【0048】
  基準グローバル座標系における推定磁場ベクトルは記憶装置に保存されているため、周期的に、あるいは要求に応じて更新することができる。ある実施態様において、基準グローバル座標系における推定磁場ベクトルは、コンパス較正が向上した際に、あるいはθ
iの変化、大きさの変化、および傾きの変化の少なくとも1つが閾値を下回った際に更新することができる。基準グローバル座標系における推定磁場ベクトルを保存するための擬似コードを以下に示す。
  if (NOT coasting && compass calibrated) {
      if (compass calibration improved ||
        (magnetic.interiorAngle(gyroCompassMagnetic)<=
            MaxAngleUpdateThreshold) &&
        magnetic.mag() - gyroCompassMagnetic.mag() > Threshold ) {
        MagneticGlobalFrame = TransposeRotationMatrix.mult(magnetic);
      }
  }
 
【0049】
例示的なセンサ較正処理フロー
  
図3は、モデルパラメータの推定およびモデルパラメータに基づく推定姿勢の判定のための例示的な処理300のフローチャートである。処理300は、センサ測定較正システム100のような、機器のセンサデータ較正システムによって実施することができる。
 
【0050】
  ある実施態様において、処理300は、機器が静止しているかどうかの判定から開始されてよい(302)。例えば、動き検出器(例えば動き検出器104)は、機器が静止しているかどうか判定するために角速度センサ(例えばMEMSジャイロ)からの角速度を用いることができる。
図1に関して説明したように、ある実施態様では、機器が静止しているかどうかを判定するために、ウィンドウ平均された角速度の変化を閾値と比較することができる。他の実施態様では、機器が静止しているときを検出するために、加速度計112からの加速度のような、他のセンサデータを用いることができる。
 
【0051】
  機器が静止していると判定された場合(304)、較正の機会が存在し、現在の温度に関してウィンドウ平均されたバイアスベクトルを、角速度センサから出力される角速度データに基づいて算出することができる(306)。ウィンドウ平均されたバイアスベクトルおよび対応する温度は、較正データベースに保存することができる(308)。較正データベースに保存されたバイアスベクトルと温度の線形回帰(linear fit)から、モデルパラメータを算出することができる(310)。機器の推定姿勢はモデルパラメータを用いて判定することができる(312)。推定は、温度を推定するための1つと、姿勢を推定するための1つの、2つの独立した推定フィルタにおいて実施することができる。推定フィルタはカルマンフィルタ手法を用いて実現することができる。推定された姿勢は必要に応じて、磁力計測定値のような他のセンサ測定値における干渉を軽減するために用いることができる(314)。
 
【0052】
地球の磁界−概要
  
図4Aは、ある実施態様にかかる、地球磁場を説明する例示的なカーテシアン座標系を示す図である。地球磁場ベクトルF→は、直交成分X(北向き強度)、Y(東向き強度)およびZ(鉛直下向き強度、下向きに正)と、全強度F、水平強度H、伏角(または傾斜)I、および偏角(または磁気偏角)Dによって記述可能である。偏角、伏角および全強度は、以下の式を用い、直交成分から算出することができる。
【数21】
 
【0053】
  角度Φは、地球磁場ベクトルF→と、地球の重力加速度ベクトルg→(地球磁場ベクトルのZ成分と一直線上にある)との間の角度として定義できる。角度Φは伏角I、またはΦ=90°−Iから求めることができる。磁力計の向きとは無関係に、地球上の任意の位置において全強度Fは一定である。さらに、地磁気計の向きとは無関係に、地球上の任意の位置において角度Φは一定である。磁界強度の国際単位系(SI)単位として最も一般的に用いられるのはテスラである。
 
【0054】
  図4Bはある実施態様にかかる、例示的な2軸磁力計を示している。磁力計は2軸または3軸であってよく、ここで説明する処理はどちらのタイプのセンサにも当てはまる。簡略にするため、2軸磁力計のみ説明する。
 
【0055】
  ある実施態様において、モバイル機器で稼動するアプリケーションを含む様々なアプリケーションのために向きを算出するために、2軸磁力計センサ構成400を用いることができる。センサ構成400は、ボード、基板、または他の実装面上に直交するように取り付けられる2つの磁界センサ402,404を含むことができる。磁気センサ402,404は加速度計およびジャイロのような他のセンサとともに、あるいは単独で、集積回路(IC)パッケージに封入されてもよい。
 
【0056】
  センサ構成400は、干渉磁界を含むホストシステム環境に配置されうる。地球の磁場は弱い場(〜0.5ガウス)であるため、近くの(モバイル機器と同じ位置にある)磁石様物体(magnetic object)は、センサ402,404の正確な測定に干渉しうる。局所磁気干渉を隔離および除去するために較正手順を用いることができる。1つの方法は、地球磁場を正確に測定するためにセンサ測定値から減じることのできるオフセットまたはオフセットベクトルを求めることである。3軸センサについては、第3成分であるZも、同様にオフセットによって調整することができる。
 
【0057】
  2軸磁力計のための1つの例示的な較正手順において、各方位(heading)算出は、各測定値間の遅延が最小で取得可能な、複数の有効なXおよびYセンサ測定値を用いて行われるものと仮定することができる。このセンサ構成に関し、センサ402、404は互いに直角をなし、地表と同じ高さにある。慣例により、X軸の正方向の終端は北向きであり、Y軸の正方向の終端は東向きである。本例に関し、較正の間に、180度離れた2つの連続したセンサ測定値を取得する。これらの測定値は(X1, Y1)および(X2, Y2)と表すことができる。干渉場なしに測定された任意の方向の地球磁場は、オフセットペア(X
E, Y
E)で表すことができる。磁気干渉は(X
offset, Y
offset)で表すことができる。これらの数学的表現を用いて、2つのセンサ測定値は以下のように表現できる。
  X1 = X
E + X
offset                                             (28)
  Y1 = Y
E + Y
offset
  X2 = -X
E +X
offset
  Y2 = -Y
E+ Y
offset
 
【0058】
  磁力計がホストシステムに対して固定されている(例えば磁力計が携帯電話に取り付けられている)ものとすると、較正中に取得された測定値(X1, Y1)および(X2, Y2)はいずれも同じ干渉値(X
offset, Y
offset)を含むであろう。較正中に取得された磁力計の測定値は180度離れているため、測定値は符号が異なる同じ値である。上述の式をX
offsetおよびY
offsetについて解くと、以下が得られる。
  X
offset=(X1+X2)/2                                                             (29)
  Y
offset=(Y1+Y2)/2
 
【0059】
  センサ測定値の測定結果は、(X
E, Y
E)によって表すことができる。ある実施態様において、方位の基本計算はX
E、Y
Eおよび以下の式を用いて実行することができる。
  A
heading=arctan (Y
E, X
E)                                              (30)
  ここで、得られる方位A
headingは、信号X
EおよびY
Eの符号に基づいて正しい四元数にマッピングすることができる。磁力計によって提供された測定結果から算出されたA
headingは、真北に対する方位を特定するため、方位A
headingと偏角とを組み合わせることによって補正することのできる磁気方位である。
 
【0060】
  他の方法で実施することもできる。例えば、方位は、加速度計から得られる機器の向き、伏角、GPS、および他のタイプの補正または較正方法に基づいてさらに構成されてもよい。
 
【0061】
  オフセットが求まると、オフセットをセンサ測定値(X3, Y3)から差し引くことができる。
  X
E = X3 - X
offset                                                (31)
  Y
E = Y3 - Y
offset
 
【0062】
  磁力計が携帯電話機のようなモバイル機器に含まれる場合、局所磁気干渉は変化しうる。例えば、ユーザが自分の(磁力計を内蔵している)モバイル機器を車に取り付けた場合、車内の磁石様物体が局所干渉を変化させうる。そのため、較正オフセットが無効となり得る。オフセットが無効の場合、磁力計は新たなオフセットを生成するために再構成手順を実行することができる。この再較正手順は、頻繁に行うとユーザにとってつまらない処理となりうるほか、ユーザはモバイル機器を複数の角度で操作しなければならないだろう。
 
【0063】
  図4Cは、磁力計データおよび角速度データを用いて方位を求めるための例示的なシステム410のブロック図である。システム410はモバイル機器のサブシステムであってよい。システム410はモードセレクタを有することができる。モードセレクタ412は、磁力計モードと慣性モードとを切り替えるように構成することができる。切り替えは、モードセレクタ412に供給される磁力計測定結果の品質もしくは1以上の磁気干渉の通知に基づくことができる。
 
【0064】
  モードセレクタ412に供給される入力の第1セットには、
図1に関して説明した、オフセット補正済みの磁力計測定結果が含まれてよい。
 
【0065】
  モードセレクタ412に供給される入力の第2セットには、合成器414で生成された合成磁力計測定結果が含まれてよい。合成器414は、基準グローバル座標系における推定磁場ベクトルとモバイル機器の姿勢とを用いて合成磁力計測定結果を生成することができる。
 
【0066】
  モードセレクタ412はオフセット補正済みの磁力計測定結果の品質に基づいて、磁力計モードと慣性モードとの切り替えを実施することができる。例えば、オフセット補正済みの磁力計測定結果と合成磁力計測定結果との差(内角によって測定される)を測定することができる。この差の変化が算出される。変化が閾値以上になると、モードセレクタ412は慣性モードに切り替えることができる。変化が閾値未満であれば、モードセレクタ412は磁力計モードに切り替えることができる。
 
【0067】
  ある実施態様では、モードセレクタ412は磁力計測定結果に基づいて切り替えることができる。磁力計測定結果が閾値以上の大きさおよび/または傾きの変化を有する場合、モードセレクタ412は慣性モードに切り替えることができる。さもなければ、モードセレクタ412は磁力計モードに切り替えることができる。
 
【0068】
  ある実施態様において、モードセレクタ412は磁力計モードと慣性モードとを、通知に基づいて切り替えることができる。通知には、磁気干渉が発生したこと、または発生しそうなことの兆候が含まれてよい。通知に応答して、モードセレクタ412は磁力計モードから慣性モードへ切り替えることができる。例えば、モバイル機器のスピーカーが駆動されそうになると、通知がモードセレクタ412に送られてもよい。この通知を受けると、モードセレクタ412はスピーカーからの磁気干渉を避けるため、慣性モードに入ることができる。
 
【0069】
  オフセット補正済みの磁力計測定結果と合成磁力計測定結果のうち、モードセレクタ412に選択された一方が、方位算出器416に供給されてよい。方位算出器416はモバイル機器の向きを算出することができ、向きをアプリケーションプログラム(例えばコンパスプログラムや地図プログラム)に提供することができる。向きは音声または映像出力機器に出力されてもよい。
 
【0070】
  図4Dは、磁力計データおよび角速度データを用いて方位を求めるための例示的な処理430のフローチャートである。便宜上、処理430を、処理430を実施するシステム(例えばシステム410)に関して説明する。
 
【0071】
  システムはモバイル機器の向きを、磁力計データを用いて求めることができる(432)。磁力計データを用いて向きを求める方法には、
図1に関して上述したような、オフセット補正済みの磁力計測定結果を用いて向きを求めることが含まれてもよい。
 
【0072】
  システムは、磁力計データが不正確かも知れないという表示を受信することができる(434)。表示は、通知または、磁力計データの品質の判定を含んでよい。
 
【0073】
  磁力計データの品質を判定するため、システムは基準グローバル座標系における推定磁場ベクトルを記憶装置に保存することができる。システムは、正確であると判定されている過去の(historical)磁力計データ(例えば、時刻kにおける磁力計測定ベクトルm
k→)および、この正確な過去の磁力計データに時間的に対応する過去の角速度データ(例えば、時刻kにおけるモバイル機器の推定された姿勢A
kの逆数)とを用いて、基準グローバル座標系における推定磁場ベクトルを生成することができる。
 
【0074】
  現在の角速度データ(現在時刻iにおける、モバイル機器の現在推定姿勢A
i)および基準グローバル座標系における推定磁場ベクトルを用いて、モバイル機器は合成磁力計データを生成することができる。合成磁力計データは、時刻iにおける合成磁力計測定ベクトルm
si→を含んでよい。この合成磁力計データを用いて、システムはモバイル機器の向きを判定することができる。
 
【0075】
  ある実施態様において、磁力計データが不正確かもしれないとの表示を受信する手順は、磁力計データのサンプル内の複数の磁気ベクトルの大きさを判定する手順と、これら複数の大きさの変化が閾値を満たすことを判定する手順を含むことができる。磁気ベクトルはサンプルウィンドウ内で測定された磁気ベクトル(例えば直近に測定されたn個の磁気ベクトル)を含むことができる。
 
【0076】
  ある実施態様において、磁力計データが不正確かもしれないとの表示を受信する手順は、磁力計データのサンプル内の複数の磁気ベクトルの傾きを判定する手順と、これら複数の傾きの変化が閾値を満たすことを判定する手順を含むことができる。個々の傾きは、磁気ベクトルおよび局所重力加速度ベクトルとの間の角度に基づいて求めることができる。
 
【0077】
  磁力計データが不正確かもしれないという表示を受信する手順(434)は、磁気干渉が発生したか発生するであろうことの表示を受信する手順を含むことができる。磁気干渉は、モバイル機器の、少なくともある閾値量の電流が流れる構成部品によって生成されうる。ある実施態様において、磁気干渉は、モバイル機器のスピーカー、カメラ、またはバイブレーターによって生成されうる。
 
【0078】
  磁力計データが不正確かもしれないとの表示の受信に応答して、システムはモバイル機器の向きを角速度データを用いて判定する(436)ことができる。角速度データを用いてモバイル機器の向きを判定する手順は、合成磁力計データを用いてモバイル機器の向きを判定する手順を含むことができる。
 
【0079】
  システムは、ある精度範囲内で磁力計データが正確であると判定することができる(438)。磁力計データがある精度範囲内で正確であると判定する手順は、合成磁力計データ(例えば、合成磁力計測定ベクトルm
si→)のベクトルと、磁力計データ(例えば、磁力計測定ベクトルm
i→)のベクトルとの間の角度が、閾値を満たすかどうかを判定する手順を含むことができる。磁力計データが精度範囲内で正確であると判定されると、システムは磁力計データを用いたモバイル機器の向きを判定する(432)ように復帰することができる。磁力計データが精度範囲内で正確でないと判定される場合、システムは角速度を用いた向きの判定(436)を継続することができる。
 
【0080】
例示的な機器アーキテクチャ
  
図5は、
図1〜3に示したセンサ較正システム100および方法を実施するための例示的な機器ハードウェアアーキテクチャのブロック図である。機器はメモリインタフェース502、1つ以上のデータプロセッサ、画像プロセッサおよび/またはプロセッサ504と、周辺インタフェース506とを含むことができる。メモリインタフェース502、1つ以上のプロセッサ504、および/または周辺インタフェース506は、個別部品であってもよいし、1つ以上の集積回路に統合されてもよい。機器の様々な構成要素は、例えば、1つ以上の通信バスまたは信号線によって接続されてよい。
 
【0081】
  センサ、機器、サブシステムが、多数の機能を容易にするため、周辺インタフェース506に接続されてよい。例えば、角速度センサ510(例えばMEMSジャイロ)、磁力計センサ512である。地理的位置を提供するために、位置プロセッサ514(例えばGPS受信機)を周辺インタフェース506に接続することができる。モバイル機器の速度変化や移動方向の変化を判定するために使用可能なデータを提供するため、加速度計516もまた周辺インタフェース506に接続することができる。
 
【0082】
  カメラシステム520および光学センサ522、例えば電荷結合素子(CCD)または相補型金属酸化物半導体(CMOS)光学センサを、写真やビデオクリップの記録のようなカメラ機能を補助するために用いてもよい。
 
【0083】
  無線周波数受信機および送信機および/または光学(例えば赤外線)受信機および送信機を含むことができる1つ以上の無線通信サブシステム524を通じて、通信機能が補助されてもよい。通信サブシステム524の具体的な設計および実装は、モバイル機器が動作しようとする通信ネットワークに依存するものであってよい。例えば、モバイル機器はGSM(登録商標)ネットワーク、GPRSネットワーク、EDGEネットワーク、Wi-Fiネットワーク、およびブルートゥース(登録商標)ネットワークを通じて動作するように設計された通信サブシステム524を含むことができる。特に、無線通信サブシステム524は、モバイル機器が他の無線機器に対する基地局として構成されることを可能にするようなホスティングプロトコルを含むことができる。
 
【0084】
  オーディオサブシステム526は、音声認識、音声反復、デジタルレコーディング、および電話通信機能のような音声を利用可能な機能を補助するために、スピーカー528およびマイク530に接続されてよい。
 
【0085】
  I/Oサブシステム540は、タッチスクリーンコントローラ542および/または他の1以上の入力コントローラ544を含むことができる。タッチスクリーンコントローラ542はタッチスクリーン546やパッドに接続されてよい。タッチスクリーン546およびタッチスクリーンコントローラ542は、タッチスクリーン546と接触した1以上の点を判別するための、例えば、容量式、抵抗式、赤外線式、および表面弾性波技術といった複数の接触感知技術や、他の近接センサアレイまたは他の素子を用いて、接触および移動または損傷を検出することができる。
 
【0086】
  他の1以上の入力コントローラ544が、ボタン、ロッカースイッチ、サムホイール、赤外線ポート、USBポート、および/またはスタイラスのようなポインティングデバイスの1つ以上のような他の入力/コントロール機器548に接続されてよい。1以上のボタン(不図示)は、スピーカー528および/またはマイク530のボリュームコントロールのためのアップ/ダウンボタンを含むことができる。
 
【0087】
  ある実施態様において、あるボタンの第1の期間の押下が、タッチスクリーンまたはパッド546のロックを解除し、第1の期間よりも長い第2の期間の押下が、機器の電源をオンまたはオフしてもよい。ユーザが1以上のボタンの機能をカスタマイズすることができてもよい。タッチスクリーン546はまた、例えば、仮想またはソフトボタンおよび/またはキーボードを実現するために用いられてもよい。
 
【0088】
  ある実施態様において、機器は、MP3、AAC、およびMPEGファイルのような記録された音声および/または映像ファイルを提示してもよい。ある実施態様において、機器はMP3プレーヤの機能を含んでもよい。
 
【0089】
  メモリインタフェース502はメモリ550に接続されてよい。メモリ550は高速ランダムアクセスメモリおよび/または、1以上の磁気ディスク記憶装置、1以上の光学記憶装置、および/またはフラッシュメモリ(例えばNAND、NOR)のような不揮発性メモリを含んでよい。メモリ550は、ダーウィン、RTXC、LINUX(登録商標)、UNIX(登録商標)、OSX、WINDOWS(登録商標)、またはVxWorks(登録商標)のような組み込み型OSのようなオペレーティングシステム552を格納することができる。オペレーティングシステム552は、基本システムサービスを処理するための命令およびハードウェアに依存する処理を実行するための命令を含んでよい。ある実施態様において、オペレーティングシステム552はカーネル(例えばUNIXカーネル)を含んでもよい。
 
【0090】
  メモリ550は、1以上の他の機器、1以上のコンピュータおよび/または1以上のサーバとの通信を補助するための通信命令554もまた格納してよい。メモリ550は、グラフィカルユーザインタフェース処理を補助するためのグラフィカルユーザインタフェース命令556、センサ関連の処理および機能を補助するためのセンサ処理命令558、電話関連の処理および機能を補助するための電話命令560、電子メッセージに関する処理および機能を補助するための電子メッセージ処理命令562、ウェブブラウズに関する処理および機能を補助するためのウェブブラウズ命令564、メディア処理関連処理および機能を補助するためのメディア処理命令566、GPSおよびナビゲーション関連処理および機能を補助するためのGPS/ナビゲーション命令568、カメラ関係の処理および機能を補助するためのカメラ命令570を含んでよい。メモリ550はまた、セキュリティ命令、ウェブビデオに関する処理および機能を補助するためのウェブビデオ命令、および/またはウェブショッピング関連処理および機能を補助するためのウェブショッピング命令のような、他のソフトウェア命令(図示せず)を格納してもよい。ある実施態様において、メディア処理命令566は、音声処理関連処理および機能と、映像処理関連処理および機能をそれぞれ補助するための音声処理命令と映像処理命令に分けられる。アクティベーションレコードおよび国際移動体装置識別子(IMEI)または同様のハードウェア識別子もまた、メモリ550に格納されてよい。メモリ550は磁力計データ572および1以上の推定磁場ベクトル574を含むことができる。
 
【0091】
  上述の特定された命令および用途の各々は、上述した1以上の機能を実行するための一式の命令に対応してもよい。これらの命令は、個別のソフトウェアプログラム、手順、またはモジュールとして実装されなくてもよい。メモリ550はこれ以外の命令を含んでもよいし、より少ない命令を含んでもよい。さらに、モバイル機器の様々な機能は、1以上の信号処理および/または特定用途向け集積回路を含む、ハードウェアおよび/またはソフトウェアによって実施されてよい。
 
【0092】
  説明した機能はデジタル電子回路で、コンピュータハードウェア、ファームウエア、ソフトウェアで、またはそれらの組み合わせで実施可能である。機能は、プログラム可能なプロセッサによって実行するために、情報キャリア、例えば装置が読み取り可能な記憶装置に有形物として実現されるコンピュータプログラム製品、および入力データを操作して出力を生成することによって上述の実施態様を実行するために命令のプログアムを実行するプログラム可能なプロセッサによって実行可能な方法のステップにおいて実施可能である。あるいは/さらに、プログラム命令は、例えば装置が生成する電気的、光学的、あるいは電磁的な信号のような人工的に生成される信号である伝播信号であって、プログラム可能なプロセッサによって実行するために適切な受信機装置に送信するために情報を符号化するために生成される信号に符号化されてよい。
 
【0093】
  上述した機能は、データおよび命令を、データ記憶システム、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスとの間で送受信する1つ以上のプログラム可能なプロセッサを含んだ、プログラム可能なシステムで実行可能な1つ以上のコンピュータプログラムに好適に実施可能である。コンピュータプログラムは、直接的または間接的にコンピュータで所定の動作を実行したり所定の結果を得るために用いることのできる一式の命令である。コンピュータプログラムは、コンパイル言語やインタプリタ言語を含むプログラミング言語(例えばオブジェクティブC、Java(登録商標))の任意の形態で記述することができ、スタンドアロンなプログラムや、モジュール、部品、サブルーチン、またはコンピュータ環境で用いるのに好適な他の単位を含む、任意の形態で配置されてよい。
 
【0094】
  命令のプログラムの実行に好適なプロセッサは、一例として、任意の種類のコンピュータの、汎用および特定用途向けマイクロプロセッサの両方、および1つのプロセッサや複数のプロセッサまたはコアを含む。一般に、プロセッサは命令およびデータを読み出し専用メモリおよびランダムアクセスメモリの少なくとも一方から命令およびデータを受信するであろう。コンピュータの基本要素は、命令を実行するためのプロセッサと、命令およびデータを保存するための1つ以上のメモリである。一般に、コンピュータはさらに、内蔵ハードディスクおよびリムーバブルディスクのような磁気ディスク、光磁気ディスク、光ディスクなどを含む、1つ以上の大容量記憶装置を、含んだり、動作可能に接続してもよい。コンピュータプログラム命令およびデータを有形的に実現するための好適な記憶装置は、例えばEPROM、EEPROMおよびフラッシュメモリデバイスのような半導体メモリデバイス、内蔵ハードディスクやリムーバブルディスクのような磁気ディスク、光磁気ディスク、およびCD−ROMおよびDVD−ROMディスクを例とする、不揮発性メモリの任意の形態を含む。プロセッサおよびメモリは、複数のASIC(特定用途向け集積回路)を補助的に用いたり、ASICに組み込まれたりしてもよい。
 
【0095】
  ユーザとのインタラクションを提供するため、情報をユーザに表示するための、CRT(陰極管)やLCD(液晶ディスプレイ)モニタのような表示デバイスおよび、ユーザがコンピュータに入力することを可能にする、キーボードおよび、マウスまたはトラックボールのようなポインティングデバイスを有するコンピュータ上で実施されてよい。
 
【0096】
  機能はデータサーバのようなバックエンド要素を含むコンピュータシステム、アプリケーションサーバやインターネットサーバのようなミドルウェア要素を含むコンピュータシステム、またはグラフィカルユーザインタフェース、インターネットブラウザまたはその組み合わせを有するクライアントコンピュータのようなフロントエンド要素を含むコンピュータシステムで実施することができる。システムの構成要素は、通信ネットワークのような、デジタルデータ通信の任意の形態または媒体によって接続されてよい。通信ネットワークの例には、LAN、WAN、およびインターネットを形成するコンピュータおよびネットワークが含まれる。
 
【0097】
  コンピュータシステムはクライアントおよびサーバを含むことができる。クライアントおよびサーバは通常、互いに離れており、典型的にはネットワークを通じてやりとりする。クライアントとサーバの関係は、それぞれのコンピュータで稼働するコンピュータプログラムによって発現し、クライアント−サーバ関係を互いに有する。
 
【0098】
  上述した実施態様の1以上の機能およびステップはAPIを用いて実施されてもよい。APIは、サービスを提供し、データを提供し、あるいは動作および計算を実行する呼び出しアプリケーションと他のソフトウェアコード(例えばオペレーティングシステム、ライブラリルーチン、関数)との間でやりとりされる1以上のパラメータを定義することができる。
 
【0099】
  APIは、API仕様ドキュメントに定義された呼び出し手法に基づくパラメータリストまたは他の構造を通じて1以上のパラメータを送信または受信するプログラムコード内の1つ以上のコールとして実施されてよい。パラメータは定数、鍵、データ構造、オブジェクト、オブジェクトクラス、変数、データタイプ、ポインタ、行列、リスト、または他のコールであってよい。APIコールおよびパラメータは任意のプログラミング言語で実施されてよい。プログラム言語は、APIをサポートする関数にアクセスするためにプログラマが用いるであろう、ボキャブラリおよび呼び出し手法を定義することができる。
 
【0100】
  ある実施態様において、APIコールはアプリケーションに、アプリケーションを実行している機器の能力(入力能力、出力能力、処理能力、電力能力、通信能力など)をレポートすることができる。
 
【0101】
  複数の実施態様について説明してきた。しかし、様々な変更を行いうることを理解すべきである。例えば、他の実施態様を形成するために、1以上の実施態様が組み合わせられても、削除されても、変更されても、補充されてもよい。さらに別の例として、図に示した論理フローは、所望の結果を得るために、図示したとおりの特定の順序や、シーケンシャルな順序で実行されなくてもよい。加えて、記載した手順について、他のステップが提供されてもよいし、ステップが削除されてもよく、記載したシステムについて、他の構成要素を追加したり、構成要素を除去してもよい。従って、他の実施形態もまた以下の請求項の範囲に含まれる。