SLAM数学描述
SLAM过程可总结为两个基本方程:
$ X_k=f(X_{k-1},U_k,W_k)$ 运动方程
$ Z_{k,j}=h(Y_j,X_k,V_{k,j})$ 观测方程
对于不同的传感器,这两个方程有不同的参数化形式。如果我们保持通用性,把它们取成抽象形式,那么SLAM过程可总结为上述两个基本方程。
这两个方程描述了最基本的SLAM问题:当我们知道运动测量的读数 u ,以及传感器的读数 z 时,如何求解定位问题(估计 x)和建图问题(估计 y)? 这时,我们把SLAM问题建模成了一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏着的状态变量?
状态估计问题的求解,与两个方程的具体形式,以及噪声服从哪种分布有关。我们按照运动和观测方程是否为线性,噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。其中线性高斯系统(LG 系统)最为简单,他的无偏最优估计可以由卡尔曼滤波器(KF)给出。而在复杂的非线性非高斯系统(NLNG系统)中,我们会使用以扩展卡尔曼滤波器(EKF)和非线性优化两大类方法去求解它。时至今日,主流视觉SLAM使用以图优化(Graph Optimization)为代表的优化技术进行状态估计。我们以为优化技术已经明显优于滤波器技术,只要计算资源允许,我们通常都偏向于使用优化方法。
二、什么是运动? 我们要考虑从 $ K-1 $ 时刻到 $ K $ 时刻,机器人的位置 $ X $ 是如何变化的。
通常,机器人会携带一个测量自身运动的传感器,比如说码盘或惯性传感器。这个传感器可以测量有关运动的读数,无论什么传感器,我们都能使用一个通用的、抽象的数学模型:
$ X_k=f(X_{k-1},U_k,W_k)$
这里的 $ U_k$ 是运动传感器的读数(有时也叫输入),$ W_k$ 为噪声。
三、什么是观测? 假设机器人在$ K $ 时刻,于 $ X_k$ 处探测到了某一个路标 ,我们要考虑这件事情是如何用数学语言来描述的。
当机器人在 位置上看到某个路标点 ,产生了一个观测数据 ,用一个抽象的函数$ h $ 来描述这个关系:
$ Z_{k,j}=h(Y_j,X_k,V_{k,j})$
这里$ V_{k,j}$ 是这次观测里的噪声。