描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111598237
内容简介
本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;后论述ROS2的框架特点和使用方法,剖析ROS的发展方向。
目 录
目 录 Contents
推荐序一
推荐序二
推荐序三
前言
第1章 初识ROS 1
1.1 ROS是什么 1
1.1.1 ROS的起源 1
1.1.2 ROS的设计目标 2
1.1.3 ROS的特点 3
1.2 如何安装ROS 4
1.2.1 操作系统与ROS版本的选择 4
1.2.2 配置系统软件源 6
1.2.3 添加ROS软件源 6
1.2.4 添加密钥 7
1.2.5 安装ROS 7
1.2.6 初始化rosdep 8
1.2.7 设置环境变量 8
1.2.8 完成安装 9
1.3 本书源码下载 9
1.4 本章小结 10
第2章 ROS架构 11
2.1 ROS架构设计 11
2.2 计算图 12
2.2.1 节点 12
2.2.2 消息 13
2.2.3 话题 13
2.2.4 服务 13
2.2.5 节点管理器 14
2.3 文件系统 14
2.3.1 功能包 14
2.3.2 元功能包 16
2.4 开源社区 17
2.5 ROS的通信机制 17
2.5.1 话题通信机制 18
2.5.2 服务通信机制 19
2.5.3 参数管理机制 20
2.6 话题与服务的区别 20
2.7 本章小结 21
第3章 ROS基础 22
3.1 个ROS例程——小乌龟仿真 23
3.1.1 turtlesim功能包 23
3.1.2 控制乌龟运动 24
3.2 创建工作空间和功能包 25
3.2.1 什么是工作空间 25
3.2.2 创建工作空间 26
3.2.3 创建功能包 27
3.3 工作空间的覆盖 28
3.3.1 ROS中工作空间的覆盖 28
3.3.2 工作空间覆盖示例 28
3.4 搭建Eclipse开发环境 30
3.4.1 安装Eclipse 30
3.4.2 创建Eclipse工程文件 30
3.4.3 将工程导入Eclipse 31
3.4.4 设置头文件路径 31
3.4.5 运行/调试程序 32
3.5 RoboWare简介 35
3.5.1 RoboWare的特点 35
3.5.2 RoboWare的安装与使用 36
3.6 话题中的Publisher与Subscriber 37
3.6.1 乌龟例程中的Publisher与Subscriber 37
3.6.2 如何创建Publisher 37
3.6.3 如何创建Subscriber 40
3.6.4 编译功能包 41
3.6.5 运行Publisher与Subscriber 42
3.6.6 自定义话题消息 44
3.7 服务中的Server和Client 46
3.7.1 乌龟例程中的服务 46
3.7.2 如何自定义服务数据 47
3.7.3 如何创建Server 48
3.7.4 如何创建Client 49
3.7.5 编译功能包 51
3.7.6 运行Server和Client 51
3.8 ROS中的命名空间 52
3.8.1 有效的命名 52
3.8.2 命名解析 53
3.8.3 命名重映射 54
3.9 分布式多机通信 54
3.9.1 设置IP地址 55
3.9.2 设置ROS_MASTER_URI 56
3.9.3 多机通信测试 56
3.10 本章小结 57
第4章 ROS中的常用组件 58
4.1 launch启动文件 58
4.1.1 基本元素 58
4.1.2 参数设置 60
4.1.3 重映射机制 61
4.1.4 嵌套复用 61
4.2 TF坐标变换 62
4.2.1 TF功能包 62
4.2.2 TF工具 63
4.2.3 乌龟例程中的TF 65
4.2.4 创建TF广播器 67
4.2.5 创建TF监听器 68
4.2.6 实现乌龟跟随运动 70
4.3 Qt工具箱 70
4.3.1 日志输出工具(rqt_console) 71
4.3.2 计算图可视化工具(rqt_graph) 71
4.3.3 数据绘图工具(rqt_plot) 72
4.3.4 参数动态配置工具(rqt_reconfigure) 73
4.4 rviz三维可视化平台 73
4.4.1 安装并运行rviz 74
4.4.2 数据可视化 75
4.4.3 插件扩展机制 76
4.5 Gazebo仿真环境 78
4.5.1 Gazebo的特点 78
4.5.2 安装并运行Gazebo 78
4.5.3 构建仿真环境 81
4.6 rosbag数据记录与回放 82
4.6.1 记录数据 82
4.6.2 回放数据 83
4.7 本章小结 84
第5章 机器人平台搭建 85
5.1 机器人的定义 85
5.2 机器人的组成 86
5.2.1 执行机构 87
5.2.2 驱动系统 87
5.2.3 传感系统 87
5.2.4 控制系统 87
5.3 机器人系统搭建 88
5.3.1 MRobot 88
5.3.2 执行机构的实现 88
5.3.3 驱动系统的实现 89
5.3.4 内部传感系统的实现 90
5.4 基于Raspberry Pi的控制系统实现 90
5.4.1 硬件平台Raspberry Pi 91
5.4.2 安装Ubuntu 16.04 91
5.4.3 安装ROS 93
5.4.4 控制系统与MRobot通信 94
5.4.5 PC端控制MRobot 97
5.5 为机器人装配摄像头 99
5.5.1 usb_cam功能包 99
5.5.2 PC端驱动摄像头 100
5.5.3 Raspberry Pi驱动摄像头 102
5.6 为机器人装配Kinect 104
5.6.1 freenect_camera功能包 104
5.6.2 PC端驱动Kinect 106
5.6.3 Raspberry Pi驱动Kinect 109
5.6.4 Kinect电源改造 109
5.7 为机器人装配激光雷达 110
5.7.1 rplidar功能包 110
5.7.2 PC端驱动rplidar 111
5.7.3 Raspberry Pi驱动rplidar 113
5.8 本章小结 113
第6章 机器人建模与仿真 114
6.1 统一机器人描述格式——URDF 114
6.1.1 标签 114
6.1.2 标签 115
6.1.3 标签 116
6.1.4 标签 116
6.2 创建机器人URDF模型 116
6.2.1 创建机器人描述功能包 116
6.2.2 创建URDF模型 117
6.2.3 URDF模型解析 120
6.2.4 在rviz中显示模型 122
6.3 改进URDF模型 124
6.3.1 添加物理和碰撞属性 124
6.3.2 使用xacro优化URDF 125
6.3.
推荐序一
推荐序二
推荐序三
前言
第1章 初识ROS 1
1.1 ROS是什么 1
1.1.1 ROS的起源 1
1.1.2 ROS的设计目标 2
1.1.3 ROS的特点 3
1.2 如何安装ROS 4
1.2.1 操作系统与ROS版本的选择 4
1.2.2 配置系统软件源 6
1.2.3 添加ROS软件源 6
1.2.4 添加密钥 7
1.2.5 安装ROS 7
1.2.6 初始化rosdep 8
1.2.7 设置环境变量 8
1.2.8 完成安装 9
1.3 本书源码下载 9
1.4 本章小结 10
第2章 ROS架构 11
2.1 ROS架构设计 11
2.2 计算图 12
2.2.1 节点 12
2.2.2 消息 13
2.2.3 话题 13
2.2.4 服务 13
2.2.5 节点管理器 14
2.3 文件系统 14
2.3.1 功能包 14
2.3.2 元功能包 16
2.4 开源社区 17
2.5 ROS的通信机制 17
2.5.1 话题通信机制 18
2.5.2 服务通信机制 19
2.5.3 参数管理机制 20
2.6 话题与服务的区别 20
2.7 本章小结 21
第3章 ROS基础 22
3.1 个ROS例程——小乌龟仿真 23
3.1.1 turtlesim功能包 23
3.1.2 控制乌龟运动 24
3.2 创建工作空间和功能包 25
3.2.1 什么是工作空间 25
3.2.2 创建工作空间 26
3.2.3 创建功能包 27
3.3 工作空间的覆盖 28
3.3.1 ROS中工作空间的覆盖 28
3.3.2 工作空间覆盖示例 28
3.4 搭建Eclipse开发环境 30
3.4.1 安装Eclipse 30
3.4.2 创建Eclipse工程文件 30
3.4.3 将工程导入Eclipse 31
3.4.4 设置头文件路径 31
3.4.5 运行/调试程序 32
3.5 RoboWare简介 35
3.5.1 RoboWare的特点 35
3.5.2 RoboWare的安装与使用 36
3.6 话题中的Publisher与Subscriber 37
3.6.1 乌龟例程中的Publisher与Subscriber 37
3.6.2 如何创建Publisher 37
3.6.3 如何创建Subscriber 40
3.6.4 编译功能包 41
3.6.5 运行Publisher与Subscriber 42
3.6.6 自定义话题消息 44
3.7 服务中的Server和Client 46
3.7.1 乌龟例程中的服务 46
3.7.2 如何自定义服务数据 47
3.7.3 如何创建Server 48
3.7.4 如何创建Client 49
3.7.5 编译功能包 51
3.7.6 运行Server和Client 51
3.8 ROS中的命名空间 52
3.8.1 有效的命名 52
3.8.2 命名解析 53
3.8.3 命名重映射 54
3.9 分布式多机通信 54
3.9.1 设置IP地址 55
3.9.2 设置ROS_MASTER_URI 56
3.9.3 多机通信测试 56
3.10 本章小结 57
第4章 ROS中的常用组件 58
4.1 launch启动文件 58
4.1.1 基本元素 58
4.1.2 参数设置 60
4.1.3 重映射机制 61
4.1.4 嵌套复用 61
4.2 TF坐标变换 62
4.2.1 TF功能包 62
4.2.2 TF工具 63
4.2.3 乌龟例程中的TF 65
4.2.4 创建TF广播器 67
4.2.5 创建TF监听器 68
4.2.6 实现乌龟跟随运动 70
4.3 Qt工具箱 70
4.3.1 日志输出工具(rqt_console) 71
4.3.2 计算图可视化工具(rqt_graph) 71
4.3.3 数据绘图工具(rqt_plot) 72
4.3.4 参数动态配置工具(rqt_reconfigure) 73
4.4 rviz三维可视化平台 73
4.4.1 安装并运行rviz 74
4.4.2 数据可视化 75
4.4.3 插件扩展机制 76
4.5 Gazebo仿真环境 78
4.5.1 Gazebo的特点 78
4.5.2 安装并运行Gazebo 78
4.5.3 构建仿真环境 81
4.6 rosbag数据记录与回放 82
4.6.1 记录数据 82
4.6.2 回放数据 83
4.7 本章小结 84
第5章 机器人平台搭建 85
5.1 机器人的定义 85
5.2 机器人的组成 86
5.2.1 执行机构 87
5.2.2 驱动系统 87
5.2.3 传感系统 87
5.2.4 控制系统 87
5.3 机器人系统搭建 88
5.3.1 MRobot 88
5.3.2 执行机构的实现 88
5.3.3 驱动系统的实现 89
5.3.4 内部传感系统的实现 90
5.4 基于Raspberry Pi的控制系统实现 90
5.4.1 硬件平台Raspberry Pi 91
5.4.2 安装Ubuntu 16.04 91
5.4.3 安装ROS 93
5.4.4 控制系统与MRobot通信 94
5.4.5 PC端控制MRobot 97
5.5 为机器人装配摄像头 99
5.5.1 usb_cam功能包 99
5.5.2 PC端驱动摄像头 100
5.5.3 Raspberry Pi驱动摄像头 102
5.6 为机器人装配Kinect 104
5.6.1 freenect_camera功能包 104
5.6.2 PC端驱动Kinect 106
5.6.3 Raspberry Pi驱动Kinect 109
5.6.4 Kinect电源改造 109
5.7 为机器人装配激光雷达 110
5.7.1 rplidar功能包 110
5.7.2 PC端驱动rplidar 111
5.7.3 Raspberry Pi驱动rplidar 113
5.8 本章小结 113
第6章 机器人建模与仿真 114
6.1 统一机器人描述格式——URDF 114
6.1.1 标签 114
6.1.2 标签 115
6.1.3 标签 116
6.1.4 标签 116
6.2 创建机器人URDF模型 116
6.2.1 创建机器人描述功能包 116
6.2.2 创建URDF模型 117
6.2.3 URDF模型解析 120
6.2.4 在rviz中显示模型 122
6.3 改进URDF模型 124
6.3.1 添加物理和碰撞属性 124
6.3.2 使用xacro优化URDF 125
6.3.
前 言
Preface 前 言2011年年底,笔者次接触ROS。当时实验室的一个师兄在学术会议上听说了ROS并意识到它的前景广阔,考虑到笔者当时的研究方向,于是建议笔者进行研究。那时国内外ROS的学习环境比较艰苦,几乎只有Wiki的基础教程(也没有现在这么完善)。所以一开始,笔者的内心是拒绝的,但还是硬着头皮开始钻研。虽然从拒绝到接受、从未知到熟悉,笔者经历了前所未有的磨难,但同时也收获了前所未有的喜悦。
在这个过程中,笔者也常常思考:ROS前景无限,但是国内还鲜有人知,即使有人知道,也会被困难吓倒。既然笔者经历过,何不总结一下,让其他人少走弯路。于是,笔者整理了自己学习过程中的一些资料和心得,在CSDN上以博客的形式发表,终形成《ROS探索总结》系列博文,再后来转移到个人网站——古月居,至今仍保持更新。
2017年11月,ROS十周岁了!在走过的个十年里,ROS从蹒跚学步的孩童成长为机器人领域的巨人,再华丽蜕变出ROS 2。如今,大多数知名机器人平台和机器人公司都支持ROS,越来越多的机器人开发者也选择ROS作为开发框架。ROS已经逐渐成为机器人领域的事实标准,并将逐步从研发走向市场,助力机器人与人工智能的快速发展。
ROS的重要精神是分享,这也是开源软件的精神,所以才能看到如此活跃的ROS社区和众多软件功能包的源码,并且可以在此基础上快速完成二次开发。为了促进ROS在国内的发展,现在已经有很多人及组织在积极推广ROS,比如ROS星火计划、ROS暑期学校,以及网上各种各样的技术分享等,相信未来这个队伍会更加庞大。
本书以《ROS探索总结》系列博文为基础,重新整理了ROS相关基础要点,让读者能够迅速熟悉ROS的整体框架和设计原理;在此基础上,本书以实践为重心,讲解大量机器视觉、机器语音、机械臂控制、SLAM和导航、机器学习等多方面ROS应用的实现原理和方法,并且翻译了众多ROS中的图表、内容,帮助读者在实现ROS基础功能的同时深入理解基于ROS的机器人开发,将书中的内容用于实践。
本书共有14章,可以分为五个部分。
部分是ROS基础(第1~4章),帮助了解ROS框架,并且熟悉ROS中的关键概念以及实现方法。这部分的内容适合初学者,也适合作为有一定经验或者资深开发者的参考手册。
第二部分介绍如何搭建真实或仿真的机器人平台(第5~6章),帮助了解机器人系统的概念和组成,学习如何使用ROS实现机器人仿真,为后续的机器人实践做好准备。这部分的内容适合希望自己动手设计、开发一个完整机器人平台的读者。
第三部分介绍ROS中常用功能包的使用方法(第7~10章),涉及机器视觉、机器语音、机械臂控制、SLAM和导航等多个机器人研究领域。这部分的内容适合学习ROS基础后希望实践的开发者,以及从事相关领域的机器人开发者。
第四部分是ROS的进阶内容(第11~13章),介绍了ROS的进阶功能、ROS与机器学习的结合、搭载ROS的机器人平台。这部分的内容适合已经对ROS基础和应用有一定了解的读者。
第五部分介绍了新一代ROS——ROS 2(第14章),涉及ROS 2的架构、原理和使用方法。这部分的内容适合对ROS有一定了解,希望了解ROS 2、想要跟上ROS进化步伐的开发者。
因此,本书不仅适合希望了解、学习、应用ROS的机器人初学者,也适合有一定经验的机器人开发人员,同时也可以作为资深机器人开发者的参考手册。
书中的部分源代码来自社区中的ROS功能包,但是笔者在学习过程中对这些代码进行了大量修改,并且为大部分源代码加入了中文注释,以方便国内ROS初学者理解。这些代码涉及的编程语言不局限于C++或Python中的某一种,编程语言应该服务于具体场景,所以建议读者对这两种语言都有所了解,在不同的应用中发挥每种语言的优势。关于是否需要一款实物机器人作为学习平台,本书并没有特别要求,书中绝大部分功能和源码都可以在单独的计算机或仿真平台中运行,同时也会介绍实物机器人平台的搭建方法并且在实物机器人上完成相应的功能。所以只需要拥有一台运行Ubuntu系统的计算机,具备Linux工具的基本知识,了解C++和Python的编程方法,即可使用本书。
此外,本书创作过程中参考了众多已经出版的ROS原著、译著,笔者也将这些内容作为参考资料列出,并向这些著作的作者和译者致敬,希望读者在学习ROS的过程中,可以从这些著作中获取更多知识:
《Mastering ROS for Robotics Programming》,Lentin Joseph《ROS By Example》(Volume 1/Volume 2),Patrick Goebel《Programming Robots with ROS:A Practical Introduction to the Robot Operating System》, Morgan Quigley, Brian Gerkey & William D. Smart《Learning ROS for Robotics Programming》,Aaron Martinez,Enrique Fernández《A Gentle Introduction to ROS》,Jason M. O’Kane《ROS Robotics Projects》,Lentin Joseph《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez在ROS探索实践与本书的创作过程中,离不开众多“贵人”的帮助。首先要感谢陪伴笔者辗转多次并一直无条件支持笔者的妻子,是她给
在这个过程中,笔者也常常思考:ROS前景无限,但是国内还鲜有人知,即使有人知道,也会被困难吓倒。既然笔者经历过,何不总结一下,让其他人少走弯路。于是,笔者整理了自己学习过程中的一些资料和心得,在CSDN上以博客的形式发表,终形成《ROS探索总结》系列博文,再后来转移到个人网站——古月居,至今仍保持更新。
2017年11月,ROS十周岁了!在走过的个十年里,ROS从蹒跚学步的孩童成长为机器人领域的巨人,再华丽蜕变出ROS 2。如今,大多数知名机器人平台和机器人公司都支持ROS,越来越多的机器人开发者也选择ROS作为开发框架。ROS已经逐渐成为机器人领域的事实标准,并将逐步从研发走向市场,助力机器人与人工智能的快速发展。
ROS的重要精神是分享,这也是开源软件的精神,所以才能看到如此活跃的ROS社区和众多软件功能包的源码,并且可以在此基础上快速完成二次开发。为了促进ROS在国内的发展,现在已经有很多人及组织在积极推广ROS,比如ROS星火计划、ROS暑期学校,以及网上各种各样的技术分享等,相信未来这个队伍会更加庞大。
本书以《ROS探索总结》系列博文为基础,重新整理了ROS相关基础要点,让读者能够迅速熟悉ROS的整体框架和设计原理;在此基础上,本书以实践为重心,讲解大量机器视觉、机器语音、机械臂控制、SLAM和导航、机器学习等多方面ROS应用的实现原理和方法,并且翻译了众多ROS中的图表、内容,帮助读者在实现ROS基础功能的同时深入理解基于ROS的机器人开发,将书中的内容用于实践。
本书共有14章,可以分为五个部分。
部分是ROS基础(第1~4章),帮助了解ROS框架,并且熟悉ROS中的关键概念以及实现方法。这部分的内容适合初学者,也适合作为有一定经验或者资深开发者的参考手册。
第二部分介绍如何搭建真实或仿真的机器人平台(第5~6章),帮助了解机器人系统的概念和组成,学习如何使用ROS实现机器人仿真,为后续的机器人实践做好准备。这部分的内容适合希望自己动手设计、开发一个完整机器人平台的读者。
第三部分介绍ROS中常用功能包的使用方法(第7~10章),涉及机器视觉、机器语音、机械臂控制、SLAM和导航等多个机器人研究领域。这部分的内容适合学习ROS基础后希望实践的开发者,以及从事相关领域的机器人开发者。
第四部分是ROS的进阶内容(第11~13章),介绍了ROS的进阶功能、ROS与机器学习的结合、搭载ROS的机器人平台。这部分的内容适合已经对ROS基础和应用有一定了解的读者。
第五部分介绍了新一代ROS——ROS 2(第14章),涉及ROS 2的架构、原理和使用方法。这部分的内容适合对ROS有一定了解,希望了解ROS 2、想要跟上ROS进化步伐的开发者。
因此,本书不仅适合希望了解、学习、应用ROS的机器人初学者,也适合有一定经验的机器人开发人员,同时也可以作为资深机器人开发者的参考手册。
书中的部分源代码来自社区中的ROS功能包,但是笔者在学习过程中对这些代码进行了大量修改,并且为大部分源代码加入了中文注释,以方便国内ROS初学者理解。这些代码涉及的编程语言不局限于C++或Python中的某一种,编程语言应该服务于具体场景,所以建议读者对这两种语言都有所了解,在不同的应用中发挥每种语言的优势。关于是否需要一款实物机器人作为学习平台,本书并没有特别要求,书中绝大部分功能和源码都可以在单独的计算机或仿真平台中运行,同时也会介绍实物机器人平台的搭建方法并且在实物机器人上完成相应的功能。所以只需要拥有一台运行Ubuntu系统的计算机,具备Linux工具的基本知识,了解C++和Python的编程方法,即可使用本书。
此外,本书创作过程中参考了众多已经出版的ROS原著、译著,笔者也将这些内容作为参考资料列出,并向这些著作的作者和译者致敬,希望读者在学习ROS的过程中,可以从这些著作中获取更多知识:
《Mastering ROS for Robotics Programming》,Lentin Joseph《ROS By Example》(Volume 1/Volume 2),Patrick Goebel《Programming Robots with ROS:A Practical Introduction to the Robot Operating System》, Morgan Quigley, Brian Gerkey & William D. Smart《Learning ROS for Robotics Programming》,Aaron Martinez,Enrique Fernández《A Gentle Introduction to ROS》,Jason M. O’Kane《ROS Robotics Projects》,Lentin Joseph《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez在ROS探索实践与本书的创作过程中,离不开众多“贵人”的帮助。首先要感谢陪伴笔者辗转多次并一直无条件支持笔者的妻子,是她给
评论
还没有评论。