越来越多的机器人正走向人们的生活及生产环境,机器人操作系统(Robot Operating System,ROS)作为一种重要的软件开发框架,提高了机器人系统的开发与部署效率,在分工协作、软件维护和系统扩展中具有重要意义。本书以任务为驱动,按照工作导向的思路展开教学与实践学习,通过“学中做、做中学”的方式,循序渐进地介绍机器人操作系统应用开发方法,通过构思、设计、实施和运行多个环节,构建基于传感器的智能机器人系统。本书内容全面,包括机器人系统组成、将机器人连接到ROS、建立机器人系统模型、移动机器人激光SLAM、移动机器人自主导航、基于多传感器的SLAM、机械臂运动控制、计算机视觉、基于视觉的机械臂抓取、移动机器人视觉SLAM、ROS 2.0介绍与编程基础等内容,有利于读者掌握ROS原理与应用实践开发方法,培养软件全栈开发能力。 本书通俗易懂、内容丰富,是作者团队多年机器人科研项目和产品开发的积累,书中提供了大量的实例代码供读者学习研究。 本书可作为高等院校自动化、机器人工程、人工智能、机电一体化等相关专业的“机器人系统原理”“机器人操作系统”“机器人系统应用开发”课程的教材和教学参考书,也可以作为工程实训与学科竞赛的实践教材和实验配套教材,同时还可供广大希望从事机器人系统开发和设计的工程技术人员、教师或者个人参考。
彭刚,博士,研究方向为智能机器人与智能制造系统、基于传感器融合的智能感知与控制等,长期从事机器人智能控制、多传感器集成与信息融合、智能驾驶及人机协作共融机器人系统的教学、科研和开发工作。主编3部中文著作和1部英文著作,在IEEE Transactions等机器人和自动化领域的国际期刊发表多篇论文,获授权发明专利40余项,主持完成了多项科技成果产品转化。
目 录
第1章 机器人系统组成 1
1.1 移动底盘和机械臂 1
1.1.1 移动底盘 1
1.1.2 机械臂 4
1.2 机器人系统的硬件组成 6
1.2.1 控制系统 6
1.2.2 驱动系统 7
1.2.3 执行机构 7
1.2.4 传感系统 8
1.3 传感器说明与功能介绍 8
1.3.1 编码器 8
1.3.2 惯性测量单元 9
1.3.3 激光雷达 10
1.3.4 相机 13
1.3.5 红外传感器 14
1.3.6 超声波传感器 14
1.3.7 毫米波雷达 15
1.3.8 碰撞传感器 16
1.3.9 多传感器融合 16
1.4 机器人系统的软件组成 17
1.4.1 操作系统 17
1.4.2 应用软件 17
任务 远程桌面连接:使用Spark机器人平台 17
1.5 本章小结 20
扩展阅读 20
练习题 20
第2章 将机器人连接到ROS 22
2.1 初识ROS 22
2.1.1 ROS起源 22
2.1.2 ROS架构 22
2.1.3 ROS特点 24
2.2 如何安装ROS 24
2.2.1 操作系统和ROS版本 24
2.2.2 Linux基础简介 25
2.2.3 ROS安装 29
2.2.4 设置环境变量 30
2.2.5 验证安装 31
2.3 ROS文件系统与通信机制 31
2.3.1 文件系统 31
2.3.2 ROS通信及其工作机制 33
2.4 编写第一个ROS程序 38
2.4.1 ROS功能包依赖管理 38
2.4.2 ROS工作空间 39
2.4.3 功能包创建与编译 42
任务1 运行一个简单ROS程序 48
2.4.4 ROS 节点的编写规则 50
2.4.5 运行节点的两种途径 52
2.4.6 launch文件 53
2.4.7 坐标变换基础 54
任务2 让小海龟跑起来 58
2.5 ROS常用组件 59
2.5.1 可视化工具 60
2.5.2 rosbag数据记录与回放 62
2.5.3 ROS调试工具箱 64
2.6 Spark底盘控制 66
任务3 让Spark机器人运动起来 67
2.7 ROS外接设备介绍 69
2.7.1 遥控手柄 69
2.7.2 激光雷达 72
2.7.3 视觉传感器 74
2.7.4 惯性测量单元与定位模块 76
2.7.5 伺服电机 78
2.7.6 嵌入式控制器 79
2.8 本章小结 80
扩展阅读 80
练习题 80
第3章 建立机器人系统模型 81
3.1 移动底盘运动模型与控制 81
3.1.1 移动机器人运动模型与位置表示 81
3.1.2 URDF建模 85
3.1.3 机器人状态发布 97
3.1.4 移动底盘运动控制 99
任务1 控制ROS仿真机器人与真实机器人同步运动 103
3.2 基于激光雷达的环境感知 105
3.2.1 rplidar功能包 105
3.2.2 hector_mapping介绍 107
3.2.3 hector_mapping的使用 108
任务2 小车运动时的点云数据 110
3.3 本章小结 111
参考文献 111
扩展阅读 111
练习题 112
第4章 移动机器人激光SLAM 113
4.1 SLAM基本原理 113
4.1.1 SLAM概述 113
4.1.2 移动机器人坐标系 114
任务1 机器人坐标变换 115
4.1.3 ROS导航与定位过程 119
4.1.4 环境建图与位姿估计 120
4.2 Gmapping算法 121
4.2.1 原理分析 122
4.2.2 实施流程 122
任务2 基于Gmapping算法的激光2D建图 123
4.3 Hector SLAM算法 125
4.3.1 原理分析 125
任务3 基于Hector SLAM算法的激光2D建图 127
4.3.2 建图结果 128
4.4 本章小结 129
参考文献 129
扩展阅读 130
练习题 130
第5章 移动机器人自主导航 131
5.1 基于地图的定位 131
5.1.1 蒙特卡罗定位 131
5.1.2 自适应蒙特卡罗定位 133
任务1 移动机器人定位 137
5.2 基于地图的自主导航 139
5.2.1 导航框架 139
5.2.2 全局路径规划 140
5.2.3 局部路径规划 145
5.2.4 导航功能包 151
任务2 移动机器人导航 157
5.3 本章小结 159
参考文献 159
扩展阅读 160
练习题 160
第6章 基于多传感器的SLAM 161
6.1 惯性测量单元模型与标定 161
6.1.1 惯性测量单元测量模型 162
6.1.2 系统误差的预标定 162
6.1.3 随机误差的预标定 164
6.2 激光雷达与IMU的外参标定 165
6.3 差速轮式移动机器人的运动里程计模型 167
6.4 基于卡尔曼滤波的多传感器融合 169
任务1 基于滤波器的SLAM算法 170
6.5 Cartographer算法 172
6.5.1 原理分析 173
任务2 基于图优化的SLAM 174
6.5.2 建图结果 178
6.6 本章小结 179
参考文献 179
扩展阅读 180
练习题 180
第7章 机械臂运动控制 181
7.1 机械臂建模 181
7.1.1 ROS中常用的机械臂 181
7.1.2 机械臂URDF模型 182
7.1.3 机械臂URDF建模 184
7.2 机械臂控制——MoveIt 188
7.2.1 MoveIt简介 188
7.2.2 Setup Assistant配置机械臂 188
7.2.3 MoveIt可视化控制 193
7.2.4 机械臂运动学 194
任务1 让机械臂动起来——MoveIt与Gazebo仿真 198
7.3 MoveIt编程——机械臂运动规划 202
7.3.1 关节空间运动规划 202
7.3.2 工作空间运动规划 204
7.3.3 笛卡尔空间运动规划 207
7.3.4 机械臂碰撞检测 211
任务2 数字孪生——真实机械臂与仿真机械臂同步运动 214
7.4 本章小结 216
参考文献 216
扩展阅读 217
练习题 217
第8章 计算机视觉 218
8.1 认识OpenCV 218
8.1.1 安装OpenCV 218
8.1.2 使用OpenCV 218
8.2 单目视觉传感器的使用 220
任务1 图像采集 220
8.3 相机标定 221
8.3.1 针孔相机模型 222
8.3.2 畸变模型 224
8.3.3 相机标定的原理和过程 225
8.3.4 相机标定功能包 227
8.4 图像变换与处理 230
8.4.1 透视变换 230
8.4.2 图像匹配 233
8.4.3 图像拼接 234
8.5 常见的图像特征点检测算法 235
8.5.1 SIFT算法 235
8.5.2 SURF算法 239
8.5.3 FAST算法 243
8.5.4 ORB算法 245
8.6 目标识别 247
任务2 基于单目相机的物体识别 247
8.7 本章小结 252
参考文献 252
扩展阅读 253
练习题 253
第9章 基于视觉的机械臂抓取 254
9.1 深度相机 254
9.1.1 双目相机和RGB-D深度相机 254
9.1.2 双目相机模型和RGB-D深度相机模型 257
任务1 深度相机驱动安装 259
9.2 基于深度学习的物体识别 260
9.2.1 基于卷积神经网络的物体识别 260
9.2.2 常见深度学习框架 265
任务2 基于卷积神经网络的物体识别实现 266
9.3 手眼标定原理和过程 267
任务3 机器人手眼视觉外参标定 270
9.4 基于视觉的机械臂抓取实现 273
9.4.1 目标物体定位 274
9.4.2 姿态估计 277
9.4.3 抓取姿态检测 280
9.4.4 运动规划 282
任务4 完成基于视觉的机械臂抓取 284
任务5 控制机械臂指向物体 286
9.5 本章小结 289
参考文献 289
扩展阅读 290
练习题 290
第10章 移动机器人视觉SLAM 291
10.1 视觉SLAM框架 291
10.1.1 视觉里程计 291
10.1.2 非线性优化 292
10.1.3 回环检测 293
10.1.4 建图 293
10.2 ORB-SLAM算法 295
任务1 在单目数据集上运行ORB-SLAM2 298
10.3 稠密建图 301
10.3.1 空间地图的表示方式 303
10.3.2 双目相机几何模型与标定 307
10.3.3 稠密建图 311
任务2 基于深度相机的场景建图 313
10.4 其他视觉SLAM算法或框架 314
10.4.1 LSD-SLAM 316
10.4.2 SVO 318
10.4.3 OpenVSLAM 318
10.4.4 VINS-Fusion 320
10.5 本章小结 322
参考文献 322
扩展阅读 323
练习题 324
第11章 ROS 2.0介绍与编程基础 325
11.1 ROS 2.0设计思想 325
11.1.1 ROS 1.0问题总结 325
11.1.2 ROS 2.0发展现状 326
11.1.3 ROS 2.0通信模型 326
11.2 ROS 2.0安装与使用 328
11.2.1 ROS 2.0安装 328
11.2.2 运行小海龟案例 329
11.2.3 ROS 2.0命令行 331
11.3 ROS 2.0编程基础 332
11.3.1 ROS 2.0编程方法 332
11.3.2 ROS 2.0与ROS 1.0编程区别 338
11.4 本章小结 339
扩展阅读 339
练习题 339