“ 如果你受苦了,感谢生活,那是它给你的一份感觉;
如果你受苦了,感谢上帝,说明你还活着。”
——伊索
3月就要结束了~
最近在看视觉SLAM的一些东西,把高博的非线性优化章节理解整理下,对传感器的融合优化很有帮助:=
首先(白话)解释下:
关于SLAM的概念基础就不细说了,可以百度下,经典的SLAM模型主要是由一个状态(转移)方程和一个运动(观测)方程组成,由于状态方程在视觉 SLAM 中没有特殊性,暂且不讨论它,主要讨论观测方程。而通常我们会获得大量带有噪声的观测数据,来推断运动相机的位姿和地图,即演化成一个状态估计问题(也可以说是一个最小二乘问题,可根据情况为线性最小二乘或非线性最小二乘)。在此,针对非线性的最小二乘问题,我们不用EKF来求解,而是用当前主流的非线性的优化方法来求解,比如说梯度下降法、高斯牛顿法(G-N)、列文伯格-马夸尔特方法Levenberg-Marquardt Method(LM)、以及Dog-Leg方法等。那么实际当中,通常使用谷歌的 Ceres 库 以及基于图优化的g2o 库来实现这些求解方法。下面补充两个基础知识:1.经典SLAM中的模型方程;2.最小二乘问题的定义以及解法。
●经典SLAM的模型方程
● 最小二乘问题的定义以及解法
也就是说,所谓的最小二乘问题是指找到测量值和模型预测值之间的最小误差,即:
其中e(x)为模型和样本之间的误差,在SLAM中亦可以看作为观测值和估计值之间的误差。通过求解该问题我们就能够优化我们的模型函数使之更接近与真实的函数模型。
下图的数据拟合可以很好的说明最小二乘问题的结果和效果。
注意,如果上面问题为线性的,即线性最小二乘,即可以直接对目标函数求导,并且令其等于零,以此求得其极值,并通过比较求取全局最小值(Global Minimizer),并将其最为目标函数的解。但是如果问题为非线性,此时我们通常无法直接写出其导数形式(函数过于复杂),因此我们不再去试图直接找到全局最小值,而是退而求其次通过不停的迭代计算寻找到函数的局部最小值(Local Minimize