Preface前言
本书第3版全面地介绍了ROS和各种工具。ROS是一个先进的机器人操作系统框架,目前已有数百个研究团体和公司将其应用在机器人行业中。更重要的是,对于机器人技术的非专业人士和学生来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何使用ROS的基本工具和框架中不同的功能。
在阅读本书的过程中无须使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户购买得起的设备,同时涵盖了在机器人研究中最典型的传感器和执行器。
最后,展示ROS具有使整个机器人在实际或虚拟环境中工作的能力。你将学习如何创建自己的机器人并通过Gazebo仿真环境集成它。此外,如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。本书将带你从不同方面探索如何创建机器人,例如使用计算机视觉或点云分析传感器感知世界,使用强大的导航功能包集在环境中实现导航,甚至能够用MoveIt!包控制机械臂与周围环境交互。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理,我们衷心希望你能全面了解ROS在开发机器人系统时所提供的无限可能性。
主要内容
第1章介绍安装ROS最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROSKinetic。这一章还会说明如何从Debian包安装或从源代码进行编译安装,以及在虚拟机、Docker和ARMCPU中安装。
第2章讨论ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍在ROS中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器等传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第5章是关于ROS导航功能包集中的其中一章。该章介绍如何为方便机器人使用导航功能包集进行初始化配置。然后用几个例子对导航功能包集进行说明。
第6章延续第5章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和RViz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第7章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置、简单的运动规划等任务的演示示例。
第8章介绍ROS与现实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第9章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,就可以使用ROS的标定工具标定摄像头。该章会详细介绍和说明什么是图像管道,讨论如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第10章将展示如何在ROS节点中使用点云库(PointCloudLibrary,PCL)。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu16.04LTS。这样你可以根据第1章的内容安装ROSKinetic。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,最好有足够的外围接口,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-coreDebian包),以便从本书提供的源代码中复制软件库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS如何帮助开发人员完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这三章直接阅读后面的章节。
源代码和彩色图片下载
本书源代码可以从华章官网www.hzbook.com下载。
作者简介AbouttheAuthors
AnilMahtani是一名主要从事水下机器人工作研发的计算机科学家。他第一次在该领域工作是在完成硕士论文期间为低成本ROV开发软件架构。在此期间,他也成为AVORA的团队领导者和主要开发人员,这个大学生团队设计开发了一个自主水下航行器并参加了2012年的欧洲学生自主水下航行器设计挑战赛(StudentAutonomousUnderwaterChallenge-Europe,SAUC-E)。同年,他完成了论文并获得了拉斯帕尔马斯大学的计算机科学硕士学位。此后不久,他成为SeeByte公司的软件工程师,这家公司是水下系统智能软件解决方案的全球领导者。在2015年,他加入SecureWorks公司,任职软件工程师,在那里他应用相关知识和技术开发入侵检测和预防系统。
在SeeByte公司工作期间,Anil参与了军方、石油和天然气公司的一些半自主和自主水下系统的核心开发。在这些项目中,他积极参与自主系统开发、分布式软件体系结构设计和底层软件开发,同时也为前视声呐图像提供计算机视觉解决方案。他还获得了项目经理职位,管理一个开发和维护内核C++库的工程师团队。
他的专业兴趣主要包括软件工程、算法、数据结构、分布式系统、网络和操作系统。Anil在机器人方向主要负责提供高效和健壮的软件解决方案,不仅解决当前存在的问题,还预见未来的问题或可能的改进。鉴于他的经验,他在计算机视觉、机器学习和控制问题上也有独特的见解。Anil对DIY和电子学感兴趣,并且开发了一些Arduino库回馈社区。
首先,我要感谢家人和朋友的支持,他们总是在我最需要的时候帮助我。我还要感谢我的女友Alex的耐心支持,她是我灵感的源泉。最后,我要感谢我的同事IhorBilyy和DanGood,在我软件工程师职业生涯中他们以专业的方式教会我很多知识。
LuisSánchez在拉斯帕尔马斯大学获得了电子与电信工程的双硕士学位。他曾在技术开发和创新研究所(IDETIC)、加那利群岛海洋平台(PLOCAN)和应用微电子研究所(IUMA)与不同的研究小组合作,进行超分辨率算法成像研究。
他的专业兴趣包括应用于机器人系统的计算机视觉、信号处理和电子设计。因此,他加入了AVORA团队,这批年轻的工程师和学生从零开始从事自主水下航行器(AUV)的开发工作。在这个项目中,Luis开始开发声学和计算机视觉系统,用于提取不同传感器的信息,例如水听器、声呐和摄像头。
依托海洋技术的强大背景,Luis与人合作创办了一家新的初创公司SubseaMechatronics,致力于为水下环境开发遥控操作和自主航行器。
下面是海洋技术工程师和企业家(LPAFabrika:GranCanariaMakerSpace的联合创始人和制造商)DarioSosaCabrera对Luis的评价:
“他很热情,是一个跨多学科的工程师。他对工作负责,自制力强,并承担一个团队领导者的责任,这在euRathlon比赛中充分展现了出来。他在电子和电信领域的背景让其具备从信号处理和软件到电子设计和制造的广泛专业知识。”
Luis作为技术审校者参与了Packt出版社出版的《LearningROSforRoboticsProgramming》的相关工作以及第2版的撰写工作。
首先,我要感谢Aaron、Anil以及Enrique邀请我参与编写这本书。同他们一起工作非常快乐。同时,我也要感谢水下机电团队关于重型水下机器人的丰富经验,这些年我们一起成长。我必须提到LPAFabrika:GranCanariaMakerSpace,他们满腔热忱地准备和引导教学机器人及技术项目,与他们共同工作的时光也非常开心。
最后,我要感谢家人和女友对我参与的每个项目的大力支持和鼓励。我以此书献给他们。
EnriqueFernández具有计算机工程博士学位和机器人学研究背景。他的博士论文解决了自主水下滑翔器(AUG)的路径规划问题,他还研究了SLAM、感知、视觉、控制等机器人学课题。在读博士期间,他加盟了赫罗纳大学的CIRS/ViCOROB水下机器人研究中心,在那里他为AUV开发了视觉SLAM和INS模块。他在2012年参加了SAUC-E并获奖,在2013年作为合作者参与了SAUC-E。
攻读博士学位期间,Enrique在机器人顶级会议和期刊上发表了多篇论文,其中包括国际机器人和自动化会议(InternationalConferenceofRoboticsandAutomation,ICRA)。他也合作编写了一些ROS书籍和章节。
之后,Enrique作为SLAM工程师在2013年6月加盟PALRobotics公司。在那里,他开发了用于REEM、REEM-C仿人型机器人的ROS软件,也继续为开源社区(主要是ROS控制软件库)做贡献,目前仍是其中一名维护人员。在2015年,他加盟ClearpathRobotics公司的自主系统部门,从事感知算法开发相关工作。他曾经在通用电气公司(GeneralElectric)和约翰迪尔(JohnDeere)等多家大型工业公司的设施中负责部署工业移动机器人OTTO1500和OTTO100软件的运行。
我要感谢本书的合著者,感谢他们为完成本书所付出的努力以及提供了无数示例的代码。我还要感谢拉斯帕尔马斯大学研究组和水下机器人研究中心(CenterofUnderwaterRoboticsResearch,CIRS/ViCOROB)的研究小组成员。我也要感谢在PALRobotics公司的同事,在那里我学到很多关于ROS、机器人运动以及仿人双足机器人的知识,不仅有软件,还有电子和硬件设计。此外,我还要感谢在ClearpathRobotics的同事们,在这里我掌握了ROS并参与了为工业4.0销售的24/7全天候运行自动驾驶机器人的软件开发。最后,我要感谢我的家人和朋友的帮助与支持,特别是Eva。
AaronMartinez是数字化制造领域的计算机工程师、企业家和专家。他于2010年在拉斯帕尔马斯大学的IUCTC(InstitutoUniversitariodeCienciasyTecnologiasCiberneticas)完成硕士论文。他在远程监控领域使用沉浸式设备和机器人平台准备硕士论文。获得学位后,他参加了在奥地利林茨约翰开普勒大学研究所的机器人学实习计划。在实习期间,他作为团队的一员使用ROS和导航包集进行移动平台开发。之后,他参与了有关机器人的项目,其中一个是拉斯帕尔马斯大学的AVORA项目。在这个项目中,他参与自主水下航行器制作,并参与意大利的SAUC-E。2012年,他负责维护这个项目;2013年,他帮助从ROS向机器人平台移植导航包集和其他算法。
最近,Aaron与人共同创立了一家名为SubSeaMechatronicsSL的公司。这家公司从事与水下机器人和遥控系统相关的项目,还设计和制造水下传感器。公司的主要目标是开发用于研发原型和重型机械手的定制解决方案。
Aaron有许多领域的经验,比如编程、机器人、机电一体化、数字化制造以及Arduino、BeagleBone、服务器和激光雷达等设备。如今,他在SubSeaMechatronicsSL公司从事水下和空中环境的机器人平台设计。
我要感谢我的女友,她在我写这本书时支持我并且给我继续成长的动力。我还要感谢DonatoMonopoli(加那利群岛技术研究所(ITC)生物医学工程部门的主管),以及ITC所有的工作人员,感谢他们使我懂得数字制造、机械以及工程组织,我在此度过了生命中最美好的时光。
感谢我大学的同事,特别是AlexisQuesada,他给了我在准备硕士论文时创建第一个机器人的机会。同他们一起工作,使我学习到很多关于机器人的知识。
最后,我要感谢家人和朋友的帮助与支持。
AbouttheReviewers审校者简介
LentinJoseph是印度QboticsLabs(http://www.qboticslabs.com)的创始人兼首席执行官、作家、企业家、电子工程师、机器人爱好者、机器视觉专家、嵌入式程序员。
他在印度喀拉拉的联邦理工学院(FISAT)获电子学和通信工程学士学位。在工程项目的最后一年,他制作了一个可以与人交互的社交机器人(http://www.technolabsz.com/2012/07/social-robot-my-final-year.html)。项目取得了巨大的成功,被视觉和印刷媒体多次报道。该机器人的主要特点是可以与人交流并智能回复,同时具有一定的图像处理能力,如面部、动作和颜色检测。整个项目使用Python编程语言实现。他对机器人、图像处理和Python的兴趣从此开始。
毕业后,他在一家专门从事机器人和图像处理的创业公司工作了3年。同时,他学习了主流的机器人软件平台,如机器人操作系统(ROS)、V-REP、Actin(机器人仿真工具),以及图像处理库,如OpenCV、OpenNI和PCL。他还了解Arduino和TivaLaunchpad上的机器人三维设计和嵌入式编程。
在积累3年的工作经验后,他创立了一家名叫QboticsLabs的新公司,主要从事研究工作,在机器人和机器视觉等领域开发一些优秀的产品。他负责维护个人网站(http://www.lentinjoseph.com)和一个名为technolabsz的技术博客(http://www.technolabsz.com)。他在科技博客上发布作品。他也是印度PyCon2013的演讲者,主题是“使用Python的学习机器人”(LearningRoboticsusingPython)。
Lentin是《LearningRoboticsusingPython》(更多内容参考http://learn-robotics.com)和《MasteringROSforRoboticsProgramming》(更多内容参考http://mastering-ros.com)的作者,这两本书都由Packt出版社出版。第一本书的主题是使用ROS和OpenCV构建自主移动机器人。这本书是在ICRA2015上推出的,并在ROS博客Robohub、OpenCV、Python网站以及其他相关论坛上推广。第二本书是掌握机器人操作系统(ROS)的工具书,也在ICRA2016上推出,它是最畅销的ROS书籍之一。
作为ICRA2016的一部分,Lentin及其团队获得了HRATC2016挑战赛的冠军,同时他也是ICRA2015挑战赛HRATC决赛的入围者(http://www.icra2016.org/conference/challenges/)。