机器人操作系统 (Robot Operating System,ROS) 是一种全球通用的机器人中间件,可帮助开发人员对机器人应用程序进行编程,目前被机器人公司、研究中心和大学广泛用于先进机器人应用程序的开发。本书介绍了ROS框架的高级概念,特别适合已经熟悉ROS基本概念的用户。为了帮助新入门的开发人员快速上手书中的例子,第1章简要介绍了ROS的基本概念。
本书将引导读者完成新机器人的创建、建模、设计以及仿真,并让它们与ROS框架进行交互。读者将可以使用先进的仿真软件来使用ROS工具,这些工具能够实现机器人导航、操纵和传感器构建等。最后,读者将学习如何处理ROS底层控制器、节点和插件等重要概念。
读者只需使用一台标准的计算机就可以处理书中几乎所有的例子,没有任何特殊的硬件要求。当然,本书的某些章节将使用额外的硬件组件来讨论如何将ROS与外部传感器、执行器和I/O板一起使用。
本书首先介绍ROS的基本概念,接着讨论如何对机器人进行建模和仿真。在这个过程中会使用Gazebo、CoppeliaSim和Webots软件仿真器控制机器人并与之交互,通过MoveIt!以及ROS导航软件包连接机器人。之后将讨论ROS插件、控制器和节点的相关内容。最后,将讨论如何将MATLAB和Simulink与ROS连接起来。
本书适合那些充满热情的机器人开发人员或希望充分利用ROS功能的研究人员阅读,也很适合那些已经熟悉典型机器人应用程序的用户,或者那些想开始学习如何在ROS世界中以先进的方式开发、建模、构建和控制机器人的用户阅读。如果读者想轻松理解本书的内容,强烈建议你掌握GNU/Linux和C++编程的基本知识。
第1章介绍ROS的核心基本概念。
第2章介绍如何使用ROS功能包。
第3章讨论两个机器人的设计,一个是7 自由度 (Degree Of Freedom,DOF)机械臂,另一个是差速轮式机器人 。
第4章讨论7自由度机械臂、差速轮式机器人的仿真操作,以及帮助控制Gazebo中机器人关节的ROS控制器。
第5章介绍CoppeliaSim和Webots仿真器,展示如何仿真和控制不同类型的机器人。
第6章介绍开箱即用的功能,如使用ROS MoveIt!以及导航栈的机器人操作和自主导航。
第7章讨论MoveIt!的功能,例如避障、使用3D传感器进行感知、抓取、拾取和放置,之后介绍如何让机械臂硬件与MoveIt!进行交互。
第8章讨论如何利用ROS仿真和控制空中机器人,重点以四旋翼无人机为例进行介绍。
第9章讨论传感器和执行器等一些硬件组件与ROS的交互。我们将研究使用I/O板(如Arduino或Raspberry Pi)通过ROS进行传感器交互。
第10章讨论如何让各种视觉传感器与ROS交互,并使用 开源计算机视觉 (Open Source Computer Vision,OpenCV)库和 点云库 (Point Cloud Library,PCL)等对其进行编程。
第11章帮助读者构建具有差速驱动配置的自主移动机器人硬件,并让其与ROS进行交互。该章旨在让读者了解如何构建自定义移动机器人并让其与ROS交互。
第12章展示ROS中的一些高级概念,如ROS pluginlib、nodelet和Gazebo插件。我们将讨论每个概念的功能和应用程序,并结合一个例子来演示它们的工作原理。
第13章展示如何编写和运行基本的ROS控制器。我们还将介绍如何为RViz创建一个插件。
第14章讨论如何将MATLAB和Simulink与ROS连接起来。
第15章帮助读者理解ROS工业包并在ROS中安装它们。我们将介绍如何为工业机器人开发MoveIt!IKFast插件。
第16章讨论如何在Eclipse IDE中设置ROS开发环境、ROS的最佳实践,以及ROS的故障排除技巧。
为了运行本书中的示例,读者需要一台运行Linux操作系统的标准PC。Ubuntu 20.04是建议的Linux发行版,但Debian 10也受支持。建议的PC配置为至少4GB的RAM和现代处理器,方便执行Gazebo仿真器和图像处理算法。读者甚至可以在虚拟环境设置中工作,在虚拟机中安装Linux操作系统,并使用Windows系统上托管的VirtualBox或VMware。这种选择的缺点是需要更多的计算能力来处理示例,并且在ROS与实际硬件交互时可能会遇到问题。本书所需的软件版本是ROS Noetic Ninjemys,所需的附加软件是CoppeliaSim和Webots仿真器、Git、MATLAB以及Simulink。最后,一些章节将帮助读者实现ROS与商业硬件[如I/O板(Arduino、ODROID和Raspberry Pi计算机)、视觉传感器(Intel RealSense)和执行器]的交互,读者必须自行购买这些特殊的硬件组件,才能运行相应的示例,但学习ROS并不严格要求这些组件。
读者可以从GitHub下载本书源码(https://github.com/PacktPublishing/Mastering-ROS-for-Robotics-Programming-Third-edition),本书的代码更新 也将在该GitHub代码仓库进行维护。
读者可以访问http://www.packtpub.com/sites/default/files/downloads/9781801071024_ColorImages.pdf下载包含本书彩色图片的PDF文件。
本书使用以下排版约定。
文本中的代码体:表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入和Twitter句柄。例如:“我们正在使用catkin构建系统来构建ROS包。”
代码块表示如下:
当我们想提醒你注意代码块的特定部分时,相关行或条目会以粗体显示:
命令行输入或输出则表示如下:
粗体 : 表示新术语、重要词,或者你在屏幕上看到的词。例如,菜单或对话框中的词就会像这样在文本中表示:“要创建新的仿真,请使用顶部菜单栏并选择 Wizards|New Project Directory 。”