SLAM中的非线性优化方法
理论基础
矩阵求导
若a和A不是关于x的函数矩阵,则有:
∂ a ⋅ x d x = a ∂ x T A ⋅ x d x = 2 x T A ∂ u T ⋅ v d x = u T ⋅ ∂ v ⋅ x d x + v T ⋅ ∂ u ⋅ x d x \frac{\partial a\cdot x}{\mathrm{d}x}=a\\ \frac{\partial x^TA\cdot x}{\mathrm{d}x}=2x^TA\\ \frac{\partial u^T\cdot v}{\mathrm{d}x}= u^T\cdot\frac{\partial v\cdot x}{\mathrm{d}x}+v^T\cdot\frac{\partial u\cdot x}{\mathrm{d}x}\\ \\ dx∂a⋅x=adx∂xTA⋅x=2xTAdx∂uT⋅v=uT⋅dx∂v⋅x+vT⋅dx∂u⋅x
病态矩阵:Ax=b求解时,x+一个小的增量,结果有很大波动。
奇异矩阵:Ax=0有无穷多解,AX=b有无穷多解或无解,系数矩阵A不是行满秩 A的行列式为0
为了求解
H
Δ
=
g
,
H
=
J
T
J
H\Delta=g,H=J^TJ
HΔ=g,H=JTJ需要对H求逆,而H为半正定矩阵,可能为病态或者奇异,此时稳定性较差,可能不收敛,即使H是非病态和非奇异,也有可能因为
Δ
x
\Delta x
Δx过大而导致不收敛。
优化问题具体步骤
1.给定初值
x
0
x_0
x0。
2.对于第k次迭代,寻找一个迭代量
Δ
x
\Delta x
Δx,使得
∣
∣
f
(
x
+
Δ
x
k
)
∣
∣
2
2
||f(x+\Delta x_k)||^2_2
∣∣f(x+Δxk)∣∣22达到最小值。
3.若
Δ
x
\Delta x
Δx足够小,则停止。
4.否则令
x
k
+
1
=
x
k
+
Δ
x
k
x_k+1 = x_k +\Delta x_k
xk+1=xk+Δxk返回第二步。
高斯牛顿法的具体步骤:
1.给定初值
x
0
x_0
x0。
2.对于第k次迭代,计算当前迭代的雅可比矩阵
J
(
x
k
)
J(x_k)
J(xk)和误差
f
(
x
k
)
f(x_k)
f(xk)。
3.求解增量方程
H
Δ
x
=
g
,
H
=
J
J
T
,
g
=
−
J
T
f
(
x
)
H\Delta x = g,H=JJ^T,g=-J^Tf(x)
HΔx=g,H=JJT,g=−JTf(x)
待更新:
编程实现
SLAM十四讲第六讲课后习题,曲线拟合问题。
拟合一条满足一下方程的曲线:
y = e x p ( a x 2 + b x + c ) + w y=exp(ax^2+bx+c)+w y=exp(ax2+bx+c)+w
a,b,c为曲线参数,w为高斯噪声,假设有N个关于x,y的观测数据点,根据这些点来求出曲线的参数,那么可以求解以下的最小二乘问题以估计曲线参数:
m i n a , b , c 1 2 ∑ i = 1 N ∣ ∣ y i − e x p ( a x i 2 + b x i + c ) ∣ ∣ 2 \mathop{min} \limits_{a,b,c} \frac12 \sum_{i=1}^{N}{||y_i-exp(ax_i^2+bx_i+c)||^2} a,b,cmin21i=1∑N∣∣yi−exp(axi2+bxi+c)∣∣2
定义误差为:
e i = y i − ( a x i 2 + b x i + c ) e_i = y_i-(ax_i^2+bx_i+c) ei=yi−(axi2+bxi+c)
那么,每个误差项对于状态向量的导数为:
∂ e ∂ a = − x i 2 e x p ( a x i 2 + b x i + c ) ∂ e ∂ b = − x i e x p ( a x i 2 + b x i + c ) ∂ e ∂ a = − e x p ( a x i 2 + b x i + c ) \frac{ \partial e }{ \partial a }=-x_i^2exp(ax_i^2+bx_i+c)\\ \frac{ \partial e }{ \partial b }=-x_iexp(ax_i^2+bx_i+c)\\ \frac{ \partial e }{ \partial a }=-exp(ax_i^2+bx_i+c) ∂a∂e=−xi2exp(axi2+bxi+c)∂b∂e=−xiexp(axi2+bxi+c)∂a∂e=−exp(axi2+bxi+c)
于是 J = [ ∂ e ∂ a , ∂ e ∂ b , ∂ e ∂ c ] T J=[\frac{\partial e}{\partial a},\frac{ \partial e}{\partial b},\frac{ \partial e}{\partial c}]^T J=[∂a∂e,∂b∂e,∂c∂e]T