首先根据最大后验估计(Maximum a posteriori estimation,MAP)构建非线性优化的目标函数。函数
初始化过程经过线性求解直接会给出一个状态的初值,而非线性优化的过程关键在于求解增量方程,并不断迭代到最优势,须要在初值以及后续的迭代点附近线性化(泰勒展开保留一阶后平方构建高斯牛顿梯度降低的增量方程):post
在初值x附近泰勒展开优化
$f(x+\Delta x) = f(x) + J\Delta x$blog
$costFunction = [f(x+\Delta x)]^{2}$io
最小化costFunction的过程其实就是迭代求解增量方程im
$H\Delta x = b$error
其中$H = J^{T}J$,$b = -J^{T}f$img
所以,首先须要定义状态的增量,主要由于旋转矩阵没有加法,没法迭代求解,所以在SO(3)流形的正切空间上定义四元数的加法,并表示成最小坐标的李代数(轴转角)形式di
所以对应的error-state costFunction定义为:co
注意该式求解的是迭代须要使用的增量,而不是初始化过程能够直接线性求解出的初值。这是优化过程和初始化过程当中costFunction的主要不一样点。
接下来还须要创建对应的观测方程去计算residual及其Jacobian,而且推到偏差的传播方程。和初始化过程当中对比,增长的有:
对比初始化和非线性优化过程: