视觉SLAM(三):非线性优化

1. SLAM基本问题

1.1. 问题阐述

根据前文视觉SLAM(二):相机与图像描述可知,不考虑畸变情形下空间中一个点到像素位置的映射为

P ′ ′ = [ 1 0 0 0 1 0 ] ⋅ K ⋅ R ⋅ ( P w − O c w ) ( 0 0 1 ) ⋅ R ⋅ ( P w − O c w ) (重要) P''=\left[\begin{array}{lcr} 1 & 0& 0\\ 0 &1& 0\\ \end{array}\right] · K·\frac{R·(P_w-O_{c_w})}{(0 \quad 0 \quad 1)·R·(P_w-O_{c_w})} \tag{重要} P=[100100]K(001)R(PwOcw)R(PwOcw)()

注意到该公式中的参数其实是相机位姿(偏航角、俯仰角、滚转角和位置)和路标点 P P P的位置 的函数,而且还是精确表达式,实际情况中会存在噪声干扰。下面将该公式抽象化

● 观测方程
x k x_k xk k k k时刻的相机位姿

y j y_j yj:编号为 j j j的路标点世界坐标

z k , j z_{k,j} zk,j:路标点 j j j k k k时刻 相机的像素坐标

v k , j ∼ N ( 0 , Q k , j ) v_{k,j} \sim N(0,Q_{k,j}) vk,jN(0,Qk,j):观测噪声

综上可以得到观测方程

z k , j = h ( y j , x k ) + v k , j (重要) z_{k,j}=h(y_j,x_k)+v_{k,j} \tag{重要} zk,j=h(yj,xk)+vk,j()

● 运动方程
这里面相机位姿是随着时间变化的,因此得到运动方程如下

u k u_k uk k k k时刻对机器人的控制量

w k ∼ N ( 0 , R k ) w_{k} \sim N(0,R_k) wkN(0,Rk):运动噪声

x k = f ( x k − 1 , u k ) + w k (重要) x_k=f(x_{k-1},u_k)+w_{k} \tag{重要} xk=f(xk1,uk)+wk()

下面介绍SLAM基本问题,SLAM(Simultaneous Localization And Mapping, SLAM)同时定位与地图构建,即机器人在完全陌生的环境下对环境进行建图,同时估计自身的状态。
因此SLAM基本问题可以描述为:对于运动方程 和 观测方程,已知观测数据 z z z 和控制输入 u u u,估计位姿状态 x x x和路标 y y y的过程。

1.2. 基于最大似然估计的批量估计法

那该如何对 x x x y y y进行估计呢?此处将SLAM的估计问题具体化

1.2.1. 批量估计

批量估计指通过以往 1 , . . . , N 1,...,N 1,...,N时刻看到 M M M个路标点的批量数据 u = [ u 1 , . . . u N ] T u=[u_1,...u_N]^T u=[u1,...uN]T z = [ z 1 , 1 . . . z 1 , M . . . . . . . . . z N , 1 . . . z N , M ] z=\left[\begin{array}{lcr} z_{1,1} & ...& z_{1,M}\\ ... &...& ...\\ z_{N,1} &...& z_{N,M}\\ \end{array}\right] z=z1,1...zN,1.........z1,M...zN,M来估计以往的批量状态 x = [ x 1 , . . . x N ] T x=[x_1,...x_N]^T x=[x1,...xN]T和地图 y = [ y 1 , . . . y M ] T y=[y_1,...y_M]^T y=[y1,...yM]T

1.2.2. 最大似然估计(Maximize Likelihood Estimation, MLE)

通过样本对系统参数估计的一种方法,思路是 参数估计值=使样本值出现的概率达到最大的系统参数。

若概率为 P ( x ∣ θ ) P(x|\theta) P(xθ)其中 θ \theta θ为待估计参数,已知一堆独立重复试验得到的样本 x 1 , . . . x n x_1,...x_n x1,...xn,则这些样本出现概率的表达式为 P ( x 1 ∣ θ ) , . . . , P ( x n ∣ θ ) P(x_1|\theta),...,P(x_n|\theta) P(x1θ),...,P(xnθ),则MLE的求法是

θ ^ = arg max ⁡ θ P ( θ ∣ x 1 , . . . , x n ) = arg max ⁡ θ P ( x 1 , . . . , x n ∣ θ ) P ( θ ) P ( x 1 , . . . , x n ) = arg max ⁡ θ ∏ i = 1 n P ( x i ∣ θ ) \hat{\theta} = \argmax_{\theta}{P(\theta|x_1,...,x_n)}=\argmax_{\theta}{\frac{P(x_1,...,x_n|\theta)P(\theta)}{P(x_1,...,x_n)}}=\argmax_{\theta}{\prod^{n}_{i=1}P(x_i|\theta)} θ^=θargmaxP(θx1,...,xn)=θargmaxP(x1,...,xn)P(x1,...,xnθ)P(θ)=θargmaxi=1nP(xiθ)

一般使用最小化负对数处理,将简化运算,则有

θ ^ = arg min ⁡ θ ∑ i = 1 n ln ⁡ P ( x i ∣ θ ) \hat{\theta} = \argmin_{\theta}{\sum^{n}_{i=1}\ln{P(x_i|\theta)}} θ^=θargmini=1nlnP(xiθ)

1.2.3. SLAM的MLE模型

用MLE解决SLAM估计问题的思路是 x x x y y y看作待估计参数,将 z z z u u u看作已知样本,即

( x ^ , y ^ ) = arg max ⁡ ( x , y ) P ( z , u ∣ x , y ) (\hat{x},\hat{y})= \argmax_{(x,y)}{P(z,u|x,y)} (x^,y^)=(x,y)argmaxP(z,ux,y)

因此需要先计算 P ( z , u ∣ x , y ) P(z,u|x,y) P(z,ux,y)的表达式,此处假设 观测量与控制量 相互独立,不同时刻或不同路标点的观测量相互独立,各时刻的控制量相互独立,因此有

P ( z , u ∣ x , y ) = ∏ k = 1 N ∏ j = 1 M P ( z k , j ∣ x k , y j ) ∏ k = 1 N P ( u k ∣ x k , x k − 1 ) P(z,u|x,y)=\prod_{k=1}^{N} \prod_{j=1}^{M}{P(z_{k,j}|x_k,y_j)}\prod_{k=1}^{N}P(u_k|x_k,x_{k-1}) P(z,ux,y)=k=1Nj=1MP(zk,jxk,yj)k=1NP(ukxk,xk1)

注意到高斯噪声的存在可以推得观测量的分布:

P ( z k , j ∣ x k , y j ) = N ( h ( y j , x k ) , Q k , j ) P(z_{k,j}|x_k,y_j)=N( h(y_j,x_k),Q_{k,j} ) P(zk,jxk,yj)=N(h(yj,xk),Qk,j)

而控制量写成可反函数的形式,即 u k = q ( x k , x k − 1 ) + w k u_k=q(x_k,x_{k-1})+w_{k} uk=q(xk,xk1)+wk

P ( u k ∣ x k , x k − 1 ) = N ( q ( x k , x k − 1 ) , R k ) P(u_k|x_k,x_{k-1})=N( q(x_k,x_{k-1}),R_k ) P(ukxk,xk1)=N(q(xk,xk1),Rk)

之后根据1.2.2.节描述,写出高斯分布并作负对数处理,最终得到一个具有最小二乘形式的问题:

( x ^ , y ^ ) = arg min ⁡ ( x , y ) { ∑ k = 1 N ∑ j = 1 M [ z k , j − h ( y j , x k ) ] T Q k , j − 1 [ z k , j − h ( y j , x k ) ] + ∑ k = 1 N [ x k − f ( x k − 1 , u k ) ] T R k − 1 [ x k − f ( x k − 1 , u k ) ] } (重要) (\hat{x},\hat{y})= \argmin_{(x,y)}\{\sum_{k=1}^{N} \sum_{j=1}^{M} {[z_{k,j}-h(y_j,x_k)]^TQ^{-1}_{k,j}[z_{k,j}-h(y_j,x_k)]}+ \sum_{k=1}^{N}{[x_k-f(x_{k-1},u_k)]^TR^{-1}_{k}[x_k-f(x_{k-1},u_k)]}\} \tag{重要} (x^,y^)=(x,y)argmin{k=1Nj=1M[zk,jh(yj,xk)]TQk,j1[zk,jh(yj,xk)]+k=1N[xkf(xk1,uk)]TRk1[xkf(xk1,uk)]}()

但是注意上述运动方程和观测方程可能为非线性量,所以可能需要去解决一个非线性最小二乘问题,下面讲。

1.3. 非线性最小二乘

即求解

x ∗ = arg min ⁡ x F ( x ) = arg min ⁡ x 1 2 ∣ ∣ f ( x ) ∣ ∣ 2 2 x^*=\argmin_x F(x)=\argmin_x{\frac{1}{2}||f(x)||^2_2} x=xargminF(x)=xargmin21f(x)22

其中 x x x为自变量, f f f为任意变量非线性函数。

的确可以直接 d F ( x ) d x = 0 \frac{dF(x)}{dx}=0 dxdF(x)=0求极值判断,但是非线性函数可能求导比较复杂,此处讨论比较通用的方法。

1.3.1. 高斯牛顿法(Gauss-Newton method, G-N)

1.3.2. 列文伯格-马夸尔特法(Levenberg-Marquardt method, L-M)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值