Return to Video

04-47 Kalman Matrices

  • 0:00 - 0:06
    少し難しいプログラミングの課題を用意しました
  • 0:06 - 0:08
    時間がかかると思いますが
  • 0:08 - 0:14
    多次元のカルマンフィルタを実装してみてください
  • 0:14 - 0:21
    行列クラスは行列を操作する定義なので
    プログラミングを簡単にしてくれるはずです
  • 0:21 - 0:26
    さらに行列を初期化する関数を持っています
    すぐに例をお見せします
  • 0:26 - 0:29
    値を0にセットするzero
  • 0:29 - 0:35
    単位行列を計算するidentity
    行列を出力するshow
  • 0:35 - 0:41
    足し算のadd、引き算のsub、
    掛け算のmulなどの演算関数に加え
  • 0:41 - 0:45
    行列を転置させるtransposeを定義します
  • 0:45 - 0:51
    拡張されたコードではコレスキー因数分解を用いて
    行列を実際に反転させます
  • 0:51 - 0:57
    ここにinverseという関数があります
    この行列クラスは便利です
  • 0:57 - 1:03
    ライブラリでよく見る関数の短いバージョンです
    少し説明しましょう
  • 1:03 - 1:08
    このように括弧の中に引数を持つコマンドで
    行列を作れます
  • 1:08 - 1:12
    二次元行列と言います
    この場合は垂直ベクトルです
  • 1:12 - 1:17
    showコマンドで
    垂直ベクトルの結果を出力できます
  • 1:17 - 1:20
    次のようにtransposeコマンドを実現します
  • 1:20 - 1:24
    これを実行すれば水平ベクトルの値が得られます
  • 1:24 - 1:28
    行列にベクトルを掛けたいとします
  • 1:28 - 1:31
    この初期設定の行列
    [12.,8.]と[6.,2.]
  • 1:31 - 1:34
    2×2の行列を作れます
  • 1:34 - 1:38
    この行列を出力するとこうなります
    12、8、6、2です
  • 1:38 - 1:43
    この部分の値です 今度はFとaを掛けましょう
  • 1:43 - 1:46
    次の式を入れます b=F*a
  • 1:46 - 1:51
    showで出力するとベクトル200と80を得ます
  • 1:51 - 1:55
    200は10×12+10×8の解です
  • 1:55 - 2:00
    そして80は10×6+10×2の解です
  • 2:00 - 2:06
    そこで行列ライブラリを使い初期状態を設定します
  • 2:06 - 2:12
    一次元で位置と速度の状態を追跡しています
  • 2:12 - 2:17
    実際の位置と速度は不明なので
    0で両方を初期化しました
  • 2:17 - 2:20
    不確実性を表す行列があります
  • 2:20 - 2:26
    位置と速度の不確実性はかなり高くなっています
  • 2:26 - 2:31
    しかし2つは相関しません
    行列は[1000.,0.]、[0.,1000.]です
  • 2:31 - 2:37
    外部動作を指定しますが[0.]、[0.]なので
    効果はなく無視することにします
  • 2:37 - 2:42
    次の状態関数を作ります
    ちょうど話した[1.,1]と[0,1.]です
  • 2:42 - 2:47
    速度は位置に加算されているだけと仮定するので
  • 2:47 - 2:50
    速度と期待値は同じままです
  • 2:50 - 2:55
    最初の2つの値1と0を引っ張ってくる
    観測関数を作ります
  • 2:55 - 2:58
    この関数で位置は観察できますが
    速度はできません
  • 2:58 - 3:02
    観測の不確実性は この例では1になります
  • 3:02 - 3:06
    単位行列は[1.、0.]、[0.、1.]です
  • 3:06 - 3:10
    ここで3つの要素を持つmeasurementsを用いて
    filterを実行します
  • 3:10 - 3:15
    filterを実行すると速度を推測することができます
  • 3:15 - 3:18
    より正確な予測をすることができるのです
  • 3:18 - 3:21
    次のフィルタ・プログラムを書いてください
  • 3:21 - 3:25
    まず観測更新 次に動作の更新です
  • 3:25 - 3:28
    filterを実行する度に
  • 3:28 - 3:33
    最初に観測 次に動作の順番で更新してください
  • 3:33 - 3:37
    ここに空のfilterプロシージャがあるので
    穴を埋めましょう
  • 3:37 - 3:42
    まずmeasurementsを調べ
    次に観測と動作を更新します
  • 3:42 - 3:46
    その後 予測させて
    導き出された推定値を出力します
  • 3:46 - 3:50
    この場合は3回同じことを行います
  • 3:50 - 3:54
    穴を埋めたらRunボタンを押し次の出力を得ます
  • 3:54 - 3:57
    最初の観測更新のあと
  • 3:57 - 4:04
    位置1を観察し0.99をここへコピーしました
  • 4:04 - 4:09
    速度は相変わらず不明で
    初期化した時の0のままです
  • 4:09 - 4:13
    そして更新された不確実性の行列があります
  • 4:13 - 4:18
    強い相関性を示す
    1000、1000、1000、1000です
  • 4:18 - 4:23
    これは穴埋めした初期の状態から
    非対角の要素が異なっています
  • 4:23 - 4:27
    カルマンフィルタの結果とちょうど同じです
  • 4:27 - 4:31
    もう一度2を観察します
  • 4:31 - 4:36
    次の予測の出力は3になります 観察+予測です
  • 4:36 - 4:41
    今回は速度に関して とてもいい予測があります
  • 4:41 - 4:46
    1である理由はカルマンフィルタが
  • 4:46 - 4:50
    この値を求めるために数式を使ったためです
  • 4:50 - 4:54
    新しい共分散行列があります
  • 4:54 - 4:58
    予測のあとの3回目の観察です
  • 4:58 - 5:03
    予測は正確には3.999で事実上の4です
  • 5:03 - 5:07
    速度の予測は0.99999で約1です
  • 5:07 - 5:13
    もう1つ不確実性の行列があり
    速度の観測において高い確実性を描いています
  • 5:13 - 5:18
    推定位置において初期の不確実性に比べると
    確実性が高くなったと気づけましたか?
  • 5:18 - 5:24
    ここの正確な値を出力する
    filterアルゴリズムを書いてください
  • 5:24 - 5:28
    これは難しい課題ですが
  • 5:28 - 5:33
    基本的には説明した数式を実装すればいいのです
  • 5:33 - 5:39
    まずは行列クラスに慣れてから
    フィルタコードを埋めてみましょう
  • 5:39 - 5:44
    多変数カルマンフィルタで説明したことを
    思い出してください
Title:
04-47 Kalman Matrices
Description:

04-47 Kalman Matrices

more » « less
Video Language:
English
Team:
Udacity
Project:
CS373 - Artificial Intelligence
Duration:
05:45

Japanese subtitles

Revisions