移动机器人是一个集环境感知、动态决策与规划、行为控制与执行等多功能于一体的机器人综合系统。
移动机器人的概念非常广泛,自动驾驶汽车、无人机、水下机器人等各种位置可变的机器人都可以算作移动机器人。在这里我们先划分一下界限,本书所讲的“移动机器人”主要指地面上的移动机器人。
扫地机器人作为目前出货量最大的一种移动机器人,如图1-1所示,已成为一种比较常见的家用电器。目前,中高端的扫地机器人已经安装了激光雷达、相机、超声波传感器、红外线传感器等多种元件,拥有SLAM、路径规划、多传感器融合等算法,确保在家庭复杂的环境中依然可以高效地完成扫地、拖地等功能。
图1-1 扫地机器人
扫地机器人被放入室内环境5分钟后,便可对室内环境了如指掌,不仅可以平稳绕过拖鞋、插线板等障碍物,还可以根据场景动态调整风量、水量的大小,具备自动回充、语音识别等功能。
这样一个小小的扫地机器人,就是一个典型的移动机器人系统,我们就从这里正式开始移动机器人原理与应用的学习。
机器人诞生之后,首先在工业领域得到了广泛应用,随着大范围移动的需求,移动机器人这一分支也逐渐产生。
工业移动机器人如图1-2所示,也就是我们常说的AGV(Automated Guided Vehicle,自动导引运输车)和AMR(Autonomous Mobile Robot,自主移动机器人),它们是目前移动机器人领域应用非常广泛的种类。比如,电商平台会利用AMR构建智能化仓库,我们购买的商品会被自主移动机器人以最快的方式分拣并送到快递员手上;我们平时邮寄包裹,在快递公司的仓库中,也是被这样的机器人快速分拣,去往不同目的地的传送带上;还有一些生产电子产品的工厂,也可以使用这样的移动机器人替代原本需要很多人力才能完成的物料搬运工作。这些移动机器人拥有众多传感器并融合智能算法,比如动态路径规划、自主躲避障碍物或行人、配合外部设备完成上下料等,这些功能可有效应对不同工业场景中的复杂需求。
图1-2 工业移动机器人
自动驾驶汽车也是一种典型的移动机器人系统,如图1-3所示。为了保证驾驶过程绝对安全,汽车上装配了非常多的传感器和极为复杂的控制算法。它可以通过多个相机、雷达、超声波传感器来实时构建周围环境的三维信息,不仅可以动态识别路面上的行人车辆、车道线、交通指示灯等,还可以安全完成超车、会车、跟车、转向等重要功能,同时面对突发状况也可以及时处理,比如躲避突然出现的车辆,礼让行人等,最终能够自动行驶入库,把我们安全顺利地送到目的地。
图1-3 自动驾驶汽车
从以上应用领域来看,目前移动机器人的研究热点集中在更为复杂场景的智能化需求:
· 环境的感知与建模: 把机器人放在陌生环境中,它需要尽快熟悉环境之后才能开展工作,在扫地、送货等机器人中都会用到。
· 定位与导航: 这是移动机器人的基本技能,只要机器人移动,它就需要知道自己的位置,以及如何运动到目标位置。这种行为的实现在复杂场景中并不容易,比如货架的位置挡住了原本的路径,或者突然出现的行人,都会影响机器人的定位与导航。
· 环境理解: 这一点对于移动机器人来说是非常困难的,在有限的环境信息中还好处理,但是由于人类的生活环境较为复杂,比如在酒店中如何精准识别客人,或者通过已知的图像推理出来看到的物体是什么,以及如何进行操作就比较困难。
· 多机器人协同: 未来机器人肯定是多样化存在的,这些机器人之间也需要沟通,这就涉及多个机器人协同,不只是两个、三个,有可能是成千上万个,比如大街上跑的都是自动驾驶汽车,那后台的调度系统一定是非常复杂的。
· 人机交互: 机器人是服务于人类的,交互行为必不可少,比如我们可以和机器人语音沟通,机器人也可以通过我们的肢体或表情理解我们的指令。
针对以上研究热点,未来的移动机器人需要通过多种传感器感知环境信息,也需要一个大脑不断动态决策、规划各种功能,还需要一系列驱动装置控制执行设备,完成大脑下发的指令,缺一不可。如何高效地开发机器人,在技术层面上是非常重要的一个问题,针对这个问题,2007年一群斯坦福大学的有志青年尝试给出一个解决方案——机器人操作系统。
机器人操作系统(Robot Operating System,ROS),历经十几年的发展,已经成为机器人开发中必然要使用的一个环节。这样一个复杂的软件系统,是如何诞生与发展的呢?
2007年,一些斯坦福大学的学生产生了这样一个想法:我们有没有可能做一款个人服务机器人,帮助我们完成洗衣、做饭、收拾家务等我们不想做的事情,甚至还可以在我们无聊时,陪我们聊天玩耍。最后,他们真的“做出来”这样一款机器人。
他们深知做出这样一款机器人并不容易,机械工艺、电路、软件都要涉及,而且横跨很多专业,一个人做不了这些工作。那为什么不联合所有人一起干呢?如果我们设计一套标准的机器人平台和应用软件,就可以让所有人都在同一个平台上做应用开发,因为应用软件都基于统一的平台,所以我们就有机会共享其他人开发的应用软件。
初期的机器人原型是用实验室可以找到的木头和一些零部件组成的,后期有了充足的资金,才得以实现这款外观精致、性能强悍的机器人——Personal Robot 2(PR2),如图1-4所示。
图1-4 ROS中的元老机器人——PR2
PR2机器人可以完成叠毛巾、剪头发、空地协同、熨烫衣服、做早餐、打台球等一系列复杂的活动,以叠毛巾为例,这在当时是轰动机器人圈的重要成果,因为第一次有机器人可以完成柔性物体的处理,虽然效率不高,但在学术层面却推动机器人技术向前走了一大步。
PR2中的软件框架就是ROS的原型,ROS因这款个人服务机器人而被大家熟知,很快从PR2中独立出来,成为了更多机器人使用的软件操作系统。
ROS发展历程如图1-5所示,ROS诞生于2007年的斯坦福大学,早期的PR机器人项目在Willow Garage公司的支持下,快速发展迭代。2010年,第一批20台PR2机器人落地,Willow Garage为这些机器人举办了毕业典礼,此时他们已经为其中的软件正式确定了名称,就叫作机器人操作系统(ROS)。同年,ROS也肩负着让更多人使用的使命,正式开源。
图1-5 ROS发展历程
PR2机器人虽好,但是成本居高不下,几百万的价格让绝大部分开发者望而却步,官方在2011年发布了一款性价比更高的机器人——TurtleBot,这款机器人采用扫地机器人的底盘,加上体感传感器Kinect,使用笔记本电脑就可以控制。其支持ROS众多开源功能,更关键的是价格便宜。这款机器人的普及,很大程度上也推动了ROS的应用。
从2012年开始,使用ROS的人越来越多,ROS官方也开始每年举办一届ROS开发者大会——ROS Conference(ROSCon),来自全球的开发者齐聚一堂,分享自己使用ROS开发的机器人应用,持续至今。这也是ROS一年一度的盛会,参与人数和企业越来越多,其中不乏亚马逊、Intel、微软等大公司的身影。
经历前面几年野蛮而快速的增长,ROS逐渐迭代稳定。2014年起,ROS跟随Ubuntu系统,每两年推出一个长期支持版,每个版本支持五年时间,这就意味着在支持期间,ROS自身的变动不再会频繁导致上层应用出现问题,这让ROS又一次加快了普及的步伐,2016年的Kinetic版本、2018年的Melodic版本、2020年的Noetic版本,表明ROS一步一步进入稳定迭代周期。ROS机器人应用案例如图1-6所示。
图1-6 ROS机器人应用案例
时至今日,ROS已经广泛用于各种机器人的开发,无论是机械臂、移动机器人、水下机器人,还是人形机器人、复合机器人,统统都可以看到ROS的身影,可以说ROS已经成为机器人领域的普遍标准。ROS发展迅猛,正在推动机器人革命这波浪潮,相信每一个人在其中都大有可为。
本章介绍了移动机器人的发展现状,我们一起认识了常见的移动机器人,它是集环境感知、动态决策与规划、行为控制与执行等多功能于一体的综合系统;同时介绍了机器人开发中重要的软件系统——机器人操作系统(ROS),经过十几年的发展,ROS已经成为机器人领域的普遍标准,也是我们开发机器人的重要工具。