参考:占用栅格地图原理分析:https://blog.csdn.net/weixin_40863346/article/details/92575794
基本概率
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(mi)=1
p(mi)=1 Cell未被占用:p(mi)=0 p(mi)=0 Cell未知状态:p(mi)=0.5
p(mi)=0.5每个Cell有一个对应的随机变量,这些随机变量相对独立
随机变量表示cell被占用的概率根据已知数据估计一个map
给定Sensor数据z1:tz1:t和Sensor的位姿x1:tx1:t,估计map:
p(m∣z1:t,x1:t)=∏ip(mi∣z1:t,x1:t)p(m∣z1:t,x1:t)=i∏p(mi∣z1:t,x1:t)
1.1 Log-odd概念
Log odd的概念:计算odd(赔率)的对数 为什么需要Log-Odd? 使用log-odds的形式,cell的值更新只使用加法(即把乘法变成了加法) 避免在0或1附近,概率被截断问题 l(x)∈(−∞,∞) l(x)∈(−∞,∞)Odd定义:事件发生的概率与事件不发生的概率的比值 odd(x)=p(x)1−p(x) odd(x)=1−p(x)p(x) Log-odd定义: l(x)=log(odd(x))=logp(x)1−p(x) l(x)=log(odd(x))=log1−p(x)p(x) 反向计算p(x):p(x)=1−11+expl(x) p(x)=1−1+expl(x)1 p(x)=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(mx,y∣z)=p(z∣mx,y)p(mx,y)p(z))p(mx,y∣z)=p(z)p(z∣mx,y)p(mx,y)) 直接计算概率是困难的,为了简化计算,不使用占据概率本身,而使用log-odd Unexpected text node: ’ ’
Odd((mx,y=1)givenz)=p(mx,y=0∣z)p(mx,y=1∣z)1.2.2 Log-Odd更新推导过程
p(mx,y=1∣z)=p(z∣mx,y=1)p(mx,y=1)p(z) p(mx,y=1∣z)=p(z)p(z∣mx,y=1)p(mx,y=1) Odd(mx,y=1∣z)=p(mx,y=1∣z)p(mx,y=0∣z)=p(z∣mx,y=1)p(mx,y=1)/p(z)p(mx,y=0∣z)
Odd(mx,y=1∣z)=p(mx,y=0∣z)p(mx,y=1∣z)=p(mx,y=0∣z)p(z∣mx,y=1)p(mx,y=1)/p(z)
同理,p(mx,y=0∣z)=p(z∣mx,y=0)p(mx,y=0)p(z)p(mx,y=0∣z)=p(z)p(z∣mx,y=0)p(mx,y=0) Odd(mx,y=1∣z)=p(mx,y=1∣z)p(mx,y=0∣z)=p(z∣mx,y=1)p(mx,y=1)p(z∣mx,y=0)p(mx,y=0) Odd(mx,y=1∣z)=p(mx,y=0∣z)p(mx,y=1∣z)=p(z∣mx,y=0)p(mx,y=0)p(z∣mx,y=1)p(mx,y=1) 取对数: log(Odd(mx,y=1∣z))=logp(mx,y=1∣z)p(mx,y=0∣z)=logp(z∣mx,y=1)p(mx,y=1)p(z∣mx,y=0)p(mx,y=0) log(Odd(mx,y=1∣z))=logp(mx,y=0∣z)p(mx,y=1∣z)=logp(z∣mx,y=0)p(mx,y=0)p(z∣mx,y=1)p(mx,y=1) =logp(z∣mx,y=1)p(z∣mx,y=0)+logp(mx,y=1)p(mx,y=0) =logp(z∣mx,y=0)p(z∣mx,y=1)+logp(mx,y=0)p(mx,y=1) 上式左边为后验概率的Log-Odd,右边为Sensor model和先验概率,通过取对数,把右边两项相乘变成了两项相加 可得OGM的log-odds更新公式: Unexpected text node: ’ ’
logodd+=logoddmeas+logodd−1.2.3 OGM Log-Odd 更新原理
每个Cell的值为Log-Odd值 Log-Odd更新公式:Unexpected text node: '  'logodd+=logoddmeas+logodd− 在这里插入图片描述 更新规则(Unexpected text node: ’ ’
logodd+=logoddmeas): 只更新被观察到的Cell 被更新之后的值变成了先验值1.2.4 Log-Odd形式的测量模型(Measurement Model)
测量项:logp(z∣mx,y=1)p(z∣mx,y=0)logp(z∣mx,y=0)p(z∣mx,y=1) 情况1:Cell (z=1) Unexpected text node: ’ ’ logoddocc=logp(z=1∣mx,y=0)p(z=1∣mx,y=1) 情况2:Cell (z=0) Unexpected text node: ’ ’ logoddfree=logp(z=0∣mx,y=1)p(z=0∣mx,y=0) 如果log-odd的值为0,则Odd=1,即p(mx,y=1)=p(mx,y=0)=0.5 p(mx,y=1)=p(mx,y=0)=0.5 测量模型:p(z∣mx,y) p(z∣mx,y) p(z=1∣mx,y=1) p(z=1∣mx,y=1):True occupied measurement p(z=0∣mx,y=1) p(z=0∣mx,y=1):False free measurement p(z=1∣mx,y=0) p(z=1∣mx,y=0):False occupied measurement p(z=0∣mx,y=0)
p(z=0∣mx,y=0):True free measurement1.3 Cartographer Submap的Cell更新过程
当一个Scan插入Submap时,通过以下步骤进行: 为hits计算一个栅格点的集合,且为misses计算一个与hits不相交的集合 对于每一个hit,插入一个最接近的grid point进入hits集合 对于每一个miss,把与线段(origin,scan point)交叉的Grid Point(且不在hits集合中的)插入misses集合 如果一个Grid Point从未被更新,则分配phit或pmiss给它phit或pmiss给它,当它分别位于hits集合或misses集合 如果一个Grid Point已经被更新,则更新公式如下: odds§=p1−p odds§=1−pp 为hit更新: Mnew(x)=clamp(odds−1(odds(Mold(x))∙odds(phit))) Mnew(x)=clamp(odds−1(odds(Mold(x))∙odds(phit))) 为miss更新: Mnew(x)=clamp(odds−1(odds(Mold(x))∙odds(pmiss))) Mnew(x)=clamp(odds−1(odds(Mold(x))∙odds(pmiss))) 因为phit>0.5 phit>0.5且pmiss<05pmiss<05所以有: odds(phit)>1odds(pmiss)<1odds(phit)>1odds(pmiss)<1
原文来自于:https://blog.csdn.net/MyArrow/article/details/83185200