状態推定の第1歩:逐次計算による平均値計算


ラズパイとPythonで一緒に!状態制御&センサ・フュージョン入門

平均値は小さな状態推定

図1 平均値は観測値をそのまま採用するのではなく,複数サンプルを統合して1つの値にまとめる処理.この方法がオブザーバやカルマン・フィルタにつながる.画像クリックで動画を見る.または記事を読む.詳細はVOD/Pi KIT/data]ラズパイとPythonで一緒に!カルマン・フィルタ&センサ・フュージョン入門

状態推定という言葉は難しく聞こえますが,最初の入り口はシンプルです.測定値が時刻ごとに$y_1$,$y_2$,…,$y_n$と得られる状況を考えます.ここで求めたい平均値は,測定のばらつきの中から代表値を推量する行為です.観測された値をそのまま採用するのではなく,複数サンプルを統合して1つの値にまとめます.この統合の考え方が,後にオブザーバやカルマン・フィルタへつながります.

ラズパイとPythonでセンサを扱うとき,データは逐次的に到着します.メモリや処理時間に制約がある場面では,全データを溜めてから計算する方式が扱いにくいです.このとき,逐次計算で平均値を更新できると,測定と同時に推定が進みます.

一括処理と逐次処理の違い

平均値は,全サンプルを足してサンプル数で割れば求まります.この考え方は一括処理です.すべての測定値を揃えてから計算するので,理解は直感的です.一方で,逐次処理では,過去の全データを保持しません.必要なのは直前までの平均値と,新しく入ってきた測定値です.

逐次処理は「更新」という発想です.新しい測定が来るたびに,推定値を少しずつ修正します.この更新は,古い推定値と新しい観測値を,重み付きで混ぜる形に整理できます.重みはサンプル数に応じて変わり,新しいデータを受け入れつつ,推定値が急に飛びにくい形です.

  1. 一括処理:すべての$y_k$を記憶して最後に平均値を計算する方式
  2. 逐次処理:直前までの平均値と新しい$y_n$だけで平均値を更新する方式
  3. 逐次処理:メモリ使用量が一定でデータ到着に同期して推定が進む方式

センサ・フュージョンへつながる見方

逐次平均は,複数の情報を統合する最小単位の考え方です.センサ・フュージョンでは,複数センサの測定を1つの推定値にまとめます.このときも,推定値を更新するという流れは同じです.平均値の逐次更新を理解しておくと,「過去の推定」と「新しい観測」を組み合わせる感覚が身につきます.

現場の計測では,センサのノイズ,サンプリング周期の揺らぎ,外乱の混入が起きます.逐次更新の枠組みをもっていると,生データをそのまま使う設計から,推定値を使う設計へ移れます.この移行は,状態推定を実装に落とすときの重要な視点です.

  1. 推定値を「今のもっともらしい値」として扱う設計に移れる
  2. 観測が増えるほど推定が安定する感覚を確認できる
  3. センサの追加や統合を「更新の設計」として整理できる
〈ZEPマガジン〉

動画を見る,または記事を読む

参考文献

  1. [VOD/Pi KIT]MATLAB/Simulink×ラズパイで学ぶロボット制御入門,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]MATLAB/Simulink×ラズパイで学ぶロボット制御入門,ZEPエンジニアリング株式会社.
  3. [VOD/Pi400 KIT]SLAMロボット&ラズパイ付き!ROSプログラミング超入門,ZEPエンジニアリング株式会社.
  4. [VOD/KIT]確率・統計処理&真値推定!自動運転時代のカルマン・フィルタ入門,ZEPエンジニアリング株式会社.