ROS机器人程序设计

出版日期:2016-11
ISBN:9787111551052
作者:[西]恩里克.费尔南德斯
页数:296页

内容概要

机器人对于现代人类而言并不陌生和神秘,它在百年前的科幻小说中首次出现,而现在已经逐步进入人类生活的方方面面,机器时代即将到来!
智能机器人的程序究竟是如何设计出来的呢?
智能机器人需要具备强健的“肢”、明亮的“眼”、灵巧的“嘴”以及聪慧的“脑”,这一切的实现实际上涉及诸多技术领域,需要艰辛的设计、开发与调试过程,必然会遇到棘手的问题和挑战。而一个小型的开发团队难以完成机器人各个方面的开发工作,因而需要一套合作开发的框架与模式,以期能够快速集成已有的功能,省却重复劳动的时间。早在2008年,我们在与澳大利亚的布劳恩教授交流时,就得知他们开发了一套商业化的“RoBIOS”机器人操作系统,这套系统将一些常用的机器人底层功能进行了封装,可极大简化高级功能的开发。据他们介绍,这是最早的“机器人操作系统”,但由于产品不开源且价格昂贵,我们最终未能一试为快。后来在网络中不断地寻觅,最终发现了ROS,由于其开源、开放的特性,一下子就引起了我们极大的兴趣。
我们于2010年建立了易科机器人QQ群进行讨论,从而结识了国内最早期的一些机器人研究者和ROS探索者。由于早期相关资料非常匮乏,我们于2012年创建了博客(blog.exbot.net)以进行技术分享与交流。易科机器人开发组成员在此期间贡献了大量的教程和开发笔记,在此向他们的无私奉献表示感谢与敬意!近年来,随着机器人的迅猛发展,ROS得到了更为广泛的使用,国内也出现了一些优秀的项目,包括“星火计划”ROS公开课(blog.exbot.net/spark)、“HandsFree”ROS机器人开发平台(wiki.exbot.net)等。
出版界近年来也是硕果累累,本书第1版便是国内第一本ROS译著,由于实用性强,已经多次重印。第2版针对近年来ROS的最新发展,对书中部分内容进行了修订,并增加了第6章和第10章。本书涵盖了使用ROS进行机器人编程的最新知识与方法,通过ROS编程实践能够帮助你理解机器人系统设计与应用的现实问题。在机器人开发实践中,我们认为除了成功的喜悦外,还看到机器人学目前所处的发展阶段:核心技术尚未成熟、诸多功能尚不完备、bug多……但我们相信,有了ROS的开源精神和完备的合作开发框架,很多问题会迎刃而解。唯一迫切需要的就是期待你加入机器的开发和研究中来,一起推动开源机器人技术的发展与普及!
本书第2版与第1版的重叠部分主要沿用了刘品杰在第1版中的翻译,个别词汇根据习惯进行了修改。具体来说,第1至5章和第10章由张瑞雷翻译,第6章由张波翻译,第7至9章由刘锦涛翻译,吴中红和李静老师对全书进行了审阅,最后由刘锦涛对全书进行了修改润色和统稿整理。感谢杨维保、马文科等人对本书提出的修改建议!
我们将会在books.exbot.net发布本书的其他相关资源。
About the Authors  作者简介
Enrique Fernández在拉斯帕尔马斯大学获得计算机工程博士学位,目前是Clearpath Robotics公司高级机器人工程师。2009年他完成了关于SLAM的硕士学位论文。2013年他的博士论文解决了自主水下滑翔器(AUG)的路径规划问题。那段时间,他还研究了计算机视觉、人工智能以及其他机器人学课题,例如赫罗纳大学的CIRS/ViCOROB研究实验室AUV的惯性导航系统和视觉SLAM。他在2012年参加了欧洲学生自主水下航行器设计挑战赛(Student Autonomous Underwater Challenge-Europe,SAUC-E)并获奖,在2013年作为合作者参与了SAUC-E。
获得博士学位后,Enrique作为高级机器人工程师在2013年6月加入PAL Robotics公司的自主导航部门。在那里,他开发了用于REEM、REEM-C和移动机器人以及相关项目的软件,如使用ROS框架的Stockbot。他的研究方向包括运动规划(路径规划和移动机器人控制)、机器人定位和SLAM。在2015年,他作为高级自主系统开发人员加盟Clearpath Robotics公司的自主系统部门从事SLAM相关工作。
在学术方面,Enrique发表了多篇会议论文,其中两篇于2011年发表在《International Conference of Robotics and Automation》(ICRA)上。他是Packt Publishing出版的第1版《ROS机器人程序设计》和其他一些书部分章节的作者。他的硕士学位论文是关于室内机器人的FastSLAM算法,此机器人装备了SICK激光扫描仪以及Pioneer差动平台的轮式里程计。他的博士学位论文是关于AUG的路径规划算法和工具。他还拥有电子和嵌入式系统(如PC104和Arduino)的开发经验。他的研究背景包括SLAM、计算机视觉、路径规划、优化、机器人学和人工智能。
我要感谢这本书的合著者,感谢他们为完成这本书所付出的努力以及提供了无数示例的代码。我还要感谢博士论文期间大学智能系统和计算工程研究所(University Institute of Intelligent Systems and Computational Engineering,SIANI)和水下机器人研究中心(Center of Underwater Robotics Research,CIRS/ViCOROB)的研究小组成员。我也要感谢在PAL机器人公司的同事,在那里我学到很多关于ROS、机器人运动以及仿人双足机器人的知识,不仅有软件,还有电子和硬件设计。最后,我要感谢我的家人和朋友的帮助与支持。
Luis Sánchez Crespo在拉斯帕尔马斯大学获得了电子与电信工程的双硕士学位。他曾在技术开发和创新研究所(IDETIC)、加那利群岛海洋平台(PLOCAN)和应用微电子研究所(IUMA)与不同的研究小组合作,进行超分辨率算法成像研究。
他的专业兴趣包括应用于机器人系统的计算机视觉、信号处理和电子设计。因此,他加入了AVORA团队,这批年轻的工程师和学生从零开始从事自主水下航行器(AUV)的开发工作。在这个项目中,Luis开始开发声学和计算机视觉系统,用于提取不同传感器的信息,例如水听器、声呐和摄像头。
依托海洋技术的强大背景,Luis与人合作创办了一家新的初创公司Subsea Mechatronics,致力于为水下环境开发遥控操作和自主航行器。
下面是海洋技术工程师和企业家(LPA Fabrika:Gran Canaria Maker Space的联合创始人和制造商)Dario Sosa Cabrera对Luis的评价:
“他很热情,是一个多学科的工程师。他对工作负责。他可以自我管理,并承担一个团队领导者的责任,如在SAUC-E竞赛中领导了AVORA团队。他在电子和电信领域的背景让其具备从信号处理和软件到电子设计和制造的广泛专业知识。”
Luis作为技术审校者参与了Packt Publishing出版的第1版《ROS机器人程序设计》的相关工作。
首先,我要感谢Aaron、Anil以及Enrique邀请我参与编写这本书。和他们一起工作非常快乐。同时,我也要感谢水下机电团队关于重型水下机器人的丰富经验,这些年我们一起成长。我必须提到LPA Fabrika:Gran Canaria Maker Space,他们备课和讲授教育机器人及技术项目极富热情,与他们共享工作环境也非常令人激动。
最后,我要感谢我的家人和女朋友对我参与的每个项目的大力支持和鼓励。
Anil Mahtani是一名从事水下机器人工作5年的计算机科学家。他第一次在该领域工作是在完成硕士论文期间为低成本ROV开发软件架构。在此期间,他也成为AVORA的团队领导者和主要开发人员,这个团队的高校学生设计和开发了一个自主水下航行器并参加了2012年的SAUC-E。同年,他完成了论文并获得了拉斯帕尔马斯大学的计算机科学硕士学位。此后不久,他成为SeeByte公司的软件工程师,这家公司是水下系统智能软件解决方案的全球领导者。
在SeeByte公司工作期间,Anil参与了军方、石油和天然气公司的一些半自主和自主水下系统的核心开发。在这些项目中,他积极参与自主系统开发、分布式软件体系结构设计和底层软件开发,同时也为前视声呐图像提供计算机视觉解决方案。他还获得了项目经理职位,管理一个开发和维护内核C++库的工程师团队。
他的专业兴趣主要包括软件工程、算法、分布式系统、网络和操作系统。Anil在机器人方向主要负责提供高效和健壮的软件解决方案,不仅解决当前存在的问题,还预见未来的问题或可能的改进。鉴于他的经验,他在计算机视觉、机器学习和控制问题上也有独特的见解。Anil对DIY和电子学有兴趣,并且开发了一些Arduino库回馈社区。
首先,我要感谢我的家人和朋友的支持,他们总是在我最需要的时候帮助我。我也要感谢我的同事和朋友David Rubio Vidal、Emilio Miguelá?ez Martín和John Brydon给我最大的支持,他们以专业的方式教我很多知识。我还要感谢我在SeeByte和AVORA团队的同事,这些年从他们那里学习并经历很多。最后,我要特别感谢Jorge Cabrera Gámez,他的指导和建议成就了我自己从未想象到的职业生涯。
Aaron Martinez是数字化制造领域的电脑工程师、企业家和专家。他于2010年在拉斯帕尔马斯大学的Instituto Universitario de Cienciasy Tecnologias Ciberneticas(IUCTC)完成硕士论文。他在远程监控领域使用沉浸式设备和机器人平台准备硕士论文。得到学位后,他参加了在奥地利林茨开普勒大学研究所的机器人学实习计划。在实习期间,他作为团队的一员使用ROS和导航包集进行移动平台开发。之后,他参与了有关机器人的项目,其中一个是拉斯帕尔马斯大学的AVORA项目。在这个项目中,他参与自主水下航行器制作,并参与意大利的SAUC-E。2012年,他负责维护这个项目;2013年,他帮助从ROS向机器人平台移植导航包集和其他算法。
最近,Aaron与人共同创立了一家名为SubSeaMechatronics SL的公司。这家公司从事与水下机器人和遥控系统相关的项目,还设计和制造水下传感器。公司的主要目标是开发用于研发原型和重型机械手的定制解决方案。
Aaron有许多领域的经验,比如编程、机器人、机电一体化、数字化制造以及Arduino、BeagleBone、服务器和激光雷达等设备。如今,他在SubSeaMechatronics SL公司从事水下和空中环境的机器人平台设计。
我要感谢我的女朋友,她在我写这本书时给我支持以及给我继续成长的动力。我还要感谢Donato Monopoli(加那利群岛技术研究所(ITC)生物医学工程部门的主管),以及ITC所有的工作人员,感谢他们使我懂得数字制造、机械以及组织工程,我在此度过了生命中最美好的时光。
感谢我大学的同事,特别是Alexis Quesada,他给了我在准备硕士论文时创建我第一个机器人的机会。和他们一起工作,使我学习到很多关于机器人的知识。
最后,我要感谢家人和朋友的帮助与支持。
About the Reviewers  审校者简介
Piotr Gródek是一位对计算机视觉和图像处理感兴趣的C++程序员。他曾经是嵌入式程序员,现在工作于银行。他是开源游戏和无人驾驶汽车的开发者。空闲时间他喜欢跑步、打壁球和阅读。
Akihiko HONDA是空间机器人工程师。他于2012年在东京工业大学完成了硕士论文。目前他正在东京工业大学进行博士课程学习。
他的研究兴趣包括与空间机器人的远程操作和自动化相互对应的灵活或可变形的材料。他的一个目标是通过开发更好的自动控制系统提高飞船在太空的性能和稳定性。在早期的研究中,他参与了包含大型太阳能电池阵列和用于捕捉国际空间站的空间机械臂的地球观测卫星的工作。目前,他计划将其研究成果应用于空间太阳能电力系统、行星探测车等。他作为最佳参赛人获奖,并在日本天文学会举办的JSF卫星设计竞赛中因提出使用其研究的一个新型探索宇宙飞船而获奖。
他在大学的研究过程中,还参与了由日本太空发展署指挥的一些项目。在JEM(REX-J)项目的机器人实验中,他参与了在轨道上的实验设备支持操作并在研究中获得灵感。他还参加了一个为宇航员开发可穿戴机械臂的项目并开发了手动控制系统。目前他正工作于两个探索机器人项目。其中一个是开发名为“KENAGE”的可变形的探测车,用于克服月球和火星特殊的崎岖地形。这个探测车正在使用GAZEBO仿真器进行可行性实验测试。在另一个项目中,他为JumpingScouter开发了一个环境识别系统。
2013年,他参与了萨利大学的SMART探测器项目,开发环境保护和识别系统。同时,他也参与了探测车在真实环境中检测实际功能的现场实验。
我要感谢JAXA的Hiroki KATO给我打开了ROS的大门并对我的研究给予宝贵建议。我还要感谢Mitsushige ODA教授、Hiroki NAKANISHI教授以及东京工业大学空间机器人实验室的同事。他们分享了空间机器人的美好前景,提供了建议,并支持我在研究中使用ROS实现它们。我也要感谢萨利大学STAR实验室的教授和同事给我提供在真实环境中使用ROS的重要建议。我特别感谢来自大加那利岛的朋友给我介绍这令人振奋的工作。
最后,我要感谢我的家人Yoshihiko、Nobuko和Ayaka对我的生活和梦想的支持,同时感谢女朋友对我的理解。
Matthieu Keller是一位热爱技术和计算机科学的法国工程师。他接受的教育涉及计算和机器人学,这使他成为一名爱好者。他审校了本书的第1版。
Aridane J. Sarrionandia de León研究计算机科学,并对机器人学和自主航行器有非常大的兴趣。他的学位课题是关于使用声呐的水下地图构建,为此他在自主水下航行器中使用ROS工作。他有自主系统和ROS的经验。他熟悉OpenCV和PCL,目前正在开发自主水面航行器的控制系统。
我要感谢Luis和Aaron给我这个机会审校这本书。同时,我要感谢拉斯帕尔马斯大学的AVORA团队,特别是Aaron、Luis和Enrique,他们给我介绍了ROS的神奇之处,并帮助我探索自主航行器世界。感谢我的导师Jorge Cabrera Gámez,他让我有机会成为AVORA团队的一员。
最后,我要感谢我的家人和朋友在我生活中出现问题时支持我,特别要感谢Eva纠正我不清晰的语句。

书籍目录

Contents  目 录
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第1章 ROS Hydro系统入门 1
1.1 PC安装教程 3
1.2 使用软件库安装ROS Hydro 3
1.2.1
配置Ubuntu软件库 4
1.2.2
添加软件库到sources.list文件中 4
1.2.3
设置密钥 5
1.2.4
安装ROS 5
1.2.5
初始化rosdep 6
1.2.6
配置环境 6
1.2.7
安装rosinstall 7
1.3 如何安装VirtualBox和Ubuntu 8
1.3.1
下载VirtualBox 8
1.3.2
创建虚拟机 8
1.4
在BeagleBone Black上安装ROS Hydro 11
1.4.1
准备工作 12
1.4.2
配置主机和source.list文件 13
1.4.3
设置密钥 14
1.4.4
安装ROS功能包 14
1.4.5
初始化rosdep 15
1.4.6
在BeagleBone Black中配置环境 15
1.4.7
在BeagleBone Black中安装rosinstall 15
1.5 本章小结 15
第2章 ROS系统架构及概念 16
2.1 理解ROS文件系统级 16
2.1.1
工作空间 17
2.1.2
功能包 18
2.1.3
综合功能包 19
2.1.4
消息 20
2.1.5
服务 21
2.2 理解ROS计算图级 22
2.2.1
节点与nodelet 23
2.2.2
主题 24
2.2.3
服务 25
2.2.4
消息 26
2.2.5
消息记录包 26
2.2.6
节点管理器 26
2.2.7
参数服务器 27
2.3 理解ROS开源社区级 27
2.4 ROS系统试用练习 28
2.4.1
ROS文件系统导览 28
2.4.2
创建工作空间 29
2.4.3
创建ROS功能包和综合功能包 30
2.4.4
编译ROS功能包 30
2.4.5
使用ROS节点 31
2.4.6
如何使用主题与节点交互 33
2.4.7
如何使用服务 36
2.4.8
使用参数服务器 38
2.4.9
创建节点 38
2.4.10 编译节点 41
2.4.11
创建msg和srv文件 42
2.4.12
使用新建的srv和msg文件 44
2.4.13
启动文件 48
2.4.14
动态参数 50
2.5 本章小结 54
第3章 可视化和调试工具 55
3.1 调试ROS节点 57
3.1.1
使用gdb调试器调试ROS节点 57
3.1.2
ROS节点启动时调用gdb调试器 58
3.1.3
ROS节点启动时调用valgrind分析节点 59
3.1.4
设置ROS节点core文件转储 59
3.2 日志信息 59
3.2.1
输出日志信息 59
3.2.2
设置调试信息级别 60
3.2.3
为特定节点配置调试信息级别 61
3.2.4
信息命名 62
3.2.5
按条件显示信息与过滤信息 62
3.2.6
显示信息的方式——单次、可调、组合 63
3.2.7
使用rqt_console和rqt_logger_level在运行时修改调试级别 63
3.3 检测系统状态 66
3.3.1
检测节点、主题、服务和参数 67
3.3.2
使用rqt_graph在线检测节点状态图 70
3.4 设置动态参数 71
3.5 当出现异常状况时使用   roswtf 72
3.6 可视化节点诊断 74
3.7 绘制标量数据图 75
3.8 图像可视化 77
3.9 3D可视化 79
3.9.1
使用rqt_rviz在3D世界中实现数据可视化 79
3.9.2
主题与坐标系的关系 82
3.9.3
可视化坐标变换 82
3.10 保存与回放数据 83
3.10.1
什么是消息记录包文件 84
3.10.2
使用rosbag在消息记录包中记录数据 84
3.10.3
回放消息记录包文件 85
3.10.4
检查消息记录包文件的主题和消息 86
3.11 应用rqt与rqt_gui插件 88
3.12 本章小结 88
第4章 在ROS下使用传感器和执行器 90
4.1 使用游戏杆或游戏手柄 90
4.1.1
joy_node如何发送游戏杆动作消息 91
4.1.2
使用游戏杆数据在turtlesim中移动海龟 92
4.2 使用激光雷达——Hokuyo URG-04lx 95
4.2.1
了解激光雷达如何在ROS中发送数据 96
4.2.2
访问和修改激光雷达数据 98
4.3 使用Kinect传感器查看3D环境中的对象 100
4.3.1
如何发送和查看Kinect数据 101
4.3.2
创建使用Kinect的示例 102
4.4 使用伺服电动机——Dynamixel 104
4.5 使用Arduino添加更多的传感器和
执行器 107
4.6 在Arduino上使用超声波传感器 111
4.7 距离传感器如何发送消息 113
4.7.1
创建使用超声波的示例 113
4.7.2
Xsens如何在ROS中发送数据 116
4.7.3
创建使用Xsens的示例 116
4.8 使用10自由度低成本惯性测量模组IMU 118
4.8.1
下载加速度传感器库 119
4.8.2
Arduino Nano和10自由度传感器编程 120
4.8.3
创建ROS节点以使用10自由度传感器数据 121
4.9 GPS的使用 123
4.9.1
GPS如何发送信息 125
4.9.2
创建一个使用GPS的工程实例 126
4.10 本章小结 127
第5章 计算机视觉 128
5.1 连接和运行摄像头 129
5.1.1
FireWire IEEE1394摄像头 129
5.1.2
USB摄像头 133
5.2 使用OpenCV制作USB摄像头 驱动程序 134
5.2.1
通过cv_bridge使用OpenCV处理ROS图像 139
5.2.2
使用image transport发布图像 139
5.2.3
在ROS中使用OpenCV 140
5.2.4
显示摄像头输入的图像 140
5.3 标定摄像头 141
5.4 ROS图像管道 148
5.5 计算机视觉任务中有用的ROS功能包 152
5.6 使用viso2实现视觉里程计 153
5.6.1
摄像头位姿标定 154
5.6.2
运行viso2在线演示 157
5.6.3
使用低成本双目摄像头运行viso2 159
5.7 使用RGBD深度摄像头实现视觉里程计 160
5.7.1
安装fovis 160
5.7.2
用Kinect RGBD深度摄像头运行fovis 160
5.8 计算两幅图像的单应性 161
5.9 本章小结 162
第6章 点云 163
6.1 理解点云库 163
6.1.1
不同的点云类型 164
6.1.2
PCL中的算法 164
6.1.3
ROS的PCL接口 165
6.2 我的第一个PCL程序 166
6.2.1
创建点云 167
6.2.2
加载和保存点云到硬盘 170
6.2.3
可视化点云 173
6.2.4
滤波和缩减采样 176
6.2.5
配准与匹配 181
6.2.6
点云分区 184
6.3 分割 187
6.4 本章小结 191
第7章 3D建模与仿真 192
7.1 在ROS中自定义机器人的3D模型 192
7.2 创建第一个URDF文件 192
7.2.1
解释文件格式 194
7.2.2
在rviz里查看3D模型 195
7.2.3
加载网格到机器人模型 197
7.2.4
使机器人模型运动 198
7.2.5
物理属性和碰撞属性 198
7.3 xacro——?一个更好的机器人建模方法 199
7.3.1
使用常量 199
7.3.2
使用数学方法 200
7.3.3
使用宏 200
7.3.4
使用代码移动机器人 201
7.3.5
使用SketchUp进行3D建模 204
7.4 在ROS中仿真 205
7.4.1
在Gazebo中使用URDF 3D模型 206
7.4.2
在Gazebo中添加传感器 208
7.4.3
在Gazebo中加载和使用地图 211
7.4.4
在Gazebo中移动机器人 213
7.5 本章小结 215
第8章 导航功能包集入门 216
8.1 ROS导航功能包集 216
8.2 创建变换 217
8.2.1
创建广播机构 218
8.2.2
创建侦听器 218
8.2.3
查看坐标变换树 221
8.3 发布传感器信息 221
8.4 发布里程数据信息 224
8.4.1
Gazebo如何获取里程数据 225
8.4.2
创建自定义里程数据 228
8.5 创建基础控制器 232
8.5.1
使用Gazebo创建里程数据 233
8.5.2
创建自己的基础控制器 235
8.6 使用ROS创建地图 237
8.6.1
使用map_server保存地图 238
8.6.2
使用map_server加载地图 239
8.7 本章小结 240
第9章 导航功能包集进阶 241
9.1 创建功能包 241
9.2 创建机器人配置 241
9.3 配置全局和局部代价地图 243
9.3.1
基本参数的配置 244
9.3.2
全局代价地图的配置 245
9.3.3
局部代价地图的配置 245
9.3.4
基本局部规划器配置 246
9.4 为导航功能包集创建启动文件 247
9.5 为导航功能包集设置rviz 248
9.5.1
2D位姿估计 248
9.5.2
2D导航目标 249
9.5.3
静态地图 249
9.5.4
粒子云 251
9.5.5
机器人占地空间 251
9.5.6
局部代价地图 252
9.5.7
全局代价地图 252
9.5.8
全局规划 254
9.5.9
局部规划 254
9.5.10
规划器规划 254
9.5.11
当前目标 255
9.6 自适应蒙特卡罗定位 256
9.7 使用rqt_reconfigure修改参数 258
9.8 机器人避障 259
9.9 发送目标 260
9.10 本章小结 262
第10章 使用MoveIt! 264
10.1 MoveIt!体系结构 264
10.1.1
运动规划 265
10.1.2
规划场景 267
10.1.3
运动学 268
10.1.4
碰撞检测 268
10.2 在MoveIt!中集成一个机械臂 268
10.2.1
工具箱里有什么 268
10.2.2
使用设置助手生成一个MoveIt!包 269
10.2.3
集成到rviz 273
10.2.4
集成到Gazebo或实际机器人的手臂 276
10.3 简单的运动规划 277
10.3.1
规划单个目标 278
10.3.2
规划一个随机目标 278
10.3.3
规划预定义的群组状态 280
10.3.4
显示目标的运动 280
10.4 考虑碰撞的运动规划 280
10.4.1
将对象添加到规划场景中 281
10.4.2
从规划的场景中删除对象 282
10.4.3
应用点云进行运动规划 283
10.5 抓取和放置任务 284
10.5.1
规划的场景 285
10.5.2
感知 288
10.5.3
抓取 288
10.5.4
抓取操作 290
10.5.5
放置操作 292
10.5.6
演示模式 295
10.5.7
在Gazebo中仿真 295
10.6 本章小结 296

作者简介

Exbot易科机器人实验维护书籍,提供学习镜像包括indigo和kinetic等,努力为ROS爱好者和开发人员提供力所能及的服务。
本书第2版概括性地介绍了ROS系统的各种工具。ROS是一个先进的机器人操作系统框架,现今已有数百个研究团体和公司将其应用在机器人行业中。对于机器人技术的非专业人士来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何开始使用ROS的基本工具,以及最终如何应用先进的计算机视觉和导航工具。
在阅读本书的过程中无需使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样你可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户负担得起的设备,同时涵盖了在机器人研究中最典型的传感器或执行器。
最后,由于ROS系统的存在使得整个机器人具备在虚拟环境中工作的能力。你将学习如何创建自己的机器人并结合功能强大的导航功能包集。此外如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。第2版在最后增加了一章,讲如何使用“Move it!”包控制机械臂执行抓取任务。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理。
主要内容
第1章介绍安装ROS系统最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROS Hydro。这一章还会说明如何从Debian软件包安装或从源代码进行编译安装,以及在虚拟机和ARM CPU中安装。
第2章涉及ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试一个节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍ROS系统与真实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第5章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,你就可以使用ROS的标定工具标定你的摄像头。我们会详细介绍和说明什么是图像管道,学习如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第6章将展示如何在ROS节点中使用点云库。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
第7章介绍在ROS系统中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第8章是两章关于ROS导航功能包集中的第1章。该章介绍如何对你的机器人进行使用导航功能包集所需的初始化配置。然后用几个例子对导航功能包集进行说明。
第9章延续第8章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和rviz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第10章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置,简单的运动规划等任务的演示示例。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu 12.04 LTS。这样你可以根据第1章的内容安装ROS Hydro。
对于ROS的这一版本,你将需要Ubuntu 14.04之前的版本,因为之后的版本已经不再支持Hydro了。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,如果有足够的外围接口将会更好,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-core Debian软件包),以便从本书提供的源代码中复制库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS系统如何帮助完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这部分直接阅读后面的章节。


 ROS机器人程序设计下载



发布书评

 
 


精彩短评 (总计1条)

  •     学习ROS机器人编程的中文参考书不多,这算是其中比较主流的一本吧。
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024