《视觉SLAM十四讲》-- 后端 1(上)

文章目录

    • 08 后端 1
      • 8.1 概述
        • 8.1.1 状态估计的概率解释
        • 8.1.2 线性系统和卡尔曼滤波(KF)
        • 8.1.3 非线性系统和扩展卡尔曼滤波(EKF)
        • 8.1.4 小结

08 后端 1

前端视觉里程计可以给出一个短时间内的轨迹和地图,但由于不可避免的误差积累,地图在长时间内是不准确的,因此,我们希望构建一个大规模、长时间的最优轨迹和地图。

8.1 概述

8.1.1 状态估计的概率解释

(1)两种处理方式

  • 批量式:使用过去和未来的信息来更新自己的状态的处理方式;

  • 渐进式:仅适用过去的甚至仅是前一个时刻的信息来更新自己的状态的处理方式。

(2)运动方程和观测方程:

{ x k = f ( x k − 1 , u k ) + w k z k , j = h ( y j , x k ) + v k , j k = 1 , … , N , j = 1 , … , M (8-1) \left\{\begin{array}{l} \boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}\right)+\boldsymbol{w}_{k} \\ \boldsymbol{z}_{k, j}=h\left(\boldsymbol{y}_{j}, \boldsymbol{x}_{k}\right)+\boldsymbol{v}_{k, j} \end{array} \quad k=1, \ldots, N, j=1, \ldots, M\right. \tag{8-1} {xk=f(xk1,uk)+wkzk,j=h(yj,xk)+vk,jk=1,,N,j=1,,M(8-1)

以下图为例,只有运动方程时,由于误差的不断积累,位置的不确定性会不断增大;当加入正确的观测数据,不确定性就会减小,直至保持稳定。

在这里插入图片描述

(3)将批量状态估计问题转化为最大似然估计问题,并使用最小二乘法求解

定义 x k \boldsymbol{x}_k xk k k k 时刻的所有变量,即包含此时刻的相机位姿和 m m m 个路标,

x k = def  { x k , y 1 , … , y m } \boldsymbol{x}_{k} \stackrel{\text { def }}{=}\left\{\boldsymbol{x}_{k}, \boldsymbol{y}_{1}, \ldots, \boldsymbol{y}_{m}\right\} xk= def {xk,y1,,ym}

同时,把 k k k 时刻所有的观测记做 z k \boldsymbol{z}_k zk,于是式(8-1)可写为(注意区别)

{ x k = f ( x k − 1 , u k ) + w k z k = h ( x k ) + v k k = 1 , … , N (8-2) \left\{\begin{array}{l} \boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}\right)+\boldsymbol{w}_{k} \\ \boldsymbol{z}_{k}=h\left( \boldsymbol{x}_{k}\right)+\boldsymbol{v}_{k} \end{array} \quad k=1, \ldots, N\right. \tag{8-2} {xk=f(xk1,uk)+wkzk=h(xk)+vkk=1,,N(8-2)

我们希望用过去 0 到第 k k k 时刻所有的数据来估计现在的状态分布:

P ( x k ∣ x 0 , u 1 : k , z 1 : k ) P(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{1:k}) P(xkx0,u1:k,z1:k)

下标 1 : k 1:k 1:k 表示从 1 到 k k k 时刻所有的数据。

根据贝叶斯法则

P ( x k ∣ x 0 , u 1 : k , z 1 : k ) ∝ P ( z k ∣ x k ) P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) (8-3) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k}\right) \propto P\left(\boldsymbol{z}_{k} \mid \boldsymbol{x}_{k}\right) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right) \tag{8-3} P(xkx0,u1:k,z1:k)P(zkxk)P(xkx0,u1:k,z1:k1)(8-3)

第一项称为 似然,第二项为 先验,将第二项以 x k − 1 \boldsymbol{x}_{k-1} xk1 时刻为条件概率展开

P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) = ∫ P ( x k ∣ x k − 1 , x 0 , u 1 : k , z 1 : k − 1 ) P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) d x k − 1 (8-4) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right)=\int P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{k-1}, \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right) P\left(\boldsymbol{x}_{k-1} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right) \mathrm{d} \boldsymbol{x}_{k-1} \tag{8-4} P(xkx0,u1:k,z1:k1)=P(xkxk1,x0,u1:k,z1:k1)P(xk1x0,u1:k,z1:k1)dxk1(8-4)

(可以这样理解,第一项表示 k k k 时刻状态和 k − 1 k-1 k1 时刻有关,第二项表示 k − 1 k-1 k1 时刻状态又与过去所有状态有关,这是一个递进的关系。)

在后续处理上,又有两种方式:一种是假设一阶马尔科夫性,即 k k k 时刻的状态只与 k − 1 k-1 k1 时刻状态相关,这样就会得到以 扩展卡尔曼滤波 为代表的滤波器法;另一种是与之前所有的状态均相关,将得到 非线性优化 为主体的优化框架。目前,视觉 SLAM 的主流为非线性优化方法。

8.1.2 线性系统和卡尔曼滤波(KF)

(1)假设马尔可夫性,即当前时刻状态只与前一时刻的状态有关。则式(8-4)第一项可写为

P ( x k ∣ x k − 1 , x 0 , u 1 : k , z 1 : k − 1 ) = P ( x k ∣ x k − 1 , u k ) (8-5) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{k-1}, \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right) = P(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{k-1},\boldsymbol{u}_k) \tag{8-5} P(xkxk1,x0,u1:k,z1:k1)=P(xkxk1,uk)(8-5)

对于第二项,由于 k k k 时刻的输入量 u k \boldsymbol{u}_k uk k − 1 k-1 k1 时刻状态无关,则可将其化简为

P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) = P ( x k − 1 ∣ x 0 , u 1 : k − 1 , z 1 : k − 1 ) (8-6) P\left(\boldsymbol{x}_{k-1} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right)=P\left(\boldsymbol{x}_{k-1} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k-1}, \boldsymbol{z}_{1: k-1}\right) \tag{8-6} P(xk1x0,u1:k,z1:k1)=P(xk1x0,u1:k1,z1:k1)(8-6)

(2)首先推导 线性高斯系统 的卡尔曼滤波器(也就是说,运动方程和观测方程可以由线性方程来描述):

{ x k = A k x k − 1 + u k + w k z k = C k x k + v k k = 1 , … , N (8-8) \left\{\begin{array}{l} \boldsymbol{x}_{k}=\boldsymbol{A}_{k} \boldsymbol{x}_{k-1}+\boldsymbol{u}_{k}+\boldsymbol{w}_{k} \\ \boldsymbol{z}_{k}=\boldsymbol{C}_{k} \boldsymbol{x}_{k}+\boldsymbol{v}_{k} \end{array} \quad k=1, \ldots, N\right. \tag{8-8} {xk=Akxk1+uk+wkzk=Ckxk+vkk=1,,N(8-8)

假设噪声符合零均值高斯分布,即

w k ∼ N ( 0 , R ) . v k ∼ N ( 0 , Q ) (8-9) \boldsymbol{w}_{k} \sim N(\mathbf{0}, \boldsymbol{R}) . \quad \boldsymbol{v}_{k} \sim N(\mathbf{0}, \boldsymbol{Q}) \tag{8-9} wkN(0,R).vkN(0,Q)(8-9)

假设已知 k − 1 k-1 k1 时刻的后验状态估计 x ^ k − 1 \hat{\boldsymbol{x}}_{k-1} x^k1 及其协方差 P ^ k − 1 \hat{\boldsymbol{P}}_{k-1} P^k1,现在根据 k k k 时刻的输入和观测数据,确定 x k \boldsymbol{x}_k xk 的后验分布。我们约定以上帽子 x ^ k − 1 \hat{\boldsymbol{x}}_{k-1} x^k1 表示后验,下帽子 x ˇ k \check{\boldsymbol{x}}_{k} xˇk 表示先验分布。

根据 高斯分布线性组合性质,先通过运动方程确定 x k \boldsymbol{x}_k xk 的先验分布

P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) = N ( A k x ^ k − 1 + u k , A k P ^ k − 1 A k T + R ) (8-10) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{1: k-1}\right)=N(\boldsymbol{A}_{k} \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{u}_{k}, \boldsymbol{A}_{k} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{A}_{k}^{\mathrm{T}}+\boldsymbol{R}) \tag{8-10} P(xkx0,u1:k,z1:k1)=N(Akx^k1+uk,AkP^k1AkT+R)(8-10)

这一步称为 预测 ,它显示了如何从上一时刻的状态,根据输入信息推断当前时刻的状态分布。这个分布就是 先验,记

x k ˇ = A k x ^ k − 1 + u k , P ˇ k = A k P ^ k − 1 A k T + R (8-11) \check{\boldsymbol{x}_k}=\boldsymbol{A}_{k} \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{u}_{k}, \quad \check{\boldsymbol{P}}_{k}=\boldsymbol{A}_{k} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{A}_{k}^{\mathrm{T}}+\boldsymbol{R} \tag{8-11} xkˇ=Akx^k1+uk,Pˇk=AkP^k1AkT+R(8-11)

由观测方程,我们可以计算在某个状态下应该产生怎样的观测数据,

P ( z k ∣ x k ) = N ( C k x k , Q ) ) (8-12) P(\boldsymbol{z}_k|\boldsymbol{x}_k)=N(\boldsymbol{C}_{k} \boldsymbol{x}_{k},\boldsymbol{Q})) \tag{8-12} P(zkxk)=N(Ckxk,Q))(8-12)

为了得到 x k \boldsymbol{x}_k xk 的后验概率,我们需要计算它们的乘积,也就是式(8-3)。设最终的结果为 x k ∼ N ( x ^ k , P ^ k ) \boldsymbol{x}_k \sim N(\hat{\boldsymbol{x}}_k, \hat{\boldsymbol{P}}_k) xkN(x^k,P^k) ,则

N ( x ^ k , P ^ k ) = η N ( C k x k , Q ) ) ⋅ N ( x ˇ k , P ˇ k ) (8-13) N(\hat{\boldsymbol{x}}_k, \hat{\boldsymbol{P}}_k)=\eta N(\boldsymbol{C}_{k} \boldsymbol{x}_{k},\boldsymbol{Q})) \cdot N(\check{\boldsymbol{x}}_k, \check{\boldsymbol{P}}_k) \tag{8-13} N(x^k,P^k)=ηN(Ckxk,Q))N(xˇk,Pˇk)(8-13)

我们知道高维高斯分布的概率密度函数为

p ( x ) = 1 ( 2 π ) N det ⁡ ( Σ ) exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) p(x)=\frac{1}{\sqrt{(2 \pi)^{N} \operatorname{det}(\boldsymbol{\Sigma})}} \exp \left(-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right) p(x)=(2π)Ndet(Σ) 1exp(21(xμ)TΣ1(xμ))

因此,将指数部分展开

( x k − x ^ k ) T P ^ k − 1 ( x k − x ^ k ) = ( z k − C k x k ) T Q − 1 ( z k − C k x k ) + ( x k − x ˇ k ) T P ˇ k − 1 ( x k − x ˇ k ) (8-14) (\boldsymbol{x}_k-\hat{\boldsymbol{x}}_k)^\mathrm{T}\hat{\boldsymbol{P}}_k^{-1}(\boldsymbol{x}_k-\hat{\boldsymbol{x}}_k)=\left(\boldsymbol{z}_{k}-\boldsymbol{C}_{k} \boldsymbol{x}_{k}\right)^{\mathrm{T}} \boldsymbol{Q}^{-1}\left(\boldsymbol{z}_{k}-\boldsymbol{C}_{k} \boldsymbol{x}_{k}\right)+\left(\boldsymbol{x}_{k}-\check{\boldsymbol{x}}_{k}\right)^{\mathrm{T}} \check{\boldsymbol{P}}_{k}^{-1}\left(\boldsymbol{x}_{k}-\check{\boldsymbol{x}}_{k}\right) \tag{8-14} (xkx^k)TP^k1(xkx^k)=(zkCkxk)TQ1(zkCkxk)+(xkxˇk)TPˇk1(xkxˇk)(8-14)

为了求左侧的 x ^ k \hat{\boldsymbol{x}}_k x^k P ^ k \hat{\boldsymbol{P}}_k P^k ,将两侧展开,并比较一次和二次项系数。对于二次系数

P ^ k − 1 = C k T Q − 1 C k + P ˇ k − 1 (8-15) \hat{\boldsymbol{P}}_{k}^{-1}=\boldsymbol{C}_{k}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{C}_{k}+\check{\boldsymbol{P}}_{k}^{-1} \tag{8-15} P^k1=CkTQ1Ck+Pˇk1(8-15)

该式给出了协方差的计算过程。这里定义一个中间变量

K = P ^ k C k T Q − 1 (8-16) \boldsymbol{K}=\hat{\boldsymbol{P}}_{k}\boldsymbol{C}_{k}^{\mathrm{T}}\boldsymbol{Q}^{-1} \tag{8-16} K=P^kCkTQ1(8-16)

将式(8-15)两侧时左乘乘 P ^ k \hat{\boldsymbol{P}}_{k} P^k,得

I = P ^ k C k T Q − 1 C k + P ^ k P ˇ k − 1 = K C k + P ^ k P ˇ k − 1 (8-17) \boldsymbol{I}=\hat{\boldsymbol{P}}_{k}\boldsymbol{C}_{k}^{\mathrm{T}}\boldsymbol{Q}^{-1}\boldsymbol{C}_{k}+\hat{\boldsymbol{P}}_{k}\check{\boldsymbol{P}}_{k}^{-1}=\boldsymbol{K}\boldsymbol{C}_{k}+\hat{\boldsymbol{P}}_{k}\check{\boldsymbol{P}}_{k}^{-1} \tag{8-17} I=P^kCkTQ1Ck+P^kPˇk1=KCk+P^kPˇk1(8-17)

于是,得

P ^ k = ( I − K C k ) P ˇ k (8-18) \hat{\boldsymbol{P}}_{k}=(\boldsymbol{I}-\boldsymbol{K}\boldsymbol{C}_{k})\check{\boldsymbol{P}}_{k} \tag{8-18} P^k=(IKCk)Pˇk(8-18)

然后比较一次项的系数

− 2 x ^ k T P ^ k − 1 x k = − 2 z k T Q − 1 C k x k − 2 x ˇ k T P ˇ k − 1 x k (8-19) -2 \hat{\boldsymbol{x}}_{k}^{\mathrm{T}} \hat{\boldsymbol{P}}_{k}^{-1} \boldsymbol{x}_{k}=-2 \boldsymbol{z}_{k}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{C}_{k} \boldsymbol{x}_{k}-2 \check{\boldsymbol{x}}_{k}^{\mathrm{T}} \check{\boldsymbol{P}}_{k}^{-1} \boldsymbol{x}_{k} \tag{8-19} 2x^kTP^k1xk=2zkTQ1Ckxk2xˇkTPˇk1xk(8-19)

整理,得

P ^ k − 1 x ^ k = C k T Q − 1 z k + P ˇ k − 1 x ˇ k (8-20) \hat{\boldsymbol{P}}_{k}^{-1} \hat{\boldsymbol{x}}_{k}=\boldsymbol{C}_{k}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{z}_{k}+\check{\boldsymbol{P}}_{k}^{-1} \check{\boldsymbol{x}}_{k} \tag{8-20} P^k1x^k=CkTQ1zk+Pˇk1xˇk(8-20)

两侧同时左乘 P ^ k \hat{\boldsymbol{P}}_{k} P^k,并代入式(8-16)

x ^ k = P ^ k C k T Q − 1 z k + P ^ k P ˇ k − 1 x ˇ k = K z k + ( I − K C k ) x ˇ k = x ˇ k + K ( z k − C k x ˇ k ) (8-21) \begin{aligned} \hat{\boldsymbol{x}}_{k} &=\hat{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}} \boldsymbol{Q}^{-1} \boldsymbol{z}_{k}+\hat{\boldsymbol{P}}_{k} \check{\boldsymbol{P}}_{k}^{-1} \check{\boldsymbol{x}}_{k} \\ &=\boldsymbol{K} \boldsymbol{z}_{k}+\left(\boldsymbol{I}-\boldsymbol{K} \boldsymbol{C}_{k}\right) \check{\boldsymbol{x}}_{k}=\check{\boldsymbol{x}}_{k}+\boldsymbol{K}\left(\boldsymbol{z}_{k}-\boldsymbol{C}_{k} \check{\boldsymbol{x}}_{k}\right) \end{aligned} \tag{8-21} x^k=P^kCkTQ1zk+P^kPˇk1xˇk=Kzk+(IKCk)xˇk=xˇk+K(zkCkxˇk)(8-21)

至此,我们得到了后验协方差 P ^ k \hat{\boldsymbol{P}}_{k} P^k(式(8-15))和均值 x ^ k \hat{\boldsymbol{x}}_{k} x^k (式8-21)的表达式。

(3)线性卡尔曼滤波可归纳为 预测更新 两个步骤:

——————————————————————————————————————————————————————————
① 预测:

x k ˇ = A k x ^ k − 1 + u k , P ˇ k = A k P ^ k − 1 A k T + R \check{\boldsymbol{x}_k}=\boldsymbol{A}_{k} \hat{\boldsymbol{x}}_{k-1}+\boldsymbol{u}_{k}, \quad \check{\boldsymbol{P}}_{k}=\boldsymbol{A}_{k} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{A}_{k}^{\mathrm{T}}+\boldsymbol{R} xkˇ=Akx^k1+uk,Pˇk=AkP^k1AkT+R

② 更新:先计算卡尔曼增益 K \boldsymbol{K} K(这与前面 定义的 K \boldsymbol{K} K 形式有所差别,但实际上是等价的 )

K = P ˇ k C k T ( C k P ˇ k C k T + Q k ) − 1 \boldsymbol{K}=\check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}\left(\boldsymbol{C}_{k} \check{\boldsymbol{P}}_{k} \boldsymbol{C}_{k}^{\mathrm{T}}+\boldsymbol{Q}_{k}\right)^{-1} K=PˇkCkT(CkPˇkCkT+Qk)1

再计算后验概率分布

x ^ k = x ˇ k + K ( z k − C k x ˇ k ) P ^ k = ( I − K C k ) P ˇ k \begin{aligned} \hat{\boldsymbol{x}}_{k}&=\check{\boldsymbol{x}}_{k}+\boldsymbol{K}\left(\boldsymbol{z}_{k}-\boldsymbol{C}_{k} \check{\boldsymbol{x}}_{k}\right) \\ \hat{\boldsymbol{P}}_{k}&=(\boldsymbol{I}-\boldsymbol{K}\boldsymbol{C}_{k})\check{\boldsymbol{P}}_{k} \end{aligned} x^kP^k=xˇk+K(zkCkxˇk)=(IKCk)Pˇk
——————————————————————————————————————————————————————————

这就是经典卡尔曼滤波中的五个公式。事实上,卡尔曼滤波还有其他的表达形式。

8.1.3 非线性系统和扩展卡尔曼滤波(EKF)

实际上,SLAM 中的运动方程和观测方程都是非线性的,而高斯分布经过非线性变换,其结果往往也不再是高斯分布。因此,在非线性系统中,必须取一定的近似,将非高斯分布近似为高斯分布。

(1)我们希望将上面的线性卡尔曼滤波器扩展到非线性系统中。即在某点附近,将运动方程和观测方程一阶泰勒展开,只保留一阶项(线性部分),然后按照线性系统进行推导。

假设 k − 1 k-1 k1 时刻的均值和协方差矩阵为 x ^ k − 1 \hat{\boldsymbol{x}}_{k-1} x^k1 P ^ k − 1 \hat{\boldsymbol{P}}_{k-1} P^k1,在 k k k 时刻,把运动方程和观测方程在 x ^ k − 1 \hat{\boldsymbol{x}}_{k-1} x^k1 P ^ k − 1 \hat{\boldsymbol{P}}_{k-1} P^k1 处一阶展开,有

x k ≈ f ( x ^ k − 1 , u k ) + ∂ f ∂ x k − 1 ∣ x ^ k − 1 ( x k − 1 − x ^ k − 1 ) + w k (8-22) \boldsymbol{x}_{k} \approx f\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{u}_{k}\right)+\left.\frac{\partial f}{\partial \boldsymbol{x}_{k-1}}\right|_{\hat{\boldsymbol{x}}_{k-1}}\left(\boldsymbol{x}_{k-1}-\hat{\boldsymbol{x}}_{k-1}\right)+\boldsymbol{w}_{k} \tag{8-22} xkf(x^k1,uk)+xk1f x^k1(xk1x^k1)+wk(8-22)

F = ∂ f ∂ x k − 1 ∣ x ^ k − 1 (8-23) \boldsymbol{F}=\left.\frac{\partial f}{\partial \boldsymbol{x}_{k-1}}\right|_{\hat{\boldsymbol{x}}_{k-1}} \tag{8-23} F=xk1f x^k1(8-23)

同样,对观测方程,在 x k \boldsymbol{x}_k xk 处展开

z k ≈ h ( x ˇ ) + ∂ h ∂ x k ∣ x ˇ k ( x k − x ˇ k ) + n k (8-24) \boldsymbol{z}_{k} \approx h\left(\check{\boldsymbol{x}}\right)+\left.\frac{\partial h}{\partial \boldsymbol{x}_{k}}\right|_{\check{\boldsymbol{x}}_{k}}\left(\boldsymbol{x}_{k}-\check{\boldsymbol{x}}_{k}\right)+\boldsymbol{n}_{k} \tag{8-24} zkh(xˇ)+xkh xˇk(xkxˇk)+nk(8-24)

H = ∂ h ∂ x k ∣ x ˇ k (8-25) \boldsymbol{H}=\left.\frac{\partial h}{\partial \boldsymbol{x}_{k}}\right|_{\check{\boldsymbol{x}}_{k}} \tag{8-25} H=xkh xˇk(8-25)

类似式(8-10),根据运动方程得到 x k \boldsymbol{x}_k xk 的先验分布

P ( x k ∣ x 0 , u 1 : k , z 0 : k − 1 ) = N ( f ( x ^ k − 1 , u k ) , F P ^ k − 1 F T + R k ) (8-26) P\left(\boldsymbol{x}_{k} \mid \boldsymbol{x}_{0}, \boldsymbol{u}_{1: k}, \boldsymbol{z}_{0: k-1}\right)=N(f\left(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{u}_{k}\right), \boldsymbol{F} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}^{\mathrm{T}}+\boldsymbol{R}_k) \tag{8-26} P(xkx0,u1:k,z0:k1)=N(f(x^k1,uk),FP^k1FT+Rk)(8-26)

记先验的均值和协方差为

x ˇ k = f ( x ^ k − 1 , u k ) , P ˇ k = F P ^ k − 1 F T + R k (8-27) \check{\boldsymbol{x}}_k=f(\hat{\boldsymbol{x}}_{k-1}, \boldsymbol{u}_{k}), \quad \check{\boldsymbol{P}}_k=\boldsymbol{F} \hat{\boldsymbol{P}}_{k-1} \boldsymbol{F}^{\mathrm{T}}+\boldsymbol{R}_k \tag{8-27} xˇk=f(x^k1,uk),Pˇk=FP^k1FT+Rk(8-27)

在观测中,有

P ( z k ∣ x k ) = N ( h ( x ˇ ) + H ( x k − x ˇ k ) , Q k ) (8-28) P\left(\boldsymbol{z}_{k} \mid \boldsymbol{x}_{k}\right)=N(h\left(\check{\boldsymbol{x}}\right)+\boldsymbol{H}\left(\boldsymbol{x}_{k}-\check{\boldsymbol{x}}_{k}\right), \boldsymbol{Q}_k) \tag{8-28} P(zkxk)=N(h(xˇ)+H(xkxˇk),Qk)(8-28)

类似线性卡尔曼滤波,定义增益 K k \boldsymbol{K}_k Kk

K k = P k ˇ H T ( H P k ˇ H T + Q k ) ) − 1 (8-29) \boldsymbol{K}_k=\check{\boldsymbol{P}_k}\boldsymbol{H}^\mathrm{T}(\boldsymbol{H}\check{\boldsymbol{P}_k}\boldsymbol{H}^\mathrm{T}+\boldsymbol{Q}_k))^{-1} \tag{8-29} Kk=PkˇHT(HPkˇHT+Qk))1(8-29)

那么, x k \boldsymbol{x}_k xk 的后验概率分布为

x ^ k = x ˇ k + K k ( z k − h ( x ˇ k ) ) , P ^ k = ( I − K k H ) P ˇ k (8-29) \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k+\boldsymbol{K}_k(z_k-h(\check{\boldsymbol{x}}_k)), \quad \hat{\boldsymbol{P}}_k=(\boldsymbol{I}-\boldsymbol{K}_k\boldsymbol{H})\check{\boldsymbol{P}}_k \tag{8-29} x^k=xˇk+Kk(zkh(xˇk)),P^k=(IKkH)Pˇk(8-29)

8.1.4 小结

EKF 的优点:

  • 推导简单,适用于各种形式传感器;

  • 易做多传感器融合。

EKF 的缺点

  • 一阶马尔科夫性过于简单;

  • 可能会发散;

  • 线性化误差;

  • 从程序实现上来说,需要储存所有状态量的均值和方差,不适用于大型场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178211.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebMvcConfigurer配置详解

一、简介 WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制,可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。基于ja…

idea2023启动springboot项目如何指定配置文件

方法一: 方法二: 举例:

split loop

// refactoringmotherfucker.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <vector> #include <memory>// before refactoring of split loop class People { public:People(double _age,double _…

互斥量保护资源

一、概念 在多数情况下&#xff0c;互斥型信号量和二值型信号量非常相似&#xff0c;但是从功能上二值型信号量用于同步&#xff0c; 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别&#xff0c;互斥型信号量可以有效解决优先级反转现 象。 …

Newman

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;如何安装Newman 1、下载并安装NodeJs 在官网下载NodeJs&#xff1a; Download | Node.js&#xff08;官网的…

CKA认证模块②-K8S企业运维和落地实战-2

CKA认证模块②-K8S企业运维和落地实战-2 K8S常见的存储方案及具体应用场景分析 k8s存储-empty emptyDir类型的Volume是在Pod分配到Node上时被创建&#xff0c;Kubernetes会在Node上自动分配一个目录&#xff0c;因此无需指定宿主机Node上对应的目录文件。 这个目录的初始内容…

多线程概述及创建

什么是线程&#xff1f; 线程(thread)是一个程序内部的一条执行路径。 我们之前启动程序执行后&#xff0c;main方法的执行其实就是一条单独的执行路径。 程序中如果只有一条执行路径&#xff0c;那么这个程序就是单线程的程序。 多线程是什么&#xff1f; 多线程是指从软…

软件测试不是所有人都适合的

测试工作是一项极其重要的质量保证活动&#xff0c;因此测试部门既是软件发布质量把控的出口&#xff0c;也是客户意见反馈的入口。但是因为之前的不重视&#xff0c;导致了软件测试行业的发展相对滞后&#xff0c;优秀的软件测试工程师非常难得。 一个优秀的测试工程师要对一些…

原生js做打地鼠游戏

抱歉素材有点难找&#xff0c;这次的学习重点是在JS的实现&#xff0c;梳理一下打地鼠的实现逻辑&#xff0c;主要分为三个主要功能函数。 开始游戏&#xff1a;对分数、并根据游戏难度对游戏的倒计时和延迟进行初始化之后&#xff0c;利用setInterval定时器Math.random随机函…

【MySQL】随手笔记(积跬步至千里)

一、常用函数 &#xff08;1&#xff09;uuid() select uuid(); //生成随机数 select replace(uuid(),-,); //将随机数的-去掉 select upper(replace(uuid(),-,)); ///改成大写应用举例&#xff1a; &#xff08;1&#xff09;非自增主键 非自增主键&#xff0c;insert语…

《深入浅出进阶篇》洛谷P4147 玉蟾宫——悬线法dp

上链接&#xff1a;P4147 玉蟾宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4147 上题干&#xff1a; 有一个NxM的矩阵&#xff0c;每个格子里写着R或者F。R代表障碍格子&#xff0c;F代表无障碍格子请找出其中的一个子矩阵&#xff0c…

【Cocos新手进阶】通过cocos实现可控制的动态加载更新的日志界面效果

本篇文章主要讲解&#xff0c;通过cocos实现可控制的动态加载更新的日志界面效果。 日期&#xff1a;2023年11月15日 作者&#xff1a;任聪聪 效果演示&#xff1a; 效果说明&#xff1a;在一个界面可以动态输出for循环的结果并更新到界面中进行不断加载的日志页面效果&#x…