SLAM模型:
其中:
观测方程:
s z k , j = K e x p ( ϵ sz_{k,j}=Kexp(\epsilon szk,j=Kexp(ϵ^ ) y j )y_j )yj
其中, e x p ( ϵ exp(\epsilon exp(ϵ^ ) ) )是相机位姿,即外参。 e x p ( ϵ exp(\epsilon exp(ϵ^ ) y j )y_j )yj把三维世界中的点转换到相机坐标系下,K是内参,把相机坐标系下的结果转换到像平面。s为像素点的距离。
优化问题:在存在噪声 w w w和 v v v的情况下,推断位姿 x x x和地图 y y y及其状态分布。 -> 状态估计问题。
使用非线性优化求解。
状态变量: x = x 1 , . . . , x N , y 1 , . . . , y M x={x_1,...,x_N,y_1,...,y_M} x=x1,...,xN,y1,...,yM。所有待估计的变量。
已知:输入读数 u u u,观测值 z z z。(带噪声)
目标: P ( x ∣ z , u ) P(x|z,u) P(x∣z,u),只考虑 z z z时: P ( x ∣ z ) P(x|z) P(x∣z)
p ( x ∣ z ) = p ( z ∣ x ) p ( x ) p ( z ) p(x|z)=\frac{p(z|x)p(x)}{p(z)} p(x∣z)=p(z)p(z∣x)p(x)
求使在z条件下,得 p ( x ∣ z ) p(x|z) p(x∣z)最大的x。
状态估计:在已有观测值的条件下,使得在此条件下位姿估计和场景估计概率最大化的估计。
p ( z ) p(z) p(z)是定值,和待估计量无关。最大化 p ( x ∣ z ) p(x|z) p(x∣z)相当于最大化似然和先验的乘积。在 p ( x ) p(x) p(x)未知,没有先验的情况下,即是求解似然 p ( z ∣ x ) p(z|x) p(z∣x)的最大值。
状态估计:在什么样的位姿和场景下,最能够得到当前的观测值。
在高斯分布假设下,对于某次观测:KaTeX parse error: Can't use function '$' in math mode at position 27: …_j,x_k)+v_{k,j}$̲,噪声$v_{k,j}$~ $…。
则:
p ( z ∣ x ) = N ( h ( y j , x k ) , Q k , j ) p(z|x)=N(h(y_j,x_k),Q_{k,j}) p(z∣x)=N(h(yj,xk),Qk,j),似然概率也是一个高斯分布。
对其求负对数,最大化MLE相当于最小化其负对数。
x ∗ = a r g m i n ( ( z k , j − h ( x k , y j ) T Q k , j − 1 ( z k , j − h ( x k , y j ) ) x*=argmin((z_{k,j}-h(x_k,y_j)^TQ_{k,j}^{-1}(z_{k,j}-h(x_k,y_j)) x∗=argmin((zk,j−h(xk,yj)TQk,j−1(zk,j−h(xk,yj))
定义误差:
最小化负对数即最小化观测误差的平方。误差不是噪声!!
将观测误差和位姿估计误差的平方加和,得到:
J ( x ) = ∑ k e v , k T R k − 1 e v , k + ∑ k ∑ j e y , k , j T Q k , j − 1 e y , k , j J(x)=\sum_{k}{e^T_{v,k}R^{-1}_{k}e_{v,k}+\sum_k{\sum_j{e^T_{y,k,j}Q^{-1}_{k,j}e_{y,k,j}}}} J(x)=k∑ev,kTRk−1ev,k+k∑j∑ey,k,jTQk,j−1ey,k,j
最小二乘问题!其最优解等于MLE估计,等于MAP的估计。由于噪声存在,对状态估计值微调,使整体误差下降,达到一个极小值。引入约束,是一个非线性优化问题。
思想:对于 f ( x ) f(x) f(x),寻找增量 ▲ x ▲x ▲x,使得 f ( x + ▲ x ) f(x+▲x) f(x+▲x)最小。这里默认 ▲ x ▲x ▲x模长确定,只寻找它的下降方向。
**目标函数 ∣ ∣ f ( x + ▲ x ) ∣ ∣ 2 2 ||f(x+▲x)||_2^2 ∣∣f(x+▲x)∣∣22**在x附近泰勒展开。
∣ ∣ f ( x + ▲ x ) ∣ ∣ 2 2 ≈ ∣ ∣ f ( x ) ∣ ∣ 2 2 + J ( x ) ▲ x + 1 / 2 ▲ x T H ▲ x ||f(x+▲x)||_2^2≈||f(x)||_2^2+J(x)▲x+1/2▲x^TH▲x ∣∣f(x+▲x)∣∣22≈∣∣f(x)∣∣22+J(x)▲x+1/2▲xTH▲x
仅保留一阶梯度。即负梯度,最速下降法
增量方向: ▲ x ∗ = − J ( x ) T ▲x*=-J(x)^T ▲x∗=−J(x)T
有时步长过大,会出现震荡
保留至二阶梯度。**又称牛顿法 **
增量方向: ▲ x ∗ = a r g m i n ∣ ∣ f ( x ) ∣ ∣ 2 2 + J ( x ) ▲ x + 1 / 2 ▲ x T H ▲ x ▲x*=argmin||f(x)||_2^2+J(x)▲x+1/2▲x^TH▲x ▲x∗=argmin∣∣f(x)∣∣22+J(x)▲x+1/2▲xTH▲x
另右侧为0,解得:
H ▲ x = − J T H▲x=-J^T H▲x=−JT
需要求解H。求解H计算开销过大
思想:将 f ( x ) f(x) f(x) 进行泰勒展开。
f ( x + ▲ x ) ≈ f ( x ) + J ( x ) ▲ x f(x+▲x)≈f(x)+J(x)▲x f(x+▲x)≈f(x)+J(x)▲x
增量方向:: ▲ x ∗ = a r g m i n ∣ ∣ f ( x + ▲ x ) ∣ ∣ 2 2 ≈ a r g m i n ∣ ∣ f ( x + J ( x ) ▲ x ) ∣ ∣ 2 ▲x*=argmin||f(x+▲x)||_2^2≈argmin||f(x+J(x)▲x)||^2 ▲x∗=argmin∣∣f(x+▲x)∣∣22≈argmin∣∣f(x+J(x)▲x)∣∣2
解得:
J ( x ) T J ( x ) ▲ x = − J ( x ) T f ( x ) J(x)^TJ(x)▲x=-J(x)^Tf(x) J(x)TJ(x)▲x=−J(x)Tf(x)
J ( x ) T J ( x ) J(x)^TJ(x) J(x)TJ(x)是 H H H的近似。计算开销小。但只有半正定,不保证收敛
**线搜索法:**高斯牛顿法中步长为1,在确定方向后寻找步长,为线搜索。
即信赖域法。
信赖域:展开点x附近的区域,用于保证泰勒展开是否有效。在信赖域内的近似有效,超出无效。
确定范围:根据近似和实际之间的差异确定。差异小可扩大,差异大就缩小。
定义差异:
p = f ( x + ▲ x ) − f ( x ) J ( x ) ▲ x p=\frac{f(x+▲x)-f(x)}{J(x)▲x} p=J(x)▲xf(x+▲x)−f(x)
分子:实际差异
分母:泰勒展开的近似差异
求解:
m i n ▲ x 1 / 2 ∣ ∣ f ( x ) + J ( x ) ▲ x ) ∣ ∣ 2 , s . t . ∣ ∣ D ▲ x ∣ ∣ 2 < = u min_{▲x}1/2||f(x)+J(x)▲x)||^2,s.t.||D▲x||^2<=u min▲x1/2∣∣f(x)+J(x)▲x)∣∣2,s.t.∣∣D▲x∣∣2<=u
D是限定增量的椭球(信赖域)
使用拉格朗日乘子,将有约束问题转化为无约束问题。
增量方程:
( H + λ D T D ) ▲ x = g (H+\lambda D^TD)▲x=g (H+λDTD)▲x=g
g g g是目标误差 f ( x ) f(x) f(x)
λ \lambda λ较小时,近似好,接近高斯牛顿法。 λ \lambda λ较大,近似不好,接近随俗下降法。