SLAM学习——非线性优化
来源:互联网 发布:斗鱼刷屏软件 编辑:程序博客网 时间:2024/05/22 01:52
1.状态估计问题
对于SLAM经典模型,我们知道是由一个运动方程和一个观测方程构成,如下方程:
其中为相机的位姿,u 为输入数据,即为采集到的数据。
假如我们在处观测到路标,对应到图像上的像素位置 ,那么我们的观测方程可以表示为:
其中s为像素距离,即摄像机坐标系上的一点到像素坐标系的距离,K为内参,为李代数se(3)。接着,在运动方程和观测方程中,我们假设噪声都满足于均值为0的高斯分布:
在这些噪声的影响下,我们希望通过带噪声的数据 z 和 u来推断位姿 x 和地图 y(以及他们的概率分布),这构成了一个状态问题,其中有优化方法有:1.扩展卡尔曼滤波器(EKF)求解,关心的是当前时刻的状态估计,而对直接的状态没有多加考虑。2.非线性优化,使用所有时刻采集到的数据进行状态估计,被认为优于传统滤波器。
从概率学角度来看,把所有需要估计的变量都放到一个“状态变量中”,即 ,在已知输入数据u和观测数据z的条件下,求计算 x 的条件概率分布:。
当然,如果在运动过程中没有采集数据,且只有一张张图片时,概率分布又可以转换为。如果忽略图像在时间上的联系,看做一堆彼此没有关系的图片,该问题为SfM,即如何从许多图像中重建三维空间结构。当我们把SLAM看做图像具有时间先后顺序,需要实时求解一个SfM问题。利用贝叶斯法则,有:
其中,贝叶斯法则左侧通常成为后验概率,右侧的P(z|x)成为似然,另一部分P(x)称为先验。直接求后验是困难的,但是求一个状态最优估计,使得在该状态下后验概率最大化,则是可行的。即最大后验概率为最大似然与先验的乘积。
如果当不知道机器人在哪里,那我们则没有了先验,可以求解 x 的最大似然估计(MLE):
上述公式可表达为:在什么样的状态下,最可能产生现在观测到的数据。
为转换为最小二乘问题,我们可以得到最大似然估计等价于最小化噪声项的平方(在范数意义下),我们定义数据与估计值之间的误差:
并求该误差的平方和:
以上公式为整体意义上的最小二乘法,它的最优解等价于状态的最大似然估计。当我们把估计的轨迹与地图代入SLAM的运动、观测方程时,并不会很完美。这时候我们对状态进行微调,使得整体的误差下降,这是一个非线性优化问题。
SLAM中的最小二乘问题具有一些特定的结构:
1.整个问题的目标函数由许多个误差的(加权的)平方和组成。虽然总体的状态变量维数很高,但每个误差项都是简单的,仅与一俩个状态变量有关,运动误差只与有关,观测误差只与有关。
2.如果使用李代数表示,那么该问题转换成无约束最小二乘问题。
3.使用二范数度量误差,相当于欧式空间中距离的平方。
2.非线性最小二乘
举个最简单的最小二乘问题: (这里应该是二范数),为求其最小值,则需要求其导数,然后得到其求解 x 的最优解。对于不方便求解的最小二乘问题。
非线性最小二乘:最小二乘法(又称最小平方法)通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
例如SLAM问题,我们具体步骤有:
1.给定某个初始值。
2.对于第k次迭代,寻找增量,使得 (这里应该是二范数)达到最小。
3.若足够小,则停止。
4.否则,令,返回第2步。
但是,如何求这个增量 呢 ????
求解增量最直观的方式是将目标函数在 x 附近进行泰勒展开,得到:
(这里应该是二范数)
我们可以保留泰勒展开一届或者二阶项,对应的求解方法为一阶梯度或二阶梯度法。
如果保留一阶梯度,那么增量的解就为 ,则沿着反方向梯度方向前进即可。称为最速下降法,但是由于过于贪心,容易走锯齿路线,增加迭代次数。如果保留二阶梯度,即为牛顿法,那么增量的解为,但是需要计算H矩阵(海塞矩阵),尽量避免。
补充一些范数的知识:
1-范数:,即向量元素绝对值之和。
2-范数:,代表向量元素绝对值的平方和再开方。
p-范数:,向量元素绝对值的p次方和的p次幂。
2.1高斯牛顿法
高斯牛顿法,它的思想是将f(x)进行泰勒展开(目标函数不是f(x)):
其中 J(x) 为 f(x)关于x的导数,根据前面的框架,需要求得下降矢量,使得达到最小。其中,将看做变量,那么我们会有一个线性的最小二乘问题:
在这里,我们将目标函数对进行求导,最后得到线性方程有:
这个方程称之为增量方程,也称之为高斯牛顿方程,将左边的系数设为H,右边的系数设为g,则有 H=g。求解增量方程是整个优化问题的核心所在。
高斯牛顿法求解的算法步骤可写成:
1.给定初始值
2.对于第k次迭代,求出当前的雅克比矩阵J() 和误差f()。
3.求解增量方程:H =g
4.若足够小,则停止。否则,令,返回第二步
高斯牛顿法的缺点:
1.要求H是可逆的,而且是正定的,如果出现H矩阵奇异或者病态,此时增量的稳定性较差,导致算法不收敛
2.步长问题,若求出来的太长,则可能出现局部近似不够准确,无法保证迭代收敛
矩阵的小知识:
1.行列式=0,为奇异矩阵,反之为非奇异矩阵
2.可逆矩阵为非奇异矩阵(满秩),非奇异矩阵也为可逆矩阵
3.AX=0,若A为奇异阵,有无穷解;A为非奇异阵,AX=0有唯一解且AX=b有唯一解
4.M为实对称矩阵,若有X^{T}MX>0,矩阵正定,若X^{T}MX>=0,矩阵半正定
有改进的方法:一维搜索方法,增加一个标量a,寻求,然后使得最小。
2.2列文伯格-马夸尔特方法(阻尼牛顿法)
在高斯牛顿法的基础上给添加一个信赖区域,如果在这个信赖区域里面,那么认为近似是有效的,该信赖区域为:
(分母为方向乘步长)
p的分子是实际函数下降的值,分母是近似模型下降的值,若p=1,那么最好,若p太小,则实际减少值远少于近似减小的值,缩小近似范围。若p太大,则实际减少值远大于近似减小的值,放大近似范围。
列文伯格-马夸尔特方法的算法步骤可写成:
1.给定初始值,以及优化半径u
2.对于第k次迭代,求解:
,s.t.
这里u是信赖区域的半径,D在后面讲
3.计算p
4.若p>3/4,则u=2u
5.若p<1/4,则u=0.5u
6.若p大于某阈值,则认为可行。令。
7.判断是否收敛,如不收敛返回第2步,否则结束。
这里近似范围扩大的倍数和阈值都是经验值,可以替换成其他数值。上述约束中相当于把增量限定在半径为u的球里面,认为在球内的才有效。带上D后成为椭圆,至于D的形式,可为单位阵也可为对角非负数对角阵。
在上述求解中,由于是有约束优化,可以利用拉格朗日乘子将其转化为一个无约束优化问题:
(其中为拉格朗日乘子)
对无约束问题展开之后,得到:
当参数较小时,H占主导地位,说明二次近似模型在该范围内是比较好的,该方法接近于高斯牛顿法。当参数较大时,所在项接近于一阶梯度下降法。该方法可在一定程度上避免线性方程组的系数矩阵的非奇异和病态问题。
- SLAM学习——非线性优化
- SLAM学习--非线性优化
- 基于关键帧视觉惯性传感器非线性优化SLAM
- SLAM——图优化篇
- SLAM学习笔记——(一)SLAM分类
- 半闲居士视觉SLAM十四讲笔记(6)非线性优化
- 无约束非线性优化经典算法学习笔记
- 非线性最优化(一)——牛顿迭代法
- SLAM学习——相机与图像
- SLAM学习——后端(一)
- SLAM学习——后端(二)
- SLAM学习——回环检测
- SLAM学习——建图(二)
- 【转】 slam 优化包g2o 学习
- SLAM笔记五——EKF-SLAM
- 《视觉SLAM十四讲》学习系列(1)—经典视觉SLAM框架
- opencv学习笔记(十八)——图像非线性滤波
- 【优化3】非线性优化
- 【iOS】基于Realm数据库的记账软件--Realm数据库(一)
- starUML使用教程
- PAT b1036-b1040题解
- 04.13 三剑客之老二sed命令详解
- springboot1.1.0自定义静态文件配置bug
- SLAM学习——非线性优化
- 【51Nod】1035 最长的循环节
- scala系列知识点总结(变量与普通函数)
- HDU 3533 BFS
- 1-100之间的所有素数的和如何在JSP页面实现 代码如下
- pk10彩票统计代码分享
- Eclipse自动编译问题
- 热门第三方sdk之扫一扫(二维码)
- filter