(58)【調査した分野】(Int.Cl.,DB名)
加速度センサ、角速度センサ、および磁気センサの出力を用いてセンサ座標系における移動体の状態ベクトルを逐次更新し、該状態ベクトルを用いて上記移動体の姿勢をトラッキングする姿勢推定装置であって、
上記角速度センサの出力を用いて上記状態ベクトルの成分である重力方向ベクトルの予測値を算出し、該予測値を上記加速度センサの出力を観測として用いて更新する重力方向推定部と、
上記角速度センサの出力を用いて上記状態ベクトルの成分である水平方向ベクトルの予測値を算出し、該予測値を上記磁気センサの出力を観測として用いて更新する水平方向推定部と、
更新後の上記重力方向ベクトルと更新後の上記水平方向ベクトルとを用いて上記移動体の姿勢情報を生成する姿勢推定部と、を備えていることを特徴とする姿勢推定装置。
上記水平方向推定部は、上記磁気センサの出力が上記水平方向ベクトルの更新に用いるのに適切な値となっているか否かを検査し、適切な値となっていない場合には該磁気センサの出力を観測として用いた更新を行わないことを特徴とする請求項1に記載の姿勢推定装置。
上記水平方向推定部は、更新後の上記水平方向ベクトルを、更新後の上記重力方向ベクトルと直交するように補正することを特徴とする請求項1から3の何れか1項に記載の姿勢推定装置。
加速度センサ、角速度センサ、および磁気センサの出力を用いてセンサ座標系における移動体の状態ベクトルを逐次更新し、該状態ベクトルを用いて上記移動体の姿勢をトラッキングする姿勢推定装置による姿勢推定方法であって、
上記角速度センサの出力を用いて上記状態ベクトルの成分である重力方向ベクトルの予測値を算出し、該予測値を上記加速度センサの出力を観測として用いて更新する重力方向推定ステップと、
上記角速度センサの出力を用いて上記状態ベクトルの成分である水平方向ベクトルの予測値を算出し、該予測値を上記磁気センサの出力を観測として用いて更新する水平方向推定ステップと、
更新後の上記重力方向ベクトルと更新後の上記水平方向ベクトルとを用いて上記移動体の姿勢情報を生成する姿勢推定ステップと、を含むことを特徴とする姿勢推定方法。
請求項1から4の何れか1項に記載の姿勢推定装置としてコンピュータを機能させるための制御プログラムであって、上記重力方向推定部、上記水平方向推定部、および上記姿勢推定部としてコンピュータを機能させるための制御プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上述のような従来技術には、カルマンフィルタによる演算のコストが大きいという問題がある。すなわち、上記非特許文献1の技術では、重力方向と水平基準方向のトラッキングをカルマンフィルタにより実現している。そして、このカルマンフィルタの状態ベクトルは、真北方向成分(3軸)、鉛直方向成分(3軸)、角速度成分(3軸)の計9つの成分を持つ9×1行列である。このため、状態ベクトルの更新には、9×9の行列の乗算と逆行列の演算が必要となり、この演算のコストは大きいものであった。なお、これは、歩行者デッドレコニングに限られず、任意の移動体の姿勢のトラッキング時に共通して生じる問題である。
【0005】
本発明は、前記の問題点に鑑みてなされたものであり、その目的は、姿勢の推定精度を低下させることなく状態ベクトルの更新に係る演算コストを低減することのできる姿勢推定装置等を実現することにある。
【課題を解決するための手段】
【0006】
上記の課題を解決するために、本発明の姿勢推定装置は、加速度センサ、角速度センサ、および磁気センサの出力を用いてセンサ座標系における移動体の状態ベクトルを逐次更新し、該状態ベクトルを用いて上記移動体の姿勢をトラッキングする姿勢推定装置であって、上記角速度センサの出力を用いて上記状態ベクトルの成分である重力方向ベクトルの予測値を算出し、該予測値を上記加速度センサの出力を観測として用いて更新する重力方向推定部と、上記角速度センサの出力を用いて上記状態ベクトルの成分である水平方向ベクトルの予測値を算出し、該予測値を上記磁気センサの出力を観測として用いて更新する水平方向推定部と、更新後の上記重力方向ベクトルと更新後の上記水平方向ベクトルとを用いて上記移動体の姿勢情報を生成する姿勢推定部と、を備えている。
【0007】
上記の構成によれば、重力方向ベクトルと水平方向ベクトルとをそれぞれ個別に算出および更新し、更新後の重力方向ベクトルと更新後の水平方向ベクトルとを用いて移動体の姿勢情報を生成する。これにより、重力方向ベクトルと水平方向ベクトルとを含む状態ベクトルを一括で更新する場合と同等の推定精度を維持しつつ、該場合と比べて更新に係る演算コストを低減することができる。
【0008】
また、上記水平方向推定部は、上記磁気センサの出力が上記水平方向ベクトルの更新に用いるのに適切な値となっているか否かを検査し、適切な値となっていない場合には該磁気センサの出力を観測として用いた更新を行わなくてもよい。
【0009】
上記の構成によれば、検査を行った結果、磁気センサの出力が水平方向ベクトルの更新に用いるのに適切な値となっていない場合には、気センサの出力を観測として用いた更新を行わない。よって、不適切な値の磁気センサの出力を用いた更新が行われて、姿勢の推定精度が低下することを防ぐことができる。
【0010】
また、上記水平方向推定部は、上記重力方向推定部が更新した上記重力方向ベクトルを用いて上記検査を行ってもよい。
【0011】
上記の構成によれば、重力方向推定部が更新した重力方向ベクトルを用いて上記検査を行う。この重力方向ベクトルは、角速度センサの出力を用いた予測により算出され、加速度センサの出力を観測として用いて更新されたものであるから、重力方向を正しく示している可能性が高い。また、磁気センサの出力である磁気ベクトルが外乱や歪みを含んでいなければ、該磁気ベクトルと重力方向との間には所定の関係が成り立つ。よって、該関係が成り立つ場合には磁気センサの出力が適切な値であり、成り立たない場合には、不適切な値であると言える。したがって、上記の構成によれば、重力方向推定部が更新した重力方向ベクトルを利用して、高精度な検査を行うことが可能になる。
【0012】
また、上記水平方向推定部は、更新後の上記水平方向ベクトルを、更新後の上記重力方向ベクトルと直交するように補正してもよい。
【0013】
ここで、水平方向ベクトルと重力方向ベクトルは、何れも同じセンサ座標系におけるベクトルであるから、理論上は直交する。しかし、実際に演算にて更新した水平方向ベクトルと重力方向ベクトルは直交しない場合があり、直交しない状態のまま姿勢の推定を行うと、その推定精度が低下してしまう。そこで、上記の構成によれば、更新後の水平方向ベクトルを、更新後の重力方向ベクトルと直交するように補正する。これにより、姿勢の推定精度が低下することを防ぐことができる。
【0014】
また、本発明の姿勢推定方法は、上記の課題を解決するために、加速度センサ、角速度センサ、および磁気センサの出力を用いてセンサ座標系における移動体の状態ベクトルを逐次更新し、該状態ベクトルを用いて上記移動体の姿勢をトラッキングする姿勢推定装置による姿勢推定方法であって、上記角速度センサの出力を用いて上記状態ベクトルの成分である重力方向ベクトルの予測値を算出し、該予測値を上記加速度センサの出力を観測として用いて更新する重力方向推定ステップと、上記角速度センサの出力を用いて上記状態ベクトルの成分である水平方向ベクトルの予測値を算出し、該予測値を上記磁気センサの出力を観測として用いて更新する水平方向推定ステップと、更新後の上記重力方向ベクトルと更新後の上記水平方向ベクトルとを用いて上記移動体の姿勢情報を生成する姿勢推定ステップと、を含む。該方法によれば、上記姿勢推定装置と同様の作用効果を奏する。
【0015】
本発明の各態様に係る姿勢推定装置は、コンピュータによって実現してもよく、この場合には、コンピュータを上記姿勢推定装置が備える各部(ソフトウェア要素)として動作させることにより上記姿勢推定装置をコンピュータにて実現させる姿勢推定装置の制御プログラム、およびそれを記録したコンピュータ読み取り可能な記録媒体も、本発明の範疇に入る。
【発明の効果】
【0016】
本発明によれば、姿勢の推定精度を低下させることなく状態ベクトルの更新に係る演算コストを低下させることができるという効果を奏する。
【発明を実施するための形態】
【0018】
〔実施形態1〕
以下、本発明の一実施の形態について
図1から
図3に基づいて説明する。
図1は、本実施形態の姿勢推定装置1の要部構成の一例を示すブロック図である。姿勢推定装置1は、姿勢の推定対象となる移動体に保持され、該移動体の姿勢をトラッキングする装置である。図示のように、姿勢推定装置1は、制御部10、記憶部11、出力部12、加速度センサ13、タイミングデバイス14、角速度センサ15、および磁気センサ16を備えている。
【0019】
制御部10は、姿勢推定装置1の各部を統括して制御するものであり、重力方向推定部100、水平方向推定部101、および姿勢推定部102を含む。また、記憶部11は、姿勢推定装置1が使用する各種データを記憶するものであり、出力部12は姿勢推定部102が推定した姿勢を示す姿勢情報を出力するものである。出力部12の出力態様は特に限定されず、表示出力であってもよい。この場合、出力部12は表示装置ということになる。また、他の装置(例えば姿勢情報を用いて移動体の位置を算出する測位装置)への出力であってもよく、この場合、出力部12は通信装置あるいは通信インターフェースということになる。
【0020】
加速度センサ13は、センサ座標系における3軸方向の加速度ベクトルを計測して制御部10に入力するセンサデバイスである。加速度センサ13が制御部10に入力する加速度ベクトル(加速度センサ13の出力)は下記のように表される。
【0022】
なお、上記センサ座標系とは、加速度センサ13の出力する加速度ベクトルの3軸方向で規定される座標系である。ここでは、加速度センサ13、角速度センサ15、および磁気センサ16は、同一のセンサ座標系でセンサデータを計測できるか、あるいは計測できるとみなすことができるものとする。また、仮に各センサが異なる座標系上に配置されていたとしても、一つの仮想的なセンサ座標系での計測結果が制御部10に出力されることを前提とする。
【0023】
タイミングデバイス14は、センサデータの取得タイミングを計測するデバイスである。具体的には、タイミングデバイス14は、加速度センサ13による加速度ベクトルの取得、角速度センサ15による角速度ベクトルの取得、および磁気センサ16による磁気ベクトルの取得が行われたタイミングを検出する。そして、タイミングデバイス14は、センサデータの取得時間間隔Δtを示すタイミングデータを制御部10に入力する。Δtは、時間的に連続して取得されたサンプル(すなわちセンサデータ)間の離散時刻差であるとも言える。なお、タイミングデバイス14は、上記Δtを算出可能なタイミングデータを出力するものであればよく、例えば絶対時刻を計測・出力するデバイスであってもよい。なお、各センサにおいてセンサデータが同時に取得されることは必須ではない。
【0024】
角速度センサ15は、センサ座標系における3軸方向の角速度ベクトルを計測して制御部10に入力するセンサデバイスである。角速度センサ15が制御部10に入力する角速度ベクトル(角速度センサ15の出力)は下記のように表される。
【0026】
磁気センサ16は、センサ座標系における3軸方向の磁気ベクトルを計測して制御部10に入力するセンサデバイスである。磁気センサ16が制御部10に入力する磁気ベクトル(磁気センサ16の出力)は下記のように表される。
【0028】
重力方向推定部100は、センサ座標系における移動体の状態ベクトルを逐次更新する。より詳細には、重力方向推定部100は、センサ座標系における重力方向ベクトルを状態データ(状態ベクトル)として保持し、更新(推定)し、出力する。重力方向ベクトルは、鉛直方向ベクトルと表現することもできる。詳細は後述するが、重力方向推定部100は、センサ座標系におけるセンサデータ(3軸加速度ベクトルおよび3軸角速度ベクトル)と、センサデータの取得時間間隔Δtを入力として重力方向ベクトルを推定する。
【0029】
重力方向推定部100は、内部の状態データとして、少なくとも状態ベクトル(具体的には重力方向ベクトル)と、状態ベクトルの誤差分散共分散行列P
gを保持している。本例では重力方向ベクトルが下記のように3×1サイズの行列であるから、誤差分散共分散行列は、3×3サイズの正方行列となる。重力方向推定部100は、カルマンフィルタの枠組みに従ってこれらの状態データを処理する。上記重力方向ベクトルは下記のように表される。
【0031】
水平方向推定部101は、センサ座標系における移動体の状態ベクトルを逐次更新する。より詳細には、水平方向推定部101は、センサ座標系における水平方向ベクトルを状態データ(状態ベクトル)として保持し、更新(推定)し、出力する。詳細は後述するが、水平方向推定部101は、センサ座標系におけるセンサデータ(3軸加速度ベクトル、3軸角速度ベクトル、および3軸磁気ベクトル)と、センサデータの取得時間間隔Δtを入力として水平方向ベクトルを推定する。
【0032】
水平方向推定部101は、内部の状態データとして、少なくとも状態ベクトル(具体的には水平方向ベクトル)と、状態ベクトルの誤差分散共分散行列P
hを保持している。本例では水平方向ベクトルが下記のように3×1サイズの行列であるから、誤差分散共分散行列は、3×3サイズの正方行列となる。水平方向推定部101は、カルマンフィルタの枠組みに従ってこれらの状態データを処理する。上記水平方向ベクトルは下記のように表される。このベクトルは、水平方向の基準を表す単位ベクトルである。なお、水平方向の基準とは、真北方向を指す水平方向ベクトルであり、このため、水平方向ベクトルは、真北方向ベクトルと表現することもできる。
【0034】
姿勢推定部102は、センサ座標系における重力方向ベクトルと水平方向ベクトルから移動体の姿勢を示す姿勢情報を生成する。具体的には、姿勢推定部102は、まず、重力方向推定部100が保持する状態データである重力方向ベクトル(更新後)と、水平方向推定部101が保持する状態データである水平方向ベクトル(更新後)との外積ベクトル(下記)を算出する。
【0036】
そして、姿勢推定部102は、上記外積ベクトルを用いて、下記の数式(1)で示される回転行列R(姿勢情報)を生成する。この回転行列Rを用いることにより、センサ座標系から世界座標系に姿勢を変換することができる。また、この回転行列Rは、歩行者自律航法などにも利用可能である。なお、姿勢推定部102が生成する姿勢情報は、移動体の姿勢を示すものであればよく、下記の回転行列Rに限られない。例えば、姿勢推定部102は、重力方向ベクトルと水平方向ベクトルを用いてDCM(direction cosine matrix)を生成してもよい。
【0038】
〔重力方向推定部が実行する処理の流れ〕
次に、重力方向推定部100が実行する処理(姿勢推定方法)について
図2に基づいて説明する。
図2は、重力方向推定部100が実行する処理の一例を示すフローチャートである。
【0039】
まず、重力方向推定部100は、重力方向推定部100が保持する状態データ、すなわち状態ベクトル(重力方向ベクトル)と、その誤差分散共分散行列を初期化する(S200)。初期状態における姿勢(状態ベクトル)が未知であれば(多くの場合が未知である)、状態ベクトルの初期値は任意の値とすればよく、例えば(0,0,1)
Tとしてもよい。また、誤差分散共分散行列については、取り得る状態ベクトルの不確かさを勘案して設定すればよい。
【0040】
続いて、重力方向推定部100は、角速度センサ15から角速度ベクトルの入力を受け付ける(S201)と共に、タイミングデバイス14からのタイミングデータΔtの入力を受け付ける(S202)。なお、センサ間の同期が取れていない場合は、角速度ベクトルのセンサデータの取得時間間隔をΔtとする。
【0041】
次に、重力方向推定部100は、S201で入力された角速度ベクトルとS202で入力されたΔtから状態データを更新する(S203)。この更新は予測に基づく更新であり、重力方向ベクトルの予測値が算出され、該予測値により重力方向推定部100の保持する重力方向ベクトルが上書き更新される。具体的には、重力方向推定部100は、下記の数式(2)により状態ベクトル(重力方向ベクトル)を更新する。
【0045】
は、更新後の状態ベクトル(重力方向ベクトルの予測値)である。また、exp()は行列の指数関数を返す演算子である。そして、
【0047】
における角速度ベクトルに付された演算子は歪対称行列(skew symmetric matrix)を取得するための演算子である。
【0048】
また、重力方向推定部100は、下記の数式(3)により誤差分散共分散行列を更新する。
【0050】
この数式(3)において、Mは更新後の誤差分散共分散行列であり、Φ(Δt)はexp(FΔt)である。また、Fは、カルマンフィルタにおいて、予測更新式の線形要素となる行列である。なお、非線形の行列については、拡張カルマンフィルタの枠組みに従い、テイラー展開によって1次項までを用いて線形化する。そして、Qは、プロセス誤差分散共分散行列である。
【0051】
次に、重力方向推定部100は、加速度センサ13から加速度ベクトルの入力を受け付ける(S204)。そして、重力方向推定部100は、上記加速度ベクトルを重力方向ベクトル(単位ベクトル)の観測として用いて、以下の数式(4)〜(6)により状態データ(重力方向ベクトルの予測値とその誤差分散共分散行列)を更新する(S205、重力方向推定ステップ)。なお、加速度ベクトルの単位系は[G](地球の重力加速度を1とする単位)として扱う。
【0055】
上記数式(4)のKはカルマンゲインであり、Rは観測誤差分散共分散行列である。また、上記数式(5)のIは単位行列、P
gは更新後の誤差分散共分散行列である。
【0056】
観測誤差分散共分散行列Rは、より詳細には、観測として得られる加速度ベクトルによる重力方向の観測における誤差の分散共分散行列である。例えば、静置されているような状況下では、小さな値を要素とし、運動中(運動加速度が外乱として印可されているような状況下)では、大きな値を要素とするようにRを設定する。また、例えば、姿勢推定装置1を歩行者が装着するという前提がある場合、歩行動作中と、非歩行動作中でRの要素を切り替えてもよい。なお、この場合、加速度ベクトルの値等に基づいて歩行動作中であることを検出する歩行動作検出部を制御部10の構成要素に追加する。そして、歩行動作の検出を契機にRの要素を切り替え、その後歩行動作が検出されなくなったことを契機にRの要素を戻せばよい。
【0057】
S205の終了後、処理はS201に戻る。つまり、S201〜S205の処理は、移動体の姿勢のトラッキング中において継続して繰り返し行われ、これにより移動体の状態データは移動体の最新の状態に応じたものに逐次更新される。
【0058】
〔水平方向推定部が実行する処理の流れ〕
次に、水平方向推定部101が実行する処理(姿勢推定方法)について
図3に基づいて説明する。
図3は、水平方向推定部101が実行する処理の一例を示すフローチャートである。なお、本処理では、上述した
図2の処理の計算結果を利用するので、本処理は
図2の処理の終了後に行われる。
【0059】
まず、水平方向推定部101は、水平方向推定部101が保持する状態データ、すなわち状態ベクトル(水平方向ベクトル)と、その誤差分散共分散行列を初期化する(S300)。初期状態における姿勢(状態ベクトル)が未知であれば(多くの場合が未知である)、状態ベクトルの初期値は任意の値とすればよく、例えば(1,0,0)
Tとしてもよい。また、誤差分散共分散行列については、取り得る状態ベクトルの不確かさを勘案して設定すればよい。
【0060】
続いて、水平方向推定部101は、角速度センサ15から角速度ベクトルの入力を受け付ける(S301)と共に、タイミングデバイス14からのタイミングデータΔtの入力を受け付ける(S302)。なお、センサ間の同期が取れていない場合は、角速度ベクトルのセンサデータの取得時間間隔をΔtとする。
【0061】
次に、水平方向推定部101は、S301で入力された角速度ベクトルとS302で入力されたΔtから状態データを更新する(S303)。この更新は予測に基づく更新であり、水平方向ベクトルの予測値が算出され、該予測値により水平方向推定部101の保持する水平方向ベクトルが上書き更新される。具体的には、水平方向推定部101は、下記の数式(7)により状態ベクトル(水平方向ベクトル)を更新する。
【0065】
は、更新後の状態ベクトル(水平方向ベクトルの予測値)である。また、exp()は行列の指数関数を返す演算子である。そして、
【0067】
における角速度ベクトルに付された演算子は歪対称行列を取得するための演算子である。
【0068】
なお、S303の更新に用いる行列は、S203で用いるものと計算方法が同一である。このため、同一の角速度ベクトルと同一のΔtが入力されている場合は、水平方向推定部101は、重力方向推定部100がS203で求めた行列を流用し、それらの行列の計算処理を省略してもよい。
【0069】
また、水平方向推定部101は、下記の数式(8)により誤差分散共分散行列を更新する。
【0071】
この数式(8)において、M
hは更新後の誤差分散共分散行列であり、Φ(Δt)はexp(FΔt)である。また、Fは、カルマンフィルタにおいて、予測更新式の線形要素となる行列である。なお、非線形の行列については、拡張カルマンフィルタの枠組みに従い、テイラー展開によって1次項までを用いて線形化する。そして、Q
hは、プロセス誤差分散共分散行列である。
【0072】
次に、水平方向推定部101は、磁気センサ16から磁気ベクトルの入力を受け付ける(S304)と共に、重力方向推定部100から、重力方向推定部100が保持する重力方向ベクトルを取得する(S305)。なお、この重力方向ベクトルは、S205で更新された、センサ座標系における重力方向ベクトルである。
【0073】
続いて、水平方向推定部101は、S304で入力を受け付けた磁気ベクトルが、状態データの更新に用いるのに適切な値となっているか否かを検査する(S306)。具体的には、水平方向推定部101は、磁気ベクトルと重力方向ベクトルを用いて、以下の二つの検査を実行する。
(A)磁気ベクトルの大きさの検査
(B)磁気ベクトルの伏角の検査
上記(A)の検査では、水平方向推定部101は、S304で得られた磁気ベクトルの大きさが、この検査が実施されている周辺地域(移動体が存在する地域)の地磁気ベクトルの大きさに対して、所定の誤差範囲に収まっているか否かを判定する。
【0074】
上記(B)の検査では、水平方向推定部101は、S304で得られた磁気ベクトルとS305で得られた重力方向ベクトルを用いて磁気ベクトルの伏角を計算する。そして、水平方向推定部101は、計算した伏角が、この検査が実施されている周辺地域(移動体が存在する地域)の地磁気ベクトルの伏角に対して、所定の誤差範囲に収まっているか否かを判定する。
【0075】
なお、上記判定に用いる各データ(地磁気ベクトルの大きさすなわち全磁力と、地磁気ベクトルの伏角)は、予め記憶部11等に記憶しておいてもよい。例えば、地域ごとの地磁気ベクトルの大きさと伏角を記録したデータベースを記憶しておけば、移動体の位置に応じたデータを取得可能である。また、これらのデータを演算にて算出してもよい。この他にも、これらデータは、該データを記憶しているか、あるいは該データを算出する機能を備えた他の装置から取得してもよい。後述のS308で用いる地磁気ベクトルの偏角についても同様である。
【0076】
続いて、水平方向推定部101は、S304で得られた磁気ベクトルが検査を通過するか否かを判定する(S307)。具体的には、水平方向推定部101は、上記(A)(B)の検査の両方において所定の誤差範囲に収まっていると判定した場合に検査通過と判定し、それ以外の場合には検査不通過と判定する。
【0077】
S307で検査通過と判定した場合(S307でYES)、水平方向推定部101は、S304で得られた磁気ベクトルを、基準となる水平方向の観測として用いて、状態データ(水平方向ベクトルの予測値とその誤差分散共分散行列)を更新する(S308、水平方向推定ステップ)。具体的には、水平方向推定部101は下記の数式(9)〜(11)を用いて状態データを更新する。
【0081】
上記数式(9)のR
hは観測誤差分散共分散行列である。また、上記数式(10)のKはカルマンゲインであり、Iは単位行列、P
hは更新後の誤差分散共分散行列である。
【0084】
は、磁気ベクトルを重力方向ベクトルと直交するように補正すると共に、地磁気ベクトルの偏角だけ補正した水平方位角ベクトル(単位ベクトル)である。このような補正後の磁気ベクトルを用いることにより、水平方向ベクトルを高精度に更新することができる。
【0085】
一方、S307で検査不通過と判定した場合(S307でNO)、水平方向推定部101は、磁気ベクトルの観測は無効であるとみなし、予測のみから状態データを更新する(S309)。具体的には、水平方向推定部101は、S303で得られた状態データの値を用いて状態データを上書きする。すなわち、
【0088】
とする。この場合には、磁気ベクトルを用いた更新は行われず、実質的には状態データは更新されない。
【0089】
上記S308およびS309の何れの処理の後にもS310の処理が行われる。S310では、水平方向推定部101は、S305で得られた重力方向ベクトルに直交するように、S308またはS309の処理において更新された水平方向ベクトルを補正する。具体的には、水平方向推定部101は、下記の数式(12)にて補正後の水平方向ベクトルを算出し、この水平方向ベクトルを状態ベクトルとして保持する。
【0091】
S310の終了後、処理はS301に戻る。つまり、S301〜S310の処理は、移動体の姿勢のトラッキング中において継続して繰り返し行われ、これにより移動体の状態データは移動体の最新の状態に応じたものに逐次更新される。
【0092】
〔姿勢の推定〕
以上説明したように、重力方向推定部100は、重力方向ベクトルを含む状態データを逐次更新し、水平方向推定部101は、水平方向ベクトルを含む状態データを随時更新する。よって、姿勢推定部102は、任意のタイミングにおいて、重力方向推定部100から重力方向ベクトルを取得すると共に、水平方向推定部101から水平方向ベクトルを取得して、上述の数式(1)により移動体の姿勢を示す姿勢情報を生成する(姿勢推定ステップ)。そして、姿勢の推定を逐次行うことにより、移動体の姿勢のトラッキングを行うことができる。
【0093】
〔演算量の低減効果〕
姿勢推定装置1で更新する重力方向ベクトルと水平方向ベクトルは何れも3×1行列であるから、これらの更新の際に発生する乗算は何れも3×3行列で済む。これに対し、非特許文献1のような従来技術では、9つの成分を持つ9×1行列で表される状態ベクトルを更新し、この更新の際には9×9行列の乗算が発生する。
【0094】
9×9行列の乗算に係る演算コストは、3×3行列の乗算に係る演算コストの3
3=27倍であるから、重力方向ベクトルと水平方向ベクトルのそれぞれについて更新を行う演算コストを考慮しても、従来技術の方が27÷2=13.5倍も演算コストが大きい。よって、姿勢推定装置1によれば、従来技術に対して最大で13.5倍も演算速度を高速化することが可能になる。また、この高速化は、従来のカルマンフィルタによる状態ベクトルの更新に冗長性が含まれている点に着目し、その冗長性が解消されるようにすることによって実現されているから、姿勢の推定精度は従来技術と遜色がない。
【0095】
〔実施形態2〕
上記実施形態では、加速度センサ13、角速度センサ15、および磁気センサ16を備える姿勢推定装置1について説明したが、本発明の姿勢推定装置1は、これらのセンサの計測結果を取得できればよく、これらのセンサを必ずしも備えている必要はない。例えば、本発明の姿勢推定装置1は、移動体に装着された上述の各センサから無線通信にて計測結果を取得してもよい。また、リアルタイムで姿勢を推定する必要がない場合には、上述の各センサの計測結果を記録媒体に記録しておき、この記録媒体から計測結果を取得してもよい。同様に、本発明の姿勢推定装置1は、タイミングデバイス14を必ずしも備えている必要はなく、姿勢推定装置1の外部のタイミングデバイス14からタイミングデータを取得してもよい。
【0096】
〔実施形態3〕
上記実施形態では、姿勢情報を出力する姿勢推定装置1について説明したが、生成した姿勢情報を用いて姿勢情報以外のパラメータを算出・出力する装置も本発明の範疇に含まれる。例えば、上記実施形態の手法にて生成した姿勢情報と、移動体の速度(加速度センサ13の計測結果から算出可能)とを用いて、その移動体の現在位置を算出する移動体の測位装置も本発明の範疇に含まれる。また、上記姿勢情報から移動体(例えば歩行者)がどのような動作を行っているかを検出する動作検出装置や、上記姿勢情報から移動体の移動速度を算出する移動速度算出装置も本発明の範疇に含まれる。
【0097】
〔実施形態4〕
上記各実施形態では、従来技術(例えば非特許文献1)におけるカルマンフィルタの状態ベクトルの9つの成分のうち、角速度成分は状態ベクトルとして使用していないが、角速度成分も状態ベクトルに含めてもよい。
【0098】
この場合、重力方向推定部100の保持する状態ベクトルが、3軸の重力方向成分および3軸の角速度成分の計6つの成分を持つ6×1行列となる。同様に、水平方向推定部101の保持する状態ベクトルが、3軸の水平方向成分および3軸の角速度成分の計6つの成分を持つ6×1行列となる。このような構成であっても、9つの成分を有する状態ベクトルを更新する従来技術と比べて更新に係る演算量を減らすことができる。ただし、本願の発明者による検討の結果、角速度成分を状態ベクトルに含めなくとも、含めた場合と同等の精度で姿勢の推定が可能であることが分かっているので、演算量を減らすという観点からは角速度成分を状態ベクトルに含めないことが好ましい。
【0099】
〔ソフトウェアによる実現例〕
姿勢推定装置1の制御ブロック(特に制御部10)は、集積回路(ICチップ)等に形成された論理回路(ハードウェア)によって実現してもよいし、CPU(Central Processing Unit)を用いてソフトウェアによって実現してもよい。
【0100】
後者の場合、姿勢推定装置1は、各機能を実現するソフトウェアであるプログラムの命令を実行するCPU、上記プログラムおよび各種データがコンピュータ(またはCPU)で読み取り可能に記録されたROM(Read Only Memory)または記憶装置(これらを「記録媒体」と称する)、上記プログラムを展開するRAM(Random Access Memory)などを備えている。そして、コンピュータ(またはCPU)が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体(通信ネットワークや放送波等)を介して上記コンピュータに供給されてもよい。なお、本発明は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【0101】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。