説明

状態推定装置

【課題】非線形カルマンフィルタを用いて高速且つ正確な状態推定を行う。
【解決手段】携帯機器1は、3次元地磁気センサ70、3次元加速度センサ80、CPU10、状態推定プログラム100を備え、状態推定プログラム100は、複数の磁気データq1〜qNの示す座標を近傍に有する球面の中心点cの座標を算出する中心点算出モジュール300と、複数の加速度データa1〜aMに基づいて、携帯機器の動きが安定しているか否かを判定する安定性判定モジュール400と、安定性判定モジュール400が行う判定結果が肯定である場合に初期ベクトルINIを算出する初期ベクトル生成モジュール500と、初期ベクトルINIを初期値とする状態ベクトルxを観測値ベクトルyを用いて更新するカルマンフィルタモジュール600とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、状態推定装置に関する。
【背景技術】
【0002】
地磁気の向きや、物体の姿勢等を算出する場合、地磁気センサからの出力結果のみに基づいて算出するよりも、地磁気センサの他に加速度センサや角速度センサ等の異種の物理量を測定する複数のセンサの出力結果を統合して算出した方が、短時間で正確な値を求めることができる。
【0003】
異種の物理量を測定する複数のセンサの出力を統合し、動的システムの状態を推定する方法として、非線形カルマンフィルタを用いる方法が知られている。例えば、特許文献1には、3軸の角速度センサ及び3軸の加速度センサと非線形カルマンフィルタとを実装した姿勢角計測装置が開示されている。また、非特許文献1には、3軸角速度センサ、3軸加速度センサ、及び3軸地磁気センサからの出力信号を、拡張カルマンフィルタやアンセンテッド変換を用いたシグマポイントカルマンフィルタを用いて統合し、姿勢を推定する方法が開示されている。
【0004】
一般的に、非線形カルマンフィルタは、動的システムの状態を表す複数の物理量の経時的な変化を推定する状態遷移モデルと、推定された動的システムの状態から、動的システムの有する複数のセンサが計測する値(観測値)を推定する観測モデルとを有する。そして、非線形カルマンフィルタは、推定された観測値と、複数のセンサが実際に測定する観測値との差分(観測残差)を用いて、動的システムの状態を表す複数の物理量を推定する値(状態変数)を要素とする状態ベクトルを逐次更新することにより、状態ベクトルの各要素の示す値を、実際の物理量(真値)に近づける演算を行う。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平9−5104号公報
【非特許文献】
【0006】
【非特許文献1】Wolfgang Gunthner, “Enhancing Cognitive Assistance Systems with Inertial Measurement Units”, Springer, 2008
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、非線形カルマンフィルタは、状態ベクトルと、状態ベクトルに基づいて算出される観測残差とを用いて、状態ベクトルを逐次更新する演算であるため、状態ベクトルの初期値の要素が真値から乖離した値に設定された場合、状態ベクトルの各要素が真値に近い値に収束するまでに長時間を要することがあり、更には、状態ベクトルの各要素が真値とは異なる不正確な値に収束することも起こり得る。
【0008】
本発明は、上述した点に鑑みてなされたものであり、真値に近い値を要素とする状態ベクトルの初期値を算出して非線形カルマンフィルタの演算を行うことで、地磁気の向きや物体の姿勢を高速且つ正確に推定することを解決課題とする。
【課題を解決するための手段】
【0009】
上述した課題を解決するため、本発明に係る状態推定装置は、磁界を発生させる部品を備えた機器に組み込まれる状態推定装置であって、互いに直交する3方向の磁気成分をそれぞれ検出して、3軸の座標系において表現される3次元のベクトルデータとして磁気データを順次出力する3次元磁気センサと、加速度を直交する3軸で検出して、3軸の座標系において表現される3次元のベクトルデータとして加速度データを順次出力する3次元加速度センサと、前記3次元磁気センサから順次出力される磁気データを蓄積する蓄積手段と、前記蓄積手段に蓄積された複数の前記磁気データに基づいて、前記部品の発する磁界を表す前記3次元磁気センサのオフセットの近似値を示す中心点の3軸の座標を算出する中心点算出手段と、複数の前記加速度データに基づいて、前記機器の動きが安定しているか否かを判定する安定性判定手段と、前記安定性判定手段の判定結果が肯定である場合、前記中心点の3軸の座標、前記磁気データ、及び、前記加速度データに基づいて、前記オフセットの推定値及び前記機器の姿勢を推定するベクトルを要素として含む初期ベクトルを生成する初期ベクトル生成手段と、前記初期ベクトルを初期値とする状態ベクトルを、前記3次元磁気センサ及び前記3次元加速度センサを含む前記機器に組み込まれた複数のセンサの出力を要素とする観測値ベクトルを用いて更新するカルマンフィルタ演算手段と、を備えることを特徴とする。
【0010】
カルマンフィルタの演算において、状態ベクトルの初期値(初期ベクトル)の各要素が真値から乖離した値である場合、状態ベクトルの各要素が真値に近い値に収束するまでに長い時間を必要とする。
この発明によれば、中心点算出手段が算出する中心点の座標に基づいて定められる3次元磁気センサのオフセット推定値と、機器の動きが安定していると判定されたときの磁気データ及び加速度データとに基づいて算出される姿勢の推定値とを、初期ベクトルの要素とする。
中心点算出手段が算出する中心点は、3次元磁気センサのオフセットの近似値を示す座標なので、オフセット推定値を真値に近い値に設定することができる。そして、3次元磁気センサのオフセット推定値及び磁気データを用いて、正確な地磁気の向きを得ることができる。
また、機器の動きが安定しているときの加速度データより重力加速度の向きを得ることができるため、重力加速度の向き及び地磁気の向きに基づいて、真値に近い姿勢の推定値を算出することができる。
すなわち、この発明によれば、初期ベクトルの各要素を真値に近い値に設定することができ、カルマンフィルタの演算において状態ベクトルの各要素を高速に真値に近い値に収束させることが可能となる。
【0011】
また、上述した状態推定装置において、前記中心点算出手段が前記中心点の算出に用いる複数の前記磁気データの取得を開始する前に、利用者に前記機器の姿勢を変化させるように促す第1の報知手段を、更に備えることが好ましい。
【0012】
3次元磁気センサは、地磁気と、部品の発する磁界とを検出する。3次元磁気センサの姿勢を変化させる場合、地磁気は、大きさは一定であるが向きが変化する磁界として検出される。一方、部品の発する磁界は、3次元磁気センサの姿勢をどのように変化させても、一定の向き及び大ききを有する磁界として検出される。従って、3次元磁気センサの姿勢を3次元的に変化させつつ検出された複数の磁気データが、3次元磁気センサに固定された座標系において示す座標は、部品の発する磁界を表すベクトルの示す座標を中心点とし地磁気の大きさを半径とする球面近傍に分布する。そして、当該球面の中心点の座標が、3次元磁気センサのオフセットの近似値を表す。
よって、複数の磁気データに基づいてオフセットの近似値を算出するためには、複数の磁気データの示す座標を近傍に有する球面を一意に特定することが必要であり、そのためには、複数の磁気データの示す座標が、2次元的に分布せず、3次元的な広がりを有して分布していることが必要である。
この発明によれば、利用者に機器の姿勢を変化させるように促す第1の報知手段を備えるため、複数の磁気データを取得する際に利用者が機器の姿勢を3次元的に変化させることが期待される。機器の姿勢を3次元的に変化させつつ取得した複数の磁気データの示す座標は、3次元的な広がりを有して分布する。従って、複数の磁気データの示す座標を近傍に有する球面を一意に特定することが可能となり、3次元磁気センサのオフセットの近似値を示す中心点の座標を算出することが可能となる。
【0013】
また、上述した状態推定装置において、前記中心点算出手段が前記中心点を算出した後に、利用者に前記機器の姿勢を変化させないように促す第2の報知手段を、更に備えることが好ましい。
【0014】
この発明によれば、利用者に機器の姿勢を変化させないように促す第2の報知手段を備えるため、利用者が機器を動かさず安定的な状態に置くことが期待される。
機器の動きが安定している場合、加速度データより重力加速度の向きを得ることができるため、重力加速度の向き及び地磁気の向きに基づいて、真値に近い姿勢の推定値を得ることが可能となる。
【0015】
また、上述した状態推定装置において、前記安定性判定手段は、複数の前記加速度データに基づいて基準加速度データを算出するローパスフィルタを備え、前記加速度データの示す座標と前記基準加速度データの示す座標との誤差を表す安定性指標を、所定個の前記加速度データの各々について算出し、前記安定性指標の全てが第1閾値以下である場合、前記機器の動きが安定していると判定することを特徴とすることが好ましい。
【0016】
この発明によれば、加速度データをローパスフィルタに通過させることで得られる基準加速度データと、所定個の加速度データとの誤差を表す所定個の安定性指標を算出することで、所定個の加速度データがほぼ一定の値を示すものであるか否かを判定する。
複数の加速度データの示す値の変動が小さくほぼ一定の値を示すとき、例えば機器が等加速度運動をする等の特殊な場合を除き、加速度データは重力加速度を示すものと看做すことができる。従って、本発明によれば、加速度データから重力加速度の向きを算出することができるか否かを判定し、判定結果が肯定である場合には、加速度データから算出された重力加速度の向きと地磁気の向きとに基づいて、真値に近い姿勢の推定値を得ることが可能となる。
【0017】
また、上述した状態推定装置において、前記安定性判定手段は、所定個の前記加速度データの示す3軸の座標の分散を、安定性指標として算出し、前記安定性指標が、第2閾値以下である場合、前記機器の動きが安定していると判定することを特徴とすることが好ましい。
【0018】
この発明によれば、所定個の前記加速度データの示す座標の分散を表す安定性指標を算出し、所定個の加速度データがほぼ一定の値を示すものであるか否かを判定する。従って、本発明によれば、加速度データから重力加速度の向きを算出することができるか否かを判定し、判定結果が肯定である場合には、加速度データから算出された重力加速度の向きと地磁気の向きとに基づいて、真値に近い姿勢の推定値を得ることが可能となる。
【図面の簡単な説明】
【0019】
【図1】本発明の実施形態に係る携帯機器の構成を示すブロック図である。
【図2】携帯機器の外観を示す斜視図である。
【図3】本発明の実施形態に係る3次元磁気センサが検出する磁界の概要を説明する概念図である。
【図4】本発明の実施形態に係る状態推定プログラムの処理の流れを示すフローチャートである。
【図5】本発明の実施形態に係る安定性判定モジュールを実行することで実現される機能を表す機能ブロック図である。
【図6】本発明の実施形態に係るカルマンフィルタモジュールを実行することで実現される機能を表す機能ブロック図である。
【発明を実施するための形態】
【0020】
<A.実施形態>
本発明の実施の形態について図面を参照して説明する。
【0021】
[1. 機器構成及びソフトウェア構成]
図1は、本発明の実施形態に係る携帯機器のブロック図であり、図2は携帯機器の外観を示す斜視図である。携帯機器1は、画面の姿勢に応じて地図などの画像を回転させることによって、画像によって表されている方位を現実空間の方位に追従させる機能を備える。この機能は、各種センサの出力に基づいてカルマンフィルタの演算を行い、携帯機器1の姿勢と、携帯機器1から見た地磁気Bgの向きとを推定することによって実現される。
【0022】
携帯機器1は、各種の構成要素とバスを介して接続され装置全体を制御するCPU10、CPU10の作業領域として機能するRAM(蓄積部)20、状態推定プログラム100等の各種のプログラムやデータを記憶したROM30、通信を実行する通信部40、画像を表示する表示部50、及びGPS部60を備える。
また、携帯機器1は、地磁気Bg等の磁気を検出して磁気データを出力する3次元磁気センサ70、加速度を検出して加速度データを出力する3次元加速度センサ80、及び角速度を検出して角速度データを出力する3次元角速度センサ90を備える。
【0023】
表示部50は、CPU10が状態推定プログラム100を実行することにより推定したシステムの状態に基づいて算出された地磁気Bgの向きや携帯機器1の姿勢μ等を、矢印等の画像により表示する。
GPS部60は、GPS衛星からの信号を受信して携帯機器1の位置情報(緯度、経度)を生成する。
【0024】
3次元磁気センサ70は、X軸磁気センサ71、Y軸磁気センサ72、及びZ軸磁気センサ73を備える。各センサは、MI素子(磁気インピーダンス素子)、MR素子(磁気抵抗効果素子)などを用いて構成することができる。磁気センサI/F74は、各センサからの出力信号をAD変換して磁気データqを出力する。この磁気データqは、x軸、y軸およびz軸の3成分によって表されるベクトルデータである。
【0025】
ところで、3次元磁気センサ70が搭載される携帯機器1は、着磁性を有する各種金属や、電気回路等、磁界を発生させる部品が備えられることが多い。このため、3次元磁気センサ70が出力するベクトルデータ(磁気データq)は、地磁気Bgを表すベクトルの他に、携帯機器1に搭載された部品が発する磁界(内部磁界Bi)を表すベクトルも含む値となる。従って、地磁気Bgの向きを正確に知るためには、3次元磁気センサが出力するベクトルデータ(磁気データq)から、携帯機器1の部品が発する内部磁界Biを表すベクトルを取り除く補正処理が必要となる。
【0026】
補正処理を説明するための前提として、まず、地磁気Bg及び内部磁界Biの性質について説明する。
図3(A)に示すように、地磁気Bgは、磁極北に向かう水平成分と伏角方向の鉛直成分を有する磁界であり、地上に固定された座標系である地上座標系Σにおいて、一定の向き及び大きさを有するベクトルBgとして表される。一方、内部磁界Biは、携帯機器1の部品が発する磁界であり、携帯機器1に対して一定の方向を向いた、一定の大きさの磁界である。つまり、内部磁界Biは、地上座標系Σにおいて、携帯機器1の姿勢μの変化に連動して向きを変える、一定の大きさのベクトルBi(μ)として表される。
【0027】
ここで、携帯機器1(厳密には3次元磁気センサ70)に固定された座標系であるセンサ座標系Σを導入し、磁気データqを、センサ座標系Σ上の座標として表現する。より具体的には、磁気データqが示すセンサ座標系Σ上の座標のうち、x軸成分は、X軸磁気センサ71からの出力値であり、y軸成分は、Y軸磁気センサ72からの出力値であり、z軸成分は、Z軸磁気センサ73からの出力値である。
このようなセンサ座標系Σから見た場合、地磁気Bgは、携帯機器1の姿勢μに連動して向きを変える、一定の大きさのベクトルBg(μ)として表され、内部磁界Biは、一定の向き及び大きさを有するベクトルBiとして表される。
従って、地上座標系Σから見た携帯機器1の姿勢μをμ〜μと変化させつつ取得した複数の磁気データq〜qは、センサ座標系Σにおいて、図3(B)に示すように、内部磁界Biを表すベクトルBiの示す座標を中心とし、地磁気Bgの大きさを半径とする、球面S上に分布する。そして、磁気データqの示す座標から、内部磁界Biを表すベクトルBiの示す座標を減算することにより、センサ座標系Σにおける地磁気Bgの向きが特定される。
このように、検出対象である地磁気Bgの正確な向きを特定するために、補正処理において、3次元磁気センサ70から出力される磁気データqから取り除かれる内部磁界Biを表すベクトルを磁気センサのオフセットcOFFと呼ぶ。
なお、複数の磁気データq〜qの示す座標は、3次元磁気センサ70の測定誤差を考慮すると、球面S上には分布せず、球面Sの近傍に分布する。従って、複数の磁気データq〜qの示す座標を近傍に有する球面Sの中心点cの座標は、内部磁界Biを表すベクトルBiの示す座標の近似値(すなわち、オフセットcOFFの近似値)となる。
【0028】
3次元加速度センサ80は、X軸加速度センサ81、Y軸加速度センサ82、及びZ軸加速度センサ83を備える。各センサは、ピエゾ抵抗型、静電容量型、熱検知型などのような検知方式であってもよい。加速度センサI/F84は、各センサからの出力信号をAD変換して加速度データaを出力する。この加速度データaは、3次元加速度センサ80と一体となって運動する携帯機器1に固定された座標系における慣性力と重力との合力を、x軸、y軸及びz軸の3成分を有するベクトルとして示すデータである。従って、携帯機器1が静止状態または等速直線運動状態にあれば、加速度データaは、携帯機器1に固定された座標系において重力加速度の大きさと方向とを示すベクトルデータとなる。
【0029】
3次元角速度センサ90は、X軸角速度センサ91、Y軸角速度センサ92、及びZ軸角速度センサ93を備える。角速度センサI/F94は、各センサからの出力信号をAD変換して角速度データgを出力する。角速度データgは、各軸の回りの角速度を示すベクトルデータである。
【0030】
CPU10は、ROM30に格納されている状態推定プログラム100を実行することによって、携帯機器1の姿勢や磁気センサのオフセット等のシステムの状態を表す複数の物理量を推定する。すなわち、携帯機器1は、CPU10が状態推定プログラム100を実行することにより、状態推定装置として機能する。
【0031】
状態推定プログラム100は、バッファ管理モジュール200、中心点算出モジュール300、安定性判定モジュール400、初期ベクトル生成モジュール500、及びカルマンフィルタモジュール600等のモジュール群で構成される。
バッファ管理モジュール200は、3次元磁気センサ70から順次出力される磁気データqをバッファに蓄積する。これら複数の磁気データの蓄積手段としては、RAM20を用いる。
中心点算出モジュール300は、RAM20に蓄積された複数の磁気データq〜qに基づいて、センサ座標系Σにおいて複数の磁気データq〜qの示す座標を近傍に有する球面Sの中心点cの座標を算出する。
安定性判定モジュール400は、3次元加速度センサ80から出力される加速度データaに基づいて、携帯機器1の動きが安定しているか否かを判定する。
初期ベクトル生成モジュール500は、安定性判定モジュール400による判定結果が肯定である場合に、初期ベクトルINIを生成する。
カルマンフィルタモジュール600は、初期ベクトルINIを初期値とする状態ベクトルxを、観測値ベクトルyに基づいて更新する演算(非線形カルマンフィルタの演算)を実行することで、システムの状態を推定する。
【0032】
ここで、状態ベクトルxとは、複数の状態変数を要素とするベクトルである。状態ベクトルxの要素である複数の状態変数の各々は、非線形カルマンフィルタが推定するシステムの状態を示す複数の物理量を表す。すなわち、状態ベクトルxは、非線形カルマンフィルタが推定するシステムの状態を表すベクトルである。
本実施形態は、状態ベクトルxの要素(状態変数)として、携帯機器1の姿勢μ、地磁気の強さr、地磁気の伏角φ、携帯機器1の角速度ω、角速度センサ91〜93のオフセット推定値b、及び磁気センサ71〜73のオフセット推定値cを採用し、これらを推定の対象とする。
時刻T=kにおける状態ベクトルxは、以下の式(1)で表される。なお、各状態変数の右下に付された添え字「k」は、当該状態変数が時刻T=kにおける値であることを表す。
【数1】

【0033】
ここで、地磁気の強さrはスカラーであり、地磁気の伏角φはスカラーであり、角速度ωは3次元ベクトルであり、角速度センサのオフセット推定値bは3次元ベクトルであり、磁気センサのオフセット推定値cは3次元ベクトルである。
また、姿勢μは、クォータニオンを用いて表現される。クォータニオンとは、物体の姿勢(回転状態)を表す4次元数である。例えば、センサ座標系Σの各軸と、地上座標系Σの各軸とが一致する姿勢μを基準姿勢と定義し、基準姿勢をμ=(0、0、0、1)と表現する。このとき、携帯機器1の任意の姿勢μは、基準姿勢に対して単位ベクトルρの方向を回転軸として角度ψだけ回転した姿勢として表現できる。回転後の姿勢μは、クォータニオンを用いて、式(2)で与えられる。
【数2】

【0034】
観測値ベクトルyとは、3次元磁気センサ70から出力される磁気データq、3次元加速度センサ80から出力される加速度データa、及び、3次元角速度センサ90から出力される角速度データgを要素とするベクトルである。
時刻T=kにおける観測値ベクトルyは式(3)で与えられる。
【数3】

【0035】
ところで、非線形カルマンフィルタの演算は、状態ベクトルと観測値ベクトルとに基づいて算出される観測残差を用いて、状態ベクトルを周期的に更新する演算であるため、状態ベクトルの初期値の各要素(各状態変数)の示す値が、真値から乖離した値である場合、状態ベクトルの各要素を真値に近い値に収束させるのに長い時間を要することがある。
また、非線形カルマンフィルタの演算は、非線形演算であるため、状態ベクトルの初期値の各要素が真値から大きく乖離した値である場合、状態ベクトルの更新を繰り返しても、状態ベクトルの各要素が真値(または、真値に近い値)に収束せずに、真値とは異なる値に収束することがある。
従って、非線形カルマンフィルタの演算において、システムの状態を正確且つ高速に推定するためには、状態ベクトルxの初期値(つまり初期ベクトルINI)の各要素を、真値に近い値に設定する必要がある。
ここで、「真値」とは、状態ベクトルxの各要素に対応する実際の物理量を表す値である。また、「状態ベクトルの真値」とは、状態ベクトルxの各要素を真値としたときのベクトルである。
【0036】
[2. 状態推定装置の処理フロー]
図4は、CPU10が実行する状態推定プログラム100の処理の流れを表すフローチャートである。以下では、CPU10が状態推定プログラム100を実行したときの処理の流れを、図4に加えて、当該フローチャートの各ステップが実行された時に実現される機能の詳細を説明する図5乃至図6を参照しつつ、説明する。
【0037】
まず、ステップS101において、CPU10は、初期化処理を実行する。具体的には、CPU10は、バッファ管理モジュール200を呼び出すことで、RAM20に記憶した磁気データqの全部を廃棄する。なお、本実施形態では、CPU10は、磁気データqの全部を廃棄するが、RAM20に蓄積されたデータのうち古い方から一定割合のデータのみを廃棄しても良い。
【0038】
ステップS102において、CPU10は、第1の報知を行う。具体的には、CPU10は、表示部50に画像や動画等を表示させることで、携帯機器1の利用者に対して、携帯機器1の姿勢を3次元的に変化させるように指示する。すなわち、CPU10は、ステップS102の第1の報知を行うことにより、第1の報知手段として機能する。
なお、本実施形態では、CPU10は、第1の報知を、表示部50を用いて画像や動画等を表示することにより行うことを想定しているが、音声等を用いて行ってもよい。
【0039】
ステップS103において、CPU10は、磁気データ蓄積処理を実行する。具体的には、CPU10は、バッファ管理モジュール200を呼び出すことにより、3次元磁気センサ70から順次出力されるN個の磁気データq〜qを、RAM20に格納する(ここで、Nは、後述する中心点算出処理において、精度よく中心点cを導出するために必要な磁気データの規定測定回数を表す5以上の自然数)。すなわち、CPU10は、ステップS103の磁気データ蓄積処理を実行することにより、蓄積手段として機能する。
【0040】
次に、ステップS104において、CPU10は、中心点算出処理を実行する。具体的には、CPU10は、中心点算出モジュール300を呼び出すことにより、RAM20に蓄積された複数の磁気データq〜qの示す座標を近傍に有する球面Sの中心点cの座標を算出する。すなわち、CPU10は、ステップS104の中心点算出処理を実行することにより、中心点算出手段として機能する。
なお、前述の通り、中心点cの座標を示すベクトルは、オフセットcOFFの近似値である。中心点cの座標の算出は、公知の方法を適宜適用して行えばよい。例えば、本件出願人が、特開2007−240270号公報で開示している方法等を適用してもよい。
【0041】
次に、ステップS105において、CPU10は、第2の報知を行う。具体的には、CPU10は、表示部50に画像や動画等を表示させることで、携帯機器1の利用者に対して、携帯機器1を動かさないように指示する。すなわち、CPU10は、ステップS105の第2の報知を行うことにより、第2の報知手段として機能する。
なお、本実施形態では、CPU10は、第2の報知を、表示部50を用いて画像や動画等を表示することにより行うことを想定しているが、音声等を用いて行ってもよい。
【0042】
その後、ステップS106において、CPU10は、安定性判定処理を実行する。具体的には、CPU10は、安定性判定モジュール400を呼び出すことにより、3次元加速度センサ80から出力される加速度データaに基づいて、携帯機器1の動きが安定しているか否かを判定する。すなわち、CPU10は、ステップS106の安定性判定処理を実行することにより、安定性判定手段として機能する。
【0043】
図5は、CPU10が、ステップS106の安定性判定処理を実行することで実現される安定性判定手段の機能を表す機能ブロック図である。
図5に示すように、安定性判定手段には、平滑化手段410、安定性指標算出手段420、及び条件判定手段430が含まれる。
【0044】
平滑化手段410は、3次元加速度センサ80から順次出力される加速度データaの各成分を、ローパスフィルタを通して平滑化することで、基準加速度データaを算出する。
ここで、ローパスフィルタには、公知のフィルタを適宜適用すればよい。例えば、FIR(Finite impulse response)フィルタ、または、IIR(Infinite impulse response)フィルタを用いてもよい。
なお、本実施形態では、平滑化手段410への加速度データaの入力の開始は、CPU10がステップS106の安定性判定処理を開始するタイミングであるが、それ以外のタイミングで入力を開始してもよい。例えば、CPU10がステップS101の初期化処理を開始するタイミングで、平滑化手段410への加速度データaの入力を開始してもよい。この場合、CPU10は、ステップS101の初期化処理を開始するタイミングで、ステップS106の安定性判定処理を開始して、平滑化手段410を機能させる。
【0045】
次に、安定性指標算出手段420は、3次元加速度センサ80から出力される加速度データaと、平滑化手段410から出力される基準加速度データaとに基づいて、安定性指標αを算出する。
時刻tにおいて算出される安定性指標αは、以下の式(4a)で表される。なお、式(4b)に示される加速度データatは、時刻tにおける加速度データであり、式(4c)に示される基準加速度データaCtは、時刻tにおける基準加速度データである。
【数4】

【0046】
安定性指標算出手段420は、時刻t=1から時刻t=Mまでの期間に、M個の安定性指標α(t=1、…、M)を算出する。
ここで、Mは、1以上の任意の自然数である。なお、携帯機器1の動きが安定しているか否かを、より厳密に判定することが必要な場合には、Mを、できるだけ大きな自然数に設定すればよい。
【0047】
条件判定手段430は、以下の式(5)に示すように、M個の安定性指標α(t=1、…、M)の全てが、第1閾値αTH以下であるか否かを判定する。
【数5】

【0048】
このように、CPU10は、ステップS106の安定性判定処理を実行することにより、まず、M個の安定性指標αを算出し、次に、M個の安定性指標αの全てが第1閾値αTH以下であるか否かを判定する。そして、CPU10は、安定性判定処理における判定結果が肯定である場合、処理をステップS107に進める。一方、CPU10は、安定性判定処理における判定結果が否定である場合、処理をステップS105に戻す。
【0049】
次に、ステップS107において、CPU10は、初期ベクトル生成処理を実行する。具体的には、CPU10は、初期ベクトル生成モジュール500を呼び出すことにより、時刻t=M(つまり、条件判定手段430の判定結果が肯定となったタイミング)に3次元磁気センサ70から出力される磁気データq、時刻t=Mに3次元加速度センサ80から出力される加速度データa、及び、ステップS104において算出される中心点cの座標に基づいて、初期ベクトルINIを生成する。すなわち、CPU10は、ステップS107の初期ベクトル生成処理を実行することにより、初期ベクトル生成手段として機能する。
前述の通り、初期ベクトルINIは、状態ベクトルxの初期値、つまり時刻T=0における状態ベクトルxであり、姿勢μの初期値μ、地磁気の強さrの初期値r、地磁気の伏角φの初期値φ、角速度ωの初期値ω、角速度センサのオフセット推定値bの初期値bO,0、及び磁気センサのオフセット推定値cの初期値cO,0を要素として含む、以下の式(6)により示されるベクトルである。なお、以下では、CPU10は、初期ベクトル生成処理を実行することにより初期ベクトルINIを生成するタイミングを、時刻T=0と表現する。時刻T=0は、時刻t=Mと等しい時刻である。
【数6】

【0050】
以下、初期ベクトルINIの生成方法を、具体的に説明する。
まず、時刻T=0に3次元磁気センサ70から出力される磁気データqは、地上座標系Σから地磁気Bgを表したベクトルBgと、3次元磁気センサ70のオフセット推定値cの初期値cO,0とを用いて、以下の式(7)で表される。
ここで、行列B(μ)は、携帯機器1が姿勢μである場合に、地上座標系Σにおいて表現されたベクトルを、センサ座標系Σで表現するための座標変換行列であり、以下の式(8)で表される。また、時刻T=0における地磁気Bgを地上座標系Σから表したベクトルBgは、地磁気の強さrの初期値rと、地磁気の伏角φの初期値φとを用いて、以下の式(9)で表される。なお、本実施形態では、地上座標系Σを、y軸が磁極北を向き、z軸が鉛直上を向くように定める。
また、3次元磁気センサ70のオフセット推定値cの初期値cO,0には、以下の式(10)に示すように、中心点cの座標が設定される。
【数7】

【0051】
一方、時刻T=0に3次元加速度センサ80から出力される加速度データaは、携帯機器1の動きが安定していれば(例えば、携帯機器1が静止状態または等速直線運動状態にあれば)、以下の式(11)で表される。なお、ベクトルRVは、地上座標系Σにおいて重力加速度を表したベクトルを、重力加速度の大きさで正規化した3次元のベクトルであり、以下の式(12)で表される。
【数8】

【0052】
センサ座標系Σにおいて地磁気Bgの向き及び大きさを表すベクトルBgは、磁気データqと3次元磁気センサ70のオフセット推定値cとを用いて、以下の式(13a)によって表すことができる。
携帯機器1の姿勢は、以下の式(13a)に示すベクトルBgと、加速度データaとを用いて、以下の式(13b)に示す3行3列の行列Aとして表現することができる。そして、行列Aにより表された携帯機器1の姿勢を、クォータニオンを用いて表現し直すことにより、携帯機器1の姿勢μを算出することができる。つまり、姿勢μの初期値μは、以下の式(13a)及び式(13b)に対して、時刻T=0に3次元加速度センサ80から出力される加速度データaと、磁気センサのオフセット推定値cの初期値cO,0とを適用することにより算出される行列Aに基づいて、求めることができる。
なお、3行3列の行列Aからクォータニオンへの変換は、公知の方法を適宜用いて行えば良い。行列Aは、式(8)に示した行列B(μ)の逆行列であるので、行列Aの各成分と行列B(μ)の逆行列の各成分とを比較することで、クォータニオンを用いて表される姿勢μの各要素を計算すればよい。例えば、以下の公知文献に記載された方法を用いて、行列Aから姿勢μを算出することもできる。
Malcolm D. Shuster and Gregory A. Natanson, “Quaternion Computation from a Geometric Point of View", The Journal of the Astronautical Sciences, Vol. 41, No. 4, October-December 1993, pp. 545-556.
【数9】

【0053】
地磁気の強さrの初期値rは、以下の式(14a)に基づいて算出することができる。具体的には、地磁気の強さrの初期値rは、まず、式(13a)に対して磁気データqと磁気センサのオフセット推定値cの初期値cO,0とを代入してベクトルBgを求め、次に、ベクトルBgを以下の式(14a)に代入することで算出される。
また、地磁気の伏角φの初期値φは、ベクトルBgの各要素を以下の式(14b)で表した場合、以下の式(14c)及び式(14d)に基づいて算出することができる。
【数10】

【0054】
角速度ωの初期値ωは、例えば、携帯機器1が静止していることを仮定して、「0」に設定する。また、角速度センサのオフセット推定値bの初期値bO,0は、通常「0」近辺に調整されているため、「0」に設定する。
【0055】
このように、CPU10は、ステップS107の初期ベクトル生成処理を実行することにより、姿勢μの初期値μ、地磁気の強さrの初期値r、地磁気の伏角φの初期値φ、角速度ωの初期値ω、角速度センサのオフセット推定値bの初期値bO,0、及び磁気センサのオフセット推定値cの初期値cO,0を要素とするベクトルである初期値INIを生成し、これを出力する。
【0056】
次に、ステップS108において、CPU10は、カルマンフィルタ演算処理を実行する。具体的には、CPU10は、カルマンフィルタモジュール600を呼び出すことにより、非線形カルマンフィルタの演算を行い、システムの状態を推定する。すなわち、CPU10は、ステップS108のカルマンフィルタ演算処理を実行することにより、カルマンフィルタ演算手段として機能する。
以下、非線形カルマンフィルタの演算の詳細な内容について説明する。
【0057】
[3. 非線形カルマンフィルタによる演算]
一般的にカルマンフィルタは、動的システムの状態の経時的な変化を表す状態遷移モデルを用いて、ある時刻(時刻T=k−1)のシステムの状態を示す状態ベクトルxk−1から単位時間が経過した後(時刻T=k)の状態ベクトルxを推定する。この推定値を、推定状態ベクトルxと称する。そして、カルマンフィルタは、各種センサからの出力を要素とする観測値ベクトルyと状態ベクトルxとの関係を表す観測モデルを用いて、推定状態ベクトルxから観測値ベクトルyを推定する。この推定値を、推定観測値ベクトルyと称する。
次に、カルマンフィルタは、推定観測値ベクトルyと、実際の観測値を要素とする観測値ベクトルyとの差分を観測残差zとして算出し、観測残差zに基づいてカルマンゲインKを算出する。さらに、カルマンフィルタは、観測残差z、カルマンゲインK、及び、推定状態ベクトルxを用いて、状態ベクトルxk−1を更新することにより、更新後の状態ベクトルxを算出する。
以上のような状態ベクトルxの更新を繰り返すカルマンフィルタの演算により、状態ベクトルxの各要素を実際の物理量を正確に表した値(真値)に近い正確な値へと近付ける。
【0058】
なお、詳細は後述するが、本実施形態ではカルマンフィルタとして、非線形カルマンフィルタであるシグマポイントカルマンフィルタを用いる。シグマポイントカルマンフィルタは、まず、状態ベクトルxk−1の周囲に複数のシグマポイントχk−1を設定し、これらの複数のシグマポイントχk−1を状態遷移モデルに適用することで、単位時間経過後の複数のシグマポイントを推定する。この推定された複数のシグマポイントを、推定シグマポイントχと称する。次に、シグマポイントカルマンフィルタは、複数の推定シグマポイントχの平均を算出することにより、推定状態ベクトルxを求める。従って、推定観測値ベクトルyは、厳密には、推定状態ベクトルxの周辺に存在する複数の推定シグマポイントχに基づいて算出される。
【0059】
本実施形態における、非線形カルマンフィルタの状態遷移モデルは以下に示す式(15)で与えられ、観測モデルは以下に示す式(16)で与えられる。なお、本実施形態では、式(15)に現れる関数f及び式(16)に現れる関数hは、非線形の関数である。
【数11】

【0060】
ここで、状態ベクトルxはdim(x)次元のベクトルであり、観測値ベクトルyはdim(y)次元のベクトルである。なお、本実施形態では、dim(x)=15であり、dim(y)=9である。また、式(15)に現れるプロセスノイズw及び式(16)に現れる観測ノイズvは0を中心とするガウスノイズである。
式(15)は、時刻T=kにおける状態ベクトルxが、時刻T=k−1における状態ベクトルxk−1を関数fに代入して得られた値と、時刻T=k−1におけるプロセスノイズwk−1とを加算することにより推定されることを示している。
また、式(16)は、時刻T=kにおける観測値ベクトルyが、時刻T=kにおける状態ベクトルxを関数hに代入して得られる値と、時刻T=kにおける観測ノイズvとを加算することにより推定されることを示している。
なお、プロセスノイズwの共分散をQ、観測ノイズvの共分散をRと表す。
【0061】
時刻T=kにおける観測残差zは、実際の観測値ベクトルyと、推定観測値ベクトルyとに基づいて定められるベクトルであり、以下に示す式(17)で表される。カルマンフィルタは、以下の式(19)に示すように、観測残差z、推定状態ベクトルx、及び、式(18)に示すカルマンゲインKを用いて、更新後の状態ベクトルxを算出する。また、カルマンフィルタは、以下の式(20)に示すように、状態ベクトルxの推定誤差の共分散Pを更新する。
ここで、Pは、推定状態ベクトルxの推定誤差の共分散であり、Pは、更新後の状態ベクトルxの推定誤差の共分散である。また、Pyyは、観測残差zの共分散であり、Pxyは、推定状態ベクトルxと、推定観測値ベクトルyとの相互共分散行列である。
【数12】

【0062】
なお、推定観測値ベクトルyは、式(16)に示すように、状態遷移モデルを用いて算出された推定状態ベクトルx(厳密には、推定シグマポイントχ)を、観測モデルに適用することで算出される値である。よって、推定観測値ベクトルyと実際のセンサ出力に基づく観測値ベクトルyとの差分である観測残差zは、推定状態ベクトルxと実際の物理量を正確に表した値(真値)との近似度を示す値である。
式(19)に示すように、観測残差zを用いて、推定状態ベクトルxを、更新後の状態ベクトルxへと更新することにより、状態ベクトルxの各要素を真値に近い値へと近付けることができる。
【0063】
本実施形態に係る状態推定装置は、アンセンテッド変換を用いたシグマポイントカルマンフィルタを用いて、カルマンフィルタ演算処理を実行する。
図6は、CPU10がカルマンフィルタモジュール600を呼び出すことで実現されるカルマンフィルタ演算手段の機能を表す機能ブロック図である。
【0064】
図6に示すように、遅延部610は、加算器690から出力される更新後の状態ベクトルxを、単位時間(時刻T=k−1から時刻T=kに相当する時間)だけ遅延させることで、状態ベクトルxk−1を生成し、これを、シグマポイント生成部620に対して出力する。なお、初回の演算(時刻T=0)では、遅延部610は、初期ベクトル生成モジュール500が出力する初期値INIを、状態ベクトルxk−1に適用する。
【0065】
シグマポイント生成部620は、「dim(x)」行「dim(x)」列の共分散行列Pk−1及びQk−1を用いて、「2dim(x)+1」個のシグマポイントを生成する。
具体的には、まず、複数のシグマポイントの平均に対して、平均のまわりのシグマポイントの広がりを表すスケーリングパラメータλを用いて、式(21)及び式(22)に示すベクトルσを定義する。
【数13】

【0066】
このとき、シグマポイント生成部620は、ベクトルσk−1と状態ベクトルxk−1とに基づいて、式(23)及び式(24)で示される「2dim(x)+1」個のシグマポイントχk−1を生成する。
【数14】

【0067】
状態遷移モデル部630は、式(25)に示すように、時刻T=k−1における「2dim(x)+1」個のシグマポイントχk−1(j)の各々を、状態遷移モデルに適用することにより、時刻T=kにおける「2dim(x)+1」個の推定シグマポイントχ(j)を算出する。
【数15】

【0068】
次に、平均算出部640は、式(26)に示すように、時刻T=kにおける「2dim(x)+1」個の推定シグマポイントχの平均値を計算することで、推定状態ベクトルxを算出する。
【数16】

【0069】
また、平均算出部640は、式(27)に示す、推定状態ベクトルxの誤差の共分散Pを算出する。
【数17】

【0070】
一方、観測モデル部650は、式(28)に示すように、時刻T=kにおける「2dim(x)+1」個の推定シグマポイントχ(j)の各々を、観測モデルに適用することにより、「2dim(x)+1」個の推定観測値γ(j)を算出する。
【数18】

【0071】
そして、平均処理部660は、式(29)に示すように、「2dim(x)+1」個の推定観測値γ(j)の平均を演算することにより、推定観測値ベクトルyを算出する。
【数19】

【0072】
次に、平均処理部660は、式(30)に示す観測残差の共分散Pyyを算出する。
【数20】

【0073】
減算器670は、式(17)に示したように、観測値ベクトルyと、推定観測値ベクトルyとの差分として、観測残差zを算出する。
カルマンゲイン付与部680は、式(31)に示す相互共分散行列Pxyを算出する。そして、カルマンゲイン付与部680は、式(18)に示したように、残差の共分散Pyyと、相互共分散行列Pxyとに基づいて、カルマンゲインKを算出し、式(19)の右辺第2項(K)の演算を実行する。また、カルマンゲイン付与部680は、式(20)に示したように、状態ベクトルxの推定誤差の共分散Pを、PからPに更新する。
【数21】

【0074】
加算器690は、式(19)に示したように、推定状態ベクトルxと、カルマンゲイン付与部680から出力される式(19)の右辺第2項(K)とを加算することにより、更新後の状態ベクトルxを算出する。
【0075】
次に、状態遷移モデル部630における演算で用いる状態遷移モデルについて説明する。
【0076】
本実施形態に係る状態遷移モデルにおいて、状態ベクトルxを構成する状態変数のうち、姿勢μについての状態遷移は、式(32)により定義される。式(32)は、時刻T=k−1における姿勢μk−1から、単位時間経過後の時刻T=kにおける姿勢μを推定する演算を表す。ここで、μは、時刻kにおける推定状態ベクトルxのうち、姿勢μを表す状態変数に対応する要素である。
なお、式(32)の右辺の演算子Ωは、式(33)により定義される。ここで、I3×3は3行3列の単位行列を表す。3次元ベクトルl=(l,l,l)に対して、演算子[l×]は、式(34)で定義される。また、測定時間間隔(時刻T=k−1から時刻T=kまでの間隔)をΔtで表し、時刻T=kにおける更新後の状態ベクトルxのうち角速度を表す状態変数に対応する要素をωで表したとき、演算子Ωを構成する成分Ψは、式(35)で定義される。
【数22】

【0077】
姿勢μは、クォータニオンで表現され、式(2)に示すように、正規化条件||μ||=1が満たされる必要がある。しかし、シグマポイントカルマンフィルタを用いて状態ベクトルxを更新する場合、更新後の状態ベクトルxは、式(26)に示すように、推定シグマポイントχ(j)の平均として算出されるため、(更新前の)状態ベクトルxk−1のノルムと、更新後の状態ベクトルxのノルムとは、異なる値となることがある。従って、シグマポイントカルマンフィルタの演算を行う場合、(更新前の)状態ベクトルxk−1の要素である姿勢μk−1のノルムと、更新後の状態ベクトルxの要素である姿勢μのノルムとは、異なる値となる可能性が存在する。つまり、シグマポイントカルマンフィルタの演算を行う場合、姿勢μについての正規化条件が満たされなくなる可能性が存在する。そこで、姿勢μに対して何らかの演算が行われるときには、演算後の結果をそのベクトル自身の大きさで正規化する。なお、より厳密に正規化条件を保つためには、状態ベクトルxを構成する要素のうち姿勢μについてはMRPs (modified Rodrigues parameters)を用いて前時刻との差分情報だけに限定し、カルマンフィルタの外部にある姿勢情報をカルマンフィルタから得られる差分情報に基づいて更新すればよい。
【0078】
地磁気の強さr及び地磁気の伏角φは、変化を予測することが難しい。そこで、本実施形態に係る状態遷移モデルでは、便宜上、時刻T=kにおける地磁気の強さr及び伏角φと、時刻T=k−1における地磁気の強さrk−1及び伏角φk−1とは各々等しい値であると仮定する。
同様に、角速度センサのオフセット推定値bは、変化を予測することが難しい。そこで、本実施形態に係る状態遷移モデルでは、便宜上、時刻T=kにおける角速度センサのオフセット推定値bO,Kと、時刻T=k−1における角速度センサのオフセット推定値bO,K−1とは等しい値であると仮定する。
【0079】
携帯機器1の角速度ωは、携帯機器1の利用者による携帯機器1の動かし方に依存して変化するため、時刻T=k−1の角速度ωk−1を用いて、時刻T=kにおける角速度ωを定式化することは難しい。そこで、本実施形態に係る状態遷移モデルでは、便宜上、時刻T=kにおける角速度ωと、時刻T=k−1における角速度ωk−1とは等しいと仮定する。
【0080】
前述の通り、磁気センサのオフセットcOFFは、携帯機器1の部品が発する内部磁界Biの方向及び大きさをセンサ座標系Σにおいて表現したベクトルである。従って、携帯機器1の内部状態が一定である間は、磁気センサのオフセットcOFFも変化しない。一方、携帯機器1の内部状態が変化した場合、例えば、携帯機器1に搭載された部品を流れる電流の大きさが変化した場合や、携帯機器1に搭載された部品の着磁状況が変化した場合には、磁気センサのオフセットcOFFも変化する。すなわち、携帯機器1の内部状態は、携帯機器1の利用者による携帯機器1の操作や、携帯機器1の外部の環境等に依存して変化する。従って、磁気センサのオフセットcOFFが変化するタイミングや磁気センサのオフセットcOFFの変化量を予測することは困難であり、時刻T=k−1における磁気センサのオフセット推定値cO,K−1を用いて、時刻T=kにおける磁気センサのオフセット推定値cO,Kを定式化することは難しい。
そこで、本実施形態に係る状態遷移モデルでは、便宜上、時刻T=kにおける磁気センサのオフセット推定値cO,Kと、時刻T=k−1における磁気センサのオフセット推定値cO,K−1とは等しいと仮定する。
【0081】
このように、本実施形態に係る状態遷移モデルでは、以下に示す式(36)のように、状態ベクトルxを構成する複数の状態変数のうち、姿勢μを表す状態変数以外は、前の時刻から変化しないという前提を置く。
【数23】

【0082】
なお、カルマンフィルタの演算においては、状態ベクトルxは、観測残差zに基づいて更新される。従って、式(36)に示された姿勢μ以外の値が、全く変化しないわけではない。具体的には、状態ベクトルxの各要素は、加算器690において、観測残差zに基づいて真値に近づくように更新される。
【0083】
次に、観測モデル部650における演算で用いられる観測モデルについて説明する。
【0084】
3次元角速度センサ90から出力される角速度データgの推定値γgyroは、角速度ωと、角速度センサのオフセット推定値bとを用いて、式(37)で与えられる。
【数24】

【0085】
また、地上座標系Σにおいて地磁気Bgを表すベクトルBgは式(38)で与えられる。従って、3次元磁気センサ70から出力される磁気データqの推定値γmagは、磁気センサのオフセット推定値cと、式(8)で示した行列B(μ)とを用いて、式(39)で与えられる。
【数25】

【0086】
また、観測モデルにおいて、3次元加速度センサ80から出力される加速度データaの推定値γaccは、式(8)で示した行列B(μ)と、式(12)で示したベクトルRVとを用いて、式(40)で与えられる。
【数26】

【0087】
式(3)を式(17)の右辺第1項に代入し、式(37)、式(39)、及び式(40)を用いて式(17)の右辺第2項を表すことにより、式(17)を、以下の式(41)に変形することができる。このとき、観測残差zは、式(41)により算出される。
【数27】

【0088】
[4. 結論]
以上に示したように、CPU10は、カルマンフィルタモジュール600を呼び出すことで、ステップS108のカルマンフィルタ演算処理を実行することにより、状態ベクトルxを更新する。具体的には、時刻T=kにおける状態ベクトルxは、時刻T=k−1における状態ベクトルxk−1を、状態ベクトルxk−1を用いて算出される観測残差zに基づいて更新することで算出される。同様に、時刻T=k−1における状態ベクトルxk−1は、時刻T=k−2における状態ベクトルxk−2を、状態ベクトルxk−2を用いて算出される観測残差zk−1に基づいて更新することで算出される。すなわち、カルマンフィルタ演算処理において、状態ベクトルxは、初期状態(時刻T=0)から時刻T=k−1に至る全ての状態ベクトルx〜xk−1の値を考慮して、更新される。
従って、初期ベクトルINIの各要素が真値から大きく乖離した値に設定された場合、カルマンフィルタ演算処理を行っても、状態ベクトルxの各要素は真値に近づかなくなることがあり、また、仮に状態ベクトルxの各要素が真値に近づくとしても、真値に近い値に収束するまでに長い時間を要することになる。
【0089】
前述の通り、磁気センサのオフセットcOFFは、携帯機器1に搭載された部品が発する内部磁界Biを表すベクトルである。従って、携帯機器1に搭載された部品が大きな内部磁界Biを発する場合、磁気センサのオフセット推定値cの初期値cO,0に対して、事前に定められた固定値(例えば、原点[0,0,0]等)を適用すると、磁気センサのオフセット推定値cの初期値cO,0が、磁気センサのオフセットcOFFから大きく乖離した値となることがある。また、姿勢μについても、予め定めた固定値を姿勢μの初期値μに設定する場合、真の姿勢から最大で180度ずれることになる。このように、初期ベクトルINIを構成する要素のうち、磁気センサのオフセット推定値cの初期値cO,0と、姿勢μの初期値μとは、真値から大きく乖離した値となることがある。
従って、初期ベクトルINIの各要素が不適切な(真値から乖離した)値に設定されることを防止するためには、磁気センサのオフセット推定値cの初期値cO,0と、姿勢μの初期値μとを、真値に近い正確な値に設定することが、特に重要となる。
【0090】
本実施形態では、まず、中心点算出処理において、オフセットcOFFの近似値である中心点cの座標を算出し、次に、初期ベクトル生成処理において、磁気センサのオフセット推定値cの初期値cO,0に、中心点cの座標を適用することで、初期ベクトルINIを算出した。これにより、磁気センサのオフセット推定値cの初期値cO,0が、真値から大きく乖離した値に設定されることを防止した。
また、本実施形態では、安定性判定処理において、携帯機器1の動きが安定していることを判定したうえで、姿勢μの初期値μを算出することで、姿勢μの初期値μが、真値から大きく乖離した値に設定されることを防止した。
このように、本実施形態は、初期ベクトルINIの各要素を、真値に近い正確な値に設定するため、カルマンフィルタ演算処理において、正確且つ高速な状態推定が可能となった。
【0091】
<B.変形例>
本発明は上述した実施形態に限定されるものではなく、例えば、以下の変形が可能である。また、以下に示す変形例のうちの2以上の変形例を組み合わせることもできる。
【0092】
(1)変形例1
上述した実施形態では、安定性判定処理において、ローパスフィルタを用いて算出された基準加速度データaと、加速度データaとに基づいて安定性指標αを算出したが、本発明はこのような形態に限定されるものでは無く、ローパスフィルタを用いずに安定性指標を算出してもよい。
例えば、以下の式(43)で示される安定性指標βが、以下の式(42)で示される条件を満たすか否かにより、携帯機器1の動きが安定しているか否かを判定してもよい。
ここで、安定性指標βは、以下の式(43)に示すように、時刻t=1から時刻t=Mまでの期間に3次元加速度センサ80が出力する複数の加速度データa〜aの分散を表す値である。また、式(42)に示すように、安定性指標βが第2閾値βTH以下となり十分に小さな値となる場合、加速度データa〜aの示す値の変動が小さいため、携帯機器1の動きが安定していると看做すことができる(Mは、加速度データaの分散を算出するために必要な加速度データの規定測定回数を表す自然数)。
なお、式(43)に現れる値ax,AVE、ay,AVE、及びaz,AVEは、複数の加速度データa〜aの各要素の平均値であり、それぞれ、式(44)、式(45)、及び式(46)により表される。
【数28】

【0093】
(2)変形例2
上述した実施形態及び変形例に係る状態推定装置は、CPU10が、ステップS101〜S108の各処理を実行するものであったが、本発明はこのような形態に限定されるものでは無く、CPU10が、ステップS101〜S108のうち一部の処理のみを実行するものであってもよい。
例えば、状態推定装置は、第2の報知手段を備えず、CPU10が、ステップS105の第2の報知を実行しないものであってもよい。
携帯機器1が、長期間継続的に動かされることは想定し難く、携帯機器1は、通常安定した状態に置かれる。そして、ステップS106の安定性判定処理で、携帯機器1が安定していることを確認したうえで、初期ベクトルINIが算出されるため、状態推定プログラム100が第2の報知手段を備えなくても、姿勢μの初期値μが、真値から大きく乖離した値に設定されることを防止することができる。
また、例えば、状態推定装置は、第1の報知手段を備えず、CPU10が、ステップS102の第1の報知を実行しないものであってもよい。この場合、CPU10は、ステップS103の磁気データ蓄積処理において、蓄積された複数の磁気データq〜qが、球面Sの中心点cを算出するために適切であるか否かを判定し、適切であると判定した場合に、処理をステップS104へと進めてもよい。具体的には、CPU10は、ステップS103の磁気データ蓄積処理において、複数の磁気データq〜qの各々がセンサ座標系Σにおいて示す座標の広がりが3次元的であるか否かを判定し、座標の広がりが3次元的であると判定した場合に、処理をステップS104へと進めてもよい。
また、例えば、状態推定装置は、第1の報知手段及び第2の報知手段を備えず、CPU10が、ステップS102の第1の報知、及び、ステップS105の第2の報知を実行しないものであってもよい。
【0094】
(3)変形例3
上述した実施形態及び変形例に係る状態推定装置において、CPU10は、カルマンフィルタ演算処理を、シグマポイントカルマンフィルタを用いて実行したが、本発明はこのような形態に限定されるものでは無く、公知の非線形カルマンフィルタを適宜適用して演算を行ってもよい。例えば、拡張カルマンフィルタを用いて、カルマンフィルタ演算処理を実行してもよい。
【符号の説明】
【0095】
1…携帯機器、10…CPU、50…表示部、70…3次元磁気センサ、80…3次元加速度センサ、90…3次元角速度センサ、100…状態推定プログラム、200…バッファ管理モジュール、300…中心点算出モジュール、400…安定性判定モジュール、500…初期ベクトル生成モジュール、600…カルマンフィルタモジュール、q…磁気データ、a…加速度データ、a…基準加速度データ、α…安定性指標、αTH…第1閾値、β…安定性指標、βTH…第2閾値、x…状態ベクトル、y…観測値ベクトル、z…観測残差、c…中心点、cOFF…磁気センサのオフセット、c…磁気センサのオフセット推定値、Bg…地磁気、Bi…内部磁界。


【特許請求の範囲】
【請求項1】
磁界を発生させる部品を備えた機器に組み込まれる状態推定装置であって、
互いに直交する3方向の磁気成分をそれぞれ検出して、3軸の座標系において表現される3次元のベクトルデータとして磁気データを順次出力する3次元磁気センサと、
加速度を直交する3軸で検出して、3軸の座標系において表現される3次元のベクトルデータとして加速度データを順次出力する3次元加速度センサと、
前記3次元磁気センサから順次出力される磁気データを蓄積する蓄積手段と、
前記蓄積手段に蓄積された複数の前記磁気データに基づいて、前記部品の発する磁界を表す前記3次元磁気センサのオフセットの近似値を示す中心点の3軸の座標を算出する中心点算出手段と、
複数の前記加速度データに基づいて、前記機器の動きが安定しているか否かを判定する安定性判定手段と、
前記安定性判定手段の判定結果が肯定である場合、前記中心点の3軸の座標、前記磁気データ、及び、前記加速度データに基づいて、前記オフセットの推定値及び前記機器の姿勢を推定するベクトルを要素として含む初期ベクトルを生成する初期ベクトル生成手段と、
前記初期ベクトルを初期値とする状態ベクトルを、前記3次元磁気センサ及び前記3次元加速度センサを含む前記機器に組み込まれた複数のセンサの出力を要素とする観測値ベクトルを用いて更新するカルマンフィルタ演算手段と、
を備えることを特徴とする、状態推定装置。
【請求項2】
前記中心点算出手段が前記中心点の算出に用いる複数の前記磁気データの取得を開始する前に、利用者に前記機器の姿勢を変化させるように促す第1の報知手段を、更に備えることを特徴とする、
請求項1に記載の状態推定装置。
【請求項3】
前記中心点算出手段が前記中心点を算出した後に、利用者に前記機器の姿勢を変化させないように促す第2の報知手段を、更に備えることを特徴とする、
請求項2に記載の状態推定装置。
【請求項4】
前記安定性判定手段は、
複数の前記加速度データに基づいて基準加速度データを算出するローパスフィルタを備え、
前記加速度データの示す座標と前記基準加速度データの示す座標との誤差を表す安定性指標を、所定個の前記加速度データの各々について算出し、
前記安定性指標の全てが第1閾値以下である場合、前記機器の動きが安定していると判定することを特徴とする、
請求項1乃至3のうちいずれか1項に記載の状態推定装置。
【請求項5】
前記安定性判定手段は、
所定個の前記加速度データの示す3軸の座標の分散を、安定性指標として算出し、
前記安定性指標が、第2閾値以下である場合、前記機器の動きが安定していると判定することを特徴とする、
請求項1乃至3のうちいずれか1項に記載の状態推定装置。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2013−96724(P2013−96724A)
【公開日】平成25年5月20日(2013.5.20)
【国際特許分類】
【出願番号】特願2011−237045(P2011−237045)
【出願日】平成23年10月28日(2011.10.28)
【出願人】(000004075)ヤマハ株式会社 (5,930)
【Fターム(参考)】