本文主要对SLAM技术进行介绍,叙述了VSLAM的框架及关键技术和方法,并总结了目前已有的VSLAM系统和相关资料,最后介绍kinect相机在ROS下的配置,实现rgb图像和深度图像的检测。

SLAM技术综述与入门

  1. SLAM技术介绍
  2. VSLAM系统及相关资料介绍
  3. SLAM框架
    1. SLAM的基本过程
    2. SLAM的主要模块
  4. kinect 在ROS下的配置及使用

1.SLAM技术介绍

SLAM,全称是Simultaneous Localization and Mapping,即同时定位与建图,指机器人在自身位置不确定的条件下,在完全未知环境中创建地图,同时利用地图进行自主定位和导航。因此可知SLAM的主要工作是定位以及建图

目前SLAM有很多实现方法,根据使用传感器不同,主要分为:

(1)激光雷达传感器;
(2)视觉传感器;

视觉SLAM(Visual SLAM 简称VSLAM)包括使用单目SLAM双目SLAM和以Kinect为代表的深度摄像头的RGB-D SLAM。相比使用激光雷达传感器,视觉传感器的成本更低,因此也越来越受青睐。

  目前SLAM被广泛应用于无人驾驶汽车、无人机、VR和AR等领域。

下面是宾大的教授kumar做的特别有名的一个demo,是在无人机上利用二维激光雷达做的SLAM。

2.VSLAM系统及相关资料介绍

目前在VSLAM领域实现较好的SLAM系统有:

  • 单目、双目SLAM:

(1).PTAM(Parallel Tracking And Mapping):2007年很流行的SLAM项目,是第一个使用BA完成实时SLAM的系统。但其缺乏回环检测和重定位等功能,只能作用于小规模的场景,且稳定性也不是很高。(http://www.robots.ox.ac.uk/~gk/PTAM/)

(2).DTAM(Dense tracking and mapping in real-time):2011年,Direct SLAM方法的鼻祖;

(3).LSD-SLAM(Large-Scale Direct Monocular SLAM):2014年一个半稠密SLAM系统。(http://vision.in.tum.de/research/vslam/lsdslam)

(4).ORB-SLAM:2015年一个比较完整的基于特征点的SLAM系统。
(http://webdiis.unizar.es/~raulmur/orbslam/)

  • RGB-D SLAM:

(1).KinectFusion 2011
(http://www.microsoft.com/en-us/research/project/kinectfusion-project-page/)

(2).RGBD-SLAM2 2014 (http://felixendres.github.io/rgbdslam_v2/)

(3).ElasticFusion 2015 (http://www.imperial.ac.uk/dyson-robotics-lab/downloads/elastic-fusion/)

当然除了上述项目的学习外,对于slam的学习入门,有一些经典教材如:
Multiple View Geometry in Computer Vision (Second Edition)
(http://www.robots.ox.ac.uk/~vgg/hzbook/)也有中文版为《计算机视觉中的多视图几何》。

Robotics Vision and Control(http://www.petercorke.com/RVC/) 本书是面向实践的,详细介绍了机器人和机器视觉。也有了中文版,叫做《机器人学、机器视觉与控制》。
此外,对于slam入门学习推荐高博的一起做RGB-D SLAM其博客为半闲居士(http://www.cnblogs.com/gaoxiang12/p/4633316.html)

3.SLAM框架

3.1 SLAM的基本过程

描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置估计和传感器数据进行自身定位,同时建造增量式地图。

(1)定位(localization):机器人必须知道自己在环境中位置。

(2)建图(mapping):机器人必须记录环境中特征的位置(如果知道自己的位置)

(3)SLAM:机器人在定位的同时建立环境地图。其基本原理是运过概率统计的方法,通过多特征匹配来达到定位和减少定位误差的。

3.2 SLAM的主要模块

视觉SLAM主要分为几个模块:数据采集、视觉里程计(Visual Odometry)、后端优化、建图(Mapping)、闭环检测(Loop closure detection)。如下图所示:

3.2.1视觉里程计

视觉里程计是利用一个图像序列或者一个视频流,计算摄像机的方向和位置的过程。一般包括图像获取后、畸变校正、特征检测匹配或者直接匹配对应像素、通过对极几何原理估计相机的旋转矩阵和平移向量。

3.2.2 后端优化

理论上来说,如果视觉里程计模块估计的相机的旋转矩阵R和平移向量t都正确,就能得到完美的定位和建图了。但实际试验中,我们得到的数据往往有很多噪声,且由于传感器的精度、错误的匹配等,都对造成结果有误差。并且由于我们是只把新的一帧与前一个关键帧进行比较,当某一帧的结果有误差时,就会对后面的结果产生累计误差,导致误差越来越大。为了解决这个问题,引入后端优化

后端优化一般采用捆集调整(BA)、卡尔曼滤波(EKF)、图优化等方式来解决。其中基于图优化的后端优化,效果最好。Graph-based SLAM一般使用g2o求解器,进行图优化计算。

3.2.3 闭环检测

后端优化可能得到一个比较优的解,但当运动回到某一个之前去过的地方,如果能认出这个地方,找到并与当时的关键帧进行比较,就可以得到比单用后端优化更准确更高效的结果。闭环检测就是要解决这个问题。

闭环检测有两种方式,一是根据估计出来的相机的位置,看是否与之前否个位置邻近;另外一种是根据图像,自动识别出来这个场景之前到过,并找到当时的关键帧。目前常用的后一种方法,其实是一个非监督的模式识别问题。比较常用的方法是采用Bag-of-Words(BOW),ORB-SLAM就是使用这个方法来进行闭环检测

4.kinect 在ROS下的配置及使用

通过上面的讲解,相信大家对vslam有了一定的认识,对于数据获取这一块。下面介绍常用的kinect相机的配置以及在ROS上的基本使用:

Kinect配置及使用可以参考(http://wiki.ros.org/kinect, http://blog.csdn.net/huapiaoxiang21/article/details/73830913)

实验环境:Ubuntu 16.04 + ROS Kinetic + kinect 1 相机

(备注:若使用虚拟机,实验过程中如果安装各种包都能成功,最后可能看不到rgb图像和深度图,可能是因为在虚拟机上传输效率的问题)

4.1 安装ROS软件包

安装openni_launch

sudo apt-get install ros-kinetic-openni-camera ros-kinetic-openni-launch

4.2 测试Kinect设备

1)将kinect相机连接电脑,运行ROS节点启动文件

roslaunch openni_launch openni.launch


2) 显示RGB图像
使用rqt_image_view,打开一个新的终端,运行如下命令后弹出窗口:

rosrun rqt_image_view rqt_image_view


选择/camera/rgb/image_color

3) 显示深度图像
打开一个新的终端,运行如下命令:
rosrun rqt_image_view rqt_image_view
选择/camera/depth/image

4)使用rviz显示

打开一个新的终端,运行如下命令后弹出窗口如下:

rosrun rviz rviz

修改“Fixed Frame”为/camera_rgb_frame,接着点击add,选择camera类型。添加成功后选择camera菜单下的Iamge Topic选项,选择 /camera/rgb/image_color。

接着点击add选择camera类型。添加成功后选择camera菜单下的Iamge Topic选项,选择 /camera/depth/image,如下图所示:

文中图片部分图片来自网络,如有侵权请联系删除。


Autolabor SLAM建图导航机器人平台,是一款集机器人底盘、控制计算机、传感器组为一体的室内导航移动平台。平台搭载激光雷达、深度相机、惯导、里程计等传感器,可实现SLAM建图导航、视觉SLAM、图像识别等功能。

平台搭载定制化操作系统AutolaborOS系统,已实现室内自主导航,一键式建图导航,无须开发操作简单。

系统持续更新,代码全部开源,使用户可以快速上手ROS,基于平台高效的进行二次开发。

详细了解>>

SLAM技术综述与入门相关推荐

  1. 论文笔记——惯性/视觉/激光雷达SLAM技术综述

    综述. 从多传感器标定和多源数据融合两个方面进行综述. 1.多传感器标定: 时间同步:NTP(Network Time Protocal,网络时间协议)相机/激光雷达标定:· 特点标志物辅助计算对应点 ...

  2. 信息隐藏技术综述——粗浅入门

    本文为2017年十一月做的关于信息隐藏技术的PPT汇报的配套讲稿,相关参考资料已上传至 (http://download.csdn.net/download/sir_chai/10104787) 第一 ...

  3. 《SLAM室内三维重建技术综述》

    该综述2018年7月发表于 测绘科学,一作:北京建筑大学 文章目录 摘要 一.SLAM是什么? 二.室内三维重建 三.SLAM现状 1.SLAM发展的三个阶段 1)古典时代(1986-2004) 2) ...

  4. 视觉SLAM综述(入门篇)

      最近几天刚刚接触到视觉SLAM这个研究方向,发现这个方向的知识点挺多挺杂的,于是就自己看文献,刷博客,大致对视觉SLAM有了整体的了解.   这篇博客也算是一个简单的小综述,具体的知识点正在学习之 ...

  5. 「技术综述」有三AI不得不看的技术综述

    https://www.toutiao.com/i6715153780863664653/ 文/编辑 | 言有三 最近遇到了很多新手来交流,网上资料甚多,筛选有时候是个大问题,一般遇到一个新方向,找技 ...

  6. 2021-03-15 深入理解SLAM技术【1】 基础知识

    1 啥是SLAM? SLAM是真正的3d技术,是解决移动车辆的定位和动态地图生成的问题的.比如说,你要构造一个自主机器人,能实现路面行走,障碍规避,而且理解三维透视场景,甚至将这种场景翻译成几何场景, ...

  7. 【AI有识境】如何掌握好图像分割算法?值得你看的技术综述

    大家好,这是专栏<AI有识境>的第二篇文章,讲述如何掌握好图像分割算法. 进入到有识境界,可以大胆地说自己是一个非常合格的深度学习算法工程师了,能够敏锐地把握自己研究的领域,跟踪前沿和能落 ...

  8. 【杂谈】篇篇精华,有三AI不得不看的技术综述(超过100篇核心干货)

    文/编辑 | 言有三 有三AI很少写零散的报导,因为我们的文章通常都是提炼与总结,一般遇到一个新方向,找技术综述读一读是最合适的开始,大家也可以拓展一下自己的知识边界,今天总结一下有三AI迄今为止发过 ...

  9. 【杂谈】循序渐进,有三AI不得不看的技术综述(超过100篇核心干货)

    文/编辑 | 言有三 有三AI很少写零散的报导,因为我们的文章通常都是提炼与总结,一般遇到一个新方向,找技术综述读一读是最合适的开始,大家也可以拓展一下自己的知识边界,今天总结一下有三AI迄今为止发过 ...

最新文章

  1. 机器学习入门(12)— 激活函数层 ReLU、Sigmoid 层的实现
  2. SQL Server 2005中更改sa的用户名和密码
  3. python调用接口上传文件_python上传文件接口
  4. java lambda表达式详解_Java8新特性Lambda表达式详解
  5. Winform中使用NPOI导出Excel时XSSFWorkbook wb = new XSSFWorkbook()报错
  6. android查看kernel log
  7. 有了它,一天学会 PyTorch!
  8. MongoDB ServerStatus返回信息
  9. surfire 单元测试 使用了mock字节码再生和注入, UseSplitVerifier防止字节码校验
  10. numpy基础(part15)--线性模型
  11. MUI框架:移动端底部固定mui-bar-tab布局 - 案例篇
  12. Qt 自定义事件的实现
  13. 計算機二級-java08
  14. 什么舱位_把“订舱位”说成book warehouse position,外企不会要你
  15. win2003 搭建文件服务器,用win2003+server搭建安全文件服务器.doc
  16. java字符常量_字符常量 java
  17. Excel表格如何筛选重复内容(筛选重复数据的方法)
  18. 计算机专业中的量词,什么是量词?说明量词的分类和语法特征.
  19. idea 关闭检查更新_intellij idea怎么关闭自动更新
  20. 2022茶艺师(初级)考试试题模拟考试平台操作

热门文章

  1. Redis-使用Java代码操作Redis
  2. 云服务器8M公网带宽实际下载/上传速度是多少?
  3. netcore 高并发秒杀项目实战3
  4. 月亮网摘(2006.08.25)
  5. 非阻塞网络编程详解------IO模型
  6. ftp服务器上面看不到文件,访问ftp服务器没显示文件
  7. mysql insert into 语句卡住?原因?
  8. JESD204接口调试总结——目录
  9. Golangci-lint 安装
  10. intellij idea全局查找和全局替换