Cartographer Insert Submap

1. 基本概率

  • TSDF: Truncated Signed Distance Function(截断的符号距离函数)
  • Occupancy Grid Map(OGM:占用栅格地图):
    • “free space”:用于planning
    • 使用SLAM输出的位姿创建occupancy grid map
    • OGM可用于路径规划(planning)和定位(localization)
    • 又叫做根据已知的Pose建图(mapping with know poses)
    • Cell的值:表示此Cell有障碍物的概率(被占据)
    • 采用Bayesian滤波更新OGM Cell的值
  • OGM的特征
    • 把真实世界离散化为cells
    • 栅格结构是刚体
    • 每个cell有占用、空闲、未知三种状态
    • 非参数化模型
    • 大的map需要大量的内存
    • 不依赖特征
    • 每个cell是一个随机变量(模型化占用情况)
  • Cell的占用概率
    • Cell被占用: p ( m i ) = 1 p(m_i)=1 p(mi)=1
    • Cell未被占用: p ( m i ) = 0 p(m_i)=0 p(mi)=0
    • Cell未知状态: p ( m i ) = 0.5 p(m_i)=0.5 p(mi)=0.5
  • 每个Cell有一个对应的随机变量,这些随机变量相对独立
    • 随机变量表示cell被占用的概率
  • 根据已知数据估计一个map
    • 给定Sensor数据 z 1 : t z_{1:t} z1:t和Sensor的位姿 x 1 : t x_{1:t} x1:t,估计map:
      p ( m ∣ z 1 : t , x 1 : t ) = ∏ i p ( m i ∣ z 1 : t , x 1 : t ) p(m|z_{1:t}, x_{1:t})=\prod_i p(m_i|z_{1:t}, x_{1:t}) p(mz1:t,x1:t)=ip(miz1:t,x1:t)

1.1 Log-odd概念

  • Log odd的概念:计算odd(赔率)的对数
  • 为什么需要Log-Odd?
    • 使用log-odds的形式,cell的值更新只使用加法(即把乘法变成了加法)
    • 避免在0或1附近,概率被截断问题 l ( x ) ∈ ( − ∞ , ∞ ) l(x) \in (-\infty, \infty) l(x)(,)
  • Odd定义:事件发生的概率与事件不发生的概率的比值
    o d d ( x ) = p ( x ) 1 − p ( x ) odd(x) = \frac{p(x)}{1-p(x)} odd(x)=1p(x)p(x)
  • Log-odd定义:  l ( x ) = l o g ( o d d ( x ) ) = l o g p ( x ) 1 − p ( x ) l(x) =log(odd(x))= log\frac{p(x)}{1-p(x)} l(x)=log(odd(x))=log1p(x)p(x)
  • 反向计算p(x): p ( x ) = 1 − 1 1 + e x p l ( x ) p(x) = 1- \frac {1}{1+expl(x)} p(x)=11+expl(x)1 p ( x ) = o d d ( x ) 1 + o d d ( x ) p(x)=\frac{odd(x)}{1+odd(x)} p(x)=1+odd(x)odd(x)

1.2 Log-Odd update (对数赔率更新法)

1.2.1 OGM概率更新原理

在这里插入图片描述

  • 每个Cell的值为Cell被占据的概率值
  • 在Bayes’ Rule下,根据传感器的测量数据更新map中的cell被占据概率
  • Bayes规则: p ( m x , y ∣ z ) = p ( z ∣ m x , y ) p ( m x , y ) p ( z ) ) p(m_{x,y}|z) = \frac {p(z|m_{x,y})p(m_{x,y})}{p(z)}) p(mx,yz)=p(z)p(zmx,y)p(mx,y))
  • 直接计算概率是困难的,为了简化计算,不使用占据概率本身,而使用log-odd
  • O d d ( ( m x , y = 1 )    g i v e n    z ) = p ( m x , y = 1 ∣ z ) p ( m x , y = 0 ∣ z ) Odd((m_{x,y}=1)\; given \; z) = \frac{p(m_{x,y}=1|z)}{p(m_{x,y}=0|z)} Odd((mx,y=1)givenz)=p(mx,y=0z)p(mx,y=1z)

1.2.2 Log-Odd更新推导过程

p ( m x , y = 1 ∣ z ) = p ( z ∣ m x , y = 1 ) p ( m x , y = 1 ) p ( z ) p(m_{x,y}=1|z) = \frac {p(z|m_{x,y}=1)p(m_{x,y}=1)}{p(z)} p(mx,y=1z)=p(z)p(zmx,y=1)p(mx,y=1)
O d d ( m x , y = 1 ∣ z ) = p ( m x , y = 1 ∣ z ) p ( m x , y = 0 ∣ z ) = p ( z ∣ m x , y = 1 ) p ( m x , y = 1 ) / p ( z ) p ( m x , y = 0 ∣ z ) Odd(m_{x,y}=1|z) = \frac {p(m_{x,y}=1|z)}{p(m_{x,y}=0|z)}=\frac {p(z|m_{x,y}=1)p(m_{x,y}=1)/p(z)}{p(m_{x,y}=0|z)} Odd(mx,y=1z)=p(mx,y=0z)p(mx,y=1z)=p(mx,y=0z)p(zmx,y=1)p(mx,y=1)/p(z)

  • 同理, p ( m x , y = 0 ∣ z ) = p ( z ∣ m x , y = 0 ) p ( m x , y = 0 ) p ( z ) p(m_{x,y}=0|z) = \frac {p(z|m_{x,y}=0)p(m_{x,y}=0)}{p(z)} p(mx,y=0z)=p(z)p(zmx,y=0)p(mx,y=0)
    O d d ( m x , y = 1 ∣ z ) = p ( m x , y = 1 ∣ z ) p ( m x , y = 0 ∣ z ) = p ( z ∣ m x , y = 1 ) p ( m x , y = 1 ) p ( z ∣ m x , y = 0 ) p ( m x , y = 0 ) Odd(m_{x,y}=1|z) = \frac {p(m_{x,y}=1|z)}{p(m_{x,y}=0|z)}= \frac {{p(z|m_{x,y}=1)p(m_{x,y}=1)}}{{p(z|m_{x,y}=0)p(m_{x,y}=0)}} Odd(mx,y=1z)=p(mx,y=0z)p(mx,y=1z)=p(zmx,y=0)p(mx,y=0)p(zmx,y=1)p(mx,y=1)
  • 取对数:
    l o g ( O d d ( m x , y = 1 ∣ z ) ) = l o g p ( m x , y = 1 ∣ z ) p ( m x , y = 0 ∣ z ) = l o g p ( z ∣ m x , y = 1 ) p ( m x , y = 1 ) p ( z ∣ m x , y = 0 ) p ( m x , y = 0 ) log(Odd(m_{x,y}=1|z)) =log \frac {p(m_{x,y}=1|z)}{p(m_{x,y}=0|z)}=log \frac {{p(z|m_{x,y}=1)p(m_{x,y}=1)}}{{p(z|m_{x,y}=0)p(m_{x,y}=0)}} log(Odd(mx,y=1z))=logp(mx,y=0z)p(mx,y=1z)=logp(zmx,y=0)p(mx,y=0)p(zmx,y=1)p(mx,y=1)
    = l o g p ( z ∣ m x , y = 1 ) p ( z ∣ m x , y = 0 ) + l o g p ( m x , y = 1 ) p ( m x , y = 0 ) = log \frac{p(z|m_{x,y}=1)}{p(z|m_{x,y}=0)} + log \frac {p(m_{x,y}=1)}{p(m_{x,y}=0)} =logp(zmx,y=0)p(zmx,y=1)+logp(mx,y=0)p(mx,y=1)
  • 上式左边为后验概率的Log-Odd,右边为Sensor model和先验概率,通过取对数,把右边两项相乘变成了两项相加
  • 可得OGM的log-odds更新公式:
    l o g    o d d + = l o g    o d d    m e a s + l o g    o d d − log \; odd^+ = log \; odd \; meas + log \; odd^- logodd+=logoddmeas+logodd

1.2.3 OGM Log-Odd 更新原理

  • 每个Cell的值为Log-Odd值
  • Log-Odd更新公式: l o g    o d d + = l o g    o d d    m e a s + l o g    o d d − log \; odd^+ = log \; odd \; meas + log \; odd^- logodd+=logoddmeas+logodd
    在这里插入图片描述
  • 更新规则( l o g    o d d    + = l o g    o d d    m e a s log\;odd\; += log\;odd\;meas logodd+=logoddmeas):
    • 只更新被观察到的Cell
    • 被更新之后的值变成了先验值

1.2.4 Log-Odd形式的测量模型(Measurement Model)

  • 测量项: l o g p ( z ∣ m x , y = 1 ) p ( z ∣ m x , y = 0 ) log \frac {p(z|m_{x,y}=1)}{p(z|m_{x,y}=0)} logp(zmx,y=0)p(zmx,y=1)
  • 情况1:Cell (z=1)
    l o g    o d d    o c c = l o g p ( z = 1 ∣ m x , y = 1 ) p ( z = 1 ∣ m x , y = 0 ) log \; odd \; occ = log \frac {p(z=1|m_{x,y}=1)}{p(z=1|m_{x,y}=0)} logoddocc=logp(z=1mx,y=0)p(z=1mx,y=1)
  • 情况2:Cell (z=0)
    l o g    o d d    f r e e = l o g p ( z = 0 ∣ m x , y = 0 ) p ( z = 0 ∣ m x , y = 1 ) log \; odd \; free = log \frac {p(z=0|m_{x,y}=0)}{p(z=0|m_{x,y}=1)} logoddfree=logp(z=0mx,y=1)p(z=0mx,y=0)
  • 如果log-odd的值为0,则Odd=1,即 p ( m x , y = 1 ) = p ( m x , y = 0 ) = 0.5 p(m_{x,y}=1)=p(m_{x,y}=0) = 0.5 p(mx,y=1)=p(mx,y=0)=0.5
  • 测量模型: p ( z ∣ m x , y ) p(z|m_{x,y}) p(zmx,y)
  • p ( z = 1 ∣ m x , y = 1 ) p(z=1|m_{x,y}=1) p(z=1mx,y=1):True occupied measurement
  • p ( z = 0 ∣ m x , y = 1 ) p(z=0|m_{x,y}=1) p(z=0mx,y=1):False free measurement
  • p ( z = 1 ∣ m x , y = 0 ) p(z=1|m_{x,y}=0) p(z=1mx,y=0):False occupied measurement
  • p ( z = 0 ∣ m x , y = 0 ) p(z=0|m_{x,y}=0) p(z=0mx,y=0):True free measurement

1.3 Cartographer Submap的Cell更新过程

  • 当一个Scan插入Submap时,通过以下步骤进行:
    • 为hits计算一个栅格点的集合,且为misses计算一个与hits不相交的集合
    • 对于每一个hit,插入一个最接近的grid point进入hits集合
    • 对于每一个miss,把与线段(origin,scan point)交叉的Grid Point(且不在hits集合中的)插入misses集合
    • 如果一个Grid Point从未被更新,则分配 p h i t 或 p m i s s 给 它 p_{hit}或p_{miss}给它 phitpmiss,当它分别位于hits集合或misses集合
    • 如果一个Grid Point已经被更新,则更新公式如下:
      o d d s ( p ) = p 1 − p odds(p)=\frac {p}{1-p} odds(p)=1pp
    • 为hit更新:
      M n e w ( x ) = c l a m p ( o d d s − 1 ( o d d s ( M o l d ( x ) ) ∙ o d d s ( p h i t ) ) ) M_{new}(x) = clamp(odds^{-1}(odds(M_{old}(x)) \bullet odds(p_{hit}))) Mnew(x)=clamp(odds1(odds(Mold(x))odds(phit)))
    • 为miss更新:
      M n e w ( x ) = c l a m p ( o d d s − 1 ( o d d s ( M o l d ( x ) ) ∙ o d d s ( p m i s s ) ) ) M_{new}(x) = clamp(odds^{-1}(odds(M_{old}(x)) \bullet odds(p_{miss}))) Mnew(x)=clamp(odds1(odds(Mold(x))odds(pmiss)))
    • 因为 p h i t &gt; 0.5 p_{hit} &gt; 0.5 phit>0.5 p m i s s &lt; 05 p_{miss} &lt; 05 pmiss<05所以有:
      o d d s ( p h i t ) &gt; 1 o d d s ( p m i s s ) &lt; 1 odds(p_{hit}) &gt; 1 \quad odds(p_{miss}) &lt; 1 odds(phit)>1odds(pmiss)<1
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cartographer主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值