本书是“十三五”江苏省高等学校重点教材。全书贯彻“理论与实际相结合,教学与实践相统一,紧跟当前SLAM研究重点”的思想,以ROS系统作为平台,以Turtlebot机器人为载体,以实际应用为纽带,在ROS系统中实现各种SLAM算法。
全书共分为5章。第1章介绍SLAM的基本定义、分类及其数学模型,对ROS系统进行简要描述,分析在ROS系统下基于激光特征点的SLAM技术和基于视觉的SLAM技术的特点。第2章详细分析一些典型的基于矢量的SLAM算法和基于随机有限集的SLAM算法的基本原理及其实现。第3章给出ROS系统的详细安装步骤以及部分常用的ROS系统基本操作命令,并以Turtlebot机器人为载体进行基础功能包的安装和测试。第4章首先介绍用于SLAM的ROS相关工具及其使用,然后分别介绍基于激光雷达的Gmapping、Hector SLAM、Cartographer的原理,以及在机器人Turtlebot上的算法实现。第5章介绍基于视觉的MonoSLAM、ORBSLAM2工作原理及其实现步骤,同时介绍多机器人视觉SLAM系统和地图融合实现过程。
本书可作为机器人工程、自动化、机械电子工程、智能制造工程等相关专业高年级本科生或者研究生的教材,也可供相关工程技术人员参考。
随着无人驾驶、机器人自主探测、智能物流配送等应用越来越广泛,定位与地图构建(Simultaneous Localization and Mapping,SLAM)作为这些应用的基础,成为目前的研究热点。SLAM相关的研究有很多,许多方法也得到了实际的应用,相应的出版物也较多,但关于所涉及的方法、技术的系统性与可操作性等方面的书籍仍然非常缺乏。
本书结合编者多年科研成果以及应用型本科课程教学经验撰写而成,内容新颖,覆盖面广,将科研成果分结构、分层次地融入到知识体系之中,同时还吸纳了国内外该领域的众多代表性成果。本书在注重理论知识的同时,以ROS系统作为平台,以Turtlebot机器人为载体,实现相应的SLAM算法,以求理论与实际相结合,紧跟当前SLAM的前沿研究成果。在讲解算法原理的同时,以实际应用为纽带,在ROS系统中实现相应算法,使读者能够快速地理解和掌握相关内容。本书可作为机器人工程、自动化、机械电子工程、智能制造工程等相关专业高年级本科生或者研究生的教材,也可供相关工程技术人员参考。
本书的编写队伍由具有科研与工程经验的一线教师组成。全书共分为5章,由徐本连教授统稿并审定。 第1章介绍SLAM的基本定义、分类及其数学模型,对ROS系统进行简要描述,分析在ROS系统下基于激光特征点的SLAM技术和基于视觉的SLAM技术的特点,本章主要由徐本连教授完成。第2章详细分析一些典型的基于矢量的SLAM算法和基于随机有限集的SLAM算法的基本原理及其实现,本章主要由鲁明丽副教授、 徐本连教授完成。第3章给出ROS系统的详细安装步骤以及部分常用的ROS系统基本操作命令,并以Turtlebot机器人为载体进行基础功能包的安装和测试,本章主要由鲁明丽副教授、赵彩虹副教授完成。第4章介绍用于SLAM的ROS相关工具及其使用,以及基于激光雷达的Gmapping、Hector、Cartographer的原理,并在机器人Turtlebot上对这三种算法进行功能实现,本章主要由鲁明丽副教授、袁儒鹏博士完成。 第5章主要介绍基于视觉的MonoSLAM、ORBSLAM2工作原理及其实现步骤,同时介绍多机器人视觉SLAM系统和地图融合实现过程,本章主要由鲁明丽副教授、从金亮博士完成。施健、李震、孙士秦、赵康也参与了本书的编写。同时特别感谢清华大学王凌教授在百忙中审阅书稿并提出宝贵的修改建议。
由于编者水平有限,书中难免有不妥之处,敬请广大读者批评指正。
编者
前言
第1章绪论1
1.1SLAM简介1
1.1.1SLAM的基本定义1
1.1.2SLAM的分类3
1.2ROS简介5
1.3基于ROS系统的SLAM技术6
1.3.1基于激光的SLAM技术7
1.3.2基于视觉的SLAM技术8
1.4SLAM技术的未来发展13
1.5本章小结14
参考文献14
第2章SLAM算法简介与实现15
2.1SLAM算法简介15
2.1.1SLAM算法分类15
2.1.2不同种类SLAM算法的
特点16
2.2基于矢量的SLAM经典算法19
2.2.1EKFSLAM算法基本原理19
2.2.2EKFSLAM算法的MATLAB
仿真验证23
2.2.3FastSLAM算法基本原理23
2.2.4FastSLAM算法的MATLAB
仿真27
2.3基于随机有限集的SLAM算法27
2.3.1随机有限集27
2.3.2基于随机有限集的SLAM28
2.3.3PHDSLAM算法基本原理29
2.3.4PHDSLAM算法的MATLAB
仿真验证33
2.4本章小结34
参考文献34
第3章基于ROS系统的SLAM
技术36
3.1ROS系统36
3.1.1ROS的版本介绍和安装38
3.1.2ROS文件系统级45
3.1.3ROS计算图级47
3.1.4ROS开源社区级50
3.2ROS系统基本操作51
3.2.1创建工作空间51
3.2.2创建ROS功能包及功能包
编译52
3.2.3ROS节点的使用53
3.2.4ROS主题与节点的交互55
3.2.5ROS服务的使用57
3.2.6节点的创建和编译58
3.2.7服务和消息文件的创建和
使用62
3.2.8Launch启动文件68
3.3基于ROS系统的机器人实践69
3.3.1Turtlebot介绍69
3.3.2Turtlebot功能包安装和
配置71
3.3.3机器人底盘测试73
3.3.4机器人传感器测试73
3.3.5机器人跟随功能实现74
3.3.6基于ROS的多机通信配置75
3.4基于ROS系统的SLAM开源
方案78
3.4.1基于激光雷达的SLAM算法78
3.4.2基于视觉的SLAM算法79
3.5本章小结80
参考文献81
第4章基于特征估计的激光SLAM
技术82
4.1ROS相关工具的使用82
4.1.1rviz和Gazebo的简介82
4.1.2Gazebo的使用83
4.1.3rviz的使用85
4.1.4Turtlebot机器人在Gazebo中的
仿真87
4.1.5Turtlebot机器人在rviz中的
显示89
4.2激光雷达传感器89
4.2.1激光雷达探测原理89
4.2.2基于ROS的激光雷达驱动
安装90
4.3基于激光的Gmapping算法91
4.3.1Gmapping背景91
4.3.2Gmapping算法原理92
4.3.3Gmapping功能包的安装95
4.3.4Gmapping算法在Turtlebot上的
实现98
4.4基于激光的Hector SLAM算法101
4.4.1Hector SLAM背景101
4.4.2Hector SLAM算法原理102
4.4.3Hector SLAM功能包的
安装105
4.4.4Hector SLAM算法在Turtlebot上
的实现107
4.5基于激光的Cartographer算法109
4.5.1Cartographer背景109
4.5.2Cartographer算法原理110
4.5.3Cartographer功能包的
安装113
4.5.4Cartographer算法在Turtlebot
上的实现117
4.6本章小结123
参考文献124
第5章基于视觉SLAM技术125
5.1经典视觉SLAM框架125
5.2视觉传感器及其基础算法126
5.2.1视觉传感器126
5.2.2视觉里程计129
5.2.3后端优化137
5.2.4回环检测140
5.3MonoSLAM算法144
5.3.1MonoSLAM背景144
5.3.2MonoSLAM算法145
5.3.3MonoSLAM功能包的安装150
5.3.4MonoSLAM实现152
5.4ORBSLAM2算法155
5.4.1ORBSLAM2背景155
5.4.2ORBSLAM2算法155
5.4.3ORBSLAM2功能包的
安装162
5.4.4ORBSLAM2在Turtlebot上的
实现166
5.5多机器人视觉SLAM技术简介171
5.5.1多机器人系统171
5.5.2机器人相互识别173
5.5.3地图融合策略177
5.5.4地图融合182
5.6本章小结182
参考文献182