作者:颜沁睿
链接: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问题如何解决?的更多相关文章

  1. OSGi运行环境下java反序列化问题的解决方式

    在OSGi环境下采用以下方式对其它bundle的类进行反序列化时,会出现ClassNotFoundException异常. ByteArrayInputStream bi = new ByteArra ...

  2. windows环境下 nginx+iis 反向代理解决跨域问题

    项目基本完成,是时候花点时间整理一下最近的姿势了 1 什么是跨域? 网上对于跨域的概念会有大篇幅的文章去解释,似乎有点玄乎,初学者很容易对这个概念产生恐惧,跨域其实很简单,其实只要知道一点,无法跨域访 ...

  3. windows10环境下VMware14中Ubuntu16.04解决如何上网问题

    进入控制面板,网络和Internet,网络连接 点击以太网,查看详细信息 点击属性 --> 共享,允许其他网络-->选择VMnet1 点开虚拟机编辑选项 ,选择 VMNET1 仅主机,其他 ...

  4. 当碰到非ARC写的文件时在ARC环境下运行报错时解决办法

  5. 在linux环境下重启oracle数据库,解决密码过期的问题

    (1) 以oracle身份登录数据库,命令:su – oracle (2) 进入Sqlplus控制台,命令:sqlplus /nolog (3) 以系统管理员登录,命令:connect /as sys ...

  6. 在Linux环境下设置 ora-01031:insufficient privileges解决方法总结

    今天需要使用sys用户处理问题,但是报错上面ora-01031:insufficient privileges. 在网上有很多方法,这个是自己经过测试的方法步骤. 1:首先检查文件sqlnet.ora ...

  7. CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

    CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户sessio ...

  8. 解决Chrome Safari Opera环境下 动态创建iframe onload事件同步执行

    我们先看下面的代码: setTimeout(function(){ alert(count); },2000); var count = []; document.body.appendChild(c ...

  9. Semantic Monocular SLAM for Highly Dynamic Environments面向高动态环境的语义单目SLAM

    一.摘要 当前单目SLAM系统能够实时稳定地在静态环境中运行,但是由于缺乏明显的动态异常处理能力,在动态场景变化与运动中往往会失败.作者为解决高度动态环境中的问题,提出一种语义单目SLAM架构,结合基 ...

随机推荐

  1. MySQL binlog_format (Mixed,Statement,Row)[转]

    MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式日志的优缺点. MySQL ...

  2. [k8s]kube-dns/dashboard排错历险记(含sa加载用法/集群搭建)

    kube-dns原理 参考: 组件架构看这个就够了 http://cizixs.com/2017/04/11/kubernetes-intro-kube-dns 设置细节看这个就够了 http://b ...

  3. 01——Introduction to Android介绍

    Introduction to Android Android provides a rich application framework that allows you to build innov ...

  4. [数据]matplotlib总结

    这里权当一个matplotlib的用法小结,主要用于记录,以防忘记. 需要安装一下Anaconda,这里推荐清华大学的镜像:https://mirrors.tuna.tsinghua.edu.cn/h ...

  5. Java知多少(51)finally

    当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向.依赖于方法是怎样编码的,异常甚至可以导致方法过早返回.这在一些方法中是一个问题.例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文 ...

  6. MyCAT简易入门 (Linux)

    MyCAT是mysql中间件,前身是阿里大名鼎鼎的Cobar,Cobar在开源了一段时间后,不了了之.于是MyCAT扛起了这面大旗,在大数据时代,其重要性愈发彰显.这篇文章主要是MyCAT的入门部署. ...

  7. 手动添加jar包到本地maven仓库(已测)ok

    很多时候我们需要的jar包在maven仓库上没有 我们可以自己找到这个jar包,但是怎么通过在pom文件配置使用呢? 需要我们手动将本地的jar包添加到本地maven仓库. 前提是已经配置好maven ...

  8. SSM框架搭建最新教程(超详细)

    个人认为使用框架并不是很难,关键要理解其思想,这对于我们提高编程水平很有帮助.不过,如果用都不会,谈思想就变成纸上谈兵了!!!先技术,再思想.实践出真知. 1.基本概念 1.1.Spring  Spr ...

  9. Go的微服务库kite

    Kite Kite是用Go开发的一套RPC库,很适合作为分布式微服务的开发框架. Kite 的传输层使用 SockJS 提供的WebSocket服务, 浏览器Javascript也可以连接到Kite上 ...

  10. PHP实现删除非站内外部链接实例代码

    /** *  删除非站内链接 * * @access    public * @param     string  $body  内容 * @param     array  $allow_urls  ...