![](http://www.vvnnvv.com/wp-content/uploads/2021/02/41yIM7E4lNL._SY346_.jpg)
基本信息
- 出版社 : 机械工业出版社; 第1版 (2019年3月6日)
- 出版日期 : 2018年5月1日
- 品牌 : 北京华章图文信息有限公司
- 语言 : 简体中文
- 文件大小 : 118307 KB
- 胡春旭 (作者)
- 下载格式:azw3、epub、mobi
内容简介
本书以《ROS探索总结》系列博文为基础,重新整理了ROS相关基础要点,让读者能够迅速熟悉ROS的整体框架和设计原理;在此基础上,本书以实践为重心,讲解大量机器视觉、机器语音、机械臂控制、SLAM和导航、机器学习等多方面ROS应用的实现原理和方法,并且翻译了众多ROS中的图表、内容,帮助读者在实现ROS基础功能的同时深入理解基于ROS的机器人开发,将书中的内容用于实践。
前言
前言
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’Kane
·《ROS Robotics Projects》,Lentin Joseph
·《Effective Robotics Programming with ROS》,Anil Mahtani,Luis Sanchez
在ROS探索实践与本书的创作过程中,离不开众多“贵人”的帮助。首先要感谢陪伴笔者辗转多次并一直无条件支持笔者的妻子,是她给了笔者前进的动力和思考的源泉;其次要感谢笔者的导师何顶新教授,以及为笔者打开ROS大门的任慰博士,还有曾与笔者一起彻夜调试的实验室同学顾强、方华启、胡灿、孙佳将、牛盼情、熊枭等;感谢机械工业出版社华章公司对本书的大力支持,以及Linksprite姚琪和ROSClub李文韬对本书所用硬件平台的赞助;最后要感谢ROS探索之路上一同前行的伙伴们,他们是张新宇教授、刘锦涛博士、林天麟博士、王滨海博士、杨帆、田博、张瑞雷、李卓、邱强、林浩鋕等,以及通过博客、邮件与笔者交流的众多机器人爱好者、开发者。要感谢的人太多,无法一一列举,但是笔者都感恩在心。
ROS成长迅速,机器人系统更是错综复杂,笔者才疏学浅,书中难免有不足和错误之处,欢迎各位读者批评指正,这也是笔者继续前进的动力。本书相关内容的更新和勘误会发布在微信公众号“古月居”和笔者的个人网站(//www.guyuehome.com/)上,欢迎各位读者关注或者通过任何形式与笔者交流。
最后分享胡适先生的一句名言,愿你我共勉:怕什么真理无穷,进一寸有一寸的欢喜。
胡春旭
2017年12月于广东深圳
精彩书摘
2018年,机器人迎来正式工业应用以来的第56个年头。自20世纪七八十年代以来,在计算机技术、传感器技术、电子技术等新技术发展的推动下,机器人进入了迅猛发展的黄金时期。机器人技术正从传统工业制造领域向家庭服务、医疗看护、教育娱乐、救援探索、军事应用等领域迅速扩展。如今,随着人工智能的发展,机器人又迎来了全新的发展机遇。机器人与人工智能大潮的喷发必将像互联网一般,再次为人们的现代生活带来一次全新的革命。
本章从认识、安装ROS开始,逐步带你走上机器人开发实践之路。
硬件技术的飞速发展在促进机器人领域快速发展和复杂化的同时,也对机器人系统的软件开发提出了巨大挑战。机器人平台与硬件设备越来越丰富,致使软件代码的复用性和模块化需求越发强烈,而已有的机器人系统又不能很好地适应需求。相比硬件开发,软件开发明显力不从心。为迎接机器人软件开发面临的巨大挑战,全球各地的开发者与研究机构纷纷投入机器人通用软件框架的研发工作当中。在近几年里,产生了多种优秀的机器人软件框架,为软件开发工作提供了极大的便利,其中最为优秀的软件框架之一就是机器人操作系统(Robot Operating System,ROS)。
ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,可以极大简化繁杂多样的机器人平台下的复杂任务创建与稳定行为控制。
ROS最初应用于斯坦福大学人工智能实验室与机器人技术公司Willow Garage合作的个人机器人项目(Personal Robots Program),2008年后由Willow Garage维护。该项目研发的机器人PR2在ROS框架的基础上可以完成打台球、插插座、叠衣服、做早饭等不可思议的功能(见图1-1),由此引起了越来越多的关注。2010年,Willow Garage正式以开放源码的形式发布了ROS框架,并很快在机器人研究领域掀起了ROS开发与应用的热潮。
图1-1 PR2已经可以完成丰富的应用功能
在短短的几年时间里,ROS得到了广泛应用(见图1-2),各大机器人平台几乎都支持ROS框架,如Pioneer、Aldebaran Nao、TurtleBot、Lego NXT、AscTec Quadrotor等。同时,开源社区内的ROS功能包呈指数级增长,涉及的应用领域包括轮式机器人、人形机器人、工业机器人、农业机器人等,美国NASA已经开始研发下一代基于ROS的火星探测器。
图1-2 不同国籍ROS开发者的比例变化、ROS关注度最高的功能包、ROS相关论文的数量变化
ROS在机器人领域的浪潮也涌入国内,近年来国内机器人开发者也普遍采用ROS开发机器人系统,不少科研院校和高新企业已经在ROS的集成方面取得了显著成果,并且不断反哺ROS社区,促进了开源社区的繁荣发展。
ROS的迅猛发展已经使它成为机器人领域的事实标准。
ROS的设计目标是提高机器人研发中的软件复用率,所以它被设计成为一种分布式结构,使得框架中的每个功能模块都可以被单独设计、编译,并且在运行时以松散耦合的方式结合在一起。ROS主要为机器人开发提供硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制,同时整合了许多第三方工具和库文件,帮助用户快速完成机器人应用的建立、编写和多机整合。而且ROS中的功能模块都封装于独立的功能包(Package)或元功能包(Meta Package)中,便于在社区中共享和分发。
从机器人的角度来看,那些人类微不足道的行为常常基于复杂的任务需求和环境影响,对于这些问题的处理具有极大的复杂度,单一的开发者、实验室或者研究机构都无法独立完成。ROS的出现就是为了鼓励更多的开发者、实验室或者研究机构共同协作来开发机器人软件(见图1-3)。例如一个拥有室内地图建模领域专家的实验室可能会开发并发布一个先进的地图建模系统;一个拥有导航方面专家的组织可以使用建模完成的地图进行机器人导航;另一个专注于机器人视觉的组织可能开发出了一种物体识别的有效方法。ROS为这些组织或机构提供了一种相互合作的高效方式,可以在已有成果的基础上继续自己工作的构建。
![](https://www.vvnnvv.com/wp-content/uploads/2021/03/sm.png)