Occupancy Map(Occupancy Grid)的更新
文章同步更新于github page
文章目录
- Occupancy Map
- Odds
- Odds的更新
- 对数Odds
Occupancy Map
将空间划分为一个个小网格(cell),每个cell中存储cell内是否有障碍物的概率,这样的地图称为Occupancy Map,由于所有cell构成一个网,所以也称为Grid Map。
以2D Occupancy Map为例,每个cell中都有一个概率,那整个地图可以看做一个描述障碍物分布的概率分布(严格要归一化后才是概率分布)。构建地图的过程,就是根据传感器(比如Lider)的观测,更新这个概率分布。
设每个cell的概率相对于其他cell是独立的,更新地图的概率分布就简化为更新每个cell的概率。即在已知1到t时刻所有观测的情况下,该cell中有障碍物的概率,记为
p(mi∣z1:t)p(m_i|z_{1:t}) p(mi∣z1:t)
Odds
考虑到更新的方便,每个cell中实际存储的是概率对应的Odds。
Odds定义为有障碍物的概率与无障碍物概率的比,即
o(mi∣z1:t)=p(mi∣z1:t)1−p(mi∣z1:t)=p(mi∣z1:t)p(¬mi∣z1:t)o(m_i|z_{1:t})=\frac{p(m_i|z_{1:t})}{1 - p(m_i|z_{1:t})} = \frac{p(m_i|z_{1:t})}{p(\neg m_i|z_{1:t})} o(mi∣z1:t)=1−p(mi∣z1:t)p(mi∣z1:t)=p(¬mi∣z1:t)p(mi∣z1:t)
已知Odds,也很容易反算出对应的概率。可以将Odds理解为一个映射,将值域在[0,1][0, 1][0,1]之间的概率映射到[0,+∞)[0,+\infty)[0,+∞)。
Odds的更新
根据贝叶斯公式,有
p(mi∣z1:t)=p(zt∣mi,z1:t−1)p(mi∣z1:t−1)p(zt∣z1:t−1)p(m_i|z_{1:t})=\frac{p(z_t|m_i, z_{1:t-1})p(m_i|z_{1:t-1})}{p(z_t|z_{1:t-1})} p(mi∣z1:t)=p(zt∣z1:t−1)p(zt∣mi,z1:t−1)p(mi∣z1:t−1)
根据Markov假设,已知障碍物mim_imi的情况下,观测结果与之前的观测无关,则
p(mi∣z1:t)=p(zt∣mi)p(mi∣z1:t−1)p(zt∣z1:t−1)p(m_i|z_{1:t})=\frac{p(z_t|m_i)p(m_i|z_{1:t-1})}{p(z_t|z_{1:t-1})} p(mi∣z1:t)=p(zt∣z1:t−1)p(zt∣mi)p(mi∣z1:t−1)
于是根据Odds的定义,可得
o(mi∣z1:t)=p(mi∣z1:t)p(¬mi∣z1:t)=p(zt∣mi)p(mi∣z1:t−1)p(zt∣¬mi)p(¬mi∣z1:t−1)=p(zt∣mi)p(zt∣¬mi)⋅o(mi∣z1:t−1)=p(mi∣zt)p(zt)/p(mi)p(¬mi∣zt)p(zt)/p(¬mi)⋅o(mi∣z1:t−1)再次利用了贝叶斯公式=o(mi∣zt)⋅o(mi∣z1:t−1)⋅p(¬mi)p(mi)⎵prior\begin{aligned} o(m_i|z_{1:t})&=\frac{p(m_i|z_{1:t})}{p(\neg m_i|z_{1:t})} \\ &=\frac{p(z_t|m_i)p(m_i|z_{1:t-1})}{p(z_t|\neg m_i)p(\neg m_i|z_{1:t-1})} \\ &=\frac{p(z_t|m_i)}{p(z_t|\neg m_i)}\cdot o(m_i|z_{1:t-1}) \\ &=\frac{p(m_i|z_t)p(z_t)/p(m_i)}{p(\neg m_i|z_t)p(z_t)/p(\neg m_i)} \cdot o(m_i|z_{1:t-1}) \ \ \ \ \text{再次利用了贝叶斯公式} \\ &=o(m_i|z_t)\cdot o(m_i|z_{1:t-1})\cdot \underbrace{\frac{p(\neg m_i)}{p(m_i)}}_{\text{prior}} \end{aligned} o(mi∣z1:t)=p(¬mi∣z1:t)p(mi∣z1:t)=p(zt∣¬mi)p(¬mi∣z1:t−1)p(zt∣mi)p(mi∣z1:t−1)=p(zt∣¬mi)p(zt∣mi)⋅o(mi∣z1:t−1)=p(¬mi∣zt)p(zt)/p(¬mi)p(mi∣zt)p(zt)/p(mi)⋅o(mi∣z1:t−1) 再次利用了贝叶斯公式=o(mi∣zt)⋅o(mi∣z1:t−1)⋅priorp(mi)p(¬mi)
在没有观测的情况下,一般假设cell有障碍物的概率为0.5,即p(mi)=p(¬mi)=0.5p(m_i)=p(\neg m_i)=0.5p(mi)=p(¬mi)=0.5,所以最终有
o(mi∣z1:t)=o(mi∣zt)⋅o(mi∣z1:t−1)o(m_i|z_{1:t})=o(m_i|z_t)\cdot o(m_i|z_{1:t-1}) o(mi∣z1:t)=o(mi∣zt)⋅o(mi∣z1:t−1)
即更新某个cell的Odds时,只需用新的观测结果对应的Odds,乘以该cell原本的Odds即可。
比如Lider击中cell中的物体,并返回一个距离值,这时可认为cell中有障碍物的概率为0.9,即p(mi∣hit)=0.9p(m_i|hit)=0.9p(mi∣hit)=0.9,对应的Odds就是o(mi∣hit)=9o(m_i|hit)=9o(mi∣hit)=9,如果激光没有击中任何东西,则其传输路径上的所有cell存在障碍物的概率就较低,设为p(mi∣loss)=0.2p(m_i|loss)=0.2p(mi∣loss)=0.2,对应的Odds即o(mi∣loss)=0.25o(m_i|loss)=0.25o(mi∣loss)=0.25。这样,Odds的更新就变成了根据激光的返回情况,选择乘以9还是0.25。
对数Odds
更进一步的,可以对Odds取对数,每个cell中保存的也是Odds的对数值,则Odds的更新变为
logo(mi∣z1:t)=logo(mi∣zt)+logo(mi∣z1:t−1)\log o(m_i|z_{1:t})=\log o(m_i|z_t) + \log o(m_i|z_{1:t-1}) logo(mi∣z1:t)=logo(mi∣zt)+logo(mi∣z1:t−1)
即将乘法变为了加法,在logo(mi∣zt)\log o(m_i|z_t)logo(mi∣zt)是几个已知常数值的情况下(如之前Lider的例子),这种方式更高效。
Occupancy Map(Occupancy Grid)的更新相关推荐
- 微信小程序--map组件视图无法更新的问题
在使用微信小程序 map组件的时候,会有一个小问题.当出现markers是一个数组,在切换数据的时候,页面会残留上次留下来的markers. 在js中使用setData更新markers数据后,地图上 ...
- 奇点汽车黄浴:SLAM的动态地图和语义问题
点击我爱计算机视觉标星,更快获取CVML新技术 本文原载于知乎自动驾驶的挑战和发展专栏,作者为奇点汽车美研中心首席科学家兼总裁黄浴,52CV非常荣幸取得黄先生授权转载. https://zhuanla ...
- CUDA中Occupancy相关知识
文章目录 occupancy初步理解 occupancy具体分析 occupany的推导流程 Occupancy实际运用 occupancy 有啥用 前言 本篇文章只适合稍微有一些cuda基础的朋友阅 ...
- 特斯拉应用在自动驾驶汽车上的神经网络模型—Occupancy Networks
2022 年CVPR上,特斯拉宣布将在其自动驾驶车辆中发布一种全新的算法.这个算法被命名为Occupancy Networks,它用来改进特斯拉的AI 模型HydraNets. --1-- 特斯拉自动 ...
- Grid map 的应用
文章目录 1. 前言 2. Grid Map 简介 3. Grid Map 使用 3.1 写入Grid Map 3.2 使用 Grid Map 3.2.1 识别障碍物 3.2.2 判断轨迹可通行性 1 ...
- CUDA的Occupancy和Achieved Occupancy概念
官方原文 Occupancy is defined as the ratio of active warps on an SM to the maximum number of active warp ...
- 一文告诉你哪些map element类型支持就地更新
年初,我代表团队和人民邮电出版社签订了翻译<Go Fundamentals>[1]一书的合同,本月底便是四分之一进度的交稿时间点,近期闲时我们都在忙着做交叉review. 上周末我revi ...
- poi-tl导出word;自定义列表序号和表格宽度,表格合并,自定义标题,更新目录
文章目录 poi-tl 入门示例 1.准备word模板 2.代码 自定义列表序号 1. poi-tl 支持的序号列表,直接使用文档种说明即可 2. 要是没有,可以利用NumberingFormat类去 ...
- 行人检测(Pedestrian Detection)资源与更新
行人检测相关的网站链接: [1].Caltech Pedestrian Detection Benchmark: http://www.vision.caltech.edu/Image_Da ...
最新文章
- codefirst数据库迁移
- 烂泥:学习Nagios(三): NRPE安装及配置
- android 数字时钟代码大全,Android自定义view实现数字时钟
- 修改Tomcat可支持get传参方式的url长度,get形式
- acrgis api for javaScript需要对Dojo了解多少?
- IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)
- Z-Stack Home Developer's Guide—6. Clusters, Commands and Attributes中文翻译【Z-Stack Home 1.2.0的开发文档】
- Windows下打印服务器的管理(二)
- Summarize 2014 Look Ahead 2015
- (C语言) 用牛顿迭代法求方程2x^3 - 4x^2 + 3x - 6 = 0在1.5附近的根
- 计算机专业电脑内存,电脑内存大小是否和速度有关?
- MATLAB 2016b--神经网络工具箱中BP网络的实现
- 几种常见MOSFET栅极驱动电路
- python 因果推断_微软因果推理框架DoWhy入门
- java浮点型数据的比较
- (Python)sum函数的用法
- php update when,iphone will restart when update什么意思
- excel排序没有 扩展选定区域
- 大数据全网最佳学习路线总结,不看肯定后悔
- urlretrieve的用法