论文笔记:DS-SLAM

注:只是用做笔记,具体方法和实验请参照原论文,参考资料见文末。会不断完善,如有错误的地方请指出,谢谢!

目录

简介

框架

系统

语义分割

运动一致性检验

过滤离群值

稠密语义3D八叉树建图

参考资料


DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments

简介

传统SLAM存在的问题:

  1. 难以对动态甚至恶劣环境中的异常动态物体进行处理
  2. 无法对机器人提供对周围环境更高级的理解以完成更高级的任务

DS-SLAM:基于ORB-SLAM2提出的面向动态环境的鲁棒语义视觉SLAM

有五个并行运行的线程:

  1. 追踪
  2. 语义分割
  3. 局部建图
  4. 闭环检测
  5. 稠密语义地图创建

贡献:结合了语义分割运动一致性检验来过滤场景中的动态部分,减少了对动态物体对位姿估计的影响,在动态的环境中提高了精度和鲁棒性,并生成稠密语义八叉树地图可用于高级任务。

框架

论文笔记:DS-SLAM_第1张图片

论文笔记:DS-SLAM_第2张图片 这里过滤离群点到视觉里程计也有个箭头,画漏了

论文笔记:DS-SLAM_第3张图片

论文笔记:DS-SLAM_第4张图片

系统

语义分割

DS-SLAM采用SegNet实时提供基于caffe的像素级语义分割。在实际应用中,人最可能是动态的对象,所以假设位于人身上的特征点最可能是异常值。

运动一致性检验

由于运动分割耗时且语义分割结果可以从另一个线程得到,故只需要确定分割结果中的关键点是否移动。如果分割后的物体内的某些点为动态的,则该物体可视为动态物体。步骤如下:

STEP1:计算光流金字塔,得到匹配的特征点;

STEP2:判断匹配特征点是否可用,如果匹配对太靠近图像的边缘或匹配对中心的3 × 3图像块的像素差太大,匹配对将被丢弃;

STEP3:使用包含最多正确数据的RANSAC计算基础矩阵,用来计算极线I。设p_{1}p_{2}为上一帧和当前帧匹配点,P_{1}P_{2}为齐次形式,有:

 匹配点到极线的距离:

 如果距离D大于预设的阈值\epsilon,则判断其为运动的点。算法如下:

论文笔记:DS-SLAM_第5张图片

过滤离群值

由于人体等运动物体的灵活变形和复杂运动,仅用运动一致性检测方法提取动态物体轮廓困难且耗时,而采用语义分割网络可以很容易得到对象的完整轮廓。将这两者结合以完成两级语义知识库的建立:动态物体和静态物体。如果由运动一致性检验产生的一定数量的动态点落在分割物体的轮廓中,则确定该物体是运动的,并移除位于目标轮廓中的所有特征点。

稠密语义3D八叉树建图

八叉树地图的特点:灵活、压缩、能随时更新,存储效率高,易于导航。语义信息也纳入到八叉树地图中,八叉树地图中的每个体素与特定的颜色相关联,每个颜色代表一个语义标签。

语义分割过滤动态物体的准确性有限,还需要使用概率对数值(Log-odds)最小化动态物体的影响。设p\in [0,1]表示体素被占用的概率,l\in R表示概率对数值。

 其反变换为:

设某体素为n,观测数据为z,从开始到t时刻该体素的概率对数值为L(n|z_{1:t}),t+1时刻为:

只有当占据概率p大于预定义的阈值时,体素才被认为是被占据的,并将在八叉树地图中显示出来。换句话说,被观察到多次被占用的体素被认为是稳定被占据的体素。该方法可以很好地解决动态环境下的地图构建问题。

参考资料

[1] DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments

[2] ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras

[3] SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

[4] 【语义分割—SegNet】SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation_gkm0120的博客-CSDN博客

[5] 详解八叉树地图_陈建驱的博客-CSDN博客_八叉树地图 

[6] 《视觉SLAM十四讲》

你可能感兴趣的:(slam文献阅读,深度学习,自动驾驶,人工智能)