本博客主要记录学习高翔老师视觉SLAM14讲的总结笔记,若有总结不对的地方,欢迎大家与我讨论。
一、状态估计
- 由于传感器存在噪声,所以位姿x和路标点y可看成服从某种概率分布的随机变量,并且误差是逐渐累计的,所以更需要通过真实的观测数据来减小误差。
- 当前时刻的,若不仅使用过去的信息更新,也用到了未来的信息更新,则称之为批量方法,若仅用则称为渐进方法。
- 将当前位姿和路标点位置未知量统一记作,即,则状态方程为:
则k时刻的状态分布可写为:
由贝叶斯法则:
二、卡尔曼滤波
由 一阶马尔可夫性假设,上式只与k-1时刻有关,所以可以代入到状态方程中,估计当前状态,其核心是由预测-校正两步组成的。
2.1 线性系统与KF滤波
线性高斯系统可由下式表示:
KF滤波假设已知k-1时刻的后验状态估计和,随后经过3步计算:
- 先验(预测):
- 卡尔曼增益:
- 后验(校正):
K与成反比,当观测数据不可信时,则K较小,更加相信先验状态。卡尔曼滤波器构成了线性系统的最优无偏估计。
2.2 非线性系统与EKF
SLAM中运动方程和观测方程常常是非线性的,高斯分布经过非线性变换后,往往不再是高斯分布,所以EKF考虑只在某点附近的一阶泰勒展开,只保留一阶线性部分。
- 一阶泰勒展开:
其中设 ,
- 预测:
- 卡尔曼增益:
- 校正:
三、BA与图优化
在视觉SLAM中往往没有运动模型,仅有观测模型,其总结如下:
- P点从世界坐标系->相机坐标系:
- P'投影至归一化平面,得归一化坐标
- 考虑畸变情况:
- 根据内参模型,计算像素坐标:
观测模型的代价函数:
BA就是指求解该最小二乘,同时对位姿和路标点进行优化调整。
3.1 BA求解
将待优化变量放在一起,利用非线性优化方法求解:
代价函数对姿态的偏导数, 代价函数对路标点位置的偏导数。若将求和号转换为矩阵拼接,可将上式转换为下式:
由此也可得出,代价函数的雅克比矩阵为:
增量方程为:
其中H为:
由于H矩阵是一个维数相当大的矩阵,因此需要采用一些技巧才能求解该增量方程。
3.2 稀疏性和边缘化
取J中的某部分,仅在第i处和第j处为非零值,其余全为0,同时也说明误差项只与这两个顶点有关。
H11只与相机位姿有关,为对角阵,H22只与路标点有关,也为对角阵,H12和H21需根据观测数据而定。H矩阵称为邻接矩阵, 描述了第(i,j)元素,若两个顶点存在联系,则该位置元素不为0,H矩阵中的非对角部分的非零矩阵块可以理解为其对应的两个变量之间存在联系,即约束。
在SLAM中,H矩阵常称为箭头形矩阵,由于路标点数量远远多于相机位姿数量。面对H矩阵,常使用Shur消元,也称为边缘化。
该方程可以先求解,再求解 。上式左侧系数矩阵的非对角上的非零矩阵块表示了两个相机之间存在共同的路标点,称为共视。
3.3 鲁棒核函数
代价函数对误差取二范数,所带来的缺点是若存在误匹配的情况,会造成代价很大,优化时也仅对误匹配的量进行优化,而鲁棒核函数可以解决该问题,常用的有Huber核。