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

ROS机器人开发:实用案例分析
作者 : [美]卡罗尔·费尔柴尔德(Carol Fairchild),托马斯 L.哈曼( Thomas L. Harman) 著
译者 : 吴中红 石章松 潘丽 等译
出版日期 : 2018-03-29
ISBN : 978-7-111-59372-0
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 317
开本 : 16
原书名 : ROS Robotics By Example
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

涵盖模拟机器人模型构建与真实机器人操控,有无真机均可上手
全面介绍移动机器人、飞行及机器人与机器人手臂等各类机器人的ROS实现,
包含丰富实例,并提供源代码

图书前言

学习ROS,并通过支持ROS的机器人(如Baxter和TurtleBot)进行实际操作,将开启一段神奇的机器人技术的学习之旅。ROS具有十分突出的优点以及鲜明的特色,但其学习曲线也较为陡峭。通过对许多实际的ROS应用的尝试,并在总结了一系列错误的经验教训之后,我们摸索出了一条切实有效的学习路径,并形成了本书所论述的内容。本书会呈现我们关于ROS的见解中最重要的知识,并在读者的ROS学习之旅中提供循序渐进的引导。我们将结合典型的ROS机器人进行介绍,这些机器人包括TurtleBot、Baxter、Crazyflie以及Bebop,此外还将通过模拟机器人对相关技术进行论述,这些模拟机器人主要有Turtlesim和Hector。
除了对一般性的ROS技术进行论述外,本书还将对ROS机器人的高级应用特性进行讲解。本书首先对ROS的基本配置进行介绍,内容包括ROS的安装、基本概念、主要的功能包与工具简介等。然后对相应的故障排查方法进行了论述,当读者在实际操作中得到的结果与预期结果不相符时,可以按照相应方法进行故障的排查。然后通过模拟的方式,先对Turtlesim的ROS组成模块进行了描述,之后对其他几类典型机器人的ROS组成模块进行了相应的介绍。对ROS组成模块的介绍,一般遵循的流程是首先介绍基本的ROS命令,然后对ROS的功能包、节点、主题以及消息进行论述,以此来对ROS机器人操作系统的整体内容进行详细的阐述。为了对书中选用的机器人的整体性能进行描述,书中还给出了相关机器人的技术资料。
ROS涵盖了完整的软件概念、实现以及相应的工具,其目标是为机器人提供复杂系统的同质化图景以及一体化的软件集成。传感器的外部扩展库、执行器驱动以及相应的接口均已包含其中,此外ROS还囊括了大部分目前最新最有效的算法。对于如OpenCV这样十分流行的第三方开源项目,ROS并未包含,但可以直接对其进行导入。此外,为了节省研究人员的时间,使研究人员能够将精力集中于自己的兴趣点上,ROS还提供了一系列的辅助工具,来对机器人进行控制、监控以及调试,这些工具包括rqt、rviz、Gazebo、动态配置工具以及MoveIt等。
本书将循序渐进地以实例的形式对ROS的各部分内容进行阐述,每一部分内容都是实际的机器人实例的组成部分。对于TurtleBot机器人,主要对导航和地图构建主题进行探索;对于Baxter机器人,则主要介绍关节控制与路径规划主题。对于书中提及的机器人,将以简单的Python脚本为例来实现ROS的各个元素。读者都能够通过模拟机器人对书中内容加以实操练习。此外,书中还介绍了如何以模拟的形式设计并构建读者自己的机器人模型。
ROS本身的优异性能、支持ROS的机器人的多样性,以及ROS社区的支持,共同构建起了一个值得一试的机器人开发ROS实例的学习之旅。除了书中的内容之外,读者还能够找到丰富的在线扩展指南、wiki资源、论坛、开发技巧等内容。那么现在就从本书开始,一起踏上ROS机器人开发的学习之旅吧。
本书涵盖的内容
第1章主要阐述了学习ROS的优势,同时论述了支持ROS的机器人平台的主要亮点。对ROS在Ubuntu操作系统下的安装流程进行了介绍。描述了ROS的框架结构,并对其主要组件进行了描述。对Turtlesim模拟机器人程序进行了简述,同时为了进一步加深读者对ROS组件以及ROS命令的理解,对Turtlesim的使用进行了介绍。
第2章主要介绍了ROS的模拟环境Gazebo。本章内容将引导读者一步步构建起一台差分驱动的两轮模拟机器人,并介绍了统一机器人描述格式(Universal Robotic Description Format,URDF)的相关内容。此外还将详细地介绍基本的ROS工具(如rviz、Gazebo等)的使用方法,从而使读者能够在模拟环境下展示所构建的机器人,并与之进行交互。
第3章主要介绍一款真实的机器人—TurtleBot的操作和控制。如果读者没有该型机器人,那么可以在Gazebo模拟环境下使用模拟的TurtleBot机器人来学习本章的内容。读者可以通过ROS命令、Python脚本程序等多种方法实现对TurtleBot机器人的操控。此外,本章还讲述了使用rqt工具及其插件对TurtleBot进行控制以及对其传感器数据进行监控的方法。
第4章探讨了视觉传感器以及对于机器人创建周围环境地图的相关内容。论述了可用作TurtleBot视觉系统的3D传感器,并介绍了在ROS下进行设置与操作,使得机器人具备自主导航能力的内容。在TurtleBot机器人导航模块中,应用了同步定位与地图创建技术。
第5章对复杂的机器人手臂进行了简要介绍。采用Xacro的宏语言设计并构建了一个模拟的机器人手臂。为了操作机器人手臂,在Gazebo环境下创建了相应的控制器。通过控制器的创建,论述了简单的机器人手臂的结构和物理学的相关内容。
第6章对复杂的机器人手臂控制进行了更进一步的探讨。对最新型的Baxter机器人进行了介绍,这也是本书中介绍的第二款机器人。Baxter机器人有两个7自由度的手臂以及其他一系列的传感器,并提供了一个开源的Baxter机器人模拟器,本章正是采用这一机器人手臂模拟器进行论述。通过实例的形式,分别在位置控制模式、速度控制模式与扭矩控制模式下,对机器人手臂的正向与反向运动控制进行了介绍。此外,本章还对一个非常有用的ROS工具—MoveIt进行了介绍,MoveIt既可以对模拟的Baxter机器人手臂进行运动规划的仿真和执行,也可以对真实的Baxter机器人手臂进行运动规划的仿真和执行。
第7章对一个日渐风靡的机器人领域—无人机进行了论述。本章主要针对四旋翼的相关内容进行阐述,对四旋翼硬件与飞行控制的概念进行了论述。对四旋翼模拟器Hector的下载与控制进行了介绍,通过对模拟四旋翼飞行操控的练习,使读者能够对真实的四旋翼(如Bitcraze的Crazyflie或者Parrot的Bebop)进行操控。对四旋翼的控制可以使用遥控或者ROS的主题/消息命令实现。
第8章对一系列可以用来对支持ROS的机器人进行控制的外部设备进行了描述。Joystick游戏手柄、控制器开发板(Arduino和树莓派)以及所有移动设备均具有ROS接口,这些接口可以集成到读者的机器人系统之中来实现对机器人更多的外部控制。
第9章对书中前面章节所介绍的多个ROS组件与概念进行集成,从而实现一个十分具有挑战性的任务:自主飞行。在该任务中,读者将在采用Kinect 3D传感器构建的地图下控制Crazyflie四旋翼飞行器自动飞往一个“远方”的目标。这一任务采用了ROS的消息通信机制与协同传输,从而得到四旋翼飞行器上Kinect的视野以及目标相对于四旋翼的位置,从而对飞行进行精密的规划,在此基础上,将采用了PID控制的Crazyflie的飞行控制软件作为飞行任务中的飞行控制模块,从而实现了四旋翼的自主飞行。
第10章对高级ROS机器人应用的相关内容进行了论述,激励读者对ROS功能做更加深入的学习。对机器人的语音控制、人脸检测与识别以及机器人语音功能等都做了描述。
学习本书内容所需的基础知识与设备
本书的形式是给出各项任务内容的步骤指令,并由读者参与其中,具体实操。读者需要一台安装了Ubuntu14.04(Trusty Tahr)的电脑。同时也支持其他版本的Ubuntu以及Linux发行版,此外也支持Mac OS X、Android和Windows,不过需要参考ROS wiki的文档(地址:http://wiki.ros.org/Distributions)。
本书中所用的ROS版本为Indigo Igloo,该版本是目前推荐的稳定发行版,对该版本的支持将持续到2019年4月。书中内容对其他版本的ROS理论上是可支持的,但是并没有进行测试。
书中所有的软件都是开源的,可以免费获取和使用。在对相关软件进行介绍时会提供相关的下载说明。本书第1章给出了下载和设置ROS软件环境的相应指令。
下载软件时,推荐使用Debian软件包。当不存在相应的Debian包时,推荐从GitHub软件发行库中下载。
Gazebo模拟器提供了增强的图形化处理功能,推荐使用专用的图形选项卡进行操作,但并不强求。
涉及的外部设备主要包括3D传感器、Xbox或者PS3控制器,以及Arduino或者是Raspberry Pi控制板、Android移动设备等。
本书面向的读者人群
本书主要面向机器人开发人员,无论是业余爱好者还是相关研究人员,无论是专业人士还是对ROS感兴趣的人,都能从书中获益,如果具备GNU/Linux系统和Python语言的相关知识则更好。
示例代码下载
读者也可以在GitHub上下载相应的代码包,地址为:https://github.com/Packt Publi-shing/ROS-Robotics-By-Example。此外,我们也给出了丰富的其他各类书籍的相关下载内容(代码包、视频等),地址为:https://github.com/Packt Publishing/,欢迎读者下载使用。
书中彩图下载
我们还以PDF文件格式的方式提供了书中有关的屏幕截图以及图表的彩图文件。这些彩图能够便于读者理解输出内容的变化。读者可以通过下述网址下载相关内容:http://www.packtpub.com/sites/default/files/downloads/ROSRoboticsByExample_Color Images.pdf。

上架指导

人工智能/机器人

封底文字

本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。
通过阅读本书,你将:
? 了解ROS的基本原理及其在机器人实例中的应用
? 控制移动机器人在一个环境中自主导航
? 使用URDF和Xacro建模机器人,并在ROS Gazebo模拟中操作
? 控制视觉伺服的7自由度机器人手臂
? 使用四旋翼飞行器进行自主锚点
? 掌握Gazebo、rviz、rqt和Move-It等ROS工具的使用
? 使用移动设备和控制器控制机器人
? 联合机器人完成一个协作任务

译者序

工欲善其事,必先利其器。作为一门实践性极强的交叉性学科,机器人学的学习过程要求学习者结合各类机器人进行实践操作,来学习相关应用程序的开发。然而,各类机器人平台的价格令许多学习者望而却步。
目前市面上诸多介绍机器人开发的书籍中,有的专注于理论讲解,其中一串串的复杂公式令人望而生畏,有的虽然主要介绍实践性的内容,但忽略了很多读者没有一台真正的机器人的现状。而一台机器人往往价值不菲,面对充满诱惑的机器人技术学习之旅,许多人因为没有一台机器人而戛然止步。本书将为那些没有实际机器人的爱好者提供一条学习机器人应用程序开发的有效途径。
本书针对基于ROS的机器人开发技术进行介绍。ROS的特点和优点在许多书籍中都做过介绍,这里不再赘述。下面着重对本书的特点进行说明,以利于读者选择和学习。
涵盖模拟机器人模型构建与真实机器人操控,有无真机均可上手。
本书对使用URDF文件以及SDF文件来构建模拟的两轮机器人、机器人手臂模型的方法进行了详细的描述,并对Gazebo仿真系统知识进行了深入的讲述,为读者构建自己的模拟机器人提供了引导,同时为没有实际机器人的读者提供了学习机器人开发的途径。
机器人类型包括地面机器人、空中机器人与机器人手臂,全面满足各类读者。
本书对TurtleBot机器人、Bebop四旋翼无人机、Crazyflie四旋翼无人机以及Baxter机器人手臂均进行了全面的介绍,内容包括各类机器人的虚拟模型构建、导航控制、机械臂的关节控制、路径规划、基于外部设备(游戏手柄、控制开发板等)的机器人控制以及ROS的高级应用等内容,内容全面而新颖。
应用场景包括机器人操控、导航以及机器人手臂路径规划、移动应用开发。
针对各类机器人,分别针对相应类型机器人的特点与主要应用场景,进行了模拟环境下的模型构建与操控以及典型真实机器人操控的内容讲解,并提供了相应的源代码,以供参考和学习,极大地降低了读者的学习难度,便于与作者提供的例程进行对照学习,事半功倍。
本书的两位作者均是长期从事ROS机器人研究与教学的专家,本书的内容深入浅出、覆盖面广,相信必将给读者带来不一样的学习体验。尽管目前ROS版本已经发展到Lunar,但事实上,Indigo仍是目前应用最为广泛的发行版,也是机器人研究领域中开源项目支持最多的版本。相较于目前的Jade、Kinetic以及Lunar版本,Indigo版本并无本质上的区别,其区别主要体现在与Ubuntu系统(Linux系统)内核版本的绑定上。而随着ROS 2.0的发布,在实时处理方面有需要的读者则可以直接考虑学习ROS 2.0,而本书也同样能够提供一定的参考。
鉴于译者水平有限,书中难免存在不足与纰漏,欢迎读者不吝赐教,对于书中的不当之处,读者可以发送邮件到 yizhousan@163.com,感谢您的来信与指正。

图书目录

译者序
作者简介
前言
第1章 ROS初体验1
1.1 ROS的用途以及学习ROS的好处1
1.2 哪些机器人采用了ROS2
1.3 安装并启动ROS4
1.3.1 配置Ubuntu系统的软件源4
1.3.2 设置Ubuntu系统软件源列表5
1.3.3 设置Ubuntu系统密钥5
1.3.4 安装ROS Indigo5
1.3.5 初始化rosdep6
1.3.6 环境设置6
1.3.7 安装rosinstall7
1.3.8 故障排除—ROS环境测试7
1.4 生成一个catkin工作空间7
1.5 ROS的功能包与清单8
1.5.1 ROS清单9
1.5.2 探索ROS功能包9
1.6 ROS节点与ROS节点管理器11
1.6.1 ROS节点11
1.6.2 ROS节点管理器12
1.6.3 确定节点和主题的ROS命令14
1.7 第一个ROS机器人模拟程序—Turtlesim15
1.7.1 启动Turtlesim节点15
1.7.2 Turtlesim节点16
1.7.3 Turtlesim主题与消息18
1.7.4 Turtlesim的参数服务器20
1.7.5 移动乌龟的ROS服务22
1.8 ROS命令小结23
1.9 本章小结24
第2章 构建一个模拟的两轮ROS机器人25
2.1 rviz25
2.1.1 安装和启动rviz26
2.1.2 使用rviz27
2.2 生成并构建ROS功能包29
2.3 构建差分驱动的机器人URDF30
2.3.1 生成机器人底座31
2.3.2 使用roslaunch32
2.3.3 添加轮子35
2.3.4 添加小脚轮37
2.3.5 添加颜色38
2.3.6 添加碰撞属性40
2.3.7 移动轮子41
2.3.8 tf和robot_state_publisher简介42
2.3.9 添加物理学属性42
2.3.10 试用URDF工具43
2.4 Gazebo45
2.4.1 安装并启动Gazebo45
2.4.2 使用roslaunch启动Gazebo46
2.4.3 使用Gazebo47
2.4.4 机器人URDF的修改50
2.4.5 Gazebo模型验证51
2.4.6 在Gazebo中查看URDF51
2.4.7 机器人模型调整53
2.4.8 移动机器人模型53
2.4.9 其他的机器人仿真环境54
2.5 本章小结55
第3章 TurtleBot机器人操控56
3.1 TurtleBot机器人简介56
3.2 下载TurtleBot模拟器软件57
3.3 在Gazebo中启动TurtleBot模拟器58
3.3.1 常见问题与故障排除60
3.3.2 ROS命令与Gazebo61
3.3.3 模拟环境下使用键盘远程控制TurtleBot63
3.4 控制一台真正的TurtleBot机器人的准备64
3.5 联接上网本与远程计算机66
3.5.1 网络类型67
3.5.2 网络地址67
3.5.3 远程计算机网络设置68
3.5.4 上网本网络设置69
3.5.5 安全外壳协议联接69
3.5.6 网络设置小结70
3.5.7 排查网络联接中的故障70
3.5.8 TurtleBot机器人系统测试70
3.6 TurtleBot机器人的硬件规格参数72
3.7 移动真实的TurtleBot机器人73
3.7.1 采用键盘远程控制TurtleBot机器人移动74
3.7.2 采用ROS命令控制TurtleBot机器人移动75
3.7.3 编写第一个Python脚本程序控制TurtleBot机器人移动76
3.8 rqt工具简介79
3.8.1 rqt_graph79
3.8.2 rqt的消息发布与主题监控82
3.9 TurtleBot机器人的里程计84
3.9.1 模拟的TurtleBot机器人的测程84
3.9.2 真实的TurtleBot机器人的里程计在rviz下的显示86
3.10 TurtleBot机器人的自动充电88
3.11 本章小结90
第4章 TurtleBot机器人导航91
4.1 TurtleBot机器人的3D视觉系统92
4.1.1 3D视觉传感器原理92
4.1.2 3D传感器对比92
4.1.3 障碍物规避的缺陷96
4.2 配置TurtleBot机器人并安装3D传感器软件96
4.2.1 Kinect96
4.2.2 ASUS与PrimeSense98
4.2.3 摄像头软件结构98
4.2.4 术语界定98
4.3 独立模式下测试3D传感器99
4.4 运行ROS可视化节点100
4.4.1 使用Image Viewer可视化数据100
4.4.2 使用rviz可视化数据102
4.5 TurtleBot机器人导航105
4.5.1 采用TurtleBot机器人构建房间地图105
4.5.2 采用TurtleBot机器人实现自主导航109
4.5.3 rqt_reconfigure116
4.5.4 进一步探索ROS导航117
4.6 本章小结117
第5章 构建模拟的机器人手臂119
5.1 Xacro的特点119
5.2 采用Xacro建立一个关节式机器人手臂URDF121
5.2.1 使用Xacro属性标签121
5.2.2 使用roslaunch启动rrbot124
5.2.3 使用Xacro的包含与宏标签126
5.2.4 给机器人手臂添加网格129
5.3 在Gazebo中控制关节式机器人手臂133
5.3.1 添加Gazebo特定的元素133
5.3.2 将机器人手臂固定在世界坐标系下135
5.3.3 在Gazebo中查看机器人手臂135
5.3.4 给Xacro添加控件136
5.3.5 采用ROS命令行控制机器人手臂140
5.3.6 采用rqt控制机器人手臂141
5.4 本章小结143
第6章 机器人手臂摇摆的关节控制144
6.1 Baxter简介145
6.1.1 Baxter,一款研究型机器人146
6.1.2 Baxter模拟器147
6.2 Baxter的手臂147
6.2.1 Baxter的俯仰关节149
6.2.2 Baxter的滚转关节149
6.2.3 Baxter的坐标系149
6.2.4 Baxter手臂的控制模式150
6.2.5 Baxter手臂抓手151
6.2.6 Baxter手臂的传感器152
6.3 下载Baxter软件152
6.3.1 安装Baxter SDK软件152
6.3.2 安装Baxter模拟器154
6.3.3 配置Baxter shell155
6.3.4 安装MoveIt156
6.4 在Gazebo中启动Baxter模拟器157
6.4.1 启动Baxter模拟器157
6.4.2 “热身”练习161
6.4.3 弯曲Baxter手臂163
6.4.4 Baxter手臂控制器的调校173
6.5 Baxter手臂与正向运动学174
6.5.1 关节与关节状态发布器174
6.5.2 理解tf177
6.5.3 rviz下的tf坐标系180
6.5.4 查看机器人元素的tf树181
6.6 MoveIt简介182
6.6.1 采用MoveIt给Baxter手臂进行运动规划184
6.6.2 在场景中添加物体185
6.6.3 采用MoveIt进行避障运动规划186
6.7 配置真实的Baxter机器人188
6.8 控制真实的Baxter机器人190
6.8.1 控制关节到达航路点190
6.8.2 控制关节的力矩弹簧191
6.8.3 关节速度控制演示192
6.8.4 其他示例192
6.8.5 视觉伺服和抓握192
6.9 反向运动学193
6.10 本章小结196
第7章 空中机器人基本操控198
7.1 四旋翼飞行器简介199
7.1.1 风靡的四旋翼飞行器199
7.1.2 滚转角、俯仰角与偏航角200
7.1.3 四旋翼飞行器原理201
7.1.4 四旋翼飞行器的组成203
7.1.5 添加传感器203
7.1.6 四旋翼飞行器的通信204
7.2 四旋翼飞行器的传感器204
7.2.1 惯性测量单元205
7.2.2 四旋翼飞行器状态传感器205
7.3 放飞前的准备工作205
7.3.1 四旋翼飞行器检测206
7.3.2 飞行前检测列表206
7.3.3 飞行中的注意事项207
7.3.4 需要遵循的规则和条例207
7.4 在无人机中使用ROS208
7.5 Hector四旋翼飞行器简介208
7.5.1 下载Hector Quadrotor功能包209
7.5.2 在Gazebo中启动Hector四旋翼飞行器210
7.6 Crazyflie 2.0简介216
7.6.1 无ROS情况下的Crazy-flie控制218
7.6.2 使用Crazyradio PA进行通信218
7.6.3 加载Crazyflie ROS软件219
7.6.4 放飞前的检查222
7.6.5 使用teleop操控Crazy-flie飞行222
7.6.6 在运动捕获系统下飞行226
7.6.7 控制多个Crazyflie飞行226
7.7 Bebop简介227
7.7.1 加载bebop_autonomy软件228
7.7.2 Bebop飞行前的准备229
7.7.3 使用命令控制Bebop飞行230
7.8 本章小结231
第8章 使用外部设备控制机器人233
8.1 创建自定义ROS游戏控制器接口233
8.1.1 测试游戏控制器234
8.1.2 使用joy ROS功能包236
8.1.3 使用自定义游戏控制器接口控制Turtlesim237
8.2 创建自定义ROS Android设备接口242
8.2.1 使用Turtlebot Remocon进行操控242
8.2.2 使用Android设备实现ROS机器人的自定义控制245
8.3 在Arduino或树莓派上创建ROS节点249
8.3.1 使用Arduino249
8.3.2 使用树莓派260
8.4 本章小结261
第9章 操控Crazyflie执行飞行任务262
9.1 执行任务所需的组件263
9.1.1 用于Windows的Kinect v2263
9.1.2 Crazyflie操作263
9.1.3 任务软件结构264
9.1.4 OpenCV与ROS265
9.2 安装任务所需的软件266
9.2.1 安装libfreenect2267
9.2.2 安装iai_kinect2269
9.2.3 使用iai_kinect2元包271
9.3 任务设置277
9.3.1 探测Crazyflie与目标277
9.3.2 使用Kinect与OpenCV281
9.3.3 对Crazyflie进行跟踪283
9.4 Crazyflie控制285
9.5 放飞Crazyflie290
9.5.1 悬停290
9.5.2 飞往静止目标292
9.5.3 吸取的经验294
9.6 本章小结295
第10章 ROS功能扩展296
10.1 通过声音控制机器人296
10.1.1 Sphinx库297
10.1.2 Rospeex库298
10.2 给机器人添加语音功能299
10.3 给机器人添加人脸识别功能299
10.3.1 采用级联分类器进行人脸识别300
10.3.2 采用OpenCV进行人脸识别301
10.4 本章小结303

教学资源推荐
作者: [美]乌利塞斯·布拉加-内托(Ulisses Braga-Neto) 著
作者: [英]大卫·巴伯(David Barber) 著
作者: 南京大学人工智能学院
作者: Nils J.Nilsson
参考读物推荐
作者: 星环科技人工智能平台团队 编著
作者: 吴茂贵 王冬 李涛 杨本法 张利 著
作者: [美] 奥斯瓦尔德·坎佩萨托(Oswald Campesato)著