您的位置:china-pub网上书店 > 计算机 > 人工智能 > 智能机器人 > [套装书]ROS机器人项目开发11例(原书第2版)+ROS机器人开发:实用案例分析(原书第2版)+ROS机器人编程:原理与应用+精通ROS机器人编程(原书第2版)+ROS机器人开发实践+ROS机器人开发:实用案例分析+ROS机器人编程实践+ROS机器人高效编程(原书第3版)+ROS机器人程序
[套装书]ROS机器人项目开发11例(原书第2版)+ROS机器人开发:实用案例分析(原书第2版)+ROS机器人编程:原理与应用+精通ROS机器人编程(原书第2版)+ROS机器人开发实践+ROS机器人开发:实用案例分析+ROS机器人编程实践+ROS机器人高效编程(原书第3版)+ROS机器人程序
基本信息
- 作者: 拉姆库玛·甘地那坦 郎坦·约瑟夫 卡罗尔·费尔柴尔德托马斯· L.哈曼 怀亚特·S. 纽曼 郎坦·约瑟夫乔纳森·卡卡切 胡春旭 卡罗尔·费尔柴尔德 托马斯L.哈曼 Morgan Quigley, Brian Gerkey, William D Smart 阿尼尔
- 译者: 吴中红 石章松 潘丽 张天雷 李博 谢远帆 大伟晓健 张瑞雷 刘锦涛 刘锦涛
- 丛书名: 机器人设计与制作系列
- 出版社:机械工业出版社
- ISBN:9782101201425
- 上架时间:2021-1-20
- 出版日期:2021 年1月
- 开本:16开
- 页码:1521
- 版次:1-1
- 所属分类:计算机 > 人工智能 > 智能机器人

编辑推荐
---------------------------ROS机器人开发:实用案例分析---------------------------
通过阅读本书,你将:
了解ROS的基本原理及其在机器人实例中的应用
控制移动机器人在一个环境中自主导航
使用URDF和Xacro建模机器人,并在ROS Gazebo模拟中操作
控制视觉伺服的7自由度机器人手臂
使用四旋翼飞行器进行自主锚点
掌握Gazebo、rviz、rqt和Move-It等ROS工具的使用
使用移动设备和控制器控制机器人
联合机器人完成一个协作任务
内容简介
书籍
计算机书籍
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
本书涵盖新的ROS发行版中的项目——ROS Melodic Morenia with Ubuntu Bionic(18.04)。从基本原理开始,本书向你介绍了ROS-2,并帮助你了解它与ROS-1的不同之处。你将能够在ROS中建模并构建工业移动机械手臂,并在Gazebo 9中进行模拟。然后,你将了解如何使用状态机处理复杂的机器人应用程序,以及一次处理多个机器人。本书还向你介绍了新的、流行的硬件,如Nvidia的Jetson Nano、华硕修补板和Beaglebone Black,并允许你探索与ROS的接口。
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
本书不仅涵盖ROS的基础知识,还循序渐进地讲解了ROS机器人的高级应用特性。书中首先对ROS的基本配置进行介绍,内容包括ROS的安装、基本概念、主要的功能包与工具等。然后对相应的故障排查方法进行了论述。之后通过模拟的方式,先对Tu rtIesim的ROS组成模块进行描述,再对其他几类典型机器人的ROS组成模块进行相应的介绍。对ROS组成模块的介绍,一般遵循的流程是首先介绍基本的ROS命令,然后对ROS的功能包、节点、主题以及消息进行论述,以此来对ROS机器人操作系统的整体内容进行详细的阐述。为了对书中选用的机器人的整体性能进行描述,书中还给出了相关机器人的技术资料。
---------------------------ROS机器人编程:原理与应用---------------------------
本书共分为六部分。第一部分介绍了如何编写ROS节点和ROS工具,也覆盖了消息、类和服务器。第二部分是用ROS进行模拟和可视化,其中包括坐标转换。第三部分讨论了ROS的感知过程。第四部分介绍了ROS中的移动机器人控制和导航。第五部分介绍了ROS机器人臂的相关知识。第六部分涉及系统集成和更高级别的控制,包括基于感知的移动操作。
计算机书籍
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
本书涵盖新的ROS发行版中的项目——ROS Melodic Morenia with Ubuntu Bionic(18.04)。从基本原理开始,本书向你介绍了ROS-2,并帮助你了解它与ROS-1的不同之处。你将能够在ROS中建模并构建工业移动机械手臂,并在Gazebo 9中进行模拟。然后,你将了解如何使用状态机处理复杂的机器人应用程序,以及一次处理多个机器人。本书还向你介绍了新的、流行的硬件,如Nvidia的Jetson Nano、华硕修补板和Beaglebone Black,并允许你探索与ROS的接口。
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
本书不仅涵盖ROS的基础知识,还循序渐进地讲解了ROS机器人的高级应用特性。书中首先对ROS的基本配置进行介绍,内容包括ROS的安装、基本概念、主要的功能包与工具等。然后对相应的故障排查方法进行了论述。之后通过模拟的方式,先对Tu rtIesim的ROS组成模块进行描述,再对其他几类典型机器人的ROS组成模块进行相应的介绍。对ROS组成模块的介绍,一般遵循的流程是首先介绍基本的ROS命令,然后对ROS的功能包、节点、主题以及消息进行论述,以此来对ROS机器人操作系统的整体内容进行详细的阐述。为了对书中选用的机器人的整体性能进行描述,书中还给出了相关机器人的技术资料。
---------------------------ROS机器人编程:原理与应用---------------------------
本书共分为六部分。第一部分介绍了如何编写ROS节点和ROS工具,也覆盖了消息、类和服务器。第二部分是用ROS进行模拟和可视化,其中包括坐标转换。第三部分讨论了ROS的感知过程。第四部分介绍了ROS中的移动机器人控制和导航。第五部分介绍了ROS机器人臂的相关知识。第六部分涉及系统集成和更高级别的控制,包括基于感知的移动操作。
.
---------------------------精通ROS机器人编程(原书第2版)---------------------------
本书主要面向机器人开发人员和想充分利用ROS功能的研究人员,是一本侧重ROS框架高级概念的进阶学习指南。书中既介绍了ROS的基本概念,又系统讲解了使用ROS进行复杂机器人设计、建模、仿真和交互的实用技术、工具和编程技巧,包含大量示例,可以为你快速提升ROS实战技能提供翔实参考。
全书共15章,第1章简要介绍ROS基本概念;第2章解释如何使用ROS软件包;第3章讨论7-DOF机械臂和差速驱动机器人的设计;第4章和第5章通过示例详细讲解如何使用Gazebo和V-REP这两个著名的机器人仿真软件;第6章介绍如何使用ROS MoveIt!和导航软件包集的现有功能;第7章讨论ROS pluginlib、小节点和控制器等一些高级概念;第8章进一步讨论RViz插件和ROS控制器;第9章讨论一些硬件组件与ROS的接口;第10章讨论如何使用ROS连接各种视觉传感器,并利用开源计算机视觉库(OpenCV)和点云库(PCL)进行编程;第11章介绍如何构建差速驱动的自主移动机器人,并将其与ROS连接;第12章介绍MoveIt!的高级功能;第13章讨论如何将Matlab和Simulink软件与ROS连接;第14章介绍ROS-Industrial软件包;第15章讨论如何在ROS中安装集成开发环境,并介绍ROS实战技巧与调试方法。
---------------------------ROS机器人开发实践---------------------------
本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;后论述ROS2的框架特点和使用方法,剖析ROS的发展方向。
---------------------------ROS机器人开发:实用案例分析---------------------------
本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。
---------------------------ROS机器人编程实践---------------------------
本书通过将ROS社区的宝贵开发经验和现实案例相结合,为你在机器人开发过程中遇到的问题提供切实可行的指南。不论你是机器人俱乐部的学生,还是专业的机器人科学家和工程师,都可以在本书中找到你想要的内容。书中的每部分都提供了使用ROS工具实现各类机器人系统的完整解决方案,不仅包括实现各种单一机器人任务,也包括将不同模块结合完成组合任务。在本书中,只要你熟悉Python,就可以开始动手实践。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人/传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
无论是业余爱好者还是专业的机器人开发人员,在开始进行机器人系统及程序设计时,首先要面对的问题都是基本的如何驱动机器人的轮子的设计。ROS通过软件代码复用集成了众多已经开发完成的功能组件。本书专门帮助读者从对ROS一无所知到能够通过ROS系统完成小型机器人系统的开发和编程工作。本书提供了各种实际的示例代码供读者学习和理解ROS的软件框架。你可以在仿真环境中自行构建机器人相应的功能程序。本书第2版在第1版的基础上增加了与ROSHydro一起工作,如何创建、可视化和处理不同传感器的点云信息,如何控制和利用多关节机械臂,并提供简单易懂的实用教程编写自己的机器人。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
本书主要面向机器人开发人员和想充分利用ROS功能的研究人员,是一本侧重ROS框架高级概念的进阶学习指南。书中既介绍了ROS的基本概念,又系统讲解了使用ROS进行复杂机器人设计、建模、仿真和交互的实用技术、工具和编程技巧,包含大量示例,可以为你快速提升ROS实战技能提供翔实参考。
全书共15章,第1章简要介绍ROS基本概念;第2章解释如何使用ROS软件包;第3章讨论7-DOF机械臂和差速驱动机器人的设计;第4章和第5章通过示例详细讲解如何使用Gazebo和V-REP这两个著名的机器人仿真软件;第6章介绍如何使用ROS MoveIt!和导航软件包集的现有功能;第7章讨论ROS pluginlib、小节点和控制器等一些高级概念;第8章进一步讨论RViz插件和ROS控制器;第9章讨论一些硬件组件与ROS的接口;第10章讨论如何使用ROS连接各种视觉传感器,并利用开源计算机视觉库(OpenCV)和点云库(PCL)进行编程;第11章介绍如何构建差速驱动的自主移动机器人,并将其与ROS连接;第12章介绍MoveIt!的高级功能;第13章讨论如何将Matlab和Simulink软件与ROS连接;第14章介绍ROS-Industrial软件包;第15章讨论如何在ROS中安装集成开发环境,并介绍ROS实战技巧与调试方法。
---------------------------ROS机器人开发实践---------------------------
本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;后论述ROS2的框架特点和使用方法,剖析ROS的发展方向。
---------------------------ROS机器人开发:实用案例分析---------------------------
本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。
---------------------------ROS机器人编程实践---------------------------
本书通过将ROS社区的宝贵开发经验和现实案例相结合,为你在机器人开发过程中遇到的问题提供切实可行的指南。不论你是机器人俱乐部的学生,还是专业的机器人科学家和工程师,都可以在本书中找到你想要的内容。书中的每部分都提供了使用ROS工具实现各类机器人系统的完整解决方案,不仅包括实现各种单一机器人任务,也包括将不同模块结合完成组合任务。在本书中,只要你熟悉Python,就可以开始动手实践。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人/传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
无论是业余爱好者还是专业的机器人开发人员,在开始进行机器人系统及程序设计时,首先要面对的问题都是基本的如何驱动机器人的轮子的设计。ROS通过软件代码复用集成了众多已经开发完成的功能组件。本书专门帮助读者从对ROS一无所知到能够通过ROS系统完成小型机器人系统的开发和编程工作。本书提供了各种实际的示例代码供读者学习和理解ROS的软件框架。你可以在仿真环境中自行构建机器人相应的功能程序。本书第2版在第1版的基础上增加了与ROSHydro一起工作,如何创建、可视化和处理不同传感器的点云信息,如何控制和利用多关节机械臂,并提供简单易懂的实用教程编写自己的机器人。
作译者
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
关于我们
客户服务
友情链接
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
[美]卡罗尔·费尔柴尔德(Carol Fairchild)托马斯· L.哈曼(Thomas L.Harman)著:卡罗尔•费尔柴尔德(Carol Fairchild)是费尔柴尔德机器人公司的所有人、首席工程师,该公司致力于机器人技术的开发与集成。她是休斯顿大学明湖分校巴克斯特机器人实验室的一名研究人员和兼职教授。她的研究领域主要是基于Baxter机器人的扩展应用开发。她在得州农工大学获得工程技术学士学位,在休斯顿大学明湖分校获得计算机工程硕士学位。
托马斯•L. 哈曼(Thomas L. Harman)是休斯顿大学明湖分校工程系的主任。他的研究领域主要是控制系统、机器人技术与微处理器技术的应用等。他和同事关于机器人和激光的论文已经应用在了医学领域。2005年,他当选为休斯顿大学明湖分校的特聘教授。他曾担任FIRST机器人大赛的裁判与安全顾问。他已经出版的专著、合著书籍有18本,主题包括微处理器技术、MATLAB与仿真以及美国国家电气规程等。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
.
[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace) 著:朗坦·约瑟夫(Lentin Joseph)是一名来自印度的作家、创业者。他是印度Qbotics实验室的创始人兼CEO,在机器人领域已经有7年的从业经验,主要研究方向包括机器人操作系统(ROS)、OpenCV、PCL等。
乔纳森·卡卡切(Jonathan Cacace)在意大利那不勒斯腓特烈二世大学获计算机科学硕士学位及信息与自动化工程博士学位。目前,乔纳森是那不勒斯腓特烈二世大学PRISMA实验室的博士后,主要研究工业机器人和服务机器人,曾经开发了几款基于ROS且集成了机器人感知控制的机器人应用。
---------------------------ROS机器人开发:实用案例分析---------------------------
作者简介
卡罗尔·费尔柴尔德(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机器人以及其他几款机器人。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
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/)。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
About the Authors 作者简介Enrique Fernández在拉斯帕尔马斯大学获得计算机工程博士学位,目前是Clearpath Robotics公司高级机器人工程师。2009年他完成了关于SLAM的硕士学位论文。2013年他的博士论文解决了自主水下滑翔器(AUG)的路径规划问题。那段时间,他还研究了计算机视觉、人工智能以及其他机器人学课题,例如赫罗纳大学的CIRS/ViCOROB研究实验室AUV的惯性导航系统和视觉SLAM。他在2012年参加了欧洲学生自主水下航行器设计挑战赛(Student Autonomous Underwater Challenge-Europe,SAUC-E)并获奖,在2013年作为合作者参与了SAUC-E。
获得博士学位后,Enrique作为高级机器人工程师在2013年6月加入PAL Robotics公司的自主导航部门。在那里,他开发了用于REEM、REEM-C和移动机器人以及相关项目的软件,如使用ROS框架的Stockbot。他的研究方向包括运动规划(路径规划和移动机器人控制)、机器人定位和SLAM。在2015年,他作为高级自主系统开发人员加盟Clearpath Robotics公司的自主系统部门从事SLAM相关工作。
在学术方面,Enrique发表了多篇会议论文,其中两篇于2011年发表在《International Conference of Robotics and Automation》(ICRA)上。他是Packt Publishing出版的第1版《ROS机器人程序设计》和其他一些书部分章节的作者。他的硕士学位论文是关于室内机器人的FastSLAM算法,此机器人装备了SICK激光扫描仪以及Pioneer差动平台的轮式里程计。他的博士学位论文是关于AUG的路径规划算法和工具。他还拥有电子和嵌入式系统(如PC104和Arduino)的开发经验。他的研究背景包括SLAM、计算机视觉、路径规划、优化、机器人学和人工智能。
我要感谢这本书的合著者,感谢他们为完成这本书所付出的努力以及提供了无数示例的代码。我还要感谢博士论文期间大学智能系统和计算工程研究所(University Institute of Intelligent Systems and Computational Engineering,SIANI)和水下机器人研究中心(Center of Underwater Robotics Research,CIRS/ViCOROB)的研究小组成员。我也要感谢在PAL机器人公司的同事,在那里我学到很多关于ROS、机器人运动以及仿人双足机器人的知识,不仅有软件,还有电子和硬件设计。后,我要感谢我的家人和朋友的帮助与支持。
Luis Sánchez Crespo在拉斯帕尔马斯大学获得了电子与电信工程的双硕士学位。他曾在技术开发和创新研究所(IDETIC)、加那利群岛海洋平台(PLOCAN)和应用微电子研究所(IUMA)与不同的研究小组合作,进行超分辨率算法成像研究。
他的专业兴趣包括应用于机器人系统的计算机视觉、信号处理和电子设计。因此,他加入了AVORA团队,这批年轻的工程师和学生从零开始从事自主水下航行器(AUV)的开发工作。在这个项目中,Luis开始开发声学和计算机视觉系统,用于提取不同传感器的信息,例如水听器、声呐和摄像头。
依托海洋技术的强大背景,Luis与人合作创办了一家新的初创公司Subsea Mechatronics,致力于为水下环境开发遥控操作和自主航行器。
下面是海洋技术工程师和企业家(LPA Fabrika:Gran Canaria Maker Space的联合创始人和制造商)Dario Sosa Cabrera对Luis的评价:
“他很热情,是一个多学科的工程师。他对工作负责。他可以自我管理,并承担一个团队领导者的责任,如在SAUC-E竞赛中领导了AVORA团队。他在电子和电信领域的背景让其具备从信号处理和软件到电子设计和制造的广泛专业知识。”
Luis作为技术审校者参与了Packt Publishing出版的第1版《ROS机器人程序设计》的相关工作。
首先,我要感谢Aaron、Anil以及Enrique邀请我参与编写这本书。和他们一起工作非常快乐。同时,我也要感谢水下机电团队关于重型水下机器人的丰富经验,这些年我们一起成长。我必须提到LPA Fabrika:Gran Canaria Maker Space,他们备课和讲授教育机器人及技术项目极富热情,与他们共享工作环境也非常令人激动。
后,我要感谢我的家人和女朋友对我参与的每个项目的大力支持和鼓励。
Anil Mahtani是一名从事水下机器人工作5年的计算机科学家。他在该领域工作是在完成硕士论文期间为低成本ROV开发软件架构。在此期间,他也成为AVORA的团队领导者和主要开发人员,这个团队的高校学生设计和开发了一个自主水下航行器并参加了2012年的SAUC-E。同年,他完成了论文并获得了拉斯帕尔马斯大学的计算机科学硕士学位。此后不久,他成为SeeByte公司的软件工程师,这家公司是水下系统智能软件解决方案的全球领导者。
在SeeByte公司工作期间,Anil参与了军方、石油和天然气公司的一些半自主和自主水下系统的核心开发。在这些项目中,他积极参与自主系统开发、分布式软件体系结构设计和底层软件开发,同时也为前视声呐图像提供计算机视觉解决方案。他还获得了项目经理职位,管理一个开发和维护内核C++库的工程师团队。
他的专业兴趣主要包括软件工程、算法、分布式系统、网络和操作系统。Anil在机器人方向主要负责提供高效和健壮的软件解决方案,不仅解决当前存在的问题,还预见未来的问题或可能的改进。鉴于他的经验,他在计算机视觉、机器学习和控制问题上也有独特的见解。Anil对DIY和电子学有兴趣,并且开发了一些Arduino库回馈社区。
首先,我要感谢我的家人和朋友的支持,他们总是在我需要的时候帮助我。我也要感谢我的同事和朋友David Rubio Vidal、Emilio Miguelá?ez Martín和John Brydon给我大的支持,他们以专业的方式教我很多知识。我还要感谢我在SeeByte和AVORA团队的同事,这些年从他们那里学习并经历很多。后,我要特别感谢Jorge Cabrera Gámez,他的指导和建议成就了我自己从未想象到的职业生涯。
Aaron Martinez是数字化制造领域的电脑工程师、企业家和专家。他于2010年在拉斯帕尔马斯大学的Instituto Universitario de Cienciasy Tecnologias Ciberneticas(IUCTC)完成硕士论文。他在远程监控领域使用沉浸式设备和机器人平台准备硕士论文。得到学位后,他参加了在奥地利林茨开普勒大学研究所的机器人学实习计划。在实习期间,他作为团队的一员使用ROS和导航包集进行移动平台开发。之后,他参与了有关机器人的项目,其中一个是拉斯帕尔马斯大学的AVORA项目。在这个项目中,他参与自主水下航行器制作,并参与意大利的SAUC-E。2012年,他负责维护这个项目;2013年,他帮助从ROS向机器人平台移植导航包集和其他算法。
近,Aaron与人共同创立了一家名为SubSeaMechatronics SL的公司。这家公司从事与水下机器人和遥控系统相关的项目,还设计和制造水下传感器。公司的主要目标是开发用于研发原型和重型机械手的定制解决方案。
Aaron有许多领域的经验,比如编程、机器人、机电一体化、数字化制造以及Arduino、BeagleBone、服务器和激光雷达等设备。如今,他在SubSeaMechatronics SL公司从事水下和空中环境的机器人平台设计。
我要感谢我的女朋友,她在我写这本书时给我支持以及给我继续成长的动力。我还要感谢Donato Monopoli(加那利群岛技术研究所(ITC)生物医学工程部门的主管),以及ITC所有的工作人员,感谢他们使我懂得数字制造、机械以及组织工程,我在此度过了生命中美好的时光。
感谢我大学的同事,特别是Alexis Quesada,他给了我在准备硕士论文时创建我第壹个机器人的机会。和他们一起工作,使我学习到很多关于机器人的知识。
最后,我要感谢家人和朋友的帮助与支持。
[印度]郎坦·约瑟夫(Lentin Joseph)[意大利]乔纳森·卡卡切(Jonathan Cacace) 著:朗坦·约瑟夫(Lentin Joseph)是一名来自印度的作家、创业者。他是印度Qbotics实验室的创始人兼CEO,在机器人领域已经有7年的从业经验,主要研究方向包括机器人操作系统(ROS)、OpenCV、PCL等。
乔纳森·卡卡切(Jonathan Cacace)在意大利那不勒斯腓特烈二世大学获计算机科学硕士学位及信息与自动化工程博士学位。目前,乔纳森是那不勒斯腓特烈二世大学PRISMA实验室的博士后,主要研究工业机器人和服务机器人,曾经开发了几款基于ROS且集成了机器人感知控制的机器人应用。
---------------------------ROS机器人开发:实用案例分析---------------------------
作者简介
卡罗尔·费尔柴尔德(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机器人以及其他几款机器人。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
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/)。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
About the Authors 作者简介Enrique Fernández在拉斯帕尔马斯大学获得计算机工程博士学位,目前是Clearpath Robotics公司高级机器人工程师。2009年他完成了关于SLAM的硕士学位论文。2013年他的博士论文解决了自主水下滑翔器(AUG)的路径规划问题。那段时间,他还研究了计算机视觉、人工智能以及其他机器人学课题,例如赫罗纳大学的CIRS/ViCOROB研究实验室AUV的惯性导航系统和视觉SLAM。他在2012年参加了欧洲学生自主水下航行器设计挑战赛(Student Autonomous Underwater Challenge-Europe,SAUC-E)并获奖,在2013年作为合作者参与了SAUC-E。
获得博士学位后,Enrique作为高级机器人工程师在2013年6月加入PAL Robotics公司的自主导航部门。在那里,他开发了用于REEM、REEM-C和移动机器人以及相关项目的软件,如使用ROS框架的Stockbot。他的研究方向包括运动规划(路径规划和移动机器人控制)、机器人定位和SLAM。在2015年,他作为高级自主系统开发人员加盟Clearpath Robotics公司的自主系统部门从事SLAM相关工作。
在学术方面,Enrique发表了多篇会议论文,其中两篇于2011年发表在《International Conference of Robotics and Automation》(ICRA)上。他是Packt Publishing出版的第1版《ROS机器人程序设计》和其他一些书部分章节的作者。他的硕士学位论文是关于室内机器人的FastSLAM算法,此机器人装备了SICK激光扫描仪以及Pioneer差动平台的轮式里程计。他的博士学位论文是关于AUG的路径规划算法和工具。他还拥有电子和嵌入式系统(如PC104和Arduino)的开发经验。他的研究背景包括SLAM、计算机视觉、路径规划、优化、机器人学和人工智能。
我要感谢这本书的合著者,感谢他们为完成这本书所付出的努力以及提供了无数示例的代码。我还要感谢博士论文期间大学智能系统和计算工程研究所(University Institute of Intelligent Systems and Computational Engineering,SIANI)和水下机器人研究中心(Center of Underwater Robotics Research,CIRS/ViCOROB)的研究小组成员。我也要感谢在PAL机器人公司的同事,在那里我学到很多关于ROS、机器人运动以及仿人双足机器人的知识,不仅有软件,还有电子和硬件设计。后,我要感谢我的家人和朋友的帮助与支持。
Luis Sánchez Crespo在拉斯帕尔马斯大学获得了电子与电信工程的双硕士学位。他曾在技术开发和创新研究所(IDETIC)、加那利群岛海洋平台(PLOCAN)和应用微电子研究所(IUMA)与不同的研究小组合作,进行超分辨率算法成像研究。
他的专业兴趣包括应用于机器人系统的计算机视觉、信号处理和电子设计。因此,他加入了AVORA团队,这批年轻的工程师和学生从零开始从事自主水下航行器(AUV)的开发工作。在这个项目中,Luis开始开发声学和计算机视觉系统,用于提取不同传感器的信息,例如水听器、声呐和摄像头。
依托海洋技术的强大背景,Luis与人合作创办了一家新的初创公司Subsea Mechatronics,致力于为水下环境开发遥控操作和自主航行器。
下面是海洋技术工程师和企业家(LPA Fabrika:Gran Canaria Maker Space的联合创始人和制造商)Dario Sosa Cabrera对Luis的评价:
“他很热情,是一个多学科的工程师。他对工作负责。他可以自我管理,并承担一个团队领导者的责任,如在SAUC-E竞赛中领导了AVORA团队。他在电子和电信领域的背景让其具备从信号处理和软件到电子设计和制造的广泛专业知识。”
Luis作为技术审校者参与了Packt Publishing出版的第1版《ROS机器人程序设计》的相关工作。
首先,我要感谢Aaron、Anil以及Enrique邀请我参与编写这本书。和他们一起工作非常快乐。同时,我也要感谢水下机电团队关于重型水下机器人的丰富经验,这些年我们一起成长。我必须提到LPA Fabrika:Gran Canaria Maker Space,他们备课和讲授教育机器人及技术项目极富热情,与他们共享工作环境也非常令人激动。
后,我要感谢我的家人和女朋友对我参与的每个项目的大力支持和鼓励。
Anil Mahtani是一名从事水下机器人工作5年的计算机科学家。他在该领域工作是在完成硕士论文期间为低成本ROV开发软件架构。在此期间,他也成为AVORA的团队领导者和主要开发人员,这个团队的高校学生设计和开发了一个自主水下航行器并参加了2012年的SAUC-E。同年,他完成了论文并获得了拉斯帕尔马斯大学的计算机科学硕士学位。此后不久,他成为SeeByte公司的软件工程师,这家公司是水下系统智能软件解决方案的全球领导者。
在SeeByte公司工作期间,Anil参与了军方、石油和天然气公司的一些半自主和自主水下系统的核心开发。在这些项目中,他积极参与自主系统开发、分布式软件体系结构设计和底层软件开发,同时也为前视声呐图像提供计算机视觉解决方案。他还获得了项目经理职位,管理一个开发和维护内核C++库的工程师团队。
他的专业兴趣主要包括软件工程、算法、分布式系统、网络和操作系统。Anil在机器人方向主要负责提供高效和健壮的软件解决方案,不仅解决当前存在的问题,还预见未来的问题或可能的改进。鉴于他的经验,他在计算机视觉、机器学习和控制问题上也有独特的见解。Anil对DIY和电子学有兴趣,并且开发了一些Arduino库回馈社区。
首先,我要感谢我的家人和朋友的支持,他们总是在我需要的时候帮助我。我也要感谢我的同事和朋友David Rubio Vidal、Emilio Miguelá?ez Martín和John Brydon给我大的支持,他们以专业的方式教我很多知识。我还要感谢我在SeeByte和AVORA团队的同事,这些年从他们那里学习并经历很多。后,我要特别感谢Jorge Cabrera Gámez,他的指导和建议成就了我自己从未想象到的职业生涯。
Aaron Martinez是数字化制造领域的电脑工程师、企业家和专家。他于2010年在拉斯帕尔马斯大学的Instituto Universitario de Cienciasy Tecnologias Ciberneticas(IUCTC)完成硕士论文。他在远程监控领域使用沉浸式设备和机器人平台准备硕士论文。得到学位后,他参加了在奥地利林茨开普勒大学研究所的机器人学实习计划。在实习期间,他作为团队的一员使用ROS和导航包集进行移动平台开发。之后,他参与了有关机器人的项目,其中一个是拉斯帕尔马斯大学的AVORA项目。在这个项目中,他参与自主水下航行器制作,并参与意大利的SAUC-E。2012年,他负责维护这个项目;2013年,他帮助从ROS向机器人平台移植导航包集和其他算法。
近,Aaron与人共同创立了一家名为SubSeaMechatronics SL的公司。这家公司从事与水下机器人和遥控系统相关的项目,还设计和制造水下传感器。公司的主要目标是开发用于研发原型和重型机械手的定制解决方案。
Aaron有许多领域的经验,比如编程、机器人、机电一体化、数字化制造以及Arduino、BeagleBone、服务器和激光雷达等设备。如今,他在SubSeaMechatronics SL公司从事水下和空中环境的机器人平台设计。
我要感谢我的女朋友,她在我写这本书时给我支持以及给我继续成长的动力。我还要感谢Donato Monopoli(加那利群岛技术研究所(ITC)生物医学工程部门的主管),以及ITC所有的工作人员,感谢他们使我懂得数字制造、机械以及组织工程,我在此度过了生命中美好的时光。
感谢我大学的同事,特别是Alexis Quesada,他给了我在准备硕士论文时创建我第壹个机器人的机会。和他们一起工作,使我学习到很多关于机器人的知识。
最后,我要感谢家人和朋友的帮助与支持。
目录
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
译者序
前言
作者简介
第1章 ROS入门 1
1.1 技术要求 2
1.2 ROS概述 2
1.2.1 ROS发行版 3
1.2.2 支持的操作系统 3
1.2.3 支持的机器人及传感器 4
1.2.4 为什么选择ROS 5
1.3 ROS基础 6
1.3.1 文件系统层级 7
1.3.2 计算图层级 7
1.3.3 ROS社区层级 9
1.3.4 ROS中的通信 9
1.4 ROS客户端库 10
1.5 ROS工具 11
1.5.1 ROS的可视化工具RViz 11
1.5.2 rqt_plot 11
1.5.3 rqt_graph 12
1.6 ROS模拟器 13
1.7 在Ubuntu 18.04 LTS上安装ROS Melodic 13
1.8 在VirtualBox上设置ROS 18
1.9 Docker简介 19
1.9.1 为什么选择Docker 20
1.9.2 安装Docker 20
1.10 设置ROS工作空间 23
1.11 ROS在工业界和学术界的机遇 25
1.12 本章小结 25
第2章 ROS-2及其特性简介 26
2.1 技术要求 27
2.2 ROS-2概述 27
2.2.1 ROS-2发行版 28
2.2.2 支持的操作系统 28
2.2.3 支持的机器人及传感器 29
2.2.4 为什么选择ROS-2 29
2.3 ROS-2基础 30
2.3.1 什么是DDS 30
2.3.2 DDS的实现 30
2.3.3 计算图 31
2.3.4 ROS-2社区层级 32
2.3.5 ROS-2中的通信 32
2.3.6 ROS-2的变化 33
2.4 ROS-2客户端库 33
2.5 ROS-2工具 34
2.5.1 RViz2 34
2.5.2 Rqt 36
2.6 安装ROS-2 36
2.6.1 开始安装 37
2.6.2 获取ROS-2源码 38
2.6.3 ROS-1、ROS-2以及共存环境设置 41
2.6.4 运行测试节点 42
2.7 设置ROS-2工作空间 44
2.8 编写ROS-2节点 45
2.8.1 ROS-1代码示例 45
2.8.2 ROS-2代码示例 46
2.8.3 ROS-1发布者节点与ROS-2发布者节点的区别 49
2.9 ROS-1和ROS-2的通信 50
2.10 本章小结 52
第3章 构建工业级移动机械臂 53
3.1 技术要求 54
3.2 常见的移动机械臂 54
3.3 移动机械臂应用场景 55
3.4 移动机械臂构建入门 56
3.4.1 单位及坐标系 57
3.4.2 Gazebo及ROS机器人模型格式设定 57
3.5 机器人底座构建 58
3.5.1 机器人底座需求 58
3.5.2 软件参数 60
3.5.3 机器人底座建模 60
3.5.4 机器人底座模拟 64
3.5.5 机器人底座测试 68
3.6 机械臂构建 70
3.6.1 机械臂需求 71
3.6.2 软件参数 72
3.6.3 机械臂建模 72
3.6.4 机械臂模拟 74
3.6.5 机械臂测试 77
3.7 系统集成 78
3.7.1 移动机械臂建模 78
3.7.2 移动机械臂模拟与测试 79
3.8 本章小结 80
第4章 基于状态机的复杂机器人任务处理 81
4.1 技术要求 81
4.2 ROS动作机制简介 82
4.2.1 服务器–客户端结构概述 82
4.2.2 actionlib示例:机械臂客户端 83
4.2.3 基于actionlib的服务器–客户端示例:电池模拟器 85
4.3 服务员机器人应用示例 90
4.4 状态机简介 92
4.5 SMACH简介 93
4.6 SMACH入门 96
4.6.1 SMACH-ROS的安装与使用 96
4.6.2 简单示例 96
4.6.3 餐厅机器人应用示例 98
4.7 本章小结 102
第5章 构建工业级应用程序 103
5.1 技术要求 103
5.2 应用案例:机器人送货上门 104
5.3 机器人底座智能化 106
5.3.1 添加激光扫描传感器 106
5.3.2 配置导航栈 108
5.3.3 环境地图构建 110
5.3.4 机器人底座定位 111
5.4 机械臂智能化 111
5.4.1 Moveit简介 112
5.4.2 安装与配置Moveit 113
5.4.3 通过Moveit控制机械臂 117
5.5 应用程序模拟 120
5.5.1 环境地图构建与保存 120
5.5.2 选择目标点 120
5.5.3 添加目标点 121
5.5.4 状态机构建 121
5.6 机器人改进 121
5.7 本章小结 122
第6章 多机器人协同 123
6.1 技术要求 123
6.2 集群机器人基本概念 124
6.3 集群机器人分类 125
6.4 ROS中的多机器人通信 125
6.4.1 单个roscore和公共网络 126
6.4.2 群组/名称空间的使用 127
6.4.3 基于群组/名称空间的多机器人系统构建示例 128
6.5 多master概念简介 131
6.5.1 multimaster_fkie功能包简介 132
6.5.2 安装multimaster_fkie功能包 133
6.5.3 设置multimaster_fkie功能包 133
6.6 多机器人应用示例 136
6.7 本章小结 138
第7章 嵌入式平台上的ROS应用及其控制 139
7.1 技术要求 139
7.2 嵌入式板基础知识 140
7.2.1 重要概念介绍 141
7.2.2 机器人领域微控制器和微处理器的区别 142
7.2.3 板卡选型步骤 142
7.3 微控制器板简介 143
7.3.1 Arduino Mega 143
7.3.2 STM32 144
7.3.3 ESP8266 145
7.3.4 ROS支持的嵌入式板 146
7.3.5 对比表格 147
7.4 单板计算机简介 147
7.4.1 CPU板 148
7.4.2 GPU板 151
7.5 Debian与Ubuntu 152
7.6 在Tinkerboard S平台上设置操作系统 153
7.6.1 基础需求 153
7.6.2 安装Tinkerboard Debian操作系统 153
7.6.3 安装Armbian和ROS 154
7.6.4 使用可用的ROS镜像安装 156
7.7 在BeagleBone Black平台上设置ROS 156
7.7.1 基础需求 156
7.7.2 安装Debian 操作系统 157
7.7.3 安装Ubuntu和ROS 158
7.8 在Raspberry Pi 3/4平台上设置ROS 159
7.8.1 基础需求 159
7.8.2 安装Raspbian和ROS 159
7.8.3 安装Ubuntu和ROS 160
7.9 在Jetson Nano平台上设置ROS 161
7.10 通过ROS控制GPIO 161
7.10.1 Tinkerboard S 162
7.10.2 BeagleBone Black 163
7.10.3 Raspberry Pi 3/4 164
7.10.4 Jetson Nano 165
7.11 嵌入式板基准测试 166
7.12 Alexa入门及连接ROS 168
7.12.1 Alexa 技能构建前提条件 168
7.12.2 创建Alexa技能 169
7.13 本章小结 173
第8章 强化学习与机器人学 174
8.1 技术要求 174
8.2 机器学习概述 175
8.2.1 监督学习 175
8.2.2 无监督学习 175
8.2.3 强化学习 176
8.3 理解强化学习 176
8.3.1 探索与开发 177
8.3.2 强化学习公式 177
8.3.3 强化学习平台 178
8.3.4 机器人领域的强化学习应用 179
8.4 马尔可夫决策过程与贝尔曼方程 179
8.5 强化学习算法 181
8.5.1 出租车问题应用示例 181
8.5.2 TD预测 182
8.5.3 TD控制 183
8.6 ROS中的强化学习功能包 189
8.6.1 gym-gazebo 189
8.6.2 gym-gazebo2 194
8.7 本章小结 196
第9章 ROS下基于TensorFlow的深度学习 197
9.1 技术要求 197
9.2 深度学习及其应用简介 198
9.3 机器人领域的深度学习 198
9.4 深度学习库 199
9.5 TensorFlow入门 200
9.5.1 在Ubuntu 18.04 LTS上安装TensorFlow 200
9.5.2 TensorFlow概念 202
9.5.3 在TensorFlow下编写第一行代码 204
9.6 ROS下基于TensorFlow的图像识别 206
9.6.1 基础需求 207
9.6.2 ROS图像识别节点 207
9.7 scikit-learn简介 210
9.8 SVM及其在机器人领域的应用简介 211
9.9 本章小结 214
第10章 ROS下的自动驾驶汽车构建 215
10.1 技术要求 215
10.2 自动驾驶汽车入门 216
10.3 典型自动驾驶汽车基本组件 218
10.3.1 GPS、IMU和车轮编码器 218
10.3.2 摄像头 219
10.3.3 超声波传感器 219
10.3.4 LIDAR与RADAR 219
10.3.5 自动驾驶汽车的软件模块体系结构 221
10.4 ROS下的自动驾驶汽车模拟与交互 222
10.4.1 Velodyne LIDAR模拟 223
10.4.2 ROS下的Velodyne传感器接口 224
10.4.3 激光扫描仪模拟 225
10.4.4 模拟代码扩展 226
10.4.5 ROS下的激光扫描仪接口 227
10.4.6 Gazebo下的立体与单目摄像头模拟 228
10.4.7 ROS下的摄像头接口 229
10.4.8 Gazebo下的GPS模拟 230
10.4.9 ROS下的GPS接口 231
10.4.10 Gazebo下的IMU模拟 231
10.4.11 ROS下的IMU接口 233
10.4.12 Gazebo下的超声波传感器模拟 233
10.4.13 低成本LIDAR传感器 235
10.5 Gazebo下带传感器的自动驾驶汽车模拟 236
10.6 ROS下的DBW汽车接口 241
10.6.1 功能包安装 241
10.6.2 自动驾驶汽车及传感器数据可视化 241
10.6.3 基于ROS与DBW通信 243
10.7 Udacity开源自动驾驶汽车项目简介 243
10.7.1 Udacity的开源自动驾驶汽车模拟器 244
10.7.2 MATLAB ADAS工具箱 246
10.8 本章小结 246
第11章 基于VR头盔和Leap Motion的机器人遥操作 247
11.1 技术要求 248
11.2 VR头盔和Leap Motion传感器入门 248
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的交互 260
11.9 VR下的TurtleBot模拟 262
11.9.1 安装TurtleBot模拟器 262
11.9.2 在VR中控制TurtleBot 262
11.10 ROS-VR应用程序故障排除 263
11.11 ROS-VR应用与Leap Motion遥操作功能集成 264
11.12 本章小结 265
第12章 基于ROS、Open CV和Dynamixel伺服系统的人脸识别与跟踪 266
12.1 技术要求 266
12.2 项目概述 267
12.3 硬件和软件基础需求 267
12.4 使用RoboPlus配置Dynamixel伺服系统 271
12.5 Dynamixel与ROS连接 275
12.6 创建人脸跟踪器ROS功能包 276
12.7 使用人脸跟踪ROS功能包 278
12.7.1 理解人脸跟踪器代码 279
12.7.2 理解CMakeLists.txt 283
12.7.3 track.yaml文件 284
12.7.4 启动文件 284
12.7.5 运行人脸跟踪器节点 285
12.7.6 face_tracker_control功能包 286
12.7.7 平移控制器配置文件 287
12.7.8 伺服系统参数配置文件 287
12.7.9 人脸跟踪控制器节点 288
12.7.10 创建CMakeLists.txt 289
12.7.11 测试人脸跟踪器控制功能包 290
12.7.12 节点集成 291
12.7.13 固定支架并设置电路 291
12.7.14 最终运行 292
12.8 本章小结 292
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
译者序
前言
作者简介
审校者简介
第1章 ROS初体验 1
1.1 ROS的用途以及学习ROS的好处 1
1.2 哪些机器人采用了ROS 2
1.3 安装并启动ROS 4
1.3.1 配置Ubuntu系统的软件源 4
1.3.2 设置Ubuntu系统软件源列表 5
1.3.3 设置Ubuntu系统密钥 5
1.3.4 安装ROS Kinetic 5
1.3.5 初始化rosdep 6
1.3.6 环境设置 6
1.3.7 安装 rosinstall 6
1.3.8 故障排除—ROS环境测试 7
1.4 创建catkin工作空间 7
1.5 ROS的功能包与清单 8
1.5.1 ROS清单 8
1.5.2 探索ROS功能包 8
1.6 ROS节点、话题与消息 10
1.6.1 ROS节点 11
1.6.2 ROS话题 11
1.6.3 ROS消息 11
1.6.4 ROS节点管理器 12
1.6.5 确定节点和话题的ROS命令 13
1.7 第一个ROS机器人模拟程序turtlesim 15
1.7.1 启动turtlesim节点 15
1.7.2 turtlesim节点 16
1.7.3 turtlesim话题与消息 18
1.7.4 通过发布/turtle1/cmd_vel话题控制乌龟运动 20
1.7.5 通过键盘或游戏手柄控制乌龟移动 22
1.7.6 turtlesim的参数服务器 22
1.7.7 控制乌龟移动的ROS服务 24
1.8 ROS命令小结 25
1.9 本章小结 26
第2章 构建一个模拟的两轮ROS机器人 27
2.1 Rviz简介 27
2.1.1 安装和启动Rviz 28
2.1.2 熟悉Rviz界面 29
2.2 生成并构建ROS功能包 32
2.3 构建差分驱动的机器人URDF 33
2.3.1 创建机器人底座 33
2.3.2 使用roslaunch 34
2.3.3 添加轮子 37
2.3.4 添加小脚轮 39
2.3.5 添加颜色 41
2.3.6 添加碰撞属性 42
2.3.7 移动轮子 43
2.3.8 tf和robot_state_publisher简介 44
2.3.9 添加物理学属性 45
2.3.10 试用URDF工具 46
2.4 Gazebo 47
2.4.1 安装并启动Gazebo 48
2.4.2 使用roslaunch启动Gazebo 49
2.4.3 熟悉Gazebo界面 50
2.4.4 机器人URDF的修改 54
2.4.5 Gazebo模型验证 55
2.4.6 在Gazebo中查看URDF 56
2.4.7 机器人模型调整 57
2.4.8 移动机器人模型 58
2.4.9 其他的机器人模拟环境 59
2.5 本章小结 60
第3章 TurtleBot机器人操控 61
3.1 TurtleBot 2机器人简介 61
3.2 下载TurtleBot 2模拟器软件 63
3.3 在Gazebo中启动TurtleBot 2模拟器 63
3.3.1 常见问题与故障排除 65
3.3.2 ROS命令与Gazebo 66
3.3.3 模拟环境下使用键盘远程控制TurtleBot 2 68
3.4 控制真正的TurtleBot 2机器人的设置 69
3.5 连接上网本与远程计算机 71
3.5.1 网络类型 71
3.5.2 网络地址 72
3.5.3 远程计算机网络设置 73
3.5.4 上网本网络设置 73
3.5.5 SSH连接 74
3.5.6 网络设置小结 74
3.5.7 排查网络连接中的故障 75
3.5.8 TurtleBot 2机器人系统测试 75
3.6 TurtleBot 2机器人的硬件规格参数 76
3.7 移动真实的TurtleBot 2机器人 78
3.7.1 采用键盘远程控制TurtleBot 2机器人移动 78
3.7.2 采用ROS命令控制TurtleBot 2机器人移动 79
3.7.3 编写第一个Python脚本程序控制TurtleBot 2机器人移动 80
3.8 rqt工具简介 83
3.8.1 rqt_graph 83
3.8.2 rqt的消息发布与话题监控 86
3.9 TurtleBot机器人的测程 87
3.9.1 模拟的TurtleBot 2机器人的测程 91
3.9.2 Rviz下真实的TurtleBot 2机器人的测程显示 93
3.10 TurtleBot机器人的自动充电 95
3.11 TurtleBot 3介绍 96
3.12 下载TurtleBot 3模拟软件 98
3.13 在Rviz中启动TurtleBot 3模拟软件 99
3.14 在Gazebo中启动TurtleBot 3模拟软件 100
3.15 硬件装配与测试 103
3.16 下载TurtleBot 3机器人软件包 103
3.16.1 在远程计算机上安装软件 103
3.16.2 在SBC上安装软件 104
3.17 TurtleBot 3与远程计算机的网络连接 107
3.17.1 远程计算机网络设置 108
3.17.2 TurtleBot 3网络设置 108
3.17.3 SSH通信测试 110
3.17.4 网络连接的故障处理 110
3.18 控制真实的TurtleBot 3移动 111
3.19 本章小结 113
第4章 TurtleBot机器人导航 114
4.1 TurtleBot机器人的3D视觉系统 115
4.1.1 3D视觉传感器原理 115
4.1.2 3D传感器对比 116
4.2 配置TurtleBot机器人并安装3D 传感器软件 123
4.2.1 Kinect 123
4.2.2 ASUS与PrimeSense 123
4.2.3 Intel RealSense 124
4.2.4 摄像头软件结构 124
4.2.5 术语定义 125
4.3 独立模式下测试3D传感器 125
4.4 运行ROS节点进行可视化 126
4.4.1 使用Image Viewer可视化数据 126
4.4.2 使用Rviz可视化数据 128
4.5 TurtleBot机器人导航 131
4.5.1 采用TurtleBot 2机器人构建房间地图 132
4.5.2 采用TurtleBot 2机器人实现自主导航 136
4.5.3 导航至指定目标点 142
4.5.4 基于Python脚本与地图实现航路点导航 144
4.5.5 TurtleBot 3机器人的SLAM 151
4.5.6 使用TurtleBot 3进行自主导航 152
4.5.7 rqt_reconfigure 153
4.5.8 进一步探索ROS导航 155
4.6 本章小结 155
第5章 构建模拟的机器人手臂 156
5.1 Xacro的特点 156
5.2 采用Xacro建立一个关节式机器人手臂URDF 157
5.2.1 指定名空间 158
5.2.2 使用Xacro属性标签 158
5.2.3 扩展Xacro 161
5.2.4 使用Xacro的包含与宏标签 163
5.2.5 给机器人手臂添加网格 166
5.3 在Gazebo中控制关节式机器人手臂 171
5.3.1 添加Gazebo特性元素 171
5.3.2 将机器人手臂固定在世界坐标系下 173
5.3.3 在Gazebo中查看机器人手臂 173
5.3.4 给Xacro添加控制组件 174
5.3.5 采用ROS命令行控制机器人手臂 178
5.3.6 采用rqt控制机器人手臂 179
5.4 本章小结 182
第6章 机器人手臂摇摆的关节控制 183
6.1 Baxter简介 184
6.1.1 研究型机器人Baxter 185
6.1.2 Baxter模拟器 186
6.2 Baxter的手臂 186
6.2.1 Baxter的俯仰关节 187
6.2.2 Baxter的滚转关节 188
6.2.3 Baxter的坐标系 188
6.2.4 Baxter手臂的控制模式 189
6.2.5 Baxter手臂的抓手 189
6.2.6 Baxter手臂的传感器 190
6.3 下载Baxter软件 190
6.3.1 安装Baxter SDK软件 190
6.3.2 安装Baxter模拟器 192
6.3.3 配置Baxter shell 193
6.3.4 安装MoveIt! 194
6.4 在Gazebo中启动Baxter模拟器 195
6.4.1 启动Baxter模拟器 196
6.4.2 “热身”练习 199
6.4.3 弯曲Baxter手臂 200
6.5 Baxter手臂与正向运动 209
6.5.1 关节与关节状态发布器 209
6.5.2 理解tf 212
6.5.3 直接指定关节组件角度 215
6.5.4 Rviz下的tf坐标系 216
6.5.5 查看机器人元素的tf树 217
6.6 MoveIt!简介 217
6.6.1 使用MoveIt!对Baxter手臂进行运动规划 219
6.6.2 在场景中添加物体 220
6.6.3 采用MoveIt!进行避障运动规划 222
6.7 配置真实的Baxter机器人 223
6.8 控制真实的Baxter机器人 225
6.8.1 控制关节到达航路点 225
6.8.2 控制关节的力矩弹簧 226
6.8.3 关节速度控制演示 227
6.8.4 其他示例 227
6.8.5 视觉伺服和抓取 227
6.9 反向运动 228
6.10 使用状态机实现YMCA 231
6.11 本章小结 236
第7章 空中机器人基本操控 237
7.1 四旋翼飞行器简介 238
7.1.1 风靡的四旋翼飞行器 238
7.1.2 滚转角、俯仰角与偏航角 238
7.1.3 四旋翼飞行器原理 239
7.1.4 四旋翼飞行器的组成 241
7.1.5 添加传感器 241
7.1.6 四旋翼飞行器的通信 242
7.2 四旋翼飞行器的传感器 243
7.2.1 惯性测量单元 243
7.2.2 四旋翼飞行器状态传感器 243
7.3 飞行前的准备工作 244
7.3.1 四旋翼飞行器检测 244
7.3.2 飞行前检测列表 245
7.3.3 飞行中的注意事项 245
7.3.4 需要遵循的规则和条例 245
7.4 在无人机中使用ROS 246
7.5 Hector四旋翼飞行器 246
7.5.1 下载Hector四旋翼飞行器 248
7.5.2 在Gazebo中启动Hector四旋翼飞行器 249
7.6 Crazyflie 2.0简介 256
7.6.1 无ROS情况下的Crazyflie控制 257
7.6.2 使用Crazyradio PA进行通信 258
7.6.3 加载Crazyflie ROS软件 259
7.6.4 飞行前的检查 261
7.6.5 使用teleop操控Crazyflie飞行 262
7.6.6 在运动捕获系统下飞行 265
7.6.7 控制多个Crazyflie飞行 266
7.7 Bebop简介 266
7.7.1 加载bebop_autonomy软件 268
7.7.2 使用命令控制Bebop飞行 270
7.8 本章小结 271
第8章 使用外部设备控制机器人 272
8.1 创建自定义ROS游戏控制器接口 272
8.1.1 测试游戏控制器 273
8.1.2 使用joy ROS功能包 275
8.1.3 使用自定义游戏控制器接口控制turtlesim 275
8.2 创建自定义ROS Android设备接口 280
8.2.1 安装Android Studio和工具 280
8.2.2 安装ROS-Android开发环境 281
8.2.3 术语定义 282
8.2.4 ROS-Android开发环境介绍 283
8.3 在Arduino或树莓派上创建ROS节点 284
8.3.1 使用Arduino 284
8.3.2 使用树莓派 294
8.4 本章小结 295
第9章 操控Crazyflie执行飞行任务 296
9.1 执行任务所需的组件 297
9.1.1 Kinect Windows v2 297
9.1.2 Crazyflie操作 298
9.1.3 任务软件结构 298
9.1.4 OpenCV与ROS 300
9.2 安装任务所需的软件 301
9.2.1 安装libfreenect2 301
9.2.2 安装iai_kinect2 304
9.2.3 使用iai_kinect2元包 305
9.3 任务设置 311
9.3.1 探测Crazyflie与目标 311
9.3.2 使用Kinect与OpenCV 314
9.3.3 对Crazyflie进行跟踪 317
9.4 Crazyflie控制 319
9.5 试飞Crazyflie 324
9.5.1 悬停 324
9.5.2 飞往静止目标 326
9.5.3 学到的经验 327
9.6 本章小结 328
第10章 基于MATLAB的Baxter控制 329
10.1 安装MATLAB机器人系统工具箱 329
10.1.1 MATLAB与机器人系统工具箱版本检查 330
10.1.2 机器人系统工具箱下的ROS命令 330
10.2 机器人系统工具箱与Baxter模拟器的使用 330
10.2.1 在MATLAB中安装Baxter消息 330
10.2.2 运行Baxter模拟器和MATLAB 332
10.2.3 控制Baxter运动 334
10.3 本章小结 337
---------------------------ROS机器人编程:原理与应用---------------------------
译者序
前言
第一部分 ROS基础 / 1
第1章 概述:ROS工具和节点 / 2
1.1 ROS基础概念 / 2
1.2 编写ROS节点 / 5
1.2.1 创建ROS程序包 / 5
1.2.2 编写一个最小的ROS发布器 / 8
1.2.3 编译ROS节点 / 11
1.2.4 运行ROS节点 / 12
1.2.5 检查运行中的最小发布器节点 / 13
1.2.6 规划节点时间 / 15
1.2.7 编写一个最小ROS订阅器 / 17
1.2.8 编译和运行最小订阅器 / 19
1.2.9 总结最小订阅器和发布器节点 / 21
1.3 更多的ROS工具:catkin_simple、roslaunch、rqt_console和rosbag / 21
1.3.1 用catkin_simple简化CMakeLists.txt / 21
1.3.2 自动启动多个节点 / 23
1.3.3 在ROS控制台观察输出 / 25
1.3.4 使用rosbag记录并回放数据 / 26
1.4 最小仿真器和控制器示例 / 28
1.5 小结 / 32
第2章 消息、类和服务器 / 33
2.1 定义自定义消息 / 33
2.1.1 定义一条自定义消息 / 34
2.1.2 定义一条变长的消息 / 38
2.2 ROS服务介绍 / 43
2.2.1 服务消息 / 43
2.2.2 ROS服务节点 / 45
2.2.3 与ROS服务手动交互 / 47
2.2.4 ROS服务客户端示例 / 48
2.2.5 运行服务和客户端示例 / 50
2.3 在ROS中使用C++类 / 51
2.4 在ROS中创建库模块 / 56
2.5 动作服务器和动作客户端介绍 / 61
2.5.1 创建动作服务器包 / 62
2.5.2 定义自定义动作服务器消息 / 62
2.5.3 设计动作客户端 / 68
2.5.4 运行示例代码 / 71
2.6 参数服务器介绍 / 80
2.7 小结 / 84
第二部分 ROS中的仿真和可视化 / 85
第3章 ROS中的仿真 / 86
3.1 简单的2维机器人仿真器 / 86
3.2 动力学仿真建模 / 93
3.3 统一的机器人描述格式 / 95
3.3.1 运动学模型 / 95
3.3.2 视觉模型 / 98
3.3.3 动力学模型 / 99
3.3.4 碰撞模型 / 102
3.4 Gazebo介绍 / 104
3.5 最小关节控制器 / 112
3.6 使用Gazebo插件进行关节伺服控制 / 118
3.7 构建移动机器人模型 / 124
3.8 仿真移动机器人模型 / 132
3.9 组合机器人模型 / 136
3.10 小结 / 139
第4章 ROS中的坐标变换 / 141
4.1 ROS中的坐标变换简介 / 141
4.2 转换侦听器 / 149
4.3 使用Eigen库 / 156
4.4 转换ROS数据类型 / 161
4.5 小结 / 163
第5章 ROS中的感知与可视化 / 164
5.1 rviz中的标记物和交互式标记物 / 168
5.1.1 rviz中的标记物 / 168
5.1.2 三轴显示示例 / 172
5.1.3 rviz中的交互式标记物 / 176
5.2 在rviz中显示传感器值 / 183
5.2.1 仿真和显示激光雷达 / 183
5.2.2 仿真和显示彩色相机数据 / 189
5.2.3 仿真和显示深度相机数据 / 193
5.2.4 rviz中点的选择 / 198
5.3 小结 / 201
第三部分 ROS中的感知处理 / 203
第6章 在ROS中使用相机 / 204
6.1 相机坐标系下的投影变换 / 204
6.2 内置相机标定 / 206
6.3 标定立体相机内参 / 211
6.4 在ROS中使用OpenCV / 217
6.4.1 OpenCV示例:寻找彩色像素 / 218
6.4.2 OpenCV示例:查找边缘 / 223
6.5 小结 / 224
第7章 深度图像与点云信息 / 225
7.1 从扫描LIDAR中获取深度信息 / 225
7.2 立体相机的深度信息 / 230
7.3 深度相机 / 236
7.4 小结 / 237
第8章 点云数据处理 / 238
8.1 简单的点云显示节点 / 238
8.2 从磁盘加载和显示点云图像 / 244
8.3 将发布的点云图像保存到磁盘 / 246
8.4 用PCL方法解释点云图像 / 248
8.5 物体查找器 / 257
8.6 小结 / 261
第四部分 ROS中的移动机器人 / 263
第9章 移动机器人的运动控制 / 264
9.1 生成期望状态 / 264
9.1.1 从路径到轨迹 / 264
9.1.2 轨迹构建器库 / 268
9.1.3 开环控制 / 273
9.1.4 发布期望状态 / 274
9.2 机器人状态估计 / 282
9.2.1 从Gazebo获得模型状态 / 282
9.2.2 里程计 / 286
9.2.3 混合里程计、GPS和惯性传感器 / 292
9.2.4 混合里程计和LIDAR / 297
9.3 差分驱动转向算法 / 302
9.3.1 机器人运动模型 / 303
9.3.2 线性机器人的线性转向 / 304
9.3.3 非线性机器人的线性转向 / 306
9.3.4 非线性机器人的非线性转向 / 308
9.3.5 仿真非线性转向算法 / 309
9.4 相对于地图坐标系的转向 / 312
9.5 小结 / 317
第10章 移动机器人导航 / 318
10.1 构建地图 / 318
10.2 路径规划 / 323
10.3 move_base客户端示例 / 328
10.4 修改导航栈 / 331
10.5 小结 / 335
第五部分 ROS中的机械臂 / 337
第11章 底层控制 / 338
11.1 单自由度移动关节机器人模型 / 338
11.2 位置控制器示例 / 339
11.3 速度控制器示例 / 342
11.4 力控制器示例 / 344
11.5 机械臂的轨迹消息 / 349
11.6 7自由度臂的轨迹插值动作服务器 / 353
11.7 小结 / 354
第12章 机械臂运动学 / 355
12.1 正向运动学 / 356
12.2 逆向运动学 / 360
12.3 小结 / 365
第13章 手臂运动规划 / 366
13.1 笛卡儿运动规划 / 367
13.2 关节空间规划的动态规划 / 368
13.3 笛卡儿运动动作服务器 / 372
13.4 小结 / 376
第14章 Baxter仿真器进行手臂控制 / 377
14.1 运行Baxter仿真器 / 377
14.2 Baxter关节和主题 / 379
14.3 Baxter夹具 / 382
14.4 头盘控制 / 385
14.5 指挥Baxter关节 / 387
14.6 使用ROS关节轨迹控制器 / 390
14.7 关节空间记录和回放节点 / 391
14.8 Baxter运动学 / 397
14.9 Baxter笛卡儿运动 / 399
14.10 小结 / 404
第15章 object-grabber包 / 405
15.1 object-grabber代码组织 / 405
15.2 对象操作查询服务 / 407
15.3 通用夹具服务 / 410
15.4 object-grabber动作服务器 / 412
15.5 object-grabber动作客户端示例 / 415
15.6 小结 / 425
第六部分 系统集成与高级控制 / 427
第16章 基于感知的操作 / 428
16.1 外部相机标定 / 428
16.2 综合感知和操作 / 431
16.3 小结 / 440
第17章 移动操作 / 441
17.1 移动机械手模型 / 441
17.2 移动操作 / 442
17.3 小结 / 446
第18章 总结 / 447
参考文献 / 449
---------------------------精通ROS机器人编程(原书第2版)---------------------------
译者序
前言
作者简介
译者简介
第1章 ROS简介 1
1.1 为什么要学习ROS 1
1.2 在机器人开发中,人们为什么更愿意选择ROS 2
1.3 为什么有些人不愿意选择ROS 3
1.4 理解ROS的文件系统 4
1.4.1 ROS软件包 5
1.4.2 ROS超软件包 7
1.4.3 ROS消息 7
1.4.4 ROS服务 9
1.5 理解ROS的计算图 9
1.5.1 ROS节点 11
1.5.2 ROS消息 12
1.5.3 ROS话题 13
1.5.4 ROS服务 13
1.5.5 ROS消息记录包 14
1.5.6 ROS节点管理器 14
1.5.7 应用ROS参数 16
1.6 ROS的社区 17
1.7 学习ROS需要做哪些准备 17
1.8 习题 20
1.9 本章小结 20
第2章 ROS编程入门 21
2.1 创建一个ROS软件包 21
2.1.1 学习ROS话题 23
2.1.2 创建ROS节点 23
2.1.3 编译生成节点 26
2.2 添加自定义的msg和srv文件 28
2.3 使用ROS服务 30
2.3.1 使用ROS动作库 34
2.3.2 编译ROS动作服务器和客户端 37
2.4 创建启动文件 39
2.5 话题、服务和动作库的应用 41
2.6 维护ROS软件包 41
2.7 发布ROS软件包 42
2.7.1 准备发布ROS软件包 43
2.7.2 发布软件包 43
2.7.3 为ROS软件包创建维基页面 45
2.8 习题 47
2.9 本章小结 47
第3章 在ROS中为3D机器人建模 48
3.1 机器人建模的ROS软件包 49
3.2 利用URDF理解机器人建模 50
3.3 为机器人描述创建ROS软件包 52
3.4 创建我们的第一个URDF模型 52
3.5 详解URDF文件 54
3.6 在RViz中可视化机器人3D模型 55
3.7 向URDF模型添加物理属性和碰撞属性 57
3.8 利用xacro理解机器人建模 58
3.8.1 使用属性 58
3.8.2 使用数学表达式 59
3.8.3 使用宏 59
3.9 将xacro转换为URDF 59
3.10 为7-DOF机械臂创建机器人描述 60
3.10.1 机械臂规格 61
3.10.2 关节类型 61
3.11 解析7-DOF机械臂的xacro模型 61
3.11.1 使用常量 61
3.11.2 使用宏 62
3.11.3 包含其他xacro文件 62
3.11.4 在连杆中使用网格模型 63
3.11.5 使用机器人夹爪 63
3.11.6 在RViz中查看7-DOF机械臂 63
3.12 为差速驱动移动机器人创建机器人模型 66
3.13 习题 70
3.14 本章小结 70
第4章 使用ROS和Gazebo进行机器人仿真 71
4.1 使用Gazebo和ROS仿真机械臂 71
4.2 为Gazebo创建机械臂仿真模型 72
4.2.1 为Gazebo机器人模型添加颜色和纹理 73
4.2.2 添加transmission标签来驱动模型 74
4.2.3 添加gazebo_ros_control插件 74
4.2.4 在Gazebo中添加3D视觉传感器 75
4.3 仿真装有Xtion Pro的机械臂 76
4.4 在Gazebo中使用ROS控制器 78
4.4.1 认识ros_control软件包 78
4.4.2 不同类型的ROS控制器和硬件接口 79
4.4.3 ROS控制器如何与Gazebo交互 79
4.4.4 将关节状态控制器和关节位置控制器连接到手臂 80
4.4.5 在Gazebo中启动ROS控制器 81
4.4.6 控制机器人的关节运动 83
4.5 在Gazebo中仿真差速轮式机器人 83
4.5.1 将激光雷达添加到机器人中 85
4.5.2 在Gazebo中控制机器人移动 86
4.5.3 在启动文件中添加关节状态发布者 87
4.6 添加ROS遥控节点 88
4.7 习题 89
4.8 本章小结 89
第5章 用ROS和V-REP进行机器人仿真 91
5.1 安装带有ROS的V-REP 91
5.2 理解vrep_plugin 95
5.2.1 使用ROS服务与V-REP交互 96
5.2.2 使用ROS话题与V-REP交互 98
5.3 使用V-REP和ROS仿真机械臂 101
5.4 在V-REP下仿真差速轮式机器人 107
5.4.1 在V-REP中添加激光传感器 109
5.4.2 在V-REP中添加3D视觉传感器 110
5.5 习题 112
5.6 本章小结 112
第6章 ROS MoveIt!与导航软件包集 113
6.1 安装MoveIt! 113
6.2 使用配置助手工具生成MoveIt!配置软件包 118
6.2.1 第1步:启动配置助手工具 118
6.2.2 第2步:生成自碰撞矩阵 120
6.2.3 第3步:增加虚拟关节 120
6.2.4 第4步:添加规划组 121
6.2.5 第5步:添加机器人姿态 122
6.2.6 第6步:设置机器人的末端执行器 122
6.2.7 第7步:添加被动关节 123
6.2.8 第8步:作者信息 123
6.2.9 第9步:生成配置文件 123
6.3 使用MoveIt!配置软件包在RViz中进行机器人运动规划 124
6.3.1 使用RViz运动规划插件 125
6.3.2 MoveIt!配置软件包与Gazebo的接口 128
6.4 理解ROS导航软件包集 133
6.4.1 ROS导航硬件的要求 133
6.4.2 使用导航软件包 134
6.5 安装ROS导航软件包集 136
6.6 使用SLAM构建地图 136
6.6.1 为gmapping创建启动文件 137
6.6.2 在差速驱动机器人上运行SLAM 138
6.6.3 使用amcl和静态地图实现自主导航 141
6.6.4 创建amcl启动文件 141
6.7 习题 144
6.8 本章小结 144
第7章 使用pluginlib、小节点和Gazebo 插件 145
7.1 理解pluginlib 145
7.2 理解ROS小节点 151
7.3 理解Gazebo插件 156
7.4 习题 160
7.5 本章小结 160
第8章 ROS控制器和可视化插件编程 161
8.1 理解 ros_control软件包集 162
8.1.1 controller_interface软件包 162
8.1.2 控制器管理器 164
8.2 使用ROS编写一个基本的关节控制器 164
8.2.1 第1步:创建控制器软件包 165
8.2.2 第2步:创建控制器头文件 165
8.2.3 第3步:创建控制器源文件 166
8.2.4 第4步:控制器源文件解析 166
8.2.5 第5步:创建插件描述文件 167
8.2.6 第6步:更新package.xml文件 168
8.2.7 第7步:更新CMake-Lists.txt文件 168
8.2.8 第8步:编译控制器 168
8.2.9 第9步:编写控制器配置文件 168
8.2.10 第10步:编写控制器的启动文件 169
8.2.11 第11步:在Gazebo中运行控制器和7-DOF机械臂 169
8.3 理解ROS可视化工具(RViz)及其插件 171
8.3.1 Displays面板 172
8.3.2 RViz工具栏 172
8.3.3 Views面板 172
8.3.4 Time面板 172
8.3.5 可停靠面板 172
8.4 编写用于遥控操作的RViz插件 172
8.5 习题 178
8.6 本章小结 178
第9章 将ROS与I/O开发板、传感器、执行机构连接 179
9.1 理解Arduino-ROS接口 179
9.2 Arduino-ROS接口是什么 180
9.2.1 理解ROS中的rosserial软件包 181
9.2.2 理解Arduino中的ROS节点API 185
9.2.3 ROS-Arduino发布者和订阅者实例 187
9.2.4 Arduino-ROS接口实例——LED灯闪烁/按按钮 190
9.2.5 Arduino-ROS接口实例——ADXL 335加速度计 192
9.2.6 Arduino-ROS接口实例——超声波测距传感器 194
9.2.7 Arduino-ROS接口实例——里程计发布者 197
9.3 非Arduino开发板与ROS接口 199
9.3.1 在Odroid-XU4和树莓派2上配置ROS 199
9.3.2 用ROS控制树莓派2 上的LED灯闪烁 206
9.3.3 在树莓派2上使用ROS测试按钮和LED灯闪烁 208
9.3.4 在树莓派2上运行示例 211
9.4 将DYNAMIXEL驱动器连接到ROS 212
9.5 习题 212
9.6 本章小结 212
第10章 用ROS对视觉传感器编程、OpenCV、PCL 213
10.1 理解ROS-OpenCV开发接口软件包 213
10.2 理解ROS-PCL开发接口软件包 214
10.3 在ROS中连接USB相机 216
10.4 ROS与相机校准 218
10.4.1 使用cv_bridge在ROS和OpenCV之间转换图像 221
10.4.2 使用ROS和OpenCV进行图像处理 221
10.5 在ROS中连接Kinect与华硕Xtion Pro 225
10.6 将英特尔Real Sense相机与ROS连接 228
10.7 在ROS中连接Hokuyo激光雷达 232
10.8 处理点云数据 233
10.8.1 如何发布点云 234
10.8.2 如何订阅和处理点云 235
10.8.3 将点云数据写入点云数据(PCD)文件 236
10.8.4 从PCD文件中读取并发布点云 237
10.9 物体姿态估计与AR标记检测 239
10.10 习题 243
10.11 本章小结 244
第11章 在ROS中构造与连接差速驱动移动机器人 245
11.1 Chefbot DIY移动机器人及其硬件配置 246
11.1.1 使用Energia IDE来烧写Chefbot固件 248
11.1.2 讨论Chefbot的ROS软件包接口 249
11.1.3 从编码器计数计算里程计信息 254
11.1.4 根据ROS twist消息计算马达转速 256
11.1.5 为Chefbot机器人配置导航软件包集 257
11.1.6 配置gmapping节点 257
11.1.7 配置导航软件包集 259
11.1.8 理解AMCL 264
11.1.9 在RViz中使用导航功能 267
11.1.10 导航软件包中避障 272
11.1.11 Chefbot机器人仿真 273
11.1.12 从ROS节点向导航软件包集发送一个目的地 276
11.2 习题 278
11.3 本章小结 278
第12章 探索ROS-MoveIt!的高级功能 279
12.1 使用move_group的C++接口进行运动规划 279
12.1.1 使用MoveIt! C++ API规划随机路径 280
12.1.2 使用MoveIt! C++ API规划自定义路径 281
12.2 使用MoveIt!进行机械臂的碰撞检测 283
12.2.1 向MoveIt!添加碰撞对象 283
12.2.2 从规划场景中移除碰撞对象 286
12.2.3 向机器人连杆上添加一个碰撞对象 286
12.2.4 使用MoveIt! API检查自碰撞 287
12.3 使用MoveIt!和Gazebo处理视觉 288
12.4 使用MoveIt!执行拾取和放置任务 294
12.4.1 使用GPD计算抓握姿态 297
12.4.2 在Gazebo和真实机器人上执行拾取和放置动作 300
12.5 理解用于机器人硬件接口的DYNAMIXEL ROS伺服控制器 300
12.5.1 DYNAMIXEL伺服舵机 300
12.5.2 DYNAMIXEL-ROS接口 301
12.6 7-DOF机械臂与ROS MoveIt! 302
12.6.1 为COOL机械臂创建一个控制器软件包 303
12.6.2 COOL机械臂的MoveIt!配置 306
12.7 习题 308
12.8 本章小结 308
第13章 在MATLAB和Simulink中使用ROS 309
13.1 学习使用MATLAB与MATLAB-ROS 309
13.1.1 机器人系统工具箱和ROS-MATLAB接口入门 310
13.1.2 ROS话题和MATLAB回调函数 313
13.1.3 为Turtlebot机器人设计一个避障系统 317
13.2 学习使用ROS与Simulink 321
13.2.1 在Simulink中创建波形信号积分器 321
13.2.2 在Simulink中使用ROS消息 323
13.2.3 在Simulink中发布ROS消息 323
13.2.4 在Simulink中订阅ROS话题 327
13.3 用Simulink开发一个简单的控制系统 328
13.4 习题 332
13.5 本章小结 332
第14章 ROS与工业机器人 333
14.1 理解ROS-Industrial软件包 333
14.1.1 ROS-Industrial的目标 334
14.1.2 ROS-Industrial简史 334
14.1.3 ROS-Industrial优点 334
14.2 安装ROS-Industrial软件包 334
14.3 ROS-Industrial软件包框图 335
14.4 为工业机器人创建URDF 336
14.5 为工业机器人创建MoveIt!配置 337
14.5.1 更新MoveIt!配置文件 340
14.5.2 测试MoveIt!配置 341
14.6 安装UR机械臂的ROS-Industrial软件包 341
14.7 理解UR机械臂的MoveIt!配置 343
14.8 使用真实的UR机器人和ROS-I 345
14.9 ABB机器人的MoveIt!配置 346
14.10 ROS-Industrial机器人支持软件包 349
14.11 ROS-Industrial 机器人客户端软件包 351
14.12 ROS-Industrial 机器人驱动软件包 352
14.13 理解MoveIt! IKFast插件 354
14.14 为ABB IRB 6640机器人创建MoveIt! IKFast插件 354
14.14.1 开发MoveIt! IKFast插件的前提条件 354
14.14.2 OpenRave和IKFast模块 354
14.15 为使用OpenRave,创建机器人的COLLADA文件 357
14.16 为IRB 6640机器人生成IKFast CPP文件 358
14.17 习题 361
14.18 本章小结 361
第15章 调试方法与最佳实战技巧 362
15.1 在Ubuntu中安装RoboWare Studio 362
15.1.1 安装和卸载RoboWare Studio 363
15.1.2 RoboWare Studio入门 363
15.1.3 在RoboWare Studio中创建ROS软件包 364
15.1.4 在RoboWare Studio中编译ROS工作区 366
15.1.5 在RoboWare Studio中运行ROS节点 367
15.1.6 在RoboWare界面启动ROS工具 368
15.1.7 处理活动的ROS话题、节点和服务 369
15.1.8 使用RoboWare工具创建ROS节点和类 370
15.1.9 RoboWare Studio中的ROS软件包管理器 371
15.2 ROS的最佳实战技巧与经验 372
15.3 ROS软件包中的最佳实战技巧与经验 374
15.4 ROS中的重要调试技巧 374
15.5 习题 377
15.6 本章小结 378
---------------------------ROS机器人开发实践---------------------------
推荐序一
推荐序二
推荐序三
前言
第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
---------------------------ROS机器人开发:实用案例分析---------------------------
译者序
作者简介
前言
第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
---------------------------ROS机器人编程实践---------------------------
前言 1
第一部分 基础知识
第1章 概述 9
简史 9
理念 10
安装 11
小结 12
第2章 预备知识 13
ROS图 13
roscore 15
catkin、工作区以及ROS程序包 16
rosrun 19
命名、命名空间以及重映射 24
roslaunch 25
tab键 26
tf:坐标系转换 27
小结 30
第3章 话题 31
将消息发布到话题上 32
订阅一个话题 36
锁存话题 38
定义自己的消息类型 39
让发布者和订阅者协同工作 46
小结 47
第4章 服务 48
定义服务 48
实现服务 51
使用服务 54
小结 56
第5章 动作 57
动作的定义 58
实现一个基本的动作服务器 59
动作的使用 62
实现一个更复杂的动作服务器 64
使用更复杂的动作 66
小结 69
第6章 机器人与仿真器 71
子系统 71
机器人系统举例 79
仿真器 83
小结 86
第7章 Wander-bot 88
创建包 88
读取传感器数据 91
感知环境并移动:Wander-bot 94
小结 96
第二部分 使用ROS驱动机器人行走
第8章 遥控机器人 99
开发模式 100
键盘驱动 100
运动生成器 102
参数服务器 107
速度斜坡曲线 109
开车 111
rviz 113
小结 120
第9章 创建环境地图 121
ROS中的地图 121
使用rosbag记录数据 124
创建地图 125
启动地图服务器以及查看地图 131
小结 133
第10章 在真实环境中的导航 135
在地图中定位机器人 135
使用ROS的导航软件包 139
在代码中进行导航 144
小结 145
第11章 下棋机器人 146
关节、连接以及传动链 147
成功的关键 150
安装和运行一台仿真R2 152
在命令行中移动R2 155
在棋盘上移动R2的机械臂 156
操作机械手 158
对棋盘建模 159
重演著名的棋局 163
小结 167
第三部分 感知和行为
第12章 循线机器人 171
采集图像 171
检测指示线 177
循线运动 182
小结 184
第13章 巡航 185
简单巡航 185
状态机 186
用smach构建状态机 188
用状态机实现巡航 195
小结 198
第14章 仓储机器人 199
仓库模拟环境 199
驶入隔间 210
拾取物体 214
小结 224
第四部分 添加自定义ROS组件
第15章 添加你自己的传感器和执行器 227
添加你自己的传感器 227
添加你自己的执行器 234
小结 240
第16章 添加你自己的移动机器人:第一部分 242
小龟机器人 242
ROS 消息接口 244
硬件驱动 247
使用 URDF对机器人建模247
在 Gazebo 中进行仿真 255
小结 261
第17章 添加你自己的移动机器人:第二部分 262
验证坐标变换信息 262
添加激光传感器 266
配置导航程序栈 270
使用 rviz 定位和控制导航中的机器人 275
小结 278
第18章 添加你自己的机械臂 279
猎豹机械臂 279
ROS 消息接口 281
硬件驱动 282
对机器人建模:使用 URDF 282
在 Gazebo 中进行仿真 287
验证坐标变换信息 294
配置 MoveIt 297
使用 rviz 控制机械臂 301
小结 303
第19章 添加软件库 305
让你的机器人开口说话:使用 pyttsx305
小结 312
第五部分 ROS使用小知识
第20章 ROS小工具 315
主机及其相关组件:roscore315
参数管理:rosparam 316
文件系统导航:roscd 317
节点启动:rosrun 318
多节点启动:roslaunch 318
多节点系统测试:rostest 321
系统监控:rosnode、rostopic、rosmsg、rosservice和rossrv 324
小结 327
第21章 机器人行为调试 329
日志消息: /rosout和rqt_console 329
节点、话题和连接:rqt_graph和rosnode 336
传感器融合: 使用 rviz 343
绘制数据图表:使用 rqt_plot 344
数据记录和分析: 使用rosbag和rqt_bag 346
小结 350
第22章 ROS在线社区 351
社区的礼仪 351
ROS 维基 352
ROS Answers: 一个 ROS 问答社区 353
bug 追踪与新特性请求 354
邮件列表与ROS兴趣小组 354
查找和分享代码 354
小结 355
第23章 用C++编写ROS程序 356
C++(或其他语言)的使用场景 356
使用catkin编译C++ 357
在Python和C++之间来回移植程序 359
小结 364
---------------------------ROS机器人高效编程(原书第3版)---------------------------
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第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
---------------------------ROS机器人程序设计(原书第2版)---------------------------
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第1章 ROS Hydro系统入门 1
1.1 PC安装教程 3
1.2 使用软件库安装ROS Hydro 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 创建虚拟机 8
1.4 在BeagleBone Black上安装ROS Hydro 11
1.4.1 准备工作 12
1.4.2 配置主机和source.list文件 13
1.4.3 设置密钥 14
1.4.4 安装ROS功能包 14
1.4.5 初始化rosdep 15
1.4.6 在BeagleBone Black中配置环境 15
1.4.7 在BeagleBone Black中安装rosinstall 15
1.5 本章小结 15
第2章 ROS系统架构及概念 16
2.1 理解ROS文件系统级 16
2.1.1 工作空间 17
2.1.2 功能包 18
2.1.3 综合功能包 19
2.1.4 消息 20
2.1.5 服务 21
2.2 理解ROS计算图级 22
2.2.1 节点与nodelet 23
2.2.2 主题 24
2.2.3 服务 25
2.2.4 消息 26
2.2.5 消息记录包 26
2.2.6 节点管理器 26
2.2.7 参数服务器 27
2.3 理解ROS开源社区级 27
2.4 ROS系统试用练习 28
2.4.1 ROS文件系统导览 28
2.4.2 创建工作空间 29
2.4.3 创建ROS功能包和综合功能包 30
2.4.4 编译ROS功能包 30
2.4.5 使用ROS节点 31
2.4.6 如何使用主题与节点交互 33
2.4.7 如何使用服务 36
2.4.8 使用参数服务器 38
2.4.9 创建节点 38
2.4.10 编译节点 41
2.4.11 创建msg和srv文件 42
2.4.12 使用新建的srv和msg文件 44
2.4.13 启动文件 48
2.4.14 动态参数 50
2.5 本章小结 54
第3章 可视化和调试工具 55
3.1 调试ROS节点 57
3.1.1 使用gdb调试器调试ROS节点 57
3.1.2 ROS节点启动时调用gdb调试器 58
3.1.3 ROS节点启动时调用valgrind分析节点 59
3.1.4 设置ROS节点core文件转储 59
3.2 日志信息 59
3.2.1 输出日志信息 59
3.2.2 设置调试信息级别 60
3.2.3 为特定节点配置调试信息级别 61
3.2.4 信息命名 62
3.2.5 按条件显示信息与过滤信息 62
3.2.6 显示信息的方式——单次、可调、组合 63
3.2.7 使用rqt_console和rqt_logger_level在运行时修改调试级别 63
3.3 检测系统状态 66
3.3.1 检测节点、主题、服务和参数 67
3.3.2 使用rqt_graph在线检测节点状态图 70
3.4 设置动态参数 71
3.5 当出现异常状况时使用 roswtf 72
3.6 可视化节点诊断 74
3.7 绘制标量数据图 75
3.8 图像可视化 77
3.9 3D可视化 79
3.9.1 使用rqt_rviz在3D世界中实现数据可视化 79
3.9.2 主题与坐标系的关系 82
3.9.3 可视化坐标变换 82
3.10 保存与回放数据 83
3.10.1 什么是消息记录包文件 84
3.10.2 使用rosbag在消息记录包中记录数据 84
3.10.3 回放消息记录包文件 85
3.10.4 检查消息记录包文件的主题和消息 86
3.11 应用rqt与rqt_gui插件 88
3.12 本章小结 88
第4章 在ROS下使用传感器和执行器 90
4.1 使用游戏杆或游戏手柄 90
4.1.1 joy_node如何发送游戏杆动作消息 91
4.1.2 使用游戏杆数据在turtlesim中移动海龟 92
4.2 使用激光雷达——Hokuyo URG-04lx 95
4.2.1 了解激光雷达如何在ROS中发送数据 96
4.2.2 访问和修改激光雷达数据 98
4.3 使用Kinect传感器查看3D环境中的对象 100
4.3.1 如何发送和查看Kinect数据 101
4.3.2 创建使用Kinect的示例 102
4.4 使用伺服电动机——Dynamixel 104
4.5 使用Arduino添加更多的传感器和
执行器 107
4.6 在Arduino上使用超声波传感器 111
4.7 距离传感器如何发送消息 113
4.7.1 创建使用超声波的示例 113
4.7.2 Xsens如何在ROS中发送数据 116
4.7.3 创建使用Xsens的示例 116
4.8 使用10自由度低成本惯性测量模组IMU 118
4.8.1 下载加速度传感器库 119
4.8.2 Arduino Nano和10自由度传感器编程 120
4.8.3 创建ROS节点以使用10自由度传感器数据 121
4.9 GPS的使用 123
4.9.1 GPS如何发送信息 125
4.9.2 创建一个使用GPS的工程实例 126
4.10 本章小结 127
第5章 计算机视觉 128
5.1 连接和运行摄像头 129
5.1.1 FireWire IEEE1394摄像头 129
5.1.2 USB摄像头 133
5.2 使用OpenCV制作USB摄像头 驱动程序 134
5.2.1 通过cv_bridge使用OpenCV处理ROS图像 139
5.2.2 使用image transport发布图像 139
5.2.3 在ROS中使用OpenCV 140
5.2.4 显示摄像头输入的图像 140
5.3 标定摄像头 141
5.4 ROS图像管道 148
5.5 计算机视觉任务中有用的ROS功能包 152
5.6 使用viso2实现视觉里程计 153
5.6.1 摄像头位姿标定 154
5.6.2 运行viso2在线演示 157
5.6.3 使用低成本双目摄像头运行viso2 159
5.7 使用RGBD深度摄像头实现视觉里程计 160
5.7.1 安装fovis 160
5.7.2 用Kinect RGBD深度摄像头运行fovis 160
5.8 计算两幅图像的单应性 161
5.9 本章小结 162
第6章 点云 163
6.1 理解点云库 163
6.1.1 不同的点云类型 164
6.1.2 PCL中的算法 164
6.1.3 ROS的PCL接口 165
6.2 我的第一个PCL程序 166
6.2.1 创建点云 167
6.2.2 加载和保存点云到硬盘 170
6.2.3 可视化点云 173
6.2.4 滤波和缩减采样 176
6.2.5 配准与匹配 181
6.2.6 点云分区 184
6.3 分割 187
6.4 本章小结 191
第7章 3D建模与仿真 192
7.1 在ROS中自定义机器人的3D模型 192
7.2 创建第一个URDF文件 192
7.2.1 解释文件格式 194
7.2.2 在rviz里查看3D模型 195
7.2.3 加载网格到机器人模型 197
7.2.4 使机器人模型运动 198
7.2.5 物理属性和碰撞属性 198
7.3 xacro——一个更好的机器人建模方法 199
7.3.1 使用常量 199
7.3.2 使用数学方法 200
7.3.3 使用宏 200
7.3.4 使用代码移动机器人 201
7.3.5 使用SketchUp进行3D建模 204
7.4 在ROS中仿真 205
7.4.1 在Gazebo中使用URDF 3D模型 206
7.4.2 在Gazebo中添加传感器 208
7.4.3 在Gazebo中加载和使用地图 211
7.4.4 在Gazebo中移动机器人 213
7.5 本章小结 215
第8章 导航功能包集入门 216
8.1 ROS导航功能包集 216
8.2 创建变换 217
8.2.1 创建广播机构 218
8.2.2 创建侦听器 218
8.2.3 查看坐标变换树 221
8.3 发布传感器信息 221
8.4 发布里程数据信息 224
8.4.1 Gazebo如何获取里程数据 225
8.4.2 创建自定义里程数据 228
8.5 创建基础控制器 232
8.5.1 使用Gazebo创建里程数据 233
8.5.2 创建自己的基础控制器 235
8.6 使用ROS创建地图 237
8.6.1 使用map_server保存地图 238
8.6.2 使用map_server加载地图 239
8.7 本章小结 240
第9章 导航功能包集进阶 241
9.1 创建功能包 241
9.2 创建机器人配置 241
9.3 配置全局和局部代价地图 243
9.3.1 基本参数的配置 244
9.3.2 全局代价地图的配置 245
9.3.3 局部代价地图的配置 245
9.3.4 基本局部规划器配置 246
9.4 为导航功能包集创建启动文件 247
9.5 为导航功能包集设置rviz 248
9.5.1 2D位姿估计 248
9.5.2 2D导航目标 249
9.5.3 静态地图 249
9.5.4 粒子云 251
9.5.5 机器人占地空间 251
9.5.6 局部代价地图 252
9.5.7 全局代价地图 252
9.5.8 全局规划 254
9.5.9 局部规划 254
9.5.10 规划器规划 254
9.5.11 当前目标 255
9.6 自适应蒙特卡罗定位 256
9.7 使用rqt_reconfigure修改参数 258
9.8 机器人避障 259
9.9 发送目标 260
9.10 本章小结 262
第10章 使用MoveIt! 264
10.1 MoveIt!体系结构 264
10.1.1 运动规划 265
10.1.2 规划场景 267
10.1.3 运动学 268
10.1.4 碰撞检测 268
10.2 在MoveIt!中集成一个机械臂 268
10.2.1 工具箱里有什么 268
10.2.2 使用设置助手生成一个MoveIt!包 269
10.2.3 集成到rviz 273
10.2.4 集成到Gazebo或实际机器人的手臂 276
10.3 简单的运动规划 277
10.3.1 规划单个目标 278
10.3.2 规划一个随机目标 278
10.3.3 规划预定义的群组状态 280
10.3.4 显示目标的运动 280
10.4 考虑碰撞的运动规划 280
10.4.1 将对象添加到规划场景中 281
10.4.2 从规划的场景中删除对象 282
10.4.3 应用点云进行运动规划 283
10.5 抓取和放置任务 284
10.5.1 规划的场景 285
10.5.2 感知 288
10.5.3 抓取 288
10.5.4 抓取操作 290
10.5.5 放置操作 292
10.5.6 演示模式 295
10.5.7 在Gazebo中仿真 295
10.6 本章小结 296
1.4 ROS客户端库 10
1.5 ROS工具 11
1.5.1 ROS的可视化工具RViz 11
1.5.2 rqt_plot 11
1.5.3 rqt_graph 12
1.6 ROS模拟器 13
1.7 在Ubuntu 18.04 LTS上安装ROS Melodic 13
1.8 在VirtualBox上设置ROS 18
1.9 Docker简介 19
1.9.1 为什么选择Docker 20
1.9.2 安装Docker 20
1.10 设置ROS工作空间 23
1.11 ROS在工业界和学术界的机遇 25
1.12 本章小结 25
第2章 ROS-2及其特性简介 26
2.1 技术要求 27
2.2 ROS-2概述 27
2.2.1 ROS-2发行版 28
2.2.2 支持的操作系统 28
2.2.3 支持的机器人及传感器 29
2.2.4 为什么选择ROS-2 29
2.3 ROS-2基础 30
2.3.1 什么是DDS 30
2.3.2 DDS的实现 30
2.3.3 计算图 31
2.3.4 ROS-2社区层级 32
2.3.5 ROS-2中的通信 32
2.3.6 ROS-2的变化 33
2.4 ROS-2客户端库 33
2.5 ROS-2工具 34
2.5.1 RViz2 34
2.5.2 Rqt 36
2.6 安装ROS-2 36
2.6.1 开始安装 37
2.6.2 获取ROS-2源码 38
2.6.3 ROS-1、ROS-2以及共存环境设置 41
2.6.4 运行测试节点 42
2.7 设置ROS-2工作空间 44
2.8 编写ROS-2节点 45
2.8.1 ROS-1代码示例 45
2.8.2 ROS-2代码示例 46
2.8.3 ROS-1发布者节点与ROS-2发布者节点的区别 49
2.9 ROS-1和ROS-2的通信 50
2.10 本章小结 52
第3章 构建工业级移动机械臂 53
3.1 技术要求 54
3.2 常见的移动机械臂 54
3.3 移动机械臂应用场景 55
3.4 移动机械臂构建入门 56
3.4.1 单位及坐标系 57
3.4.2 Gazebo及ROS机器人模型格式设定 57
3.5 机器人底座构建 58
3.5.1 机器人底座需求 58
3.5.2 软件参数 60
3.5.3 机器人底座建模 60
3.5.4 机器人底座模拟 64
3.5.5 机器人底座测试 68
3.6 机械臂构建 70
3.6.1 机械臂需求 71
3.6.2 软件参数 72
3.6.3 机械臂建模 72
3.6.4 机械臂模拟 74
3.6.5 机械臂测试 77
3.7 系统集成 78
3.7.1 移动机械臂建模 78
3.7.2 移动机械臂模拟与测试 79
3.8 本章小结 80
第4章 基于状态机的复杂机器人任务处理 81
4.1 技术要求 81
4.2 ROS动作机制简介 82
4.2.1 服务器–客户端结构概述 82
4.2.2 actionlib示例:机械臂客户端 83
4.2.3 基于actionlib的服务器–客户端示例:电池模拟器 85
4.3 服务员机器人应用示例 90
4.4 状态机简介 92
4.5 SMACH简介 93
4.6 SMACH入门 96
4.6.1 SMACH-ROS的安装与使用 96
4.6.2 简单示例 96
4.6.3 餐厅机器人应用示例 98
4.7 本章小结 102
第5章 构建工业级应用程序 103
5.1 技术要求 103
5.2 应用案例:机器人送货上门 104
5.3 机器人底座智能化 106
5.3.1 添加激光扫描传感器 106
5.3.2 配置导航栈 108
5.3.3 环境地图构建 110
5.3.4 机器人底座定位 111
5.4 机械臂智能化 111
5.4.1 Moveit简介 112
5.4.2 安装与配置Moveit 113
5.4.3 通过Moveit控制机械臂 117
5.5 应用程序模拟 120
5.5.1 环境地图构建与保存 120
5.5.2 选择目标点 120
5.5.3 添加目标点 121
5.5.4 状态机构建 121
5.6 机器人改进 121
5.7 本章小结 122
第6章 多机器人协同 123
6.1 技术要求 123
6.2 集群机器人基本概念 124
6.3 集群机器人分类 125
6.4 ROS中的多机器人通信 125
6.4.1 单个roscore和公共网络 126
6.4.2 群组/名称空间的使用 127
6.4.3 基于群组/名称空间的多机器人系统构建示例 128
6.5 多master概念简介 131
6.5.1 multimaster_fkie功能包简介 132
6.5.2 安装multimaster_fkie功能包 133
6.5.3 设置multimaster_fkie功能包 133
6.6 多机器人应用示例 136
6.7 本章小结 138
第7章 嵌入式平台上的ROS应用及其控制 139
7.1 技术要求 139
7.2 嵌入式板基础知识 140
7.2.1 重要概念介绍 141
7.2.2 机器人领域微控制器和微处理器的区别 142
7.2.3 板卡选型步骤 142
7.3 微控制器板简介 143
7.3.1 Arduino Mega 143
7.3.2 STM32 144
7.3.3 ESP8266 145
7.3.4 ROS支持的嵌入式板 146
7.3.5 对比表格 147
7.4 单板计算机简介 147
7.4.1 CPU板 148
7.4.2 GPU板 151
7.5 Debian与Ubuntu 152
7.6 在Tinkerboard S平台上设置操作系统 153
7.6.1 基础需求 153
7.6.2 安装Tinkerboard Debian操作系统 153
7.6.3 安装Armbian和ROS 154
7.6.4 使用可用的ROS镜像安装 156
7.7 在BeagleBone Black平台上设置ROS 156
7.7.1 基础需求 156
7.7.2 安装Debian 操作系统 157
7.7.3 安装Ubuntu和ROS 158
7.8 在Raspberry Pi 3/4平台上设置ROS 159
7.8.1 基础需求 159
7.8.2 安装Raspbian和ROS 159
7.8.3 安装Ubuntu和ROS 160
7.9 在Jetson Nano平台上设置ROS 161
7.10 通过ROS控制GPIO 161
7.10.1 Tinkerboard S 162
7.10.2 BeagleBone Black 163
7.10.3 Raspberry Pi 3/4 164
7.10.4 Jetson Nano 165
7.11 嵌入式板基准测试 166
7.12 Alexa入门及连接ROS 168
7.12.1 Alexa 技能构建前提条件 168
7.12.2 创建Alexa技能 169
7.13 本章小结 173
第8章 强化学习与机器人学 174
8.1 技术要求 174
8.2 机器学习概述 175
8.2.1 监督学习 175
8.2.2 无监督学习 175
8.2.3 强化学习 176
8.3 理解强化学习 176
8.3.1 探索与开发 177
8.3.2 强化学习公式 177
8.3.3 强化学习平台 178
8.3.4 机器人领域的强化学习应用 179
8.4 马尔可夫决策过程与贝尔曼方程 179
8.5 强化学习算法 181
8.5.1 出租车问题应用示例 181
8.5.2 TD预测 182
8.5.3 TD控制 183
8.6 ROS中的强化学习功能包 189
8.6.1 gym-gazebo 189
8.6.2 gym-gazebo2 194
8.7 本章小结 196
第9章 ROS下基于TensorFlow的深度学习 197
9.1 技术要求 197
9.2 深度学习及其应用简介 198
9.3 机器人领域的深度学习 198
9.4 深度学习库 199
9.5 TensorFlow入门 200
9.5.1 在Ubuntu 18.04 LTS上安装TensorFlow 200
9.5.2 TensorFlow概念 202
9.5.3 在TensorFlow下编写第一行代码 204
9.6 ROS下基于TensorFlow的图像识别 206
9.6.1 基础需求 207
9.6.2 ROS图像识别节点 207
9.7 scikit-learn简介 210
9.8 SVM及其在机器人领域的应用简介 211
9.9 本章小结 214
第10章 ROS下的自动驾驶汽车构建 215
10.1 技术要求 215
10.2 自动驾驶汽车入门 216
10.3 典型自动驾驶汽车基本组件 218
10.3.1 GPS、IMU和车轮编码器 218
10.3.2 摄像头 219
10.3.3 超声波传感器 219
10.3.4 LIDAR与RADAR 219
10.3.5 自动驾驶汽车的软件模块体系结构 221
10.4 ROS下的自动驾驶汽车模拟与交互 222
10.4.1 Velodyne LIDAR模拟 223
10.4.2 ROS下的Velodyne传感器接口 224
10.4.3 激光扫描仪模拟 225
10.4.4 模拟代码扩展 226
10.4.5 ROS下的激光扫描仪接口 227
10.4.6 Gazebo下的立体与单目摄像头模拟 228
10.4.7 ROS下的摄像头接口 229
10.4.8 Gazebo下的GPS模拟 230
10.4.9 ROS下的GPS接口 231
10.4.10 Gazebo下的IMU模拟 231
10.4.11 ROS下的IMU接口 233
10.4.12 Gazebo下的超声波传感器模拟 233
10.4.13 低成本LIDAR传感器 235
10.5 Gazebo下带传感器的自动驾驶汽车模拟 236
10.6 ROS下的DBW汽车接口 241
10.6.1 功能包安装 241
10.6.2 自动驾驶汽车及传感器数据可视化 241
10.6.3 基于ROS与DBW通信 243
10.7 Udacity开源自动驾驶汽车项目简介 243
10.7.1 Udacity的开源自动驾驶汽车模拟器 244
10.7.2 MATLAB ADAS工具箱 246
10.8 本章小结 246
第11章 基于VR头盔和Leap Motion的机器人遥操作 247
11.1 技术要求 248
11.2 VR头盔和Leap Motion传感器入门 248
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的交互 260
11.9 VR下的TurtleBot模拟 262
11.9.1 安装TurtleBot模拟器 262
11.9.2 在VR中控制TurtleBot 262
11.10 ROS-VR应用程序故障排除 263
11.11 ROS-VR应用与Leap Motion遥操作功能集成 264
11.12 本章小结 265
第12章 基于ROS、Open CV和Dynamixel伺服系统的人脸识别与跟踪 266
12.1 技术要求 266
12.2 项目概述 267
12.3 硬件和软件基础需求 267
12.4 使用RoboPlus配置Dynamixel伺服系统 271
12.5 Dynamixel与ROS连接 275
12.6 创建人脸跟踪器ROS功能包 276
12.7 使用人脸跟踪ROS功能包 278
12.7.1 理解人脸跟踪器代码 279
12.7.2 理解CMakeLists.txt 283
12.7.3 track.yaml文件 284
12.7.4 启动文件 284
12.7.5 运行人脸跟踪器节点 285
12.7.6 face_tracker_control功能包 286
12.7.7 平移控制器配置文件 287
12.7.8 伺服系统参数配置文件 287
12.7.9 人脸跟踪控制器节点 288
12.7.10 创建CMakeLists.txt 289
12.7.11 测试人脸跟踪器控制功能包 290
12.7.12 节点集成 291
12.7.13 固定支架并设置电路 291
12.7.14 最终运行 292
12.8 本章小结 292
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
译者序
前言
作者简介
审校者简介
第1章 ROS初体验 1
1.1 ROS的用途以及学习ROS的好处 1
1.2 哪些机器人采用了ROS 2
1.3 安装并启动ROS 4
1.3.1 配置Ubuntu系统的软件源 4
1.3.2 设置Ubuntu系统软件源列表 5
1.3.3 设置Ubuntu系统密钥 5
1.3.4 安装ROS Kinetic 5
1.3.5 初始化rosdep 6
1.3.6 环境设置 6
1.3.7 安装 rosinstall 6
1.3.8 故障排除—ROS环境测试 7
1.4 创建catkin工作空间 7
1.5 ROS的功能包与清单 8
1.5.1 ROS清单 8
1.5.2 探索ROS功能包 8
1.6 ROS节点、话题与消息 10
1.6.1 ROS节点 11
1.6.2 ROS话题 11
1.6.3 ROS消息 11
1.6.4 ROS节点管理器 12
1.6.5 确定节点和话题的ROS命令 13
1.7 第一个ROS机器人模拟程序turtlesim 15
1.7.1 启动turtlesim节点 15
1.7.2 turtlesim节点 16
1.7.3 turtlesim话题与消息 18
1.7.4 通过发布/turtle1/cmd_vel话题控制乌龟运动 20
1.7.5 通过键盘或游戏手柄控制乌龟移动 22
1.7.6 turtlesim的参数服务器 22
1.7.7 控制乌龟移动的ROS服务 24
1.8 ROS命令小结 25
1.9 本章小结 26
第2章 构建一个模拟的两轮ROS机器人 27
2.1 Rviz简介 27
2.1.1 安装和启动Rviz 28
2.1.2 熟悉Rviz界面 29
2.2 生成并构建ROS功能包 32
2.3 构建差分驱动的机器人URDF 33
2.3.1 创建机器人底座 33
2.3.2 使用roslaunch 34
2.3.3 添加轮子 37
2.3.4 添加小脚轮 39
2.3.5 添加颜色 41
2.3.6 添加碰撞属性 42
2.3.7 移动轮子 43
2.3.8 tf和robot_state_publisher简介 44
2.3.9 添加物理学属性 45
2.3.10 试用URDF工具 46
2.4 Gazebo 47
2.4.1 安装并启动Gazebo 48
2.4.2 使用roslaunch启动Gazebo 49
2.4.3 熟悉Gazebo界面 50
2.4.4 机器人URDF的修改 54
2.4.5 Gazebo模型验证 55
2.4.6 在Gazebo中查看URDF 56
2.4.7 机器人模型调整 57
2.4.8 移动机器人模型 58
2.4.9 其他的机器人模拟环境 59
2.5 本章小结 60
第3章 TurtleBot机器人操控 61
3.1 TurtleBot 2机器人简介 61
3.2 下载TurtleBot 2模拟器软件 63
3.3 在Gazebo中启动TurtleBot 2模拟器 63
3.3.1 常见问题与故障排除 65
3.3.2 ROS命令与Gazebo 66
3.3.3 模拟环境下使用键盘远程控制TurtleBot 2 68
3.4 控制真正的TurtleBot 2机器人的设置 69
3.5 连接上网本与远程计算机 71
3.5.1 网络类型 71
3.5.2 网络地址 72
3.5.3 远程计算机网络设置 73
3.5.4 上网本网络设置 73
3.5.5 SSH连接 74
3.5.6 网络设置小结 74
3.5.7 排查网络连接中的故障 75
3.5.8 TurtleBot 2机器人系统测试 75
3.6 TurtleBot 2机器人的硬件规格参数 76
3.7 移动真实的TurtleBot 2机器人 78
3.7.1 采用键盘远程控制TurtleBot 2机器人移动 78
3.7.2 采用ROS命令控制TurtleBot 2机器人移动 79
3.7.3 编写第一个Python脚本程序控制TurtleBot 2机器人移动 80
3.8 rqt工具简介 83
3.8.1 rqt_graph 83
3.8.2 rqt的消息发布与话题监控 86
3.9 TurtleBot机器人的测程 87
3.9.1 模拟的TurtleBot 2机器人的测程 91
3.9.2 Rviz下真实的TurtleBot 2机器人的测程显示 93
3.10 TurtleBot机器人的自动充电 95
3.11 TurtleBot 3介绍 96
3.12 下载TurtleBot 3模拟软件 98
3.13 在Rviz中启动TurtleBot 3模拟软件 99
3.14 在Gazebo中启动TurtleBot 3模拟软件 100
3.15 硬件装配与测试 103
3.16 下载TurtleBot 3机器人软件包 103
3.16.1 在远程计算机上安装软件 103
3.16.2 在SBC上安装软件 104
3.17 TurtleBot 3与远程计算机的网络连接 107
3.17.1 远程计算机网络设置 108
3.17.2 TurtleBot 3网络设置 108
3.17.3 SSH通信测试 110
3.17.4 网络连接的故障处理 110
3.18 控制真实的TurtleBot 3移动 111
3.19 本章小结 113
第4章 TurtleBot机器人导航 114
4.1 TurtleBot机器人的3D视觉系统 115
4.1.1 3D视觉传感器原理 115
4.1.2 3D传感器对比 116
4.2 配置TurtleBot机器人并安装3D 传感器软件 123
4.2.1 Kinect 123
4.2.2 ASUS与PrimeSense 123
4.2.3 Intel RealSense 124
4.2.4 摄像头软件结构 124
4.2.5 术语定义 125
4.3 独立模式下测试3D传感器 125
4.4 运行ROS节点进行可视化 126
4.4.1 使用Image Viewer可视化数据 126
4.4.2 使用Rviz可视化数据 128
4.5 TurtleBot机器人导航 131
4.5.1 采用TurtleBot 2机器人构建房间地图 132
4.5.2 采用TurtleBot 2机器人实现自主导航 136
4.5.3 导航至指定目标点 142
4.5.4 基于Python脚本与地图实现航路点导航 144
4.5.5 TurtleBot 3机器人的SLAM 151
4.5.6 使用TurtleBot 3进行自主导航 152
4.5.7 rqt_reconfigure 153
4.5.8 进一步探索ROS导航 155
4.6 本章小结 155
第5章 构建模拟的机器人手臂 156
5.1 Xacro的特点 156
5.2 采用Xacro建立一个关节式机器人手臂URDF 157
5.2.1 指定名空间 158
5.2.2 使用Xacro属性标签 158
5.2.3 扩展Xacro 161
5.2.4 使用Xacro的包含与宏标签 163
5.2.5 给机器人手臂添加网格 166
5.3 在Gazebo中控制关节式机器人手臂 171
5.3.1 添加Gazebo特性元素 171
5.3.2 将机器人手臂固定在世界坐标系下 173
5.3.3 在Gazebo中查看机器人手臂 173
5.3.4 给Xacro添加控制组件 174
5.3.5 采用ROS命令行控制机器人手臂 178
5.3.6 采用rqt控制机器人手臂 179
5.4 本章小结 182
第6章 机器人手臂摇摆的关节控制 183
6.1 Baxter简介 184
6.1.1 研究型机器人Baxter 185
6.1.2 Baxter模拟器 186
6.2 Baxter的手臂 186
6.2.1 Baxter的俯仰关节 187
6.2.2 Baxter的滚转关节 188
6.2.3 Baxter的坐标系 188
6.2.4 Baxter手臂的控制模式 189
6.2.5 Baxter手臂的抓手 189
6.2.6 Baxter手臂的传感器 190
6.3 下载Baxter软件 190
6.3.1 安装Baxter SDK软件 190
6.3.2 安装Baxter模拟器 192
6.3.3 配置Baxter shell 193
6.3.4 安装MoveIt! 194
6.4 在Gazebo中启动Baxter模拟器 195
6.4.1 启动Baxter模拟器 196
6.4.2 “热身”练习 199
6.4.3 弯曲Baxter手臂 200
6.5 Baxter手臂与正向运动 209
6.5.1 关节与关节状态发布器 209
6.5.2 理解tf 212
6.5.3 直接指定关节组件角度 215
6.5.4 Rviz下的tf坐标系 216
6.5.5 查看机器人元素的tf树 217
6.6 MoveIt!简介 217
6.6.1 使用MoveIt!对Baxter手臂进行运动规划 219
6.6.2 在场景中添加物体 220
6.6.3 采用MoveIt!进行避障运动规划 222
6.7 配置真实的Baxter机器人 223
6.8 控制真实的Baxter机器人 225
6.8.1 控制关节到达航路点 225
6.8.2 控制关节的力矩弹簧 226
6.8.3 关节速度控制演示 227
6.8.4 其他示例 227
6.8.5 视觉伺服和抓取 227
6.9 反向运动 228
6.10 使用状态机实现YMCA 231
6.11 本章小结 236
第7章 空中机器人基本操控 237
7.1 四旋翼飞行器简介 238
7.1.1 风靡的四旋翼飞行器 238
7.1.2 滚转角、俯仰角与偏航角 238
7.1.3 四旋翼飞行器原理 239
7.1.4 四旋翼飞行器的组成 241
7.1.5 添加传感器 241
7.1.6 四旋翼飞行器的通信 242
7.2 四旋翼飞行器的传感器 243
7.2.1 惯性测量单元 243
7.2.2 四旋翼飞行器状态传感器 243
7.3 飞行前的准备工作 244
7.3.1 四旋翼飞行器检测 244
7.3.2 飞行前检测列表 245
7.3.3 飞行中的注意事项 245
7.3.4 需要遵循的规则和条例 245
7.4 在无人机中使用ROS 246
7.5 Hector四旋翼飞行器 246
7.5.1 下载Hector四旋翼飞行器 248
7.5.2 在Gazebo中启动Hector四旋翼飞行器 249
7.6 Crazyflie 2.0简介 256
7.6.1 无ROS情况下的Crazyflie控制 257
7.6.2 使用Crazyradio PA进行通信 258
7.6.3 加载Crazyflie ROS软件 259
7.6.4 飞行前的检查 261
7.6.5 使用teleop操控Crazyflie飞行 262
7.6.6 在运动捕获系统下飞行 265
7.6.7 控制多个Crazyflie飞行 266
7.7 Bebop简介 266
7.7.1 加载bebop_autonomy软件 268
7.7.2 使用命令控制Bebop飞行 270
7.8 本章小结 271
第8章 使用外部设备控制机器人 272
8.1 创建自定义ROS游戏控制器接口 272
8.1.1 测试游戏控制器 273
8.1.2 使用joy ROS功能包 275
8.1.3 使用自定义游戏控制器接口控制turtlesim 275
8.2 创建自定义ROS Android设备接口 280
8.2.1 安装Android Studio和工具 280
8.2.2 安装ROS-Android开发环境 281
8.2.3 术语定义 282
8.2.4 ROS-Android开发环境介绍 283
8.3 在Arduino或树莓派上创建ROS节点 284
8.3.1 使用Arduino 284
8.3.2 使用树莓派 294
8.4 本章小结 295
第9章 操控Crazyflie执行飞行任务 296
9.1 执行任务所需的组件 297
9.1.1 Kinect Windows v2 297
9.1.2 Crazyflie操作 298
9.1.3 任务软件结构 298
9.1.4 OpenCV与ROS 300
9.2 安装任务所需的软件 301
9.2.1 安装libfreenect2 301
9.2.2 安装iai_kinect2 304
9.2.3 使用iai_kinect2元包 305
9.3 任务设置 311
9.3.1 探测Crazyflie与目标 311
9.3.2 使用Kinect与OpenCV 314
9.3.3 对Crazyflie进行跟踪 317
9.4 Crazyflie控制 319
9.5 试飞Crazyflie 324
9.5.1 悬停 324
9.5.2 飞往静止目标 326
9.5.3 学到的经验 327
9.6 本章小结 328
第10章 基于MATLAB的Baxter控制 329
10.1 安装MATLAB机器人系统工具箱 329
10.1.1 MATLAB与机器人系统工具箱版本检查 330
10.1.2 机器人系统工具箱下的ROS命令 330
10.2 机器人系统工具箱与Baxter模拟器的使用 330
10.2.1 在MATLAB中安装Baxter消息 330
10.2.2 运行Baxter模拟器和MATLAB 332
10.2.3 控制Baxter运动 334
10.3 本章小结 337
---------------------------ROS机器人编程:原理与应用---------------------------
译者序
前言
第一部分 ROS基础 / 1
第1章 概述:ROS工具和节点 / 2
1.1 ROS基础概念 / 2
1.2 编写ROS节点 / 5
1.2.1 创建ROS程序包 / 5
1.2.2 编写一个最小的ROS发布器 / 8
1.2.3 编译ROS节点 / 11
1.2.4 运行ROS节点 / 12
1.2.5 检查运行中的最小发布器节点 / 13
1.2.6 规划节点时间 / 15
1.2.7 编写一个最小ROS订阅器 / 17
1.2.8 编译和运行最小订阅器 / 19
1.2.9 总结最小订阅器和发布器节点 / 21
1.3 更多的ROS工具:catkin_simple、roslaunch、rqt_console和rosbag / 21
1.3.1 用catkin_simple简化CMakeLists.txt / 21
1.3.2 自动启动多个节点 / 23
1.3.3 在ROS控制台观察输出 / 25
1.3.4 使用rosbag记录并回放数据 / 26
1.4 最小仿真器和控制器示例 / 28
1.5 小结 / 32
第2章 消息、类和服务器 / 33
2.1 定义自定义消息 / 33
2.1.1 定义一条自定义消息 / 34
2.1.2 定义一条变长的消息 / 38
2.2 ROS服务介绍 / 43
2.2.1 服务消息 / 43
2.2.2 ROS服务节点 / 45
2.2.3 与ROS服务手动交互 / 47
2.2.4 ROS服务客户端示例 / 48
2.2.5 运行服务和客户端示例 / 50
2.3 在ROS中使用C++类 / 51
2.4 在ROS中创建库模块 / 56
2.5 动作服务器和动作客户端介绍 / 61
2.5.1 创建动作服务器包 / 62
2.5.2 定义自定义动作服务器消息 / 62
2.5.3 设计动作客户端 / 68
2.5.4 运行示例代码 / 71
2.6 参数服务器介绍 / 80
2.7 小结 / 84
第二部分 ROS中的仿真和可视化 / 85
第3章 ROS中的仿真 / 86
3.1 简单的2维机器人仿真器 / 86
3.2 动力学仿真建模 / 93
3.3 统一的机器人描述格式 / 95
3.3.1 运动学模型 / 95
3.3.2 视觉模型 / 98
3.3.3 动力学模型 / 99
3.3.4 碰撞模型 / 102
3.4 Gazebo介绍 / 104
3.5 最小关节控制器 / 112
3.6 使用Gazebo插件进行关节伺服控制 / 118
3.7 构建移动机器人模型 / 124
3.8 仿真移动机器人模型 / 132
3.9 组合机器人模型 / 136
3.10 小结 / 139
第4章 ROS中的坐标变换 / 141
4.1 ROS中的坐标变换简介 / 141
4.2 转换侦听器 / 149
4.3 使用Eigen库 / 156
4.4 转换ROS数据类型 / 161
4.5 小结 / 163
第5章 ROS中的感知与可视化 / 164
5.1 rviz中的标记物和交互式标记物 / 168
5.1.1 rviz中的标记物 / 168
5.1.2 三轴显示示例 / 172
5.1.3 rviz中的交互式标记物 / 176
5.2 在rviz中显示传感器值 / 183
5.2.1 仿真和显示激光雷达 / 183
5.2.2 仿真和显示彩色相机数据 / 189
5.2.3 仿真和显示深度相机数据 / 193
5.2.4 rviz中点的选择 / 198
5.3 小结 / 201
第三部分 ROS中的感知处理 / 203
第6章 在ROS中使用相机 / 204
6.1 相机坐标系下的投影变换 / 204
6.2 内置相机标定 / 206
6.3 标定立体相机内参 / 211
6.4 在ROS中使用OpenCV / 217
6.4.1 OpenCV示例:寻找彩色像素 / 218
6.4.2 OpenCV示例:查找边缘 / 223
6.5 小结 / 224
第7章 深度图像与点云信息 / 225
7.1 从扫描LIDAR中获取深度信息 / 225
7.2 立体相机的深度信息 / 230
7.3 深度相机 / 236
7.4 小结 / 237
第8章 点云数据处理 / 238
8.1 简单的点云显示节点 / 238
8.2 从磁盘加载和显示点云图像 / 244
8.3 将发布的点云图像保存到磁盘 / 246
8.4 用PCL方法解释点云图像 / 248
8.5 物体查找器 / 257
8.6 小结 / 261
第四部分 ROS中的移动机器人 / 263
第9章 移动机器人的运动控制 / 264
9.1 生成期望状态 / 264
9.1.1 从路径到轨迹 / 264
9.1.2 轨迹构建器库 / 268
9.1.3 开环控制 / 273
9.1.4 发布期望状态 / 274
9.2 机器人状态估计 / 282
9.2.1 从Gazebo获得模型状态 / 282
9.2.2 里程计 / 286
9.2.3 混合里程计、GPS和惯性传感器 / 292
9.2.4 混合里程计和LIDAR / 297
9.3 差分驱动转向算法 / 302
9.3.1 机器人运动模型 / 303
9.3.2 线性机器人的线性转向 / 304
9.3.3 非线性机器人的线性转向 / 306
9.3.4 非线性机器人的非线性转向 / 308
9.3.5 仿真非线性转向算法 / 309
9.4 相对于地图坐标系的转向 / 312
9.5 小结 / 317
第10章 移动机器人导航 / 318
10.1 构建地图 / 318
10.2 路径规划 / 323
10.3 move_base客户端示例 / 328
10.4 修改导航栈 / 331
10.5 小结 / 335
第五部分 ROS中的机械臂 / 337
第11章 底层控制 / 338
11.1 单自由度移动关节机器人模型 / 338
11.2 位置控制器示例 / 339
11.3 速度控制器示例 / 342
11.4 力控制器示例 / 344
11.5 机械臂的轨迹消息 / 349
11.6 7自由度臂的轨迹插值动作服务器 / 353
11.7 小结 / 354
第12章 机械臂运动学 / 355
12.1 正向运动学 / 356
12.2 逆向运动学 / 360
12.3 小结 / 365
第13章 手臂运动规划 / 366
13.1 笛卡儿运动规划 / 367
13.2 关节空间规划的动态规划 / 368
13.3 笛卡儿运动动作服务器 / 372
13.4 小结 / 376
第14章 Baxter仿真器进行手臂控制 / 377
14.1 运行Baxter仿真器 / 377
14.2 Baxter关节和主题 / 379
14.3 Baxter夹具 / 382
14.4 头盘控制 / 385
14.5 指挥Baxter关节 / 387
14.6 使用ROS关节轨迹控制器 / 390
14.7 关节空间记录和回放节点 / 391
14.8 Baxter运动学 / 397
14.9 Baxter笛卡儿运动 / 399
14.10 小结 / 404
第15章 object-grabber包 / 405
15.1 object-grabber代码组织 / 405
15.2 对象操作查询服务 / 407
15.3 通用夹具服务 / 410
15.4 object-grabber动作服务器 / 412
15.5 object-grabber动作客户端示例 / 415
15.6 小结 / 425
第六部分 系统集成与高级控制 / 427
第16章 基于感知的操作 / 428
16.1 外部相机标定 / 428
16.2 综合感知和操作 / 431
16.3 小结 / 440
第17章 移动操作 / 441
17.1 移动机械手模型 / 441
17.2 移动操作 / 442
17.3 小结 / 446
第18章 总结 / 447
参考文献 / 449
---------------------------精通ROS机器人编程(原书第2版)---------------------------
译者序
前言
作者简介
译者简介
第1章 ROS简介 1
1.1 为什么要学习ROS 1
1.2 在机器人开发中,人们为什么更愿意选择ROS 2
1.3 为什么有些人不愿意选择ROS 3
1.4 理解ROS的文件系统 4
1.4.1 ROS软件包 5
1.4.2 ROS超软件包 7
1.4.3 ROS消息 7
1.4.4 ROS服务 9
1.5 理解ROS的计算图 9
1.5.1 ROS节点 11
1.5.2 ROS消息 12
1.5.3 ROS话题 13
1.5.4 ROS服务 13
1.5.5 ROS消息记录包 14
1.5.6 ROS节点管理器 14
1.5.7 应用ROS参数 16
1.6 ROS的社区 17
1.7 学习ROS需要做哪些准备 17
1.8 习题 20
1.9 本章小结 20
第2章 ROS编程入门 21
2.1 创建一个ROS软件包 21
2.1.1 学习ROS话题 23
2.1.2 创建ROS节点 23
2.1.3 编译生成节点 26
2.2 添加自定义的msg和srv文件 28
2.3 使用ROS服务 30
2.3.1 使用ROS动作库 34
2.3.2 编译ROS动作服务器和客户端 37
2.4 创建启动文件 39
2.5 话题、服务和动作库的应用 41
2.6 维护ROS软件包 41
2.7 发布ROS软件包 42
2.7.1 准备发布ROS软件包 43
2.7.2 发布软件包 43
2.7.3 为ROS软件包创建维基页面 45
2.8 习题 47
2.9 本章小结 47
第3章 在ROS中为3D机器人建模 48
3.1 机器人建模的ROS软件包 49
3.2 利用URDF理解机器人建模 50
3.3 为机器人描述创建ROS软件包 52
3.4 创建我们的第一个URDF模型 52
3.5 详解URDF文件 54
3.6 在RViz中可视化机器人3D模型 55
3.7 向URDF模型添加物理属性和碰撞属性 57
3.8 利用xacro理解机器人建模 58
3.8.1 使用属性 58
3.8.2 使用数学表达式 59
3.8.3 使用宏 59
3.9 将xacro转换为URDF 59
3.10 为7-DOF机械臂创建机器人描述 60
3.10.1 机械臂规格 61
3.10.2 关节类型 61
3.11 解析7-DOF机械臂的xacro模型 61
3.11.1 使用常量 61
3.11.2 使用宏 62
3.11.3 包含其他xacro文件 62
3.11.4 在连杆中使用网格模型 63
3.11.5 使用机器人夹爪 63
3.11.6 在RViz中查看7-DOF机械臂 63
3.12 为差速驱动移动机器人创建机器人模型 66
3.13 习题 70
3.14 本章小结 70
第4章 使用ROS和Gazebo进行机器人仿真 71
4.1 使用Gazebo和ROS仿真机械臂 71
4.2 为Gazebo创建机械臂仿真模型 72
4.2.1 为Gazebo机器人模型添加颜色和纹理 73
4.2.2 添加transmission标签来驱动模型 74
4.2.3 添加gazebo_ros_control插件 74
4.2.4 在Gazebo中添加3D视觉传感器 75
4.3 仿真装有Xtion Pro的机械臂 76
4.4 在Gazebo中使用ROS控制器 78
4.4.1 认识ros_control软件包 78
4.4.2 不同类型的ROS控制器和硬件接口 79
4.4.3 ROS控制器如何与Gazebo交互 79
4.4.4 将关节状态控制器和关节位置控制器连接到手臂 80
4.4.5 在Gazebo中启动ROS控制器 81
4.4.6 控制机器人的关节运动 83
4.5 在Gazebo中仿真差速轮式机器人 83
4.5.1 将激光雷达添加到机器人中 85
4.5.2 在Gazebo中控制机器人移动 86
4.5.3 在启动文件中添加关节状态发布者 87
4.6 添加ROS遥控节点 88
4.7 习题 89
4.8 本章小结 89
第5章 用ROS和V-REP进行机器人仿真 91
5.1 安装带有ROS的V-REP 91
5.2 理解vrep_plugin 95
5.2.1 使用ROS服务与V-REP交互 96
5.2.2 使用ROS话题与V-REP交互 98
5.3 使用V-REP和ROS仿真机械臂 101
5.4 在V-REP下仿真差速轮式机器人 107
5.4.1 在V-REP中添加激光传感器 109
5.4.2 在V-REP中添加3D视觉传感器 110
5.5 习题 112
5.6 本章小结 112
第6章 ROS MoveIt!与导航软件包集 113
6.1 安装MoveIt! 113
6.2 使用配置助手工具生成MoveIt!配置软件包 118
6.2.1 第1步:启动配置助手工具 118
6.2.2 第2步:生成自碰撞矩阵 120
6.2.3 第3步:增加虚拟关节 120
6.2.4 第4步:添加规划组 121
6.2.5 第5步:添加机器人姿态 122
6.2.6 第6步:设置机器人的末端执行器 122
6.2.7 第7步:添加被动关节 123
6.2.8 第8步:作者信息 123
6.2.9 第9步:生成配置文件 123
6.3 使用MoveIt!配置软件包在RViz中进行机器人运动规划 124
6.3.1 使用RViz运动规划插件 125
6.3.2 MoveIt!配置软件包与Gazebo的接口 128
6.4 理解ROS导航软件包集 133
6.4.1 ROS导航硬件的要求 133
6.4.2 使用导航软件包 134
6.5 安装ROS导航软件包集 136
6.6 使用SLAM构建地图 136
6.6.1 为gmapping创建启动文件 137
6.6.2 在差速驱动机器人上运行SLAM 138
6.6.3 使用amcl和静态地图实现自主导航 141
6.6.4 创建amcl启动文件 141
6.7 习题 144
6.8 本章小结 144
第7章 使用pluginlib、小节点和Gazebo 插件 145
7.1 理解pluginlib 145
7.2 理解ROS小节点 151
7.3 理解Gazebo插件 156
7.4 习题 160
7.5 本章小结 160
第8章 ROS控制器和可视化插件编程 161
8.1 理解 ros_control软件包集 162
8.1.1 controller_interface软件包 162
8.1.2 控制器管理器 164
8.2 使用ROS编写一个基本的关节控制器 164
8.2.1 第1步:创建控制器软件包 165
8.2.2 第2步:创建控制器头文件 165
8.2.3 第3步:创建控制器源文件 166
8.2.4 第4步:控制器源文件解析 166
8.2.5 第5步:创建插件描述文件 167
8.2.6 第6步:更新package.xml文件 168
8.2.7 第7步:更新CMake-Lists.txt文件 168
8.2.8 第8步:编译控制器 168
8.2.9 第9步:编写控制器配置文件 168
8.2.10 第10步:编写控制器的启动文件 169
8.2.11 第11步:在Gazebo中运行控制器和7-DOF机械臂 169
8.3 理解ROS可视化工具(RViz)及其插件 171
8.3.1 Displays面板 172
8.3.2 RViz工具栏 172
8.3.3 Views面板 172
8.3.4 Time面板 172
8.3.5 可停靠面板 172
8.4 编写用于遥控操作的RViz插件 172
8.5 习题 178
8.6 本章小结 178
第9章 将ROS与I/O开发板、传感器、执行机构连接 179
9.1 理解Arduino-ROS接口 179
9.2 Arduino-ROS接口是什么 180
9.2.1 理解ROS中的rosserial软件包 181
9.2.2 理解Arduino中的ROS节点API 185
9.2.3 ROS-Arduino发布者和订阅者实例 187
9.2.4 Arduino-ROS接口实例——LED灯闪烁/按按钮 190
9.2.5 Arduino-ROS接口实例——ADXL 335加速度计 192
9.2.6 Arduino-ROS接口实例——超声波测距传感器 194
9.2.7 Arduino-ROS接口实例——里程计发布者 197
9.3 非Arduino开发板与ROS接口 199
9.3.1 在Odroid-XU4和树莓派2上配置ROS 199
9.3.2 用ROS控制树莓派2 上的LED灯闪烁 206
9.3.3 在树莓派2上使用ROS测试按钮和LED灯闪烁 208
9.3.4 在树莓派2上运行示例 211
9.4 将DYNAMIXEL驱动器连接到ROS 212
9.5 习题 212
9.6 本章小结 212
第10章 用ROS对视觉传感器编程、OpenCV、PCL 213
10.1 理解ROS-OpenCV开发接口软件包 213
10.2 理解ROS-PCL开发接口软件包 214
10.3 在ROS中连接USB相机 216
10.4 ROS与相机校准 218
10.4.1 使用cv_bridge在ROS和OpenCV之间转换图像 221
10.4.2 使用ROS和OpenCV进行图像处理 221
10.5 在ROS中连接Kinect与华硕Xtion Pro 225
10.6 将英特尔Real Sense相机与ROS连接 228
10.7 在ROS中连接Hokuyo激光雷达 232
10.8 处理点云数据 233
10.8.1 如何发布点云 234
10.8.2 如何订阅和处理点云 235
10.8.3 将点云数据写入点云数据(PCD)文件 236
10.8.4 从PCD文件中读取并发布点云 237
10.9 物体姿态估计与AR标记检测 239
10.10 习题 243
10.11 本章小结 244
第11章 在ROS中构造与连接差速驱动移动机器人 245
11.1 Chefbot DIY移动机器人及其硬件配置 246
11.1.1 使用Energia IDE来烧写Chefbot固件 248
11.1.2 讨论Chefbot的ROS软件包接口 249
11.1.3 从编码器计数计算里程计信息 254
11.1.4 根据ROS twist消息计算马达转速 256
11.1.5 为Chefbot机器人配置导航软件包集 257
11.1.6 配置gmapping节点 257
11.1.7 配置导航软件包集 259
11.1.8 理解AMCL 264
11.1.9 在RViz中使用导航功能 267
11.1.10 导航软件包中避障 272
11.1.11 Chefbot机器人仿真 273
11.1.12 从ROS节点向导航软件包集发送一个目的地 276
11.2 习题 278
11.3 本章小结 278
第12章 探索ROS-MoveIt!的高级功能 279
12.1 使用move_group的C++接口进行运动规划 279
12.1.1 使用MoveIt! C++ API规划随机路径 280
12.1.2 使用MoveIt! C++ API规划自定义路径 281
12.2 使用MoveIt!进行机械臂的碰撞检测 283
12.2.1 向MoveIt!添加碰撞对象 283
12.2.2 从规划场景中移除碰撞对象 286
12.2.3 向机器人连杆上添加一个碰撞对象 286
12.2.4 使用MoveIt! API检查自碰撞 287
12.3 使用MoveIt!和Gazebo处理视觉 288
12.4 使用MoveIt!执行拾取和放置任务 294
12.4.1 使用GPD计算抓握姿态 297
12.4.2 在Gazebo和真实机器人上执行拾取和放置动作 300
12.5 理解用于机器人硬件接口的DYNAMIXEL ROS伺服控制器 300
12.5.1 DYNAMIXEL伺服舵机 300
12.5.2 DYNAMIXEL-ROS接口 301
12.6 7-DOF机械臂与ROS MoveIt! 302
12.6.1 为COOL机械臂创建一个控制器软件包 303
12.6.2 COOL机械臂的MoveIt!配置 306
12.7 习题 308
12.8 本章小结 308
第13章 在MATLAB和Simulink中使用ROS 309
13.1 学习使用MATLAB与MATLAB-ROS 309
13.1.1 机器人系统工具箱和ROS-MATLAB接口入门 310
13.1.2 ROS话题和MATLAB回调函数 313
13.1.3 为Turtlebot机器人设计一个避障系统 317
13.2 学习使用ROS与Simulink 321
13.2.1 在Simulink中创建波形信号积分器 321
13.2.2 在Simulink中使用ROS消息 323
13.2.3 在Simulink中发布ROS消息 323
13.2.4 在Simulink中订阅ROS话题 327
13.3 用Simulink开发一个简单的控制系统 328
13.4 习题 332
13.5 本章小结 332
第14章 ROS与工业机器人 333
14.1 理解ROS-Industrial软件包 333
14.1.1 ROS-Industrial的目标 334
14.1.2 ROS-Industrial简史 334
14.1.3 ROS-Industrial优点 334
14.2 安装ROS-Industrial软件包 334
14.3 ROS-Industrial软件包框图 335
14.4 为工业机器人创建URDF 336
14.5 为工业机器人创建MoveIt!配置 337
14.5.1 更新MoveIt!配置文件 340
14.5.2 测试MoveIt!配置 341
14.6 安装UR机械臂的ROS-Industrial软件包 341
14.7 理解UR机械臂的MoveIt!配置 343
14.8 使用真实的UR机器人和ROS-I 345
14.9 ABB机器人的MoveIt!配置 346
14.10 ROS-Industrial机器人支持软件包 349
14.11 ROS-Industrial 机器人客户端软件包 351
14.12 ROS-Industrial 机器人驱动软件包 352
14.13 理解MoveIt! IKFast插件 354
14.14 为ABB IRB 6640机器人创建MoveIt! IKFast插件 354
14.14.1 开发MoveIt! IKFast插件的前提条件 354
14.14.2 OpenRave和IKFast模块 354
14.15 为使用OpenRave,创建机器人的COLLADA文件 357
14.16 为IRB 6640机器人生成IKFast CPP文件 358
14.17 习题 361
14.18 本章小结 361
第15章 调试方法与最佳实战技巧 362
15.1 在Ubuntu中安装RoboWare Studio 362
15.1.1 安装和卸载RoboWare Studio 363
15.1.2 RoboWare Studio入门 363
15.1.3 在RoboWare Studio中创建ROS软件包 364
15.1.4 在RoboWare Studio中编译ROS工作区 366
15.1.5 在RoboWare Studio中运行ROS节点 367
15.1.6 在RoboWare界面启动ROS工具 368
15.1.7 处理活动的ROS话题、节点和服务 369
15.1.8 使用RoboWare工具创建ROS节点和类 370
15.1.9 RoboWare Studio中的ROS软件包管理器 371
15.2 ROS的最佳实战技巧与经验 372
15.3 ROS软件包中的最佳实战技巧与经验 374
15.4 ROS中的重要调试技巧 374
15.5 习题 377
15.6 本章小结 378
---------------------------ROS机器人开发实践---------------------------
推荐序一
推荐序二
推荐序三
前言
第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
---------------------------ROS机器人开发:实用案例分析---------------------------
译者序
作者简介
前言
第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
---------------------------ROS机器人编程实践---------------------------
前言 1
第一部分 基础知识
第1章 概述 9
简史 9
理念 10
安装 11
小结 12
第2章 预备知识 13
ROS图 13
roscore 15
catkin、工作区以及ROS程序包 16
rosrun 19
命名、命名空间以及重映射 24
roslaunch 25
tab键 26
tf:坐标系转换 27
小结 30
第3章 话题 31
将消息发布到话题上 32
订阅一个话题 36
锁存话题 38
定义自己的消息类型 39
让发布者和订阅者协同工作 46
小结 47
第4章 服务 48
定义服务 48
实现服务 51
使用服务 54
小结 56
第5章 动作 57
动作的定义 58
实现一个基本的动作服务器 59
动作的使用 62
实现一个更复杂的动作服务器 64
使用更复杂的动作 66
小结 69
第6章 机器人与仿真器 71
子系统 71
机器人系统举例 79
仿真器 83
小结 86
第7章 Wander-bot 88
创建包 88
读取传感器数据 91
感知环境并移动:Wander-bot 94
小结 96
第二部分 使用ROS驱动机器人行走
第8章 遥控机器人 99
开发模式 100
键盘驱动 100
运动生成器 102
参数服务器 107
速度斜坡曲线 109
开车 111
rviz 113
小结 120
第9章 创建环境地图 121
ROS中的地图 121
使用rosbag记录数据 124
创建地图 125
启动地图服务器以及查看地图 131
小结 133
第10章 在真实环境中的导航 135
在地图中定位机器人 135
使用ROS的导航软件包 139
在代码中进行导航 144
小结 145
第11章 下棋机器人 146
关节、连接以及传动链 147
成功的关键 150
安装和运行一台仿真R2 152
在命令行中移动R2 155
在棋盘上移动R2的机械臂 156
操作机械手 158
对棋盘建模 159
重演著名的棋局 163
小结 167
第三部分 感知和行为
第12章 循线机器人 171
采集图像 171
检测指示线 177
循线运动 182
小结 184
第13章 巡航 185
简单巡航 185
状态机 186
用smach构建状态机 188
用状态机实现巡航 195
小结 198
第14章 仓储机器人 199
仓库模拟环境 199
驶入隔间 210
拾取物体 214
小结 224
第四部分 添加自定义ROS组件
第15章 添加你自己的传感器和执行器 227
添加你自己的传感器 227
添加你自己的执行器 234
小结 240
第16章 添加你自己的移动机器人:第一部分 242
小龟机器人 242
ROS 消息接口 244
硬件驱动 247
使用 URDF对机器人建模247
在 Gazebo 中进行仿真 255
小结 261
第17章 添加你自己的移动机器人:第二部分 262
验证坐标变换信息 262
添加激光传感器 266
配置导航程序栈 270
使用 rviz 定位和控制导航中的机器人 275
小结 278
第18章 添加你自己的机械臂 279
猎豹机械臂 279
ROS 消息接口 281
硬件驱动 282
对机器人建模:使用 URDF 282
在 Gazebo 中进行仿真 287
验证坐标变换信息 294
配置 MoveIt 297
使用 rviz 控制机械臂 301
小结 303
第19章 添加软件库 305
让你的机器人开口说话:使用 pyttsx305
小结 312
第五部分 ROS使用小知识
第20章 ROS小工具 315
主机及其相关组件:roscore315
参数管理:rosparam 316
文件系统导航:roscd 317
节点启动:rosrun 318
多节点启动:roslaunch 318
多节点系统测试:rostest 321
系统监控:rosnode、rostopic、rosmsg、rosservice和rossrv 324
小结 327
第21章 机器人行为调试 329
日志消息: /rosout和rqt_console 329
节点、话题和连接:rqt_graph和rosnode 336
传感器融合: 使用 rviz 343
绘制数据图表:使用 rqt_plot 344
数据记录和分析: 使用rosbag和rqt_bag 346
小结 350
第22章 ROS在线社区 351
社区的礼仪 351
ROS 维基 352
ROS Answers: 一个 ROS 问答社区 353
bug 追踪与新特性请求 354
邮件列表与ROS兴趣小组 354
查找和分享代码 354
小结 355
第23章 用C++编写ROS程序 356
C++(或其他语言)的使用场景 356
使用catkin编译C++ 357
在Python和C++之间来回移植程序 359
小结 364
---------------------------ROS机器人高效编程(原书第3版)---------------------------
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第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
---------------------------ROS机器人程序设计(原书第2版)---------------------------
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第1章 ROS Hydro系统入门 1
1.1 PC安装教程 3
1.2 使用软件库安装ROS Hydro 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 创建虚拟机 8
1.4 在BeagleBone Black上安装ROS Hydro 11
1.4.1 准备工作 12
1.4.2 配置主机和source.list文件 13
1.4.3 设置密钥 14
1.4.4 安装ROS功能包 14
1.4.5 初始化rosdep 15
1.4.6 在BeagleBone Black中配置环境 15
1.4.7 在BeagleBone Black中安装rosinstall 15
1.5 本章小结 15
第2章 ROS系统架构及概念 16
2.1 理解ROS文件系统级 16
2.1.1 工作空间 17
2.1.2 功能包 18
2.1.3 综合功能包 19
2.1.4 消息 20
2.1.5 服务 21
2.2 理解ROS计算图级 22
2.2.1 节点与nodelet 23
2.2.2 主题 24
2.2.3 服务 25
2.2.4 消息 26
2.2.5 消息记录包 26
2.2.6 节点管理器 26
2.2.7 参数服务器 27
2.3 理解ROS开源社区级 27
2.4 ROS系统试用练习 28
2.4.1 ROS文件系统导览 28
2.4.2 创建工作空间 29
2.4.3 创建ROS功能包和综合功能包 30
2.4.4 编译ROS功能包 30
2.4.5 使用ROS节点 31
2.4.6 如何使用主题与节点交互 33
2.4.7 如何使用服务 36
2.4.8 使用参数服务器 38
2.4.9 创建节点 38
2.4.10 编译节点 41
2.4.11 创建msg和srv文件 42
2.4.12 使用新建的srv和msg文件 44
2.4.13 启动文件 48
2.4.14 动态参数 50
2.5 本章小结 54
第3章 可视化和调试工具 55
3.1 调试ROS节点 57
3.1.1 使用gdb调试器调试ROS节点 57
3.1.2 ROS节点启动时调用gdb调试器 58
3.1.3 ROS节点启动时调用valgrind分析节点 59
3.1.4 设置ROS节点core文件转储 59
3.2 日志信息 59
3.2.1 输出日志信息 59
3.2.2 设置调试信息级别 60
3.2.3 为特定节点配置调试信息级别 61
3.2.4 信息命名 62
3.2.5 按条件显示信息与过滤信息 62
3.2.6 显示信息的方式——单次、可调、组合 63
3.2.7 使用rqt_console和rqt_logger_level在运行时修改调试级别 63
3.3 检测系统状态 66
3.3.1 检测节点、主题、服务和参数 67
3.3.2 使用rqt_graph在线检测节点状态图 70
3.4 设置动态参数 71
3.5 当出现异常状况时使用 roswtf 72
3.6 可视化节点诊断 74
3.7 绘制标量数据图 75
3.8 图像可视化 77
3.9 3D可视化 79
3.9.1 使用rqt_rviz在3D世界中实现数据可视化 79
3.9.2 主题与坐标系的关系 82
3.9.3 可视化坐标变换 82
3.10 保存与回放数据 83
3.10.1 什么是消息记录包文件 84
3.10.2 使用rosbag在消息记录包中记录数据 84
3.10.3 回放消息记录包文件 85
3.10.4 检查消息记录包文件的主题和消息 86
3.11 应用rqt与rqt_gui插件 88
3.12 本章小结 88
第4章 在ROS下使用传感器和执行器 90
4.1 使用游戏杆或游戏手柄 90
4.1.1 joy_node如何发送游戏杆动作消息 91
4.1.2 使用游戏杆数据在turtlesim中移动海龟 92
4.2 使用激光雷达——Hokuyo URG-04lx 95
4.2.1 了解激光雷达如何在ROS中发送数据 96
4.2.2 访问和修改激光雷达数据 98
4.3 使用Kinect传感器查看3D环境中的对象 100
4.3.1 如何发送和查看Kinect数据 101
4.3.2 创建使用Kinect的示例 102
4.4 使用伺服电动机——Dynamixel 104
4.5 使用Arduino添加更多的传感器和
执行器 107
4.6 在Arduino上使用超声波传感器 111
4.7 距离传感器如何发送消息 113
4.7.1 创建使用超声波的示例 113
4.7.2 Xsens如何在ROS中发送数据 116
4.7.3 创建使用Xsens的示例 116
4.8 使用10自由度低成本惯性测量模组IMU 118
4.8.1 下载加速度传感器库 119
4.8.2 Arduino Nano和10自由度传感器编程 120
4.8.3 创建ROS节点以使用10自由度传感器数据 121
4.9 GPS的使用 123
4.9.1 GPS如何发送信息 125
4.9.2 创建一个使用GPS的工程实例 126
4.10 本章小结 127
第5章 计算机视觉 128
5.1 连接和运行摄像头 129
5.1.1 FireWire IEEE1394摄像头 129
5.1.2 USB摄像头 133
5.2 使用OpenCV制作USB摄像头 驱动程序 134
5.2.1 通过cv_bridge使用OpenCV处理ROS图像 139
5.2.2 使用image transport发布图像 139
5.2.3 在ROS中使用OpenCV 140
5.2.4 显示摄像头输入的图像 140
5.3 标定摄像头 141
5.4 ROS图像管道 148
5.5 计算机视觉任务中有用的ROS功能包 152
5.6 使用viso2实现视觉里程计 153
5.6.1 摄像头位姿标定 154
5.6.2 运行viso2在线演示 157
5.6.3 使用低成本双目摄像头运行viso2 159
5.7 使用RGBD深度摄像头实现视觉里程计 160
5.7.1 安装fovis 160
5.7.2 用Kinect RGBD深度摄像头运行fovis 160
5.8 计算两幅图像的单应性 161
5.9 本章小结 162
第6章 点云 163
6.1 理解点云库 163
6.1.1 不同的点云类型 164
6.1.2 PCL中的算法 164
6.1.3 ROS的PCL接口 165
6.2 我的第一个PCL程序 166
6.2.1 创建点云 167
6.2.2 加载和保存点云到硬盘 170
6.2.3 可视化点云 173
6.2.4 滤波和缩减采样 176
6.2.5 配准与匹配 181
6.2.6 点云分区 184
6.3 分割 187
6.4 本章小结 191
第7章 3D建模与仿真 192
7.1 在ROS中自定义机器人的3D模型 192
7.2 创建第一个URDF文件 192
7.2.1 解释文件格式 194
7.2.2 在rviz里查看3D模型 195
7.2.3 加载网格到机器人模型 197
7.2.4 使机器人模型运动 198
7.2.5 物理属性和碰撞属性 198
7.3 xacro——一个更好的机器人建模方法 199
7.3.1 使用常量 199
7.3.2 使用数学方法 200
7.3.3 使用宏 200
7.3.4 使用代码移动机器人 201
7.3.5 使用SketchUp进行3D建模 204
7.4 在ROS中仿真 205
7.4.1 在Gazebo中使用URDF 3D模型 206
7.4.2 在Gazebo中添加传感器 208
7.4.3 在Gazebo中加载和使用地图 211
7.4.4 在Gazebo中移动机器人 213
7.5 本章小结 215
第8章 导航功能包集入门 216
8.1 ROS导航功能包集 216
8.2 创建变换 217
8.2.1 创建广播机构 218
8.2.2 创建侦听器 218
8.2.3 查看坐标变换树 221
8.3 发布传感器信息 221
8.4 发布里程数据信息 224
8.4.1 Gazebo如何获取里程数据 225
8.4.2 创建自定义里程数据 228
8.5 创建基础控制器 232
8.5.1 使用Gazebo创建里程数据 233
8.5.2 创建自己的基础控制器 235
8.6 使用ROS创建地图 237
8.6.1 使用map_server保存地图 238
8.6.2 使用map_server加载地图 239
8.7 本章小结 240
第9章 导航功能包集进阶 241
9.1 创建功能包 241
9.2 创建机器人配置 241
9.3 配置全局和局部代价地图 243
9.3.1 基本参数的配置 244
9.3.2 全局代价地图的配置 245
9.3.3 局部代价地图的配置 245
9.3.4 基本局部规划器配置 246
9.4 为导航功能包集创建启动文件 247
9.5 为导航功能包集设置rviz 248
9.5.1 2D位姿估计 248
9.5.2 2D导航目标 249
9.5.3 静态地图 249
9.5.4 粒子云 251
9.5.5 机器人占地空间 251
9.5.6 局部代价地图 252
9.5.7 全局代价地图 252
9.5.8 全局规划 254
9.5.9 局部规划 254
9.5.10 规划器规划 254
9.5.11 当前目标 255
9.6 自适应蒙特卡罗定位 256
9.7 使用rqt_reconfigure修改参数 258
9.8 机器人避障 259
9.9 发送目标 260
9.10 本章小结 262
第10章 使用MoveIt! 264
10.1 MoveIt!体系结构 264
10.1.1 运动规划 265
10.1.2 规划场景 267
10.1.3 运动学 268
10.1.4 碰撞检测 268
10.2 在MoveIt!中集成一个机械臂 268
10.2.1 工具箱里有什么 268
10.2.2 使用设置助手生成一个MoveIt!包 269
10.2.3 集成到rviz 273
10.2.4 集成到Gazebo或实际机器人的手臂 276
10.3 简单的运动规划 277
10.3.1 规划单个目标 278
10.3.2 规划一个随机目标 278
10.3.3 规划预定义的群组状态 280
10.3.4 显示目标的运动 280
10.4 考虑碰撞的运动规划 280
10.4.1 将对象添加到规划场景中 281
10.4.2 从规划的场景中删除对象 282
10.4.3 应用点云进行运动规划 283
10.5 抓取和放置任务 284
10.5.1 规划的场景 285
10.5.2 感知 288
10.5.3 抓取 288
10.5.4 抓取操作 290
10.5.5 放置操作 292
10.5.6 演示模式 295
10.5.7 在Gazebo中仿真 295
10.6 本章小结 296
译者序
---------------------------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,感谢您的来信与指正。
---------------------------ROS机器人编程实践---------------------------
.
作为一群半宿半夜加班调Bug 的码农,工作这么繁重,为什么愿意花时间来翻译这本书呢?简言之,有三方面原因。第一是ROS 很重要,在无人驾驶领域,几乎所有团队都在用;第二是长期以来ROS 社区优秀的分享和回馈氛围,让我们非常愿意为ROS 的推广做贡献;第三是这本书本身由开源机器人基金会创始人Morgan Quigley 和Brian Gerkey 撰写,写作质量非常高,吴恩达教授推荐,这三人也是我们现实中的好友。
经历了十年发展,ROS 已经从原来的小众玩物,成长为全世界机器人技术研发过程中的中坚支撑。无论是室内小型教育机器人,还是大型矿山机械,ROS 都可以让开发都短时间上手,开发出自己期望的产品原型,并不断演进迭代。作为耕耘多年的专家,Morgan和Brian 一直以来都致力于推进ROS 社区发展,他们的贡献得到了大家的认可。
如今他们将技术落实为本书,大纲的设计既照顾了初学者,也照顾了资深技术人员,内容不但包括ROS 关键理念、工具和模式,还包括感知、定位、导航等更加深入的机器人学内容,而且好多代码由Python 实现,使得本书成为不可多得的参考工具书。
能够参与本书的翻译工作是我们的荣幸,也希望能够为ROS 的推广和运用尽到微薄之力。
译者
2017 年9 月
---------------------------ROS机器人高效编程(原书第3版)---------------------------
机器人的时代已经到来!机器人正在变得越来越灵活、智能。机器人已经从传统的工业应用开始加速进入千家万户,正从方方面面改变着人们的工作和生活,例如,扫地机器人能在清扫过程中自主绘制室内地图并智能规划路径,京东的包裹小车已经开始在校园中穿梭并投身到快递服务的行业中,这样的智能机器人已经越来越多。
那么智能机器人的程序究竟是如何设计出来的呢?
智能机器人需要具备强健的“肢”、明亮的“眼”、灵巧的“嘴”以及聪慧的“脑”,这一切的实现实际上涉及诸多技术领域,需要艰辛的设计、开发与调试过程,必然会遇到棘手的问题和挑战。而一个小型的开发团队难以完成机器人各个方面的开发工作,因而需要一套合作开发的框架与模式,这样就能够快速集成已有的功能,省却重复劳动的时间。早在2008年,我们在与澳大利亚的布劳恩教授交流时,就得知他们开发了一套商业化的“RoBIOS”机器人操作系统,这套系统对一些常用的机器人底层功能进行了封装,可极大简化高级功能的开发。据他们介绍,这是最早的“机器人操作系统”,但由于产品不开源且价格昂贵,我们最终未能一试为快。后来在网络中不断地寻觅,最终发现了ROS,由于其开源、开放的特性,一下子就引起了我们极大的兴趣。
我们于2010年建立了易科机器人QQ群进行讨论,从而结识了国内最早期的一些机器人研究者和ROS探索者。由于早期相关资料非常匮乏,我们于2012年创建了博客(blog.exbot.net)用于进行技术分享与交流,我们的队伍也在不断发展壮大。易科机器人开发组成员在此期间贡献了大量的教程和开发笔记,在此向他们的无私奉献表示感谢与敬意!近年来,随着机器人的迅猛发展,ROS得到了更为广泛的使用,国内也出现了一些优秀的项目,包括“星火计划”ROS公开课(blog.exbot.net/spark)、“HandsFree”ROS机器人开发平台(wiki.exbot.net)等。
出版界近年来也是硕果累累,本书第1版便是国内第一本ROS译著,由于实用性强,已经多次重印。第2版补充了点云和MoveIt!方面的内容。第3版则对ROS版本进行了升级,采用目前ROS最新长期支持的版本Kinetic进行介绍;并针对ROS的最新进展,继续完善,增加了Docker和设计开发真实机器人的示例;同时对章节结构进行了调整。第3版涵盖了使用ROS进行机器人编程的最新知识与方法,通过ROS编程实践能够帮助你理解机器人系统设计与应用的现实问题。在机器人开发实践中,我们认为除了成功的喜悦外,还应看到机器人学目前所处的发展阶段:核心技术尚未成熟、诸多功能尚不完备、bug多……但我们相信,有了ROS的开源精神和日益完善的合作开发框架,很多问题会逐步迎刃而解。唯一迫切需要的就是,期待你加入到机器人的设计、开发和研究中来,一起推动开源机器人技术的发展与普及。
本书第3版与第2版的重叠部分主要沿用了第2版中的翻译,个别词汇根据习惯进行了修改。具体来说,张瑞雷对书中内容进行梳理补充,刘锦涛对全书进行了修改润色和统稿整理。
我们将会在books.exbot.net发布本书的其他相关资源。
作为一群半宿半夜加班调Bug 的码农,工作这么繁重,为什么愿意花时间来翻译这本书呢?简言之,有三方面原因。第一是ROS 很重要,在无人驾驶领域,几乎所有团队都在用;第二是长期以来ROS 社区优秀的分享和回馈氛围,让我们非常愿意为ROS 的推广做贡献;第三是这本书本身由开源机器人基金会创始人Morgan Quigley 和Brian Gerkey 撰写,写作质量非常高,吴恩达教授推荐,这三人也是我们现实中的好友。
经历了十年发展,ROS 已经从原来的小众玩物,成长为全世界机器人技术研发过程中的中坚支撑。无论是室内小型教育机器人,还是大型矿山机械,ROS 都可以让开发都短时间上手,开发出自己期望的产品原型,并不断演进迭代。作为耕耘多年的专家,Morgan和Brian 一直以来都致力于推进ROS 社区发展,他们的贡献得到了大家的认可。
如今他们将技术落实为本书,大纲的设计既照顾了初学者,也照顾了资深技术人员,内容不但包括ROS 关键理念、工具和模式,还包括感知、定位、导航等更加深入的机器人学内容,而且好多代码由Python 实现,使得本书成为不可多得的参考工具书。
能够参与本书的翻译工作是我们的荣幸,也希望能够为ROS 的推广和运用尽到微薄之力。
译者
2017 年9 月
---------------------------ROS机器人高效编程(原书第3版)---------------------------
机器人的时代已经到来!机器人正在变得越来越灵活、智能。机器人已经从传统的工业应用开始加速进入千家万户,正从方方面面改变着人们的工作和生活,例如,扫地机器人能在清扫过程中自主绘制室内地图并智能规划路径,京东的包裹小车已经开始在校园中穿梭并投身到快递服务的行业中,这样的智能机器人已经越来越多。
那么智能机器人的程序究竟是如何设计出来的呢?
智能机器人需要具备强健的“肢”、明亮的“眼”、灵巧的“嘴”以及聪慧的“脑”,这一切的实现实际上涉及诸多技术领域,需要艰辛的设计、开发与调试过程,必然会遇到棘手的问题和挑战。而一个小型的开发团队难以完成机器人各个方面的开发工作,因而需要一套合作开发的框架与模式,这样就能够快速集成已有的功能,省却重复劳动的时间。早在2008年,我们在与澳大利亚的布劳恩教授交流时,就得知他们开发了一套商业化的“RoBIOS”机器人操作系统,这套系统对一些常用的机器人底层功能进行了封装,可极大简化高级功能的开发。据他们介绍,这是最早的“机器人操作系统”,但由于产品不开源且价格昂贵,我们最终未能一试为快。后来在网络中不断地寻觅,最终发现了ROS,由于其开源、开放的特性,一下子就引起了我们极大的兴趣。
我们于2010年建立了易科机器人QQ群进行讨论,从而结识了国内最早期的一些机器人研究者和ROS探索者。由于早期相关资料非常匮乏,我们于2012年创建了博客(blog.exbot.net)用于进行技术分享与交流,我们的队伍也在不断发展壮大。易科机器人开发组成员在此期间贡献了大量的教程和开发笔记,在此向他们的无私奉献表示感谢与敬意!近年来,随着机器人的迅猛发展,ROS得到了更为广泛的使用,国内也出现了一些优秀的项目,包括“星火计划”ROS公开课(blog.exbot.net/spark)、“HandsFree”ROS机器人开发平台(wiki.exbot.net)等。
出版界近年来也是硕果累累,本书第1版便是国内第一本ROS译著,由于实用性强,已经多次重印。第2版补充了点云和MoveIt!方面的内容。第3版则对ROS版本进行了升级,采用目前ROS最新长期支持的版本Kinetic进行介绍;并针对ROS的最新进展,继续完善,增加了Docker和设计开发真实机器人的示例;同时对章节结构进行了调整。第3版涵盖了使用ROS进行机器人编程的最新知识与方法,通过ROS编程实践能够帮助你理解机器人系统设计与应用的现实问题。在机器人开发实践中,我们认为除了成功的喜悦外,还应看到机器人学目前所处的发展阶段:核心技术尚未成熟、诸多功能尚不完备、bug多……但我们相信,有了ROS的开源精神和日益完善的合作开发框架,很多问题会逐步迎刃而解。唯一迫切需要的就是,期待你加入到机器人的设计、开发和研究中来,一起推动开源机器人技术的发展与普及。
本书第3版与第2版的重叠部分主要沿用了第2版中的翻译,个别词汇根据习惯进行了修改。具体来说,张瑞雷对书中内容进行梳理补充,刘锦涛对全书进行了修改润色和统稿整理。
我们将会在books.exbot.net发布本书的其他相关资源。
前言
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
机器人操作系统(Robot Operating System,ROS),是目前最流行的机器人学中间件,在全世界诸多大学和与机器人相关的行业中得到了广泛应用。自从ROS推出以来,许许多多搭载了ROS的机器人进入市场,用户能够通过其应用程序轻松使用这些机器人。ROS的一个主要特点是它的开源特性。ROS不需要用户重新发明“轮子”;相反,ROS中标准化的机器人操作和应用程序开发十分简单。
本书全面更新和修订了第1版,将介绍更新的ROS功能包、更引人入胜的项目案例以及一些新增特性。本书中的项目案例均基于ROS Melodic Morenia,对应的Ubuntu版本为Ubuntu Bionic 18.04。
通过本书,读者将理解机器人是怎样应用于各行各业的,并将一步步地了解构建异构机器人解决方案的流程与步骤。除了介绍ROS中的服务调用和动作特性之外,本书还将介绍一些更酷的技术,让机器人以智能的方式处理复杂的任务。这些知识将为读者构建更智能、更具自主化能力的机器人铺平道路。此外,我们还将介绍ROS-2,以便读者能够了解此版本与以前的ROS版本之间的差异,并在为应用程序选择特定中间件方面提供帮助。
企业和研究机构主要关注计算机视觉和自然语言处理领域。虽然本书的第1版介绍了一些简单的视觉应用程序,如物体检测和人脸跟踪,但本版还将介绍行业中使用最广泛的智能扬声器平台之一——亚马逊的Alexa,以及如何使用它控制机器人。同时,我们将引入新的硬件,如NVIDIA Jetson Nano、华硕Tinkerboard和BeagleBone Black,并探索它们与ROS融合应用的能力。
虽然人们可能知道如何控制单台机器人,但ROS社区用户面临的最常见问题之一是使用多个机器人协同工作,无论它们是否属于同一类型。在这种情况下,控制问题将变得十分复杂,因为机器人可能遵循相似的话题名称,并可能导致操作序列的混乱。本书将重点针对可能的冲突提出相应的解决方案。
本书还涉及强化学习,包括如何将强化学习应用于机器人学和ROS之中。此外,读者还将发现其他更有趣的项目,如构建自动驾驶汽车、使用ROS进行深度学习,以及使用虚拟现实头盔(VR头盔)和Leap Motion(一种体感控制器)构建遥操作解决方案。目前这些领域的技术还处于发展之中,相应的研究人员正在不断地进行研究。
读者对象
本书主要面向学生、机器人技术爱好者、相关领域的专业人员。此外,本书还适用于那些对从头开始学习和编写运动控制与传感器感知程序、算法感兴趣的人。本书甚至可能有助于初创企业开发新产品,或帮助研究人员利用现有资源创造新的创新成果。本书也适用于那些想在软件领域工作或成为机器人软件工程师的人。
本书主要内容
第1章主要向初学者概述ROS的基础知识。本章将帮助读者理解ROS软件框架的基本思想和概念。
第2章介绍ROS的最新框架——ROS-2。基于该框架,读者将能够使用ROS进行实时应用程序的开发。本章的结构与第1章类似,主要是帮助读者厘清ROS-1与ROS-2之间的区别,同时理解两个版本的能力与局限。
第3章介绍怎样在模拟环境下构建移动机器人以及机械臂,并将两者结合起来,通过ROS 对其进行控制。
第4章介绍基于状态机进行复杂机器人任务处理的技术,这些技术使得读者可以在使用机器人执行连续和复杂的任务管理时进行策略调整。
第5章是第3章、第4章内容的综合应用,基于这两章内容构建一个用户应用程序。该应用程序的功能是控制移动机械臂运送物品。本章将详细介绍上述应用程序的构建过程。
. 第6章介绍通过ROS在多个机器人间进行通信的方法,其中的机器人既可以是同类型的,也可以是不同类型的(即异构多机器人系统)。在此基础上,还将介绍对一组多机器人进行单独或同时控制的方法。
第7章介绍新型的嵌入式控制器及处理器板,例如基于STM32的控制器、Tinkerboard、Jetson Nano以及其他类似产品。本章还将介绍怎样通过ROS控制这些板卡的GPIO(General-Purpose Input/Output,通用输入/输出接口),以及如何通过Alexa提供的语音交互功能进行语音控制。
第8章介绍机器人学领域最重要的学习技术之一——强化学习。本章将介绍强化学习的内涵,并通过实例介绍强化学习背后的数学知识。此外,还将通过一系列实例展示强化学习技术是如何在ROS中进行应用的。
第9章介绍深度学习在机器人领域的应用。本章将介绍如何使用深度学习实现图像识别,还将介绍使用SVM(Support Vector Machine,支持向量机)的应用程序。
第10章是本书中最有趣的内容之一。本章将展示如何使用ROS和Gazebo构建一辆模拟的自动驾驶汽车。
第11章展示如何通过VR头盔和体感控制器Leap Motion实现对机器人的远程操控。本章将介绍VR头盔的应用,这是当前最流行的技术之一。
第12章通过一个项目展示如何在ROS下使用OpenCV库。在本项目中,将构建一个最基本的人脸跟踪器,实现摄像头对人脸的实时跟踪。本章将使用诸如Dynamixel的智能伺服系统实现机器人的旋转。
充分利用本书
读者需要一台运行Linux系统(最佳版本为Ubuntu 18.04)的个人计算机。
个人计算机配置需求为:具有显卡,内存不小于4GB(8GB更佳)。这主要是为了更好地运行Gazebo,也是为了更好地进行点云和计算机视觉处理。
读者最好能够拥有书中提到的传感器、执行器以及I/O板,并且能够将这些硬件连接到自己的计算机上,同时为了能够复制相关代码,读者需要安装Git。
如果读者使用Windows系统,则推荐下载VirtualBox,并在其中安装和配置Ubuntu。不过,需要提醒的一点是,在虚拟机中运行ROS相关程序、连接某些硬件时可能存在某些问题。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
下载完成后,读者可以将代码压缩包解压到本地(请确保已经安装了解压缩软件),具体操作系统的相应解压缩软件如下:
Windows下为WinRAR/7-Zip。
Mac下为Zipeg/iZip/UnRarX。
Linux下为7-Zip/PeaZip。
此外,读者还可以通过GitHub下载本书代码,网址为:
https://github.com/PacktPublishing/ROS-Robotics-Projects-SecondEdition
如果代码有所更新,则上述网址相应的仓库代码也会进行更新。
本书约定
代码段示例:
输入或输出命令行示例:
表示警告或重要的说明。
表示提示和技巧。
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
学习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 2及最新发行版TurtleBot 3)的操作和控制。如果读者没有这款机器人,那么可以在Gazebo模拟环境下使用模拟的TurtleBot机器人来学习该章的内容。读者可以通过ROS命令、Python脚本程序等多种方法实现对TurtleBot机器人的操控。此外,该章还讲述了使用rqt工具及其插件对TurtleBot进行控制以及对其传感器数据进行监测的方法。
第4章探讨视觉传感器以及机器人创建周围环境地图的相关内容,不仅论述了可用作TurtleBot视觉系统的3D传感器,而且介绍了如何在ROS下进行设置与操作,使得机器人具备自主导航能力。在TurtleBot机器人导航模块中,应用了同步定位与地图创建技术。
第5章对复杂的机器人手臂进行简要介绍。采用Xacro的宏语言设计并构建了一个模拟的机器人手臂。为了操作机器人手臂,在Gazebo环境下创建了相应的控制器。通过控制器的创建,论述了简单的机器人手臂的结构和物理学的相关内容。
第6章对复杂的机器人手臂控制进行进一步的探讨,对最新型的Baxter机器人进行了介绍,并提供了一个开源的Baxter机器人模拟器,这也是本书中介绍的第二款机器人。Baxter机器人有两个7自由度的手臂以及其他一系列的传感器。该章通过实例的形式,分别在位置控制模式、速度控制模式与扭矩控制模式下,对机器人手臂的正向与反向运动控制进行了介绍。此外,该章还对一个非常有用的ROS工具MoveIt!进行了介绍,MoveIt!既可以对模拟的Baxter机器人手臂进行运动规划的仿真和执行,也可以对真实的Baxter机器人手臂进行运动规划的仿真和执行。
第7章对无人机进行论述。该章主要讲解四旋翼硬件与飞行控制的概念,以及四旋翼模拟器Hector的下载与控制。通过对模拟四旋翼飞行操控的练习,使得读者能够操控真实的四旋翼,如Bitcraze的Crazyflie或者Parrot的Bebop。对四旋翼的控制可以通过遥控或者ROS的话题/消息命令实现。
第8章描述一系列可以用来对支持ROS的机器人进行控制的外部设备。操纵杆控制器、控制器开发板(Arduino和树莓派)以及所有具有ROS接口的移动设备均可以集成到读者的机器人系统之中,以实现对机器人更多的外部控制。
第9章对前面章节所介绍的多个ROS组件与概念进行组合,实现一个十分具有挑战性的任务:自主飞行。在该任务中,读者将控制Crazyflie在采用Kinect 3D传感器构建的地图下自动飞往一个“远方”的目标。这一任务的实现采用了ROS的消息通信机制与协同传输,从而得到四旋翼上Kinect的视野以及目标相对于四旋翼的位置,进而对飞行进行精密的规划。在此基础上,将采用了PID控制的Crazyflie的飞行控制软件作为飞行任务中的飞行控制模块,从而实现了四旋翼的自主飞行。
第10章介绍使用MATLAB及其机器人系统工具箱(Robotics System Toolbox)进行机器人通信与控制的一种新机制。用第6章中介绍过的双臂机器人Baxter来展示在MATLAB中进行ROS机器人通信与控制设置的流程,主要通过在机器人系统工具箱中添加传统消息的方法实现。对机器人手臂的通信与控制使用MATLAB脚本与ROS命令实现。
学习本书所需的知识与设备
本书给出各项任务的步骤和指令,以便读者参与其中具体实操。读者所需要的是一台安装了Ubuntu 16.04(Xenial Xerus)的电脑。同时,支持其他版本的Ubuntu以及Linux发行版,并支持macOS、Android和Windows,不过需要参考ROS wiki的文档(http://wiki.ros.org/Kinetic/Installation)。
本书中所用的ROS版本为Kinetic Kame,该版本是目前推荐的稳定发行版,对该版本的支持将持续到2021年4月。
书中所有的软件都是开源的,可以免费获取和使用。在对软件进行介绍时会提供相关的下载说明。本书的第1章给出了下载和设置ROS软件环境的相应指令。
下载软件时,我们推荐使用Debian软件包。当没有相应的Debian包时,推荐从GitHub软件发行库中下载。
Gazebo模拟器提供了增强的图形化处理功能,推荐使用专用显卡进行操作,但并不是必需的。
涉及的外部设备主要包括3D传感器、Xbox或PS3控制器、Arduino或树莓派控制板、Android移动设备等。
本书的目标读者
本书主要面向机器人开发人员,无论是业余爱好者还是相关研究人员,无论是专业人士还是对ROS感兴趣的人,本书都能满足需求,如果读者具备GNU/Linux系统和Python语言的相关知识会更好。
样式约定
本书对于不同类型的信息,采用了不同的印刷格式。下面是各类印刷格式的示例及说明。
文中的目录名、文件名、文件扩展名以及文件路径名的印刷格式均为代码体。
代码格式如下所示:
为了避免在介绍新代码时重复显示已经展示过的代码,已经展示过的代码会以省略号表示,同时新的代码会加粗显示,如下所示:
用以输入的命令行如下所示:
指令的相应输出如下所示:
新术语以及关键字的字体为黑体。
警告与重要提示。
小贴士和小技巧。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
---------------------------ROS机器人编程:原理与应用---------------------------
ROS(Robot Operating System,机器人操作系统)正在成为现代机器人学的实际标准编程方法。ROS wiki(https://www.ros.org/history/)写道:
ROS生态系统现在由全世界数以万计的用户组成,覆盖了从桌面爱好项目到大型工业自动化系统。
为什么是ROS?在1956年,Joseph Engelberger创立了Unimation公司,世界上第一个机器人公司[7]。然而,在过去的半个世纪里,机器人技术的进步令人失望。世界范围内的机器人学研究也仅限于实验室里的演示和探奇。这一领域的新生研究人员通常一无所有,从头开始构建新型机器人,解决执行器和传感器接口的问题,构建底层的伺服控制,并且通常在实现更高级的机器人能力之前就已经精疲力竭了,而这些自定义的机器人和软件很少被复用于后续工作。
人们认识到采用构建巴比塔的模式是徒劳的,构建更智能的机器人的任务需要持续的、协作的努力,并建立在能够不断达到更高层能力的基础上。在1984年,Vincent Hayward和Richard Paul引入了机器人控制C库(Robot Control C Library, RCCL)[15]作为解决这一长期问题的方法。不幸的是,RCCL没有获得机器人研究人员足够的认可。National Instruments[24]和Microsoft[39-40]均引入了试图使机器人编程标准化的产品。然而,研究人员发现这些方法烦琐而昂贵。
ROS于2007年由斯坦福人工智能实验室发起[26],它试图统一零碎的谷歌所采用的机器人学方法,且于2008年至2013年得到Willow Garage的支持[12],随后自2013年至今得到谷歌开源机器人基金会(Open Source Robotics Foundation,OSRF)的支持[10]。ROS方法遵循了开源软件和分布式协作的现代方法。此外,它桥接和提升了其他并行的开源工作,包括OpenCV[28]、PointCloudLibrary[21]、Open Dynamics Engine[8]、Gazebo[19]和Eigen[20]。对于研究人员而言,ROS在开放性和易用性方面可能与RCCL相似,而谷歌持续七年的支持是ROS存活的关键。
ROS现在在学术界、工业界和研究机构中得到了全世界的广泛使用。开发人员提供了数以千计的软件包,包括来自一些世界领先的专家在相关领域的解决方案。新的机器人公司在它们的产品上提供了ROS接口,并且已建立的工业机器人公司也引入了ROS接口。随着广泛采用ROS作为机器人编程实际标准的做法,人们对提高机器人的能力有了新的希望。在最近的DARPA机器人挑战赛中,大多数入围的团队使用了ROS。新型自动驾驶汽车的开发商正在开发ROS。新的机器人公司正在崛起,这部分是由ROS资源驱动的。鉴于ROS的势头和功绩,显而易见,当今的机器人工程师必须精通ROS编程。
什么是ROS?将其称为“机器人操作系统”并不全面。简洁地定义ROS很困难,因为它包含了很多方面,包括:编程风格(特别是依赖于松散耦合的分布式节点),节点间通信的接口定义和范例,库和包合并的接口定义,可视化、调试、数据记录和系统诊断的工具集合,共享源代码的存储仓库,桥接多个有用的、独立的开源库的桥梁。因此,ROS是机器人程序员的一种生活方式,而不只是一种简单的操作系统。ROS的定义可以参考ROS wiki(https://wiki.ros.org/ROS/Introduction):
ROS是一个针对机器人的开源、元级操作系统。它提供了用户在操作系统上所期望的服务,包括硬件抽象、低层设备控制、常用功能的实现、进程之间的消息传递以及包管理。它还提供了在多台计算机上获取、生成、编写以及运行代码的工具和库。
ROS的主要目标是支持机器人研究和开发中的代码复用。ROS是一个分布式的进程(也称节点)框架,它能使可执行的文件单独设计以及在运行时松散耦合。这些进程可以打包成易于共享和分发的包。ROS还支持一个代码库的联合系统,能够同时分发协作。从文件系统级到社区级的这个设计实现了开发和部署的独立决策,但所有这些都可以与ROS的基础底层工具一起使用。
Brian Gerkey在网上的评论(https://answers.ros.org/question/12230/what-is-ros-exactly-middleware-framework-operating-system/)如下。
我是这样解释ROS的:
1.?管道:ROS提供了发布-订阅消息传递基础结构,旨在支持分布式计算系统的快速、轻松构建。
2.?工具:ROS提供了一套广泛用于配置、启动、反思、调试、可视化、记录、测试和停止的分布式计算系统的工具。
3.?功能:聚焦于移动性、操作性和感知性,ROS提供了实现机器人有用的功能的广泛库集。
4.?生态系统:ROS拥有规模庞大的社区支持,并通过着力聚焦于集成和文档而不断改进。ros.org是一个一站式的站点,在这里可以查找和了解来自世界各地开发者的成千上万个可用ROS包。
来自参考文献[13]对ROS的解释如下:
ROS(发音Ross[rs])的主要目标是提供一个统一的开源编程框架,用于在各种真实世界和仿真环境中控制机器人。
来自参考文献[13]中的ROS管道:
ROS中的核心实体称为节点。节点通常是用Python或C++编写的小程序,用于执行一些相对简单的任务或过程。节点可以相互独立地启动和停止,并通过传递消息进行通信。节点可以在某些主题上发布消息或向其他节点提供服务。
例如,发布器节点可能会报告从连接到机器人微控制器的传感器传来的数据。/head-sonar主题上数值为0.5的消息意味着传感器当前检测的物体有0.5 m远。任何想从这个传感器知晓读数的节点只需订阅/head-sonar主题即可。为了使用这些值,订阅器节点定义了一个回调函数,每当新消息到达订阅的主题时它就会执行。这种情况发生的频率取决于发布器节点更新其消息的速率。
节点还可以定义一个或多个服务。当从另一个节点发送请求时,ROS服务会产生某个行为或发送应答。一个简单的例子就是打开或关闭LED的服务。一个更复杂的例子是,当给定一个目标位置和机器人的初始位姿时,返回一个移动机器人导航规划的服务。
学习ROS的方法:ROS有很多功能、工具、风格和习惯。ROS的学习曲线陡峭,因为在富有成效地使用它之前需要掌握很多细节。ROS wiki有文档和一系列教程的链接。然而,这些对于ROS的初学者而言可能很难遵循,因为定义是分散的,并且所呈现的细节水平千差万别,从未经说明的示例到面向复杂用户的解释。本书的目的是从简单的代码示例以及相应的操作理论层面向读者介绍ROS的基本组件。这种介绍只会触及表面,但应该能让读者开始建立有用的ROS节点,并使教程变得更可读。
ROS代码可以用C++或Python编写。本书仅使用C++。对于Python,读者可参考《ROS机器人编程实践》(中文版已出版,ISBN:978-7-111-58529-9)[34]。
本书配套的代码示例假定采用Linux Ubuntu 14.04和ROS Indigo。如果你使用PC运行Windows或使用Mac运行OSX,则一个选择是安装VirtualBox来设置虚拟Linux计算机,以便在不影响原操作系统的情况下运行。关于安装VirtualBox、Ubuntu、ROS以及附带的代码示例和工具,包括在https://github.com/wsnewman/learning_ros的子目录additional_documents中。(该目录还包括使用git的入门指南。)
配置计算机来使用ROS可能是一个挑战。可参考《机器人操作系统(ROS)浅析》(中文版已出版)[27]以进一步阐明和协助ROS的安装,并获得ROS组织和通信的更多细节和幕后解释。(关于ROS的其他书籍列于:https://wiki.ros.org/Books。)
ROS安装的在线描述链接是:https://wiki.ros.org/indigo/Installation/Ubuntu。
安装ROS时,用户有命名ROS工作区的选择权。在本书中,假定该目录位于用户的主目录下,并命令为ros_ws。如果你为ROS工作区选择另外一个名称,请将在本书中所有地方的ros_ws替换为该名称。
本书的代码示例可以在以下网址找到:https://github.com/wsnewman/learning_ros。与此代码一起使用的一些附加包位于:https://github.com/wsnewman/learning_ros_external_
packages。应将两个软件库都复制到子目录~/ros_ws/src中的用户ROS工作区,以便能够编译示例。要想手动安装这些软件,请在设置ROS环境后,cd至~/ros_ws/src并输入:
和
这将使此处引用的所有示例代码都显示在这两个子目录中。
或者(推荐此方法),使用软件库https://github.com/wsnewman/learning_ros_setup_scripts中包含的自动安装ROS的脚本,来安装本书的示例代码、安装其他有用的工具以及设置ROS工作区。网站在线提供了获取和运行这些脚本的说明。这些说明适用于本地Ubuntu-14.04安装或Ubuntu-14.04的VirtualBox安装。(注意,当运行计算密集型或图形密集型代码时,VirtualBox可能会卡顿。本机Linux安装和兼容的GPU处理器更可取。)
本书内容无法面面俱到。感兴趣的学生、研究者、自动化工程师或机器人爱好者可以自行探索数以千计的ROS包。此外,还有在线教程有更详细的细节和扩展内容。本书的目的是提供一个概览,使读者能够理解ROS、ROS包和ROS工具的组织,将现有ROS包纳入新的应用中,并开发新的包用于机器人和自动化系统。本书使读者能够更好地了解现有的在线文档以便进一步学习。
本书内容分为六部分:
ROS基础
ROS中的仿真和可视化
ROS中的感知处理
ROS中的移动机器人
ROS中的机械臂
系统集成与高级控制
每个主题都覆盖了广泛的领域,包含了大量专业研究成果。本书无法一一在这些领域指导读者。然而,机器人系统需要集成的元素横跨硬件集成、人机界面、控制理论、运动学和动力学、操作规划、运动规划、图像处理、场景解释和人工智能等一系列主题。机器人工程师必须是通才,因此至少需要了解这些领域的基本实践。ROS生态系统的一个目的就是让工程师可以导入以上每个领域现有的包,并将它们集成到一个定制的系统中,而不必成为每个领域的专家。因此,了解每个领域的ROS接口和ROS方法对系统集成商来说极具价值,可以充分利用世界各地的机器人研究者、计算机科学家和软件工程师所贡献的专业知识。
致谢
在学术界,工作乐趣之一就是经常接触聪明且富有激情的学生们。感谢我的前顾问Chad Rockey和Eric Perko,他们于2010年将我带入ROS的大门。从此,我从一个ROS质疑者变成了传播者。感谢这一路相伴的学生们,包括Tony Yanick、Bill Kulp、Ed Venator、Der-Lin Chow、Devin Schwab、Neal Aungst、Tom Shkurti、TJ Pech和Luc Bettaieb,他们帮我实现了转变并学习了新的ROS技巧。
感谢Sethu Vijayakumar教授和苏格兰信息学与计算机科学联盟,感谢他们对我在爱丁堡大学开设ROS课程和本书基础课程时给予的支持。感谢爱丁堡大学的Chris Swetenham、Vladimir Ivan和Michael Camilleri,我们在DARPA机器人挑战赛中一起开展ROS编程合作。在这个过程中,他们教会了我很多额外的ROS编程技巧。
感谢Hung Hing Ying家庭的支持,他们的基金会使得我成为香港大学的Hung Hing Ying客座教授,期间与香港大学DARPA机器人挑战赛团队一起组织并开展工作。这是一次宝贵的实践ROS的经历。感谢东京大学的Kei Okada及其学生对我们港大团队所做的贡献,包括ROS使用的宝贵意见和技巧。
感谢Taylor and Francis的资深策划编辑Randi Cohen,她鼓励并指导了本书的出版。感谢为本书提出了宝贵建议的审稿者,他们是NASA Goddard空间飞行中心和马里兰大学的Craig Carignan博士和广东工业大学的Juan Rojas教授。
最后,感谢我的妻子Peggy Gallagher、女儿Clea和Alair Newman的支持,以及不断的鼓励和帮助。
感谢谷歌和开源机器人基金、许多创建了有价值的ROS包和在线教程以及回答大量ROS问题的在线贡献者,正是有了他们的支持,ROS才能成功。
作者简介
Wyatt S. Newman是凯斯西储大学电气工程和计算机科学系的教授,自1988年开始执教。他的研究领域是机电一体化、机器人学和计算智能,拥有12项专利并发表了超过150篇学术出版物。他在哈佛大学获得了工程科学专业的学士学位,在麻省理工学院热流体科学系获得了机械工程专业的硕士学位,在哥伦比亚大学获得了控制理论和网络理论专业的电机工程理学硕士学位,在麻省理工学院设计与控制系获得了机械工程专业的博士学位。他是机器人学方面的NSF青年研究员,担任过以下职务:飞利浦实验室高级研究员、飞利浦Natuurkundig实验室的访问科学家、美国桑迪亚国家实验室智能系统和机器人中心的访问学者、NASA格伦研究中心的NASA夏季教员、普林斯顿大学神经科学的访问学者、爱丁堡大学信息学院的杰出访问学者、香港大学的Hung Hing Ying杰出客座教授。他带领机器人团队参加了2007年DARPA城市挑战赛和2015年DARPA机器人挑战赛,并将继续致力于机器人的广泛应用。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
机器人操作系统(Robot Operating System,ROS)本质是机器人系统的中间件,可帮助开发人员编写机器人应用程序,现已被机器人公司、研究机构和大学广泛采用。本书主要介绍ROS框架的高级概念,特别适合已经熟悉ROS基本概念的读者。但是,第1章还是简要介绍了ROS的基本概念,以帮助初学者快速入门。读者将了解新机器人的软件包生成、机器人建模、设计等,以及利用ROS框架对机器人进行仿真、与ROS连接。这里使用的是高级的仿真软件和ROS工具,这些工具可以辅助机器人导航、控制和传感器可视化。最后,读者将学习如何使用ROS底层控制器、小节点(nodelet)和插件等重要概念。读者可以使用普通计算机来运行本书中的大部分示例,而无须任何特殊硬件。但是,在本书的某些章节中将讨论如何使用特殊硬件将ROS与外部传感器、驱动器和I/O开发板一起使用。
本书是按照如下顺序来组织的。在介绍了ROS的基本概念之后,开始讨论如何对机器人进行建模和仿真。Gazebo和V-REP仿真器将用于控制机器人建模并与之交互,还将用于连接机器人与MoveIt!和ROS导航软件包。然后讨论ROS插件、控制器和小节点。最后,本书还会讨论如何将Matlab和Simulink软件与ROS连接。
本书的读者对象
本书为有激情的机器人开发人员或想充分利用ROS功能的研究人员而写。本书也适合已经熟悉典型机器人应用的用户,或者想要进阶学习ROS,学习如何建模、构建、控制自己机器人的用户。如果你想轻松理解本书的所有内容,强烈建议你先掌握GNU/Linux和C++编程的基础知识。
本书主要内容
第1章介绍ROS的核心基本概念。
第2章解释如何使用ROS软件包。
第3章讨论两类机器人的设计:一类是七自由度(7-DOF)机械臂,另一类是差速驱动机器人。
第4章讨论7-DOF机械臂、差速轮式机器人和ROS控制器的仿真,这些控制器有助于控制Gazebo中的机器人关节。
第5章介绍如何使用V-REP仿真器和vrep_plugin将ROS连接到仿真场景中。然后讨论7-DOF机械臂和差速移动机器人的控制。
第6章介绍如何使用ROS MoveIt!和导航软件包集的现有功能,如机器人机械臂运动控制和机器人自主导航。
第7章展示ROS中的一些高级概念,例如ROS pluginlib、小节点和Gazebo插件。本章还将讨论每个概念的功能和应用,并通过一个示例介绍其工作原理。
第8章展示如何为类似于PR2的机器人编写基本的ROS控制器。在创建控制器后,我们将使用Gazebo中的PR2来运行控制器。与此同时,我们还将看到如何为RViz创建插件。
第9章讨论一些硬件组件(如传感器和执行器)与ROS的接口。我们将看到如何使用I/O开发板(如Arduino、树莓派和Odroid-XU4)与ROS的传感器通信。
第10章讨论如何使用ROS连接各种视觉传感器,并利用开源计算机视觉库(OpenCV)和点云库(PCL)与AR Markers一起对其进行编程。
第11章介绍如何构建具有差速驱动器配置的自主移动机器人,并将其与ROS连接。
第12章讨论MoveIt!的功能,例如碰撞规避,使用3D传感器进行感知、抓握、拾取和放置。在此之后,我们将学习如何将机器人控制器硬件与MoveIt!连接。
第13章讨论如何将Matlab和Simulink软件与ROS连接。
第14章帮助大家了解和安装ROS中的ROS-Industrial软件包。我们将学习如何为工业机器人开发MoveIt! IKFast插件。
第15章讨论如何在Eclipse IDE中设置ROS开发环境,并介绍ROS中的最佳实战经验与调试技巧。
如何学习本书
为了运行本书中的示例,你需要一台运行Linux系统的计算机。这里推荐安装的Linux发行版是Ubuntu 16.04,Debian 8也可以。建议计算机配置至少有4GB的内存和一款性能优异的处理器(Intel i系列)来执行Gazebo仿真和图像处理算法。
读者甚至可以在Windows系统上托管的虚拟机或VMware软件上安装Linux系统,在这样的虚拟系统中也可以工作。但这种选择的缺点是需要更多的计算资源来运行示例,并且当ROS与真实的硬件连接时,可能会遇到各种问题。
本书中使用的ROS版本是Kinetic Kame。需要的其他软件有V-REP仿真器、Git、Matlab和Simulink。
最后,某些章节要求读者将ROS与商用硬件连接,例如I/O开发板(Arduino、Odroid和树莓派)、视觉传感器(Kinect/Asus Xition Pro)和驱动器。你必须购买这些硬件才能运行本书中的一些示例,但这并不是学习ROS必须要购买的。
下载示例代码
你可以从www.packtpub.com通过个人账号下载本书的示例代码,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码也在GitHub上托管,网址为https://github.com/PacktPublishing/Mastering-ROS-for-Robotics-Programming-Second-Edition。如果代码有更新的话,会将更新提交到GitHub代码仓库中。
除此之外,我们还在https://github.com/PacktPublishing/中提供了其他书籍和视频,这里还有一些其他代码,有兴趣就去看看吧!
下载彩图
我们还提供了一个PDF文件,其中包含本书中使用的所有截图和样图。可以在此处下载:http://www.packtpub.com/sites/default/files/downloads/MasteringROSforRoboticsProgrammingSecondEdition_ColorImages.pdf。
排版约定
在本书中使用了许多排版约定。
代码格式如下:
命令行输入或输出格式如下:
粗体:表示你看到的是新术语、重要单词或句子。例如,菜单或对话框中的单词会出现在文本中。下面就是一个示例:在主工具栏上,选择“File | Open Workspace”,然后选择代表ROS工作区的目录。
警告或重要说明标志。
提示和技巧标志。
---------------------------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的机器人(如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(Robot Operating System,机器人操作系统),是一个让机器人能够运作起来的开源程序框架。ROS诞生的初衷是能够为那些制作和使用机器人的人提供通用的软件平台。这个平台能够让人们更加便捷地分享代码与想法,这意味着你不再需要花费经年累月的时间去编写软件框架就能让你的机器人动起来!
ROS取得了巨大的成功。截止撰写本书之时,官方发行的ROS版本中有超过2000个软件包,并被600多人编写和维护。ROS支持大约80个市场上可以买到的机器人,我们还可以在至少1850篇学术文献中找到ROS的踪影。从此我们不再需要从零开始编写所有程序,特别是当要对众多ROS所支持的机器人中的一个进行开发时,我们可以更加专注于机器人技术本身,而不是“位操作”或者设备驱动。
ROS由许多部分所组成,包含如下这些:
1 一系列可以让你从传感器读取数据以及向电动机等执行机构发送指令的驱动程序,而且这些数据的格式都经过良好的抽象与定义。ROS支持非常多的主流硬件,包括越来越多市场上可以买到的机器人系统。
2 海量且日渐增多的基本机器人算法,让你能够轻松构建世界地图、在其中穿梭、表示并解析传感器数据、规划动作、操纵物体,以及实现许多其他功能。ROS在机器人研究社区中饱受欢迎,因此许多最前沿的算法现在都可以在ROS中找到。
3 充足的计算基础设施,使数据能够四处传递,让众多模块可以连接成一个复杂的机器人系统并帮助你整合算法。ROS天生的分布式架构让你能够轻松地将计算压力无缝地分担到多台计算机上。
4 一系列实用工具,使得对机器人及算法的可视化、错误行为的调试以及传感器数据的录制都变得非常容易。对机器人程序的调试是极为困难的,因此也正是这一系列丰富的工具使得ROS如此强大。
5 最后,ROS具有比其本身更为庞大的ROS生态系统,它的扩展资源众多,包含了一个记录整个框架方方面面的wiki文档,一个专门用于提问与解答的网站,通过该网站你可以寻求帮助并分享自己的所学,以及一个充满使用者与开发者的欣欣向荣的社区。
那么,为什么你需要学习ROS呢?最简单的答案就是,它将会为你节省时间。ROS包含了机器人软件系统的所有部分,没有它,你就只能自己一一编写。ROS使你能够更加专注于系统中你最关心的部分,而无须操心那些你不那么关注的部分。
为什么你需要读这本书?ROS的wiki文档中包含了大量内容,涉及框架中许多方面的详细教程。一个活跃的用户社区(http://answersrosorg)随时准备解答你的问题。为什么不直接通过这些资源学习ROS? 在本书中我们所做的就是以一种更加有序的方式将这些知识呈现给你,并给出容易理解的实例,使你知道如何使用ROS让你的实物或仿真机器人去做些有趣的事。我们还尝试通过提供技巧和提示来给予你各种指导,比如如何整合代码,如何在机器人行为不合预期时调试代码以及如何成为ROS社区的一员。
如果你不是资深程序员,学习ROS会有些吃力,系统中包含了分布式计算、多线程、事件驱动的编程以及深藏在系统底层的一大堆概念。如果你不怎么懂这些内容,你的学习曲线将会非常陡峭。本书通过介绍ROS的基本概念并给出在实物或仿真机器人中的常见应用实例来尽可能地使这条学习曲线变得平缓一些。
谁应该阅读本书
如果你想让你的机器人在现实世界中做一些事情,而又不想把时间浪费在“重新发明轮子”上,那么这本书就是为你准备的。ROS包含了让机器人运转起来所需要的基础架构以及用来驱动机器人做一些有趣事情的足够多的算法。
如果你对某些特别的方面比如路径规划等感兴趣,并且想在完整的机器人系统背景下研究它们,那么这本书就是为你准备的。本书将展示如何使用ROS提供的基础架构和算法来驱动机器人做一些有趣的事情以及如何用你自己的算法替换掉现有的算法。
如果你想要了解ROS基本的运转机制和用法,想要了解ROS大概能做哪些事情,但是又苦于wiki的内容太过庞杂,那么这本书也是为你准备的。我们将带领你了解ROS的运转机制和一些简单的工具。我们也会提供一些具体的、完整的例子,你可以基于这些例子进行开发,修改它们来实现自己的想法。
谁不适合阅读本书
虽然我们不想拒绝任何人阅读本书,但是本书并不是对所有人都适用的资源。我们对你使用的机器人做了一些隐含的假设。它们应该运行Linux,有很好的计算资源(至少相当于一台笔记本电脑)。它们有先进的传感器,比如Microsoft Kinect。它们应该是放在地上的,并且可能需要在实际环境中移动。如果你的机器人不满足上述这些要求,那么本书中的例子就不能立刻成功运行,尽管程序和工具本身并没有问题。
本书主要是关于ROS的,并不是关于机器人学的。尽管你可以从本书中学到一点机器人学相关的知识,但是我们不会深入地探讨ROS中包含的很多算法。如果你想获取更多关于机器人学的介绍,那么这本书不是为你准备的。
你将学到什么
本书想要广泛地介绍如何使用ROS对机器人进行编程。本书涵盖构成ROS核心的基本运转机制和简单工具,并将展示如何使用它们创建控制机器人的软件。我们将展示一些具体的例子,这些例子讲述了如何使用ROS控制你的机器人做一些有趣的事情。同时,我们将给出一些如何基于这些例子来创建你自己的机器人的建议。
除了技术内容之外,我们还将展示如何使用ROS巨大的生态系统,比如wiki和问答社区,以及如何成为全球ROS社区的一员,与全世界的其他机器人爱好者分享代码和新知识。
预备知识
在阅读和使用本书之前,你必须了解几件事情。由于ROS是一个软件框架,因此为了更好地了解ROS你非常有必要了解如何编程。虽然在ROS中可以使用很多种语言,但是在本书中我们使用Python。如果你不了解Python,那么很多代码对你来说就没多大意义了。幸运的是,Python是一门易于学习的语言!有很多很不错的书和免费的网站,你可以使用这些资源来学习Python,Python的官方网站是http://pythonorg。
最适合运行ROS的环境是Ubuntu Linux,有一些Linux的经验能够让学习轻松一点。我们在讲述过程中将会介绍一些必要的Linux相关内容,但是对文件系统、bash命令行以及至少一种编辑器有一些基本的了解将有利于你将更多的精力放在ROS相关的内容上。
尽管不是必要的,但是对机器人学有基本的了解也将有所帮助。了解一些机器人学所使用的基本数学知识,比如坐标变换、传动链等,对理解书中所讲述的一些ROS机制也很有帮助。再次强调,我们将简要介绍这些内容,但是如果你不熟悉这些东西,你可能要额外地学习、深入机器人学的相关文献来补充相关背景。
排版约定
斜体
表示新的术语、网址、邮件地址、目录、路径名、文件名以及文件扩展名。
等宽字体(Constant width)
表示程序代码,在正文中出现的代码中的元素,如变量名、函数名、命名空间、数据类型、环境变量、语句以及关键词等,也用来表示命令、命令行工具以及ROS的包、节点、话题等。
等宽加粗(Constant width bold)
表示命令以及其他一些需要用户完全按照字面输入的文字。
等宽斜体(Constant width italic)
表示需要用户根据自身情况替换的文字以及由上下文决定的一些值。
这个图标表示一般的注释。
这个图标表示建议或者小贴士。
这个图标表示警告。
代码示例的使用
一些补充材料(代码示例、练习等)可以从地址https://githubcom/osrf/rosbook获取。
本书的目的是帮助你完成工作。为了达到这个目的,上述链接指向的代码仓库中的代码根据Apache 20许可证是可用的,这一许可证允许你重用代码。
我们希望但是不强制你引用本书。一条引用通常包含书名、作者、出版商以及ISBN,如“Programming Robots with ROS by Morgan Quigley, Brian Gerkey, and William D Smart (O扲eilly) Copyright 2015 Morgan Quigley, Brian Gerkey, and William D Smart, 978-1-4493-2389-9”。
如果你感觉你对代码的利用超出了正常使用范围或上述许可范围,请联系我们:permissions@oreillycom。
Safari在线电子书
Safari Book Online是一个在线的电子图书馆,收录了大量当下热门的电子图书及配套的影像资料,涵盖商业的技术领域的各个方面。得到了技术专家、软件开发人员、网页设计师和商业人士的广泛使用和认可。通过它,你可以获取研究资料、解决难题、学习新知识和接受技术培训等。
Safari Books Online针对企业、政府和教育机构提供了不同的购买计划,你可以根据实际需求进行选购。
购买Safari Books Online服务后,你就可以通过在线数据库搜索访问数以千计的书籍、培训视频甚至是预出版的样书。这些资料来自于包括O扲eilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等出版社。
如何联系我们
美国:
O扲eilly Media,Inc
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
本书也有一个配套网站,网站上的内容包括勘误表、代码示例以及一些与本书相关的额外信息。网站的地址是:http://bitly/prog_robots_w_ros。
如果有关于本书的技术性疑问,请发电子邮件至bookquestions@oreillycom。
关于本书的更多信息,如相关课程、会议、新闻等,请访问我们的网站http://wwworeillycom。
致谢
首先,也是最重要的,我们要感谢O扲eilly的三位编辑Mike Loukides、Meg Blanchette 以及Dawn Schanafelt。在本书写作过程中,他们表现出了极大的耐心和极高的责任心。我们还要感谢所有为本书提供反馈的人,尤其是Andreas Bihlmaier、Jon Bohren、Zach Dodds和Kat Scott。他们的评论和建议让本书变得更好。
当然,我们还要感谢所有帮助我们调试从而使ROS在我们的机器人上正常运行的人。Mike Ferguson提供了Fetch示例。来自开源机器人基金会(Open Source Robotics Foundation,OSRF)的Steve Peters、Nate Koenig以及John Hsu解答了一些Gazebo仿真的问题。William Woodall和Tully Foote(都来自OSRF)解答了很多很深入的ROS问题。
也感谢Dylan Jones在本书出版前的最后一刻找出了一个代码漏洞。
最后,我们要感谢全世界ROS社区的作者、维护者以及用户。如果没有他们的努力,ROS就不会发展成今天的样子,本书也不会出版。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
本书第3版全面地介绍了ROS和各种工具。ROS是一个先进的机器人操作系统框架,目前已有数百个研究团体和公司将其应用在机器人行业中。更重要的是,对于机器人技术的非专业人士和学生来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何使用ROS的基本工具和框架中不同的功能。
在阅读本书的过程中无须使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户购买得起的设备,同时涵盖了在机器人研究中最典型的传感器和执行器。
最后,展示ROS具有使整个机器人在实际或虚拟环境中工作的能力。你将学习如何创建自己的机器人并通过Gazebo仿真环境集成它。此外,如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。本书将带你从不同方面探索如何创建机器人,例如使用计算机视觉或点云分析传感器感知世界,使用强大的导航功能包集在环境中实现导航,甚至能够用MoveIt!包控制机械臂与周围环境交互。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理,我们衷心希望你能全面了解ROS在开发机器人系统时所提供的无限可能性。
主要内容
第1章介绍安装ROS最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROS Kinetic。这一章还会说明如何从Debian包安装或从源代码进行编译安装,以及在虚拟机、Docker和ARM CPU中安装。
第2章讨论ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍在ROS中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器等传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第5章是关于ROS导航功能包集中的其中一章。该章介绍如何为方便机器人使用导航功能包集进行初始化配置。然后用几个例子对导航功能包集进行说明。
第6章延续第5章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和RViz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第7章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置、简单的运动规划等任务的演示示例。
第8章介绍ROS与现实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第9章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,就可以使用ROS的标定工具标定摄像头。该章会详细介绍和说明什么是图像管道,讨论如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第10章将展示如何在ROS节点中使用点云库(Point Cloud Library,PCL)。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu 16.04 LTS。这样你可以根据第1章的内容安装ROS Kinetic。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,最好有足够的外围接口,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-core Debian包),以便从本书提供的源代码中复制软件库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS如何帮助开发人员完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这三章直接阅读后面的章节。
源代码和彩色图片下载
本书源代码可以从华章官网www.hzbook.com下载。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
本书第2版概括性地介绍了ROS系统的各种工具。ROS是一个先进的机器人操作系统框架,现今已有数百个研究团体和公司将其应用在机器人行业中。对于机器人技术的非专业人士来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何开始使用ROS的基本工具,以及最终如何应用先进的计算机视觉和导航工具。
在阅读本书的过程中无需使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样你可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户负担得起的设备,同时涵盖了在机器人研究中最典型的传感器或执行器。
最后,由于ROS系统的存在使得整个机器人具备在虚拟环境中工作的能力。你将学习如何创建自己的机器人并结合功能强大的导航功能包集。此外如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。第2版在最后增加了一章,讲如何使用“Move it!”包控制机械臂执行抓取任务。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理。
主要内容
第1章介绍安装ROS系统最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROS Hydro。这一章还会说明如何从Debian软件包安装或从源代码进行编译安装,以及在虚拟机和ARM CPU中安装。
第2章涉及ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试一个节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍ROS系统与真实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第5章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,你就可以使用ROS的标定工具标定你的摄像头。我们会详细介绍和说明什么是图像管道,学习如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第6章将展示如何在ROS节点中使用点云库。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
第7章介绍在ROS系统中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第8章是两章关于ROS导航功能包集中的第1章。该章介绍如何对你的机器人进行使用导航功能包集所需的初始化配置。然后用几个例子对导航功能包集进行说明。
第9章延续第8章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和rviz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第10章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置,简单的运动规划等任务的演示示例。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu 12.04 LTS。这样你可以根据第1章的内容安装ROS Hydro。
对于ROS的这一版本,你将需要Ubuntu 14.04之前的版本,因为之后的版本已经不再支持Hydro了。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,如果有足够的外围接口将会更好,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-core Debian软件包),以便从本书提供的源代码中复制库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS系统如何帮助完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这部分直接阅读后面的章节。
源代码和彩色图片下载
可以从你在http://www.packtpub.com中的账户下载所有已购买的Packt Publishing出版的书籍的示例代码文件。如果你在其他地方购买了这本书,可以访问http://www.packtpub.com/support并注册,文件会通过电子邮件直接发送给你。还可以从https://github.com/AaronMR/ROS_Book_Hydro下载源代码文件。
我们同时提供了本书所有彩色的屏幕截图、对话框的PDF文件,这些彩色图片能够更好地帮助你理解输出的变化。可以从http://www.packtpub.com/sites/default/files/downloads/
7580OS_ColorImages.pdf下载这个文件。
第7章介绍新型的嵌入式控制器及处理器板,例如基于STM32的控制器、Tinkerboard、Jetson Nano以及其他类似产品。本章还将介绍怎样通过ROS控制这些板卡的GPIO(General-Purpose Input/Output,通用输入/输出接口),以及如何通过Alexa提供的语音交互功能进行语音控制。
第8章介绍机器人学领域最重要的学习技术之一——强化学习。本章将介绍强化学习的内涵,并通过实例介绍强化学习背后的数学知识。此外,还将通过一系列实例展示强化学习技术是如何在ROS中进行应用的。
第9章介绍深度学习在机器人领域的应用。本章将介绍如何使用深度学习实现图像识别,还将介绍使用SVM(Support Vector Machine,支持向量机)的应用程序。
第10章是本书中最有趣的内容之一。本章将展示如何使用ROS和Gazebo构建一辆模拟的自动驾驶汽车。
第11章展示如何通过VR头盔和体感控制器Leap Motion实现对机器人的远程操控。本章将介绍VR头盔的应用,这是当前最流行的技术之一。
第12章通过一个项目展示如何在ROS下使用OpenCV库。在本项目中,将构建一个最基本的人脸跟踪器,实现摄像头对人脸的实时跟踪。本章将使用诸如Dynamixel的智能伺服系统实现机器人的旋转。
充分利用本书
读者需要一台运行Linux系统(最佳版本为Ubuntu 18.04)的个人计算机。
个人计算机配置需求为:具有显卡,内存不小于4GB(8GB更佳)。这主要是为了更好地运行Gazebo,也是为了更好地进行点云和计算机视觉处理。
读者最好能够拥有书中提到的传感器、执行器以及I/O板,并且能够将这些硬件连接到自己的计算机上,同时为了能够复制相关代码,读者需要安装Git。
如果读者使用Windows系统,则推荐下载VirtualBox,并在其中安装和配置Ubuntu。不过,需要提醒的一点是,在虚拟机中运行ROS相关程序、连接某些硬件时可能存在某些问题。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
下载完成后,读者可以将代码压缩包解压到本地(请确保已经安装了解压缩软件),具体操作系统的相应解压缩软件如下:
Windows下为WinRAR/7-Zip。
Mac下为Zipeg/iZip/UnRarX。
Linux下为7-Zip/PeaZip。
此外,读者还可以通过GitHub下载本书代码,网址为:
https://github.com/PacktPublishing/ROS-Robotics-Projects-SecondEdition
如果代码有所更新,则上述网址相应的仓库代码也会进行更新。
本书约定
代码段示例:
输入或输出命令行示例:
表示警告或重要的说明。
表示提示和技巧。
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
学习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 2及最新发行版TurtleBot 3)的操作和控制。如果读者没有这款机器人,那么可以在Gazebo模拟环境下使用模拟的TurtleBot机器人来学习该章的内容。读者可以通过ROS命令、Python脚本程序等多种方法实现对TurtleBot机器人的操控。此外,该章还讲述了使用rqt工具及其插件对TurtleBot进行控制以及对其传感器数据进行监测的方法。
第4章探讨视觉传感器以及机器人创建周围环境地图的相关内容,不仅论述了可用作TurtleBot视觉系统的3D传感器,而且介绍了如何在ROS下进行设置与操作,使得机器人具备自主导航能力。在TurtleBot机器人导航模块中,应用了同步定位与地图创建技术。
第5章对复杂的机器人手臂进行简要介绍。采用Xacro的宏语言设计并构建了一个模拟的机器人手臂。为了操作机器人手臂,在Gazebo环境下创建了相应的控制器。通过控制器的创建,论述了简单的机器人手臂的结构和物理学的相关内容。
第6章对复杂的机器人手臂控制进行进一步的探讨,对最新型的Baxter机器人进行了介绍,并提供了一个开源的Baxter机器人模拟器,这也是本书中介绍的第二款机器人。Baxter机器人有两个7自由度的手臂以及其他一系列的传感器。该章通过实例的形式,分别在位置控制模式、速度控制模式与扭矩控制模式下,对机器人手臂的正向与反向运动控制进行了介绍。此外,该章还对一个非常有用的ROS工具MoveIt!进行了介绍,MoveIt!既可以对模拟的Baxter机器人手臂进行运动规划的仿真和执行,也可以对真实的Baxter机器人手臂进行运动规划的仿真和执行。
第7章对无人机进行论述。该章主要讲解四旋翼硬件与飞行控制的概念,以及四旋翼模拟器Hector的下载与控制。通过对模拟四旋翼飞行操控的练习,使得读者能够操控真实的四旋翼,如Bitcraze的Crazyflie或者Parrot的Bebop。对四旋翼的控制可以通过遥控或者ROS的话题/消息命令实现。
第8章描述一系列可以用来对支持ROS的机器人进行控制的外部设备。操纵杆控制器、控制器开发板(Arduino和树莓派)以及所有具有ROS接口的移动设备均可以集成到读者的机器人系统之中,以实现对机器人更多的外部控制。
第9章对前面章节所介绍的多个ROS组件与概念进行组合,实现一个十分具有挑战性的任务:自主飞行。在该任务中,读者将控制Crazyflie在采用Kinect 3D传感器构建的地图下自动飞往一个“远方”的目标。这一任务的实现采用了ROS的消息通信机制与协同传输,从而得到四旋翼上Kinect的视野以及目标相对于四旋翼的位置,进而对飞行进行精密的规划。在此基础上,将采用了PID控制的Crazyflie的飞行控制软件作为飞行任务中的飞行控制模块,从而实现了四旋翼的自主飞行。
第10章介绍使用MATLAB及其机器人系统工具箱(Robotics System Toolbox)进行机器人通信与控制的一种新机制。用第6章中介绍过的双臂机器人Baxter来展示在MATLAB中进行ROS机器人通信与控制设置的流程,主要通过在机器人系统工具箱中添加传统消息的方法实现。对机器人手臂的通信与控制使用MATLAB脚本与ROS命令实现。
学习本书所需的知识与设备
本书给出各项任务的步骤和指令,以便读者参与其中具体实操。读者所需要的是一台安装了Ubuntu 16.04(Xenial Xerus)的电脑。同时,支持其他版本的Ubuntu以及Linux发行版,并支持macOS、Android和Windows,不过需要参考ROS wiki的文档(http://wiki.ros.org/Kinetic/Installation)。
本书中所用的ROS版本为Kinetic Kame,该版本是目前推荐的稳定发行版,对该版本的支持将持续到2021年4月。
书中所有的软件都是开源的,可以免费获取和使用。在对软件进行介绍时会提供相关的下载说明。本书的第1章给出了下载和设置ROS软件环境的相应指令。
下载软件时,我们推荐使用Debian软件包。当没有相应的Debian包时,推荐从GitHub软件发行库中下载。
Gazebo模拟器提供了增强的图形化处理功能,推荐使用专用显卡进行操作,但并不是必需的。
涉及的外部设备主要包括3D传感器、Xbox或PS3控制器、Arduino或树莓派控制板、Android移动设备等。
本书的目标读者
本书主要面向机器人开发人员,无论是业余爱好者还是相关研究人员,无论是专业人士还是对ROS感兴趣的人,本书都能满足需求,如果读者具备GNU/Linux系统和Python语言的相关知识会更好。
样式约定
本书对于不同类型的信息,采用了不同的印刷格式。下面是各类印刷格式的示例及说明。
文中的目录名、文件名、文件扩展名以及文件路径名的印刷格式均为代码体。
代码格式如下所示:
为了避免在介绍新代码时重复显示已经展示过的代码,已经展示过的代码会以省略号表示,同时新的代码会加粗显示,如下所示:
用以输入的命令行如下所示:
指令的相应输出如下所示:
新术语以及关键字的字体为黑体。
警告与重要提示。
小贴士和小技巧。
下载示例代码及彩色图像
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
---------------------------ROS机器人编程:原理与应用---------------------------
ROS(Robot Operating System,机器人操作系统)正在成为现代机器人学的实际标准编程方法。ROS wiki(https://www.ros.org/history/)写道:
ROS生态系统现在由全世界数以万计的用户组成,覆盖了从桌面爱好项目到大型工业自动化系统。
为什么是ROS?在1956年,Joseph Engelberger创立了Unimation公司,世界上第一个机器人公司[7]。然而,在过去的半个世纪里,机器人技术的进步令人失望。世界范围内的机器人学研究也仅限于实验室里的演示和探奇。这一领域的新生研究人员通常一无所有,从头开始构建新型机器人,解决执行器和传感器接口的问题,构建底层的伺服控制,并且通常在实现更高级的机器人能力之前就已经精疲力竭了,而这些自定义的机器人和软件很少被复用于后续工作。
人们认识到采用构建巴比塔的模式是徒劳的,构建更智能的机器人的任务需要持续的、协作的努力,并建立在能够不断达到更高层能力的基础上。在1984年,Vincent Hayward和Richard Paul引入了机器人控制C库(Robot Control C Library, RCCL)[15]作为解决这一长期问题的方法。不幸的是,RCCL没有获得机器人研究人员足够的认可。National Instruments[24]和Microsoft[39-40]均引入了试图使机器人编程标准化的产品。然而,研究人员发现这些方法烦琐而昂贵。
ROS于2007年由斯坦福人工智能实验室发起[26],它试图统一零碎的谷歌所采用的机器人学方法,且于2008年至2013年得到Willow Garage的支持[12],随后自2013年至今得到谷歌开源机器人基金会(Open Source Robotics Foundation,OSRF)的支持[10]。ROS方法遵循了开源软件和分布式协作的现代方法。此外,它桥接和提升了其他并行的开源工作,包括OpenCV[28]、PointCloudLibrary[21]、Open Dynamics Engine[8]、Gazebo[19]和Eigen[20]。对于研究人员而言,ROS在开放性和易用性方面可能与RCCL相似,而谷歌持续七年的支持是ROS存活的关键。
ROS现在在学术界、工业界和研究机构中得到了全世界的广泛使用。开发人员提供了数以千计的软件包,包括来自一些世界领先的专家在相关领域的解决方案。新的机器人公司在它们的产品上提供了ROS接口,并且已建立的工业机器人公司也引入了ROS接口。随着广泛采用ROS作为机器人编程实际标准的做法,人们对提高机器人的能力有了新的希望。在最近的DARPA机器人挑战赛中,大多数入围的团队使用了ROS。新型自动驾驶汽车的开发商正在开发ROS。新的机器人公司正在崛起,这部分是由ROS资源驱动的。鉴于ROS的势头和功绩,显而易见,当今的机器人工程师必须精通ROS编程。
什么是ROS?将其称为“机器人操作系统”并不全面。简洁地定义ROS很困难,因为它包含了很多方面,包括:编程风格(特别是依赖于松散耦合的分布式节点),节点间通信的接口定义和范例,库和包合并的接口定义,可视化、调试、数据记录和系统诊断的工具集合,共享源代码的存储仓库,桥接多个有用的、独立的开源库的桥梁。因此,ROS是机器人程序员的一种生活方式,而不只是一种简单的操作系统。ROS的定义可以参考ROS wiki(https://wiki.ros.org/ROS/Introduction):
ROS是一个针对机器人的开源、元级操作系统。它提供了用户在操作系统上所期望的服务,包括硬件抽象、低层设备控制、常用功能的实现、进程之间的消息传递以及包管理。它还提供了在多台计算机上获取、生成、编写以及运行代码的工具和库。
ROS的主要目标是支持机器人研究和开发中的代码复用。ROS是一个分布式的进程(也称节点)框架,它能使可执行的文件单独设计以及在运行时松散耦合。这些进程可以打包成易于共享和分发的包。ROS还支持一个代码库的联合系统,能够同时分发协作。从文件系统级到社区级的这个设计实现了开发和部署的独立决策,但所有这些都可以与ROS的基础底层工具一起使用。
Brian Gerkey在网上的评论(https://answers.ros.org/question/12230/what-is-ros-exactly-middleware-framework-operating-system/)如下。
我是这样解释ROS的:
1.?管道:ROS提供了发布-订阅消息传递基础结构,旨在支持分布式计算系统的快速、轻松构建。
2.?工具:ROS提供了一套广泛用于配置、启动、反思、调试、可视化、记录、测试和停止的分布式计算系统的工具。
3.?功能:聚焦于移动性、操作性和感知性,ROS提供了实现机器人有用的功能的广泛库集。
4.?生态系统:ROS拥有规模庞大的社区支持,并通过着力聚焦于集成和文档而不断改进。ros.org是一个一站式的站点,在这里可以查找和了解来自世界各地开发者的成千上万个可用ROS包。
来自参考文献[13]对ROS的解释如下:
ROS(发音Ross[rs])的主要目标是提供一个统一的开源编程框架,用于在各种真实世界和仿真环境中控制机器人。
来自参考文献[13]中的ROS管道:
ROS中的核心实体称为节点。节点通常是用Python或C++编写的小程序,用于执行一些相对简单的任务或过程。节点可以相互独立地启动和停止,并通过传递消息进行通信。节点可以在某些主题上发布消息或向其他节点提供服务。
例如,发布器节点可能会报告从连接到机器人微控制器的传感器传来的数据。/head-sonar主题上数值为0.5的消息意味着传感器当前检测的物体有0.5 m远。任何想从这个传感器知晓读数的节点只需订阅/head-sonar主题即可。为了使用这些值,订阅器节点定义了一个回调函数,每当新消息到达订阅的主题时它就会执行。这种情况发生的频率取决于发布器节点更新其消息的速率。
节点还可以定义一个或多个服务。当从另一个节点发送请求时,ROS服务会产生某个行为或发送应答。一个简单的例子就是打开或关闭LED的服务。一个更复杂的例子是,当给定一个目标位置和机器人的初始位姿时,返回一个移动机器人导航规划的服务。
学习ROS的方法:ROS有很多功能、工具、风格和习惯。ROS的学习曲线陡峭,因为在富有成效地使用它之前需要掌握很多细节。ROS wiki有文档和一系列教程的链接。然而,这些对于ROS的初学者而言可能很难遵循,因为定义是分散的,并且所呈现的细节水平千差万别,从未经说明的示例到面向复杂用户的解释。本书的目的是从简单的代码示例以及相应的操作理论层面向读者介绍ROS的基本组件。这种介绍只会触及表面,但应该能让读者开始建立有用的ROS节点,并使教程变得更可读。
ROS代码可以用C++或Python编写。本书仅使用C++。对于Python,读者可参考《ROS机器人编程实践》(中文版已出版,ISBN:978-7-111-58529-9)[34]。
本书配套的代码示例假定采用Linux Ubuntu 14.04和ROS Indigo。如果你使用PC运行Windows或使用Mac运行OSX,则一个选择是安装VirtualBox来设置虚拟Linux计算机,以便在不影响原操作系统的情况下运行。关于安装VirtualBox、Ubuntu、ROS以及附带的代码示例和工具,包括在https://github.com/wsnewman/learning_ros的子目录additional_documents中。(该目录还包括使用git的入门指南。)
配置计算机来使用ROS可能是一个挑战。可参考《机器人操作系统(ROS)浅析》(中文版已出版)[27]以进一步阐明和协助ROS的安装,并获得ROS组织和通信的更多细节和幕后解释。(关于ROS的其他书籍列于:https://wiki.ros.org/Books。)
ROS安装的在线描述链接是:https://wiki.ros.org/indigo/Installation/Ubuntu。
安装ROS时,用户有命名ROS工作区的选择权。在本书中,假定该目录位于用户的主目录下,并命令为ros_ws。如果你为ROS工作区选择另外一个名称,请将在本书中所有地方的ros_ws替换为该名称。
本书的代码示例可以在以下网址找到:https://github.com/wsnewman/learning_ros。与此代码一起使用的一些附加包位于:https://github.com/wsnewman/learning_ros_external_
packages。应将两个软件库都复制到子目录~/ros_ws/src中的用户ROS工作区,以便能够编译示例。要想手动安装这些软件,请在设置ROS环境后,cd至~/ros_ws/src并输入:
和
这将使此处引用的所有示例代码都显示在这两个子目录中。
或者(推荐此方法),使用软件库https://github.com/wsnewman/learning_ros_setup_scripts中包含的自动安装ROS的脚本,来安装本书的示例代码、安装其他有用的工具以及设置ROS工作区。网站在线提供了获取和运行这些脚本的说明。这些说明适用于本地Ubuntu-14.04安装或Ubuntu-14.04的VirtualBox安装。(注意,当运行计算密集型或图形密集型代码时,VirtualBox可能会卡顿。本机Linux安装和兼容的GPU处理器更可取。)
本书内容无法面面俱到。感兴趣的学生、研究者、自动化工程师或机器人爱好者可以自行探索数以千计的ROS包。此外,还有在线教程有更详细的细节和扩展内容。本书的目的是提供一个概览,使读者能够理解ROS、ROS包和ROS工具的组织,将现有ROS包纳入新的应用中,并开发新的包用于机器人和自动化系统。本书使读者能够更好地了解现有的在线文档以便进一步学习。
本书内容分为六部分:
ROS基础
ROS中的仿真和可视化
ROS中的感知处理
ROS中的移动机器人
ROS中的机械臂
系统集成与高级控制
每个主题都覆盖了广泛的领域,包含了大量专业研究成果。本书无法一一在这些领域指导读者。然而,机器人系统需要集成的元素横跨硬件集成、人机界面、控制理论、运动学和动力学、操作规划、运动规划、图像处理、场景解释和人工智能等一系列主题。机器人工程师必须是通才,因此至少需要了解这些领域的基本实践。ROS生态系统的一个目的就是让工程师可以导入以上每个领域现有的包,并将它们集成到一个定制的系统中,而不必成为每个领域的专家。因此,了解每个领域的ROS接口和ROS方法对系统集成商来说极具价值,可以充分利用世界各地的机器人研究者、计算机科学家和软件工程师所贡献的专业知识。
致谢
在学术界,工作乐趣之一就是经常接触聪明且富有激情的学生们。感谢我的前顾问Chad Rockey和Eric Perko,他们于2010年将我带入ROS的大门。从此,我从一个ROS质疑者变成了传播者。感谢这一路相伴的学生们,包括Tony Yanick、Bill Kulp、Ed Venator、Der-Lin Chow、Devin Schwab、Neal Aungst、Tom Shkurti、TJ Pech和Luc Bettaieb,他们帮我实现了转变并学习了新的ROS技巧。
感谢Sethu Vijayakumar教授和苏格兰信息学与计算机科学联盟,感谢他们对我在爱丁堡大学开设ROS课程和本书基础课程时给予的支持。感谢爱丁堡大学的Chris Swetenham、Vladimir Ivan和Michael Camilleri,我们在DARPA机器人挑战赛中一起开展ROS编程合作。在这个过程中,他们教会了我很多额外的ROS编程技巧。
感谢Hung Hing Ying家庭的支持,他们的基金会使得我成为香港大学的Hung Hing Ying客座教授,期间与香港大学DARPA机器人挑战赛团队一起组织并开展工作。这是一次宝贵的实践ROS的经历。感谢东京大学的Kei Okada及其学生对我们港大团队所做的贡献,包括ROS使用的宝贵意见和技巧。
感谢Taylor and Francis的资深策划编辑Randi Cohen,她鼓励并指导了本书的出版。感谢为本书提出了宝贵建议的审稿者,他们是NASA Goddard空间飞行中心和马里兰大学的Craig Carignan博士和广东工业大学的Juan Rojas教授。
最后,感谢我的妻子Peggy Gallagher、女儿Clea和Alair Newman的支持,以及不断的鼓励和帮助。
感谢谷歌和开源机器人基金、许多创建了有价值的ROS包和在线教程以及回答大量ROS问题的在线贡献者,正是有了他们的支持,ROS才能成功。
作者简介
Wyatt S. Newman是凯斯西储大学电气工程和计算机科学系的教授,自1988年开始执教。他的研究领域是机电一体化、机器人学和计算智能,拥有12项专利并发表了超过150篇学术出版物。他在哈佛大学获得了工程科学专业的学士学位,在麻省理工学院热流体科学系获得了机械工程专业的硕士学位,在哥伦比亚大学获得了控制理论和网络理论专业的电机工程理学硕士学位,在麻省理工学院设计与控制系获得了机械工程专业的博士学位。他是机器人学方面的NSF青年研究员,担任过以下职务:飞利浦实验室高级研究员、飞利浦Natuurkundig实验室的访问科学家、美国桑迪亚国家实验室智能系统和机器人中心的访问学者、NASA格伦研究中心的NASA夏季教员、普林斯顿大学神经科学的访问学者、爱丁堡大学信息学院的杰出访问学者、香港大学的Hung Hing Ying杰出客座教授。他带领机器人团队参加了2007年DARPA城市挑战赛和2015年DARPA机器人挑战赛,并将继续致力于机器人的广泛应用。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
机器人操作系统(Robot Operating System,ROS)本质是机器人系统的中间件,可帮助开发人员编写机器人应用程序,现已被机器人公司、研究机构和大学广泛采用。本书主要介绍ROS框架的高级概念,特别适合已经熟悉ROS基本概念的读者。但是,第1章还是简要介绍了ROS的基本概念,以帮助初学者快速入门。读者将了解新机器人的软件包生成、机器人建模、设计等,以及利用ROS框架对机器人进行仿真、与ROS连接。这里使用的是高级的仿真软件和ROS工具,这些工具可以辅助机器人导航、控制和传感器可视化。最后,读者将学习如何使用ROS底层控制器、小节点(nodelet)和插件等重要概念。读者可以使用普通计算机来运行本书中的大部分示例,而无须任何特殊硬件。但是,在本书的某些章节中将讨论如何使用特殊硬件将ROS与外部传感器、驱动器和I/O开发板一起使用。
本书是按照如下顺序来组织的。在介绍了ROS的基本概念之后,开始讨论如何对机器人进行建模和仿真。Gazebo和V-REP仿真器将用于控制机器人建模并与之交互,还将用于连接机器人与MoveIt!和ROS导航软件包。然后讨论ROS插件、控制器和小节点。最后,本书还会讨论如何将Matlab和Simulink软件与ROS连接。
本书的读者对象
本书为有激情的机器人开发人员或想充分利用ROS功能的研究人员而写。本书也适合已经熟悉典型机器人应用的用户,或者想要进阶学习ROS,学习如何建模、构建、控制自己机器人的用户。如果你想轻松理解本书的所有内容,强烈建议你先掌握GNU/Linux和C++编程的基础知识。
本书主要内容
第1章介绍ROS的核心基本概念。
第2章解释如何使用ROS软件包。
第3章讨论两类机器人的设计:一类是七自由度(7-DOF)机械臂,另一类是差速驱动机器人。
第4章讨论7-DOF机械臂、差速轮式机器人和ROS控制器的仿真,这些控制器有助于控制Gazebo中的机器人关节。
第5章介绍如何使用V-REP仿真器和vrep_plugin将ROS连接到仿真场景中。然后讨论7-DOF机械臂和差速移动机器人的控制。
第6章介绍如何使用ROS MoveIt!和导航软件包集的现有功能,如机器人机械臂运动控制和机器人自主导航。
第7章展示ROS中的一些高级概念,例如ROS pluginlib、小节点和Gazebo插件。本章还将讨论每个概念的功能和应用,并通过一个示例介绍其工作原理。
第8章展示如何为类似于PR2的机器人编写基本的ROS控制器。在创建控制器后,我们将使用Gazebo中的PR2来运行控制器。与此同时,我们还将看到如何为RViz创建插件。
第9章讨论一些硬件组件(如传感器和执行器)与ROS的接口。我们将看到如何使用I/O开发板(如Arduino、树莓派和Odroid-XU4)与ROS的传感器通信。
第10章讨论如何使用ROS连接各种视觉传感器,并利用开源计算机视觉库(OpenCV)和点云库(PCL)与AR Markers一起对其进行编程。
第11章介绍如何构建具有差速驱动器配置的自主移动机器人,并将其与ROS连接。
第12章讨论MoveIt!的功能,例如碰撞规避,使用3D传感器进行感知、抓握、拾取和放置。在此之后,我们将学习如何将机器人控制器硬件与MoveIt!连接。
第13章讨论如何将Matlab和Simulink软件与ROS连接。
第14章帮助大家了解和安装ROS中的ROS-Industrial软件包。我们将学习如何为工业机器人开发MoveIt! IKFast插件。
第15章讨论如何在Eclipse IDE中设置ROS开发环境,并介绍ROS中的最佳实战经验与调试技巧。
如何学习本书
为了运行本书中的示例,你需要一台运行Linux系统的计算机。这里推荐安装的Linux发行版是Ubuntu 16.04,Debian 8也可以。建议计算机配置至少有4GB的内存和一款性能优异的处理器(Intel i系列)来执行Gazebo仿真和图像处理算法。
读者甚至可以在Windows系统上托管的虚拟机或VMware软件上安装Linux系统,在这样的虚拟系统中也可以工作。但这种选择的缺点是需要更多的计算资源来运行示例,并且当ROS与真实的硬件连接时,可能会遇到各种问题。
本书中使用的ROS版本是Kinetic Kame。需要的其他软件有V-REP仿真器、Git、Matlab和Simulink。
最后,某些章节要求读者将ROS与商用硬件连接,例如I/O开发板(Arduino、Odroid和树莓派)、视觉传感器(Kinect/Asus Xition Pro)和驱动器。你必须购买这些硬件才能运行本书中的一些示例,但这并不是学习ROS必须要购买的。
下载示例代码
你可以从www.packtpub.com通过个人账号下载本书的示例代码,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
本书的代码也在GitHub上托管,网址为https://github.com/PacktPublishing/Mastering-ROS-for-Robotics-Programming-Second-Edition。如果代码有更新的话,会将更新提交到GitHub代码仓库中。
除此之外,我们还在https://github.com/PacktPublishing/中提供了其他书籍和视频,这里还有一些其他代码,有兴趣就去看看吧!
下载彩图
我们还提供了一个PDF文件,其中包含本书中使用的所有截图和样图。可以在此处下载:http://www.packtpub.com/sites/default/files/downloads/MasteringROSforRoboticsProgrammingSecondEdition_ColorImages.pdf。
排版约定
在本书中使用了许多排版约定。
代码格式如下:
命令行输入或输出格式如下:
粗体:表示你看到的是新术语、重要单词或句子。例如,菜单或对话框中的单词会出现在文本中。下面就是一个示例:在主工具栏上,选择“File | Open Workspace”,然后选择代表ROS工作区的目录。
警告或重要说明标志。
提示和技巧标志。
---------------------------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的机器人(如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(Robot Operating System,机器人操作系统),是一个让机器人能够运作起来的开源程序框架。ROS诞生的初衷是能够为那些制作和使用机器人的人提供通用的软件平台。这个平台能够让人们更加便捷地分享代码与想法,这意味着你不再需要花费经年累月的时间去编写软件框架就能让你的机器人动起来!
ROS取得了巨大的成功。截止撰写本书之时,官方发行的ROS版本中有超过2000个软件包,并被600多人编写和维护。ROS支持大约80个市场上可以买到的机器人,我们还可以在至少1850篇学术文献中找到ROS的踪影。从此我们不再需要从零开始编写所有程序,特别是当要对众多ROS所支持的机器人中的一个进行开发时,我们可以更加专注于机器人技术本身,而不是“位操作”或者设备驱动。
ROS由许多部分所组成,包含如下这些:
1 一系列可以让你从传感器读取数据以及向电动机等执行机构发送指令的驱动程序,而且这些数据的格式都经过良好的抽象与定义。ROS支持非常多的主流硬件,包括越来越多市场上可以买到的机器人系统。
2 海量且日渐增多的基本机器人算法,让你能够轻松构建世界地图、在其中穿梭、表示并解析传感器数据、规划动作、操纵物体,以及实现许多其他功能。ROS在机器人研究社区中饱受欢迎,因此许多最前沿的算法现在都可以在ROS中找到。
3 充足的计算基础设施,使数据能够四处传递,让众多模块可以连接成一个复杂的机器人系统并帮助你整合算法。ROS天生的分布式架构让你能够轻松地将计算压力无缝地分担到多台计算机上。
4 一系列实用工具,使得对机器人及算法的可视化、错误行为的调试以及传感器数据的录制都变得非常容易。对机器人程序的调试是极为困难的,因此也正是这一系列丰富的工具使得ROS如此强大。
5 最后,ROS具有比其本身更为庞大的ROS生态系统,它的扩展资源众多,包含了一个记录整个框架方方面面的wiki文档,一个专门用于提问与解答的网站,通过该网站你可以寻求帮助并分享自己的所学,以及一个充满使用者与开发者的欣欣向荣的社区。
那么,为什么你需要学习ROS呢?最简单的答案就是,它将会为你节省时间。ROS包含了机器人软件系统的所有部分,没有它,你就只能自己一一编写。ROS使你能够更加专注于系统中你最关心的部分,而无须操心那些你不那么关注的部分。
为什么你需要读这本书?ROS的wiki文档中包含了大量内容,涉及框架中许多方面的详细教程。一个活跃的用户社区(http://answersrosorg)随时准备解答你的问题。为什么不直接通过这些资源学习ROS? 在本书中我们所做的就是以一种更加有序的方式将这些知识呈现给你,并给出容易理解的实例,使你知道如何使用ROS让你的实物或仿真机器人去做些有趣的事。我们还尝试通过提供技巧和提示来给予你各种指导,比如如何整合代码,如何在机器人行为不合预期时调试代码以及如何成为ROS社区的一员。
如果你不是资深程序员,学习ROS会有些吃力,系统中包含了分布式计算、多线程、事件驱动的编程以及深藏在系统底层的一大堆概念。如果你不怎么懂这些内容,你的学习曲线将会非常陡峭。本书通过介绍ROS的基本概念并给出在实物或仿真机器人中的常见应用实例来尽可能地使这条学习曲线变得平缓一些。
谁应该阅读本书
如果你想让你的机器人在现实世界中做一些事情,而又不想把时间浪费在“重新发明轮子”上,那么这本书就是为你准备的。ROS包含了让机器人运转起来所需要的基础架构以及用来驱动机器人做一些有趣事情的足够多的算法。
如果你对某些特别的方面比如路径规划等感兴趣,并且想在完整的机器人系统背景下研究它们,那么这本书就是为你准备的。本书将展示如何使用ROS提供的基础架构和算法来驱动机器人做一些有趣的事情以及如何用你自己的算法替换掉现有的算法。
如果你想要了解ROS基本的运转机制和用法,想要了解ROS大概能做哪些事情,但是又苦于wiki的内容太过庞杂,那么这本书也是为你准备的。我们将带领你了解ROS的运转机制和一些简单的工具。我们也会提供一些具体的、完整的例子,你可以基于这些例子进行开发,修改它们来实现自己的想法。
谁不适合阅读本书
虽然我们不想拒绝任何人阅读本书,但是本书并不是对所有人都适用的资源。我们对你使用的机器人做了一些隐含的假设。它们应该运行Linux,有很好的计算资源(至少相当于一台笔记本电脑)。它们有先进的传感器,比如Microsoft Kinect。它们应该是放在地上的,并且可能需要在实际环境中移动。如果你的机器人不满足上述这些要求,那么本书中的例子就不能立刻成功运行,尽管程序和工具本身并没有问题。
本书主要是关于ROS的,并不是关于机器人学的。尽管你可以从本书中学到一点机器人学相关的知识,但是我们不会深入地探讨ROS中包含的很多算法。如果你想获取更多关于机器人学的介绍,那么这本书不是为你准备的。
你将学到什么
本书想要广泛地介绍如何使用ROS对机器人进行编程。本书涵盖构成ROS核心的基本运转机制和简单工具,并将展示如何使用它们创建控制机器人的软件。我们将展示一些具体的例子,这些例子讲述了如何使用ROS控制你的机器人做一些有趣的事情。同时,我们将给出一些如何基于这些例子来创建你自己的机器人的建议。
除了技术内容之外,我们还将展示如何使用ROS巨大的生态系统,比如wiki和问答社区,以及如何成为全球ROS社区的一员,与全世界的其他机器人爱好者分享代码和新知识。
预备知识
在阅读和使用本书之前,你必须了解几件事情。由于ROS是一个软件框架,因此为了更好地了解ROS你非常有必要了解如何编程。虽然在ROS中可以使用很多种语言,但是在本书中我们使用Python。如果你不了解Python,那么很多代码对你来说就没多大意义了。幸运的是,Python是一门易于学习的语言!有很多很不错的书和免费的网站,你可以使用这些资源来学习Python,Python的官方网站是http://pythonorg。
最适合运行ROS的环境是Ubuntu Linux,有一些Linux的经验能够让学习轻松一点。我们在讲述过程中将会介绍一些必要的Linux相关内容,但是对文件系统、bash命令行以及至少一种编辑器有一些基本的了解将有利于你将更多的精力放在ROS相关的内容上。
尽管不是必要的,但是对机器人学有基本的了解也将有所帮助。了解一些机器人学所使用的基本数学知识,比如坐标变换、传动链等,对理解书中所讲述的一些ROS机制也很有帮助。再次强调,我们将简要介绍这些内容,但是如果你不熟悉这些东西,你可能要额外地学习、深入机器人学的相关文献来补充相关背景。
排版约定
斜体
表示新的术语、网址、邮件地址、目录、路径名、文件名以及文件扩展名。
等宽字体(Constant width)
表示程序代码,在正文中出现的代码中的元素,如变量名、函数名、命名空间、数据类型、环境变量、语句以及关键词等,也用来表示命令、命令行工具以及ROS的包、节点、话题等。
等宽加粗(Constant width bold)
表示命令以及其他一些需要用户完全按照字面输入的文字。
等宽斜体(Constant width italic)
表示需要用户根据自身情况替换的文字以及由上下文决定的一些值。
这个图标表示一般的注释。
这个图标表示建议或者小贴士。
这个图标表示警告。
代码示例的使用
一些补充材料(代码示例、练习等)可以从地址https://githubcom/osrf/rosbook获取。
本书的目的是帮助你完成工作。为了达到这个目的,上述链接指向的代码仓库中的代码根据Apache 20许可证是可用的,这一许可证允许你重用代码。
我们希望但是不强制你引用本书。一条引用通常包含书名、作者、出版商以及ISBN,如“Programming Robots with ROS by Morgan Quigley, Brian Gerkey, and William D Smart (O扲eilly) Copyright 2015 Morgan Quigley, Brian Gerkey, and William D Smart, 978-1-4493-2389-9”。
如果你感觉你对代码的利用超出了正常使用范围或上述许可范围,请联系我们:permissions@oreillycom。
Safari在线电子书
Safari Book Online是一个在线的电子图书馆,收录了大量当下热门的电子图书及配套的影像资料,涵盖商业的技术领域的各个方面。得到了技术专家、软件开发人员、网页设计师和商业人士的广泛使用和认可。通过它,你可以获取研究资料、解决难题、学习新知识和接受技术培训等。
Safari Books Online针对企业、政府和教育机构提供了不同的购买计划,你可以根据实际需求进行选购。
购买Safari Books Online服务后,你就可以通过在线数据库搜索访问数以千计的书籍、培训视频甚至是预出版的样书。这些资料来自于包括O扲eilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology等出版社。
如何联系我们
美国:
O扲eilly Media,Inc
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
本书也有一个配套网站,网站上的内容包括勘误表、代码示例以及一些与本书相关的额外信息。网站的地址是:http://bitly/prog_robots_w_ros。
如果有关于本书的技术性疑问,请发电子邮件至bookquestions@oreillycom。
关于本书的更多信息,如相关课程、会议、新闻等,请访问我们的网站http://wwworeillycom。
致谢
首先,也是最重要的,我们要感谢O扲eilly的三位编辑Mike Loukides、Meg Blanchette 以及Dawn Schanafelt。在本书写作过程中,他们表现出了极大的耐心和极高的责任心。我们还要感谢所有为本书提供反馈的人,尤其是Andreas Bihlmaier、Jon Bohren、Zach Dodds和Kat Scott。他们的评论和建议让本书变得更好。
当然,我们还要感谢所有帮助我们调试从而使ROS在我们的机器人上正常运行的人。Mike Ferguson提供了Fetch示例。来自开源机器人基金会(Open Source Robotics Foundation,OSRF)的Steve Peters、Nate Koenig以及John Hsu解答了一些Gazebo仿真的问题。William Woodall和Tully Foote(都来自OSRF)解答了很多很深入的ROS问题。
也感谢Dylan Jones在本书出版前的最后一刻找出了一个代码漏洞。
最后,我们要感谢全世界ROS社区的作者、维护者以及用户。如果没有他们的努力,ROS就不会发展成今天的样子,本书也不会出版。
---------------------------ROS机器人高效编程(原书第3版)---------------------------
本书第3版全面地介绍了ROS和各种工具。ROS是一个先进的机器人操作系统框架,目前已有数百个研究团体和公司将其应用在机器人行业中。更重要的是,对于机器人技术的非专业人士和学生来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何使用ROS的基本工具和框架中不同的功能。
在阅读本书的过程中无须使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户购买得起的设备,同时涵盖了在机器人研究中最典型的传感器和执行器。
最后,展示ROS具有使整个机器人在实际或虚拟环境中工作的能力。你将学习如何创建自己的机器人并通过Gazebo仿真环境集成它。此外,如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。本书将带你从不同方面探索如何创建机器人,例如使用计算机视觉或点云分析传感器感知世界,使用强大的导航功能包集在环境中实现导航,甚至能够用MoveIt!包控制机械臂与周围环境交互。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理,我们衷心希望你能全面了解ROS在开发机器人系统时所提供的无限可能性。
主要内容
第1章介绍安装ROS最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROS Kinetic。这一章还会说明如何从Debian包安装或从源代码进行编译安装,以及在虚拟机、Docker和ARM CPU中安装。
第2章讨论ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍在ROS中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器等传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第5章是关于ROS导航功能包集中的其中一章。该章介绍如何为方便机器人使用导航功能包集进行初始化配置。然后用几个例子对导航功能包集进行说明。
第6章延续第5章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和RViz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第7章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置、简单的运动规划等任务的演示示例。
第8章介绍ROS与现实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第9章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,就可以使用ROS的标定工具标定摄像头。该章会详细介绍和说明什么是图像管道,讨论如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第10章将展示如何在ROS节点中使用点云库(Point Cloud Library,PCL)。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu 16.04 LTS。这样你可以根据第1章的内容安装ROS Kinetic。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,最好有足够的外围接口,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-core Debian包),以便从本书提供的源代码中复制软件库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS如何帮助开发人员完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这三章直接阅读后面的章节。
源代码和彩色图片下载
本书源代码可以从华章官网www.hzbook.com下载。
---------------------------ROS机器人程序设计(原书第2版)---------------------------
本书第2版概括性地介绍了ROS系统的各种工具。ROS是一个先进的机器人操作系统框架,现今已有数百个研究团体和公司将其应用在机器人行业中。对于机器人技术的非专业人士来说,它也相对容易上手。在本书中,你将了解如何安装ROS,如何开始使用ROS的基本工具,以及最终如何应用先进的计算机视觉和导航工具。
在阅读本书的过程中无需使用任何特殊的设备。书中每一章都附带了一系列的源代码示例和教程,你可以在自己的计算机上运行。这是你唯一需要做的事情。
当然,我们还会告诉你如何使用硬件,这样你可以将你的算法应用到现实环境中。我们在选择设备时特意选择一些业余用户负担得起的设备,同时涵盖了在机器人研究中最典型的传感器或执行器。
最后,由于ROS系统的存在使得整个机器人具备在虚拟环境中工作的能力。你将学习如何创建自己的机器人并结合功能强大的导航功能包集。此外如果使用Gazebo仿真环境,你将能够在虚拟环境中运行一切。第2版在最后增加了一章,讲如何使用“Move it!”包控制机械臂执行抓取任务。读完本书后,你会发现已经可以使用ROS机器人进行工作了,并理解其背后的原理。
主要内容
第1章介绍安装ROS系统最简单的方法,以及如何在不同平台上安装ROS,本书使用的版本是ROS Hydro。这一章还会说明如何从Debian软件包安装或从源代码进行编译安装,以及在虚拟机和ARM CPU中安装。
第2章涉及ROS框架及相关的概念和工具。该章介绍节点、主题和服务,以及如何使用它们,还将通过一系列示例说明如何调试一个节点或利用可视化方法直观地查看通过主题发布的消息。
第3章进一步展示ROS强大的调试工具,以及通过对节点主题的图形化将节点间的通信数据可视化。ROS提供了一个日志记录API来轻松地诊断节点的问题。事实上,在使用过程中,我们会看到一些功能强大的图形化工具(如rqt_console和rqt_graph),以及可视化接口(如rqt_plot和rviz)。最后介绍如何使用rosbag和rqt_bag记录并回放消息。
第4章介绍ROS系统与真实世界如何连接。这一章介绍在ROS下使用的一些常见传感器和执行器,如激光雷达、伺服电动机、摄像头、RGB-D传感器、GPS等。此外,还会解释如何使用嵌入式系统与微控制器(例如非常流行的Arduino开发板)。
第5章介绍ROS对摄像头和计算机视觉任务的支持。首先使用FireWire和USB摄像头驱动程序将摄像头连接到计算机并采集图像。然后,你就可以使用ROS的标定工具标定你的摄像头。我们会详细介绍和说明什么是图像管道,学习如何使用集成了OpenCV的多个机器视觉API。最后,安装并使用一个视觉里程计软件。
第6章将展示如何在ROS节点中使用点云库。该章从基本功能入手,如读或写PCL数据片段以及发布或订阅这些消息所必需的转换。然后,将在不同节点间创建一个管道来处理3D数据,以及使用PCL进行缩减采样、过滤和搜索特征点。
第7章介绍在ROS系统中实现机器人的第一步是创建一个机器人模型,包括在Gazebo仿真环境中如何从头开始对一个机器人进行建模和仿真,并使其在仿真环境中运行。你也可以仿真摄像头和激光测距传感器,为后续学习如何使用ROS的导航功能包集和其他工具奠定基础。
第8章是两章关于ROS导航功能包集中的第1章。该章介绍如何对你的机器人进行使用导航功能包集所需的初始化配置。然后用几个例子对导航功能包集进行说明。
第9章延续第8章的内容,介绍如何使用导航功能包集使机器人有效地自主导航。该章介绍使用ROS的Gazebo仿真环境和rviz创建一个虚拟环境,在其中构建地图、定位机器人并用障碍回避做路径规划。
第10章讨论ROS中移动机器人机械臂的一个工具包。该章包含安装这个包所需要的文档,以及使用MoveIt!操作机械臂进行抓取、放置,简单的运动规划等任务的演示示例。
预备知识
我们写作本书的目的是让每位读者都可以完成本书的学习并运行示例代码。基本上,你只需要在计算机上安装一个Linux发行版。虽然每个Linux发行版应该都能使用,但还是建议你使用Ubuntu 12.04 LTS。这样你可以根据第1章的内容安装ROS Hydro。
对于ROS的这一版本,你将需要Ubuntu 14.04之前的版本,因为之后的版本已经不再支持Hydro了。
对于硬件要求,一般来说,任何台式计算机或笔记本电脑都满足。但是,最好使用独立显卡来运行Gazebo仿真环境。此外,如果有足够的外围接口将会更好,因为这样你可以连接几个传感器和执行器,包括摄像头和Arduino开发板。
你还需要Git(git-core Debian软件包),以便从本书提供的源代码中复制库。同样,你需要具备Bash命令行、GNU/Linux工具的基本知识和一些C/C++编程技巧。
目标读者
本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS系统如何帮助完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这部分直接阅读后面的章节。
源代码和彩色图片下载
可以从你在http://www.packtpub.com中的账户下载所有已购买的Packt Publishing出版的书籍的示例代码文件。如果你在其他地方购买了这本书,可以访问http://www.packtpub.com/support并注册,文件会通过电子邮件直接发送给你。还可以从https://github.com/AaronMR/ROS_Book_Hydro下载源代码文件。
我们同时提供了本书所有彩色的屏幕截图、对话框的PDF文件,这些彩色图片能够更好地帮助你理解输出的变化。可以从http://www.packtpub.com/sites/default/files/downloads/
7580OS_ColorImages.pdf下载这个文件。
序言
---------------------------ROS机器人开发实践---------------------------
推荐序一
“古月”容易让人想到古龙笔下的大侠。
大侠的特质是:开山建宗,随而遁影山林,空余武林纷说大侠的故事。
古月在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)暑期学校创办人
推荐序二
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)负责人
星火计划联合发起人
推荐序三
近年来机器人技术发展越发成熟,越来越多的机器人技术应用在不同的领域。基于机器人技术开发出来的产品推陈出新,如物流机器人、家庭陪护机器人、协作机器人、送餐机器人、清洁机器人、无人机、无人汽车等,可谓百花齐放。大众对机器人的认知及学习的兴趣也不断提升,对机器人相关的技术变得更为关注,而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
---------------------------ROS机器人高效编程(原书第3版)---------------------------
推荐序一
2006年,在好奇心的驱使下,一帮人走在一起,组建了一个机器人研究实验室Willow Garage。他们利用开源软件吸引他人,使人们加入一个创造个人机器人的宏伟计划中。机器人操作系统(ROS)正是这一宏伟计划的一部分。
ROS打开了一个潘多拉魔盒,可是很多人还没有做好准备,还完全没有意识到是怎么回事,就不得不与ROS牵连在一起,卷入到一个洪流中。刘锦涛博士和张瑞雷博士将本书翻译成中文,帮助大家突破语言障碍,从而在洪流中更好地奋勇前进。
刘锦涛博士和张瑞雷博士都是易科(Exbot)机器人实验室的成员,是机器人技术普及的积极推动者。从2010开始,易科机器人实验室利用互联网、社交网络、博客,积极开展机器人技术和ROS的在线教育、互动问答,使上万人受益。
2013年,当我回到国内开始我的职业生涯时,第一件事就是寻找机器人相关的研究者和爱好者,也是那时,通过易科机器人实验室建立的QQ群,结识了后来一帮志同道合的老师、学生和朋友。
2015年,我们实验室组织了全国第一届机器人操作系统暑期学校,希望有更多的人通过线下的互动促进交流,激发合作的热情,碰撞出创业的激情。我们的活动信息也通过易科机器人实验室建立的社交网络传递到全国的各个角落。
在本书再版之际,我想,对所有热爱科技,热爱机器人技术,热爱这块我们所赖以生存的土地的人来说,无论未来多么不可预测,只要像刘锦涛博士和张瑞雷博士这样,不懈地努力,大家团结在一起,都会成为洪流中的勇士。
张新宇博士
华东师范大学智能机器人运动与视觉实验室负责人
机器人操作系统(ROS)暑期学校创办人
推荐序二
记得第一次接触ROS的时候我还在学校做研究,是当时与一些海外学者交流时得知有这个专为机器人设计的操作系统。得知其特色及相关工具后,我非常兴奋,一心想把ROS用在我们最新研发的机器人上,于是就马上动手玩起来。由于当时ROS刚处在起步阶段,说明文档不太全面,同时社区支持又很少,不知道经过多少折腾才好不容易把它运行起来。体验后发现它的设计框架确实很合适作为机器人敏捷开发工具,算法及控制等代码都能很容易复用,减少了很多重复性的工作。但奈何当时的功能包不多,而且系统对运算资源要求高,最终也没有在当时的机器人项目中使用上。
由于其开源性以及对商用友好的版权协议,ROS很快得到越来越多的关注及支持。现在,ROS已有飞快的发展,越来越多机器人相关的软件工具亦加入ROS的行列。国外一些商用的机器人也开始支持ROS,甚至基于ROS进行开发。相信这个趋势会一直持续下去并且蔓延到全球各地。而我亦深深体会到国内对ROS的关注也在近年有显著的上升。
几年前,在国内学习ROS可谓孤军作战,身边没几个人听说过ROS,而且只能从国外网站上学习ROS的相关知识,完全没有中文数据可以查看。幸好在国内也有不少有心人积极推动国内ROS的发展,不遗余力地对国外ROS相关的文章进行翻译,并且发表一些原创的文章,丰富ROS的中文资源,使学习ROS变得更方便。
我与本书译者通过共同举办ROS国内培训课程而结缘。过去一年我们一起推动的国内线下ROS实战培训课程星火计划已遍布全国,渐见成效。他在推动ROS在国内发展方面也有着举足轻重的地位,运营着国内著名的ROS交流社区——易科机器人实验室(exbot.net)。本书亦是他贡献ROS中文社群的作品之一。而本书的作者同样是ROS界的权威,有丰富的ROS实战经验,使用ROS进行过多种机器人的开发。书中从ROS的架构概念到常用的调试工具、功能包及传感器的信息处理都有所涉及,是一本ROS入门必看书。希望本书能帮助你快速进入ROS的世界,探索ROS的精彩。
林天麟博士
NXROBO创始人&CEO
---------------------------ROS机器人程序设计(原书第2版)---------------------------
推荐序一
21世纪是什么样的世纪?是物联网的世纪?是VR的世纪?也许吧,但我更相信21世纪是机器人的世纪。
目前,我国已经步入经济转型的拐点区间,人口红利越来越难以支撑中国经济的发展和进步。在很多行业都已经开始了机器换人、生产工艺升级换代的步伐。工信部、发改委、财政部日前联合印发了《机器人产业发展规划(2016—2020年)》。这份规划指出:“到2020年,我国工业机器人年产量达到10万台,其中六轴及以上机器人达到5万台以上;服务机器人年销售收入超过300亿元,在助老、助残、医疗康复等领域实现小批量生产及应用;要培育3家以上的龙头产业,打造5个以上机器人配套产业集群;工业机器人平均无故障时间要达到8万小时;智能机器人实现创新应用。”从这个规划中可以看出,机器人未来的政策空间和市场发展空间都是非常巨大的。一方面,发展工业机器人在满足我国制造业的转型升级、提质增效,实现“中国制造2025”等方面具有极为重大的意义,是全面推进实施制造强国战略的重要一步。另一方面,从服务机器人来说,也要满足未来市场需求的增长。首先,这包括了基本生活需求,比如说养老、助老、助残等。其次是国家安全需求,比如救灾、抢险、海底勘探、航天、国防。最后还有家庭服务和娱乐机器人,比如娱乐、儿童教育、智能家居应用等。同时,科技部目前也在进行“十三五”科技创新规划战略研究,根据已经披露的内容,其中对机器人(尤其是服务机器人)非常重视,并会在近期遴选并启动一批相应的重大科技项目。
也许看完上面这些,你会觉得这更像是新闻描述,机器人产业真的这么火爆吗?当然。即使刨除工业机器人,只谈其他的智能机器人或服务机器人,这也是一个相当庞大的产业。例如,目前世界上最大的服务机器人公司应该还是美国的直觉外科公司。他们生产的达芬奇机器人系统在全世界已经应用了3000余套,其完成的手术超过千万例。由机器人完成的各类微创手术让无数患者获得新生。这家公司的市值超过300亿美元。中国目前估值最高的机器人公司是大疆创新,其年营收额已经超过10亿美元,估值超过百亿美元。要知道,10年前这家公司刚刚在深圳创立时,还比较弱小。因此,相信机器人产业在未来的前景一定非常广阔。
但是我们也注意到在军用国防、救灾救援、养老、家庭服务、儿童教育等领域,至今没有一个世界级的机器人公司存在。有很多爱好者都希望自己能够制造一个智能轮椅、一个智能儿童教育机器人或是一个家庭服务机器人,也许这样的机器人会像乔布斯和沃兹尼亚克在车库里做出的苹果电脑一样改变世界。但我们看到的很多人,自己只是机械工程师、电气工程师或者自动控制工程师,开发一个控制机器人的软件系统是遥不可及的事情;又或者自己虽然是软件工程师,但是并不知道如何控制和驱动底层设备。这要怎么办呢?没关系, ROS机器人操作系统可以帮忙。
ROS最初是作为科研辅助工具由斯坦福大学开发的。类似的机器人操作系统在世界各国还有很多。有些操作系统面向实时机器人控制,有些操作系统面向机器人仿真,有些操作系统面向用户交互。这些操作系统大部分都相对封闭,各成体系,没有在学术界和产业界造成影响。而由于ROS极大的开放性和包容性,它能够兼容其他机器人开发工具、仿真工具和操作系统,使之融为一体。这使得ROS不断发展壮大,并成为应用和影响力最广泛的机器人软件平台。
随着ROS 2.0的开发,ROS能够兼容除Linux之外更多的操作系统,如Windows、Android;能够支持从工业计算机到Adruino开发板等各类型的硬件;能够采集RGB-D摄像头、普通摄像头和各种类型的传感器数据;能够驱动类人形机器人、四轴飞行器等各类型的机器人。而且新版本的ROS在采用SOA架构的基础上,集成了MVC框架,更加有利于机器人人机交互界面的开发与机器人控制。
学习ROS,本身就是掌握一把通往未来的钥匙。自从本人2012年翻译本书第1版之后,关于ROS的书籍也渐渐多了起来。但和其他书籍相比,本书经过了时间的检验,第2版从内容到示例对学习ROS都更有帮助。希望大家都能够成为机器人软件设计方面的专家。希望在中国的机器人设计领域能够出现新的领军人物,将中国的机器人带入世界一流行列。
刘品杰,本书第1版译者
推荐序二
记得第一次接触ROS的时候我还在学校做研究,当时跟一些海外学者交流时得知有这个专为机器人设计的操作系统。我很是兴奋,一心想把ROS用在我们最新研发的机器人上,于是就马上动手玩起来。由于当时ROS尚在起步阶段,说明文档不太全面,同时社区支持又很少,不知道经过多少折腾才好不容易把它运行起来。体验后发现它的设计框架确实很适合作为机器人敏捷开发工具——算法及控制等代码很容易被复用,避免了很多重复劳动。但奈何当时的功能包不多,而且系统对运算资源要求高,最终没有用在当时的机器人项目上。
由于其开源性以及对商用友好的版权协议,ROS很快得到越来越多的关注及支持。现在ROS已有飞快的发展,越来越多机器人相关的软件工具亦加入ROS的行列。国外一些商用的机器人也开始支持ROS系统,甚至基于ROS进行开发。相信这个趋势会一直持续下去并会蔓延到世界各地。而我亦深深体会到国内对ROS的关注在近年有显著的上升。
从前在国内学习ROS可谓孤军作战,身边没几个人听说过ROS,而且只能从国外网站学习ROS的相关知识,完全没有中文的资料可以查看。幸好国内有不少有心人积极推动ROS的发展,不遗余力地对国外ROS相关的文章进行翻译,并且发表一些原创的教学文章,丰富ROS的中文资源,这使学习ROS变得更方便。
我与本书译者通过共同举办ROS国内推广课程而结缘。他对推动ROS在国内的发展起到了举足轻重的作用,并运营着国内著名的ROS交流社区。本书亦是他贡献ROS中文社群的作品之一。而本书的作者同样是ROS界的权威,有丰富的ROS实战经验,使用ROS进行过多种机器人的开发。书中从ROS的架构概念到常用的调试工具、功能包及传感器的信息处理都有所涉及,是ROS入门必看书之一。希望本书能让你快速进入ROS的世界,探索ROS的精彩。
林天麟,博士,NXROBO创始人& CEO
译者序
机器人对于现代人类而言并不陌生和神秘,它在百年前的科幻小说中首次出现,而现在已经逐步进入人类生活的方方面面,机器时代即将到来!
智能机器人的程序究竟是如何设计出来的呢?
智能机器人需要具备强健的“肢”、明亮的“眼”、灵巧的“嘴”以及聪慧的“脑”,这一切的实现实际上涉及诸多技术领域,需要艰辛的设计、开发与调试过程,必然会遇到棘手的问题和挑战。而一个小型的开发团队难以完成机器人各个方面的开发工作,因而需要一套合作开发的框架与模式,以期能够快速集成已有的功能,省却重复劳动的时间。早在2008年,我们在与澳大利亚的布劳恩教授交流时,就得知他们开发了一套商业化的“RoBIOS”机器人操作系统,这套系统将一些常用的机器人底层功能进行了封装,可极大简化高级功能的开发。据他们介绍,这是最早的“机器人操作系统”,但由于产品不开源且价格昂贵,我们最终未能一试为快。后来在网络中不断地寻觅,最终发现了ROS,由于其开源、开放的特性,一下子就引起了我们极大的兴趣。
我们于2010年建立了易科机器人QQ群进行讨论,从而结识了国内最早期的一些机器人研究者和ROS探索者。由于早期相关资料非常匮乏,我们于2012年创建了博客(blog.exbot.net)以进行技术分享与交流。易科机器人开发组成员在此期间贡献了大量的教程和开发笔记,在此向他们的无私奉献表示感谢与敬意!近年来,随着机器人的迅猛发展,ROS得到了更为广泛的使用,国内也出现了一些优秀的项目,包括“星火计划”ROS公开课(blog.exbot.net/spark)、“HandsFree”ROS机器人开发平台(wiki.exbot.net)等。
出版界近年来也是硕果累累,本书第1版便是国内第一本ROS译著,由于实用性强,已经多次重印。第2版针对近年来ROS的最新发展,对书中部分内容进行了修订,并增加了第6章和第10章。本书涵盖了使用ROS进行机器人编程的最新知识与方法,通过ROS编程实践能够帮助你理解机器人系统设计与应用的现实问题。在机器人开发实践中,我们认为除了成功的喜悦外,还看到机器人学目前所处的发展阶段:核心技术尚未成熟、诸多功能尚不完备、bug多……但我们相信,有了ROS的开源精神和完备的合作开发框架,很多问题会迎刃而解。唯一迫切需要的就是期待你加入机器的开发和研究中来,一起推动开源机器人技术的发展与普及!
本书第2版与第1版的重叠部分主要沿用了刘品杰在第1版中的翻译,个别词汇根据习惯进行了修改。具体来说,第1至5章和第10章由张瑞雷翻译,第6章由张波翻译,第7至9章由刘锦涛翻译,吴中红和李静老师对全书进行了审阅,最后由刘锦涛对全书进行了修改润色和统稿整理。感谢杨维保、马文科等人对本书提出的修改建议!
我们将会在books.exbot.net发布本书的其他相关资源。
在2016年创办的星火计划ROS公开课以及华东师范大学ROS暑期学校等活动中,我们邀请古月一起合作进行了多次授课。他不仅仅讲课深入浅出,每次在实践环节小伙伴们调试机器人时,常常会被各种“坑”折磨得焦头烂额、欲哭无泪,当小伙伴们含泪请教古月老师且自己还没讲清楚情况时,古月仅扫一眼,马上就会胸有成竹地说:“是不是这个现象?你应该这么解决……”此情此景,让我不由得想起了一句话:“今天你遇到的坑,都是我当年走过的路。”可见古月不仅文笔好,实战能力也是超群。
后来也多次得知他创业繁忙,心中也暗自揣度出书的事情恐怕是要搁浅了。然而一直到2017年12月26日,突然收到古月发的一条信息。
“Hi,Top,还记得两年前筹备的那本书吗?现在终于写完了,希望邀请您写一个推荐序,不知是否方便?”
哇,这可真是大惊喜啊!我连忙打开电脑下载邮件,并将文件打印装订成书,放下手头的工作,重启“ROS探索之旅”,几个晚上看下来总体感觉如下。
首先,书的内容主要源自古月个人项目开发的经验习得,书名中的“实践”二字恰如其分!其次,书虽是源自《ROS探索总结》系列博文,但也绝不是博文的简单汇集,不仅内容上有了非常大的充实(增加了多个新的章节)和更新(跟踪至2017年12月ROS的最新进展),而且在结构编排上也更适合阅读和上机操作。厚厚的书稿承载着作者满满的诚意,除去国外某两本由ROS论文合集组成的图书,本书也是目前为止国内外已出版的内容最丰富的一本ROS相关图书。可见作者为此书花费了大量的心血!最后,作者对书中的示例代码进行了认真的调试,也做了大量的修改和注释。
作为人工智能的综合实体平台,当前阻碍机器人实现大规模应用的一项主要障碍就是软硬的不标准化(只能专用,无法通用)。每每针对某个特定应用场景设计机器人时,都需要花费大量成本和努力来对机器人进行设计和编程。即使完成之后,如果需要对机器人功能进行一个很小的改动,整个系统都需要进行成本很高的重新设计和开发,显然这是不符合可持续和可继承要求的,其限制了机器人的大规模应用与推广。
正如60年前软件行业放弃了从头编写程序的工作模式,ROS的出现是机器人开发的一场革命。如同从软件库和模块开始构建软件一样,通过ROS可以将机器人的标准算法例程化、软件模块化、成果共享化,后人可通过组合软件库和模块来实现十分复杂的功能。ROS有效地降低了工程的复杂度和工作量,让我们不仅可以很快地搭建出机器人系统,而且能够实现大型团队的协同工作与成果复用。这也正是我们努力推广ROS的主要动因。
愿与大家一同享受探索的欢喜!
刘锦涛(Top)博士
易科机器人实验室(ExBot Robotics Lab)负责人
星火计划联合发起人
推荐序三
近年来机器人技术发展越发成熟,越来越多的机器人技术应用在不同的领域。基于机器人技术开发出来的产品推陈出新,如物流机器人、家庭陪护机器人、协作机器人、送餐机器人、清洁机器人、无人机、无人汽车等,可谓百花齐放。大众对机器人的认知及学习的兴趣也不断提升,对机器人相关的技术变得更为关注,而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
---------------------------ROS机器人高效编程(原书第3版)---------------------------
推荐序一
2006年,在好奇心的驱使下,一帮人走在一起,组建了一个机器人研究实验室Willow Garage。他们利用开源软件吸引他人,使人们加入一个创造个人机器人的宏伟计划中。机器人操作系统(ROS)正是这一宏伟计划的一部分。
ROS打开了一个潘多拉魔盒,可是很多人还没有做好准备,还完全没有意识到是怎么回事,就不得不与ROS牵连在一起,卷入到一个洪流中。刘锦涛博士和张瑞雷博士将本书翻译成中文,帮助大家突破语言障碍,从而在洪流中更好地奋勇前进。
刘锦涛博士和张瑞雷博士都是易科(Exbot)机器人实验室的成员,是机器人技术普及的积极推动者。从2010开始,易科机器人实验室利用互联网、社交网络、博客,积极开展机器人技术和ROS的在线教育、互动问答,使上万人受益。
2013年,当我回到国内开始我的职业生涯时,第一件事就是寻找机器人相关的研究者和爱好者,也是那时,通过易科机器人实验室建立的QQ群,结识了后来一帮志同道合的老师、学生和朋友。
2015年,我们实验室组织了全国第一届机器人操作系统暑期学校,希望有更多的人通过线下的互动促进交流,激发合作的热情,碰撞出创业的激情。我们的活动信息也通过易科机器人实验室建立的社交网络传递到全国的各个角落。
在本书再版之际,我想,对所有热爱科技,热爱机器人技术,热爱这块我们所赖以生存的土地的人来说,无论未来多么不可预测,只要像刘锦涛博士和张瑞雷博士这样,不懈地努力,大家团结在一起,都会成为洪流中的勇士。
张新宇博士
华东师范大学智能机器人运动与视觉实验室负责人
机器人操作系统(ROS)暑期学校创办人
推荐序二
记得第一次接触ROS的时候我还在学校做研究,是当时与一些海外学者交流时得知有这个专为机器人设计的操作系统。得知其特色及相关工具后,我非常兴奋,一心想把ROS用在我们最新研发的机器人上,于是就马上动手玩起来。由于当时ROS刚处在起步阶段,说明文档不太全面,同时社区支持又很少,不知道经过多少折腾才好不容易把它运行起来。体验后发现它的设计框架确实很合适作为机器人敏捷开发工具,算法及控制等代码都能很容易复用,减少了很多重复性的工作。但奈何当时的功能包不多,而且系统对运算资源要求高,最终也没有在当时的机器人项目中使用上。
由于其开源性以及对商用友好的版权协议,ROS很快得到越来越多的关注及支持。现在,ROS已有飞快的发展,越来越多机器人相关的软件工具亦加入ROS的行列。国外一些商用的机器人也开始支持ROS,甚至基于ROS进行开发。相信这个趋势会一直持续下去并且蔓延到全球各地。而我亦深深体会到国内对ROS的关注也在近年有显著的上升。
几年前,在国内学习ROS可谓孤军作战,身边没几个人听说过ROS,而且只能从国外网站上学习ROS的相关知识,完全没有中文数据可以查看。幸好在国内也有不少有心人积极推动国内ROS的发展,不遗余力地对国外ROS相关的文章进行翻译,并且发表一些原创的文章,丰富ROS的中文资源,使学习ROS变得更方便。
我与本书译者通过共同举办ROS国内培训课程而结缘。过去一年我们一起推动的国内线下ROS实战培训课程星火计划已遍布全国,渐见成效。他在推动ROS在国内发展方面也有着举足轻重的地位,运营着国内著名的ROS交流社区——易科机器人实验室(exbot.net)。本书亦是他贡献ROS中文社群的作品之一。而本书的作者同样是ROS界的权威,有丰富的ROS实战经验,使用ROS进行过多种机器人的开发。书中从ROS的架构概念到常用的调试工具、功能包及传感器的信息处理都有所涉及,是一本ROS入门必看书。希望本书能帮助你快速进入ROS的世界,探索ROS的精彩。
林天麟博士
NXROBO创始人&CEO
---------------------------ROS机器人程序设计(原书第2版)---------------------------
推荐序一
21世纪是什么样的世纪?是物联网的世纪?是VR的世纪?也许吧,但我更相信21世纪是机器人的世纪。
目前,我国已经步入经济转型的拐点区间,人口红利越来越难以支撑中国经济的发展和进步。在很多行业都已经开始了机器换人、生产工艺升级换代的步伐。工信部、发改委、财政部日前联合印发了《机器人产业发展规划(2016—2020年)》。这份规划指出:“到2020年,我国工业机器人年产量达到10万台,其中六轴及以上机器人达到5万台以上;服务机器人年销售收入超过300亿元,在助老、助残、医疗康复等领域实现小批量生产及应用;要培育3家以上的龙头产业,打造5个以上机器人配套产业集群;工业机器人平均无故障时间要达到8万小时;智能机器人实现创新应用。”从这个规划中可以看出,机器人未来的政策空间和市场发展空间都是非常巨大的。一方面,发展工业机器人在满足我国制造业的转型升级、提质增效,实现“中国制造2025”等方面具有极为重大的意义,是全面推进实施制造强国战略的重要一步。另一方面,从服务机器人来说,也要满足未来市场需求的增长。首先,这包括了基本生活需求,比如说养老、助老、助残等。其次是国家安全需求,比如救灾、抢险、海底勘探、航天、国防。最后还有家庭服务和娱乐机器人,比如娱乐、儿童教育、智能家居应用等。同时,科技部目前也在进行“十三五”科技创新规划战略研究,根据已经披露的内容,其中对机器人(尤其是服务机器人)非常重视,并会在近期遴选并启动一批相应的重大科技项目。
也许看完上面这些,你会觉得这更像是新闻描述,机器人产业真的这么火爆吗?当然。即使刨除工业机器人,只谈其他的智能机器人或服务机器人,这也是一个相当庞大的产业。例如,目前世界上最大的服务机器人公司应该还是美国的直觉外科公司。他们生产的达芬奇机器人系统在全世界已经应用了3000余套,其完成的手术超过千万例。由机器人完成的各类微创手术让无数患者获得新生。这家公司的市值超过300亿美元。中国目前估值最高的机器人公司是大疆创新,其年营收额已经超过10亿美元,估值超过百亿美元。要知道,10年前这家公司刚刚在深圳创立时,还比较弱小。因此,相信机器人产业在未来的前景一定非常广阔。
但是我们也注意到在军用国防、救灾救援、养老、家庭服务、儿童教育等领域,至今没有一个世界级的机器人公司存在。有很多爱好者都希望自己能够制造一个智能轮椅、一个智能儿童教育机器人或是一个家庭服务机器人,也许这样的机器人会像乔布斯和沃兹尼亚克在车库里做出的苹果电脑一样改变世界。但我们看到的很多人,自己只是机械工程师、电气工程师或者自动控制工程师,开发一个控制机器人的软件系统是遥不可及的事情;又或者自己虽然是软件工程师,但是并不知道如何控制和驱动底层设备。这要怎么办呢?没关系, ROS机器人操作系统可以帮忙。
ROS最初是作为科研辅助工具由斯坦福大学开发的。类似的机器人操作系统在世界各国还有很多。有些操作系统面向实时机器人控制,有些操作系统面向机器人仿真,有些操作系统面向用户交互。这些操作系统大部分都相对封闭,各成体系,没有在学术界和产业界造成影响。而由于ROS极大的开放性和包容性,它能够兼容其他机器人开发工具、仿真工具和操作系统,使之融为一体。这使得ROS不断发展壮大,并成为应用和影响力最广泛的机器人软件平台。
随着ROS 2.0的开发,ROS能够兼容除Linux之外更多的操作系统,如Windows、Android;能够支持从工业计算机到Adruino开发板等各类型的硬件;能够采集RGB-D摄像头、普通摄像头和各种类型的传感器数据;能够驱动类人形机器人、四轴飞行器等各类型的机器人。而且新版本的ROS在采用SOA架构的基础上,集成了MVC框架,更加有利于机器人人机交互界面的开发与机器人控制。
学习ROS,本身就是掌握一把通往未来的钥匙。自从本人2012年翻译本书第1版之后,关于ROS的书籍也渐渐多了起来。但和其他书籍相比,本书经过了时间的检验,第2版从内容到示例对学习ROS都更有帮助。希望大家都能够成为机器人软件设计方面的专家。希望在中国的机器人设计领域能够出现新的领军人物,将中国的机器人带入世界一流行列。
刘品杰,本书第1版译者
推荐序二
记得第一次接触ROS的时候我还在学校做研究,当时跟一些海外学者交流时得知有这个专为机器人设计的操作系统。我很是兴奋,一心想把ROS用在我们最新研发的机器人上,于是就马上动手玩起来。由于当时ROS尚在起步阶段,说明文档不太全面,同时社区支持又很少,不知道经过多少折腾才好不容易把它运行起来。体验后发现它的设计框架确实很适合作为机器人敏捷开发工具——算法及控制等代码很容易被复用,避免了很多重复劳动。但奈何当时的功能包不多,而且系统对运算资源要求高,最终没有用在当时的机器人项目上。
由于其开源性以及对商用友好的版权协议,ROS很快得到越来越多的关注及支持。现在ROS已有飞快的发展,越来越多机器人相关的软件工具亦加入ROS的行列。国外一些商用的机器人也开始支持ROS系统,甚至基于ROS进行开发。相信这个趋势会一直持续下去并会蔓延到世界各地。而我亦深深体会到国内对ROS的关注在近年有显著的上升。
从前在国内学习ROS可谓孤军作战,身边没几个人听说过ROS,而且只能从国外网站学习ROS的相关知识,完全没有中文的资料可以查看。幸好国内有不少有心人积极推动ROS的发展,不遗余力地对国外ROS相关的文章进行翻译,并且发表一些原创的教学文章,丰富ROS的中文资源,这使学习ROS变得更方便。
我与本书译者通过共同举办ROS国内推广课程而结缘。他对推动ROS在国内的发展起到了举足轻重的作用,并运营着国内著名的ROS交流社区。本书亦是他贡献ROS中文社群的作品之一。而本书的作者同样是ROS界的权威,有丰富的ROS实战经验,使用ROS进行过多种机器人的开发。书中从ROS的架构概念到常用的调试工具、功能包及传感器的信息处理都有所涉及,是ROS入门必看书之一。希望本书能让你快速进入ROS的世界,探索ROS的精彩。
林天麟,博士,NXROBO创始人& CEO
译者序
机器人对于现代人类而言并不陌生和神秘,它在百年前的科幻小说中首次出现,而现在已经逐步进入人类生活的方方面面,机器时代即将到来!
智能机器人的程序究竟是如何设计出来的呢?
智能机器人需要具备强健的“肢”、明亮的“眼”、灵巧的“嘴”以及聪慧的“脑”,这一切的实现实际上涉及诸多技术领域,需要艰辛的设计、开发与调试过程,必然会遇到棘手的问题和挑战。而一个小型的开发团队难以完成机器人各个方面的开发工作,因而需要一套合作开发的框架与模式,以期能够快速集成已有的功能,省却重复劳动的时间。早在2008年,我们在与澳大利亚的布劳恩教授交流时,就得知他们开发了一套商业化的“RoBIOS”机器人操作系统,这套系统将一些常用的机器人底层功能进行了封装,可极大简化高级功能的开发。据他们介绍,这是最早的“机器人操作系统”,但由于产品不开源且价格昂贵,我们最终未能一试为快。后来在网络中不断地寻觅,最终发现了ROS,由于其开源、开放的特性,一下子就引起了我们极大的兴趣。
我们于2010年建立了易科机器人QQ群进行讨论,从而结识了国内最早期的一些机器人研究者和ROS探索者。由于早期相关资料非常匮乏,我们于2012年创建了博客(blog.exbot.net)以进行技术分享与交流。易科机器人开发组成员在此期间贡献了大量的教程和开发笔记,在此向他们的无私奉献表示感谢与敬意!近年来,随着机器人的迅猛发展,ROS得到了更为广泛的使用,国内也出现了一些优秀的项目,包括“星火计划”ROS公开课(blog.exbot.net/spark)、“HandsFree”ROS机器人开发平台(wiki.exbot.net)等。
出版界近年来也是硕果累累,本书第1版便是国内第一本ROS译著,由于实用性强,已经多次重印。第2版针对近年来ROS的最新发展,对书中部分内容进行了修订,并增加了第6章和第10章。本书涵盖了使用ROS进行机器人编程的最新知识与方法,通过ROS编程实践能够帮助你理解机器人系统设计与应用的现实问题。在机器人开发实践中,我们认为除了成功的喜悦外,还看到机器人学目前所处的发展阶段:核心技术尚未成熟、诸多功能尚不完备、bug多……但我们相信,有了ROS的开源精神和完备的合作开发框架,很多问题会迎刃而解。唯一迫切需要的就是期待你加入机器的开发和研究中来,一起推动开源机器人技术的发展与普及!
本书第2版与第1版的重叠部分主要沿用了刘品杰在第1版中的翻译,个别词汇根据习惯进行了修改。具体来说,第1至5章和第10章由张瑞雷翻译,第6章由张波翻译,第7至9章由刘锦涛翻译,吴中红和李静老师对全书进行了审阅,最后由刘锦涛对全书进行了修改润色和统稿整理。感谢杨维保、马文科等人对本书提出的修改建议!
我们将会在books.exbot.net发布本书的其他相关资源。
媒体评论
---------------------------ROS机器人项目开发11例(原书第2版)---------------------------
如今,放置在工作间的重型工业机器人正在被新时代的机器人所取代,这种机器人不需要工作间,它们被广泛应用于制造业、零售业、银行、能源和医疗保健等领域。机器人市场快速增长的主要原因之一是引入了一种叫作机器人操作系统(ROS)的开源机器人技术框架。
本书涵盖的项目使用了ROS发行版ROS Melodic Morenia以及Ubuntu Bionic 18.04操作系统。本书将从基本原理开始介绍ROS-2,并阐述它与ROS-1的不同之处。你将能够在ROS中建模和构建工业移动机械臂,并在Gazebo 9中进行模拟。然后,你将了解如何使用状态机处理复杂的机器人应用,以及一次控制多个机器人。本书还将介绍新的流行硬件,如NVIDIA Jetson Nano、华硕Tinkerboard和BeagleBone Black,并介绍其与ROS的接口。你将在构建有趣的ROS项目(如自动驾驶汽车)的同时学习深度学习、强化学习和其他关键的人工智能概念。通过学习本书,你将能够使用ROS建立有趣而复杂的项目。
通过阅读本书,你将学到:
ROS的基本知识及应用。
ROS- 2与ROS- 1的区别。
使用状态机处理复杂的机器人任务。
实现多个机器人的通信,并构建多机器人协作应用程序。
使用新型嵌入式板(如Tinkerboard S和Jetson Nano)探索ROS功能。
将机器学习和深度学习技术与ROS结合使用。
构建基于ROS的自动驾驶汽车。
使用Leap Motion和VR头盔远程操作机器人。
---------------------------ROS机器人开发:实用案例分析(原书第2版)---------------------------
.
ROS是一个强大的机器人框架,能够用于各种各样的硬件体系结构。它对大多数机器人功能层进行了标准化,涉及设备驱动程序、过程控制、消息传递、软件包管理。
除了较为简单的功能之外,ROS还是一个学习机器人技术、模拟以及实际构建机器人的强大平台。这意味着ROS并不是一个只面向学生和其他初学者的平台,而是适用于整个机器人行业。
本书自第1版问世以来,成为潜在专业人士和业余爱好者必备的ROS标准介绍书籍,第2版基于目前应用广泛的Kinetic Kame发布版,采用循序渐进的方式对所有的ROS应用领域进行了介绍。
通过逐步向你提供包括机械臂和飞行机器人在内的各类机器人示例,作者在书中增加了新功能。这本书非常注重实用性,只有在绝对必要的时候才进行相应的理论介绍。通过学习本书,你终将具备实践经验,从而可以用适宜的框架来控制机器人。
通过阅读本书,你将:
?无须高深的机器人学知识即可控制机器人。
?学会模拟并操控机械臂。
?学会控制飞行机器人。
?学会控制机器人独立执行任务。
?学会利用外部设备控制机器人。
?学会编写在机器人上运行的应用程序。
?学会使用MATLAB的机器人系统工具箱对ROS进行扩展。
---------------------------ROS机器人编程:原理与应用---------------------------
ROS(机器人操作系统)已成为机器人领域的实际标准编程方法,并成功应用于大型工业自动化系统。本书不同于以往ROS相关图书只注重实践操作,还对ROS的底层原理做了深入的解释,对机器人学的一些基础知识也做了必要的介绍。除了系统讲解ROS内部的工作机制外,还着重介绍了移动机器人和机械臂的工作原理,以及系统集成与高级控制等方面的应用,能够让读者充分了解ROS原理及其在机器人主要领域的实践应用。
本书特色:
覆盖六大主题:ROS基础、ROS仿真和可视化、ROS中的感知处理、ROS中的移动机器人、ROS中的机械臂、系统集成和高级控制。
在ROS基本知识(包括ROS工具和节点、定义消息、使用类以及创建库)的基础上,讲解了如何使用Gazebo和rviz进行仿真和可视化,以及如何使用立体相机、三维激光雷达和深度相机等完成感知处理。
从理论联系实践的层面诠释了移动机器人的运动控制和导航,机械臂的运动学、运动规划和关节控制。
最后,整体论述了系统集成与高级控制。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
机器人技术在强调一致性与完美性的工业领域极具吸引力。 自动化在当今世界发挥着重要作用,其中的大多数是通过机器人应用和支持机器人的各类平台实现的。 ROS是一个模块化软件平台,用于开发通用性的机器人应用。本书聚焦于ROS当前稳定的发布版本Kinect Kame,讨论机器人领域的高级概念,并展示如何使用ROS编程。
本书首先深入介绍ROS框架,帮助你清晰地了解ROS是如何工作的。然后,你将学习如何构建复杂机器人的模型,并用运动规划库(ROS MoveIt!)和ROS导航软件包集(Navigation)对机器人进行仿真和交互。之后,你将了解如何把I/O开发板、传感器和执行机构与ROS连接,还将学习如何连接硬件设备,以及如何用ROS和ROS-Industrial对复杂机器人进行仿真。最后,你将了解ROS程序设计的最佳实战技巧与经验。
通过阅读本书,你将学到:
? 创建一个7-DOF机械臂,以及一个差速轮式移动机器人。
? 在ROS中,用Gazebo和V-REP进行机器人仿真。
? 用MoveIt!对7-DOF机械臂进行运动规划。
? 在ROS中用SLAM和AMCL实现差速驱动机器人的自主导航。
? 深入了解ROS pluginlib、 ROS小节点和Gazebo插件。
? 将I/O开发板(如Arduino)、机器人传感器及高端执行机构与ROS连接。
? 用ROS-Industrial对ABB机械臂和UR机械臂进行仿真和运动规划。
? 用ROS新版本探究ROS的开放框架。
---------------------------ROS机器人开发实践---------------------------
机器人操作系统(ROS)的迅猛发展,已经促使它成为机器人领域的事实标准。本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;最后论述ROS 2的框架特点和使用方法,剖析ROS的发展方向。
本书不仅适合希望学习ROS和机器人技术的初学者,也适合专业的机器人开发者或工程师;若读者具备Linux系统的基本知识,了解C++和Python的基础编程方法,将更好地理解本书中的内容。
本书特色
- 理论与实践结合,快速上手ROS机器人开发;
- 仿真与实物结合,只需要一台计算机即可开始ROS实践;
- 提供所有源代码,并加入中文注释,方便读者理解;
- 覆盖众多机器人应用领域,适合机器人多种开发方向的爱好者和工程师。
---------------------------ROS机器人开发:实用案例分析---------------------------
本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。
通过阅读本书,你将:
?了解ROS的基本原理及其在机器人实例中的应用
?控制移动机器人在一个环境中自主导航
?使用URDF和Xacro建模机器人,并在ROS Gazebo模拟中操作
?控制视觉伺服的7自由度机器人手臂
?使用四旋翼飞行器进行自主锚点
?掌握Gazebo、rviz、rqt和Move-It等ROS工具的使用
?使用移动设备和控制器控制机器人
?联合机器人完成一个协作任务
---------------------------ROS机器人编程实践---------------------------
O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。
O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。O’Reilly的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版,在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。
业界评论
“O’Reilly Radar博客有口皆碑。”
——Wired
“O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”
——Business 20
“O’Reilly Conference是聚集关键思想领袖的绝对典范。”
——CRN
“一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”
——Irish Times
“Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”
——Linux Journal
ROS是一个强大的机器人框架,能够用于各种各样的硬件体系结构。它对大多数机器人功能层进行了标准化,涉及设备驱动程序、过程控制、消息传递、软件包管理。
除了较为简单的功能之外,ROS还是一个学习机器人技术、模拟以及实际构建机器人的强大平台。这意味着ROS并不是一个只面向学生和其他初学者的平台,而是适用于整个机器人行业。
本书自第1版问世以来,成为潜在专业人士和业余爱好者必备的ROS标准介绍书籍,第2版基于目前应用广泛的Kinetic Kame发布版,采用循序渐进的方式对所有的ROS应用领域进行了介绍。
通过逐步向你提供包括机械臂和飞行机器人在内的各类机器人示例,作者在书中增加了新功能。这本书非常注重实用性,只有在绝对必要的时候才进行相应的理论介绍。通过学习本书,你终将具备实践经验,从而可以用适宜的框架来控制机器人。
通过阅读本书,你将:
?无须高深的机器人学知识即可控制机器人。
?学会模拟并操控机械臂。
?学会控制飞行机器人。
?学会控制机器人独立执行任务。
?学会利用外部设备控制机器人。
?学会编写在机器人上运行的应用程序。
?学会使用MATLAB的机器人系统工具箱对ROS进行扩展。
---------------------------ROS机器人编程:原理与应用---------------------------
ROS(机器人操作系统)已成为机器人领域的实际标准编程方法,并成功应用于大型工业自动化系统。本书不同于以往ROS相关图书只注重实践操作,还对ROS的底层原理做了深入的解释,对机器人学的一些基础知识也做了必要的介绍。除了系统讲解ROS内部的工作机制外,还着重介绍了移动机器人和机械臂的工作原理,以及系统集成与高级控制等方面的应用,能够让读者充分了解ROS原理及其在机器人主要领域的实践应用。
本书特色:
覆盖六大主题:ROS基础、ROS仿真和可视化、ROS中的感知处理、ROS中的移动机器人、ROS中的机械臂、系统集成和高级控制。
在ROS基本知识(包括ROS工具和节点、定义消息、使用类以及创建库)的基础上,讲解了如何使用Gazebo和rviz进行仿真和可视化,以及如何使用立体相机、三维激光雷达和深度相机等完成感知处理。
从理论联系实践的层面诠释了移动机器人的运动控制和导航,机械臂的运动学、运动规划和关节控制。
最后,整体论述了系统集成与高级控制。
---------------------------精通ROS机器人编程(原书第2版)---------------------------
机器人技术在强调一致性与完美性的工业领域极具吸引力。 自动化在当今世界发挥着重要作用,其中的大多数是通过机器人应用和支持机器人的各类平台实现的。 ROS是一个模块化软件平台,用于开发通用性的机器人应用。本书聚焦于ROS当前稳定的发布版本Kinect Kame,讨论机器人领域的高级概念,并展示如何使用ROS编程。
本书首先深入介绍ROS框架,帮助你清晰地了解ROS是如何工作的。然后,你将学习如何构建复杂机器人的模型,并用运动规划库(ROS MoveIt!)和ROS导航软件包集(Navigation)对机器人进行仿真和交互。之后,你将了解如何把I/O开发板、传感器和执行机构与ROS连接,还将学习如何连接硬件设备,以及如何用ROS和ROS-Industrial对复杂机器人进行仿真。最后,你将了解ROS程序设计的最佳实战技巧与经验。
通过阅读本书,你将学到:
? 创建一个7-DOF机械臂,以及一个差速轮式移动机器人。
? 在ROS中,用Gazebo和V-REP进行机器人仿真。
? 用MoveIt!对7-DOF机械臂进行运动规划。
? 在ROS中用SLAM和AMCL实现差速驱动机器人的自主导航。
? 深入了解ROS pluginlib、 ROS小节点和Gazebo插件。
? 将I/O开发板(如Arduino)、机器人传感器及高端执行机构与ROS连接。
? 用ROS-Industrial对ABB机械臂和UR机械臂进行仿真和运动规划。
? 用ROS新版本探究ROS的开放框架。
---------------------------ROS机器人开发实践---------------------------
机器人操作系统(ROS)的迅猛发展,已经促使它成为机器人领域的事实标准。本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;最后论述ROS 2的框架特点和使用方法,剖析ROS的发展方向。
本书不仅适合希望学习ROS和机器人技术的初学者,也适合专业的机器人开发者或工程师;若读者具备Linux系统的基本知识,了解C++和Python的基础编程方法,将更好地理解本书中的内容。
本书特色
- 理论与实践结合,快速上手ROS机器人开发;
- 仿真与实物结合,只需要一台计算机即可开始ROS实践;
- 提供所有源代码,并加入中文注释,方便读者理解;
- 覆盖众多机器人应用领域,适合机器人多种开发方向的爱好者和工程师。
---------------------------ROS机器人开发:实用案例分析---------------------------
本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。
通过阅读本书,你将:
?了解ROS的基本原理及其在机器人实例中的应用
?控制移动机器人在一个环境中自主导航
?使用URDF和Xacro建模机器人,并在ROS Gazebo模拟中操作
?控制视觉伺服的7自由度机器人手臂
?使用四旋翼飞行器进行自主锚点
?掌握Gazebo、rviz、rqt和Move-It等ROS工具的使用
?使用移动设备和控制器控制机器人
?联合机器人完成一个协作任务
---------------------------ROS机器人编程实践---------------------------
O’Reilly Media通过图书、杂志、在线服务、调查研究和会议等方式传播创新知识。自1978年开始,O’Reilly一直都是前沿发展的见证者和推动者。超级极客们正在开创着未来,而我们关注真正重要的技术趋势——通过放大那些“细微的信号”来刺激社会对新科技的应用。作为技术社区中活跃的参与者,O’Reilly的发展充满了对创新的倡导、创造和发扬光大。
O’Reilly为软件开发人员带来革命性的“动物书”;创建第一个商业网站(GNN);组织了影响深远的开放源代码峰会,以至于开源软件运动以此命名;创立了Make杂志,从而成为DIY革命的主要先锋;公司一如既往地通过多种形式缔结信息与人的纽带。O’Reilly的会议和峰会集聚了众多超级极客和高瞻远瞩的商业领袖,共同描绘出开创新产业的革命性思想。作为技术人士获取信息的选择,O’Reilly现在还将先锋专家的知识传递给普通的计算机用户。无论是通过书籍出版,在线服务或者面授课程,每一项O’Reilly的产品都反映了公司不可动摇的理念——信息是激发创新的力量。
业界评论
“O’Reilly Radar博客有口皆碑。”
——Wired
“O’Reilly凭借一系列(真希望当初我也想到了)非凡想法建立了数百万美元的业务。”
——Business 20
“O’Reilly Conference是聚集关键思想领袖的绝对典范。”
——CRN
“一本O’Reilly的书就代表一个有用、有前途、需要学习的主题。”
——Irish Times
“Tim是位特立独行的商人,他不光放眼于最长远、最广阔的视野并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔路口,走小路(岔路)。’回顾过去Tim似乎每一次都选择了小路,而且有几次都是一闪即逝的机会,尽管大路也不错。”
——Linux Journal
系列图书推荐
ROS机器人项目开发11例(原书第2版)
- ¥99.00
- ¥69.30
- ROS机器人项目开发11例(原..
[套装书]ROS机器人项目开发11例(原书第2版)+ROS机器人开发:实用案例分析(原书第2版)(2册)
- ¥198.00
- ¥134.64
- [套装书]ROS机器人项目开..
[套装书]ROS机器人项目开发11例(原书第2版)+ROS机器人编程:原理与应用(2册)
- ¥298.00
- ¥202.64
- [套装书]ROS机器人项目开..
[套装书]ROS机器人项目开发11例(原书第2版)+ROS机器人开发:实用案例分析(原书第2版)+ROS机器人编程:原理与应用+精通ROS机器人编程(原书第2版)+ROS机器人开发实践+ROS机器人开发:实用案例分析+ROS机器人编程实践+ROS机器人高效编程(原书第3版)+ROS机器人程序
- ¥901.00
- ¥612.68
- [套装书]ROS机器人项目开..
[套装书]ROS机器人项目开发11例(原书第2版)+精通ROS机器人编程(原书第2版)(2册)
- ¥198.00
- ¥134.64
- [套装书]ROS机器人项目开..
同类热销商品
GPU高性能编程CUDA实战[图书]
- ¥39.00
- ¥39.00
- GPU高性能编程CUDA实战[图..
Linux高性能服务器编程[按需印刷]
- ¥69.00
- ¥69.00
- Linux高性能服务器编程[按..
大教堂与集市[图书]
- ¥59.00
- ¥59.00
- 大教堂与集市[图书]
程序设计教程:用C++语言编程(第3版)
- ¥45.00
- ¥31.50
- 程序设计教程:用C++语言编..
数字逻辑与计算机组成
- ¥79.00
- ¥55.30
- 数字逻辑与计算机组成