新書推薦:
《
经济史的趣味(全新增订版)(经济史与思想史丛书)
》
售價:NT$
383.0
《
中国古代鬼神录
》
售價:NT$
866.0
《
投机苦旅:一位投机客的凤凰涅槃
》
售價:NT$
403.0
《
重返马赛渔场:社会规范与私人治理的局限
》
售價:NT$
316.0
《
日子慢慢向前,事事慢慢如愿
》
售價:NT$
254.0
《
场景供应链金融:将风口变成蓝海
》
售價:NT$
509.0
《
汗青堂丛书146·布鲁克王朝:一个英国家族在东南亚的百年统治
》
售價:NT$
418.0
《
人生是旷野啊
》
售價:NT$
332.0
|
編輯推薦: |
本书特色
(1)作者硬核:知名ROS机器人社区【古月居】2025官方出品,作者是胡春旭、李乔龙,500页机器人入门者案头手册
(2)版本新:基于稳定版ROS 2 Jazzy,全新Gazebo机器人仿真平台,以RDK X3、RDK X5赋能生态产品——OriginBot智能机器人开源套件为原型讲解
(3)实操性强:从零构建一个完整的机器人系统,配Python和C 源码,社区支持
(4)社区支持:专属读者群,携广大开发者一同迈向智能机器人新时代
|
內容簡介: |
本书以ROS 2核心原理为主线,以机器人开发实践为重心,在详细讲解ROS 2核心概念、组件工具的基础上,介绍ROS 2构建仿真/实物机器人系统的方法,剖析ROS 2用于视觉识别、地图构建、自主导航等应用的方法,配有大量图表、源码等,帮助读者在实现ROS 2基础功能的同时,深入理解基于ROS 2的机器人开发方法,从而将书中的内容用于实践。 本书采用最新稳定版本ROS 2系统和全新一代Gazebo机器人仿真平台,读者只需准备一台计算机,就可以快速上手学习。同时,本书介绍了实物机器人的搭建方法及相应功能的实现,书中源码都加入了中文注释,并针对核心内容提供C 和Python两个版本。为方便读者阅读和学习本书,笔者团队还专门创建了一个网页,供读者下载配套源码、查看操作指令、学习配套视频教程。
|
關於作者: |
胡春旭,ROS机器人社区“古月居”创始人,D-Robotics开发者生态负责人。专注于机器人操作系统及人工智能相关技术的推广与应用,撰写了《ROS机器人开发实践》《移动机器人原理与应用(基于ROS操作系统)》等多本畅销技术书。主导了基于RDK机器人开发者套件的全新机器人开发范式的研发工作,任教于多所高校及机器人/人工智能教育平台。曾获2019 ROS全球十大影响力人物、ROS布道师等荣誉称号。
李乔龙,ROS机器人社区“古月居”负责人,负责古月居社区生态的推广、建设和产品研发。主导设计了古月居Origin系列机器人套件。曾负责全国大学生智能汽车竞赛地平线赛项策划与推广,学生时期获得过多项全国机器人国家级奖项。目前专注于机器人技术和人工智能技术的推广与应用。
|
目錄:
|
第1部分 ROS 2 基础原理
1 ROS:智能机器人的灵魂 2
1.1 智能机器人时代 2
1.2 ROS 发展历程 3
1.2.1 ROS 的起源 3
1.2.2 ROS 的发展 4
1.2.3 ROS 的特点 6
1.3 ROS 2 与 ROS 1 7
1.3.1 ROS 1 的局限性 7
1.3.2 全新的 ROS 2 8
1.3.3 ROS 2 与 ROS 1 的对比 10
1.4 ROS 2 安装方法 13
1.4.1 Linux 是什么 14
1.4.2 Ubuntu 是什么 14
1.4.3 Ubuntu 操作系统安装 15
1.4.4 ROS 2 系统安装 18
1.5 ROS 2 命令行操作 20
1.5.1 Linux 中的命令行 21
1.5.2 海龟仿真实践 25
1.5.3 ROS 2 中的命令行 26
1.6 本章小结 31
2 ROS 2 核心原理:构建机器人的基石 32
2.1 ROS 2 机器人开发流程 32
2.2 工作空间:机器人开发的大本营 34
2.2.1 工作空间是什么 34
2.2.2 创建工作空间 35
2.2.3 编译工作空间 36
2.2.4 设置环境变量 37
2.3 功能包:机器人功能分类 37
2.3.1 功能包是什么 38
2.3.2 创建功能包 38
2.3.3 功能包的结构 39
2.3.4 编译功能包 44
2.4 节点:机器人的工作细胞 45
2.4.1 节点是什么 46
2.4.2 节点编程方法(Python) 47
2.4.3 节点编程方法(C ) 49
2.4.4 节点的命令行操作 51
2.4.5 节点应用示例:目标检测 52
2.5 话题:节点间传递数据的桥梁 54
2.5.1 话题是什么 55
2.5.2 话题通信模型 55
2.5.3 话题通信编程示例 57
2.5.4 话题发布者编程方法(Python) 58
2.5.5 话题订阅者编程方法(Python) 59
2.5.6 话题发布者编程方法(C ) 60
2.5.7 话题订阅者编程方法(C ) 62
2.5.8 话题的命令行操作 63
2.5.9 话题应用示例:目标检测(周期式) 64
2.6 服务:节点间的你问我答 68
2.6.1 服务是什么 68
2.6.2 服务通信模型 69
2.6.3 服务通信编程示例 70
2.6.4 客户端编程方法(Python) 71
2.6.5 服务端编程方法(Python) 72
2.6.6 客户端编程方法(C ) 73
2.6.7 服务端编程方法(C ) 75
2.6.8 服务的命令行操作 76
2.6.9 服务应用示例:目标检测(请求式) 77
2.7 通信接口:数据传递的标准结构 80
2.7.1 通信接口是什么 80
2.7.2 通信接口的定义方法 82
2.7.3 通信接口的命令行操作 85
2.7.4 服务接口应用示例:请求目标检测的坐标 86
2.7.5 话题接口应用示例:周期性发布目标检测的坐标 89
2.8 动作:完整行为的流程管理 93
2.8.1 动作是什么 93
2.8.2 动作通信模型 93
2.8.3 动作通信编程示例 95
2.8.4 动作接口的定义方法 96
2.8.5 服务端编程方法(Python) 97
2.8.6 客户端编程方法(Python) 99
2.8.7 客户端编程方法(C ) 101
2.8.8 服务端编程方法(C ) 104
2.8.9 动作的命令行操作 107
2.9 参数:机器人系统的全局字典 107
2.9.1 参数是什么 108
2.9.2 参数通信模型 108
2.9.3 参数的命令行操作 109
2.9.4 参数编程方法(Python) 111
2.9.5 参数编程方法(C ) 112
2.9.6 参数应用示例:设置目标检测的阈值 113
2.10 数据分发服务(DDS):机器人的神经网络 116
2.10.1 DDS 是什么 116
2.10.2 DDS 通信模型 118
2.10.3 质量服务策略 QoS 120
2.10.4 命令行中配置 DDS 的 QoS 123
2.10.5 DDS 编程示例 125
2.11 分布式通信 128
2.11.1 分布式通信是什么 128
2.11.2 SSH 远程网络连接 128
2.11.3 分布式数据传输 130
2.11.4 分布式网络分组 132
2.11.5 海龟分布式通信示例 133
2.12 本章小结 133
3 ROS 2 常用工具:让机器人开发更便捷 134
3.1 Launch:多节点启动与配置脚本 134
3.1.1 多节点启动方法 136
3.1.2 命令行参数配置 137
3.1.3 资源重映射 139
3.1.4 ROS 参数设置 141
3.1.5 Launch 启动文件嵌套包含 143
3.2 tf:机器人坐标系管理系统 144
3.2.1 机器人中的坐标系 145
3.2.2 tf 命令行操作 146
3.2.3 静态 tf 广播(Python) 149
3.2.4 静态 tf 广播(C ) 151
3.2.5 动态 tf 广播(Python) 153
3.2.6 动态 tf 广播(C ) 155
3.2.7 tf 监听(Python) 157
3.2.8 tf 监听(C ) 160
3.2.9 tf 综合应用示例:海龟跟随(Python) 163
3.2.10 tf 综合应用示例:海龟跟随(C ) 168
3.3 Gazebo:机器人三维物理仿真平台 172
3.3.1 Gazebo 介绍 172
3.3.2 机器人仿真示例 175
3.3.3 传感器仿真示例 177
3.4 RViz:数据可视化平台 178
3.4.1 RViz 介绍 178
3.4.2 数据可视化操作流程 181
3.4.3 应用示例一:tf 数据可视化 182
3.4.4 应用示例二:图像数据可视化 184
3.4.5 Gazebo 与 RViz 的关系 186
3.5 rosbag:数据记录与回放 186
3.5.1 记录数据 187
3.5.2 回放数据 188
3.6 rqt:模块化可视化工具箱 189
3.6.1 rqt 介绍 189
3.6.2 日志显示 190
3.6.3 图像显示 191
3.6.4 发布话题/服务数据 192
3.6.5 绘制数据曲线 193
3.6.6 数据包管理 193
3.6.7 节点可视化 194
3.7 ROS 2 开发环境配置 195
3.7.1 版本管理软件 git 195
3.7.2 集成开发环境 VSCode 196
3.8 本章小结 198
第 2 部分 ROS 2 机器人设计
4 ROS 2 机器人仿真:零成本玩转机器人 200
4.1 机器人的定义与组成 200
4.2 URDF 机器人建模 203
4.2.1 连杆的描述 204
4.2.2 关节的描述 206
4.2.3 完整机器人模型 208
4.3 创建机器人URDF模型 209
4.3.1 机器人模型功能包 209
4.3.2 机器人模型可视化 209
4.3.3 机器人模型解析 213
4.4 XACRO机器人模型优化 217
4.4.1 XACRO文件常见语法 218
4.4.2 机器人模型优化 219
4.4.3 机器人模型可视化 223
4.5 完善机器人仿真模型 223
4.5.1 完善物理参数 224
4.5.2 添加控制器插件 225
4.6 Gazebo 机器人仿真 226
4.6.1 在Gazebo中加载机器人模型 226
4.6.2 机器人运动控制仿真 230
4.6.3 RGB相机仿真与可视化 232
4.6.4 RGBD相机仿真与可视化 236
4.6.5 激光雷达仿真与可视化 241
4.7 本章小结 244
5 ROS 2 机器人构建:从仿真到实物 245
5.1 机器人从仿真到实物 245
5.1.1 案例剖析 245
5.1.2 机器人设计 247
5.1.3 软件架构设计 248
5.1.4 计算机端开发环境配置 249
5.1.5 机器人仿真测试 251
5.2 驱动系统设计:让机器人动得了 251
5.2.1 电机驱动原理:从PWM到H桥 251
5.2.2 电机正反转控制编程 255
5.3 底盘运动控制:让机器人动得稳 261
5.3.1 电机编码器测速原理 261
5.3.2 编码器测速编程 262
5.3.3 电机闭环控制方法 266
5.3.4 电机闭环控制编程 272
5.4 运动学正逆解:让机器人动得准 275
5.4.1 机常见器人运动学模型 275
5.4.2 差速运动学原理 281
5.4.3 差速运动学逆解:计算两个轮子的转速 283
5.4.4 差速运动学正解:计算机器人整体的速度 284
5.5 运动控制器中还有什么 284
5.5.1 电源管理:一个输入多种输出 285
5.5.2 IMU:测量机器人的姿态变化 287
5.5.3 人机交互:底层状态清晰明了 291
5.6 机器人控制系统:从“肌肉”到“大脑” 292
5.6.1 控制系统的计算平台 293
5.6.2 控制系统的烧写与配置 293
5.7 本章小结 300
6 ROS 2 控制与感知:让机器人动得了、看得见 301
6.1 机器人通信协议开发 301
6.1.1 通信协议设计 302
6.1.2 通信协议示例解析 303
6.1.3 运动控制器端协议开发(下位机) 306
6.1.4 应用处理器端协议开发(上位机) 314
6.2 机器人 ROS 2 底盘驱动开发 318
6.2.1 机器人 ROS 2 底盘驱动 318
6.2.2 速度控制话题的订阅 321
6.2.3 里程计话题与 tf 的维护 324
6.2.4 机器人状态的动态监控 333
6.3 机器人运动编程与可视化 336
6.3.1 ROS 2 速度控制消息定义 337
6.3.2 运动编程与可视化 338
6.4 相机驱动与图像数据 339
6.4.1 常用相机类型 340
6.4.2 相机驱动与可视化 341
6.4.3 ROS 2 图像消息定义 343
6.4.4 三维相机驱动与可视化 346
6.4.5 ROS 2 点云消息定义 347
6.5 激光雷达驱动与可视化 348
6.5.1 常见激光雷达类型 348
6.5.2 ROS 2 雷达消息定义 349
6.5.3 激光雷达驱动与数据可视化 351
6.6 IMU 驱动与数据可视化 354
6.6.1 ROS 2 IMU 消息定义 354
6.6.2 IMU 驱动与可视化 354
6.7 本章小结 356
第 3 部分 ROS 2 机器人应用
7 ROS 2 视觉应用:让机器人看懂世界 358
7.1 机器视觉原理简介 358
7.2 ROS 2 相机标定 361
7.2.1 安装相机标定功能包 361
7.2.2 运行相机标定节点 362
7.2.3 相机标定流程 362
7.2.4 相机标定文件的使用 366
7.2.5 双目相机标定 370
7.3 OpenCV 图像处理 371
7.3.1 安装 OpenCV 371
7.3.2 在 ROS 2 中使用 OpenCV 371
7.4 视觉应用一:视觉巡线 374
7.4.1 基本原理与实现框架 374
7.4.2 机器人视觉巡线仿真 376
7.4.3 真实机器人视觉巡线 381
7.5 视觉应用二:二维码识别 382
7.5.1 二维码扫描库——Zbar 382
7.5.2 相机识别二维码 383
7.5.3 真实机器人相机识别二维码 387
7.5.4 真实机器人7
|
內容試閱:
|
这本书,讲机器人操作系统(ROS),更讲机器人。
ROS缘起
2007年,一群怀揣梦想的年轻人,正在斯坦福大学的机器人实验室里进行一场头脑风暴:如果可以开发一款硬件足够强大的机器人,再搭配足够好用的软件系统,那么在此之上开发的应用功能就可以被快速分享了。例如,我做的自主导航功能你可以用,你做的物体抓取功能我也可以用,只需开发一个标准化的软硬件平台,在此之上的应用就会逐渐流行,这将打造机器人领域的一个全新“爆品”。类似的原理造就了以计算机为平台的计算机时代,和以手机为平台的移动互联网时代,下一个以机器人为核心的智能机器人时代,是否也会遵循这样的逻辑?
将近20年过去了,以“事后诸葛亮”的视角来看,当时那群年轻人花重金打造的服务机器人并没有走进千家万户。机器人不像计算机或手机,它需要和外界环境产生多种多样的交互,硬件形态非常难以统一,小到纳米医疗机器人、家用娱乐机器人,大到智能驾驶汽车、人形机器人,都是未来会并存的机器人形态。不过,当年遵循“提高机器人软件复用率”思想开发的机器人操作系统——ROS,在2010年开源之后快速发展,助推过去十几年机器人行业的繁荣,逐渐成为智能机器人开发的主流标准。
当然,ROS的快速发展也远超那群年轻人的预期,本来只是为一款家用服务机器人设计的系统,被逐渐用于巡检、运输、农业等众多领域。需求越来越多,问题也越来越多,为了打造一款能够成为通用机器人标准化软件平台的“操作系统”,ROS 2在2014年第一次被提出,之后推出多个测试版本,并于2017 年年底发布第一个正式版本。截至本书定稿时,ROS 2全新的稳定版本Jazzy Jalisco发布,这也代表着ROS 2走向成熟。
本书特色和内容
本书汇聚了我过去十几年的机器人开发经验,虽然将ROS作为贯穿全书的主线,但更重要的是告诉所有读者:ROS既是开发机器人的软件平台,也是软件工具,在开发机器人时,不仅要会用这个工具,还要懂机器人开发的诸多原理。所以,本书不仅会详细讲解ROS 2的基本概念,更会介绍如何将这些概念应用在机器人开发中,同时指导读者从零构建一个完整的机器人系统。
本书共有9章,分为三部分。
第一部分(第1~3章)介绍ROS 2基础原理:主要讲解ROS 2的发展历程、核心原理和组件工具,提供大量的编程和使用示例,为读者全面展示ROS 2的基础原理和功能。
第二部分(第4~6章)介绍ROS 2机器人设计:主要讲解如何使用ROS 2设计一个仿真机器人和实物机器人,有条件的读者甚至可以根据书中内容自己做一个机器人。
第三部分(第7~9章)介绍ROS 2机器人应用:主要讲解使用ROS 2开发机器人视觉识别、地图构建和自主导航等众多应用的方法,让机器人不仅动得了,还能看懂和理解周围的环境,并且产生进一步的交互运动。
本书采用最新稳定版本ROS 2系统和全新一代的Gazebo机器人仿真平台,绝大部分功能和源码可以在单独的计算机和Gazebo仿真平台上运行。同时,本书介绍实物机器人的搭建方法,并且在实物机器人上实现相应的功能。配套源码都加入了中文注释,同时针对核心内容提供C 和Python两个版本,方便读者理解。
所以,本书不仅适合希望了解、学习、应用ROS 2的机器人初学者,也适合有一定经验的机器人开发工程师,同时可以作为资深机器人开发者的参考手册。
致谢
本书的出版离不开众多“贵人”的帮助。感谢我的妻子薛先茹,谢谢你陪我辗转多地并一直无条件支持我;感谢两个对世界充满好奇的小朋友胡敬然、胡泽然,是你们给了我前进的动力和思考的源泉;感谢电子工业出版社的支持,郑柳洁编辑为本书提供了很多宝贵建议,并组织推动本书顺利出版,张晶老师为本书的编排付出了大量心血;感谢本书的另一位作者李乔龙,配合我完成了全书的写作和修正工作;感谢当年斯坦福那群打造ROS 的年轻人:Morgan Quigley、Brian Gerkey、Tully Foote 等,是你们大胆的想法和尝试,带来了机器人开发标准化的可能;感谢ROS 机器人开发之路上一路同行的伙伴,我们都是智能机器人时代的创造者。要感谢的人太多,无法一一列举,但是我都铭记在心。
|
|