视觉SLAM十四讲读书笔记:Ch06非线性优化
这是我系列博客《视觉SLAM十四讲》的读书笔记中的一篇,总结了第六章“非线性优化”的内容。
Ch06 非线性优化
1 状态估计问题
1.1 批量状态估计与最大后验估计
SLAM模型由一个运动方程和观测方程构成
我们分析一点具体的参数化表达:对于位姿变量$x_k$可以使用$T_k\in\text{SE}(3)$表达,此时假设在$x_k$处对路标$y_j$进行了一次观测,得到对应像素位置为$z_{k,j}$,则观测方程可以写作
进一步地,我们考虑噪声,假设运动方程和观测方程中噪声$w_k,v_{k,j}$满足零均值高斯分布
SLAM的状态估计解决方法分为两个线路:
类别 | 增量/滤波 | 批量/优化 |
---|---|---|
核心思想 | 逐帧更新当前状态 | 累积数据后统一优化 |
代表算法 | EKF-SLAM 及其衍生 | BA/图优化、SfM |
优点 | 计算量小,天然在线 | 全局精度高,误差分布均匀 |
缺点 | 历史状态不可回溯,误差易累积 | 计算量大,极端做法不实时 |
一种折中实现是滑动窗口估计,仅对最近一段轨迹与地图进行局部优化,兼顾实时性与精度,是当前视觉 SLAM 的主流实现。
这里我们讨论批量方法,考虑1到$N$的所有时刻,假设有$M$个坐标点
我们使用贝叶斯定理:
如果没有先验,也可以使用最大似然估计MLE(Maximum Likelihood Estimation)
1.2 最小二乘法
对于一次观测
则:
考虑批量数据,我们假设各个时刻的输入和观测是独立的,于是可以对联合概率分布进行因式分解
最小化所有时刻的估计值与真实读数之间的马氏距离,等价于求最大似然估计,因此我们得到了问题:
上面我们得到SLAM的最小二乘法问题有特定的结构:
- 目标函数由许多误差的二次型组成。总体的维度很高,但是误差项都是简单的,整个问题呈现出一种稀疏的形式
- 如果使用李代数代表增量,则问题就是一个无约束的优化问题;但如果使用旋转矩阵/变化矩阵描述位姿,则会引入旋转矩阵本身的约束,使得优化变得困难。
- 使用马氏距离度量误差,误差的分布将影响此项的权重,如果观测很准确,那么协方差矩阵就会很小(直觉上的理解,实际上矩阵的大小不能像标量一样简单),那么他的逆矩阵就会变大。
2 非线性最小二乘
考虑一个简单的最小二乘问题:
可以在确认合适的初始值之后使用迭代的方法来逐步优化,大致步骤如下:
- 给定某处初始值
- 对于第
次迭代,寻找一个增量 ,使得 达到极小值 - 若
足够小,就停止 - 否则令
我们将一个求解全局性质的问题转换为一个关注局部性质的问题(只关注)
2.1 梯度法
将
当保留一阶梯度的时候,取增量为反向的梯度:
如果保留二阶梯度信息
2.2 高斯牛顿法
对
- 给定某处初始值
- 对于第
次迭代,求出Jocabian矩阵 和误差 - 求解增量方程:
- 若
足够小,就停止;否则令
不过,高斯牛顿法并非总是可靠的。由于它使用
2.3 Levenberg-Marquardt Method, LM
在上面一段话中,我们提到一个方法就是给
为了确定信赖域的范围,一个比较好的方法就是权衡近似模型和实际函数值的差异,如果差异大,那么这个区域显然不是信赖域。我们定义了指标
- 给定初始值
以及初始优化半径 - 对于第k次迭代,求解带约束的优化问题. 其中
是系数矩阵
- 计算
- 若
,则设置 - 若
,则设置 - 若
小于某个阈值,则认为近似可行。令
上面提到的系数矩阵D和半径
为了求解上面过程中的约束优化问题,我们可以使用拉格朗日法,求解无约束优化问题