SLAM非线性优化

经过前面的学习,我们的问题变为如何在有噪声的数据中进行准确的状态估计

状态估计问题#

经典SLAM模型,由一个运动方程和一个观测方程构成:

{xk=f(xk1,uk)+wkzk,j=h(yj,xk)+vk,j

这里的xk就是相机的位姿,可以由SE(3)(特殊欧氏群,欧氏变换组成的)来描述。观测方程由针孔模型给定。

假如在xk处对路标yj进行了一次观测,对应到图像上的像素位置为zk,j,那么,观测方程可以表示成:

szk,j=K(Rkyj+tk)

在运动和观测方程,我们通常假设两个噪声项wk,vk,j满足零均值的高斯分布:

wkN(0,Rk),vkN(0,Qk,j)

其中N表示高斯分布,0表示零均值,Rk,Qk,j为协方差矩阵。

在这些噪声的影响下,我们希望通过带噪声的数据z和u推断位姿和地图y以及他们的概率分布(u是啥?),这就是一个状态估计问题。
目前解决状态估计问题的思路:

  • 增量/渐进的方式:滤波器
  • 批量的方法

批量状态估计和最大后验估计#

这里我们讨论批量方法,考虑1到N的所有时刻,并假设M个路标点。定义所有时刻的机器人位姿和路标点坐标为

x={x1,...,xN},y={y1,...,yM}

u表示所有时刻的输入,z表示所有时刻的观测数据。则就是求:

P(x,y|z,u)

特别的,当我们不知道控制输入,只有一张张图片时,即只考虑观测方程带来的数据时,可以转化为:

P(x,y|z)

此问题也称为SfM问题,即如何从许多图像中重建三维空间结构。
利用贝叶斯法则:

P(x,y|z,u)=P(z,u|x,y)P(x,y)P(z,u)P(z,u|x,y)P(x,y)

P(x,y|z,u) 称作后验概率P(z|x)称为似然P(x)称为先验
直接求后验是困难的,但是求一个状态的最优估计,使得在该状态下后验概率最大是可行的:

(x,y)MAP=argmaxP(x,y|z,u)=argmaxP(z,u|x,y)P(x,y)

P(x,y)与待估计的部分无关,所以可以忽略。
贝叶斯告诉我们最大后验概率等价于最大化似然和先验的乘积。但是我们也可以忽略机器人位姿或路标位置,此时就没有了先验。那么可以求解最大似然(Maximize Likelihood Estimation,MLE)

(x,y)MLE=argmaxP(z,u|x,y)

最大似然可以理解为,“在什么状态下,最可能产生现在观测到的数据”

非线性最小二乘#

minxF(X)=12|f(x)|2

f(x)为非线性函数,有些导函数可能形式复杂,我们可以使用迭代的方式来接近局部极值
1.给定初始值x_0
2.对第k次迭代,寻找增量xk,使得|f(xk+xk)|2达到极小值
3.若δxk 足够小,则停止
4.否则,令xk+1=xk+xk返回第2步

此时,问题从求解导函数为0转变到不断寻找下降增量δxk 的问题。

一阶和二阶梯度法#

泰勒展开:

F(xk+xk)F(xk)+J(xk)Txk+12xkTH(xk)xk

其中J(xk)F(x)关于x的一阶导数(也叫梯度、雅可比矩阵);H则是二阶导数(海塞矩阵)
一阶梯度:
方向:x=J(xk)
再指定步长,完成下降。

二阶梯度/牛顿法:
x=argmin(F(x)+J(x)Tx+12xTH(x)x)
右侧对x求导,并令为0:

J+Hx=0

则,Hx=J

高斯牛顿法#

它的思想是将f(x)进行一阶泰勒展开而不是F(x):

f(xk+xk)f(xk)+J(xk)Txk

求解问题变为:

x=argminx12|f(x)+J(x)Tx|2

12|f(x)+J(x)Tx|2=12(|f(x)|2+2f(x)J(x)Tx+xTJ(x)J(x)Tx

右侧求导,J(x)f(x)+J(x)JT(x)x=0
则,可得 高斯-牛顿方程:

J(x)JT(x)x=J(x)f(x)

左边的定义为H右边的定义为g
Hx=g
对比牛顿法,其实高斯-牛顿法运用JJT作为牛顿法中二阶Hessian矩阵的近似,从而省略了H的估计
算法流程:
1.给定初始值x0
2.对于第k次迭代,求出当前的雅可比矩阵J(xk)和误差f(xk)
3.求解增量方程:Hxk=g
4.若\triangle x_k足够小则停止。否则,令xk+1=xk+xk,返回第2步

列文伯格-马夸尔特方法#

高斯牛顿法中采用的近似二阶泰勒展开只能在展开点附近有较好的近似效果。我们可以增加信赖区间,在区间范围内可以认为二阶近似是有效的。

ρ=f(x+x)f(x)J(x)Tx

算法流程:
1.给定初始值x_0,以及初始优化半径μ;
2.对于第k次迭代,在高斯牛顿的基础上加上信赖区域:

min12|f(x)+J(xk)Tx|2s.t.|Dxk|2μ

3.计算ρ
4.若ρ34,则设置μ=2μ
5.若ρ14,则设置μ=0.5μ
6.如果\rho大于某阈值,则认为近似可行。令x_k+1=x_k+\triangle x_k;
7.判断算法是否收敛。如不收敛返回第2步,否则结束。

D、μ求解:

lagelangri(x,λ)=12|f(x)+J(xk)Tx|2+λ2(|Dxk|2μ)

右侧等于0 可得:

(H+λDTD)xk=g

简化为

(H+λI)xk=g

可以理解为,利用参数λ控制两种方法的比例。
λ 较小时,H 占主要位置。列文伯格-马夸尔特方法更接近于高斯牛顿法。
λ 较大时,λI 占主要位置,列文伯格-马夸尔特方法更接近于梯度下降法。

posted @   小帆敲代码  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-10-10 Leetcode之通配符匹配
点击右上角即可分享
微信分享提示
CONTENTS