Preface 前言
为什么写这本书
大家好,我是本书的作者小鱼。我在学生时代就开始接触并使用ROS,随后参加工作,在工作中又进一步使用ROS进行机器人开发。2020年一个偶然的机会,公司安排我来调查ROS的缺陷,以及替代方案,就在那时我被ROS 2的强大功能所吸引,为其提供的机器人开发工具而兴奋,于是开始学习ROS 2。
在后续的学习和使用过程中,我深感ROS 2的中文资料少之又少,于是在2021年7月发起了鱼香ROS社区,开始分享机器人和ROS 2的相关知识。在学习ROS 2的过程中,我深知动手实践的重要性,就发布了“动手学ROS 2”一系列在线教程,希望读者可以通过动手实践来掌握ROS 2,同年又与睿慕课合作发布了相应的视频教程。
随着学习“动手学ROS 2”课程的小伙伴越来越多,我收到了大量的反馈,通过反馈深知初学者入门ROS 2和机器人开发的困难,以及“动手学ROS 2”系列课程的不足之处。恰逢此时,编辑找到我,我们一拍即合,打算从ROS 2入门角度出发写一本书,带领读者通过学习ROS 2来入门机器人系统开发。所以在本书中,不仅有ROS 2的基础知识、机器人建模和仿真知识、还有从零实现一个真实机器人系统的开发教程。
本书主要内容
本书的内容按照知识结构可以分为五个部分。
第一部分对应第1~5章,主要讲解ROS 2的基础软件库和工具集的使用,通过该部分的学习,可以让你快速掌握ROS 2的核心部分。
第二部分对应第6章,主要结合ROS 2常用的建模工具,从零创建一个移动机器人模型,然后在仿真工具中完成模型仿真,同时结合仿真机器人讲解ros2_control开源框架。
第三部分对应第7章和第8章,主要介绍基于ROS 2的导航框架Navigation 2,同时在第6章仿真移动机器人的基础上实现导航,最后在第8章介绍如何在Navigation 2中部署测试自定义的规划算法和控制算法。
第四部分对应第9章,主要讲解如何搭建一个实体机器人,着重介绍移动机器人控制系统实现和使用micro-ROS接入ROS 2,最后介绍实体机器人的建图和导航实现方法。
第五部分对应第10章,主要介绍ROS 2进阶相关知识,包括服务质量QoS、执行器和回调组、生命周期节点、消息过滤器和ROS 2中间件DDS的进阶使用。
本书的目标读者
• 对于非机器人行业中对机器人感兴趣并且想要入门机器人开发的读者,本书穿插讲解了学习ROS 2所需的Linux和编程的基础知识,让基础薄弱的读者也可以轻松学习。
• 对于机器人从业者,不仅可以从本书中学习到ROS 2的基础知识,还可以通过本书深入学习ROS 2,并将其应用到实际工程中。
• 对于机器人相关专业的高校师生,本书中每一章都涉及大量的动手实践环节,可以把本书当作机器人操作系统的学习实验教材。
• 对于那些对机器人感兴趣的读者,可以通过本书学习如何制作属于自己的仿真和实体移动机器人,并在此基础上实现自主移动导航。
本书特色
不同于其他书籍,本书更加以读者的需求为导向。在编写过程中,我根据原在线教程“动手学ROS 2”的读者反馈,对本书内容进行了大量的打磨。针对很多ROS 2初学者容易受阻的编程,本书在前面几章穿插介绍了Linux和Git等知识;针对很多小伙伴反馈学完ROS 2不知道怎么用,本书加入了大量实践环节,例如,结合ROS 2实现语音合成、人脸识别和界面绘制等,让读者可以真正学以致用;针对需要仿真的小伙伴,本书着重介绍了ROS 2仿真建模的过程,同时结合仿真介绍了ros2_control的使用;针对对实体机器人硬件开发感兴趣的小伙伴,本书引入了micro-ROS框架,从零介绍了实体机器人的软件开发流程;针对需要深入使用ROS 2的小伙伴,本书在最后一章深入探讨了ROS 2进阶相关知识,让你可以轻松地在实际项目中使用ROS 2。
阅读指南和配套资源
本书用到的部分开源库托管到了GitHub,读者在学习过程中如遇到网络问题,可以使用本书提供的专用代理工具,工具地址为http://github.fishros.org。在本书的代码块中,以“$”开头表示命令行,使用“---”分割命令和执行结果,对于非命令行的代码块,粗体部分表示重点更新,“...”表示被省略掉的不重要代码。
本书提供了大量的配套资源,如配套视频、ROS 2中文文档、官方资料网站等,这些都统一放到了本书的交流社区:https://fishros.org.cn。ROS如此璀璨,本人自知才疏学浅,本书难免有错误和不足之处,读者可以在社区中提出,除此之外,若在学习过程中遇到相关问题,也可以通过社区和我交流。
很多小伙伴都是从公众号“鱼香ROS”开始认识我的,小鱼每天都会在公众号分享机器人和ROS 2相关的文章。因为篇幅所限,本书中删减掉的内容都会以文章的形式在公众号中发表,欢迎订阅获取。
致谢
本书能够编写完成和出版,最要感谢的是广大“鱼粉”对我的支持,没有你们的反馈和鼓励,我很难将本书完成。其次要感谢的是一直站在我身边的家人,感谢来自父亲、母亲和姐姐的鞭策,感谢帮助我整理稿件的“鱼嫂”马靖雯(也是本书的第一个读者)的无条件支持。还要感谢在我的成长路上提供很大帮助的老师,他们是高中时期带我学习编程和参加比赛的老师——赵言言、大学时期的老师——殷华博士、工作时的导师——陈养斌博士,以及赵洋、苏琦、曾凡国、覃建州等为我提供过帮助的老师。同时感谢机械工业出版社对本书的大力支持。最后要感谢的是机器人和ROS生态的前行者和赶路人,他们是张新宇教授、胡春旭老师、张瑞雷老师、金海华、张鹏、熊颖、侯燕青、李德永等。除此之外,还有很多和我一起交流成长和做出贡献的爱好者、开发者和教育者,此处无法一一列举,但我都感恩在心。
小鱼
2024年1月于广东广州