非线性优化

本文探讨了SLAM(Simultaneous Localization and Mapping)系统中的核心问题——非线性优化。通过分析motion function和estimation function,阐述如何在SLAM中应用非线性优化技术以提高定位和建图的精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个slam系统,我们可以得到motion function 和 estimation function,如下所示:

{xk=f(xk1,μk)+wkzk,j=h(yj,xk)+vk,j{xk=f(xk−1,μk)+wkzk,j=h(yj,xk)+vk,j

对于位姿变量xkxk,我们可以用TkTkeξ̂ eξ^表示. yjyj表示第j个landmark。由相机的针孔成像模型可知,观测模型可以表示为:
szk,j=Keξ̂ yjszk,j=Keξ^yj

其中KK为相机内参,s为像素点的距离,zk,jzk,jyjyj都需要用齐次坐标表示。在运动和观测方程中,假设噪声为0均值的高斯分布。
我们的目的是通过带噪声的数据来求求得位姿和地图的最优估计值,可以用非线性优化来解决这一问题。在非线性优化中,把所有估计的变量放在一个“状态变量“中:
x={x1,...,xN,y1,...,yM}x={x1,...,xN,y1,...,yM}

对机器人的状态估计,就是已知输入数据μμ和观测数据zz的条件下,得到状态x的条件概率分布:
P(x|z,μ)P(x|z,μ)

可以通过贝叶斯法则,可以转换为maximize a posterior,即:
xMAP=argmaxP(z|x)P(x)xMAP∗=argmaxP(z|x)P(x)

如果不知道机器人的位姿大概在什么地方,此时就没了先验信息,问题转变为求解xx 的最大似然问题:
xMLE=argmaxP(z|x)

对于某一次观测模型,设观测数据的条件概率为:
x=(zj,kxk,yj)=N(h(yj,xk),Qk,j)x=(zj,k|xk,yj)=N(h(yj,xk),Qk,j)

对上式取负对数并得到最小值可估计:
x=argmin((zk,jh(xk,yj)TQ1k,j(zk,jh(xk,yj))x∗=argmin((zk,j−h(xk,yj)TQk,j−1(zk,j−h(xk,yj))

因此,对于所有的运动和任意的观测,定义数据与估计值之间的误差:
ev,k=xkf(xk1,μk)ev,k=xk−f(xk−1,μk)
ey,j,k=zk,jh(xk,yj)ey,j,k=zk,j−h(xk,yj)

因此可以得到误差项:
J(x)=keTv,kR1kev,k+kjeTy,k,jQ1k,jey,k,jJ(x)=∑kev,kTRk−1ev,k+∑k∑jey,k,jTQk,j−1ey,k,j

可以看出SLAM中的最小最小二乘问题具有以下结构:1.虽然总体的状态变量的维数很高,但是每个误差项都是一个小规模的约束,可以把误差项的小雅可比矩阵块放到整体的雅可比矩阵中。2.增量方程的求解会具有一定的稀疏性。3.如果是用李代数表示,则该问题是无约束的最小二乘问题,如果用旋转矩阵表示位姿,则会引入旋转矩阵的约束。4.可以采用非二范数的形式度量误差。
非线性最小二乘求解:
直接求解(求鞍点,比较函数极值大小)不太方便,因此可以采用迭代的方法,步骤如下:
1.给定某个初始值x0x0
2.对于第kk次迭代,寻找一个增量Δxk,使得||f(xk+Δxk)||22||f(xk+Δxk)||22达到极小值
3.若ΔxkΔxk足够小,则停止
4.否则更新xx,同时返回第二步
求解非线性最小二乘的方法有:
(1) 一阶和二阶梯度法:
将目标函数在x附近进行泰勒展开:
||f(xk+Δxk)||22||f(x)||22+J(x)Δx+12ΔxTHΔx||f(xk+Δxk)||22≈||f(x)||22+J(x)Δx+12ΔxTHΔx

需要注意,这里的JJ||f(x)||2的Jacobian Matrix, H 为 Hessian Matrix. 如果保留一阶梯度,则为steepest descent method,得到Δx=JT(x)Δx=−JT(x),若要保留二阶梯度信息,则HΔx=JTHΔx=−JT,这种方法也叫做newton method,但是需要计算hessian matrix。梯度下降法则过于贪心,容易走出锯齿路线。
(2)Gaussian-Newton Method:
GN法是将f(x)f(x)进行一阶泰勒展开:
f(x+Δx)f(x)+J(x)Δxf(x+Δx)≈f(x)+J(x)Δx
,因此可以转换为一个线性的最小二乘问题:
Δx=argminΔx12|||f(x)+J(x)Δx||2Δx∗=argminΔx12|||f(x)+J(x)Δx||2
对此方程展开,并求上式关于ΔxΔx的导数,并将其为零,可得:
J(x)TJ(x)Δx=J(x)Tf(x)J(x)TJ(x)Δx=−J(x)Tf(x)
,将左边的系数定义为HH,右边定义为g,那么上式为HΔx=gHΔx=g因此对于GN法,每次迭代算出jacobian和residue。对于GN,H应该可逆,但是并不能保证,这会导致算法不收敛,同时若ΔxΔx较大,会使得局部近似不准确。
(3) LM法:
需要将ΔxΔx添加一个Trust Region, 使用ρ=f(x+Δx)f(x)J(x)Δxρ=f(x+Δx)−f(x)J(x)Δx. 若ρρ接近1,则近似是好的。如果ρρ比较大,则应该放大近似范围,反之则反之。用拉格朗日乘子将问题转换为一个无约束优化问题:
minΔxk12||f(xk+J(xk)Δxk)||2+λ||DΔx||2minΔxk12||f(xk+J(xk)Δxk)||2+λ||DΔx||2
可得表达式:
(H+λDTD)Δx=g(H+λDTD)Δx=g
,通常取D=ID=I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值