作者:颜沁睿
链接: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. 周期同步位置模式(CSP),轮廓位置模式(PPM),位置模式(PM)

    什么是运动控制? 运动控制就是通过机械传动装置对运动部件的位置.速度进行实时的控制管理,使运动部件按照预期的轨迹和规定的运动参数(如速度.加速度参数等)完成相应的动作. 运动控制系统的典型构成 1. ...

  2. Jmeter远程测试

    11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7)  在读(2)  已读(0)   品书斋鉴(0)   已有9 ...

  3. 基于Openresty+的WEB安全防护系统架构--转

    随着时间的推移,我们在实践中也不断的演进我们的服务部署方案,希望WEB防护,不只是单独的云WAF来保护服务,而有其它的相关服务,对WAF进行增强加固的合理配合.我们使用Openresty+系统构建了W ...

  4. 【驱动】Linux初级驱动系列框架

    [系统环境搭建] 1.uboot的命令 set serverip .xx set ipaddr .xxx set bootcmd tftp zImage\;bootm //开发模式 set bootc ...

  5. pandas删除缺失数据(pd.dropna()方法)

    1.创建带有缺失值的数据库:   import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), ind ...

  6. 3. ELMo算法原理解析

    1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...

  7. Java知多少(55)线程

    和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming). 多线程程序包含两条或两条以上并发运行的部分.程序中每个这样的部分都叫一个线程(thread ...

  8. Android控件源码分析--AndroidResideMenu菜单

    说明 早上看到一篇文章介绍了ResideMenu得使用,这是一个类似SlidingMenu的控件,感觉有点高尚大,反正我之前没见过,本着凑热闹的好奇心,立马clone把玩下,项目地址奉上: https ...

  9. python进行数据分析

    1.  python进行数据分析----线性回归 2. python进行数据分析------相关分析 3. python进行数据分析---python3卡方 4. 多重响应分析,多选题二分法思路 5. ...

  10. Windows 下单机最大TCP连接数

    在做Socket 编程时,我们经常会要问,单机最多可以建立多少个 TCP 连接,本文将介绍如何调整系统参数来调整单机的最大TCP连接数. Windows 下单机的TCP连接数有多个参数共同决定,下面一 ...