马尔科夫和卡尔曼滤波
《视觉slam十四讲》读书笔记。
很多人都疑惑,马尔科夫又是什么意思?一个滤波问题怎么才能用得上卡尔曼滤波呢?扩展卡尔曼滤波又和卡尔曼滤波有什么关系?本篇博客不讲这些内容之间的推导关系,毕竟已经有无数人详细讲解了这个过程,这里只大概捋一捋它们之间的关系,已经我们该如何进行选择。
马尔科夫性质
一个马尔科夫过程就是指过程中的每个状态的转移只依赖于之前的 n个状态,这个过程被称为1个 n阶的模型,其中 n是影响转移状态的数目。最简单的马尔科夫过程就是一阶过程,每一个状态的转移只依赖于其之前的那一个状态。
在卡尔曼滤波中,我们就会使用马尔科夫性质,而且是一阶过程,我们不用关心它的推导过程。在卡尔曼滤波方法中,我们会从某时刻的状态估计,推导到下一个时刻。另外一种方法是依然考虑 k 时刻状态与之前所有状态的关系,此时将得到非线性优化为主体的优化框架。
从视觉slam到卡尔曼滤波
SLAM 过程由运动方程和观测方程来描述。那么,假设在 t = 0 t = 0 t=0 到 t = N t = N t=N 的时间内,我们有 x 0 \boldsymbol { x } _ { 0 } x0 到 x N \boldsymbol { x } _ { N } xN那么多个位姿,并且有 y 1 , … , y M \boldsymbol { y } _ { 1 } , \dots , \boldsymbol { y } _ { M } y1,…,yM 那么多个路标。一般来说,视觉slam过程的运动和观测方程为:
x k = f ( x k − 1 , u k ) + w k \boldsymbol { x } _ { k } = f \left( \boldsymbol { x } _ { k - 1 } , \boldsymbol { u } _ { k } \right) + \boldsymbol { w } _ { k } xk=f(xk−1,uk)+wk
z k , j = h ( y j , x k ) + v k , j \boldsymbol { z } _ { k , j } = h \left( \boldsymbol { y } _ { j } , \boldsymbol { x } _ { k } \right) + \boldsymbol { v } _ { k , j } zk,j=h(yj,xk)+vk,j
之前已经介绍了最大似然估计,把状态估计转换为最小二乘的做法。首先,由于位姿和路标点都是待估计的变量,我们改变一下记号,令 x k \boldsymbol { x } _ { k } xk为 k k k时刻的所有未知量。它包含了当前时刻的相机位姿与 m m m 个路标点。在这种记号的意义下(虽然与之前稍有不同,但含义是清楚的),写成:
x k ≜ { x k , y 1 , … , y m } \boldsymbol { x } _ { k } \triangleq \left\{ \boldsymbol { x } _ { k } , \boldsymbol { y } _ { 1 } , \dots , \boldsymbol { y } _ { m } \right\} xk≜{ xk,y1,…,ym}
把 k k k时刻的所有观测记作 z k z _ { k } zk。于是,运动方程与观测方程的形式可写得更加简洁。这里不会出现 y \boldsymbol { y } y,但我们要明白这时 x \boldsymbol { x } x 中已经包含了之前的 y \boldsymbol { y } y 了:
{ x k = f ( x k − 1 , u k ) + w k z k = h ( x k ) + v k k = 1 , … , N \left\{ \begin{array} { l 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} \right. k = 1 , \ldots , N { xk=f(xk−1,uk)+w