概率机器人(Probability Robotics)笔记 Chapter 10: SLAM

1. 简介

SLAM问题的输入只有测量和控制,没有地图和位姿估计。

有两种同等重要的SLAM问题:

  1. 在线SLAM(online SLAM):
    同时估计地图和即时位姿这两个后验,即 p ( x t , m ∣ z 1 : t , u 1 : t ) p(x_t,m|z_{1:t},u_{1:t}) p(xt,mz1:t,u1:t)
    称为在线SLAM的原因是,只估计时间 t t t存留的变量。
    很多在线SLAM算法是递增的,即只处理当前一帧观测和控制。
  2. 完整SLAM(full SLAM):
    估计整个位姿轨迹与地图,即 p ( x 1 : t , m ∣ z 1 : t , u 1 : t ) p(x_{1:t}, m| z_{1:t}, u_{1:t}) p(x1:t,mz1:t,u1:t)
    对之前的状态KaTeX parse error: Can't use function '\.' in math mode at position 5: x_1,\̲.̲.. x_{t-1}在状态空间上进行积分,既可以得到在线SLAM。

SLAM问题的另一个特点与估计问题的本质相关,即包含一个连续和一个离散问题:
连续问题与地图中物体的位置和机器人的位姿相关;
离散问题与物体的关联相关。
有时,显式估计地标的关联是有利的,在线后验为 p ( x t , m , c t ∣ z 1 : t , u 1 : t ) p(x_t,m,c_t|z_{1:t},u_{1:t}) p(xt,m,ctz1:t,u1:t)

不管是哪种SLAM问题,估计全部后验分布都是最好的,但通常不可行:

  1. 连续参数空间维度太高(地图);
  2. 离散关联变量的数量太大,很多算法的地图包括上万个特征。

本章介绍EKF算法,解决在线SLAM问题。

2. EKF SLAM

2.1 设定与假设

最早、最有影响力的SLAM算法就是基于EKF的。
EKF SLAM算法使用最大可能性数据关联,将EKF用于在线SLAM问题。
包含了多个近似和有限制的假设:

  1. 特征地图:地标数量较少(如一千个),且EKF本来就希望特征的模糊度小。
    EKF SLAM通常需要在特征探测上下功夫。
  2. 高斯噪声: 假设运动和测量有高斯噪声。
    后验的不确定性尽量小,否则线性化误差大。
  3. 正测量: 只能处理观测到地标这种正信息,而不能处理没看到地标的负信息。

2.2 已知关联下的SLAM

即只解决SLAM问题的连续部分。
同时估计地标的位置和机器人的位姿,需要把地标的坐标加入状态向量中,即
y t = ( x   y   θ   m 1 , x   m 1 , y   s 1   . . .   m N , x   m N , y   S N ) y_t=(x\ y\ \theta\ m_{1,x}\ m_{1,y}\ s_1\ ...\ m_{N,x}\ m_{N,y}\ S_N) yt=(x y θ m1,x m1,y s1 ... mN,x mN,y SN)
N N N是地图中地标总数,EKF估计在线后验 p ( y t ∣ z 1 : t , u 1 : t ) p(y_t|z_{1:t}, u_{1:t}) p(ytz1:t,u1:t)

算法 EKF_SLAM_known_correspondences( μ t − 1 , Σ t − 1 , u t , z t , c t \mu_{t-1}, \Sigma_{t-1}, u_t, z_t, c_t μt1,Σt1,ut,zt,ct):

02························
F x = ( 1 0 0 0 ⋯ 0 0 1 0 0 ⋯ 0 0 0 1 0 ⋯ 0 ) F_x=\left( \begin{array}{ccccc} 1 & 0 & 0 & 0 & \cdots & 0\\ 0 & 1 & 0 & 0 & \cdots & 0\\ 0 & 0 & 1 & 0 & \cdots & 0 \end{array}\right) Fx=100010001000000
矩阵右边是2N列个0。
是系数矩阵。

03························
μ ˉ t = μ t − 1 + F x T ( − v t ω t sin ⁡ μ t − 1 , θ + v t w t sin ⁡ ( μ t − 1 , θ + ω t Δ t ) v t ω t cos ⁡ μ t − 1 , θ − v t w t cos ⁡ ( μ t − 1 , θ + ω t Δ t ) ω t Δ t ) \bar{\mu}_t=\mu_{t-1}+F_x^T \left( \begin{array}{c} -\frac{v_t}{\omega_t}\sin\mu_{t-1,\theta}+\frac{v_t}{w_t}\sin(\mu_{t-1,\theta}+\omega_t\Delta t) \\ \frac{v_t}{\omega_t}\cos\mu_{t-1,\theta}-\frac{v_t}{w_t}\cos(\mu_{t-1,\theta}+\omega_t\Delta t) \\ \omega_t\Delta t \end{array}\right) μˉt=μt1+FxTωtvtsinμt1,θ+wtvtsin(μt1,θ+ωtΔt)ωtvtcosμt1,θwtvtcos(μt1,θ+ωtΔt)ωtΔt
用运动模型来更新均值

04························
G t = I + F x T ( 0 0 − v t ω t sin ⁡ μ t − 1 , θ + v t w t sin ⁡ ( μ t − 1 , θ + ω t Δ t ) 0 0 v t ω t cos ⁡ μ t − 1 , θ − v t w t cos ⁡ ( μ t − 1 , θ + ω t Δ t ) 0 0 ω t Δ t ) F x G_t=I+F_x^T \left( \begin{array}{ccc} 0 & 0 & -\frac{v_t}{\omega_t}\sin\mu_{t-1,\theta}+\frac{v_t}{w_t}\sin(\mu_{t-1,\theta}+\omega_t\Delta t) \\ 0 & 0 & \frac{v_t}{\omega_t}\cos\mu_{t-1,\theta}-\frac{v_t}{w_t}\cos(\mu_{t-1,\theta}+\omega_t\Delta t) \\ 0 & 0 & \omega_t\Delta t \end{array}\right)F_x Gt=I+FxT000000ωtvtsinμt1,θ+wtvtsin(μt1,θ+ωtΔt)ωtvtcosμt1,θwtvtcos(μt1,θ+ωtΔt)ωtΔtFx
G G G是雅可比,用于泰勒展开,即
g ( u t , x t − 1 ) ≈ g ( u t , μ t − 1 ) + G t ( x t − 1 − μ t − 1 ) g(u_t, x_{t-1})\approx g(u_t, \mu_{t-1})+G_t(x_{t-1}-\mu_{t-1}) g(ut,xt1)g(ut,μt1)+Gt(xt1μt1)

05························
Σ ˉ t = G t Σ t − 1 G t T + F x T R t F x \bar{\Sigma}_t=G_t\Sigma_{t-1}G_t^T + F_x^T R_t F_x Σˉt=GtΣt1GtT+FxTRtFx
更新方差

06························
Q t = ( σ r 0 0 0 σ ϕ 0 0 0 σ s ) Q_t=\left( \begin{array}{ccc} \sigma_r & 0 & 0 \\ 0 & \sigma_\phi & 0 \\ 0 & 0 & \sigma_s \end{array}\right) Qt=σr000σϕ000σs
观测的协方差矩阵

07····for all observed features z t i = ( r t i   ϕ t i   s t i ) T z_t^i = (r_t^i\ \phi_t^i\ s_t^i)^T zti=(rti ϕti sti)T do
08········ j = c t i j = c_t^i j=cti
09········if landmark j j j never seen before
10············compute feature coordinates ( μ ˉ j , x   μ ˉ j , y   μ ˉ j , s ) T (\bar{\mu}_{j,x}\ \bar{\mu}_{j,y}\ \bar{\mu}_{j,s})^T (μˉj,x μˉj,y μˉj,s)T based on measurement and μ ˉ t \bar{\mu}_t μˉt
对初次观测的特征点的坐标进行初始化。
11········endif
12········ δ = ( δ x   δ y ) T = ( μ ˉ j , x − μ ˉ t , x   μ ˉ j , y − μ ˉ t , y ) \delta=(\delta_x\ \delta_y)^T=(\bar{\mu}_{j,x}-\bar{\mu}_{t,x} \ \bar{\mu}_{j,y}-\bar{\mu}_{t,y}) δ=(δx δy)T=(μˉj,xμˉt,x μˉj,yμˉt,y)
计算这个特征点与机器人预测位姿的相对坐标 δ \delta δ
13········ q = δ T δ q=\delta^T\delta q=δTδ
计算特征点与机器人的距离的平方(标量)
14········ z ^ t i = ( q  atan2 ( δ y , δ x ) − μ ˉ t , θ   μ ˉ j , s ) T \hat{z}_t^i=(\sqrt{q}\ \text{atan2}(\delta_y, \delta_x)-\bar{\mu}_{t,\theta}\ \bar{\mu}_{j,s})^T z^ti=(q  atan2(δy,δx)μˉt,θ μˉj,s)T
15····························
F x , j = ( 1 0 0 0   ⋯   0 0 0 0 0   ⋯   0 0 1 0 0   ⋯   0 0 0 0 0   ⋯   0 0 0 1 0   ⋯   0 0 0 0 0   ⋯   0 0 0 0 0   ⋯   0 1 0 0 0   ⋯   0 0 0 0 0   ⋯   0 0 1 0 0   ⋯   0 0 0 0 0   ⋯   0 ⎵ 2 j − 2 0 0 1 0   ⋯   0 ⎵ 2 N − 2 j ) F_{x,j}=\left(\begin{array}{ccccccccc} 1 & 0 & 0 & 0\ \cdots\ 0 & 0 & 0 & 0 & 0\ \cdots\ 0 \\ 0 & 1 & 0 & 0\ \cdots\ 0 & 0 & 0 & 0 & 0\ \cdots\ 0 \\ 0 & 0 & 1 & 0\ \cdots\ 0 & 0 & 0 & 0 & 0\ \cdots\ 0 \\ 0 & 0 & 0 & 0\ \cdots\ 0 & 1 & 0 & 0 & 0\ \cdots\ 0 \\ 0 & 0 & 0 & 0\ \cdots\ 0 & 0 & 1 & 0 & 0\ \cdots\ 0 \\ 0 & 0 & 0 & \underbrace{0\ \cdots\ 0}_{2j-2} & 0 & 0 & 1 & \underbrace{0\ \cdots\ 0}_{2N-2j} \end{array}\right) Fx,j=1000000100000010000  00  00  00  00  02j2 0  00001000000100000010  00  00  00  00  02N2j 0  0

16····························
H t i = 1 q ( q δ x − q δ y 0 − q δ x q δ y 0 δ y d e l t a x − 1 δ y − δ x 0 0 0 0 0 0 1 ) F x , j H_t^i=\frac{1}{q}\left(\begin{array}{cccccc} \sqrt{q}\delta_x & -\sqrt{q}\delta_y & 0 & -\sqrt{q}\delta_x & \sqrt{q}\delta_y & 0 \\ \delta_y & delta_x & -1 & \delta_y & -\delta_x & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \end{array}\right) F_{x,j} Hti=q1q δxδy0q δydeltax0010q δxδy0q δyδx0001Fx,j
观测的雅可比矩阵
17········ K t i = Σ ˉ t H t i T ( H t i Σ ˉ t H t i T + Q t ) − 1 K_t^i=\bar{\Sigma}_tH_t^{iT}(H_t^i\bar{\Sigma}_tH_t^{iT}+Q_t)^{-1} Kti=ΣˉtHtiT(HtiΣˉtHtiT+Qt)1
卡尔曼增益矩阵的维度是是3x(3N+3),并且不稀疏;
即任何一个测量给整个状态都传递了新的信息,而不是仅有当前观测到的特征。
这说明,观测到一个地标,能减少所有地标和机器人状态的不确定性。
18····endfor
19···· μ t = μ ˉ t + ∑ i K t i ( z t i − z ^ t i ) \mu_t=\bar{\mu}_t+\sum_iK_t^i(z_t^i-\hat{z}_t^i) μt=μˉt+iKti(ztiz^ti)
20···· Σ t = ( I − ∑ i K t i H t i ) Σ ˉ t \Sigma_t=(I-\sum_iK_t^iH_t^i)\bar{\Sigma}_t Σt=(IiKtiHti)Σˉt
21····return μ t , Σ t \mu_t,\Sigma_t μt,Σt

运动预测部分不对地图进行修改。

2.3 数学证明

先略过…

3. 关联未知下的EKF SLAM

未完待续…

你可能感兴趣的:(概率机器人笔记)