智能机器人越来越多地走进千家万户,在民生、工业、军事等诸多领域发挥着越来越重要的作用。例如,在突如其来的新冠肺炎疫情中,许多机器人厂家推出了多种消毒机器人,这种机器人提升了相关场所的消毒效率,降低了人工消毒的风险,在多个国家和地区的防疫工作中大显身手。当前许多公司推出了各种各样的机器人,如著名的桌面机器人TurtleBot,以及针对自动驾驶研发的低速自动驾驶套件Openwalker,即本书封面的机器人。面对着各种各样的机器人,我们要学习哪些知识?怎样才能掌握通用的机器人开发技能呢?机器人操作系统(Robot Operating System,ROS)便是我们给出的答案。
ROS具有强大的功能、开源的特性、稳定的社区、广泛的硬件支持,已成为应用最为广泛的机器人操作系统,既是科学研究的利器,又是商业应用开发的“神兵”,吸引着越来越多的研究人员、机器人爱好者、相关从业者投身ROS学习和应用的大潮中。
机器人应用领域越发广泛,这要求业界人员掌握设计和开发不同应用场景的机器人系统的知识和能力;而要学好ROS,则需要进行大量实践操练。这就需要一本既涵盖多种应用场景,又提供大量实例的书籍来供各类人员学习。而本书正是针对上述需求而撰写的。
本书主要具有以下特点:
1.内容覆盖多个应用领域,能满足不同领域人员的学习需求
本书在12章的内容里对不同方面的ROS主题进行了较为深入的阐述,主要包括ROS-1与ROS-2的特性、移动机械臂模拟与应用开发、基于状态机的复杂任务处理(以餐厅服务员机器人为例)、送货机器人应用程序开发、多机器人协同、嵌入式平台ROS应用、强化学习应用(gym-gazebo和gym-gazebo2)、深度学习应用(TensorFlow)、自动驾驶汽车、基于VR头盔与手势识别传感器的机器人远程操控、基于OpenCV与伺服系统的人脸识别与跟踪,能够满足各个领域人员的不同学习需求。
2.既介绍基本原理,也讲述重要代码,满足深入学习ROS的需求
本书对包含的绝大多数主题都进行了较为深入的论述,如对强化学习原理、深度学习原理、高级主题的重要代码等都进行了阐述,适合读者对相关内容进行较为深入的学习,做到知其然,更知其所以然。当然,需要说明的是,作者并未对高深主题进行过于深入的论述,毕竟有些主题本身就是一个极其宏大的学科领域,如深度学习、机械臂动力学等,这些内容还需要读者自行学习更为专业的教材。
3.内容新颖,让读者能够及时享受ROS的最新成果
本书英文版出版于2019年12月,相较于第1版,本版本更新了除深度学习应用(基于TensorFlow)、自动驾驶汽车、基于OpenCV与伺服系统的人脸识别与跟踪等三个主题之外的所有内容,而且在嵌入式平台相关内容中介绍了最新的嵌入式硬件Jetson Nano和Raspberry Pi 3/4以及相应的ROS配置方法,内容十分新颖,基本保证了书中内容均为ROS的最新内容——基于ROS Melodic Morenia(截至2020年5月,ROS Noetic Ninjemys尚未发布,仍处于计划状态),而自2018年发展至今,两年的时间已使得绝大多数功能包都完成了由早期版本向ROS Melodic Morenia的迁移,这也是ROS官方当前推荐使用的长期支持版。
本书第1~5章由潘丽翻译,第6~8章由徐茜翻译,第9~11章由陈媛媛翻译,第12章由吴中红翻译,全书由潘丽统稿。
本书翻译过程得到了机械工业出版社李忠明编辑的大力帮助,在此谨表谢意。此外,在此也向组织出版了“机器人设计与制作系列”书籍的机械工业出版社华章公司、将ROS在国内的传播推广开来的胡春旭老师(古月居博主、《ROS机器人开发实践》作者)、组织了多届ROS暑期学校的华东师范大学张新宇博士、易科机器人的刘锦涛博士、致力于ROS课程建设的张瑞雷博士、星火计划发起人杨帆老师与林天麟博士、推出ROS学习神器ROS2GO的天之博特的田博博士(及张瑞雷博士、胡春旭老师)等表示崇高的敬意。得益于先行者们的无私奉献,国内的ROS发展才如此如火如荼。
需要说明的是,由于译者能力有限,也由于本书英文版部分论述不太符合国人的阅读和理解习惯,因此尽管译者本着忠于原文、语句通顺的原则进行翻译,但不可避免有不当之处,烦请读者不吝赐教,可向译者邮箱 yizhousan@163.com 发送邮件交流讨论。
译者
2020年5月于武汉
机器人操作系统(Robot Operating System,ROS),是目前最流行的机器人学中间件,在全世界诸多大学和与机器人相关的行业中得到了广泛应用。自从ROS推出以来,许许多多搭载了ROS的机器人进入市场,用户能够通过其应用程序轻松使用这些机器人。ROS的一个主要特点是它的开源特性。ROS不需要用户重新发明“轮子”;相反,ROS中标准化的机器人操作和应用程序开发十分简单。
本书全面更新和修订了第1版,将介绍更新的ROS功能包、更引人入胜的项目案例以及一些新增特性。本书中的项目案例均基于ROS Melodic Morenia,对应的Ubuntu版本为Ubuntu Bionic 18.04。
通过本书,读者将理解机器人是怎样应用于各行各业的,并将一步步地了解构建异构机器人解决方案的流程与步骤。除了介绍ROS中的服务调用和动作特性之外,本书还将介绍一些更酷的技术,让机器人以智能的方式处理复杂的任务。这些知识将为读者构建更智能、更具自主化能力的机器人铺平道路。此外,我们还将介绍ROS-2,以便读者能够了解此版本与以前的ROS版本之间的差异,并在为应用程序选择特定中间件方面提供帮助。
企业和研究机构主要关注计算机视觉和自然语言处理领域。虽然本书的第1版介绍了一些简单的视觉应用程序,如物体检测和人脸跟踪,但本版还将介绍行业中使用最广泛的智能扬声器平台之一——亚马逊的Alexa,以及如何使用它控制机器人。同时,我们将引入新的硬件,如NVIDIA Jetson Nano、华硕Tinkerboard和BeagleBone Black,并探索它们与ROS融合应用的能力。
虽然人们可能知道如何控制单台机器人,但ROS社区用户面临的最常见问题之一是使用多个机器人协同工作,无论它们是否属于同一类型。在这种情况下,控制问题将变得十分复杂,因为机器人可能遵循相似的话题名称,并可能导致操作序列的混乱。本书将重点针对可能的冲突提出相应的解决方案。
本书还涉及强化学习,包括如何将强化学习应用于机器人学和ROS之中。此外,读者还将发现其他更有趣的项目,如构建自动驾驶汽车、使用ROS进行深度学习,以及使用虚拟现实头盔(VR头盔)和Leap Motion(一种体感控制器)构建遥操作解决方案。目前这些领域的技术还处于发展之中,相应的研究人员正在不断地进行研究。
本书主要面向学生、机器人技术爱好者、相关领域的专业人员。此外,本书还适用于那些对从头开始学习和编写运动控制与传感器感知程序、算法感兴趣的人。本书甚至可能有助于初创企业开发新产品,或帮助研究人员利用现有资源创造新的创新成果。本书也适用于那些想在软件领域工作或成为机器人软件工程师的人。
第1章主要向初学者概述ROS的基础知识。本章将帮助读者理解ROS软件框架的基本思想和概念。
第2章介绍ROS的最新框架——ROS-2。基于该框架,读者将能够使用ROS进行实时应用程序的开发。本章的结构与第1章类似,主要是帮助读者厘清ROS-1与ROS-2之间的区别,同时理解两个版本的能力与局限。
第3章介绍怎样在模拟环境下构建移动机器人以及机械臂,并将两者结合起来,通过ROS对其进行控制。
第4章介绍基于状态机进行复杂机器人任务处理的技术,这些技术使得读者可以在使用机器人执行连续和复杂的任务管理时进行策略调整。
第5章是第3章、第4章内容的综合应用,基于这两章内容构建一个用户应用程序。该应用程序的功能是控制移动机械臂运送物品。本章将详细介绍上述应用程序的构建过程。
第6章介绍通过ROS在多个机器人间进行通信的方法,其中的机器人既可以是同类型的,也可以是不同类型的(即异构多机器人系统)。在此基础上,还将介绍对一组多机器人进行单独或同时控制的方法。
第7章介绍新型的嵌入式控制器及处理器板,例如基于STM32的控制器、Tinkerboard、Jetson Nano以及其他类似产品。本章还将介绍怎样通过ROS控制这些板卡的GPIO(General-Purpose Input/Output,通用输入/输出接口),以及如何通过Alexa提供的语音交互功能进行语音控制。
第8章介绍机器人学领域最重要的学习技术之一——强化学习。本章将介绍强化学习的内涵,并通过实例介绍强化学习背后的数学知识。此外,还将通过一系列实例展示强化学习技术是如何在ROS中进行应用的。
第9章介绍深度学习在机器人领域的应用。本章将介绍如何使用深度学习实现图像识别,还将介绍使用SVM(Support Vector Machine,支持向量机)的应用程序。
第10章是本书中最有趣的内容之一。本章将展示如何使用ROS和Gazebo构建一辆模拟的自动驾驶汽车。
第11章展示如何通过VR头盔和体感控制器Leap Motion实现对机器人的远程操控。本章将介绍VR头盔的应用,这是当前最流行的技术之一。
第12章通过一个项目展示如何在ROS下使用OpenCV库。在本项目中,将构建一个最基本的人脸跟踪器,实现摄像头对人脸的实时跟踪。本章将使用诸如Dynamixel的智能伺服系统实现机器人的旋转。
·读者需要一台运行Linux系统(最佳版本为Ubuntu 18.04)的个人计算机。
·个人计算机配置需求为:具有显卡,内存不小于4GB(8GB更佳)。这主要是为了更好地运行Gazebo,也是为了更好地进行点云和计算机视觉处理。
·读者最好能够拥有书中提到的传感器、执行器以及I/O板,并且能够将这些硬件连接到自己的计算机上,同时为了能够复制相关代码,读者需要安装Git。
·如果读者使用Windows系统,则推荐下载VirtualBox,并在其中安装和配置Ubuntu。不过,需要提醒的一点是,在虚拟机中运行ROS相关程序、连接某些硬件时可能存在某些问题。
本书的示例代码及所有截图和样图,可以从 http://www.packtpub.com 通过个人账号下载,也可以访问华章图书官网 http://www.hzbook.com ,通过注册并登录个人账号下载。
下载完成后,读者可以将代码压缩包解压到本地(请确保已经安装了解压缩软件),具体操作系统的相应解压缩软件如下:
·Windows下为WinRAR/7-Zip。
·Mac下为Zipeg/iZip/UnRarX。
·Linux下为7-Zip/PeaZip。
此外,读者还可以通过GitHub下载本书代码,网址为:
https://github.com/PacktPublishing/ROS-Robotics-Projects-SecondEdition
如果代码有所更新,则上述网址相应的仓库代码也会进行更新。
代码段示例:
输入或输出命令行示例:
表示警告或重要的说明。
表示提示和技巧。
拉姆库玛·甘地那坦(Ramkumar Gandhinathan) 是一名机器人学家和研究者。他从小学六年级开始制造机器人,在机器人领域钻研已超过15年,亲手打造了80多个不同类型的机器人。他在机器人行业有7年的系统性专业工作经验(4年全职和3年兼职/实习),拥有5年的ROS工作经验。在他的职业生涯中,他使用ROS构建了超过15个工业机器人解决方案。他对制作无人机也很着迷,是一名无人机驾驶员。他的研究兴趣和热情集中在SLAM、运动规划、传感器融合、多机器人通信和系统集成等领域。
郎坦·约瑟夫(Lentin Joseph) 是一位来自印度的作家、机器人学家和机器人企业家。他在印度喀拉拉邦的高知市经营一家名为Qbotics Labs的机器人软件公司。他在机器人领域有8年的工作经验,主要致力于ROS、OpenCV和PCL领域。
他写过几本关于ROS的书,分别是《机器人系统设计与制作:Python语言实现》
《精通ROS机器人编程》
《ROS机器人项目开发11例》
以及《机器人操作系统(ROS)入门必备:机器人编程一学就会》
。
他在印度获得了机器人学和自动化专业硕士学位,并在美国卡内基–梅隆大学的机器人研究所工作。他也是TEDx演讲者。