参考书籍:
《视觉SLAM十四讲》
《机器人学中的状态估计》
知乎:如何通俗并尽可能详细地解释卡尔曼滤波?云羽落的回答
还需要一些高数、线性代数和概率论的基础。
本文主要是一些学习笔记与个人的总结,主要引用自上述的参考书籍中。
早期的SLAM问题是一个状态估计问题,被人们称为“空间状态不确定性估计”,正是如今的后端优化问题。这也反映了SLAM问题的本质:对运动主体自身和周围空间不确定的估计。为了解决这个问题,需要用到 状态估计 理论。而状态估计理论的经典代表就是以卡尔曼滤波为核心的 卡尔曼系列滤波器。
状态估计:通过初始状态、各时刻的观测数据、输入数据,估计系统的真实状态。
运动主体携带各种传感器在未知环境中运动,主要由以下两个事情描述:
(假设为:考虑离散时间的线性时变系统)
除了 v k v_k vk以外,其他变量均为随机变量;各个时刻的噪声互不相关; A A A称为转移矩阵; C C C称为观测矩阵。
其中各个变量含义:
除系统模型之外,我们还知道:
带下帽子的变量称为先验,上帽子的称为后验。
MAP:已知输入和观测,求最大概率的状态
x ^ = arg max x p ( x ∣ v , y ) \hat x = \underset{x}{\argmax}p(x|v,y) x^=xargmaxp(x∣v,y)
用贝叶斯公式重写目标函数:
x ^ = arg max x p ( x ∣ v , y ) = arg max x p ( y ∣ x , v ) p ( x ∣ v ) p ( y ∣ v ) = arg max x p ( y ∣ x ) p ( x ∣ v ) \hat x = \underset{x}{\argmax}p(x|v,y) = \underset{x}{\argmax} \frac{p(y|x,v)p(x|v)}{p(y|v)} =\underset{x}{\argmax} p(y|x)p(x|v) x^=xargmaxp(x∣v,y)=xargmaxp(y∣v)p(y∣x,v)p(x∣v)=xargmaxp(y∣x)p(x∣v)
在这里,需要把不带下标的变量定义为宏观变量:
x = x 0 : K = ( x 0 , ⋯ , x K ) v = ( x 0 ˇ , v 1 : K ) = ( x ˇ , v 1 , ⋯ , v K ) y = y 0 : K = ( y 0 , ⋯ , y K ) x=x_{0:K}=(x_0,\cdots,x_K) \\ v=(\check{x_0} ,v_{1:K})=(\check{x},v_1,\cdots,v_K)\\y=y_{0:K}=(y_0,\cdots,y_K) x=x0:K=(x0,⋯,xK)v=(x0ˇ,v1:K)=(xˇ,v1,⋯,vK)y=y0:K=(y0,⋯,yK)
由于各时刻观测、输入的噪声都是无关的,上面两个项可以因式分解:
p ( y ∣ x ) = ∏ k = 0 K p ( y k ∣ x k ) p ( x ∣ v ) = p ( x 0 ∣ x 0 ˇ ) ∏ k = 1 K p ( x k ∣ x k − 1 , v k ) p(y|x)=\prod_{k=0}^{K}p(y_k|x_k)\\p(x|v)=p(x_0|\check{x_0})\prod_{k=1}^{K}p(x_k|x_{k-1},v_k) p(y∣x)=k=0∏Kp(yk∣xk)p(x∣v)=p(x0∣x0ˇ)k=1∏Kp(xk∣xk−1,vk)
同时,对目标函数两边取对数,对数是个单调映射,不影响最优解:
ln ( p ( y ∣ x ) p ( x ∣ v ) ) = ln p ( x 0 ∣ x 0 ˇ ) + ∑ k = 1 K ln p ( x k ∣ x k − 1 , v k ) + ∑ k = 0 K ln p ( y k ∣ x k ) \ln \left( p(y|x)p(x|v) \right) = \ln p(x_0|\check{x_0}) + \sum_{k=1}^{K}\ln p(x_k|x_{k-1},v_k) + \sum_{k=0}^{K}\ln p(y_k|x_k) ln(p(y∣x)p(x∣v))=lnp(x0∣x0ˇ)+k=1∑Klnp(xk∣xk−1,vk)+k=0∑Klnp(yk∣xk)
这时因子相乘变成了对数项相加。
高斯分布取对数之后有较好的形式:
ln p ( x 0 ∣ x 0 ˇ ) = − 1 2 ( x 0 − x 0 ˇ ) T P ˇ 0 − 1 ( x − x 0 ˇ ) − 1 2 ln ( ( 2 π ) N det P ˇ 0 ) \ln p(x_0|\check{x_0}) = -\frac{1}{2}(x_0-\check{x_0})^T \check{P}_0^{-1}(x-\check{x_0}) \\ -\frac{1}{2}\ln \left( (2\pi)^N \det \check{P}_0\right) lnp(x0∣x0ˇ)=−21(x0−x0ˇ)TPˇ0−1(x−x0ˇ)−21ln((2π)NdetPˇ0) ln p ( x k ∣ x k − 1 , v k ) = − 1 2 ( x k − A k − 1 x k − 1 − v k ) T Q k − 1 ( x k − A k − 1 x k − 1 − v k ) − 1 2 ln ( ( 2 π ) N det Q k ) \ln p(x_k|x_{k-1},v_k) =-\frac{1}{2}( x_k - A_{k-1}x_{k-1} - v_k)^T Q_k^{-1} (x_k - A_{k-1}x_{k-1} - v_k) \\ -\frac{1}{2}\ln \left( (2\pi)^N \det Q_k\right) lnp(xk∣xk−1,vk)=−21(xk−Ak−1xk−1−vk)TQk−1(xk−Ak−1xk−1−vk)−21ln((2π)NdetQk) ln p ( y k ∣ x k ) = − 1 2 ( y k − C k x k ) T R k − 1 ( y k − C k x k ) − 1 2 ln ( ( 2 π ) N det R k ) \ln p(y_k|x_k) = -\frac{1}{2}( y_k - C_k x_k )^T R_k^{-1} (y_k - C_k x_k) \\ -\frac{1}{2}\ln \left( (2\pi)^N \det R_k\right) lnp(yk∣xk)=−21(yk−Ckxk)TRk−1(yk−Ckxk)−21ln((2π)NdetRk)
舍掉那些与 x x x无关的项,定义:
J v , k ( x ) = { 1 2 ( x 0 − x 0 ˇ ) T P ˇ 0 − 1 ( x − x 0 ˇ ) , k = 0 1 2 ( x k − A k − 1 x k − 1 − v k ) T Q k − 1 ( x k − A k − 1 x k − 1 − v k ) , k = 1 , ⋯ , K J_{v,k}(x) = \left\{\begin{matrix} &\frac{1}{2}(x_0-\check{x_0})^T \check{P}_0^{-1}(x-\check{x_0}),&k=0\\ &\frac{1}{2}( x_k - A_{k-1}x_{k-1} - v_k)^T Q_k^{-1} (x_k - A_{k-1}x_{k-1} - v_k),& k=1,\cdots,K \end{matrix}\right. Jv,k(x)={21(x0−x0ˇ)TPˇ0−1(x−x0ˇ),21(xk−Ak−1xk−1−vk)TQk−1(xk−Ak−1xk−1−vk),k=0k=1,⋯,K J y , k ( x ) = 1 2 ( y k − C k x k ) T R k − 1 ( y k − C k x k ) , k = 0 , … , K \begin{matrix} J_{y,k}(x)=\frac{1}{2}( y_k - C_k x_k )^T R_k^{-1} (y_k - C_k x_k),& k=0,\dots,K \end{matrix} Jy,k(x)=21(yk−Ckxk)TRk−1(yk−Ckxk),k=0,…,K
于是目标函数变为求这个式的最小化:
{ x ^ = arg min x J ( x ) J ( x ) = ∑ k = 0 K ( J v , k ( x ) + J y , k ( x ) ) \left\{\begin{matrix} \hat{x}=\underset{x}{\argmin}J(x) \\ J(x)=\sum_{k=0}^{K}\left( J_{v,k}(x) + J_{y,k}(x)\right) \end{matrix}\right. {x^=xargminJ(x)J(x)=∑k=0K(Jv,k(x)+Jy,k(x))
这个问题就是常见的无约束最小二乘。
写成更紧凑的矩阵形式(提升形式):
z = [ x 0 ˇ v 1 ⋮ v K y 0 y 1 ⋮ y K ] , x = [ x 0 ⋮ x K ] , H = [ 1 − A 0 1 ⋱ ⋱ − A K − 1 1 C 0 C 1 ⋱ C K ] z=\begin{bmatrix} \check{x_0}\\ v_1\\ \vdots\\ v_K\\ y_0\\ y_1\\ \vdots\\ y_K \end{bmatrix}, x=\begin{bmatrix} x_0\\ \vdots\\ x_K \end{bmatrix}, H=\begin{bmatrix} 1\\ -A_0 & 1\\ &\ddots &\ddots\\ &&-A_{K-1} &1\\ C_0\\ &C_1\\ &&\ddots\\ &&&C_K \end{bmatrix} z=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡x0ˇv1⋮vKy0y1⋮yK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤,x=⎣⎢⎡x0⋮xK⎦⎥⎤,H=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1−A0C01⋱C1⋱−AK−1⋱1CK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ W = [ P 0 ˇ Q 1 ⋱ Q K R 0 R 1 ⋱ R K ] W= \begin{bmatrix} \check{P_0}\\ &Q_1\\ &&\ddots\\ &&&Q_K\\ &&&&R_0\\ &&&&&R_1\\ &&&&&&\ddots\\ &&&&&&&R_K \end{bmatrix} W=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡P0ˇQ1⋱QKR0R1⋱RK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤把运动和观测写在一起:
z = H x + W z=Hx+W z=Hx+W
提升形式的目标函数: J ( x ) = 1 2 ( z − H x ) T W − 1 ( z − H x ) J(x)=\frac{1}{2}(z-Hx)^TW^{-1}(z-Hx) J(x)=21(z−Hx)TW−1(z−Hx)它是个二次的,求其最小值,只要令自变量导数为零:
∂ J ( x ) ∂ x T ∣ x ^ = − H T W − 1 ( z − H x ^ ) = 0 ⇒ ( H T W − 1 H ) x ^ = H T W − 1 z \frac{\partial J(x)}{\partial x^T} \mid_{\hat x} = -H^TW^{-1}(z-H\hat x)=0 \\ \Rightarrow(H^TW^{-1}H)\hat x = H^TW^{-1}z ∂xT∂J(x)∣x^=−HTW−1(z−Hx^)=0⇒(HTW−1H)x^=HTW−1z
于是就解析地得到了最优解
在线性高斯系统中,可以根据运动方程和观测方程显式写出状态变量分布的变化过程:
运动方程:
在上式中,右侧只有 v , w v,w v,w,故容易求得均值和协方差( v v v为确定的输入量, w w w是高斯,所以此处也是高斯分布的线性变换):
所以,先验部分写作: p ( x ∣ v ) = N ( x ˇ , P ˇ ) = N ( A v , A Q A T ) p(x|v)=\mathcal{N}(\check{x},\check{P})=\mathcal{N}(Av,AQA^T) p(x∣v)=N(xˇ,Pˇ)=N(Av,AQAT)
此处先验的意思为:仅考虑运动方程时的条件概率分布
观测模型:
联合分布:
(由于已知 v v v时, x x x的先验分布已经确定,所以 y y y的分布也可确定)
p ( x , y ∣ v ) = N ( [ x ˇ C x ˇ ] , [ P ˇ P ˇ C T C P ˇ C P ˇ C T + R ] ) p(x,y|v) = \mathcal{N} \left( \begin{bmatrix} \check{x}\\ C\check{x} \end{bmatrix}, \begin{bmatrix} \check{P} & \check{P}C^T \\ C\check{P} & C\check{P}C^T+R \end{bmatrix} \right) p(x,y∣v)=N([xˇCxˇ],[PˇCPˇPˇCTCPˇCT+R])
条件分布:
下面是已知联合分布,求条件分布。
联合=条件*边缘
p ( x , y ∣ v ) = p ( x ∣ v , y ) p ( y ∣ v ) = N ( [ x ˇ C x ˇ ] , [ P ˇ P ˇ C T C P ˇ C P ˇ C T + R ] ) p(x,y|v) = p(x|v,y)p(y|v)\\ =\mathcal{N} \left( \begin{bmatrix} \check{x}\\ C\check{x} \end{bmatrix}, \begin{bmatrix} \check{P} & \check{P}C^T \\ C\check{P} & C\check{P}C^T+R \end{bmatrix} \right) p(x,y∣v)=p(x∣v,y)p(y∣v)=N([xˇCxˇ],[PˇCPˇPˇCTCPˇCT+R])
由下列高斯推断:
代入得: p ( x ∣ v , y ) = N ( x ˇ + P ˇ C T ( C P ˇ C T + R ) − 1 ( y − C x ˇ ) , P ˇ − P ˇ C T ( C P ˇ C T + R ) − 1 C P ˇ ) p(x|v,y)=\mathcal{N}\left( \check{x}+\check{P}C^T(C\check{P}C^T+R)^{-1}(y-C\check{x}),\check{P}-\check{P}C^T(C\check{P}C^T+R)^{-1}C\check{P} \right) p(x∣v,y)=N(xˇ+PˇCT(CPˇCT+R)−1(y−Cxˇ),Pˇ−PˇCT(CPˇCT+R)−1CPˇ)
SMW式:
故化简可得:
p ( x ∣ v , y ) = N ( ( P ˇ − 1 + C T R − 1 C ) − 1 ( P ˇ − 1 x ˇ + C T R − 1 y ) , ( P ˇ − 1 + C T R − 1 C ) − 1 ) p(x|v,y)=\mathcal{N}\left( (\check{P}^{-1}+C^TR^{-1}C)^{-1}(\check{P}^{-1}\check{x}+C^TR^{-1}y),(\check{P}^{-1}+C^TR^{-1}C)^{-1} \right) p(x∣v,y)=N((Pˇ−1+CTR−1C)−1(Pˇ−1xˇ+CTR−1y),(Pˇ−1+CTR−1C)−1)
进一步整理:
均值部分: ( P ˇ − 1 + C T R − 1 C ) x ^ = P ˇ − 1 x ˇ + C T R − 1 y (\check{P}^{-1}+C^TR^{-1}C)\hat{x}=\check{P}^{-1}\check{x}+C^TR^{-1}y (Pˇ−1+CTR−1C)x^=Pˇ−1xˇ+CTR−1y
代入 x ˇ = A v \check{x}=Av xˇ=Av和 P ˇ − 1 = ( A Q A T ) − 1 = ( A − 1 ) T Q − 1 A − 1 \check{P}^{-1}=(AQA^T)^{-1}={(A^{-1})}^{T}Q^{-1}A^{-1} Pˇ−1=(AQAT)−1=(A−1)TQ−1A−1,
得: ( ( A − 1 ) T Q − 1 A − 1 + C T R − 1 C ) x ^ = ( A − 1 ) T Q − 1 v + C T R − 1 y ({(A^{-1})}^{T}Q^{-1}A^{-1}+C^TR^{-1}C)\hat{x}={(A^{-1})}^{T}Q^{-1}v+C^TR^{-1}y ((A−1)TQ−1A−1+CTR−1C)x^=(A−1)TQ−1v+CTR−1y
这里由于A为下三角矩阵,故A逆有特殊的形式:
A − 1 = [ 1 − A 0 1 − A 1 1 − A 2 ⋱ ⋱ 1 − A k − 1 1 ] A^{-1}= \begin{bmatrix} 1 & \\ -A_0&1\\ &-A_1&1\\ &&-A_2&\ddots\\ &&& \ddots &1\\ &&&& -A_{k-1}&1 \end{bmatrix} A−1=⎣⎢⎢⎢⎢⎢⎢⎡1−A01−A11−A2⋱⋱1−Ak−11⎦⎥⎥⎥⎥⎥⎥⎤
得出一些结论:
与MAP结果一致。
线性高斯系统的最优估计显然有以下要求:
该处使用的url网络请求的数据。