摘自《概率机器人》
1. 定位原理
\qquad初始置信度bel(x0)bel(x_{0})bel(x0)反映机器人位姿的初始信息。初始位姿只是经常已知的近似值,使用位于中心x‾0\overline{x}_{0}x0的窄高斯分布初始化。定义为:
bel(x0)=det(2πΣ)−12exp{−12(x0−x‾0)TΣ−1(x0−x‾0)}
bel(x_{0})={det(2\pi\Sigma)^{-\frac{1}{2}}exp\{-\frac{1}{2}(x_{0}-\overline{x}_{0})^{T}\Sigma^{-1}(x_{0}-\overline{x}_{0})\}}
bel(x0)=det(2πΣ)−21exp{−21(x0−x0)TΣ−1(x0−x0)}式中,Σ\SigmaΣ为初始位置不确定性协方差。
\qquad当机器人向右移动时,置信度与运动模型p(xt∣ut,xt)p(x_{t}|u_{t},x_{t})p(xt∣ut,xt)做卷积运算,测量结果使用感知概率p(zt∣xt)p(z_{t}|x_{t})p(zt∣xt)乘以当前的置信度。(还是贝叶斯滤波!!!)
bel‾(xt)=∫p(xt∣ut,xt−1)bel(xt−1)d(xt−1)bel(xt)=η bel‾(xt) p(zt∣xt)d(xt)
\overline{bel}(x_{t})=\int p(x_{t}|u_{t},x_{t-1})bel(x_{t-1})d(x_{t-1})\\
bel(x_{t})=\eta\ \overline{bel}(x_{t})\ p(z_{t}|x_{t})d(x_{t})
bel(xt)=∫p(xt∣ut,xt−1)bel(xt−1)d(xt−1)bel(xt)=η bel(xt) p(zt∣xt)d(xt)
2.使用扩展卡尔曼(EKF)滤波实现定位算法
\qquad实现定位算法的难点在于使用泰勒展开得到近似函数、整合控制和运动噪声、由控制空间到运动空间的转化(!!!)。
2.1 预测步骤
\qquad使用xt−1=(x,y,θ)Tx_{t-1}=(x,y,\theta)^{T}xt−1=(x,y,θ)T和xt=(x′,y′,θ′)Tx_{t}=(x^{'},y^{'},\theta^{'})^{T}xt=(x′,y′,θ′)T分别表示在时刻t−1t-1t−1和ttt的状态向量。真实的运动使用(v^,ω^)T(\hat{v},\hat{\omega})^{T}(v^,ω^)T表示,分别为线速度和角速度。控制模型由运动控制ut=(v,ω)Tu_{t}=(v,\omega)^{T}ut=(v,ω)T和高斯白噪声产生:
(v^ω^)=(vω)+(εα1vt2+α2ωt2εα3vt2+α4ωt2)=(vω)+N(0,Mt)
\begin{pmatrix}
\hat{v}\\
\hat{\omega}
\end{pmatrix}=\begin{pmatrix}
{v}\\
{\omega}
\end{pmatrix}+\begin{pmatrix}
\varepsilon_{\alpha_{1}v_{t}^{2}+\alpha_{2}\omega_{t}^{2}}\\
\varepsilon_{\alpha_{3}v_{t}^{2}+\alpha_{4}\omega_{t}^{2}}
\end{pmatrix}=\begin{pmatrix}
{v}\\
{\omega}
\end{pmatrix}+\mathcal{N}(0,\boldsymbol{M}_{t})
(v^ω^)=(vω)+(εα1vt2+α2ωt2εα3vt2+α4ωt2)=(vω)+N(0,Mt)\qquad将控制模型分解为有噪声分量和无噪声分量。同样的方法分解运动模型:
(x′y′θ′)=(xyθ)+(−vtωtsinθ+vtωtsin(θ+ωtΔt)vtωtcosθ−vtωtcos(θ+ωtΔt)ωtΔt)⎵+N(0,Rt)g(ut,xt−1)
\begin{pmatrix}
x^{'}\\
y^{'}\\
\theta^{'}
\end{pmatrix}=\underbrace{\begin{pmatrix}
x^{}\\
y^{}\\
\theta^{}
\end{pmatrix}+\begin{pmatrix}
-\frac{v_{t}}{\omega_{t}}sin\theta+\frac{v_{t}}{\omega_{t}}sin(\theta+\omega_{t}\Delta t)\\
\frac{v_{t}}{\omega_{t}}cos\theta-\frac{v_{t}}{\omega_{t}}cos(\theta+\omega_{t}\Delta t)\\
\omega_{t}\Delta t
\end{pmatrix}}+\mathcal{N}(0,\boldsymbol{R}_{t})\\g(u_{t},x_{t-1})
⎝⎛x′y′θ′⎠⎞=⎝⎛xyθ⎠⎞+⎝⎛−ωtvtsinθ+ωtvtsin(θ+ωtΔt)ωtvtcosθ−ωtvtcos(θ+ωtΔt)ωtΔt⎠⎞+N(0,Rt)g(ut,xt−1)\qquad此时xt=g(ut,xt−1)+εx_{t}=g(u_{t},x_{t-1})+\varepsilonxt=g(ut,xt−1)+ε对比xt=Axt−1+But+εx_{t}=Ax_{t-1}+Bu_{t}+\varepsilonxt=Axt−1+But+ε为非线性,使用泰勒展开线性近似函数ggg为:
g(ut,xt−1)≈g(ut,μt−1)+Gt(xt−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,xt−1)≈g(ut,μt−1)+Gt(xt−1−μt−1)\qquad函数g(ut,μt−1)g(u_{t},\mu_{t-1})g(ut,μt−1)通过用已知的期望μt−1\mu_{t-1}μt−1替换位置的准确状态xt−1x_{t-1}xt−1,雅可比矩阵GtG_{t}Gt是函数ggg在ut,μt−1u_{t},\mu_{t-1}ut,μt−1关于xt−1x_{t-1}xt−1的导数:
Gt=∂g(ut,μt−1)∂xt−1
G_{t}=\frac{ \partial g(u_{t},\mu_{t-1})}{ \partial x_{t-1}}
Gt=∂xt−1∂g(ut,μt−1)\qquad式中,使用μt−1=(μt−1,x μt−1,y μt−1,θ)T\mu_{t-1}=(\mu_{t-1,x}\ \mu_{t-1,y}\ \mu_{t-1,\theta})^{T}μt−1=(μt−1,x μt−1,y μt−1,θ)T表示平均估计,带入GtG_{t}Gt中。为了导出附加运动噪声N(0,Rt)\mathcal{N}(0,\boldsymbol{R}_{t})N(0,Rt),首先确定控制模型噪声协方差矩阵Mt\boldsymbol{M}_{t}Mt,直接来自控制模型:
Mt=(α1vt2+α2ωt200α3vt2+α4ωt2)
\boldsymbol{M}_{t}=\begin{pmatrix}
\alpha_{1}v_{t}^{2}+\alpha_{2}\omega_{t}^{2} & 0 \\
0 & \alpha_{3}v_{t}^{2}+\alpha_{4}\omega_{t}^{2}
\end{pmatrix}
Mt=(α1vt2+α2ωt200α3vt2+α4ωt2)\qquad求解运动模型噪声就是将控制噪声从控制空间映射到状态空间!!!!!!\color{#F00}{求解运动模型噪声就是将控制噪声从控制空间映射到状态空间!!!!!!}求解运动模型噪声就是将控制噪声从控制空间映射到状态空间!!!!!!。
Vt=∂g(ut,μt−1)∂ut
\boldsymbol{V}_{t}=\frac{\partial g(u_{t},\mu_{t-1})}{\partial u_{t}}
Vt=∂ut∂g(ut,μt−1)\qquad近似映射为VtMtVtT\boldsymbol{V}_{t}\boldsymbol{M}_{t}\boldsymbol{V}_{t}^{T}VtMtVtT,协方差变化在下图第 7行。
2.2 修正步骤
\qquad测量模型也需要线性化
h(xt,j,m)≈h(μ‾,j,m)+Hti(xt−μ‾t)
h(\boldsymbol{x}_{t},j,\boldsymbol{m})\approx h(\boldsymbol{\overline{\mu}},j,\boldsymbol{m})+\boldsymbol{H}_{t}^{i}(\boldsymbol{x}_{t}-\boldsymbol{\overline{\mu}}_{t})
h(xt,j,m)≈h(μ,j,m)+Hti(xt−μt)\qquad其中,jjj表示测量向量对应地标的身份,m\boldsymbol{m}m表示探测到第iii个地标的坐标,Hti\boldsymbol{H}_{t}^{i}Hti为hhh关于机器人位置的雅可比矩阵,使用预测的平均μ‾t\boldsymbol{\overline{\mu}}_{t}μt计算:
Hti=∂h(μ‾t,j,m)∂xt
\boldsymbol{H}_{t}^{i}=\frac{\partial h(\boldsymbol{\overline{\mu}}_{t},j,\boldsymbol{m})}{\partial x_{t}}
Hti=∂xt∂h(μt,j,m)\qquad测量噪声的协方差QtQ_{t}Qt
Qt=(σr2000σϕ2000σs2)
Q_{t}=\begin{pmatrix}
\sigma_{r}^{2} & 0 & 0 \\
0 &\sigma_{\phi}^{2} & 0 \\
0 &0 &\sigma_{s}^{2} \\
\end{pmatrix}
Qt=⎝⎛σr2000σϕ2000σs2⎠⎞\qquad第14-17行为测量更新。
2.3 测量似然
\qquad对扩展卡尔曼滤波并不必要,但对去除异常值或未知一致性的情况很有必要。测量ztz_{t}zt的似然为p(zt∣c1:t,m,z1:t−1,u1:t)p(z_{t}|c_{1:t},\boldsymbol{m},\boldsymbol{z}_{1:t-1},\boldsymbol{u}_{1:t})p(zt∣c1:t,m,z1:t−1,u1:t),由预测的置信度bel‾(xt)=N(xt,μ‾t,Σ‾t)\overline{bel}(x_{t})=\mathcal{N}(x_{t},\overline{\mu}_{t},\overline{\Sigma}_{t})bel(xt)=N(xt,μt,Σt)来计算似然。
p(zt∣c1:t,m,z1:t−1,u1:t)=∫p(zti∣xt,cti,m)bel‾(xt)dxt
p(z_{t}|c_{1:t},\boldsymbol{m},z_{1:t-1},\boldsymbol{u}_{1:t}) = \int p(z_{t}^{i}|x_{t},c_{t}^{i},m)\overline{bel}(x_{t})dx_{t}
p(zt∣c1:t,m,z1:t−1,u1:t)=∫p(zti∣xt,cti,m)bel(xt)dxt\qquad积分式中左项为位置信息xtx_{t}xt已知的测量似然。似然由高斯分布给出,测量值由测量函数hhh获得,协方差由测量噪声QtQ_{t}Qt获得。
p(zti∣xt,cti,m)∼N(zti;h(xi,cti,m),Qt)≈N(zti;h(μ‾t,cti,m)+Ht(xt−μ‾t),Qt)
p(z_{t}^{i}|\boldsymbol{x}_{t},c_{t}^{i},\boldsymbol{m}) \sim \mathcal{N}(z_{t}^{i};h(\boldsymbol{x}_{i},c_{t}^{i},\boldsymbol{m}),Q_{t})\approx \mathcal{N}(z_{t}^{i};h(\boldsymbol{\overline{\mu}}_{t},c_{t}^{i},\boldsymbol{m}) + \boldsymbol{H}_{t}(\boldsymbol{x}_{t}-\boldsymbol{\overline{\mu}}_{t}),Q_{t})
p(zti∣xt,cti,m)∼N(zti;h(xi,cti,m),Qt)≈N(zti;h(μt,cti,m)+Ht(xt−μt),Qt)\qquad使用高斯形式代替bel‾(xt)\overline{bel}(\boldsymbol{x}_{t})bel(xt),得到测量似然:
p(zti∣xt,cti,m)≈N(zti;h(xi,cti,m),Qt)≈N(zti;h(μ‾t,cti,m)+Ht(xt−μ‾t),Qt)⊗N(xt;μ‾t,Σ‾t)
p(z_{t}^{i}|\boldsymbol{x}_{t},c_{t}^{i},\boldsymbol{m})\approx \mathcal{N}(z_{t}^{i};h(\boldsymbol{x}_{i},c_{t}^{i},\boldsymbol{m}),Q_{t})\approx \mathcal{N}(z_{t}^{i};h(\boldsymbol{\overline{\mu}}_{t},c_{t}^{i},\boldsymbol{m}) + \boldsymbol{H}_{t}(\boldsymbol{x}_{t}-\boldsymbol{\overline{\mu}}_{t}),Q_{t}) \otimes \mathcal{N}(x_{t};\boldsymbol{\overline{\mu}}_{t},\boldsymbol{\overline{\Sigma}}_{t})
p(zti∣xt,cti,m)≈N(zti;h(xi,cti,m),Qt)≈N(zti;h(μt,cti,m)+Ht(xt−μt),Qt)⊗N(xt;μt,Σt)\qquad⊗\otimes⊗为卷积符号,表示似然函数为测量噪声和状态不确定性的高斯函数卷积????\color{#F00}{表示似然函数为测量噪声和状态不确定性的高斯函数卷积????}表示似然函数为测量噪声和状态不确定性的高斯函数卷积????。因此上式的高斯分布的均值为h(μ‾t,cti,m)h(\boldsymbol{\overline{\mu}}_{t},c_{t}^{i},m)h(μt,cti,m),协方差为HtΣ‾tHtT+Qt\boldsymbol{H}_{t}\boldsymbol{\overline{\Sigma}}_{t}\boldsymbol{H}_{t}^{T}+Q_{t}HtΣtHtT+Qt测量似然函数为:
p(zt∣c1:t,m,z1:t−1,u1:t)∼N(zti;h(μ‾i,cti,m),HtΣ‾tHtT+Qt)
p(z_{t}|c_{1:t},\boldsymbol{m},\boldsymbol{z}_{1:t-1},\boldsymbol{u}_{1:t}) \sim \mathcal{N}(z_{t}^{i};h(\boldsymbol{\overline{\mu}}_{i},c_{t}^{i},\boldsymbol{m}),\boldsymbol{H}_{t}\boldsymbol{\overline{\Sigma}}_{t}\boldsymbol{H}_{t}^{T}+Q_{t})
p(zt∣c1:t,m,z1:t−1,u1:t)∼N(zti;h(μi,cti,m),HtΣtHtT+Qt)\qquad第 21行更新测量似然。