CIT自律ロボット研究室

千葉工業大学 先進工学部 未来ロボティクス学科 上田隆一研究室

お知らせ: 3年生の研究室配属用の資料をアップしています。 / 

確率ロボティクス2016第2回

Mon Sep 12 09:10:38 JST 2016 (modified: Fri Nov 29 17:27:30 JST 2019)
views: 82, keywords:

  このエントリーをはてなブックマークに追加 
   

確率ロボティクス

第2回

上田 隆一

2016年9月28日\@千葉工業大学

今日の内容

  • 定式化の続き
  • 制御と状態

前回

  • 状態について考えた
    • 状態空間[latex]\\mathcal{X}[/latex]
    • 状態[latex]\\boldsymbol{x} = (x_1,x_2,\\dots,x_n) \\in \\mathcal{X}[/latex]
    • 状態変数[latex]x_1,x_2,\\dots,x_n[/latex]
  • 制御の上で区別すべきものを考慮して状態を定義すべき

今回

  • 制御出力
  • 確率的な表現
    • 状態は分からなくなる

状態を動かす

  • 状態は変化(遷移)する
  • 時刻の導入
    • ディジタルの計算機を使うときは基本、離散系で考えてよい
    • [latex]\\boldsymbol{x}_0,\\boldsymbol{x}_1,\\dots,\\boldsymbol{x}_t,\\dots[/latex]([latex]t[/latex]:時刻)
      • (この表記だと[latex]x[/latex]が太字か細字かで添字の意味が違うので注意)
      • (わかりにくくてごめんなさい)
  • 状態が変化する原因
    • 自分(行動決定する何か)が能動的に動かす
    • 自分でないものが動かす
  • とりあえず前者について考えましょう

制御出力

  • 状態を動かすもの
    • [latex]\\boldsymbol{u} = (u_1,u_2,\\dots,u_m)[/latex]
    • [latex]u_1,u_2,\\dots,u_m[/latex]: 制御変数
  • 制御出力空間
    • [latex]\\boldsymbol{u} \\in \\mathcal{U}[/latex]
  • 制御出力を与えるもの
    • 厳密に言うとロボットではない。ロボットは状態変数に含まれる
    • とりあえずエージェントと呼びましょう

状態遷移

  • ある時刻の状態[latex]\\boldsymbol{x}_{t-1}[/latex]でエージェントが制御出力[latex]\\boldsymbol{u}_t[/latex]を 選んだら[latex]\\boldsymbol{x}_t[/latex]に状態が変化
  • 状態遷移の式(状態方程式)
    • [latex]\\boldsymbol{x}_t = f(\\boldsymbol{x}_{t-1},\\boldsymbol{u}_t)[/latex]
  • 状態遷移関数
    • [latex]f: \\mathcal{X} \\times \\mathcal{U} \\longrightarrow \\mathcal{X}[/latex]

状態方程式を考える

  • どれか一つ選んで定式化してみましょう。15分くらい。
    • 前回同様、問題の定義ははっきりさせません。定式化の上で何か分からないことがあれば聞いていただければ適当に設定します。
    • ロボット1
      • 入力は移動量(何度回転して、何度直進する、等)にしましょう
      • 満足いかない人はトルクで
    • ロボット2
      • 入力はステップモータの周波数[latex]\\propto[/latex]角速度
      • ステップモータじゃなくてDCモータならどうなる?
    • 上の二つでなかったら前回の資料から好きなものを・・・

ロボットは状態方程式通りに・・・

  • 動かない
  • なぜ
    • 雑音
    • 状態方程式が甘い
    • そもそもエージェントが操作できない変数が存在

雑音の考慮

  • いくつかの定式化
  • 線形な状態方程式
    • [latex]\\boldsymbol{x}_t = A \\boldsymbol{x}_{t-1} + B\\boldsymbol{u}_t +\\boldsymbol{\\varepsilon}_t [/latex]
  • 非線形な方程式
    • [latex]\\boldsymbol{x}_t = f(\\boldsymbol{x}_{t-1},\\boldsymbol{u}_t) +\\boldsymbol{\\varepsilon}_t [/latex]
  • [latex]\\boldsymbol{x}_t[/latex]が決定論的でなくなる
    • 上記のような数式では非決定論的なものが表現しづらい

確率を用いた表現

  • 状態遷移の書き方
    • [latex] \\boldsymbol{x}_t \\sim p(\\boldsymbol{x} | \\boldsymbol{x}_{t-1},\\boldsymbol{u}_t) [/latex]
      • 意味: [latex]\\boldsymbol{x}_{t-1}[/latex]で[latex]\\boldsymbol{u}_t[/latex]を選択したときの、遷移後の状態が 従う確率密度関数[latex]p(\\boldsymbol{x})[/latex]に従って、[latex]\\boldsymbol{x}_t[/latex]が決まる
  • 依然[latex]\\boldsymbol{x}_t[/latex]が実際には何なのかは分からない
    • 分かるのは真の状態がどれなのかという確率密度関数
  • 確率密度関数(状態遷移確率)を求める式
    • [latex]bel_t(\\boldsymbol{x}) = \\int_\\mathcal{X} p(\\boldsymbol{x} | \\boldsymbol{x}',\\boldsymbol{u}_t )bel_{t-1}(\\boldsymbol{x}') d\\boldsymbol{x}'[/latex]
    • [latex]bel[/latex]: 状態に関する確率密度関数

[latex]bel[/latex]という表記

  • [latex]bel[/latex]: belief、信念
    • エージェントが持っている、状態に対する理解
    • 何か正解があるわけではなく、 エージェントが自身の知覚と知識で作り上げるもの
  • 知覚: 自身の制御出力、センサ入力
  • 知識:制御出力、センサ入力と状態の関係
    • 制御出力の場合は状態方程式

[latex]bel[/latex]の計算(ガウス分布)

  • 問題
    • 状態は一次元: [latex]x \\in \\Re[/latex]
    • 制御出力: 状態の変位[latex]\\Delta_t[/latex]
      • [latex]x[/latex]から[latex]x + \\Delta_t + \\epsilon[/latex]に移動
        • 雑音[latex]\\epsilon[/latex]は標準偏差[latex]\\delta_t[/latex]でガウス分布に従う
  • [latex]bel_t[/latex]を以下から導出してみましょう(かなり難しい)
    • [latex]bel_{t-1}(x) = \\frac{1}{\\sqrt{2\\pi \\sigma_{t-1}^2}}\\exp \\{-\\frac{(x-\\hat{x}_{t-1})^2}{2\\sigma_{t-1}^2}\\}[/latex]
      • [latex]\\hat{x}_{t-1}: t-1[/latex]における分布の中心(状態の推定値)
      • [latex]\\sigma_{t-1}: t-1[/latex]における分布の標準偏差
    • [latex]p(\\boldsymbol{x} | \\boldsymbol{x}_{t-1},\\Delta_t) =\\frac{1}{\\sqrt{2\\pi \\delta_t^2}}\\exp \\{-\\frac{(x-x_{t-1}-\\Delta_t)^2}{2\\delta_t^2}\\}[/latex]

[latex]bel[/latex]の式にガウス分布を代入

[latex]bel_t(x) = \int_{-\infty}^{\infty} \frac{1}{\sqrt{2\pi\delta_t^2}}e^{-\frac{1}{2\delta_t^2}(x - x_{t-1} - \Delta_t)^2}\frac{1}{\sqrt{2\pi\sigma_{t-1}^2}}e^{-\frac{1}{2\sigma_{t-1}^2}(x_{t-1} - \hat{x_{t-1}})^2}dx_{t-1}\\= \eta\int_{-\infty}^{\infty} e^{\frac{-1}{2}L}dx_{t-1}\\[/latex]

  • ここで
    • [latex]\eta[/latex]は定数項
    • [latex]L[/latex]は指数部の[latex]-1/2[/latex]を除く部分

[latex]L[/latex]から[latex]x_{t-1}[/latex]を分離

[latex] L = \frac{1}{\delta_t^2}(x - x_{t-1} - \Delta_t)^2 + \frac{1}{\sigma_{t-1}^2}(x_{t-1} - \hat{x_{t-1}})^2 \\ = \frac{\sigma_{t-1}^2 + \delta_t^2}{\sigma_{t-1}^2\delta_t^2}\left\{ x_{t-1} - \frac{\sigma_{t-1}^2(x - \Delta_t) + \delta_t^2\hat{x_{t-1}}}{\sigma_{t-1}^2 + \delta_t^2}\right\}^2 + \frac{(x - \hat{x_{t-1}} - \Delta_t)^2}{\sigma_{t-1}^2 + \delta_t^2}\\[/latex]

左側と右側の項をそれぞれ[latex]L(x_{t-1},x),L(x)[/latex]とおきましょう

 

再び[latex]bel_t[/latex]の式に代入

[latex]bel_t(x) = \eta\int_{-\infty}^{\infty} e^{\frac{-1}{2}L}dx_{t-1}\\ =\eta\int_{-\infty}^{\infty} e^{- \frac{1}{2}L(x_{t-1},x) - \frac{1}{2} L(x)}dx_{t-1}\\ =\eta e^{-\frac{1}{2} L(x)}\int_{-\infty}^{\infty} e^{- \frac{1}{2}L(x_{t-1},x)}dx_{t-1}\\ =\eta e^{-\frac{1}{2}\frac{(x - \hat{x_{t-1}} - \Delta_t)^2}{\sigma_{t-1}^2 + \delta_t^2}}\int_{-\infty}^{\infty} e^{- \frac{1}{2}\frac{\sigma_{t-1}^2 + \delta_t^2}{\sigma_{t-1}^2\delta_t^2}\left\{ x_{t-1} - \frac{\sigma_{t-1}^2(x - \Delta_t) + \delta_t^2\hat{x_{t-1}}}{\sigma_{t-1}^2 + \delta_t^2}\right\}^2}dx_{t-1} \\[/latex]

積分の部分がガウス分布の積分の形になっており定数となる。[latex]\eta[/latex]に入れてしまう

結局[latex]bel_t[/latex]は・・・

[latex]bel_t(x) = \eta \exp\left\{-\frac{(x - \hat{x_{t-1}} - \Delta_t)^2}{2(\sigma_{t-1}^2 + \delta_t^2)}\right\} = \mathcal{N}(\hat{x_{t-1}} + \Delta_t,\sigma_{t-1}^2 + \delta_t^2)[/latex]
  • [latex]bel_t[/latex]は再びガウス分布となる
    • 分布の中心: 元の移動量に制御出力の値を加えた値
    • 分散: 移動の雑音の分散に元の([latex]bel_{t-1}[/latex]の)分散を足した値

[latex]bel[/latex]の計算(数値計算)

  • ガウス分布のように計算前後が同じ分布になるものでない場合
    • どうすんの?
  • 乱数を使った数値計算で近似的に解く
    • 式を解くよりはこっちの方が簡単なことが多い
    • 計算量や近似精度の問題がつきまとう

モンテカルロ法を使った[latex]bel[/latex]の計算

  • 手を動かしてみましょう
    •  先ほどと同じ問題で
      • 制御出力: [latex]\Delta_t[/latex]
      • 誤差: [latex]\delta_t[/latex]
  • 以下をExcelかプログラミングで何度も繰り返してみる
    • [latex]x = 0[/latex]に点を打つ
    • [latex]\Delta = 1,\delta = 0.1[/latex]として乱数を一つ選んで移動量とし、[latex]x[/latex]を移動
      • 簡易的なガウス乱数の作り方: 区間[latex][0,1][/latex]から 12個の数字を一様乱数を選んで足し、6を引くと [latex]\mathcal{N}(0,1)[/latex]にほぼ従う乱数が得られる
    • 数ステップ[latex]x[/latex]を動かしてみる([latex]t=1,2,3[/latex]と3ステップ程度)
  • 1,2,3ステップ後の分布はガウス分布?分散は?

格子を使った[latex]bel[/latex]の計算

  • [latex]bel[/latex]の表現
    • 状態空間を格子状に区切る
      • [latex]s_1,s_2,s_3,\dots,s_N \subset \mathcal{X}[/latex]
        • [latex]\bigcap_{i=1}^N s_i = \phi[/latex]
        • [latex]\bigcup_{i=1}^N s_i = \mathcal{X}[/latex]
    • 各格子に確率を割り当て
      • P(s_i)
        • [latex]\sum_{i=1}^N P(s_i) = 1[/latex]
  • これも今までと同じ問題で手を動かしてみましょう
    • 次ページ

  • [latex]0.1[/latex]刻みで数直線上に区間を作る
    • どこかの区間の確率を1に。他を0に。
  •  以下をExcelかプログラミングで何度も繰り返してみる
    • [latex]\Delta = 1[/latex]だけ分布を動かす
      • 雑音[latex]\delta = 0.1[/latex]の量だけ分布をぼかす
        • 方法は議論のこと
      • ある区間から移動した確率は二つ以上の区間にまたがる

2次元以上な系・かつ非線形な系

  • 数式を解く場合
    • 行列、線形化
  •  数値計算
    • 自然に拡張可能
    • 計算量が増える

移動ロボットにおける非線形な系

  • この資料(昨年の講義の第2回資料)の4,5,15ページ
  • 線形化は必要?数値計算でいいのでは?
    • (残念ながら)graph-based SLAMの実装等で出てくる

雑音がガウス分布に従う場合の[latex]bel[/latex]の導出

  • おさらい
    •  線形な状態方程式
      • [latex]\boldsymbol{x}t = A \boldsymbol{x}{t-1} + B\boldsymbol{u}t +\boldsymbol{\varepsilon}t [/latex]
    • 非線形な方程式(行列で書けない)
      • [latex]\boldsymbol{x}t = f(\boldsymbol{x}{t-1},\boldsymbol{u}t) +\boldsymbol{\varepsilon}t [/latex]

[latex]f[/latex]を線形化

  • 姿勢の推定値[latex]\boldsymbol{\hat{x}}{t-1}[/latex]まわりでテイラー展開
    • [latex] f(\boldsymbol{x},\boldsymbol{u}) = f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}) + \frac{\partial f(\boldsymbol{x},\boldsymbol{u})}{\partial\boldsymbol{x}}\big|{\boldsymbol{\hat{x}}{t-1}} (\boldsymbol{x} - \boldsymbol{\hat{x}}{t-1}) [/latex]
    • この式は[latex]\boldsymbol{x}[/latex]の線形式になっている
    • [latex]\boldsymbol{x}[/latex]: [latex]n[/latex]次元の状態ベクトル
    • [latex]\frac{\partial f(\boldsymbol{x},\boldsymbol{u})}{\partial\boldsymbol{x}}[/latex]: ヤコビ行列
      • [latex]n\times n[/latex]行列

状態方程式の書き換え

  • [latex]F_t = \frac{\partial f(\boldsymbol{x},\boldsymbol{u})}{\partial\boldsymbol{x}}\big|{\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t}[/latex]とする
    • 確率ロボティクスだと[latex]G_t[/latex]になっている
  • [latex]\boldsymbol{x}t = f(\boldsymbol{x}{t-1},\boldsymbol{u}t) +\boldsymbol{\varepsilon}t [/latex]に前のページで得た[latex]f[/latex]を代入
    • [latex]\boldsymbol{x}t = f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t) + F_t(\boldsymbol{x}{t-1} - \boldsymbol{\hat{x}}{t-1}) +\boldsymbol{\varepsilon}t[/latex]

状態遷移確率

  • [latex]p(\boldsymbol{x} | \boldsymbol{x}{t-1},  \boldsymbol{u}t ) \approx \eta e^{ -\frac{1}{2} \left[\boldsymbol{x} -f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t) - F_t(\boldsymbol{x}{t-1} - \boldsymbol{\hat{x}}{t-1})  \right]^T  R_t^{-1}\left[\boldsymbol{x} - f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t) -F_t(\boldsymbol{x}{t-1} - \boldsymbol{\hat{x}}{t-1}) \right]  }[/latex]
    • [latex]\boldsymbol{x}[/latex]: 移動後の状態の候補
    • [latex]f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t)[/latex]: 移動前の推定位置から予測される移動後の状態
    • [latex]\boldsymbol{x}{t-1} - \boldsymbol{\hat{x}}{t-1}[/latex]: 移動前の姿勢(左辺で指定)と移動前の推定姿勢の差
    • [latex]R_t[/latex]: [latex]\boldsymbol{\varepsilon}t[/latex]に対応する共分散行列

導出される[latex]bel_t[/latex]

  • 移動前の[latex]bel{t-1}[/latex]が次のとき
    • 分布の形状: 多変量ガウス分布
    • 中心: [latex]\boldsymbol{\hat{x}}{t-1}[/latex]
    • 共分散: [latex]\hat\Sigma{t-1}[/latex]
  • 移動後の[latex]bel_t[/latex]は
    • 中心: [latex]f(\boldsymbol{\hat{x}}{t-1},\boldsymbol{u}t) + F_t(\boldsymbol{\hat{x}}{t-1} - \boldsymbol{\hat{x}}{t-1}) = f(\boldsymbol{\hat{x}}_{t-1},\boldsymbol{u}t)[/latex]
      • 移動前の平均値を素直に移動
    • 共分散: [latex]F_t\hat\Sigma{t-1}F_t^T + R_t[/latex]
      • 共分散行列を回転して雑音を足しているだけ