动态环境下的slam问题如何解决?
链接:https://www.zhihu.com/question/47817909/answer/107775045
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
嘿嘿谢邀~~这个问题还是挺感兴趣的, 正好早起看到答一发.
----------
没有专门研究dynamic scene这个问题, 但是也算看过. 比较明确的是核心问题还是在于data association, 即对于新的observation, 如何与过去已经观察到的tracks进行关联. 扣题, 想想为什么在动态场景下会出现问题?因为我们在mapping的时候建立的点云, 都是一堆无意义的特征点而已, 我们并不知道哪些点是什么物体, 是否在运动...
于是回答第二第三个问题, 其实必须要进行跟踪, 如果仅仅给出两帧图片, 即使是人自己也是很难区分是否动态物体的, 何况是电脑? 跟踪的意义在于, 对于场景中的多个物体进行运动估计, 加上对自身运动已知, 就可以推测哪些物体在做绝对运动, 哪些在做相对运动, 哪些静止不动.
数据关联的问题在现在比较火爆的几个Monocular SLAM的工作中都没有明确指出, 但实际上却是SLAM中的最关键问题, 在computer vision领域这个问题又叫做corresponding问题, 即特征匹配.
回想我们当前的特征匹配策略, 主要是测量两个特征descriptor之间的相似程度. 具体做法是, 在两个连续图像帧中提取所有可以提取的特征点, 然后逐一比对. 如果足够相似, 就认为两个特征点是同一个. 事实证明这样做是远远不够的, 因为图像特征的局部性, 在图像中的重复性, 会造成大量的误匹配. 当然我们有很多奇技淫巧, 比如1NN/2NN, RANSAC等方法, 但问题并不算被解决, 只能算是被改善了一些吧.
-------------------------------既然提到了, 那就顺便讲讲数据关联吧.
回到最基本的数据关联问题上. 在做物体跟踪的时候, 我们是可以根据物体之前的运动, 估计它在新一帧中出现的位置的, 如下图中蓝色的正方形和三角形. 问题在于这个估计值是有一定不确定度的, 就是在圆圈范围内都是有可能的, 并不一定在蓝色图形处. 于是假如此时我们有5个observation, 对于o1, o2, o5都没什么问题, 直接关联给track1, track2就好了, 但是对于o3, o4就有问题了, 没办法确定应该把它们关联给哪个track, 因为给谁都有可能是对的.

为了方便, 直接盗图, 于是换一个图来解释.......

此时就要使用上概率大法. 注意这时候还有一种可能性是o2,o3其实是假观测, 就是它根本不属于任何一个track, 这在现实情况中是有可能发生的, 假设这种情况发生的概率是\beta. 假设任意观察到一个目标的概率是Pd, 把目标i关联到track j上的概率是g_{ij}.
于是对刚刚的o3, o4有十种可能的关联方式, 对每一种可以算出一个likelihood出来. 然后选择likelihood最大的为最终关联就好了. 这样做充分地考虑了不确定性的问题, 比起之前RANSAC乱试智能多了.





当然这只是数据关联的其中一种算法, JPDAF(Joint probability data association filter). 事实上它有一个很强的假设是, 之前的关联都是正确的, 我们只考虑新的observation与旧的track如何关联. 而事实上, 最大likelihood的那个假设有可能只在当前帧是对的. 于是最好的方式是对每一帧保留所有的可能假设, 到具体关联的时候再做积分就好了. 只是这样做会带来随着帧数增长成指数级别的假设数量, 所以在现实中总需要做些假设去简化它. 这种方式叫做MHT(Multi-Hypothesis Tracking).总而言之, 数据关联问题至关重要, 看看大牛Frank Dellaert的PHD论文吧, 整个工作就是在做data association的.
--------------------------
回到动态场景的问题下来, 刚刚说的是理论的, 吹吹牛吧. 动态场景在语义地图下当然就好办很多啦哈哈. 我们如果能识别出点云中的物体, 至少就可以知道它是否能动, 然后再去判断它是否真的在动. 语义地图的工作应该有很多团队在进行了, 尤其在DL,CV横行, vision slam当道的大环境下, 语义的引入应该很快会完成吧. 个人对这方面保持持续关注, 论文就是做的Object level slam方面的, 欢迎各位大侠拍砖交流!
--------------------------------
参考资料:
课件: http://www.cse.psu.edu/~rtc12/CSE598C/datassocPart2.pdf
动态环境下的slam问题如何解决?的更多相关文章
- OSGi运行环境下java反序列化问题的解决方式
在OSGi环境下采用以下方式对其它bundle的类进行反序列化时,会出现ClassNotFoundException异常. ByteArrayInputStream bi = new ByteArra ...
- windows环境下 nginx+iis 反向代理解决跨域问题
项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...
- windows10环境下VMware14中Ubuntu16.04解决如何上网问题
进入控制面板,网络和Internet,网络连接 点击以太网,查看详细信息 点击属性 --> 共享,允许其他网络-->选择VMnet1 点开虚拟机编辑选项 ,选择 VMNET1 仅主机,其他 ...
- 当碰到非ARC写的文件时在ARC环境下运行报错时解决办法
- 在linux环境下重启oracle数据库,解决密码过期的问题
(1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管理员登录,命令:connect /as sys ...
- 在Linux环境下设置 ora-01031:insufficient privileges解决方法总结
今天需要使用sys用户处理问题,但是报错上面ora-01031:insufficient privileges. 在网上有很多方法,这个是自己经过测试的方法步骤. 1:首先检查文件sqlnet.ora ...
- CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案
CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...
- 解决Chrome Safari Opera环境下 动态创建iframe onload事件同步执行
我们先看下面的代码: setTimeout(function(){ alert(count); },2000); var count = []; document.body.appendChild(c ...
- Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM
一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...
随机推荐
- 设置log rotation避免tomcat catalina.out文件增长过大
创建logrotate配置文件 $ vi /etc/logrotate.d/tomcat 添加以下内容: /opt/tomcat/logs/catalina.out { copytruncate da ...
- 如何测试hello world
最近在跟敏捷专家聊到了单元测试的相关内容. 我的问题主要集中在如何推广单元测试. 我们发现在很多团队,开发人员并不是十分愿意去写单元测试,我认为主要的原因是学习写单元测试是有成本的,很多开发同学并不愿 ...
- cocos2d-x中的坑
1. 设置opacity=0, 子结点不受到影响. FadeOut 也不起作用. 查看代码可以找到一个 cascadeOpacityEnabled 的参数, 默认是关闭的. 打开就可以了. 2. Ta ...
- 分享一个Godaddy的优惠码,可以优惠35%——2013-11-23
国外的域名注册商就是好,还有优惠码,付费的时候贴上优惠码就能免相应的金额,不错. 在网上找的一个35%优惠的优惠码,可以买域名和主机.(主机就免了,有点贵,域名不错) 我买了个com域名,原本$12. ...
- [svc]linux下网桥-docker网桥
网桥和交换机 2口交换机=网桥 交换机: 工作在数据链路层,根据源mac学习(控制层),目的mac转发(数据层). linux的网卡 vmware workstation中的桥接 参考: http:/ ...
- PHP优化——从语言到业务
经常有人说php速度慢,其实语言层面的速度差异和实际的业务相比,不在一个数量级. 业务的瓶颈往往在于io,而不是CPU. 0x0 语言 语法 单引号和双引号 单引号不解析字符串里的变量,而双引号会解析 ...
- Vue.js常用指令:v-model
一.v-model指令 v-model 用来获取表单元素的值.对应input输入框获取的是输入的值,单选按钮.复选框.下拉框获取的是选择的状态. 代码示例如下: <!DOCTYPE html&g ...
- Mybatis(二)基于注解的入门实例
前言 上一篇简单的介绍了Mybatis的概念和基于XML来实现数据库的CRUD,这篇给大家实现基于注解的CRUD. 一.初始搭建 在基于注解当中前四步和上一篇基于XML是一样的,分别是: 1)创建数据 ...
- maven 打包报错(增加调试信息)
eclipse配置debug详细信息 如下图:
- [Hinton] Neural Networks for Machine Learning - Bayesian
Link: Neural Networks for Machine Learning - 多伦多大学 Link: Hinton的CSC321课程笔记 Lecture 09 Lecture 10 提高泛 ...