从2012年开始,使用ROS的人越来越多,ROS社区开始举办每年一届的ROS开发者大会(ROS Conference,ROSCon),来自全球的开发者齐聚一堂,分享自己使用ROS开发的机器人应用,其中不乏亚马逊、英特尔、微软等大公司的身影,参与人数也在逐年增多。
经历前几年野蛮而快速的发展,ROS逐渐稳定迭代,2014年起,ROS跟随Ubuntu操作系统,每两年推出一个长期支持版(Long Time Support,LTS),每个版本支持五年,这标志着ROS的成熟,加快了其普及的步伐。
图 ROS的发展历程
回顾2007年,ROS的创始团队原本只想做一款个人服务机器人,却意外成就了一款被广泛应用的机器人软件系统。
但由于设计的局限性,ROS的问题也逐渐暴露,为了能够设计一款适用于所有机器人的操作系统,全新的ROS——ROS 2在2017年年底正式发布。
全新的ROS 2
ROS 2肩负变革智能机器人时代的历史使命,在设计之初,就考虑到要满足各种各样机器人应用的需求。ROS 2是一个全新的机器人操作系统,在借鉴ROS 1成功经验的基础上,对系统架构和软件代码进行了重新设计和实现。
—重新设计了系统架构。ROS 1中所有节点都需要在节点管理器ROS Master的管理下工作,一旦Master出现问题,系统就面临宕机的风险。而ROS 2实现了真正的分布式,不再有Master这个角色,借助全新的通信框架DDS、Zenoh,为所有节点的通信提供了可靠保障。
—重新设计了软件API。ROS 1原有的API已经无法满足需求,ROS 2结合C++最新标准和Python3语言特性,设计了更具通用性的API。这种设计导致原有ROS 1的代码无法直接在ROS 2中运行,但尽量保留了类似的使用方法,同时提供了大量移植说明。
—优化升级了编译系统。ROS 1中使用的rosbuild和catkin问题很多,尤其在针对代码较多的大项目及Python编写的项目时,编译、链接经常出错。ROS 2对这些问题进行了优化,优化后的编译系统叫作ament和colcon,它们提供了更稳定、高效的编译和链接过程,减少了出错的可能性,并使整个开发流程更加流畅和可维护。
系统架构对比
在ROS 1中,应用层(Application Layer)里Master节点管理器的角色至关重要,所有节点都得听它指挥。它类似于公司的CEO,有且只有一个,如果CEO突然消失,公司肯定会乱成一团。为了增强系统的健壮性和可扩展性,ROS 2创新性地摒弃了这一设计,转而采用Discovery自发现机制,允许节点自主寻找并建立稳定的通信连接,从而避免了单点故障的风险。
中间层(Middleware Layer)是ROS封装好的标准通信接口,大家写程序的时候,会频繁和这些通信接口打交道,例如发布一个图像的数据、接收一个雷达的信息,客户端会调用底层复杂的驱动和通信协议,让开发变得简单明了。在ROS 1中,ROS通信依赖底层的TCP和UDP,而在ROS 2中,通信协议换成了更加复杂也更完善的数据分发服务(Data Distribution Service,DDS)系统通信机制。
底层是系统层(OS Layer),即可以将ROS安装在哪些操作系统上,ROS 1主要安装在Linux上,ROS 2的可选项很多,Linux、Windows、macOS、RTOS都可以。
如下图所示,从ROS 2发展的时间轴中,大家可以看到ROS 2的生态正在快速迭代发展。
在ROS 2快速迭代的同时,人工智能和机器人行业也发生了天翻地覆的变化。ChatGPT如一声惊雷,掀开了人工智能的大模型时代。相比过去的深度学习,大模型有更大的模型规模,就像一个有更多神经元的大脑一样,更加聪明、稳定。在ChatGPT之后,全球涌现了数百种大模型,这些大模型快速与各行各业结合。在机器人领域,原本遭受诸多诟病的智能化问题,也因为大模型的出现,而拥有了新的可能。
同时,机器人正在从工厂走向生活,餐厅里有送餐机器人,酒店里有送物机器人,家里有扫地机器人,路面上有自动驾驶汽车,再加上已然成为热点的人形机器人,机器人行业从底层硬件,到软件系统,再到智能化应用,正在逐渐成熟,智能机器人时代的序幕已经缓缓拉开。
我从2008年开始开发机器人,2011年接触ROS,2012年创办了“古月居”机器人社区,2022年开始打造RDK机器人开发者套件,亲眼见证了ROS与机器人行业的相伴快速成长,也有幸和众多伙伴一起助推ROS在国内的普及应用。如今,“古月居”已经成为汇聚了200多万名开发者的机器人社区,RDK也正成为智能机器人开发套件的首选,一个全新的智能机器人时代正在向大家招手。
本书共有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两个版本,方便读者理解。