9787111693031 机器人SLAM技术及其ROS系统应用 39.8 机械工业出版社
9787111697428 机器人SLAM导航:核心技术与实战 149 机械工业出版社
《机器人SLAM技术及其ROS系统应用》
本书是“十三五”江苏省高等学校重点教材。全书贯彻“理论与实际相结合,教学与实践相统一,紧跟当前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、ORB睸LAM2工作原理及其实现步骤,同时介绍多机器人视觉SLAM系统和地图融合实现过程。
本书可作为机器人工程、自动化、机械电子工程、智能制造工程等相关专业高年级本科生或者研究生的教材,也可供相关工程技术人员参考。
《机器人SLAM导航:核心技术与实战》
全书分为4部分。第1部分对基础知识展开讲解,包括Linux基础和ROS入门。第2部分主要关注一个实际的机器人中的硬件和核心传感器模块的构造,重点讲解机器人上的传感器、差分底盘、树莓派主板开发方面的知识。第3部分是SLAM地图构建的核心算法,SLAM中的数学基础、基于激光的SLAM系统、基于视觉的SLAM系统、混合SLAM系统、新型SLAM系统。第4部分是自主导航相关的核心技术与应用,包括自主导航中的数学基础、基于地图的导航、基于环境探索建图的导航、强化学习在机器人导航中的应用。
通过阅读本书,读者不仅可以自己设计出一套SLAM导航机器人出来,还可以在软硬件结合的环境中提高自己的C++/Python/Java方面的编程能力,同时还可以接触到流行的SLAM算法的实际应用。
机器人SLAM技术及其ROS系统应用
第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.1EKF睸LAM算法基本原理19
2.2.2EKF睸LAM算法的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.3PHD睸LAM算法基本原理29
2.3.4PHD睸LAM算法的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.4ORB睸LAM2算法155
5.4.1ORB睸LAM2背景155
5.4.2ORB睸LAM2算法155
5.4.3ORB睸LAM2功能包的
安装162
5.4.4ORB睸LAM2在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
......
机器人SLAM导航:核心技术与实战序
前言
编程基础篇
第1章 ROS入门必备知识 2
1.1 ROS简介 2
1.1.1 ROS的性能特色 2
1.1.2 ROS的发行版本 3
1.1.3 ROS的学习方法 3
1.2 ROS开发环境的搭建 3
1.2.1 ROS的安装 4
1.2.2 ROS文件的组织方式 4
1.2.3 ROS网络通信配置 5
1.2.4 集成开发工具 5
1.3 ROS系统架构 5
1.3.1 从计算图视角理解ROS架构 6
1.3.2 从文件系统视角理解ROS架构 7
1.3.3 从开源社区视角理解ROS架构 8
1.4 ROS调试工具 8
1.4.1 命令行工具 9
1.4.2 可视化工具 9
1.5 ROS节点通信 10
1.5.1 话题通信方式 12
1.5.2 服务通信方式 15
1.5.3 动作通信方式 19
1.6 ROS的其他重要概念 25
1.7 ROS 2.0展望 28
1.8 本章小结 28
第2章 C++编程范式 29
2.1 C++工程的组织结构 29
2.1.1 C++工程的一般组织结构 29
2.1.2 C++工程在机器人中的组织结构 29
2.2 C++代码的编译方法 30
2.2.1 使用g++编译代码 31
2.2.2 使用make编译代码 32
2.2.3 使用CMake编译代码 32
2.3 C++编程风格指南 33
2.4 本章小结 34
第3章 OpenCV图像处理 35
3.1 认识图像数据 35
3.1.1 获取图像数据 35
3.1.2 访问图像数据 36
3.2 图像滤波 37
3.2.1 线性滤波 37
3.2.2 非线性滤波 38
3.2.3 形态学滤波 39
3.3 图像变换 40
3.3.1 射影变换 40
3.3.2 霍夫变换 42
3.3.3 边缘检测 42
3.3.4 直方图均衡 43
3.4 图像特征点提取 44
3.4.1 SIFT特征点 44
3.4.2 SURF特征点 50
3.4.3 ORB特征点 52
3.5 本章小结 54
硬件基础篇
第4章 机器人传感器 56
4.1 惯性测量单元 56
4.1.1 工作原理 56
4.1.2 原始数据采集 60
4.1.3 参数标定 65
4.1.4 数据滤波 73
4.1.5 姿态融合 75
4.2 激光雷达 91
4.2.1 工作原理 92
4.2.2 性能参数 94
4.2.3 数据处理 96
4.3 相机 100
4.3.1 单目相机 101
4.3.2 双目相机 107
4.3.3 RGB-D相机 109
4.4 带编码器的减速电机 111
4.4.1 电机 111
4.4.2 电机驱动电路 112
4.4.3 电机控制主板 113
4.4.4 轮式里程计 117
4.5 本章小结 118
第5章 机器人主机 119
5.1 X86与ARM主机对比 119
5.2 ARM主机树莓派3B+ 120
5.2.1 安装Ubuntu MATE 18.04 120
5.2.2 安装ROS melodic 122
5.2.3 装机软件与系统设置 122
5.3 ARM主机RK3399 127
5.4 ARM主机Jetson-tx2 128
5.5 分布式架构主机 129
5.5.1 ROS网络通信 130
5.5.2 机器人程序的远程开发 130
5.6 本章小结 131
第6章 机器人底盘 132
6.1 底盘运动学模型 132
6.1.1 两轮差速模型 132
6.1.2 四轮差速模型 136
6.1.3 阿克曼模型 140
6.1.4 全向模型 144
6.1.5 其他模型 148
6.2 底盘性能指标 148
6.2.1 载重能力 148
6.2.2 动力性能 148
6.2.3 控制精度 150
6.2.4 里程计精度 150
6.3 典型机器人底盘搭建 151
6.3.1 底盘运动学模型选择 152
6.3.2 传感器选择 152
6.3.3 主机选择 153
6.4 本章小结 155
SLAM篇
第7章 SLAM中的数学基础 158
7.1 SLAM发展简史 158
7.1.1 数据关联、收敛和一致性 160
7.1.2 SLAM的基本理论 161
7.2 SLAM中的概率理论 163
7.2.1 状态估计问题 164
7.2.2 概率运动模型 166
7.2.3 概率观测模型 171
7.2.4 概率图模型 173
7.3 估计理论 182
7.3.1 估计量的性质 182
7.3.2 估计量的构建 183
7.3.3 各估计量对比 190
7.4 基于贝叶斯网络的状态估计 193
7.4.1 贝叶斯估计 194
7.4.2 参数化实现 196
7.4.3 非参数化实现 202
7.5 基于因子图的状态估计 206
7.5.1 非线性最小二乘估计 206
7.5.2 直接求解方法 206
7.5.3 优化方法 208
7.5.4 各优化方法对比 218
7.5.5 常用优化工具 219
7.6 典型SLAM算法 221
7.7 本章小结 221
第8章 激光SLAM系统 223
8.1 Gmapping算法 223
8.1.1 原理分析 223
8.1.2 源码解读 228
8.1.3 安装与运行 233
8.2 Cartographer算法 240
8.2.1 原理分析 240
8.2.2 源码解读 247
8.2.3 安装与运行 258
8.3 LOAM算法 266
8.3.1 原理分析 266
8.3.2 源码解读 267
8.3.3 安装与运行 270
8.4 本章小结 270
第9章 视觉SLAM系统 272
9.1 ORB-SLAM2算法 274
9.1.1 原理分析 274
9.1.2 源码解读 310
9.1.3 安装与运行 319
9.1.4 拓展 327
9.2 LSD-SLAM算法 329
9.2.1 原理分析 329
9.2.2 源码解读 334
9.2.3 安装与运行 337
9.3 SVO算法 338
9.3.1 原理分析 338
9.3.2 源码解读 341
9.4 本章小结 341
第10章 其他SLAM系统 344
10.1 RTABMAP算法 344
10.1.1 原理分析 344
10.1.2 源码解读 351
10.1.3 安装与运行 357
10.2 VINS算法 362
10.2.1 原理分析 364
10.2.2 源码解读 373
10.2.3 安装与运行 376
10.3 机器学习与SLAM 379
10.3.1 机器学习 379
10.3.2 CNN-SLAM算法 411
10.3.3 DeepVO算法 413
10.4 本章小结 414
自主导航篇
第11章 自主导航中的数学基础 418
11.1 自主导航 418
11.2 环境感知 420
11.2.1 实时定位 420
11.2.2 环境建模 421
11.2.3 语义理解 422
11.3 路径规划 422
11.3.1 常见的路径规划算法 423
11.3.2 带约束的路径规划算法 430
11.3.3 覆盖的路径规划算法 434
11.4 运动控制 435
11.4.1 基于PID的运动控制 437
11.4.2 基于MPC的运动控制 438
11.4.3 基于强化学习的运动控制 441
11.5 强化学习与自主导航 442
11.5.1 强化学习 443
11.5.2 基于强化学习的自主导航 465
11.6 本章小结 467
第12章 典型自主导航系统 470
12.1 ros-navigation导航系统 470
12.1.1 原理分析 470
12.1.2 源码解读 475
12.1.3 安装与运行 479
12.1.4 路径规划改进 492
12.1.5 环境探索 496
12.2 riskrrt导航系统 498
12.3 autoware导航系统 499
12.4 导航系统面临的一些挑战 500
12.5 本章小结 500
第13章 机器人SLAM导航综合实战 502
13.1 运行机器人上的传感器 502
13.1.1 运行底盘的ROS驱动 503
13.1.2 运行激光雷达的ROS驱动 503
13.1.3 运行IMU的ROS驱动 504
13.1.4 运行相机的ROS驱动 504
13.1.5 运行底盘的urdf模型 505
13.1.6 传感器一键启动 506
13.2 运行SLAM建图功能 506
13.2.1 运行激光SLAM建图功能 507
13.2.2 运行视觉SLAM建图功能 508
13.2.3 运行激光与视觉联合建图功能 508
13.3 运行自主导航 509
13.4 基于自主导航的应用 510
13.5 本章小结 511
附录A Linux与SLAM性能优化的探讨 512
附录B 习题 523