ROS机器人开发实践
上QQ阅读APP看书,第一时间看更新

前言

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

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

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

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

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

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

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

·《Mastering ROS for Robotics Programming》,Lentin Joseph

·《ROS By Example》(Volume 1/Volume 2),Patrick Goebel

·《Programming Robots with ROS:A Practical Introduction to the Robot Operating System》,Morgan Quigley,Brian Gerkey&William D.Smart

·《Learning ROS for Robotics Programming》,Aaron Martinez,Enrique Fernández

·《A Gentle Introduction to ROS》,Jason M.O扠ane

·《ROS Robotics Projects》,Lentin Joseph

·《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez

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

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

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

胡春旭

2017年12月于广东深圳