这一部分是我自己加的, 对于理解非线性优化以及那些常用的优化算法有很大的帮助,所以有时间也可以看看,互相交流;
我们都已经知道SLAM中的问题求解其实就是要求出一个位姿,使得噪声项的平方,即误差最小化。 因此, 对于所有的运动和任意的观测, 都可以定义数据与估计值之间的误差:
运动方程的误差:
观测方程的误差:
对这两项误差做平方并求和,也就的到了一个经典的最小二乘问题。
直观地讲,由于噪声的存在, 当我们把估计的轨迹与地图带入SLAM的运动,观测方程中时,他们并不会完美地成立。这时怎么办呢?我们对状态的估计值进行微调,使得整体的误差下降了一些,当然这个下降也是有限度的, 他一般会达到一个最小值。
上面这段话,其实也就阐明了整个最小二乘求解的关键,也就是求解一个增量值,x基于该增量的变化,使得误差方程达到一个极小值。以下面的非线性最小而成为例,
如果f(x)是一个简单的函数, 那么我们就可以用解析式求解, 令目标函数导数为0, 求x的最优解即可;即
解了这个方程,就得到了令导数为0的极值,它可能是极大,极小或者鞍值,将他们带入到函数中,算一下结果,比较一下就可以; 但是如果这个函数不方便求解呢?我们就可以用迭代的方法,从一个初始值出发,不断地更新当前的优化变量,使得目标函数的值下降, 具体步骤可以列写如下:
- 给定某个初始值
- 对于第k次迭代,寻找一个增量,使得 达到极小值
- 若足够小,则停止;
- 否则,令, 则返回2步;
上面这四个步骤就是得一个求解导函数为零的问题变成了一个不断寻找梯度并下降的过程。