描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111750383
机器人操作系统(ROS)是一个用于复杂机器人编程的软件框架,你无须从头开始编写代码,即可用它开发用于构建复杂机器人的软件,从而节省宝贵的开发时间。本书通过通俗易懂的实用示例和对基本概念的逐步解释,全面介绍了可应用于ROS 机器人项目的高级概念。 本书首先帮助你掌握使用ROS对机器人进行编程所需的基本概念。然后带你探索开发仿真机器人和实际机器人,以及从头开始应用导航和操纵等高级功能。随着阅读的深入,你将学习如何创建 ROS 控制器和插件,并探索 ROS 的工业应用程序及其与空中机器人的交互。最后,你将了解高效使用 ROS 的最佳实践和方法。 最终,你将学会如何在 ROS 中创建各种应用程序,并构建自己的第一个ROS机器人。 阅读本书,你将学到: ·使用7自由度机械臂和差动轮式移动机器人创建机器人模型。 ·使用Gazebo、CoppeliaSim和Webots等机器人模拟器。 ·使用SLAM和AMCL软件包实现差动驱动机器人的自主导航。 ·使用ROS与空中机器人进行并对它进行仿真。 ·探索ROS pluginlib、ROS nodelets 和 Gazebo等插件。 ·连接Arduino、机器人传感器和高端执行器等I/O板。
本书提供了实用且易于理解的示例,对ROS机器人编程的高级概念进行了全面的介绍。本书首先介绍用ROS进行机器人编程所需的基本概念和ROS框架,讨论了如何用运动规划库和ROS导航栈对机器人进行仿真和交互,还讨论了ROS插件、控制器和节点、各种ROS接口(如何把I/O开发板、传感器和执行器等与ROS连接起来),以及如何用ROS和ROS-Industrial对复杂机器人进行仿真。最后,本书介绍了ROS的故障排除和最佳实践。
目 录 Contents
前言
作者简介
审校者简介
第一部分 ROS编程基本技能
第1章 ROS简介 2
1.1 为什么选择ROS 2
1.2 理解ROS文件系统级别 3
1.2.1 ROS功能包 4
1.2.2 ROS元功能包 5
1.2.3 ROS消息 6
1.2.4 ROS服务 7
1.3 理解ROS计算图级别 8
1.3.1 ROS节点 9
1.3.2 ROS信息 11
1.3.3 ROS主题 11
1.3.4 ROS服务 12
1.3.5 ROS bag文件 12
1.3.6 ROS节点管理器 13
1.3.7 使用ROS参数 14
1.4 ROS社区级别 15
1.5 准备工作 15
1.5.1 ROS发行版 15
1.5.2 运行ROS节点管理器和ROS参数服务器 16
1.5.3 检查roscore命令的输出 18
1.6 总结 19
1.7 问题 19
第2章 ROS编程入门 20
2.1 创建ROS功能包 20
2.1.1 使用ROS主题 22
2.1.2 创建ROS节点 22
2.1.3 编译节点 25
2.2 添加自定义的.msg文件和.srv文件 26
2.3 使用ROS 服务 29
2.3.1 使用ROS actionlib 33
2.3.2 编译ROS动作服务器和客户端 36
2.4 创建启动文件 38
2.5 主题、服务和actionlib的应用 40
2.6 总结 40
2.7 问题 41
第二部分 ROS机器人仿真
第3章 使用ROS进行3D建模 44
3.1 用于机器人建模的ROS软件包 44
3.2 使用URDF理解机器人建模 45
3.3 为机器人描述创建ROS软件包 47
3.4 创建我们的第一个URDF模型 48
3.5 解析URDF文件 49
3.6 在RViz中可视化3D机器人模型 51
3.7 向URDF模型添加物理属性和碰撞属性 53
3.8 使用xacro理解机器人建模 54
3.8.1 使用属性 55
3.8.2 使用数学表达式 55
3.8.3 使用宏 55
3.9 将xacro转换为URDF 56
3.10 为7-DOF机械臂创建机器人描述 56
3.11 解析7-DOF机械臂的xacro模型 58
3.11.1 使用常量 58
3.11.2 使用宏 58
3.11.3 包含其他xacro文件 59
3.11.4 在连杆中使用网格模型 59
3.11.5 使用机器人夹爪 60
3.11.6 在RViz中查看7-DOF机械臂 61
3.12 为差速驱动机器人创建机器人模型 63
3.13 总结 66
3.14 问题 67
第4章 使用ROS和Gazebo进行机器人仿真 68
4.1 使用Gazebo 和ROS仿真机械臂 68
4.2 为Gazebo创建机械臂仿真模型 69
4.2.1 为Gazebo机器人模型添加颜色和纹理 70
4.2.2 添加transmission标签来驱动模型 71
4.3 添加gazebo_ros_control插件 71
4.4 仿真装有Xtion Pro的机械臂 73
4.5 在Gazebo中使用ROS控制器移动机器人关节 76
4.5.1 理解ros_control软件包 76
4.5.2 不同类型的ROS控制器与硬件接口 76
4.5.3 ROS控制器如何与Gazebo交互 77
4.5.4 将关节状态控制器和关节位置控制器连接到机械臂 78
4.5.5 在Gazebo中启动ROS控制器 79
4.5.6 移动机器人关节 81
4.6 在Gazebo中仿真差速轮式机器人 82
4.6.1 向Gazebo中添加激光雷达 83
4.6.2 在Gazebo中控制机器人移动 85
4.6.3 为启动文件添加关节状态发布者 86
4.7 添加ROS遥控节点 86
4.8 总结 88
4.9 问题 88
第5章 使用ROS、CoppeliaSim和Webots进行机器人仿真 89
5.1 使用ROS配置CoppeliaSim 89
5.1.1 理解RosInterface插件 92
5.1.2 处理ROS消息 95
5.2 使用CoppeliaSim和ROS仿真机械臂 96
5.3 使用ROS设置Webots 99
5.3.1 Webots仿真器简介 100
5.3.2 使用Webots仿真移动机器人 101
5.4 编写第一个控制器 103
5.5 使用webots_ros编写遥控节点 107
5.6 总结 110
5.7 问题 111
第6章 使用ROS MoveIt!与Navigation栈 112
6.1 MoveIt!架构 113
6.1.1 move_group节点 113
6.1.2 基于MoveIt!的运动规划 114
6.1.3 运动规划请求适配器 115
6.1.4 MoveIt!规划场景 116
6.1.5 MoveIt!运动学处理 117
6.1.6 MoveIt!碰撞检测 117
6.2 基于设置助手生成MoveIt!配置包 117
6.3 在RViz中使用MoveIt!配置包进行机器人运动规划 123
6.3.1 使用RViz的运动规划插件 124
6.3.2 MoveIt!配置包与Gazebo交互 127
6.4 理解ROS导航栈 132
6.4.1 导航栈的硬件需求 132
6.4.2 使用导航软件包 133
6.4.3 使用导航栈 134
6.5 使用SLAM构建地图 135
6.5.1 为gmapping创建启动文件 136
6.5.2 在差速驱动机器人上运行SLAM 137
6.5.3 基于amcl和静态地图实现自主导航 140
6.5.4 创建amcl启动文件 140
6.6 总结 143
6.7 问题 143
第7章 探索ROS MoveIt!的高级功能 144
7.1 使用move_group的C 接口进行运动规划 144
7.1.1 使用MoveIt! C API规划随机路径 144
7.1.2 使用MoveIt! C API规划自定义路径 145
7.1.3 使用MoveIt!进行机械臂的碰撞检测 147
7.2 使用MoveIt!和Gazebo进行感知 153
7.3 使用MoveIt!操作对象 158
7.3.1 使用MoveIt!执行拾取和放置任务 158
7.3.2 在Gazebo和真实的机器人中应用抓取和放置动作 162
7.4 了解用于机器人硬件接口的DYNAMIXEL ROS伺服控制器 162
7.4.1 DYNAMIXEL伺服舵机 163
7.4.2 DYNAMIXEL-ROS接口 164
7.5 7-DOF机械臂与ROS MoveIt! 164
7.5.1 为COOL机械臂创建一个控制器软件包 165
7.5.2 COOL机械臂的MoveIt!配置 168
7.6 总结 170
7.7 问题 170
第8章 ROS在空中机器人上的应用 171
8.1 使用空中机器人 171
8.1.1 UAV硬件 172
8.1.2 Pixhawk自动驾驶仪 172
8.2 使用PX4飞行控制栈 173
8.2.1 PX4固件架构 176
8.2.2 PX4 SITL 178
8.3 PC/自动驾驶仪通信 179
8.4 编写ROS-PX4应用程序 181
8.4.1 编写轨迹流线 186
8.4.2 PX4的外部位姿估计 187
8.5 使用RotorS仿真框架 188
8.5.1 安装RotorS 188
8.5.2 RotorS软件包 190
8.5.3 创建一种新的无人机模型 192
8.5.4 与RotorS电机模型交互 199
8.6 总结 200
8.7 问题 200
第三部分 ROS机器人硬件原型开发
第9章 将I/O板传感器和执行器连接到ROS 202
9.1 理解Arduino-ROS接口 202
9.2 Arduino-ROS接口 203
9.2.1 理解ROS中的rosserial包 203
9.2.2 理解Arduino中的ROS节点API 207
9.2.3 ROS-Arduino发布者和订阅者示例 210
9.2.4 ROS-Arduino示例:用按钮闪烁LED 213
9.2.5 ROS-Arduino示例:加速度计ADXL 335 215
9.2.6 ROS-Arduino示例:超声波距离传感器 216
9.2.7 ROS-Arduino示例:里程计数据发布器 220
9.3 将非Arduino板连接到ROS 222
9.3.1 设置Odroid-C4、树莓派4和Jetson Nano用于安装ROS 222
9.3.2 在树莓派4上使用ROS闪烁LED 228
9.3.3 在树莓派2上使用ROS通过按钮闪烁LED 230
9.3.4 在树莓派4上运行示例 233
9.4 将DYNAMIXEL执行器连接到ROS 234
9.5 总结 235
9.6 问题 235
第10章 使用ROS、OpenCV和PCL编程视觉传感器 236
10.1 软硬件需求 236
10.2 理解ROS-OpenCV接口软件包 236
10.3 理解ROS-PCL接口软件包 237
10.4 连接ROS与USB网络摄像头 239
10.5 校准ROS摄像机 241
10.6 将Kinect和Asus Xtion Pro与ROS连接 249
10.7 连接Intel RealSense摄像机与ROS 251
10.8 连接Hokuyo激光雷达与ROS 255
10.9 使用点云数据 257
10.9.1 如何发布点云 257
10.9.2 如何订阅和处理点云 259
10.9.3 从PCD文件读取和发布点云 262
10.10 总结 264
10.11 问题 265
第11章 在ROS中构建与连接差速驱动移动机器人硬件 266
11.1 技术要求 266
11.1.1 软件要求 267
11.1.2 网络设置 268
11.1.3 硬件要求 268
11.2 一款DIY自主移动机器人—Remo简介 268
11.2.1 Remo硬件组件 269
11.2.2 ROS Navigation Stack的软件需求 271
11.3 为差速驱动机器人开发底层控制器和ROS Control高级硬件接口 272
11.3.1 为Remo实现底层基本控制器 274
11.3.2 用于差速驱动机器人的ROS Control高级硬件接口 278
11.3.3 Remo机器人的ROS节点和主题概述 280
11.4 配置和使用Navigation Stack 283
11.4.1 配置gmapping节点并创建地图 284
11.4.2 使用gmapping节点 284
11.4.3 配置move_base节点 285
11.4.4 配置AMCL节点 286
11.4.5 AMCL规划 287
11.4.6 在仿真环境中使用Remo机器人 289
11.5 总结 291
11.6 问题 291
第四部分 高级ROS编程
第12章 使用pluginlib、nodelet和Gazebo插件 294
12.1 理解pluginlib 294
12.2 理解ROS小节点 300
12.3 理解并创建Gazebo插件 306
12.4 总结 309
12.5 问题 310
第13章 编写ROS控制器和可视化插件 311
13.1 理解ros_control包 311
13.2 在ROS中编写一个基本的关节控制器 314
13.2.1 创建控制器包 314
13.2.2 创建控制器头文件 315
13.2.3 创建控制器源文件 315
13.2.4 控制器源文件的详细说明 317
13.2.5 创建插件描述文件 318
13.2.6 更新package.xml 318
13.2.7 更新CMakeLists.txt 318
13.2.8 构建控制器 319
13.2.9 编写控制器配置文件 319
13.2.10 编写控制器的启动文件 319
13.2.11 在Gazebo中运行控制器和7-DOF机械臂 320
13.3 了解RViz工具及其插件 322
13.3.1 Displays面板 323
13.3.2 RViz工具栏 323
13.3.3 Views面板 323
13.3.4 Time面板 323
13.3.5 可停靠面板 324
13.4 为远程操作编写RViz插件 324
13.5 总结 330
13.6 问题 330
第14章 在MATLAB和Simulink中使用ROS 331
14.1 开始使用MATLAB 331
14.2 开始使用ROS Toolbox和MATLAB 332
14.3 利用MATLAB和Gazebo开发机器人应用程序 338
14.4 开始使用ROS和Simulink 341
14.4.1 在Simulink中创建一个波信号积分器 342
14.4.2 在Simulink中发布ROS消息 344
14.4.3 在Simulink中订阅ROS主题 346
14.5 在Simulink中开发一个简单的控制系统 348
14.6 总结 351
14.7 问题 351
第15章 ROS在工业机器人中的应用 352
15.1 理解ROS-Industrial包 352
15.2 ROS-Industrial的目标 352
15.3 ROS-Industrial简史 353
15.4 安装ROS-Industrial包 353
15.5 为工业机器人创建URDF 355
15.6 为工业机器人创建MoveIt!配置 356
15.7 更新MoveIt!的配置文件 359
15.8 为UR机器人的机械臂安装
ROS-Industrial软件包 361
15.9 为UR机器人安装ROS接口 362
15.10 理解UR机械臂的MoveIt!配置 363
15.11 UR硬件和ROS-I 365
15.12 使用MoveIt!配置ABB机器人 366
15.13 了解ROS-Industrial机器人支持包 369
15.14 了解ROS-Industrial机器人客户端包 370
15.15 设计工业机器人客户端节点 371
15.16 了解ROS-Industrial机器人驱动程序包 372
15.17 理解MoveIt! IKFast插件 374
15.18 为ABB IRB 6640机器人创建MoveIt! IKFast插件 374
15.19 OpenRave和IKFast模块 375
15.19.1 MoveIt! IKFast 375
15.19.2 安装MoveIt! IKFast包 375
15.19.3 在Ubuntu 20.04上安装OpenRave 375
15.20 创建使用OpenRave的机器人的COLLADA文件 376
15.21 为IRB 6640机器人生成IKFast CPP文件 378
15.22 创建MoveIt! IKFast插件 379
15.23 总结 380
15.24 问题 380
第16章 ROS的故障排除和最佳实践 381
16.1 为ROS设置Visual Studio Code IDE开发环境 381
16.1.1 安装/卸载Visual Studio Code 382
16.1.2 开始使用Visual Studio Code 382
16.1.3 安装新的Visual Studio Code扩展 383
16.1.4 从Visual Studio Code的 ROS扩展开始 384
16.1.5 检查和构建ROS工作空间 386
16.1.6 使用Visual Studio Code管理ROS包 387
16.1.7 可视化URDF文件的预览 387
16.2 ROS的最佳实践 388
16.3 ROS包的最佳编程实践 391
16.4 ROS中的重要故障排除提示 392
16.5 总结 394
16.6 问题 395
前 言 Preface
机器人操作系统(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。”
作者简介 About the Authors
郎坦·约瑟夫(Lentin Joseph)是一位来自印度的作家、机器人学家和机器人企业家。他在喀拉拉邦的科钦市经营一家名为Qbotics Labs的机器人软件公司。他在机器人领域有十几年的经验,主要涉及ROS、OpenCV和PCL。他曾撰写了关于ROS的其他书籍,包括Learning Robotics Using Python(第1版和第2版)、Mastering ROS for Robotics Programming
(第1版和第2版)、ROS Robotics Projects(第1版和第2版),以及Robot Operating System (ROS) for Absolute Beginners。他拥有机器人与自动化硕士学位,并曾在美国卡内基梅隆大学(CMU)的机器人研究所工作。他还是TEDx的演讲者。
乔纳森·卡卡切(Jonathan Cacace)于1987年12月13日出生于意大利那不勒斯。他于2012年获得那不勒斯费德里科二世大学计算机科学硕士学位,并于2016年获得该校机器人学博士学位。目前,他是那不勒斯费德里科二世大学PRISMA实验室(Projects of Robotics for Industry and Services, Mechatronics and Automation Laboratory)的助理教授,参与了多个研究项目,所涉领域包括工业4.0中的人机交互,以及用于检测、维护的无人机和机械臂自主控制等。
About the Revisers 审校者简介
Nick Rotella在美国库珀联盟学院获得机械工程学士学位,随后又在美国南加州大学获得计算机科学硕士和博士学位。作为一名机器人专家,Nick认为自己是一名全面的科学家、开发人员和工程师。他的博士论文主要侧重于基于模型的仿人机器人运动规划和控制,他还从事过海洋、无人机、汽车、采矿和物流领域的自主应用程序研究。他在控制方面的经验基于对动力学、估计和轨迹生成理论的深刻理解。Nick曾为高性能控制编写过各级自主系统栈的软件。
Prateek Nagras是机器人初创公司TechnoYantra(该公司已于2022年被Acceleration Robotics收购)的创始人。他是一名工程师,曾在印度浦那的VIT学习仪器仪表和控制工程,并在德国亚琛的FH公司学习机电一体化,专攻机器人技术。
评论
还没有评论。