2011年底,我第一次接触ROS。当时一个实验室师兄在学术会议上听说了ROS,意识到它的前景广阔,考虑到我当时的研究方向,于是安排我进行研究。那时国内外ROS的学习环境比较艰苦,几乎只有wiki的基础教程(也没有现在完善)。所以开始的我,内心其实是拒绝的,但还是硬着头皮开始了。于是从拒绝到接受,从未知到熟悉,我经历了前所未有的磨难,同时也收获了前所未有的喜悦。

在这个过程中,我也常常在思考:ROS前景无限,但是国内还鲜有人知,就算有人知道,是不是也会被困难吓倒。既然我经历过,那何不总结一下,让其他人少走弯路。于是,我整理了自己学习过程中的一些资料和心得,在CSDN上以博客的形式发表,最终就是《ROS探索总结》系列的博文,后来转移到我的个人网站——古月居,至今仍保持更新。

2017年11月,ROS十周岁了!在走过的第一个十年里,ROS从蹒跚学步的孩童成长为机器人领域的巨人,然后又华丽蜕变出ROS2。如今,大多数知名机器人平台和机器人公司都支持ROS,越来越多机器人开发者也选择ROS作为开发框架。ROS已经逐渐成为机器人领域的事实标准,并将逐步从研发走向市场,助力机器人与人工智能的快速发展。

ROS的重要精神是分享,这也是开源软件的精神,所以我们才能看到如此活跃的ROS社区,和众多软件功能包的源码,并且可以在此基础上快速完成二次开发。为了促进ROS在国内的发展,现在已经有很多人、很多组织在积极推广ROS了,比如ROS星火计划、ROS暑期学校,以及网上各种各样的技术分享等,相信未来这个队伍会更加庞大。

本书以《ROS探索总结》系列的博文为基础,重新整理了ROS相关的基础要点,梳理ROS的整体框架,让你能够迅速熟悉ROS的整体框架和设计原理;在此基础上,本书以实践为重心,讲解大量机器视觉、机器听觉、机械臂控制、SLAM导航、机器学习等多方面ROS应用的实现原理和方法,并且翻译了众多ROS中的图表、内容,帮助你在实现ROS基础功能的同时,深入理解基于ROS的机器人开发,将书中的内容用于实践。

本书共有14个章节,可以分为五个部分:

第一个部分是ROS基础(1~4章),帮助你了解ROS框架,并且熟悉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的过程中,可以从这些著作中获取更多知识:

(1)《MasteringROS for Robotics Programming》,LentinJoseph
(2)《ROSBy Example》(Volume1 and Volume 2),PatrickGoebel
(3)《ProgrammingRobots with ROS - A Practical introduction to the Robot Operating System》,Morgan Quigley, Brian Gerkey & William D. Smart
(4)《LearningROS for Robotics Programming》,AaronMartinez,EnriqueFernández
(5)《AGentle Introduction to ROS》,JasonM. O'Kane
(6)《ROSRobotics Projects》,LentinJoseph
(7)《EffectiveRobotics Programming with ROS》,AnilMahtani and Luis Sanchez

在ROS探索实践与本书的创作过程中,离不开众多贵人的帮助。首先需要感谢陪伴我辗转多次并一直无条件支持我的妻子,是你给了我前进的动力和思考的源泉;其次要感谢我的导师何顶新教授,以及为我打开ROS大门的任慰博士,还有曾与我一起彻夜调试的实验室同学顾强、方华启、胡灿、孙佳将、牛盼情、熊枭等;然后感谢机械工业出版社华章公司对本书的大力支持,以及Linksprite姚琪和ROSClub李文韬对本书所用硬件平台的赞助;当然还要感谢ROS探索之路上一同前行的伙伴们:张新宇教授、刘锦涛博士、林天麟博士、王滨海博士、杨帆、田博、张瑞雷、李卓、邱强、林浩鋕等,以及与我博客、邮件交流的众多机器人爱好者、开发者。要感谢的人太多,无法一一列举,但是我都感恩在心。

ROS成长迅速,机器人系统更是错综复杂,笔者才疏学浅,书中难免有一些不足和错误之处,欢迎各位读者批评指正,这也是我继续前进的动力。本书相关内容的更新和勘误,会发布在微信公众号“古月居”和我的个人网站(https://www.guyuehome.com/)上,欢迎各位读者关注,或通过任何形式与我交流。

最后分享胡适先生的一句名言,愿你我共勉:怕什么真理无穷,进一寸有一寸的欢喜。