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

ROS机器人开发实践
作者 : 胡春旭 编著
出版日期 : 2018-05-15
ISBN : 978-7-111-59823-7
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 524
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书主要内容分为四个部分。
第一个部分是ROS基础,主要包含以下章节:
1. 初识ROS:讲解ROS的背景、特点以及安装方法;
2. ROS系统架构:讲解ROS的架构、关键概念、通讯机制等;
3. ROS基础:讲解ROS使用的基础知识,编程方法等;
4. ROS中的常用组件:讲解ROS的中常用工具包的使用方法;

第二个部分是基于ROS的应用:
5. 机器人平台搭建:讲解基于ROS的机器人平台设计方法;
6. 机器人建模与仿真:讲解ROS中机器人建模与仿真的具体实现方法;
7. SLAM与导航:讲解ROS中多种SLAM功能包的使用方法,以及自主导航的实现方法;
8. 机器视觉:讲解基于ROS的图像获取、传输、人脸识别、物体跟踪、二维码识别等机器视觉方面的实现方法;
9. 机器听觉:讲解基于ROS的中英文语音识别、语音输出、智能助手等功能的实现方法;
10. MoveIt机械臂控制:讲解ROS中MoveIt实现机械臂控制的方法;
11. ROS与机器学习:讲解基于ROS的TensorFlow机器学习平台的应用方法和具体案例;

第三个部分是ROS的进阶使用:
12. ROS进阶功能:讲解插件、动态重配置、有限状态机等ROS进阶功能;
13. 基于ROS的机器人:结合作者项目经历,讲解基于ROS的机器人设计与实现;

第四个部分是新一代ROS——ROS2:
14. 走近ROS2.0:讲解ROS1存在的问题和ROS2的框架特点,以及目前ROS2版本的使用方法。

图书特色

ROS机器人开发实践胡春旭?编著
全面详解ROS的基础概念及应用实践,涵盖ROS 2.0介绍
以实践为重心,讲解大量机器视觉、机器语音、机械臂控制、SLAM和
导航、机器学习等多方面ROS应用的实现原理和方法,并包含丰富实例

图书前言

2011年年底,笔者第一次接触ROS。当时实验室的一个师兄在学术会议上听说了ROS并意识到它的前景广阔,考虑到笔者当时的研究方向,于是建议笔者进行研究。那时国内外ROS的学习环境比较艰苦,几乎只有Wiki的基础教程(也没有现在这么完善)。所以一开始,笔者的内心是拒绝的,但还是硬着头皮开始钻研。虽然从拒绝到接受、从未知到熟悉,笔者经历了前所未有的磨难,但同时也收获了前所未有的喜悦。
在这个过程中,笔者也常常思考:ROS前景无限,但是国内还鲜有人知,即使有人知道,也会被困难吓倒。既然笔者经历过,何不总结一下,让其他人少走弯路。于是,笔者整理了自己学习过程中的一些资料和心得,在CSDN上以博客的形式发表,最终形成《ROS探索总结》系列博文,再后来转移到个人网站——古月居,至今仍保持更新。
2017年11月,ROS十周岁了!在走过的第一个十年里,ROS从蹒跚学步的孩童成长为机器人领域的巨人,再华丽蜕变出ROS 2。如今,大多数知名机器人平台和机器人公司都支持ROS,越来越多的机器人开发者也选择ROS作为开发框架。ROS已经逐渐成为机器人领域的事实标准,并将逐步从研发走向市场,助力机器人与人工智能的快速发展。
ROS的重要精神是分享,这也是开源软件的精神,所以才能看到如此活跃的ROS社区和众多软件功能包的源码,并且可以在此基础上快速完成二次开发。为了促进ROS在国内的发展,现在已经有很多人及组织在积极推广ROS,比如ROS星火计划、ROS暑期学校,以及网上各种各样的技术分享等,相信未来这个队伍会更加庞大。
本书以《ROS探索总结》系列博文为基础,重新整理了ROS相关基础要点,让读者能够迅速熟悉ROS的整体框架和设计原理;在此基础上,本书以实践为重心,讲解大量机器视觉、机器语音、机械臂控制、SLAM和导航、机器学习等多方面ROS应用的实现原理和方法,并且翻译了众多ROS中的图表、内容,帮助读者在实现ROS基础功能的同时深入理解基于ROS的机器人开发,将书中的内容用于实践。
本书共有14章,可以分为五个部分。
第一部分是ROS基础(第1~4章),帮助了解ROS框架,并且熟悉ROS中的关键概念以及实现方法。这部分的内容适合初学者,也适合作为有一定经验或者资深开发者的参考手册。
第二部分介绍如何搭建真实或仿真的机器人平台(第5~6章),帮助了解机器人系统的概念和组成,学习如何使用ROS实现机器人仿真,为后续的机器人实践做好准备。这部分的内容适合希望自己动手设计、开发一个完整机器人平台的读者。
第三部分介绍ROS中常用功能包的使用方法(第7~10章),涉及机器视觉、机器语音、机械臂控制、SLAM和导航等多个机器人研究领域。这部分的内容适合学习ROS基础后希望实践的开发者,以及从事相关领域的机器人开发者。
第四部分是ROS的进阶内容(第11~13章),介绍了ROS的进阶功能、ROS与机器学习的结合、搭载ROS的机器人平台。这部分的内容适合已经对ROS基础和应用有一定了解的读者。
第五部分介绍了新一代ROS——ROS 2(第14章),涉及ROS 2的架构、原理和使用方法。这部分的内容适合对ROS有一定了解,希望了解ROS 2、想要跟上ROS进化步伐的开发者。
因此,本书不仅适合希望了解、学习、应用ROS的机器人初学者,也适合有一定经验的机器人开发人员,同时也可以作为资深机器人开发者的参考手册。
书中的部分源代码来自社区中的ROS功能包,但是笔者在学习过程中对这些代码进行了大量修改,并且为大部分源代码加入了中文注释,以方便国内ROS初学者理解。这些代码涉及的编程语言不局限于C++或Python中的某一种,编程语言应该服务于具体场景,所以建议读者对这两种语言都有所了解,在不同的应用中发挥每种语言的优势。关于是否需要一款实物机器人作为学习平台,本书并没有特别要求,书中绝大部分功能和源码都可以在单独的计算机或仿真平台中运行,同时也会介绍实物机器人平台的搭建方法并且在实物机器人上完成相应的功能。所以只需要拥有一台运行Ubuntu系统的计算机,具备Linux工具的基本知识,了解C++和Python的编程方法,即可使用本书。
此外,本书创作过程中参考了众多已经出版的ROS原著、译著,笔者也将这些内容作为参考资料列出,并向这些著作的作者和译者致敬,希望读者在学习ROS的过程中,可以从这些著作中获取更多知识:
《Mastering ROS for Robotics Programming》,Lentin Joseph
《ROS By Example》(Volume 1/Volume 2),Patrick Goebel
《Programming Robots with ROS:A Practical Introduction to the Robot Operating System》, Morgan Quigley, Brian Gerkey & William D. Smart
《Learning ROS for Robotics Programming》,Aaron Martinez,Enrique Fernández
《A Gentle Introduction to ROS》,Jason M. O’Kane
《ROS Robotics Projects》,Lentin Joseph
《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez
在ROS探索实践与本书的创作过程中,离不开众多“贵人”的帮助。首先要感谢陪伴笔者辗转多次并一直无条件支持笔者的妻子,是她给了笔者前进的动力和思考的源泉;其次要感谢笔者的导师何顶新教授,以及为笔者打开ROS大门的任慰博士,还有曾与笔者一起彻夜调试的实验室同学顾强、方华启、胡灿、孙佳将、牛盼情、熊枭等;感谢机械工业出版社华章分社对本书的大力支持,以及Linksprite姚琪和ROSClub李文韬对本书所用硬件平台的赞助;最后要感谢ROS探索之路上一同前行的伙伴们,他们是张新宇教授、刘锦涛博士、林天麟博士、王滨海博士、杨帆、田博、张瑞雷、李卓、邱强、林浩鋕等,以及通过博客、邮件与笔者交流的众多机器人爱好者、开发者。要感谢的人太多,无法一一列举,但是笔者都感恩在心。
ROS成长迅速,机器人系统更是错综复杂,笔者才疏学浅,书中难免有不足和错误之处,欢迎各位读者批评指正,这也是笔者继续前进的动力。本书相关内容的更新和勘误会发布在微信公众号“古月居”和笔者的个人网站(http://www.guyuehome.com/)上,欢迎各位读者关注或者通过任何形式与笔者交流。
最后分享胡适先生的一句名言,愿你我共勉:怕什么真理无穷,进一寸有一寸的欢喜。

胡春旭
2017年12月于广东深圳

上架指导

人工智能/机器人

封底文字

机器人操作系统(ROS)的迅猛发展,已经促使它成为机器人领域的事实标准。本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;最后论述ROS 2的框架特点和使用方法,剖析ROS的发展方向。
本书不仅适合希望学习ROS和机器人技术的初学者,也适合专业的机器人开发者或工程师;若读者具备Linux系统的基本知识,了解C++和Python的基础编程方法,将更好地理解本书中的内容。

本书特色
- 理论与实践结合,快速上手ROS机器人开发;
- 仿真与实物结合,只需要一台计算机即可开始ROS实践;
- 提供所有源代码,并加入中文注释,方便读者理解;
- 覆盖众多机器人应用领域,适合机器人多种开发方向的爱好者和工程师。

推荐序

Foreword  推荐序一
“古月”容易让人想到古龙笔下的大侠。
大侠的特质是:开山建宗,随而遁影山林,空余武林纷说大侠的故事。
古月在CSDN留下了那些优美的博文——《ROS探索总结》,启蒙了多少人,开启了多少人对ROS的向往?随后,古月却“消失”了,任凭人们谈论着:“古月是谁?”“古月在哪里?”
2017年年初,我无意间看到古月另建了一个独立网站并发布了一些与ROS和机器人相关的博文,马上意识到“古月回来了”。遂邀请古月参加一年一度的ROS暑期学校。这样在2017年7月底,我们有幸在上海华东师范大学一睹古月尊容,也让很多学员在这里接受了ROS启蒙。
2018年1月25日,上海大雪,路过2015年ROS暑期学校的举办地——数学馆201,以及2016年和2017年的举办地——理科楼B222,想象着古月踏雪归来。这次他带着这本ROS武林秘籍,秉承ROS的开放精神,与更多的人分享ROS的基础和应用实践,尤其是包含最新的ROS 2.0的介绍。我想最可贵的是,此ROS武林秘籍通俗易懂。
古月的这本书注定将成为ROS江湖人手一本的“武林宝典”。

张新宇博士
华东师范大学智能机器人运动与视觉实验室负责人
机器人操作系统(ROS)暑期学校创办人




推荐序二  Foreword
2011年,当国内ROS资料还很匮乏的时候,正在读本科的古月同学为了开发一款机器人,一边摸索自学一边总结撰写了《ROS探索总结》系列博客。由于其博文条理清晰、主题丰富并具有很强的可操作性,文章一经发布便深受广大ROS网友的热爱。从此“古月大神”便成为群里热议的话题,“古月大神又出新文章啦!大家快去撸一撸啊!”……
后来,古月同学研究生毕业后就投身于机器人创业的时代浪潮,博客也便沉寂了许久。
你不在江湖,江湖却一直有你的传说!
记得是2015年冬天的一个深夜,我已经上床准备睡觉了,突然收到一个群聊信息,原来是机械工业出版社华章分社的张国强先生邀请我一起建议古月出版一本ROS相关的图书,我就从多年来学习阅读《ROS探索总结》的体会以及升级为图书后的风格和思路提了几点简单建议,大家也交换了一些经验和想法,当时古月表示可以考虑出书。说实话,我也深知出书是一件耗时费力的苦差事。当初我曾接受出版社邀约,拉了几个小伙伴团结在一起甚至想合力完成一本书,最后却也未能克服困难坚持下来,更别说一个人写了。尤其是对于古月这样一位创业者,时间成本更是巨大!
在2016年创办的星火计划ROS公开课以及华东师范大学ROS暑期学校等活动中,我们邀请古月一起合作进行了多次授课。他不仅仅讲课深入浅出,每次在实践环节小伙伴们调试机器人时,常常会被各种“坑”折磨得焦头烂额、欲哭无泪,当小伙伴们含泪请教古月老师且自己还没讲清楚情况时,古月仅扫一眼,马上就会胸有成竹地说:“是不是这个现象?你应该这么解决……”此情此景,让我不由得想起了一句话:“今天你遇到的坑,都是我当年走过的路。”可见古月不仅文笔好,实战能力也是超群。
后来也多次得知他创业繁忙,心中也暗自揣度出书的事情恐怕是要搁浅了。然而一直到2017年12月26日,突然收到古月发的一条信息。
“Hi,Top,还记得两年前筹备的那本书吗?现在终于写完了,希望邀请您写一个推荐序,不知是否方便?”
哇,这可真是大惊喜啊!我连忙打开电脑下载邮件,并将文件打印装订成书,放下手头的工作,重启“ROS探索之旅”,几个晚上看下来总体感觉如下。
首先,书的内容主要源自古月个人项目开发的经验习得,书名中的“实践”二字恰如其分!其次,书虽是源自《ROS探索总结》系列博文,但也绝不是博文的简单汇集,不仅内容上有了非常大的充实(增加了多个新的章节)和更新(跟踪至2017年12月ROS的最新进展),而且在结构编排上也更适合阅读和上机操作。厚厚的书稿承载着作者满满的诚意,除去国外某两本由ROS论文合集组成的图书,本书也是目前为止国内外已出版的内容最丰富的一本ROS相关图书。可见作者为此书花费了大量的心血!最后,作者对书中的示例代码进行了认真的调试,也做了大量的修改和注释。
作为人工智能的综合实体平台,当前阻碍机器人实现大规模应用的一项主要障碍就是软硬的不标准化(只能专用,无法通用)。每每针对某个特定应用场景设计机器人时,都需要花费大量成本和努力来对机器人进行设计和编程。即使完成之后,如果需要对机器人功能进行一个很小的改动,整个系统都需要进行成本很高的重新设计和开发,显然这是不符合可持续和可继承要求的,其限制了机器人的大规模应用与推广。
正如60年前软件行业放弃了从头编写程序的工作模式,ROS的出现是机器人开发的一场革命。如同从软件库和模块开始构建软件一样,通过ROS可以将机器人的标准算法例程化、软件模块化、成果共享化,后人可通过组合软件库和模块来实现十分复杂的功能。ROS有效地降低了工程的复杂度和工作量,让我们不仅可以很快地搭建出机器人系统,而且能够实现大型团队的协同工作与成果复用。这也正是我们努力推广ROS的主要动因。
愿与大家一同享受探索的欢喜!

刘锦涛(Top)博士
易科机器人实验室(ExBot Robotics Lab)负责人
星火计划联合发起人





推荐序三  Foreword
近年来机器人技术发展越发成熟,越来越多的机器人技术应用在不同的领域。基于机器人技术开发出来的产品推陈出新,如物流机器人、家庭陪护机器人、协作机器人、送餐机器人、清洁机器人、无人机、无人汽车等,可谓百花齐放。大众对机器人的认知及学习的兴趣也不断提升,对机器人相关的技术变得更为关注,而ROS就是一个很典型的例子。
ROS是一个专门针对机器人软件开发而设计的通信框架,源自美国斯坦福大学团队的一个开源项目,目前已有十年的发展历史,其开源以及对商用友好的版权协议使得它很快就得到越来越多的关注与支持。现在的ROS已有飞快的发展,越来越多机器人相关的软件工具亦加入ROS的行列。国内外也开始出现一些支持ROS系统,甚至是基于ROS进行开发的商用机器人。相信这个趋势会一直持续下去并且蔓延到全球各地,最终使之成为机器人领域的普遍标准。而我亦通过举办ROS推广及培训深深体会到国内对ROS的关注也在近年来有显著的上升。
作者是国内最早一批接触ROS的人,其ROS实战经验非常丰富。我们举办的ROS推广活动“星火计划”有幸能邀请到作者作为讲师,学生们对他也是一致好评。而本书的内容亦同样非常精彩,是我现今看过的内容最全面、涵盖层面最广的ROS中文入门书籍。从ROS 1.0 到ROS 2.0,本书对各种常用的架构、组件及工具等都有完整的叙述,是一本很好的ROS“入门字典”。其中作者亦把很多个人的实战经验融入书中,与网络上的教材相比,必定有另一番收获。
ROS是机器人软件开发者间一种共同的语言、一个沟通的桥梁。大家可以通过ROS的学习及应用,与全球机器人软件开发者进行交流。如你对机器人学已有一定的认识,希望进一步打开机器人软件开发者社群的宝库,这本书你绝对不能错过。

Dr. LAM, Tin Lun林天麟博士
NXROBO创始人兼CEO

图书目录

推荐序一
推荐序二
推荐序三
前言
第1章 初识ROS 1
1.1 ROS是什么 1
1.1.1 ROS的起源 1
1.1.2 ROS的设计目标 2
1.1.3 ROS的特点 3
1.2 如何安装ROS 4
1.2.1 操作系统与ROS版本的选择 4
1.2.2 配置系统软件源 6
1.2.3 添加ROS软件源 6
1.2.4 添加密钥 7
1.2.5 安装ROS 7
1.2.6 初始化rosdep 8
1.2.7 设置环境变量 8
1.2.8 完成安装 9
1.3 本书源码下载 9
1.4 本章小结 10
第2章 ROS架构 11
2.1 ROS架构设计 11
2.2 计算图 12
2.2.1 节点 12
2.2.2 消息 13
2.2.3 话题 13
2.2.4 服务 13
2.2.5 节点管理器 14
2.3 文件系统 14
2.3.1 功能包 14
2.3.2 元功能包 16
2.4 开源社区 17
2.5 ROS的通信机制 17
2.5.1 话题通信机制 18
2.5.2 服务通信机制 19
2.5.3 参数管理机制 20
2.6 话题与服务的区别 20
2.7 本章小结 21
第3章 ROS基础 22
3.1 第一个ROS例程——小乌龟仿真 23
3.1.1 turtlesim功能包 23
3.1.2 控制乌龟运动 24
3.2 创建工作空间和功能包 25
3.2.1 什么是工作空间 25
3.2.2 创建工作空间 26
3.2.3 创建功能包 27
3.3 工作空间的覆盖 28
3.3.1 ROS中工作空间的覆盖 28
3.3.2 工作空间覆盖示例 28
3.4 搭建Eclipse开发环境 30
3.4.1 安装Eclipse 30
3.4.2 创建Eclipse工程文件 30
3.4.3 将工程导入Eclipse 31
3.4.4 设置头文件路径 31
3.4.5 运行/调试程序 32
3.5 RoboWare简介 35
3.5.1 RoboWare的特点 35
3.5.2 RoboWare的安装与使用 36
3.6 话题中的Publisher与Subscriber 37
3.6.1 乌龟例程中的Publisher与Subscriber 37
3.6.2 如何创建Publisher 37
3.6.3 如何创建Subscriber 40
3.6.4 编译功能包 41
3.6.5 运行Publisher与Subscriber 42
3.6.6 自定义话题消息 44
3.7 服务中的Server和Client 46
3.7.1 乌龟例程中的服务 46
3.7.2 如何自定义服务数据 47
3.7.3 如何创建Server 48
3.7.4 如何创建Client 49
3.7.5 编译功能包 51
3.7.6 运行Server和Client 51
3.8 ROS中的命名空间 52
3.8.1 有效的命名 52
3.8.2 命名解析 53
3.8.3 命名重映射 54
3.9 分布式多机通信 54
3.9.1 设置IP地址 55
3.9.2 设置ROS_MASTER_URI 56
3.9.3 多机通信测试 56
3.10 本章小结 57
第4章 ROS中的常用组件 58
4.1 launch启动文件 58
4.1.1 基本元素 58
4.1.2 参数设置 60
4.1.3 重映射机制 61
4.1.4 嵌套复用 61
4.2 TF坐标变换 62
4.2.1 TF功能包 62
4.2.2 TF工具 63
4.2.3 乌龟例程中的TF 65
4.2.4 创建TF广播器 67
4.2.5 创建TF监听器 68
4.2.6 实现乌龟跟随运动 70
4.3 Qt工具箱 70
4.3.1 日志输出工具(rqt_console) 71
4.3.2 计算图可视化工具(rqt_graph) 71
4.3.3 数据绘图工具(rqt_plot) 72
4.3.4 参数动态配置工具(rqt_reconfigure) 73
4.4 rviz三维可视化平台 73
4.4.1 安装并运行rviz 74
4.4.2 数据可视化 75
4.4.3 插件扩展机制 76
4.5 Gazebo仿真环境 78
4.5.1 Gazebo的特点 78
4.5.2 安装并运行Gazebo 78
4.5.3 构建仿真环境 81
4.6 rosbag数据记录与回放 82
4.6.1 记录数据 82
4.6.2 回放数据 83
4.7 本章小结 84
第5章 机器人平台搭建 85
5.1 机器人的定义 85
5.2 机器人的组成 86
5.2.1 执行机构 87
5.2.2 驱动系统 87
5.2.3 传感系统 87
5.2.4 控制系统 87
5.3 机器人系统搭建 88
5.3.1 MRobot 88
5.3.2 执行机构的实现 88
5.3.3 驱动系统的实现 89
5.3.4 内部传感系统的实现 90
5.4 基于Raspberry Pi的控制系统实现 90
5.4.1 硬件平台Raspberry Pi 91
5.4.2 安装Ubuntu 16.04 91
5.4.3 安装ROS 93
5.4.4 控制系统与MRobot通信 94
5.4.5 PC端控制MRobot 97
5.5 为机器人装配摄像头 99
5.5.1 usb_cam功能包 99
5.5.2 PC端驱动摄像头 100
5.5.3 Raspberry Pi驱动摄像头 102
5.6 为机器人装配Kinect 104
5.6.1 freenect_camera功能包 104
5.6.2 PC端驱动Kinect 106
5.6.3 Raspberry Pi驱动Kinect 109
5.6.4 Kinect电源改造 109
5.7 为机器人装配激光雷达 110
5.7.1 rplidar功能包 110
5.7.2 PC端驱动rplidar 111
5.7.3 Raspberry Pi驱动rplidar 113
5.8 本章小结 113
第6章 机器人建模与仿真 114
6.1 统一机器人描述格式——URDF 114
6.1.1 标签 114
6.1.2 标签 115
6.1.3 标签 116
6.1.4 标签 116
6.2 创建机器人URDF模型 116
6.2.1 创建机器人描述功能包 116
6.2.2 创建URDF模型 117
6.2.3 URDF模型解析 120
6.2.4 在rviz中显示模型 122
6.3 改进URDF模型 124
6.3.1 添加物理和碰撞属性 124
6.3.2 使用xacro优化URDF 125
6.3.3 xacro文件引用 127
6.3.4 显示优化后的模型 127
6.4 添加传感器模型 128
6.4.1 添加摄像头 128
6.4.2 添加Kinect 130
6.4.3 添加激光雷达 132
6.5 基于ArbotiX和rviz的仿真器 133
6.5.1 安装ArbotiX 133
6.5.2 配置ArbotiX控制器 133
6.5.3 运行仿真环境 135
6.6 ros_control 136
6.6.1 ros_control框架 137
6.6.2 控制器 139
6.6.3 硬件接口 139
6.6.4 传动系统 140
6.6.5 关节约束 140
6.6.6 控制器管理器 141
6.7 Gazebo仿真 142
6.7.1 机器人模型添加Gazebo属性 142
6.7.2 在Gazebo中显示机器人模型 145
6.7.3 控制机器人在Gazebo中运动 147
6.7.4 摄像头仿真 147
6.7.5 Kinect仿真 150
6.7.6 激光雷达仿真 153
6.8 本章小结 155
第7章 机器视觉 156
7.1 ROS中的图像数据 156
7.1.1 二维图像数据 156
7.1.2 三维点云数据 158
7.2 摄像头标定 159
7.2.1 camera_calibration功能包 159
7.2.2 启动标定程序 159
7.2.3 标定摄像头 160
7.2.4 标定Kinect 162
7.2.5 加载标定参数的配置文件 162
7.3 OpenCV库 164
7.3.1 安装OpenCV 164
7.3.2 在ROS中使用OpenCV 164
7.4 人脸识别 166
7.4.1 应用效果 167
7.4.2 源码实现 168
7.5 物体跟踪 170
7.5.1 应用效果 170
7.5.2 源码实现 171
7.6 二维码识别 173
7.6.1 ar_track_alvar功能包 173
7.6.2 创建二维码 174
7.6.3 摄像头识别二维码 175
7.6.4 Kinect识别二维码 178
7.7 物体识别 179
7.7.1 ORK功能包 179
7.7.2 建立物体模型库 181
7.7.3 模型训练 183
7.7.4 三维物体识别 184
7.8 本章小结 185
第8章 机器语音 186
8.1 让机器人听懂你说的话 187
8.1.1 pocketsphinx功能包 187
8.1.2 语音识别测试 188
8.1.3 创建语音库 190
8.1.4 创建launch文件 192
8.1.5 语音指令识别 192
8.1.6 中文语音识别 192
8.2 通过语音控制机器人 193
8.2.1 编写语音控制节点 193
8.2.2 语音控制小乌龟运动 194
8.3 让机器人说话 195
8.3.1 sound_play功能包 195
8.3.2 语音播放测试 195
8.4 人工智能标记语言 196
8.4.1 AIML中的标签 196
8.4.2 Python中的AIML解析器 197
8.5 与机器人对话 198
8.5.1 语音识别 199
8.5.2 智能匹配应答 201
8.5.3 文本转语音 202
8.5.4 智能对话 203
8.6 让机器人听懂中文 204
8.6.1 下载科大讯飞SDK 204
8.6.2 测试SDK 206
8.6.3 语音听写 207
8.6.4 语音合成 209
8.6.5 智能语音助手 211
8.7 本章小结 213
第9章 机器人SLAM与自主导航 214
9.1 理论基础 214
9.2 准备工作 216
9.2.1 传感器信息 217
9.2.2 仿真平台 219
9.2.3 真实机器人 222
9.3 gmapping 224
9.3.1 gmapping功能包 224
9.3.2 gmapping节点的配置与运行 227
9.3.3 在Gazebo中仿真SLAM 228
9.3.4 真实机器人SLAM 231
9.4 hector-slam 234
9.4.1 hector-slam功能包 234
9.4.2 hector_mapping节点的配置与运行 236
9.4.3 在Gazebo中仿真SLAM 237
9.4.4 真实机器人SLAM 238
9.5 cartographer 240
9.5.1 cartographer功能包 240
9.5.2 官方demo测试 241
9.5.3 cartographer节点的配置与运行 244
9.5.4 在Gazebo中仿真SLAM 246
9.5.5 真实机器人SLAM 247
9.6 rgbdslam 249
9.6.1 rgbdslam功能包 249
9.6.2 使用数据包实现SLAM 250
9.6.3 使用Kinect实现SLAM 252
9.7 ORB_SLAM 253
9.7.1 ORB_SLAM功能包 253
9.7.2 使用数据包实现单目SLAM 254
9.7.3 使用摄像头实现单目SLAM 256
9.8 导航功能包 258
9.8.1 导航框架 258
9.8.2 move_base功能包 258
9.8.3 amcl功能包 260
9.8.4 代价地图的配置 263
9.8.5 本地规划器配置 266
9.9 在rviz中仿真机器人导航 267
9.9.1 创建launch文件 267
9.9.2 开始导航 268
9.9.3 自动导航 269
9.10 在Gazebo中仿真机器人导航 277
9.10.1 创建launch文件 277
9.10.2 运行效果 278
9.10.3 实时避障 279
9.11 真实机器人导航 280
9.11.1 创建launch文件 280
9.11.2 开始导航 282
9.12 自主探索SLAM 282
9.12.1 创建launch文件 282
9.12.2 通过rviz设置探索
????目标 283
9.12.3 实现自主探索SLAM 284
9.13 本章小结 286
第10章 MoveIt!机械臂控制 287
10.1 MoveIt!系统架构 288
10.1.1 运动组(move_group) 288
10.1.2 运动规划器(motion_planner) 290
10.1.3 规划场景 291
10.1.4 运动学求解器 291
10.1.5 碰撞检测 291
10.2 如何使用MoveIt! 292
10.3 创建机械臂模型 292
10.3.1 声明模型中的宏 292
10.3.2 创建六轴机械臂模型 294
10.3.3 加入Gazebo属性 299
10.3.4 显示机器人模型 300
10.4 使用Setup Assistant配置机械臂 302
10.4.1 加载机器人URDF模型 303
10.4.2 配置自碰撞矩阵 304
10.4.3 配置虚拟关节 304
10.4.4 创建规划组 304
10.4.5 定义机器人位姿 307
10.4.6 配置终端夹爪 308
10.4.7 配置无用关节 309
10.4.8 设置作者信息 309
10.4.9 生成配置文件 309
10.5 启动MoveIt! 310
10.5.1 拖动规划 311
10.5.2 随机目标规划 311
10.5.3 初始位姿更新 313
10.5.4 碰撞检测 314
10.6 配置文件 315
10.6.1 SRDF文件 315
10.6.2 fake_controllers.yaml 316
10.6.3 joint_limits.yaml 317
10.6.4 kinematics.yaml 317
10.6.5 ompl_planning.yaml 318
10.7 添加ArbotiX关节控制器 318
10.7.1 添加配置文件 318
10.7.2 运行ArbotiX节点 318
10.7.3 测试例程 319
10.7.4 运行效果 321
10.8 配置MoveIt!关节控制器 322
10.8.1 添加配置文件 323
10.8.2 启动插件 324
10.9 MoveIt!编程学习 324
10.9.1 关节空间规划 324
10.9.2 工作空间规划 328
10.9.3 笛卡儿运动规划 333
10.9.4 避障规划 338
10.10 pick and place示例 345
10.10.1 应用效果 345
10.10.2 创建抓取的目标物体 346
10.10.3 设置目标物体的放置位置 346
10.10.4 生成抓取姿态 346
10.10.5 pick 348
10.10.6 place 348
10.11 Gazebo中的机械臂仿真 349
10.11.1 创建配置文件 350
10.11.2 创建launch文件 350
10.11.3 开始仿真 351
10.12 使用MoveIt!控制Gazebo中的机械臂 353
10.12.1 关节轨迹控制器 354
10.12.2 MoveIt!控制器 355
10.12.3 关节状态控制器 356
10.12.4 运行效果 357
10.13 ROS-I 358
10.13.1 ROS-I的目标 359
10.13.2 ROS-I的安装 359
10.13.3 ROS-I的架构 360
10.14 本章小结 362
第11章 ROS与机器学习 363
11.1 AlphaGo的大脑——Tensor-Flow 364
11.2 TensorFlow基础 364
11.2.1 安装TensorFlow 364
11.2.2 核心概念 366
11.2.3 第一个TensorFlow程序 367
11.3 线性回归 369
11.3.1 理论基础 369
11.3.2 创建数据集 371
11.3.3 使用TensorFlow解决线性回归问题 372
11.4 手写数字识别 374
11.4.1 理论基础 374
11.4.2 TensorFlow中的MNIST例程 377
11.4.3 基于ROS实现MNIST 381
11.5 物体识别 384
11.5.1 安装TensorFlow Object Detection API 385
11.5.2 基于ROS实现动态物体识别 388
11.6 本章小结 390
第12章 ROS进阶功能 391
12.1 action 391
12.1.1 什么是action 391
12.1.2 action的工作机制 392
12.1.3 action的定义 392
12.1.4 实现action通信 393
12.2 plugin 396
12.2.1 工作原理 396
12.2.2 如何实现一个插件 396
12.2.3 创建基类 397
12.2.4 创建plugin类 398
12.2.5 注册插件 399
12.2.6 编译插件的动态链接库 399
12.2.7 将插件加入ROS 399
12.2.8 调用插件 400
12.3 rviz plugin 401
12.3.1 速度控制插件 402
12.3.2 创建功能包 402
12.3.3 代码实现 402
12.3.4 编译插件 407
12.3.5 运行插件 408
12.4 动态配置参数 409
12.4.1 创建配置文件 410
12.4.2 创建服务器节点 412
12.4.3 参数动态配置 413
12.5 SMACH 414
12.5.1 什么是SMACH 415
12.5.2 状态机“跑”起来 415
12.5.3 状态机实现剖析 416
12.5.4 状态间的数据传递 419
12.5.5 状态机嵌套 421
12.5.6 多状态并行 422
12.6 ROS-MATLAB 423
12.6.1 ROS-MATLAB是什么 423
12.6.2 ROS-MATLAB可以做什么 424
12.6.3 连接MATLAB和ROS 425
12.6.4 MATLAB可视化编程 428
12.6.5 创建可视化界面 429
12.6.6 编辑控件的回调函数 431
12.6.7 运行效果 434
12.7 Web GUI 435
12.7.1 ROS中的Web功能包 435
12.7.2 创建Web应用 436
12.7.3 使用Web浏览器控制机器人 439
12.8 本章小结 440
第13章 ROS机器人实例 441
13.1 PR2 441
13.1.1 PR2功能包 442
13.1.2 Gazebo中的PR2 443
13.1.3 使用PR2实现SLAM 446
13.1.4 PR2机械臂的使用 448
13.2 TurtleBot 450
13.2.1 TurtleBot功能包 451
13.2.2 Gazebo中的TurtleBot 451
13.2.3 使用TurtleBot实现导航功能 453
13.2.4 尝试TurtleBot 3 456
13.3 Universal Robots 457
13.3.1 Universal Robots功能包 458
13.3.2 Gazebo中的UR机器人 459
13.3.3 使用MoveIt!控制UR机器人 460
13.4 catvehicle 462
13.4.1 构建无人驾驶仿真系统 463
13.4.2 运行无人驾驶仿真器 465
13.4.3 控制无人驾驶汽车 466
13.4.4 实现无人驾驶汽车的SLAM功能 467
13.5 HRMRP 469
13.5.1 总体架构设计 469
13.5.2 SLAM与导航 471
13.5.3 多机器人扩展 472
13.6 Kungfu Arm 474
13.6.1 总体架构设计 474
13.6.2 具体层次功能 475
13.6.3 功夫茶应用展示 478
13.7 本章小结 478
第14章 ROS 2 479
14.1 ROS 1存在的问题 480
14.2 什么是ROS 2 481
14.2.1 ROS 2的设计目标 481
14.2.2 ROS 2的系统架构 482
14.2.3 ROS 2的关键中间件——DDS 483
14.2.4 ROS 2的通信模型 483
14.2.5 ROS 2的编译系统 485
14.3 在Ubuntu上安装ROS 2 487
14.3.1 安装步骤 487
14.3.2 运行talker和listener例程 488
14.4 在Windows上安装ROS 2 489
14.4.1 安装Chocolatey 489
14.4.2 安装Python 490
14.4.3 安装OpenSSL 490
14.4.4 安装Visual StudioCommunity 2015 491
14.4.5 配置DDS 491
14.4.6 安装OpenCV 492
14.4.7 安装依赖包 492
14.4.8 下载并配置ROS 2 492
14.4.9 运行talker和listener例程 493
14.5 ROS 2中的话题通信 494
14.5.1 创建工作目录和功能包 494
14.5.2 创建talker 495
14.5.3 创建listener 497
14.5.4 修改CMakeLists.txt 497
14.5.5 编译并运行节点 498
14.6 自定义话题和服务 499
14.6.1 自定义话题 499
14.6.2 自定义服务 499
14.6.3 修改CMakeLists.txt和package.xml 499
14.6.4 编译生成头文件 499
14.7 ROS 2中的服务通信 500
14.7.1 创建Server 500
14.7.2 创建Client 501
14.7.3 修改CMakeLists.txt 503
14.7.4 编译并运行节点 503
14.8 ROS 2与ROS 1的集成 504
14.8.1 ros1_bridge功能包 504
14.8.2 话题通信 504
14.8.3 服务通信 504
14.9 本章小结 505

教学资源推荐
作者: (美)Tom Mitchell
作者: [美] 凯文·M.林奇(Kevin M.Lynch)[韩] 朴钟宇(Frank C.Park)著
作者: [美]理查德·F. 里昂(Richard F. Lyon) 著
作者: [美]安柯·莫特拉(Ankur Moitra) 著
参考读物推荐
作者: [美] 埃里克·卡特(Eric Carter) 马修·赫斯特(Matthew Hurst)著
作者: [美] 山姆?亚伯拉罕(Sam Abrahams) 丹尼亚尔?哈夫纳(Danijar Hafner)埃里克?厄威特(Erik Erwitt) 阿里尔?斯卡尔皮内里(Ariel Scarpinelli)  著
作者: [法]弗兰克·卡扎乌朗(Franck Cazaurang) [美]凯莉·科恩(Kelly Cohen) [美]曼尼斯·库玛(Manish Kumar) 编著