对于一个slam系统,我们可以得到motion function 和 estimation function,如下所示:
{xk=f(xk−1,μk)+wkzk,j=h(yj,xk)+vk,j{xk=f(xk−1,μk)+wkzk,j=h(yj,xk)+vk,j
对于位姿变量xkxk,我们可以用TkTk或eξ̂ eξ^表示. yjyj表示第j个landmark。由相机的针孔成像模型可知,观测模型可以表示为:
szk,j=Keξ̂ yjszk,j=Keξ^yj
其中KK为相机内参,为像素点的距离,zk,jzk,j 和yjyj都需要用齐次坐标表示。在运动和观测方程中,假设噪声为0均值的高斯分布。
我们的目的是通过带噪声的数据来求求得位姿和地图的最优估计值,可以用非线性优化来解决这一问题。在非线性优化中,把所有估计的变量放在一个“状态变量“中:
x={x1,...,xN,y1,...,yM}x={x1,...,xN,y1,...,yM}
对机器人的状态估计,就是已知输入数据μμ和观测数据zz的条件下,得到状态的条件概率分布:
P(x|z,μ)P(x|z,μ)
可以通过贝叶斯法则,可以转换为maximize a posterior,即:
x∗MAP=argmaxP(z|x)P(x)xMAP∗=argmaxP(z|x)P(x)
如果不知道机器人的位姿大概在什么地方,此时就没了先验信息,问题转变为求解xx 的最大似然问题:
对于某一次观测模型,设观测数据的条件概率为:
x=(zj,k∣∣xk,yj)=N(h(yj,xk),Qk,j)x=(zj,k|xk,yj)=N(h(yj,xk),Qk,j)
对上式取负对数并得到最小值可估计:
x∗=argmin((zk,j−h(xk,yj)TQ−1k,j(zk,j−h(xk,yj))x∗=argmin((zk,j−h(xk,yj)TQk,j−1(zk,j−h(xk,yj))
因此,对于所有的运动和任意的观测,定义数据与估计值之间的误差:
ev,k=xk−f(xk−1,μk)ev,k=xk−f(xk−1,μk)
ey,j,k=zk,j−h(xk,yj)ey,j,k=zk,j−h(xk,yj)
因此可以得到误差项:
J(x)=∑keTv,kR−1kev,k+∑k∑jeTy,k,jQ−1k,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次迭代,寻找一个增量,使得||f(xk+Δxk)||22||f(xk+Δxk)||22达到极小值
3.若ΔxkΔxk足够小,则停止
4.否则更新xx,同时返回第二步
求解非线性最小二乘的方法有:
(1) 一阶和二阶梯度法:
将目标函数在附近进行泰勒展开:
||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是的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,右边定义为,那么上式为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