1. 目的:根据之前的数据求解当前的最优最准确的状态估计
我们需要解决的就是根据之前的状态和当前的输入数据,比如运动数据,当前时刻的图像,来估计当前的一个位姿,slam中状态主要有两种方法,一种为增量式的滤波类方法,如卡曼滤波,另一种为批量式的非线性优化,我们主要介绍非线性优化。
首先我们的目的是需要求解一个minF(x),在slam状态估计中,就是求一个最优的状态估计,F(x)为e误差的一个平方和,十四讲中用二范数表示||e||,其中e是观测值和模型计算的误差;
2. 非线性最小二乘
m i n ∣ ∣ F ( x ) ∣ ∣ = 1 / 2 ∣ ∣ f ( x ) ∣ ∣ 2 min||F(x)|| = 1/2||f(x)||^2 min∣∣F(x)∣∣=1/2∣∣f(x)∣∣2
2.1 一阶梯度法即最速下降法
由于是非线性的,且导数计算复杂,所以要通过迭代法去找到F(x)的一个最小值,也就是导数逼近与0的一个点,
但是我们应该每次迭代多大呢?迭代的数选取不合适,就很可能找不到最优值。所以我们需要通过计算求每次迭代的数。所以我们的一阶梯度法即最速下降法和二阶梯度法就出来了。
首先将F(x)进行泰勒展开
F
(
x
i
+
△
x
k
)
≈
F
(
X
K
)
+
J
(
x
k
)
T
△
x
k
+
1
/
2
△
x
k
T
H
(
x
k
)
△
x
k
F(x_i+\bigtriangleup x_k)\approx F(X_K)+J(x_k)^{T} \bigtriangleup x_k+1/2\bigtriangleup x_k^{T}H(x_k)\bigtriangleup x_k
F(xi+△xk)≈F(XK)+J(xk)T△xk+1/2△xkTH(xk)△xk
一阶梯度法就是只保留一阶梯度,即雅克比矩阵那一项
显然当我们的**
△
x
k
=
−
J
(
x
k
)
\bigtriangleup x_k=-J(x_k)
△xk=−J(xk)时,F(x)必然会下降 **
雅克比矩阵
J
(
x
k
)
=
∣
∂
X
1
∂
x
1
∂
X
1
∂
x
2
∂
X
1
∂
x
n
∂
X
2
∂
x
2
∂
X
2
∂
x
2
∂
X
2
∂
x
n
∂
X
n
∂
x
n
∂
X
n
∂
x
2
∂
X
n
∂
x
n
∣
J(x_k) = \begin{vmatrix} \frac{\partial X_1}{\partial x_1}& \frac{\partial X_1}{\partial x_2} & \frac{\partial X_1}{\partial x_n}\\ \frac{\partial X_2}{\partial x_2}& \frac{\partial X_2}{\partial x_2} & \frac{\partial X_2}{\partial x_n}\\ \frac{\partial X_n}{\partial x_n}& \frac{\partial X_n}{\partial x_2} & \frac{\partial X_n}{\partial x_n}\\ \end{vmatrix}
J(xk)=∣∣∣∣∣∣∣∂x1∂X1∂x2∂X2∂xn∂Xn∂x2∂X1∂x2∂X2∂x2∂Xn∂xn∂X1∂xn∂X2∂xn∂Xn∣∣∣∣∣∣∣
2.2 二阶梯度法-牛顿法
看完上面应该大概了解了基本的思想。就是找出每次需要迭代的数的大小。从而实现二范数的最小值。
海塞矩阵
高斯牛顿法
注意高斯牛顿法是将f(x)进行泰勒展开,而不是F(x),f(x)代表的是误差!
f
(
x
+
△
x
)
≈
f
(
x
)
+
J
(
x
)
T
△
x
f(x+\bigtriangleup x)\approx f(x)+ J(x)^T\bigtriangleup x
f(x+△x)≈f(x)+J(x)T△x
同样得到
△
x
∗
=
a
r
g
m
i
n
1
/
2
∣
∣
f
(
x
)
+
J
(
x
)
T
△
x
∣
∣
2
\bigtriangleup x^*=argmin1/2||f(x)+J(x)^T\bigtriangleup x||^2
△x∗=argmin1/2∣∣f(x)+J(x)T△x∣∣2
将
∣
∣
f
(
x
)
+
J
(
x
)
T
△
x
∣
∣
2
||f(x)+J(x)^T\bigtriangleup x||^2
∣∣f(x)+J(x)T△x∣∣2展开并对
△
x
\bigtriangleup x
△x求导,得:
J
(
x
)
f
(
x
)
+
J
(
x
)
J
T
(
x
)
△
x
=
0
J(x)f(x)+J(x)J^T(x)\bigtriangleup x=0
J(x)f(x)+J(x)JT(x)△x=0
**解这个方程就能求出
△
x
\bigtriangleup x
△x了。**也就找到了最优的增量。
缺点:
J
(
x
)
J
(
x
)
T
J(x)J(x)^T
J(x)J(x)T可能为奇异矩阵或病态的情况,此时增量的稳定性差,会导致算法的不收敛。
LM列文伯格马夸尔特方法
LM给增量添加了一个范围,成为信赖域,具体看slam十四讲吧,懒得打了