新書推薦:
《
组队:超级个体时代的协作方式
》
售價:HK$
77.3
《
第十三位陪审员
》
售價:HK$
53.8
《
微观经济学(第三版)【2024诺贝尔经济学奖获奖者作品】
》
售價:HK$
155.7
《
Python贝叶斯深度学习
》
售價:HK$
89.4
《
启微·狂骉年代:西洋赛马在中国
》
售價:HK$
78.4
《
有趣的中国古建筑
》
售價:HK$
67.0
《
十一年夏至
》
售價:HK$
76.2
《
如何打造成功的商业赛事
》
售價:HK$
89.5
|
內容簡介: |
本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。
|
關於作者: |
审校者简介
第1章 ROS入门1
1.1PC安装教程3
1.2使用软件库安装ROS Kinetic3
1.2.1 配置Ubuntu软件库4
1.2.2 添加软件库到sources.list文件中4
1.2.3 设置密钥5
1.2.4 安装ROS5目 录Contents
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第1章 ROS入门1
1.1PC安装教程3
1.2使用软件库安装ROS Kinetic3
1.2.1 配置Ubuntu软件库4
1.2.2 添加软件库到sources.list文件中4
1.2.3 设置密钥5
1.2.4 安装ROS5
1.2.5 初始化rosdep6
1.2.6 配置环境6
1.2.7 安装rosinstall7
1.3如何安装VirtualBox和Ubuntu8
1.3.1 下载VirtualBox8
1.3.2 创建虚拟机9
1.4通过Docker镜像使用ROS11
1.4.1 安装Docker11
1.4.2 获取和使用ROS Docker镜像和容器11
1.5在BeagleBone Black上安装ROS Kinetic12
1.5.1 准备工作13
1.5.2 配置主机和source.list文件16
1.5.3 设置密钥16
1.5.4 安装ROS功能包17
1.5.5 为ROS初始化rosdep17
1.5.6 在BeagleBone Black中配置环境18
1.5.7 在BeagleBone Black中安装rosinstall18
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 节点与nodelet27
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.4ROS试用练习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当出现异常状况时使用roswtf75
3.6可视化节点诊断77
3.7绘制标量数据图78
3.8图像可视化81
3.93D可视化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.3xacro——一种更好的机器人建模方法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.1ROS导航功能包集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为导航功能包集设置rviz151
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
|
目錄:
|
目 录Contents
推荐序一
推荐序二
译者序
前言
作者简介
审校者简介
第1章 ROS入门1
1.1PC安装教程3
1.2使用软件库安装ROS Kinetic3
1.2.1 配置Ubuntu软件库4
1.2.2 添加软件库到sources.list文件中4
1.2.3 设置密钥5
1.2.4 安装ROS5
1.2.5 初始化rosdep6
1.2.6 配置环境6
1.2.7 安装rosinstall7
1.3如何安装VirtualBox和Ubuntu8
1.3.1 下载VirtualBox8
1.3.2 创建虚拟机9
1.4通过Docker镜像使用ROS11
1.4.1 安装Docker11
1.4.2 获取和使用ROS Docker镜像和容器11
1.5在BeagleBone Black上安装ROS Kinetic12
1.5.1 准备工作13
1.5.2 配置主机和source.list文件16
1.5.3 设置密钥16
1.5.4 安装ROS功能包17
1.5.5 为ROS初始化rosdep17
1.5.6 在BeagleBone Black中配置环境18
1.5.7 在BeagleBone Black中安装rosinstall18
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 节点与nodelet27
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.4ROS试用练习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当出现异常状况时使用roswtf75
3.6可视化节点诊断77
3.7绘制标量数据图78
3.8图像可视化81
3.93D可视化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.3xacro——一种更好的机器人建模方法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.1ROS导航功能包集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为导航功能包集设置rviz151
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
|
內容試閱:
|
preface前 言本书第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命令行、GNULinux工具的基本知识和一些CC++编程技巧。
目标读者本书的目标读者包括所有机器人开发人员,可以是初学者也可以是专业人员。它涵盖了整个机器人系统的各个方面,展示了ROS如何帮助开发人员完成使机器人真正自主化的任务。对于听说过却从未使用过ROS的机器人专业学生或科研人员来说,本书将是非常有益的。ROS初学者能从本书中学习ROS软件框架的很多先进理念和工具。不仅如此,经常使用ROS的用户也可能从某些章节中学习到一些新东西。当然,只有前3章是纯粹为初学者准备的,所以那些已经使用过ROS的人可以跳过这三章直接阅读后面的章节。
源代码和彩色图片下载本书源代码可以从华章官网www.hzbook.com下载。
作者简介About the AuthorsAnil 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、感知、视觉、控制等机器人学课题。在读博士期间,他加盟了赫罗纳大学的CIRSViCOROB水下机器人研究中心,在那里他为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软件的运行。
我要感谢本书的合著者,感谢他们为完成本书所付出的
|
|