《从ROS1到ROS2无人机编程实战指南》[71M]百度网盘|pdf下载|亲测有效
《从ROS1到ROS2无人机编程实战指南》[71M]百度网盘|pdf下载|亲测有效

从ROS1到ROS2无人机编程实战指南 pdf下载

出版社 化学工业出版社京东自营官方旗舰店
出版年 2023-05
页数 390页
装帧 精装
评分 9.4(豆瓣)
8.99¥ 10.99¥

内容简介

本篇主要提供从ROS1到ROS2无人机编程实战指南电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

产品特色

编辑推荐

1.内容讲解从ROS1过渡到ROS2,再到无人机编程应用,层层递进,从基础到实战
2.理论知识辅以程序案例,读者边学边操作,上手快
3.图文并茂,涵盖面广泛,可满足机器人、无人机研发技术人员各个层次的阅读需要

内容简介

本书全面介绍了ROS机器人操作系统及其在无人机编程中的应用,内容涵盖智能机器人和无人机等从入门到精通所需的技术开发知识要点。本书从ROS基础知识入手,由ROS1过渡到ROS2再到两者的移植与转换,由浅入深、逐级进阶,以无人机的编程应用为平台,就目前流行的机器人SLAM定位算法、深度学习识别算法、基于运动控制学的控制算法以及全局加局部的轨迹规划算法等重点和难点,进行了详细阐述。全书语言通俗易懂,辅以程序案例及注释,并通过仿真的形式,让读者能够轻松地学习ROS及无人机编程。
本书可供智能机器人及无人机等相关行业技术工作者阅读参考,也是ROS爱好者的实战宝典,还可作为高校相关专业师生的参考书。

作者简介

内页插图

目录

第1章 ROS——智能机器人开端 001
1.1 ROS的节点(node) 001
1.1.1 节点 001
1.1.2 节点管理器 001
1.1.3 与节点有关的指令 002
1.2 ROS命令指令与使用 007
1.2.1 与msg相关的命令 007
1.2.2 与topic相关的命令 009
1.2.3 与service相关的命令 015
1.2.4 消息记录与回放命令 017
1.2.5 故障诊断命令 018
1.3 工作空间与功能包的创建 019
1.3.1  工作空间和功能包的组成 020
1.3.2  工作空间的创建 021
1.3.3  编译工作空间 021
1.3.4  设置环境变量 023
1.3.5  检查环境变量 023
1.3.6  功能包的创建 023
1.3.7  package.xml文件内容 025
1.3.8 CMakeLists.txt文件作用 026
1.4 可视化参数指令(Parameter)的使用 029
1.4.1 Parameter Server的使用 029
1.4.2 通过编程实现参数的静态调节 033
1.4.3 实现参数的动态调节 041
1.5  Visual Studio Code环境搭建与美化 045
1.5.1  环境搭建 045
1.5.2  Visual Studio Code 美化 049
1.6  Docker-ROS安装 050
1.6.1  了解Docker 050
1.6.2  Docker的安装 051
1.6.3 在Docker内安装ROS 054
1.6.4 在Docker内安装vncserver 055
1.6.5 测试Docker中ROS及其GUI界面 055
1.7  ROS搭建VSC调试环境 058
1.7.1  安装插件 058
1.7.2  在VScode中配置ROS环境 058
1.7.3  在VScode中debug代码 059

第2章 ROS编程及插件二次开发 065
2.1  发布者(Publisher)的编程与实现 065
2.1.1 learning_topic功能包的创建 065
2.1.2 ROS中如何实现一个Publisher 066
2.1.3 用C++实现Publisher及代码讲解 066
2.1.4 用Python实现Publisher及代码讲解 069
2.2 订阅者(Subscriber)的编程与实现 071
2.2.1 ROS中如何实现一个Subscriber 072
2.2.2 用C++实现Subscriber及代码讲解 072
2.2.3 用Python实现Subscriber及代码讲解 074
2.3 自定义话题(Topic)实现 076
2.3.1 自定义消息类型的创建 076
2.3.2 编程实现话题(C++) 079
2.3.3 编程实现话题(Python) 082
2.4 客户端(Client)的编程与实现 084
2.4.1 learning_service功能包的创建 085
2.4.2 srv文件的理解 085
2.4.3 ROS中如何实现一个Client 086
2.4.4 用C++实现Client及代码讲解 086
2.4.5 用C++实现Python及代码讲解 088
2.5 服务端(Server)的编程与实现 091
2.5.1 Trigger型文件 091
2.5.2 ROS中如何实现一个Server 092
2.5.3 用C++实现Server及代码讲解 092
2.5.4 用Python实现Server及代码讲解 095
2.6 自定义服务(Service)实现 098
2.6.1 自定义服务类型的创建 098
2.6.2 编程实现服务(C++) 100
2.6.3 编程实现服务(Python) 104
2.7 行为(Action)编程与实现 108
2.7.1 Action的工作机制 108
2.7.2 learning_action功能包的创建 112
2.7.3 编程实现动作(C++) 113
2.7.4 编程实现动作(Python) 121
2.8 多节点启动脚本(launch)文件的编程与实现 123
2.8.1 launch文件 123
2.8.2 launch文件的基本成分 123
2.8.3 launch文件编程 126
2.9 ROS设置plugin插件 128
2.9.1 什么是plugin 128
2.9.2 pluginlib的工作原理 128
2.9.3 实现plugin的步骤 128
2.9.4 plugin的实现 129
2.9.5 在ROS中使用创建的plugin 132
2.10 基于RVIZ的二次开发——plugin 134
2.10.1 plugin的创建 134
2.10.2 补充编译规则 140
2.10.3 实现结果 141
2.11 ROS多消息同步与多消息回调 142
2.11.1 什么是多消息同步与多消息回调 142
2.11.2 实现步骤 142
2.11.3 功能包的创建 143
2.11.4 全局变量形式 :TimeSynchronizer 143
2.11.5 类成员的形式:message_filters::Synchronizer 144

第3章 ROS可视化功能包与拓展 148
3.1 日志输出工具(rqt_console) 148
3.1.1 rqt_console 148
3.1.2 日志的等级 150
3.1.3 rqt_logger_level 151
3.2 数据绘图工具(rqt_plot) 152
3.3 计算图可视化工具(rqt_graph) 155
3.4 图像渲染工具(rqt_image_view) 157
3.5 PlotJuggler 157
3.5.1 PlotJuggler简介 157
3.5.2 ROS系统中安装PlotJuggler 158
3.5.3 初识PlotJuggler 158
3.6 三维可视化工具(rviz) 162
3.6.1 Displays侧边栏 163
3.6.2 Views侧边栏 164
3.6.3 工具栏 165
3.7 三维物理仿真平台(Gazebo) 165
3.7.1 视图界面 165
3.7.2 模型列表 166
3.7.3 模型属性区 167
3.7.4 上工具栏 167
3.7.5 下工具栏 168
3.8 ROS人机交互软件介绍 168
3.8.1 ROS与QT的交互 169
3.8.2 ROS与Web的交互——rosbridge 170
3.8.3 ROS与Java的交互——rosjava 171
3.9 ROS包选择、过滤与裁剪 172
3.9.1 根据topic过滤 172
3.9.2 根据时间过滤 172
3.9.3 同时过滤topic与时间 173
3.9.4 通过rosbag完成ros包操作 173
3.10 常见GUI快速查询 174
3.10.1 rqt_tf_tree 174
3.10.2 rqt_bag 174
3.10.3 rqt_topic 175
3.10.4 rqt_reconfigure 175
3.10.5 rqt_publisher 176
3.10.6 rqt_top 176
3.10.7 rqt_runtime_monitor 177

第4章 ROS2——智能机器人新起点 178
4.1 ROS2的新特性 178
4.1.1 ROS1与ROS2程序书写的不同 178
4.1.2 ROS1与ROS2通信机制的不同 179
4.1.3 ROS1与ROS2功能包、工作空间、环境的不同 180
4.2 ROS2之DDS 180
4.2.1 什么是DDS 181
4.2.2 DDS多机通信 181
4.2.3 中间件RMW 182
4.2.4 DDS调优 183
4.3 Docker—ROS2安装 184
4.3.1 安装 184
4.3.2 安装测试 185
4.3.3 编译并运行示例程序 186
4.3.4 ROS2 docker 安装 187
4.4 ROS2搭建VSC调试环境 191
4.4.1 编译设置 191
4.4.2 Debug设置 192
4.4.3 开启Debug 194
4.5 ROS2工作空间介绍 195
4.5.1 工作空间组成 195
4.5.2 创建一个简单的功能包 196
4.5.3 编译功能包 197
4.6 ROS2的POP和OOP 198
4.6.1 POP和OOP是什么 198
4.6.2 POP与OOP对比 199
4.6.3 小结 199
4.7 发布者(Publisher)的编程与实现 200
4.7.1 ROS2发布者功能确定 200
4.7.2 编写代码(C++实现) 201
4.7.3 编写代码(Python实现) 203
4.7.4 编译代码 204
4.7.5 运行代码 204
4.8 订阅者(Subscriber)的编程与实现 205
4.8.1 ROS2订阅者功能确定 205
4.8.2 编写代码(C++实现) 205
4.8.3 编写代码(Python实现) 207
4.8.4 编译代码 208
4.8.5 运行代码 208
4.9 客户(Client)的编程与实现 209
4.9.1 ROS2服务的简单调用 209
4.9.2 ROS2客户功能确定 210
4.9.3 编写代码(C++实现) 210
4.9.4 编写代码(Python实现) 212
4.9.5 运行代码 213
4.10 服务(Service)的编程与实现 214
4.10.1 ROS2服务任务确定 214
4.10.2 编写代码(C++实现) 214
4.10.3 编写代码(Python实现) 216
4.10.4 运行代码 217
4.11 自定义msg以及srv 218
4.11.1 自定义msg以及srv的意义 218
4.11.2 创建自己的msg、srv文件 218
4.11.3 在其他功能包里引用 219
4.12 ROS2参数(Parameter) 220
4.12.1 参数是什么 220
4.12.2 任务确定 220
4.12.3 程序编写(C++) 220
4.12.4 程序编写(Python) 221
4.12.5 编译并运行代码 222
4.13 ROS2如何一键启动多个脚本 223
4.13.1 ROS2的launch系统 223
4.13.2 在自己的功能包中添加launch文件(C++) 225
4.13.3 在自己的功能包中添加launch文件(Python) 226
4.13.4 编译及运行 227
4.14 Action(server & client)的编程与实现 227
4.14.1 任务确定 228
4.14.2 根据任务创建对应的Action 228
4.14.3 程序编写(C++) 229
4.14.4 程序编写(Python) 233
4.14.5 程序执行 235
4.15 ROS2子节点以及多线程 236
4.15.1 ROS1—Node 和 Nodelets 236
4.15.2 ROS2—统一API 237
4.15.3 component初体验 237
4.15.4 自定义component 239
4.15.5 ROS2中的多线程—callbackgroup 241
4.15.6 多线程的大致流程 242
4.15.7 自定义多线程程序 243
4.16 ROS2中常用命令行工具 243
4.16.1 功能包 243
4.16.2 节点 244
4.16.3 ROS2话题 245
4.16.4 参数(param)命令 247
4.16.5 action命令 248
4.16.6 interface工具 248
4.16.7 doctor工具 250
4.16.8 ROS2可视化GUI与仿真工具 251

前言/序言

本书系统介绍了ROS1和ROS2的基础以及高级特性,并以ROS系统为基础,展示了不同算法的原理以及这些算法在无人机中的应用。ROS作为一个先进的机器人操作系统,目前已经被广泛应用于机器人行业中。同时由于其众多的第三方开源包以及相对容易上手等特性,被越来越多的科研院所用来开发新的核心算法。但是ROS1相对来说不够稳定,因为其需要有一个master节点,这在根本上限制了ROS的稳定性。所以越来越多的工作在向ROS2平台迁移,因为ROS2使用了DDS且不需要master节点提供信息交互。本书详细解析了目前主流的ROS1以及ROS2平台,以及定位、感知、控制等核心算法,并亲手实现无人机的不同功能。
阅读本书的过程中无需使用任何特殊的设备,只需要保证您的电脑是Ubuntu环境且拥有较高的配置即可。书中每一章节都附带一系列的代码以及详细的注释,您可以在自己的计算机上配置运行。
本书旨在提供一个学习智能无人机/机器人的方向,不单单局限于基础内容的讲解,也涵盖了大量的算法例程、公式推导、手绘示意等。您可以依据自己所处的不同学习阶段选择性地阅读实践,我们希望本书能够帮助您成长为一名合格的智能机器人研发工程师。
由于无人机价格相对高昂,我们与阿木实验室达成了共识,选择无人机仿真平台Prometheus来展示这些算法在无人机中的应用以及如何完成无人机的一些智能化操作。读完本书,您会对智能机器人中的环境以及算法有较为充分的了解。首先您可以使用ROS1&ROS2完成一些比较高级的开发;其次可以了解智能机器人最关键的核心算法的原理,并能选择一个喜欢并熟悉的算法进行深入研究;最后可以熟练地使用Prometheus平台完成大量的和无人机相关的工作。
主要内容
第1~3章主要介绍ROS1 melodic相关的知识,主要包含ROS1的基础概念以及环境搭建与配置、ROS1的基础编程以及高级编程用法、ROS1中常用的可视化方案。这部分内容将绝大多数开发者需要掌握以及未来有可能需要使用的高级用法都列了出来,并进行了详细的讲解。以Plotjuggler为首的可视化软件也进行了详细介绍,并说明如何对这些可视化软件进行二次开发。书中的代码分析以及注释是较为细致的,面向初次接触ROS的读者。当学习完这部分内容,可以了解到ROS1的原理以及ROS1绝大多数的开发与使用方法。
第4、5章在ROS1的基础上介绍ROS2 dashing的使用方法,还介绍了ROS1与ROS2的对比与转换,以及Ubuntu20.04中ROS2的foxy版本的一些新操作。这部分内容相较于ROS1来说是一个提升的阶段,需要有一定的ROS1基础再来学习ROS2相关内容,当然如果不想学习ROS1,在看完1.1节后也可以直接学习ROS2。学习完这部分内容,可以了解到ROS2的原理以及ROS2绝大多数的开发与使用方法,并可以流畅完成ROS1与ROS2的代码转换。
第6~8章主要介绍无人机定位的方法,由于无人机定位方法的多样性,一种方法无法尽可能概括,同时由于SLAM方法本身相较于深度学习的黑盒性,SLAM需要大量的中间推导,所以我们选择了几个比较有代表性的算法进行介绍,分别是视觉SLAM—VINS-FUSION、2D激光SLAM—cartographer、3D激光SLAM—SC-LeGo-LOAM,当中需要有一定的矩阵论、非线性优化以及一些开源库(Eigen、Ceres、G2O、Gtsam、Sophus)的使用基础。这里解析了大量SLAM算法中存在的经典算法,可以对SLAM算法中常见的使用方法有进一步的了解,可以了解目前学术界绝大多数算法的基础,从而可以比较轻松地学习其他的VIO与LIO算法。
第9章主要介绍无人机的识别避障,这部分主要偏向摄像头的识别感知,包括二维码识别、行人识别、姿态识别等方法,当中需要有一定的OpenCV基础以及深度学习基础(Pytorch、TensorRT)。学习完这部分内容,可以了解目前学术界常见的识别算法以及框架优势,并可以了解如何与ROS结合将算法运行在ROS中。
第10章主要偏向机器人的运动控制,展示了不同的Kalman滤波的原理以及思想,并对代码进行了详尽解释。
第11章主要偏向机器人的轨迹规划,主要阐释一些知名的轨迹规划算法,并用手绘图的形式展示了这些算法实际的计算流程。学习完这部分内容,可以初步完成无人机从定位到识别再到规划导航的一整套算法流程。
第12章展示了P450无人机硬件搭载以及对应的Prometheus知名开源平台的使用。主要对Prometheus 2.0进行介绍,并着重介绍了Prometheus的详细操作及其二次开发的接口与方法。学习完这部分内容,可以了解国内知名的Prometheus开源平台,并自主实现无人机的所有操作功能。
预备知识
我们写作本书的目的是让每位读者都可以完成书中的学习并运行示例代码。所需要的设备是一台带有独立显卡的计算机,并装有Ubuntu18.04系统。我们将本书分为三个篇章:基础篇、算法篇、实践篇。
第1~5章为基础篇,读者需要熟悉:Git的基本操作,包括下拉代码、上传代码等;计算机语言基本知识,包括Cpp、Python、Bash语言的编程技巧;Docker的基础概念;基础的Linux指令。
第6~11章为算法篇,读者除了基础篇需要熟悉的内容外,还需要熟悉:Ceres、Eigen等第三方非线性优化以及矩阵论的开源库;OpenCV基础以及深度学习基础(Pytorch、TensorRT)。
第12章为实践篇,读者除了基础篇需要熟悉的内容外,还需要熟悉:无人机物理硬件概念。
目标读者
本书的目标读者涵盖无人机以及机器人各阶段开发人员,本书为不同需求的读者提供不同阶段的学习内容。在每一个阶段都尽可能向读者深入挖掘难点和痛点,并通过仿真的形式,让读者能够轻松地学习无人机、爱上无人机。本书的基础篇对于听说过却没有使用过ROS的专业技术人员是非常有益的;算法篇展示了学习完ROS后的一些算法方面的技术知识,非常适合有一定技术基础还想朝着算法工程师发展的读者;实践篇则向竞赛以及开发人员提供了一个快速学习和二次开发的途径,让开发更加人性化。本书针对机器人学习中每个阶段有知识瓶颈的技术人员提供了有效的学习渠道。
源代码下载
读者可以在Github中下载所有的代码示例:lovelyyoshino/ROS-ROS2BOOKS。可以按照书中的指引,自行建立范例项目来进行联系,也可以参考我们提供的范例程序进行学习。作者的csdn博客,用户名为:lovely_yoshino,也会持续更新一些较为前沿的算法讲解以及学习路径。希望各位读者能够轻松、快乐地学习和了解ROS+算法,成长为一名合格的机器人开发工程师。
编写分工
本书由马培立、卞舒豪、陈绍平主编,戚煜华、潇齐、杨雪任副主编,弋鑫、李博、马洪飞、陈养美、仓琴参编,同时也非常感谢阿木实验室的组织策划。在此,感谢为本书编写和出版提供极大帮助的各位专家和教授,高翔博士的《视觉SLAM十四讲》、崔华坤博士的《VINS论文推导及代码解析》、胡春旭老师的《ROS入门21讲》为本书的编写提供了启发与思考,还学习了参考文献中的相关内容,在此一并表示衷心感谢。
本书图文并茂,为了方便读者对书中插图有更直观的理解,我们把全书的插图汇总归纳,并且将书中的所有实例整理成代码包,制作成二维码,放于封底,读者可结合书中内容扫码查看或下载练习。
本书内容为编者学习、工作经验的总结,书中不足之处,欢迎广大读者沟通交流、批评指正(手机号 :13512509221 ;微信号:csr_team)。

编者