カルマンフィルタ大鬼門

あわない、結果が…。かれこれ50時間くらいカルマンフィルタに時間を費やしいますが、結果が収束しません。もう泣きです。ソースはここにあります。

『助けてくれ~』といったら『あきらめましょう、あきらめまっしょう~♪』と歌を歌ってくれました…。やってらんね。

それから数時間後、なんとか解決しました。原因は単純で、初期値を真値に近い値にしていなかった、ただそれだけでした。
結果のExcelファイルも置いておきます。これです。

Specification:

  • 積分間隔0.01s
  • 修正タイミング1.0s
  • 離散カルマンフィルタ(ΦやΓを計算するほうのやり方)
  • P初期値0.1対角行列

※その後、『低精度MEMSセンサと汎用GPS受信機の融合による高精度航法システムの研究』から辿れるpdfの中に、多少詳しい説明を書きました。

January 26, 2004 22:32 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

kalman filterの知識についてもっと知りたい
基礎的なことも書いてくれ

Posted by: run : October 26, 2004 10:41 PM

原文を読まれるのが一番だと思います。
http://www.cs.unc.edu/~welch/kalman/

Posted by: fenrir : October 27, 2004 08:10 AM

離散時間、時系列の測定値から誤差を除いて真値に近い値を得たい場合にカルマンフィルタを利用できますか?

材料内の残留応力の値を測定するのに、局部を加熱させて変形させ、レーザー干渉計でその変位を計測して残留応力を数値計算します。干渉計での計測に誤差が含まれるのでそれを取り除きたいのですが。

Posted by: koro : July 19, 2007 08:23 PM

>koroさん
カルマンフィルタはある時間的な変化がモデル化できる場合に、それに対する複数の観測を最も確からしく利用する場合に有効となる手段です。
ご質問の件ですが、残留応力の変化を時間的なモデルとしてあらわし、それに対して離散的に現れるレーザー干渉計による観測を有効に融合して、残留応力の時間的変化を最も確からしく知りたい、という趣旨でしたらカルマンフィルタの範疇であると思います。そうではなく時間的なモデル化をせずにレーザー干渉計の観測値のみから最も確からしい値を知りたいということでしたら、最小二乗法系の手法が該当するのではないでしょうか。ご質問の意図を汲み取れず、申し訳ない限りです。

Posted by: fenrir : July 20, 2007 09:34 PM

拙い質問に丁寧に答えていただきありがとうございます!
私は現在、計算力学研究室所属の学部生で、卒研で測定誤差を除く処理をするのですが、それにはカルマンフィルタがいいのでは?と担当の教授に勧められました。(担当教授もまだカルマンフィルタを理解していなくて、一緒に勉強している段階です)

最終的に得たい値は、残留応力の時間的な変化ではなく、測定対象物の現在の残留応力値です。情報点として、ある1点の変位の時間変化を使って、現在の値を推定しようってことなんですが。これだったら、モデル化する必要なく、最小二乗法で誤差除去できてしまうような気もしますね。。

モデル化の必要性というのは、時間変化を把握したいか、否かとゆう点だけの問題なのでしょうか?
質問ばかりですみません。。

Posted by: koro : July 22, 2007 02:33 AM

>koroさん
いえいえ、こちらも説明が下手で申し訳ありません。
時間的変化がどうの、というのは計測の対象となる"現在の残留応力"が時間的に変動する値なのか、それとも定数なのか、ということです。
もし求めたい値が時間的に変化するようでしたら、何らかの形でその変化を数式としてモデル化できると思いますので、カルマンフィルタの出番です。もし固定値であるようでしたら最小二乗法だと思います。説明の仕方にもよりますが、カルマンフィルタは時間的に拡張された最小二乗法と見ることもできます。
また少し細かい話になりますが、"現在の残留応力"を現在に知る必要がなく、データが出揃った時点で後から解析するような場合はスムージングという手法が使えると思います。
カルマンフィルタのわかりやすい日本語本(確率論的な説明ではなく実践的なもの)が見つからないというのも、この辺りを難しくしているのではないかと思います。

Posted by: fenrir : July 24, 2007 10:12 PM

以前は色々ご教授くださりありがとうございます。
カルマンフィルタの理論を少しずつですが理解を進め
C言語でプログラムを組んでいます。
完成したプログラムが、正しく動作しているか確認する方法は何かあるのでしょうか?
以前、最小二乗法などのプログラムでは、誤差の無い測定値をいれることによりxの推定値が厳密解と一致するかどうかで判断していたのですが。
たびたびの質問申し訳ないですが、もし何か方法があれば、ご教授いただければうれしいです。

Posted by: koro : November 15, 2007 10:58 AM

>koroさん
こんにちは、fenrirです。
カルマンフィルタがうまく動作している場合は、状態量が確からしい値に収束していくと思います。逆にうまく動作していないときは最悪、値が発散してしまいますので、それらしい値がでているようでしたらうまく動作していると判断してよいと思います。またもう一つの指標としては、システムの誤差共分散行列(P)の対角成分は状態量に対応した確からしさになっていますので、それが時間的に小さくなれば正しく動作している
いえると思います。

Posted by: fenrir : November 17, 2007 06:26 PM

田中と申します。カルマンフィルタの勉強をつい最近始めました。何もわからない初心者ですがよろしくお願いいたします。
ここで公開されている、カルマンフィルタのプログラムはダウンロードして動かしてみました。プログラムの内容はだいたい
理解したつもりなのですが?
このプログラムを利用して、レポート、『低精度MEMSセンサと汎用GPS受信機の融合による高精度航法システムの研究』の
68頁に書かれています、図4.9のようなものを再現したいと考えています。latitudeとlongitudeの計算をしたいのですが良く解りません。大変初歩的な問題で申し訳ないのですが、宜しければ教えていただけないでしょうか。

Posted by: 田中健一 : March 13, 2009 03:21 PM

>田中さん
コメントありがとうございます。ご質問の意図が汲み取れず申し訳ないのですが、こちらで紹介しているソースを利用して緯度、経度を計算したいということではないかと推察しております。
しかしながら、こちらで紹介しているソースは、リンク先の文章とはカルマンフィルタという点では繋がっていますが、その他の適用用途についてはまったく異なります。従ってこちらのソースを改変して緯度、経度を求めることは、リンク先の文章では想定されていません。混乱させてしまい申し訳ありません。

Posted by: fenrir : March 14, 2009 01:12 PM

コメントする