目录
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⋅(Pw−Ocw)R⋅(Pw−Ocw)(重要)
注意到该公式中的参数其实是相机位姿(偏航角、俯仰角、滚转角和位置)和路标点 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,j∼N(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) wk∼N(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(xk−1,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=1∏nP(xi∣θ)
一般使用最小化负对数处理,将简化运算,则有
θ ^ = arg min θ ∑ i = 1 n ln P ( x i ∣ θ ) \hat{\theta} = \argmin_{\theta}{\sum^{n}_{i=1}\ln{P(x_i|\theta)}} θ^=θargmini=1∑nlnP(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,u∣x,y)
因此需要先计算 P ( z , u ∣ x , y ) P(z,u|x,y) P(z,u∣x,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,u∣x,y)=k=1∏Nj=1∏MP(zk,j∣xk,yj)k=1∏NP(uk∣xk,xk−1)
注意到高斯噪声的存在可以推得观测量的分布:
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,j∣xk,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,xk−1)+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(uk∣xk,xk−1)=N(q(xk,xk−1),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=1∑Nj=1∑M[zk,j−h(yj,xk)]TQk,j−1[zk,j−h(yj,xk)]+k=1∑N[xk−f(xk−1,uk)]TRk−1[xk−f(xk−1,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)=xargmin21∣∣f(x)∣∣22
其中 x x x为自变量, f f f为任意变量非线性函数。
的确可以直接 d F ( x ) d x = 0 \frac{dF(x)}{dx}=0 dxdF(x)=0求极值判断,但是非线性函数可能求导比较复杂,此处讨论比较通用的方法。
4203

被折叠的 条评论
为什么被折叠?



