ROS机器人编程实践
上QQ阅读APP看书,第一时间看更新

前言

为什么要写一本关于如何使用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()。”

代码片段设置如下:

008-03

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

008-04

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

009-02

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

009-03 表示警告或重要提示。

009-04 表示提示和技巧。