首页>参考读物>计算机科学与技术>人工智能

ROS机器人编程实践
作者 : [西班牙]伯纳多·朗奎洛·贾蓬(Bernardo Ronquillo Japón) 著
译者 : 张瑞雷 李静 顾人睿 刘锦涛 译
出版日期 : 2021-08-18
ISBN : 978-7-111-68915-7
定价 : 89.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 274
开本 : 16
原书名 : Hands-On ROS for Robotics Programming
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书首先介绍GoPiGo3及其配备的传感器和执行器。然后,通过从零开始创建3D模型并使用Gazebo在ROS中运行模拟机器人来使用GoPiGo3的数字孪生模型。接下来展示如何使用GoPiGo3构建和运行一个了解周围环境的自主移动机器人。还探索了机器人如何学习尚未在代码中编程但通过观察其环境而获得的任务。本书甚至还涵盖深度学习和强化学习等主题。在本书的末尾,读者将熟悉在机器人技术中构建特定用途应用程序的基础知识,并具备从零起步开发高度智能自主机器人的能力。本书适合机器人技术人员和业余爱好者阅读。

图书特色

ROS机器人编程实践
Hands-On ROS for Robotics Programming
[西班牙]?伯纳多·朗奎洛·贾蓬(Bernardo Ronquillo Japón) 著
张瑞雷?李静?顾人睿?刘锦涛?译
从工程视角,介绍如何在虚拟环境中对机器人进行仿真并在等效的实际场景中实现所需的行为,助你从零开发高度智能自主机器人

图书前言

为什么要写一本关于如何使用ROS学习机器人技术的新书呢?其实,编程只是使用机器人进行工作的一小部分。如果你想真正成为擅长机器人技术的开发者,那么还需要其他领域的技能,如机电、机器人仿真、自主导航以及机器学习/强化学习等。这四个主题中的每一个都是组成机器人技术的基石,需要掌握它们才能获得完整的机器人技能。本书分为四部分,每个部分专门针对这些组成模块中的一个。
第一部分(第1~3章)侧重于机电,并讲解机器人硬件的每个组成部分,提供测试机器人所配备的每个传感器和执行器的实际演示。该部分可使你对移动机器人的工作原理有一个很好的了解。
第二部分(第4~5章)涉及机器人仿真。该部分介绍ROS并开发一个两轮机器人仿真,用其模拟实际机器人的物理属性和行为。该部分探讨数字孪生的概念,即虚拟机器人,它是物理机器人的孪生。这是开发机器人应用程序的基本部分,相比测试真实机器人硬件的相关成本,Gazebo免费且方便。数字孪生使我们能够加快开发过程并节省物理机器人在高级开发阶段的测试。
第三部分(第6~9章)重点介绍机器人导航(robot navigation),这是移动机器人最常见的任务。该部分分别通过仿真和物理机器人的方式,基于实用项目讲解最新的算法和技术。
第四部分(第10~12章)着重于机器学习(machine learning)和强化学习(reinforcement learning),这是机器人研究和实际机器人应用中最活跃的领域。通过使用该技术,机器人能够从纯粹的全自动转变成柔性的行为机器,包括每一个可能的行为或应答的程序,其中机器人能够通过一个巧妙的方法从数据中学习对环境要求的反应。该数据可以从机器人的先前经验中获得,也可以从类似机器人的经验中收集。
要构建最新的机器人应用程序,首先需要掌握这四个构建模块,然后组合它们,这就是所谓的智能机器人(smart robot)。这是你的任务,也是你的挑战。
目标读者
如果你是一名工程师,希望构建使用ROS和AI驱动的机器人,那么本书非常适合你。对于希望开发自定义ROS机器人项目的技术人员和业余爱好者而言,也可以在本书中发现对自己有用的资源。
内容提要
第1章提供书中内容所基于的移动机器人的关键概念和实际组装准则。我们将从务实的角度深入研究GoPiGo3的特性,使其成为学习机器人技术的理想且经济、高效的平台。通过组装GoPiGo3,你将获得处理机器人组件的第一手技能。
第2章提供GoPiGo3如何工作的实用解析。为此,引入了JupyterLab环境,它是一个友好的界面,采用了笔记本的结构,该笔记本的结构由人类可读的段落和Python代码片段组成。该章为每个测试程序生成两个版本:JupyterLab笔记本和纯Python脚本。使用这些编程工具,分别测试每个传感器、执行器,检查其是否正常工作,并了解其背后的技术。
第3章解释ROS的基本概念,使用易于理解的语言介绍ROS框架,避免非常技术性的描述—因为我们的主要目标是从概念上准确地展示ROS的含义。在接下来的章节中,将提供深入的技术说明,以便最终能够将ROS集成到项目中。
第4章介绍如何构建简单的两轮机器人,即GoPiGo3的数字孪生机器人。该模型以统一机器人描述格式(Unified Robot Description Format,URDF)编写,并使用RViz展示效果。RViz是一种提供可配置的图形用户界面(Graphical User Interface,GUI)的ROS工具,允许用户显示其所需要的特定信息,可用于全局机器人可视化以及在构建模型时调试特定功能。
第5章讲解如何将机器人的数字化定义(URDF文件)转为Gazebo的仿真环境,这由能够模拟逼真行为的物理引擎提供动力。你还将加深对检查和测试数字机器人的理解,确保其行为能很好地代表现实情况。
第6章介绍ROS中的命令行交互,以及ROS命令的类型。我们将探讨ROS中最常用的通信模式,包括发布-订阅模型(publish-subscribe model)。为了处理所有的ROS数据,我们将介绍rqt,它简化了开发和调试应用程序的过程。此外,还引入了ROS参数,概述它们在高层管理机器人配置方面的功能。
第7章讲解如何使用GoPiGo3为真正的机器人设置ROS环境。我们从使用笔记本电脑键盘查看远程控制开始,然后进一步使用“ROS主题”等更技术性的方法。该章使你从基于键盘和主题的手动控制过渡到内部编程逻辑,以便机器人能够自主执行任务。
第8章探讨使用实际方法和GoPiGo3的数字孪生技术的同时定位和地图构建(Simultaneous Localization and Mapping,SLAM)技术。阐述为什么在正确导航之前需要SLAM。该仿真将在ROS本机仿真工具Gazebo中运行,该工具拥有可显示逼真效果的物理引擎。
第9章通过GoPiGo3物理机器人将焦点转回现实世界。该章重点介绍在实际环境中面对机器人任务时出现的许多细节和实际问题。可以先进行仿真,但是只有通过在实际场景中执行任务,才能获得机器人可以按预期方式运行的真实证据。该章是你深入了解机器人导航的起点,并且如果你想研究这一领域,这对增加你的知识储备至关重要。
第10章通过温和的方式而非复杂的数学公式介绍机器人的机器学习主题,并把重点放在了解该领域的常用概念上,这将有利于直观理解。该章中使用的实际示例将涉及GoPiGo3识别对象的Pi摄像头。
第11章提供基于简单场景的强化学习的理论基础。该章使你可以更好地了解经典强化训练任务中的内幕。我们继续使用实际示例探索提出的概念,并使用开源环境OpenAI Gym,这使我们能够轻松地测试训练智能体的不同算法,并在ROS中驱动机器人。
第12章比用于目标识别的计算机视觉更进一步,并解释GoPiGo3不仅可以感知事物,还可以采取一些步骤来实现目标。我们的机器人必须思考并决定在仿真的每个步骤中执行什么样的动作才能实现目标。执行完每个动作后,将以奖励的形式向机器人提供有关其决策优劣的反馈。经过一些训练后,奖励的激励将强化反馈良好的决策。
充分利用本书
本书采用务实的方法,鼓励你对利用物理机器人所学习的知识进行实践。我们选择GoPiGo3(https://www.dexterindustries.com/gopigo3/),因为它的模块化设计、成本适中等特点,也因为它是基于Raspberry Pi(树莓派)的。可以从全球的在线商店购买Raspberry Pi开发板。在购买套件的任何组件之前,我们建议先阅读第1章,以获取需要购买的所有组件的基本信息。要购买GoPiGo3套件,可以访问https://www.dexterindustries.com/gopigo3/并使用优惠券代码BRJAPON @ PACKT获得10%的折扣。
为了充分利用本书,需要具备一些Python和C++编程知识,并且熟悉Raspberry Pi等单板机。
最后,你需要一台装有Ubuntu 16.04 Xenial Xerus或Ubuntu 18.04 Bionic Beaver的笔记本电脑。本书的代码已使用这两种操作系统进行了测试。如果需要从零开始,我们建议你使用Ubuntu 18.04,因为它是Canonical提供的最新长期支持(Long Term Support,LTS)版本,并且支持到2023年4月。
第2~12章开头的“技术要求”提供了所有需要的安装说明。
下载示例代码及彩色图像
本书的示例代码及彩色图像,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码也托管在GitHub上,网址是https://github.com/PacktPublishing/Hands-On-ROS-for-Robotics-Programming。如果代码有更新,将在现有的GitHub库中进行更新。
运行代码
请访问以下链接查看代码运行的视频:http://bit.ly/2PrRpXF。
约定
本书使用了许多文本约定。
正文中的代码体:指示文本中出现的代码、数据库表名称、文件夹名称、文件名、文件扩展名、路径名、用户输入和Twitter句柄。示例如下:“似乎只执行了最后一行,即my_gopigo.left()。”
代码片段设置如下:

当我们希望引起你对代码块特定部分的注意时,相关的行或项将以粗体显示:

任何命令行输入或输出的编写方式如下:

粗体:表示一个新术语或重要单词。例如:“机器人的状态由一组范围值来表征。”
表示警告或重要提示。
表示提示和技巧。

上架指导

人工智能/机器人

封底文字

ROS工程师经常面临使用机器人操作系统(ROS)基础设施并将物理机器人连接到机器人仿真系统的挑战。通过本书,读者将学习如何在虚拟环境中对机器人进行仿真并在等效的实际场景中实现所需的行为。
本书首先介绍GoPiGo3及其配备的传感器和执行器。然后,通过从零开始创建3D模型并使用Gazebo在ROS中运行仿真来使用GoPiGo3的数字孪生模型。接下来展示如何使用GoPiGo3构建和运行一个了解周围环境的自主移动机器人,探索机器人如何学习尚未在代码中编程但通过观察其环境而获得的任务。本书还涵盖诸如深度学习和强化学习之类的主题。
在本书的最后,读者将熟悉在机器人技术中构建专用应用程序的基础知识,并具备从零开发高度智能自主机器人的能力。

本书涵盖的主要内容:
? 开发有环境感知能力的机器人。
? 机器人在物理环境中的反应。
? 将期望的行为分解为一系列机器人行动。
? 将传感器数据与上下文相关联以产生自适应响应。
? 应用强化学习让机器人通过反复试验进行学习。
? 通过深度学习使机器人能够识别周围环境。

译者序

机器人与人工智能的热潮此起彼伏,机器人操作系统(ROS)是基石,更是核心。开源机器人操作系统研发的初心是什么呢?Open Robotics首席执行官兼联合创始人Brian Gerkey有这样一段描述:“在机器人社区,一些问题目前已经得到了充分的解决,以至于每个人都了解并且或多或少也承认这是解决该问题的最佳方法。因此在ROS社区,只要有可能,我们都会采用这些算法,在开源库中实现它们并分享之,从而确保每个人都可以利用。”这解决了在此之前开发机器人遇到的一个最棘手的问题—重复做无用功,科研人员在学术研究实验室里从头构建机器人花费了太多时间和精力。
当然除了ROS,还有一款非常有趣且实用的仿真工具—Gazebo。通俗而言,ROS更像一个可以用于开发机器人应用程序的软件开发工具包(SDK):它为你提供了开发、调试、测试和最终部署机器人应用程序所需的软件、库和工具。实际上,ROS有时也被称为中间件,因为它的作用是提供一个管道系统,以确保所处理的消息在传感器和算法之间的路由,以及从传感器获取数据并将数据路由至执行机构的算法之间的路由。最终得到的是同类最佳的驱动程序、算法和工具。与ROS不同,Gazebo是一个基于物理学的三维机器人应用程序仿真器,可以在复杂的室内和室外环境中对机器人进行仿真。这些机器人应用程序可以使用ROS开发,也可以不使用ROS开发,但大多数都是使用ROS开发的。过去,ROS几乎完全在Linux上使用。从2017年开始,ROS已经支持MacOS和Windows,现在已经看到开发人员和用户受益于ROS对这些平台的支持。此外,技术人员对在多种嵌入式系统上部署ROS也越来越感兴趣,从运行Linux或QNX等实时环境的单片机到无完整操作系统的微控制器等,都有了适用的解决方案,例如本书介绍的Raspberry Pi和单片机Arduino等。
当然,目前市面上大部分书籍也或多或少涉及上面介绍的一些内容,有些也给出了具体项目案例。但是仅仅有这些还不足以让机器人充满智慧,也就是人工智能的学习能力,这也正是翻译这本书的原因。除了介绍机器人仿真、组装、SLAM和导航等方方面面的内容之外,本书还重点介绍了让机器人自主适应环境的机器学习和强化学习内容,这些技术使其成为名副其实的智能机器人,当然这离不开一个重要的开源工具OpenAI。
易科机器人实验室成立于2010年5月1日,十年如一日地专注于机器人技术学习、分享和传播,一方面深耕机器人操作系统及其相关技术教育和科研工作,一方面通过博客、图书、课程等诸多形式向广大读者传播ROS业界最新进展,也热切地希望能有更多小伙伴加入其中。
我们希望这本书能给你一个关于机器人和人工智能的全新视角和扎实的基础,为中国开源机器人社区添砖加瓦,同时将自己动手创造的仿真或真实机器人分享给全世界,并将最先进的人工智能技术部署其中,共同促进机器人时代的早日来临!

图书目录

译者序
前言
作者简介
审校者简介
第一部分 物理机器人组装与测试
第1章 组装机器人 2
1.1GoPiGo3机器人介绍 2
1.1.1机器人技术角度 3
1.1.2编程角度 3
1.1.3机器人套件和资源 4
1.2熟悉嵌入式硬件 7
1.2.1GoPiGo3开发板 7
1.2.2Raspberry Pi 3B+ 9
1.2.3为什么机器人需要CPU 10
1.3深入理解机电 10
1.4整合到一起 17
1.5快速硬件测试 18
1.5.1资源 18
1.5.2DexterOS入门 19
1.5.3用Bloxter编程 20
1.5.4校准机器人 20
1.5.5驱动机器人 22
1.5.6检查传感器 22
1.5.7关闭机器人 23
1.6总结 23
1.7习题 24
1.8进一步阅读 24
第2章 GoPiGo3的组件测试 25
2.1技术要求 25
2.2Python和JupyterLab入门 25
2.2.1为GoPiGo3启动JupyterLab 26
2.2.2硬件测试 29
2.3传感器和驱动的组件测试 32
2.3.1快速入门传感器和电动机 32
2.3.2机器人漫游 32
2.3.3距离传感器 35
2.3.4伺服软件包 40
2.3.5巡线跟随器 42
2.3.6IMU 43
2.3.7Raspberry Pi 43
2.3.8GoPiGo3项目 45
2.4总结 46
2.5习题 46
2.6进一步阅读 47
第3章 ROS入门 48
3.1技术要求 48
3.2ROS基本概念 49
3.2.1ROS图 50
3.2.2roscore 51
3.2.3工作空间和catkin 51
3.3配置ROS开发环境 52
3.3.1安装ROS 52
3.3.2集成开发环境 55
3.4ROS节点之间的通信—消息和主题 56
3.4.1创建工作空间 56
3.4.2设置ROS软件包 60
3.4.3发布主题的节点 62
3.4.4订阅主题的节点 65
3.4.5在同一节点中合并发布者和订阅者 67
3.5对ROS使用公开可用的软件包 69
3.6总结 69
3.7习题 70
3.8进一步阅读 70
第二部分 使用Gazebo进行
机器人仿真
第4章 创建虚拟两轮ROS机器人 72
4.1技术要求 72
4.2RViz机器人可视化入门 73
4.3使用URDF构建差动驱动机器人 74
4.3.1用于GoPiGo3的URDF概述 75
4.3.2机器人主体URDF 76
4.3.3左右轮的URDF模型 79
4.4使用RViz在ROS中查看GoPiGo3模型 81
4.4.1理解roslaunch命令 82
4.4.2通过RViz控制GoPiGo3机器人的车轮 84
4.5URDF模型中的机器人参考坐标系 86
4.6在构建时使用RViz查看模型 88
4.6.1在RViz窗口中更改模型的外观 88
4.6.2使用ROS工具进行检查 89
4.7总结 90
4.8习题 90
4.9进一步阅读 91
第5章 使用Gazebo进行机器人行为仿真 92
5.1技术要求 92
5.2Gazebo仿真器入门 93
5.3修改机器人URDF 96
5.3.1扩展URDF以生成SDF机器人定义 97
5.3.2碰撞和物理性质 97
5.3.3Gazebo标签 99
5.4验证Gazebo模型并查看URDF 99
5.5移动模型 102
5.6总结 105
5.7习题 105
5.8进一步阅读 106
第三部分 使用SLAM进行自主导航
第6章 在ROS中编程—命令和工具 108
6.1技术要求 109
6.2设置物理机器人 109
6.2.1下载并设置Ubuntu Mate 18.04 109
6.2.2访问自定义 110
6.2.3设置VNC服务器(x11vnc) 110
6.2.4Geany IDE 112
6.2.5安装GoPiGo3和DI传感器的驱动程序 112
6.2.6设置Pi Camera 114
6.2.7安装ROS Melodic 115
6.3ROS编程快速入门 116
6.3.1设置工作空间 116
6.3.2克隆ROS软件包 117
6.3.3第一次执行ROS节点 117
6.4案例研究1:编写ROS距离传感器软件包 118
6.4.1创建一个新软件包 119
6.4.2编写自己的源代码 119
6.5使用ROS命令 125
6.5.1Shell命令 125
6.5.2执行命令 126
6.5.3信息命令 127
6.5.4软件包和catkin工作空间 128
6.6创建并运行发布者和订阅者节点 129
6.7使用roslaunch自动执行节点 131
6.8案例研究2:ROS GUI开发工具—Pi Camera 133
6.8.1使用rqt_graph分析ROS图 134
6.8.2使用rqt_image_view显示图像数据 135
6.8.3用rqt_plot绘制传感器数据的时间序列 135
6.8.4使用rqt_bag播放录制的ROS会话 136
6.9使用ROS参数自定义机器人功能 138
6.10总结 140
6.11习题 140
6.12进一步阅读 141
第7章 机器人控制与仿真 142
7.1技术要求 142
7.2设置GoPiGo3开发环境 143
7.3案例研究3:使用键盘进行远程控制 146
7.3.1在机器人中运行gopigo3节点 146
7.3.2遥控软件包 149
7.3.3在笔记本电脑上运行远程操作 149
7.4使用ROS主题进行远程控制 151
7.4.1运动控制主题—/cmd_vel 151
7.4.2使用/cmd_vel直接驱动GoPiGo3 152
7.4.3检查GoPiGo3的X、Y和Z轴 154
7.4.4组合运动 154
7.5远程控制物理和虚拟机器人 155
7.5.1将ROS主节点还原到本地计算机 155
7.5.2用Gazebo仿真GoPiGo3 156
7.5.3同时在真实世界和仿真中运行 158
7.6总结 159
7.7习题 160
7.8进一步阅读 160
第8章 使用Gazebo进行虚拟SLAM和导航 162
8.1技术要求 162
8.1.1ROS导航软件包 163
8.1.2在本地计算机上运行ROS主节点 164
8.2使用Gazebo进行动态仿真 164
8.3导航组件 171
8.4机器人感知和SLAM 172
8.4.1添加LDS 172
8.4.2SLAM概念 176
8.5使用GoPiGo3练习SLAM和导航 178
8.5.1探索使用SLAM构建地图的环境 178
8.5.2使用导航沿着计划的轨迹行驶 180
8.6总结 182
8.7习题 182
8.8进一步阅读 183
第9章 用于机器人导航的SLAM 184
9.1技术要求 184
9.2为机器人准备LDS 186
9.2.1设置YDLIDAR 186
9.2.2与Raspberry Pi集成 188
9.2.3从远程笔记本电脑处理YDLIDAR数据 193
9.3在ROS中创建导航应用程序 195
9.4使用GoPiGo3练习导航 196
9.4.1绘制环境图 196
9.4.2在现实世界中导航GoPiGo3 198
9.5总结 199
9.6习题 199
9.7进一步阅读 199
第四部分 使用机器学习的
自适应机器人行为
第10章 在机器人技术中应用机器学习 202
10.1技术要求 202
10.2在系统中配置TensorFlow 203
10.2.1安装pip 203
10.2.2安装TensorFlow及其他依赖项 204
10.2.3使用GPU获得更好的性能 204
10.3机器人技术中的机器学习 205
10.3.1机器学习的核心概念 206
10.3.2机器学习线程 207
10.4从机器学习到深度学习 208
10.4.1机器学习算法 208
10.4.2深度学习和神经网络 210
10.5通过编程将机器学习应用于机器人技术的方法 213
10.5.1应用程序编程的一般方法 213
10.5.2集成机器学习任务 214
10.6深度学习应用于机器人技术—计算机视觉 215
10.6.1Gazebo中的目标识别 216
10.6.2现实世界中的目标识别 217
10.7总结 220
10.8习题 220
10.9进一步阅读 221
第11章 使用OpenAI Gym进行机器学习 222
11.1技术要求 223
11.2OpenAI Gym简介 224
11.2.1安装OpenAI Gym 224
11.2.2安装OpenAI ROS 226
11.2.3智能体、人工智能和机器学习 226
11.2.4倒立摆示例 227
11.2.5Q-learning说明—自动驾驶出租车示例 231
11.3运行环境 235
11.4配置环境文件 236
11.5运行仿真并绘制结果 237
11.6总结 240
11.7习题 240
11.8进一步阅读 241
第12章 通过强化学习实现目标 242
12.1技术要求 242
12.2使用TensorFlow、Keras和Anaconda配置环境 243
12.2.1TensorFlow后端 243
12.2.2使用Keras进行深度学习 244
12.2.3ROS依赖软件包 244
12.3了解ROS机器学习软件包 244
12.3.1训练场景 245
12.3.2用于运行强化学习任务的ROS软件包结构 245
12.4设置训练任务参数 246
12.5训练GoPiGo3避开障碍物到达目标位置 247
12.5.1如何运行仿真 249
12.5.2场景1—前往目标位置 249
12.5.3场景2—避开障碍物前往目标位置 251
12.6总结 255
12.7习题 256
12.8进一步阅读 256
附录 习题答案 257

教学资源推荐
作者: [英]西蒙 J.D. 普林斯(Simon J. D. Prince)著
作者: 蔡自兴 王勇 编著
作者: [法]阿尔伯特·比费特(Albert Bifet)[西班牙]理查德·戈华达 (Richard Gavaldà)[新西兰] 杰弗里·福尔摩斯(Geoffrey Holmes)[新西兰]伯恩哈德·普法林格(Bernhard Pfahringer) 著
参考读物推荐
作者: [美]托马斯·H. 达文波特(Thomas H. Davenport) 著
作者: 高聪 王忠民 陈彦萍 著
作者: [美]乌黛·卡马特(Uday Kamath),[美]约翰·刘(John Liu),[美]詹姆斯·惠特克(James Whitaker) 著