测量模型描述了在物理世界中传感器数据的生成。
概率机器人学将噪声显式地融入传感器测量模型中。
测量模型定义为条件概率 p ( z t ∣ x t , m ) p(z_t|x_t,m) p(zt∣xt,m)
对于超声波的噪声:
1.偏大:以特定角度测量光滑平面->反射(specular reflection效应)
2.偏小:sensor之间cross talk
传感器模型越准确越好,但不可能完全准确(太花时间,且外部世界状态变量可能未知)
实际中,非常粗糙的传感器模型也可以工作。这就是概率机器人学的优势
传感器同时有多个数据,假设噪声互相独立,即有 p ( z t ∣ x t , m ) = ∏ k = 1 k p ( z t ∣ x t k , m ) p(z_{t}|x_{t},m)=\prod_{k=1}^{k}p(z_{t}|x_{t}^{k},m) p(zt∣xt,m)=∏k=1kp(zt∣xtk,m)
环境的地图是一个环境中的物体与其位置的表单
地图常以两种方式索引:基于特征,和基于位置。各有优劣
基于位置的描述为Volumetric,标记所有位置,即不仅包含有物体的信息,也包含没物体的信息
基于特征的描述可以更简单的对物体进行移动。
一类经典的基于位置描述的地图为Occupancy Grid Map,适合用来搞Navigation
测距传感器可以是光束的(如激光),也可以是锥形的(如超声波)
模型包含四种测量误差:较小的测量误差,意料之外的物体引发的误差,传感器探测物体失败,随机的不可解释的误差。
以上四种分布按权重( z h i t z_{hit} zhit, z s h o r t z_{short} zshort, z m a x z_{max} zmax, z r a n d z_{rand} zrand)线性叠加,四个系数相加为1。
光束测距模型算法:输入为测量 z t z_{t} zt(多个光束),机器人位姿 x t x_{t} xt,还有地图 m m m。将某一个测量向量的可能性,是所有单个光束可能性的乘积,即假设光束之间独立。具体算法:
1····Algorithm beam range finder model ( z t ; x t ; m z_t; x_t; m zt;xt;m ):
2···· q = 1 q = 1 q=1
3····for k = 1 k = 1 k=1 to K K K do
4········compute z t k ∗ z_t^{k∗} ztk∗ for the measurement z t k z_t^k ztk using ray casting
5········ p = z h i t ⋅ p h i t ( z t k ∣ x t , m ) + z s h o r t ⋅ p s h o r t ( z t k ∣ x t , m ) p = z_{hit} · p_{hit}(z_t^k|x_t, m) + z_{short} · p_{short}(z_t^k|x_t,m) p=zhit⋅phit(ztk∣xt,m)+zshort⋅pshort(ztk∣xt,m)
6·············· + z m a x ⋅ p m a x ( z t k ∣ x t , m ) + z r a n d ⋅ p r a n d ( z t k ∣ x t , m ) +z_{max} · p_{max}(z_t^k|x_t, m) + z_{rand} · p_{rand}(z_t^k|x_t,m) +zmax⋅pmax(ztk∣xt,m)+zrand⋅prand(ztk∣xt,m)
7········ q = q ⋅ p q = q · p q=q⋅p
8····return q q q
定义模型的内参集合为 Θ \Theta Θ,包括叠加权重( z h i t z_{hit} zhit, z s h o r t z_{short} zshort, z m a x z_{max} zmax, z r a n d z_{rand} zrand)和分布参数( σ h i t \sigma_{hit} σhit与 λ s h o r t \lambda_{short} λshort。
任何测量数据的概率都是 Θ \Theta Θ的函数。
可以通过数据确定内参:
模型中大的误差(噪声)概率有两面性:坏处是传感器读数传达的信息量更小,好处是这样的模型更鲁棒。
有心情的时候再好好看吧…先跳啦…
实际中,传感器可能有几百个beam,每秒好几帧数据,不可能都ray-trace然后再把概率乘起来得到一个总的置信度,因此通常只选取几个均匀分布的测量光束,好处是这样的光束更满足相互独立的假设,而相邻的光束通常有相关的噪声。
如果相邻的光束相关性太强,可以把 p ( z t k ∣ x t , m ) p(z_t^k|x_t,m) p(ztk∣xt,m)换成更弱的版本 p ( z t k ∣ x t , m ) α p(z_t^k|x_t,m)^\alpha p(ztk∣xt,m)α,其中 α < 1 \alpha<1 α<1。这样做的原理是减少传感器数据中提取的信息。还可以在实际应用的场景中学习内参,例如可以用多步的梯度下降。
计算光束模型最花时间的步骤是做ray casting。可以提前计算ray casting算法,存在内存里,到时候查表。一种常用的做法是把状态空间结构成细致的三维网格,然后提前算好对不同cell的 z t k ∗ z_t^{k*} ztk∗。在室内移动机器人应用中,通常分辨率可以取15cm和2°。
光束模型的优点是与测距传感器的几何和物理紧密相关,但是有两个缺点:
另一种模型为似然场模型(likelihood field model),跟物理模型无关,但在零乱空间中更平滑,且计算更快。
首先,已知机器人状态 x t = ( x y θ ) T x_t=(\begin{matrix}x & y & \theta\end{matrix})^T xt=(xyθ)T与第 k k k个传感器与机器人的相对位姿 ( x k , s e n s y k , s e n s θ k , s e n s ) T (\begin{matrix}x_{k,sens} & y_{k,sens} & \theta_{k,sens}\end{matrix})^T (xk,sensyk,sensθk,sens)T,将传感器测量的测量点 z t k z_t^k ztk转换到世界坐标系下,得到( x z t k y z t k ) T \begin{matrix}x_{z_t^k} & y_{z_t^k}\end{matrix})^T xztkyztk)T。只有当传感器检测到障碍物(即测量值不是最大值)时,这些转换的坐标才有意义,所以 z m a x z_{max} zmax数据被扔掉。
与光束模型类似,假设三种噪声源:
测量模型概率即三者以权重 p h i t p_{hit} phit, p r a n d p_{rand} prand, p m a x p_{max} pmax线性叠加。
调整内参的方法与光束模型相同,可手调,也可以用最大似然估计器。
算法:
1···· q = 1 q=1 q=1
2····for all k k k do
3········if z t k ≠ z m a x z_t^k \neq z_{max} ztk̸=zmax
4············compute end point in world frame ( x z t k x_{z_t^k} xztk, y z t k y_{z_t^k} yztk) and dist^2
5············ q = q ⋅ ( z h i t ⋅ p r o b ( d i s t 2 , σ h i t 2 ) + z r a n d o m z m a x ) q=q \cdot (z_{hit} \cdot prob(dist^2, \sigma_{hit}^2)+\frac{z_{random}}{z_{max}}) q=q⋅(zhit⋅prob(dist2,σhit2)+zmaxzrandom)
6····return q q q
计算量最大的一步是找最近的障碍物,得到 d i s t 2 dist^2 dist2(不过有距离场计算的包?SDF?)。可以将环境离散化(2D),然后提前计算好,到时候查表。
由于欧氏距离平滑,所以似然场得到的结果也比较平滑。
缺点:
现在的似然场用的是扩展的对称算法。
有很多测距传感器模型,测量的是一次measurement和地图之间的相关性。
一个常用的技巧叫map matching,可以将scan转换成occupancy grid。
通常是将少数几个连续的scan叠加为一个局部地图,记为 m l o c a l m_{local} mlocal。
传感器测定模型将 m l o c a l m_{local} mlocal与全局地图 m m m作对比,也就是两者越像则 p ( m l o c a l ∣ x t , m ) p(m_{local}|x_t,m) p(mlocal∣xt,m)越大。局部地图的cells首先要变换到全局地图坐标系中。
地图相关性函数:
ρ m , m l o c a l , x t = Σ x , y ( m x , y − m ˉ ) ⋅ ( m x , y , l o c a l ( x t ) − m ˉ ) Σ x , y ( m x , y − m ˉ ) 2 Σ x , y ( m x , y , l o c a l ( x t ) − m ˉ ) 2 \rho_{m,m_{local},x_t}=\frac{\Sigma_{x,y}(m_{x,y}-\bar{m})\cdot(m_{x,y,local(x_t)}-\bar{m})}{\sqrt{\Sigma_{x,y}(m_{x,y}-\bar{m})^2\Sigma_{x,y}(m_{x,y,local(x_t)}-\bar{m})^2}} ρm,mlocal,xt=Σx,y(mx,y−mˉ)2Σx,y(mx,y,local(xt)−mˉ)2Σx,y(mx,y−mˉ)⋅(mx,y,local(xt)−mˉ)
上式中, m ˉ \bar{m} mˉ是全局和局部地图的重叠区域的总均值,得到的相关性取值分为是 [ − 1 , 1 ] [-1,1] [−1,1]。然后,map matching认为 p ( m l o c a l ∣ x t , m ) = m a x { ρ m , m l o c a l , x t , 0 } p(m_{local}|x_t,m)=max\{\rho_{m,m_{local},x_t},0\} p(mlocal∣xt,m)=max{ρm,mlocal,xt,0}。
地图匹配法的优点:容易计算(但是结果不平滑)。一种得到似然场的方式就是先给地图做高斯模糊(用高斯核卷积),然后在结果中做地图匹配。相比似然场方法,地图匹配的一大优势就是显式考虑了两个地图中的自由空间,而前者只考虑了对应障碍物的传感器测量点。
地图匹配的缺点:很多建图方法构建的地图超出了传感器测量范围,从而影响地图匹配。地图匹配方法也没有一个物理解释。相关性定义为地图距离平方的归一化,与传感器的噪声模型没有关系。
前文所讲的传感器模型都是基于传感器的原始数据(raw data)。
定义特征提取函数 f f f,则得到的特征是 f ( z t ) f(z_t) f(zt)。
通常从高维传感器测量数据中提取少量的特征。
一大优势是降低计算复杂度。
对于测距传感器,通常提取线、角、局部极小值,对应墙壁、角落、物体。
机器人应用中,特征对应物理世界中不同物体,室内室外不同。将这些物理物体称之为地标,表明他们被用于导航。
每一个地标对应的数据包括相对机器人的距离( r r r)和方向( ϕ \phi ϕ),也包括一个签名( s s s,如种类、颜色、高度等)。
通常假设不同特征条件独立,即 p ( f ( z t ) ∣ x t , m ) = Π i p ( r t i , ϕ t i , s t i ∣ x t , m ) p(f(z_t)|x_t,m)=\Pi_ip(r_t^i,\phi_t^i,s_t^i|x_t,m) p(f(zt)∣xt,m)=Πip(rti,ϕti,sti∣xt,m),当不同特征测量的噪声相互独立时成立,此时可以对不同特征进行依次(独立)处理。
基于特征的传感器模型:对距离、方向、签名各有独立的高斯噪声,对于特征地图中第 j j j个地标,生成 t t t时刻测量的第 i i i个特征,模型简单的由几何关系得到,不写了。
对一个特征 f t i f_t^i fti,用变量 c t i c_t^i cti存储它的身份,可以取值为 1 1 1到 N + 1 N+1 N+1, N N N是地图中地标总数,即如果 c t i = j c_t^i=j cti=j,则 f t i f_t^i fti就对应地图中第 j j j个特征。当没有匹配时, c t i = N + 1 c_t^i=N+1 cti=N+1。
计算得到一个有匹配 c t i c_t^i cti的特征 f t i f_t^i fti的算法是首先计算应有的距离 r ^ \hat{r} r^、方向 ϕ ^ \hat{\phi} ϕ^和签名 s j s_j sj,然后根据距离和高斯噪声模型得到概率,即 q = p r o b ( r t i − r ^ , σ r 2 ) ⋅ p r o b ( ϕ t i − ϕ ^ , σ ϕ 2 ) ⋅ p r o b ( r s i − s ^ , σ s 2 ) q=prob(r_t^i-\hat{r}, \sigma_r^2)\cdot prob(\phi_t^i-\hat{\phi}, \sigma_{\phi}^2)\cdot prob(r_s^i-\hat{s}, \sigma_s^2) q=prob(rti−r^,σr2)⋅prob(ϕti−ϕ^,σϕ2)⋅prob(rsi−s^,σs2)
有时需要对对应某特征 f t i f_t^i fti的机器人位姿 x t x_t xt进行采样。在地标模型下,这个采样可以比较高效,但需要额外的假设:需要知道先验概率 p ( x t ∣ c t i , m ) p(x_t|c_t^i,m) p(xt∣cti,m)。由于距离和方向提供了两个自由度的信息,而机器人状态是三维的,所以需要在第三个维度上采样,同时叠加一个高斯。采样的结果通常是围绕地图上地标的环形分布。
上述的两种算法都是基于配对已知。
关于特征的签名,大多数算法没有使用,也就是不对地标进行区分。但签名容易提取,且可以提供有价值的信息。
从测量数据中提取特征是有代价的,虽然在研究中通常认为 p ( f ( z t ) ∣ x t , m ) ≈ p ( z t ∣ x t , m ) p(f(z_t)|x_t,m)\approx p(z_t|x_t,m) p(f(zt)∣xt,m)≈p(zt∣xt,m),但实际中牺牲了很多信息。
*现在计算机发达,特征方法已经不太重要了。*大多数state-of-the-art的方法都使用稠密的测量数据。
在选择传感器模型时,通常要权衡物理真实度和其他属性,例如平滑性(没有平滑性对后续算法不好,如粒子滤波器)。
总的来说模型越准越好,从传感器中能提取的信息越多越好。
在调模型内参的时候,可以把不确定性放大一些,因为其实没有对所有的噪声源进行建模,导致模型可能会过度自信。所以可以减少从测量中提取的信息,如在3.4节中讲的。