书名: | [套装书]ROS机器人开发(四册套装)|8029663 |
图书定价: | 316元 |
图书作者: | (西)阿尼尔·马哈塔尼(Anil Mahtani)(美)卡罗尔·费尔柴尔德(Carol Fairchild);(美)托马斯L.哈曼(Thomas L. Harman)胡春旭(印)朗坦·约瑟夫(Lentin Joseph) |
出版社: | 机械工业出版社 |
出版日期: | 2017/9/1 0:00:00 |
ISBN号: | 9787111578468 |
开本: | 16开 |
页数: | 0 |
版次: | 1-1 |
作者简介 |
---------------------------8004538--------------------------- 作者简介 Lentin Joseph是一名来自印度的作家、企业家、电子工程师、机器人爱好者、机器视觉专家、嵌入式程序员以及Qbotics Labs(http://www.qboticslabs.com)的创始人和首席执行官。 他在喀拉拉邦的联邦科学和技术研究所(Federal Institute of Science and Technology,FISAT)获得了电子和通信工程学士学位。在最后一年的工程项目中,制作了一个可以与人互动的聊天机器人。该项目取得了巨大的成功,被各大媒体多次报告。该机器人的主要特点是能够与人沟通、智能回复、具有一定的图像处理能力,如面部、动作、颜色检测等。整个项目使用Python编程语言实现。他对机器人、图像处理和Python的兴趣从此开始。 毕业后,他在一家专门从事机器人和图像处理的创业公司工作了三年。与此同时,他学习了主流的机器人软件平台,如机器人操作系统(ROS)、V-REP和Actin(机器人仿真工具)等,还学习了图像处理库,如OpenCV、OpenNI和PCL等,并且熟悉Arduino和Tiva Launchpad上的机器人三维设计和嵌入式编程。 在积累了三年的工作经验后,他开创了Qbotics Labs公司,主要致力于在机器人和机器视觉等领域开发一些优秀的产品。他负责维护个人网站(http://www.lentinjoseph.com)和技术博客technolabsz(http://www.technolabsz.com),并在科技博客上发表作品。他还是印度PyCon2013的主讲人,主题为“Learning Robotics Using Python”。 Lentin是《Learning Robotics Using Python》(http://learn-robotics.com)和《Mastering ROS for Robotics Programming》(http://mastering-ros.com)两本书的作者,均由Packt出版。第一本书使用ROS和OpenCV制作了一个自主移动机器人。这本书是在ICRA 2015上发布的,在ROS博客、Robohub、OpenCV、Python网站以及其他相关论坛上流传很广。第二本书帮助读者掌握ROS知识,并在ICRA 2016上推出,是最畅销的ROS书籍之一。 Lentin及其团队也是2016年ICRA中HRATC挑战赛的获胜者。该团队也成功入围了ICRA 2015挑战赛HRATC决赛(http://www.icra2016.org/conference/challenges/)。 审校者简介 Ruixiang Du是伍斯特理工学院(Worcester Polytechnic Institute,WPI)机械工程专业的博士研究生。目前在系统和机器人控制实验室工作,主要研究自主移动机器人的运动规划和控制。他于2011年获得华北电力大学自动化学士学位,2013年获得WPI机器人工程硕士学位。 Ruixiang的研究兴趣包括机器人技术和实时嵌入式系统。他曾经从事多种机器人项目,从机器人平台到医疗机器人、无人机/地面车辆、人形机器人等。他是DARPA机器人挑战赛WPI-CMU团队的成员。---------------------------7731483--------------------------- 作者简介 卡罗尔·费尔柴尔德(Carol Fairchild)是Fairchild Robotics公司的所有人、首席工程师,该公司致力于机器人技术的开发与集成。卡罗尔是休斯顿大学明湖分校(University of Houston-Clear Lake,UHCL)Baxter实验室的一名研究人员,同时也是一名兼职教授。她的研究领域主要是基于Baxter机器人的扩展应用开发。在费尔柴尔德女士早期开始建造她的第一台机器人(这台机器人被称为Heathkit Hero)时,她就已经开始了机器人技术方方面面的学习与实践。她在得州农工大学(Texas A&M;)获得工程技术学士学位,并在休斯顿大学明湖分校获得计算机工程的硕士学位。费尔柴尔德女士曾在中学教授机器人学课程,是第一乐高联盟(FIRST LEGO League,FLL)的教练,同时也是灵感和科技大赛(For Inspiration and Recognition of Science and Technology,FIRST)的志愿者。 托马斯L.哈曼(Thomas L. Harman)博士是休斯顿大学明湖分校工程系的主任。他的研究领域主要是控制系统、机器人技术与微处理器技术的应用。他和他同事关于机器人和激光的论文已经应用在了医学领域。2005年,他当选为休斯顿大学明湖分校的特聘教授。他曾担任FIRST机器人大赛的裁判与安全顾问。托马斯博士已经出版的专著、合著书籍有18本,主题包括微处理器技术、MATLAB与仿真以及美国国家电气规程等。他在休斯顿大学明湖分校的实验室有一台Baxter双臂机器人、多台TurtleBot机器人以及其他几款机器人。---------------------------6479751--------------------------- Anil Mahtani是一名主要从事水下机器人工作研发的计算机科学家。他第一次在该领域工作是在完成硕士论文期间为低成本ROV开发软件架构。在此期间,他也成为AVORA的团队领导者和主要开发人员,这个大学生团队设计开发了一个自主水下航行器并参加了2012年的欧洲学生自主水下航行器设计挑战赛(Student Autonomous Underwater Challenge-Europe,SAUC-E)。同年,他完成了论文并获得了拉斯帕尔马斯大学的计算机科学硕士学位。此后不久,他成为SeeByte公司的软件工程师,这家公司是水下系统智能软件解决方案的全球领导者。在2015年,他加入SecureWorks公司,任职软件工程师,在那里他应用相关知识和技术开发入侵检测和预防系统。 在SeeByte公司工作期间,Anil参与了军方、石油和天然气公司的一些半自主和自主水下系统的核心开发。在这些项目中,他积极参与自主系统开发、分布式软件体系结构设计和底层软件开发,同时也为前视声呐图像提供计算机视觉解决方案。他还获得了项目经理职位,管理一个开发和维护内核C++库的工程师团队。 他的专业兴趣主要包括软件工程、算法、数据结构、分布式系统、网络和操作系统。Anil在机器人方向主要负责提供高效和健壮的软件解决方案,不仅解决当前存在的问题,还预见未来的问题或可能的改进。鉴于他的经验,他在计算机视觉、机器学习和控制问题上也有独特的见解。Anil对DIY和电子学感兴趣,并且开发了一些Arduino库回馈社区。 首先,我要感谢家人和朋友的支持,他们总是在我最需要的时候帮助我。我还要感谢我的女友Alex的耐心支持,她是我灵感的源泉。最后,我要感谢我的同事Ihor Bilyy和Dan Good,在我软件工程师职业生涯中他们以专业的方式教会我很多知识。 Luis Sánchez在拉斯帕尔马斯大学获得了电子与电信工程的双硕士学位。他曾在技术开发和创新研究所(IDETIC)、加那利群岛海洋平台(PLOCAN)和应用微电子研究所(IUMA)与不同的研究小组合作,进行超分辨率算法成像研究。 他的专业兴趣包括应用于机器人系统的计算机视觉、信号处理和电子设计。因此,他加入了AVORA团队,这批年轻的工程师和学生从零开始从事自主水下航行器(AUV)的开发工作。在这个项目中,Luis开始开发声学和计算机视觉系统,用于提取不同传感器的信息,例如水听器、声呐和摄像头。 依托海洋技术的强大背景,Luis与人合作创办了一家新的初创公司Subsea Mechatronics,致力于为水下环境开发遥控操作和自主航行器。 下面是海洋技术工程师和企业家(LPA Fabrika:Gran Canaria Maker Space的联合创始人和制造商)Dario Sosa Cabrera对Luis的评价: “他很热情,是一个跨多学科的工程师。他对工作负责,自制力强,并承担一个团队领导者的责任,这在euRathlon比赛中充分展现了出来。他在电子和电信领域的背景让其具备从信号处理和软件到电子设计和制造的广泛专业知识。” Luis作为技术审校者参与了Packt出版社出版的《Learning ROS for Robotics Programming》的相关工作以及第2版的撰写工作。 首先,我要感谢Aaron、Anil以及Enrique邀请我参与编写这本书。同他们一起工作非常快乐。同时,我也要感谢水下机电团队关于重型水下机器人的丰富经验,这些年我们一起成长。我必须提到LPA Fabrika:Gran Canaria Maker Space,他们满腔热忱地准备和引导教学机器人及技术项目,与他们共同工作的时光也非常开心。 最后,我要感谢家人和女友对我参与的每个项目的大力支持和鼓励。我以此书献给他们。 Enrique Fernández具有计算机工程博士学位和机器人学研究背景。他的博士论文解决了自主水下滑翔器(AUG)的路径规划问题,他还研究了SLAM、感知、视觉、控制等机器人学课题。在读博士期间,他加盟了赫罗纳大学的CIRS/ViCOROB水下机器人研究中心,在那里他为AUV开发了视觉SLAM和INS模块。他在2012年参加了SAUC-E并获奖,在2013年作为合作者参与了SAUC-E。 攻读博士学位期间,Enrique在机器人顶级会议和期刊上发表了多篇论文,其中包括国际机器人和自动化会议(International Conference of Robotics and Automation,ICRA)。他也合作编写了一些ROS书籍和章节。 之后,Enrique作为SLAM工程师在2013年6月加盟PAL Robotics公司。在那里,他开发了用于REEM、REEM-C仿人型机器人的ROS软件,也继续为开源社区(主要是ROS控制软件库)做贡献,目前仍是其中一名维护人员。在2015年,他加盟Clearpath Robotics公司的自主系统部门,从事感知算法开发相关工作。他曾经在通用电气公司(General Electric)和约翰迪尔(John Deere)等多家大型工业公司的设施中负责部署工业移动机器人OTTO 1500和OTTO 100软件的运行。 我要感谢本书的合著者,感谢他们为完成本书所付出的努力以及提供了无数示例的代码。我还要感谢拉斯帕尔马斯大学研究组和水下机器人研究中心(Center of Underwater Robotics Research,CIRS/ViCOROB)的研究小组成员。我也要感谢在PAL Robotics公司的同事,在那里我学到很多关于ROS、机器人运动以及仿人双足机器人的知识,不仅有软件,还有电子和硬件设计。此外,我还要感谢在Clearpath Robotics的同事们,在这里我掌握了ROS并参与了为工业4.0销售的24/7全天候运行自动驾驶机器人的软件开发。最后,我要感谢我的家人和朋友的帮助与支持,特别是Eva。 Aaron Martinez是数字化制造领域的计算机工程师、企业家和专家。他于2010年在拉斯帕尔马斯大学的IUCTC(Instituto Universitario de Cienciasy Tecnologias Ciberneticas)完成硕士论文。他在远程监控领域使用沉浸式设备和机器人平台准备硕士论文。获得学位后,他参加了在奥地利林茨约翰开普勒大学研究所的机器人学实习计划。在实习期间,他作为团队的一员使用ROS和导航包集进行移动平台开发。之后,他参与了有关机器人的项目,其中一个是拉斯帕尔马斯大学的AVORA项目。在这个项目中,他参与自主水下航行器制作,并参与意大利的SAUC-E。2012年,他负责维护这个项目;2013年,他帮助从ROS向机器人平台移植导航包集和其他算法。 最近,Aaron与人共同创立了一家名为SubSeaMechatronics SL的公司。这家公司从事与水下机器人和遥控系统相关的项目,还设计和制造水下传感器。公司的主要目标是开发用于研发原型和重型机械手的定制解决方案。 Aaron有许多领域的经验,比如编程、机器人、机电一体化、数字化制造以及Arduino、BeagleBone、服务器和激光雷达等设备。如今,他在SubSeaMechatronics SL公司从事水下和空中环境的机器人平台设计。 我要感谢我的女友,她在我写这本书时支持我并且给我继续成长的动力。我还要感谢Donato Monopoli(加那利群岛技术研究所(ITC)生物医学工程部门的主管),以及ITC所有的工作人员,感谢他们使我懂得数字制造、机械以及工程组织,我在此度过了生命中最美好的时光。 感谢我大学的同事,特别是Alexis Quesada,他给了我在准备硕士论文时创建第一个机器人的机会。同他们一起工作,使我学习到很多关于机器人的知识。 最后,我要感谢家人和朋友的帮助与支持。 审校者简介 Lentin Joseph是印度Qbotics Labs(http://www.qboticslabs.com)的创始人兼首席执行官、作家、企业家、电子工程师、机器人爱好者、机器视觉专家、嵌入式程序员。 他在印度喀拉拉的联邦理工学院(FISAT)获电子学和通信工程学士学位。在工程项目的最后一年,他制作了一个可以与人交互的社交机器人(http://www.technolabsz.com/2012/07/social-robot-my-final-year.html)。项目取得了巨大的成功,被视觉和印刷媒体多次报道。该机器人的主要特点是可以与人交流并智能回复,同时具有一定的图像处理能力,如面部、动作和颜色检测。整个项目使用Python编程语言实现。他对机器人、图像处理和Python的兴趣从此开始。 毕业后,他在一家专门从事机器人和图像处理的创业公司工作了3年。同时,他学习了主流的机器人软件平台,如机器人操作系统(ROS)、V-REP、Actin(机器人仿真工具),以及图像处理库,如OpenCV、OpenNI和PCL。他还了解Arduino和Tiva Launchpad上的机器人三维设计和嵌入式编程。 在积累3年的工作经验后,他创立了一家名叫Qbotics Labs的新公司,主要从事研究工作,在机器人和机器视觉等领域开发一些优秀的产品。他负责维护个人网站(http://www.lentinjoseph.com)和一个名为technolabsz的技术博客(http://www.technolabsz.com)。他在科技博客上发布作品。他也是印度PyCon2013的演讲者,主题是“使用Python的学习机器人”(Learning Robotics using Python)。 Lentin是《Learning Robotics using Python》(更多内容参考http://learn-robotics.com)和《Mastering ROS for Robotics Programming》(更多内容参考http://mastering-ros.com)的作者,这两本书都由Packt出版社出版。第一本书的主题是使用ROS和OpenCV构建自主移动机器人。这本书是在ICRA 2015上推出的,并在ROS博客Robohub、OpenCV、Python网站以及其他相关论坛上推广。第二本书是掌握机器人操作系统(ROS)的工具书,也在ICRA 2016上推出,它是最畅销的ROS书籍之一。 作为ICRA 2016的一部分,Lentin及其团队获得了HRATC 2016挑战赛的冠军,同时他也是ICRA 2015挑战赛HRATC决赛的入围者(http://www.icra2016.org/conference/challenges/)。 |
内容简介 |
---------------------------8004538--------------------------- 本书11个ROS机器人项目,在无须大量硬件的情况下可直接实现原型设计。本书首先介绍ROS及其安装过程。在完成基础知识学习之后,将会学习一些非常棒的项目,如构建自动驾驶汽车、自主移动机器人以及使用深度学习和ROS进行图像识别等。这里可以找到适用于初级、中级甚至专家级的各类ROS机器人应用程序!---------------------------7991375--------------------------- 本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;后论述ROS2的框架特点和使用方法,剖析ROS的发展方向。 ---------------------------7731483--------------------------- 本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。---------------------------6479751--------------------------- 本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人/传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。 |
目录 |
---------------------------8004538--------------------------- 译者序 推荐序一 推荐序二 作者简介 审校者简介 前言 致谢 第1章 入门ROS机器人应用程序开发 1 1.1 ROS入门 2 1.1.1 ROS发行版 2 1.1.2 支持ROS的操作系统 3 1.1.3支持ROS的机器人和传感器 4 1.1.4为什么选择ROS 5 1.2 ROS基础 6 1.2.1文件系统级 7 1.2.2计算图级 8 1.2.3ROS社区级 9 1.2.4ROS通信 9 1.3ROS客户端库 10 1.4ROS工具 11 1.4.1Rviz(ROS可视化) 11 1.4.2rqt_plot 11 1.4.3rqt_graph 12 1.5ROS仿真器 13 1.6在Ubuntu 16.04 LTS上安装ROS Kinetic 13 1.7在VirtualBox上设置ROS 17 1.8设置ROS工作区 19 1.9ROS在工业和研究中的机遇 20 1.10 问题 22 1.11 本章总结 22 第2章 使用ROS、OpenCV和Dynamixel伺服舵机进行人脸检测与跟踪 23 2.1项目概述 23 2.2硬件和软件需求 24 2.3ROS与Dynamixel伺服舵机的接口 33 2.4创建人脸跟踪ROS包 34 2.5人脸跟踪功能包的工作原理 36 2.5.1理解人脸跟踪代码 38 2.5.2理解CMakeLists.txt 41 2.5.3track.yaml文件 43 2.5.4启动文件 43 2.5.5运行人脸跟踪器节点 44 2.5.6face_tracker_control功能包 45 2.5.7 云台控制器配置文件 46 2.5.8舵机参数配置文件 47 2.5.9人脸跟踪控制器节点 47 2.5.10 创建CMakeLists.txt 49 2.5.11 测试人脸跟踪控制功能包 49 2.5.12 集成所有节点 51 2.5.13 固定支架并安装电路 51 2.5.14 最终测试 52 2.6 问题 52 2.7 本章总结 53 第3章 在ROS中构建一个像Siri的聊天机器人 54 3.1人机交互机器人 54 3.2构建人机交互机器人 55 3.3预备条件 56 3.4AIML入门 57 3.4.1AIML标签 57 3.4.2PyAIML解释器 58 3.4.3在Ubuntu 16.04 LTS上安装PyAIML 59 3.4.4使用PyAIML 59 3.4.5加载多个AIML文件 60 3.4.6在ROS中创建AIML机器人 62 3.4.7AIML ROS功能包 62 3.5 问题 70 3.6 本章总结 70 第4章 使用ROS控制嵌入式电路板 71 4.1主流嵌入式电路板入门 71 4.1.1如何选择Arduino开发板 71 4.1.2Raspberry Pi(树莓派)介绍 74 4.1.3Odroid开发板 76 4.2Arduino与ROS的接口 76 4.2.1使用Arduino和ROS监控光线亮度 79 4.2.2在PC上运行ROS串行服务器 81 4.2.3通过mbed连接STM32开发板和ROS 82 4.2.4使用Energia连接ROS与Tiva C Launchpad板 85 4.3在Raspberry Pi和Odroid上运行ROS 87 4.3.1将Raspberry Pi和Odroid连接到PC 88 4.3.2ROS控制GPIO引脚 90 4.4 问题 94 4.5 本章总结 95 第5章 使用手势远程操作机器人 96 5.1使用键盘遥控ROS龟 97 5.2使用手势进行遥控 98 5.3项目配置 100 5.4MPU-9250、Arduino和ROS连接 101 5.5在Rviz中可视化IMU TF 106 5.6将IMU数据转换为twist消息 107 5.7集成和最终运行 109 5.8使用Android手机进行遥控 111 5.9 问题 113 5.10 本章总结 113 第6章 物体检测和识别 114 6.1物体检测和识别的快速入门 114 6.2ROS中的find_object_2d包 116 6.2.1安装find_object_2d包 116 6.2.2运行find_object_2d节点检测网络摄像头图像中的物体 117 6.2.3使用深度传感器运行find_object_2d节点 121 6.33D物体识别快速入门 124 6.4ROS中3D物体识别包的介绍 125 6.5从3D网格中检测和识别物体 127 6.5.1使用物体的3D模型进行训练 127 6.5.2使用捕获的3D模型进行训练 129 6.6识别物体 132 6.7 问题 135 6.8 本章总结 135 第7章 使用ROS和TensorFlow进行深度学习 136 7.1深度学习及其应用简介 136 7.2深度学习机器人 137 7.3深度学习库 138 7.4TensorFlow入门 139 7.4.1在Ubuntu 16.04 LTS上安装TensorFlow 139 7.4.2TensorFlow的概念 141 7.4.3在TensorFlow中编写我们的第一个程序 143 7.5使用ROS和TensorFlow进行图像识别 146 7.5.1前提条件 147 7.5.2ROS图像识别节点 147 7.6scikit-learn介绍 150 7.7SVM及其在机器人中的应用 151 7.8 问题 154 7.9 本章总结 154 第8章 在MATLAB和Android上运行ROS 156 8.1ROS-MATLAB接口入门 156 8.2在MATLAB中设置机器人工具箱 157 8.2.1MATLAB中的基本ROS功能 157 8.2.2列出ROS节点、主题和消息 158 8.3MATLAB与ROS网络通信 160 8.4利用MATLAB控制ROS机器人 163 8.4.1设计MATLAB GUI应用程序 164 8.4.2解释回调 166 8.4.3运行应用程序 168 8.5Android及其ROS接口入门 169 8.5.1安装rosjava 170 8.5.2通过Ubuntu软件包管理器安装android-sdk 172 8.6安装ROS-Android接口 174 8.7使用ROS-Android应用程序 175 8.8代码演练 180 8.9使用ROS-Android接口创建基本应用程序 182 8.10 问题 183 8.11 本章总结 184 第9章 构建自主移动机器人 185 9.1机器人规格和设计概述 185 9.2设计和选择机器人的电动机和轮子 186 9.2.1计算电动机扭矩 186 9.2.2电动机转速的计算 186 9.2.3设计总结 187 9.3构建机器人本体的2D和3D模型 187 9.3.1底盘 187 9.3.2连接杆和空心管设计 188 9.3.3电动机、轮子和电动机夹具设计 189 9.3.4脚轮设计 189 9.3.5中层板和顶层板设计 189 9.3.6顶层板 190 9.3.7机器人的3D建模 191 9.4在Gazebo中进行机器人模型仿真 192 9.5差速驱动机器人的数学模型 192 9.6设计和建造实际的机器人 200 9.6.1电动机和电动机驱动 201 9.6.2电动机编码器 201 9.6.3Tiva C Launchpad 201 9.6.4超声波传感器 201 9.6.5OpenNI深度传感器 201 9.6.6英特尔NUC 201 9.6.7使用Launchpad将传感器 和电动机连接起来 201 9.6.8Tiva C Launchpad编程 202 9.7连接机器人硬件与ROS 205 9.8在Chefbot中进行地图构建和定位 208 9.9 问题 210 9.10 本章总结 210 第10章 使用ROS创建自动驾驶汽车 211 10.1 自动驾驶汽车入门 211 10.2 典型自动驾驶汽车的功能框图 214 10.2.1 自动驾驶汽车的软件框图 218 10.2.2 在ROS中仿真和连接自动驾驶汽车传感器 219 10.3 在Gazebo中仿真一辆带有传感器的自动驾驶汽车 235 10.3.1 安装预备条件 235 10.3.2 可视化机器人车传感器数据 237 10.3.3 在Gazebo里移动一辆自动驾驶汽车 238 10.3.4 使用机器人车运行hector SLAM 238 10.4 将DBW车与ROS连接 239 10.4.1 安装包 240 10.4.2 可视化自动驾驶汽车和传感器数据 240 10.4.3 DBW与ROS通信 242 10.5 Udacity开源自动驾驶汽车项目介绍 242 10.6 问题 245 10.7 本章总结 246 第11章 使用VR头戴设备和Leap Motion遥控机器人 247 11.1 VR头戴设备和Leap Motion入门 248 11.2 项目预备条件 249 11.3 项目的设计和工作原理 250 11.4 在Ubuntu 14.04.5上安装Leap Motion SDK 251 11.4.1 可视化Leap Motion控制器数据 252 11.4.2 使用Leap Motion可视化工具 252 11.4.3 安装Leap Motion控制器的ROS驱动程序 253 11.5 在Rviz中可视化Leap Motion数据 255 11.6 使用Leap Motion控制器创建遥控节点 256 11.7 构建ROS-VR Android应用程序 258 11.8 使用ROS-VR应用程序并与Gazebo进行连接 259 11.9 在VR中使用TurtleBot仿真 262 11.10 ROS-VR应用程序的故障排除 263 11.11 ROS-VR和Leap Motion遥控的集成应用 264 11.12 问题 264 11.13 本章总结 264 第12章 通过网络控制机器人 265 12.1 ROS Web入门 265 12.1.1 rosbridge_suite 265 12.1.2 roslibjs、ros2djs和ros3djs 266 12.1.3 tf2_web_republisher 267 12.2 在ROS Kinetic上设置ROS Web 267 12.2.1 安装rosbridge_suite 267 12.2.2 设置rosbridge客户端库 268 12.3 在ROS Kinetic上安装tf2_web_republisher 269 12.4 在Web浏览器上实现机器人遥控和可视化 269 12.4.1 项目开发 269 12.4.2 连接到rosbridge_server 271 12.4.3 初始化teleop 271 12.4.4 在Web浏览器中创建3D查看器 272 12.4.5 创建TF客户端 272 12.4.6 创建URDF客户端 272 12.4.7 创建文本输入 273 12.4.8 运行Web teleop应用程序 273 12.5 利用网络浏览器控制机器人关节 275 12.5.1 安装joint_state_publisher_js 275 12.5.2 运行网络关节状态发布器 276 12.5.3 解释代码 278 12.5.4 运行机器人监控应用程序 278 12.6 基于Web的语音控制机器人 279 12.6.1 前提条件 280 12.6.2 在Web应用程序中启用语音识别 280 12.7 运行语音控制机器人应用程序 282 12.8 问题 283 12.9 本章总结 284 ---------------------------7991375--------------------------- 推荐序一 推荐序二 推荐序三 前言 第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 ---------------------------7731483--------------------------- 译者序 作者简介 前言 第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 ---------------------------6479751--------------------------- 推荐序一 推荐序二 译者序 前言 作者简介 审校者简介 第1章 ROS入门 1 1.1 PC安装教程 3 1.2 使用软件库安装ROS Kinetic 3 1.2.1 配置Ubuntu软件库 4 1.2.2 添加软件库到sources.list文件中 4 1.2.3 设置密钥 5 1.2.4 安装ROS 5 1.2.5 初始化rosdep 6 1.2.6 配置环境 6 1.2.7 安装rosinstall 7 1.3 如何安装VirtualBox和Ubuntu 8 1.3.1 下载VirtualBox 8 1.3.2 创建虚拟机 9 1.4 通过Docker镜像使用ROS 11 1.4.1 安装Docker 11 1.4.2 获取和使用ROS Docker镜像和容器 11 1.5 在BeagleBone Black上安装ROS Kinetic 12 1.5.1 准备工作 13 1.5.2 配置主机和source.list文件 16 1.5.3 设置密钥 16 1.5.4 安装ROS功能包 17 1.5.5 为ROS初始化rosdep 17 1.5.6 在BeagleBone Black中配置环境 18 1.5.7 在BeagleBone Black中安装rosinstall 18 1.5.8 BeagleBone Black基本ROS示例 18 1.6 本章小结 19 第2章 ROS架构及概念 20 2.1 理解ROS文件系统级 20 2.1.1 工作空间 21 2.1.2 功能包 22 2.1.3 元功能包 23 2.1.4 消息 24 2.1.5 服务 25 2.2 理解ROS计算图级 25 2.2.1 节点与nodelet 27 2.2.2 主题 28 2.2.3 服务 29 2.2.4 消息 29 2.2.5 消息记录包 30 2.2.6 节点管理器 30 2.2.7 参数服务器 30 2.3 理解ROS开源社区级 31 2.4 ROS试用练习 32 2.4.1 ROS文件系统导览 32 2.4.2 创建工作空间 32 2.4.3 创建ROS功能包和元功能包 33 2.4.4 编译ROS功能包 34 2.4.5 使用ROS节点 35 2.4.6 如何使用主题与节点交互 37 2.4.7 如何使用服务 39 2.4.8 使用参数服务器 41 2.4.9 创建节点 42 2.4.10 编译节点 44 2.4.11 创建msg和srv文件 45 2.4.12 使用新建的srv和msg文件 48 2.4.13 launch文件 51 2.4.14 动态参数 53 2.5 本章小结 57 第3章 可视化和调试工具 58 3.1 调试ROS节点 60 3.1.1 使用gdb调试器调试ROS节点 60 3.1.2 在ROS节点启动时调用gdb调试器 61 3.1.3 在ROS节点启动时调用valgrind分析节点 62 3.1.4 设置ROS节点core文件转储 62 3.2 日志消息 62 3.2.1 输出日志消息 62 3.2.2 设置调试消息级别 63 3.2.3 为特定节点配置调试消息级别 64 3.2.4 消息命名 65 3.2.5 按条件显示消息与过滤消息 65 3.2.6 显示消息的方式——单次、可调以及其他组合 66 3.2.7 使用rqt_console和rqt_logger_level在运行时修改调试级别 66 3.3 检测系统状态 69 3.4 设置动态参数 73 3.5 当出现异常状况时使用roswtf 75 3.6 可视化节点诊断 77 3.7 绘制标量数据图 78 3.8 图像可视化 81 3.9 3D可视化 83 3.9.1 使用rqt_rviz在3D世界中实现数据可视化 83 3.9.2 主题与坐标系的关系 86 3.9.3 可视化坐标变换 87 3.10 保存与回放数据 88 3.10.1 什么是消息记录包文件 89 3.10.2 使用rosbag在消息记录包文件中记录数据 89 3.10.3 回放消息记录包文件 90 3.10.4 查看消息记录包文件的主题和消息 91 3.11 应用rqt与rqt_gui插件 93 3.12 本章小结 93 第4章 3D建模与仿真 95 4.1 在ROS中自定义机器人的3D模型 95 4.2 创建第一个URDF文件 95 4.2.1 解释文件格式 97 4.2.2 在rviz里查看3D模型 98 4.2.3 加载网格到机器人模型中 100 4.2.4 使机器人模型运动 100 4.2.5 物理和碰撞属性 101 4.3 xacro——一种更好的机器人建模方法 102 4.3.1 使用常量 102 4.3.2 使用数学方法 103 4.3.3 使用宏 103 4.3.4 使用代码移动机器人 103 4.3.5 使用SketchUp进行3D建模 107 4.4 在ROS中仿真 109 4.4.1 在Gazebo中使用URDF 3D模型 109 4.4.2 在Gazebo中添加传感器 112 4.4.3 在Gazebo中加载和使用地图 115 4.4.4 在Gazebo中移动机器人 116 4.5 本章小结 118 第5章 导航功能包集入门 119 5.1 ROS导航功能包集 119 5.2 创建变换 120 5.2.1 创建广播器 121 5.2.2 创建侦听器 121 5.2.3 查看坐标变换树 124 5.3 发布传感器信息 124 5.4 发布里程数据信息 127 5.4.1 Gazebo如何获取里程数据 128 5.4.2 使用Gazebo创建里程数据 131 5.4.3 创建自定义里程数据 132 5.5 创建基础控制器 135 5.6 使用ROS创建地图 139 5.6.1 使用map_server保存地图 141 5.6.2 使用map_server加载地图 141 5.7 本章小结 142 第6章 导航功能包集进阶 144 6.1 创建功能包 144 6.2 创建机器人配置 144 6.3 配置全局和局部代价地图 147 6.3.1 基本参数的配置 147 6.3.2 全局代价地图的配置 148 6.3.3 局部代价地图的配置 149 6.3.4 底盘局部规划器配置 149 6.4 为导航功能包集创建启动文件 150 6.5 为导航功能包集设置rviz 151 6.5.1 2D位姿估计 152 6.5.2 2D导航目标 152 6.5.3 静态地图 154 6.5.4 粒子云 154 6.5.5 机器人占地空间 155 6.5.6 局部代价地图 156 6.5.7 全局代价地图 156 6.5.8 全局规划 157 6.5.9 局部规划 158 6.5.10 规划器规划 158 6.5.11 当前目标 159 6.6 自适应蒙特卡罗定位 160 6.7 使用rqt_reconfigure修改参数 161 6.8 机器人避障 162 6.9 发送目标 163 6.10 本章小结 166 第7章 使用MoveIt! 167 7.1 MoveIt!体系结构 167 7.1.1 运动规划 169 7.1.2 规划场景 169 7.1.3 世界几何结构显示器 170 7.1.4 运动学 170 7.1.5 碰撞检测 170 7.2 在MoveIt!中集成一个机械臂 171 7.2.1 工具箱里有什么 171 7.2.2 使用设置助手生成一个MoveIt!功能包 172 7.2.3 集成到RViz中 176 7.2.4 集成到Gazebo或实际机械臂中 179 7.3 简单的运动规划 180 7.3.1 规划单个目标 181 7.3.2 规划一个随机目标 181 7.3.3 规划预定义的群组状态 183 7.3.4 显示目标的运动 183 7.4 考虑碰撞的运动规划 184 7.4.1 将对象添加到规划场景中 184 7.4.2 从规划的场景中删除对象 185 7.4.3 应用点云进行运动规划 186 7.5 抓取和放置任务 187 7.5.1 规划的场景 188 7.5.2 要抓取的目标对象 189 7.5.3 支撑面 189 7.5.4 感知 191 7.5.5 抓取 191 7.5.6 抓取操作 193 7.5.7 放置操作 195 7.5.8 演示模式 197 7.5.9 在Gazebo中仿真 198 7.6 本章小结 199 第8章 在ROS下使用传感器和执行器 200 8.1 使用游戏杆或游戏手柄 200 8.1.1 joy_node如何发送游戏杆动作消息 201 8.1.2 使用游戏杆数据移动机器人模型 202 8.2 使用Arduino添加更多的传感器和执行器 206 8.2.1 创建使用Arduino的示例程序 207 8.2.2 由ROS和Arduino控制的机器人平台 210 8.3 使用9自由度低成本IMU 217 8.3.1 安装Razor IMU ROS库 219 8.3.2 Razor如何在ROS中发送数据 221 8.3.3 创建一个ROS节点以使用机器人中的9DoF传感器数据 222 8.3.4 使用机器人定位来融合传感器数据 223 8.4 使用IMU——Xsens MTi 225 8.5 GPS的使用 226 8.5.1 GPS如何发送信息 228 8.5.2 创建一个使用GPS的工程示例 229 8.6 使用激光测距仪——Hokuyo URG-04lx 230 8.6.1 了解激光如何在ROS中发送数据 231 8.6.2 访问和修改激光数据 232 8.7 创建launch文件 234 8.8 使用Kinect传感器查看3D环境中的对象 235 8.8.1 Kinect如何发送和查看传感器数据 236 8.8.2 创建使用Kinect的示例 238 8.9 使用伺服电动机——Dynamixel 239 8.9.1 Dynamixel如何发送和接收运动命令 241 8.9.2 创建和使用伺服电动机示例 241 8.10 本章小结 243 第9章 计算机视觉 244 9.1 ROS摄像头驱动程序支持 245 9.1.1 FireWire IEEE1394摄像头 245 9.1.2 USB摄像头 249 9.1.3 使用OpenCV制作USB摄像头驱动程序 250 9.2 ROS图像 255 9.3 ROS中的OpenCV库 256 9.3.1 安装OpenCV 3.0 256 9.3.2 在ROS中使用OpenCV 256 9.4 使用rqt_image_view显示摄像头输入的图像 257 9.5 标定摄像头 257 9.5.1 如何标定摄像头 258 9.5.2 双目标定 261 9.6 ROS图像管道 264 9.7 计算机视觉任务中有用的ROS功能包 269 9.7.1 视觉里程计 270 9.7.2 使用viso2实现视觉里程计 270 9.7.3 摄像头位姿标定 271 9.7.4 运行viso2在线演示 273 9.7.5 使用低成本双目摄像头运行viso2 276 9.8 使用RGBD深度摄像头实现视觉里程计 276 9.8.1 安装fovis 276 9.8.2 用Kinect RGBD深度摄像头运行fovis 277 9.9 计算两幅图像的单应性 278 9.10 本章小结 279 第10章 点云 280 10.1 理解点云库 280 10.1.1 不同的点云类型 281 10.1.2 PCL中的算法 281 10.1.3 ROS的PCL接口 282 10.2 我的第一个PCL程序 283 10.2.1 创建点云 284 10.2.2 加载和保存点云到硬盘中 287 10.2.3 可视化点云 290 10.2.4 滤波和缩减采样 294 10.2.5 配准与匹配 298 10.2.6 点云分区 301 10.3 分割 305 10.4 本章小结 308 |
评分
评分
评分
评分
评分
评分
评分
评分
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.qciss.net All Rights Reserved. 图书大百科 版权所有