8.1 由设备到机器人
把我们身边形形色色的“物”都连接到互联网,这就是物联网。物联网中使用的设备随着时间的推移在不断进化,这条进化之路的前方到底有什么呢?这里我们就围绕其中一种形式,即机器人来对讨论一下这个问题。
8.1.1 机器人——设备的延续
可能有人会好奇物联网与机器人之间到底存在着什么样的关系。这里我们先来看一下机器人的结构(图8.1)。
当然其中还包括一些机器人特有的构成要素,例如驱动器和用于驱动的电机驱动等。控制的内容也并非单纯的信号控制,还需要实现运转控制乃至图像识别等大量多样化功能。
然而从整体架构来说,机器人和普通设备一样,都是由输入设备、输出设备,以及控制这两者的控制器这三个要素构成。从这个角度来说,机器人算是一种高度集成了各式设备的机器。也就是说,可以把设备开发过程中的大多数成果都应用到它身上。
8.1.2 机器人的实用范围正在扩大
过去的机器人市场以产业机器人为中心,机器人只能用在工厂的生产线等少数环境中。然而近年来,其活跃范围正在不断扩大。
美国亚马逊收购了一家叫作Kiva Systems 的公司,这家公司一直在开发用来管理工厂库存的机器人,美国亚马逊把公司配送中心的商品搬运工作都交给了Kiva Systems 开发的机器人来完成(图8.2)。机器人能够读取贴在配送中心地面上的条码,再把正确的货物依次运到工作人员所在的地方。
从货架上挑选商品这项工作一直是靠人工完成的,但现在人们也在进行研究开发,试图让机器人来完成这项工作。另外,亚马逊还发布了试图用飞行机器人实现商品配送自动化的计划。如果能实现这些功能,那么从用户在网站上点击鼠标的那一刻起到货品配送到家为止,整个流程都会通过机器人来实现自动化。
除此之外,市面上还在陆续发售一种远端临场机器人,用户通过远程操作这种机器人,还能模拟参加会议和聚会。已经有一部分企业开始实际导入这种机器人,来作为远程会议系统的补充(图8.3)。
这些新型机器人需要在距离人类活动范围较近的场所工作。为了能令机器人在上述这类复杂的环境下稳定运行,必须要做到让其适应周围的环境。
打个比方,拿远端临场机器人来说,在用其进行远程操作时,人类的视野是受限的,因此单凭人类的力量很难实现所有的移动操作。如果大家想象一下只用摄像头的影像来无线操纵几公里以外的模型,就会明白这有多难了。所以需要一些技术来让机器人自行移动到目的地。
综上所述,如果想构建一个能够在一定程度上自动执行任务的半自主性系统,那么就需要把各种各样的传感器组合起来,构建一个先进的机器人系统。
8.1.3 构建机器人系统的关键
要想把各种设备和传感器组合在一起,并由此构建一个机器人系统,需要克服繁多的问题。在此我们从软件开发的角度出发,看一下开发机器人系统需要的两个关键点。
首先第一点,需要高效利用机器人专用的中间件。就像前文说的那样,机器人开发是一项需要高度整合各种各样设备的工作,如果要从零开始开发机器人系统,那么在技术上、时间上、金钱上都需要投入相当巨大的成本。针对这点,人们将机器人需要的各类软件要素总结在一起,开发出了专门用于机器人的中间件。通过有效使用这类中间件,人们就能够实现高速开发、提升可维护性,以及与外部系统灵活联动等。
第二点,要高效利用网络环境。包括前文介绍过的仓库管理机器人和远端临场机器人在内,机器人很少单独进行某项操作,而是接收外部发来的信息和命令,将这些信息和命令加以组合来执行任务。为了做到这点,我们也需要把机器人连接到网络,就像把前面说的那些物联网设备连接到网络一样,另外还需要准备一个环境来使用那些存在云端服务器上的资源。
下面我们再来看一下实现这两个关键点都需要哪些知识。
8.2 利用机器人专用中间件
开发者在实际构建机器人时,面临的最大难题是如何把多个构成要素整合为一个整体系统。此时能够帮助我们的就是机器人专用中间件。
8.2.1 机器人专用中间件的作用
机器人是多种多样的硬件和软件的集合体。每时每刻都有各类传感器信息涌入机器人的控制计算机里,例如摄像头、麦克风、力传感器等发来的传感器信息。
为了基于这些信号做出符合情况的判断和响应,需要整合各个硬件要素的输入输出控制、图像处理和语音识别等复杂的识别操作和识别结果,把整合结果跟用于决定机器人行为的任务决策处理等巧妙地加以结合。机器人专用中间件是一个用于实现上述内容的平台。它提供的内容有设备控制(驱动)、软件模块间的通信接口,以及软件包的管理功能等(表8.1)。
此外,最近很多机器人专用中间件还配备了用于搭建系统的开发工具和运动仿真技术等。只要能够高效使用中间件,想必会在极大程度上降低机器人开发的难度。
主要的机器人专用中间件有RT 中间件和ROS 两种,下面来具体看一下。
8.2.3 RT中间件
RT 中间件(RT-Middleware)是日本生产的一种软件平台规格,它的用途在于把构成机器人的各个要素进行软件模块化,进而整合成机器人系统。
至于实现,有产业技术综合研究所A 开发的OpenRTM-aistB 等数种方式。
RT中间件的特征
对RT 中间件而言,构成系统的硬件和软件都是构成RT 功能的要素。把这些要素进行软件模块化,得到的结果就称为RT 组件,机器人就是由这些组件组成的。
组件中定义了用于跟其他组件交换数据的接口。由于RT 组件分别集成了不同的功能,所以开发的系统才能灵活地进行扩展。除此之外,组件还能为其他的系统重复利用(图8.4)。
RT 组件的模块模型跟接口被注册为在UMLA 标准化等方面著名的OMGB 国际标准,这是为了避免设备与设备、机器与机器之间发生兼容性问题。
其开发环境也很完善。产业综合技术研究所开发了一个名为OpenRT Platform 的综合开发环境,这个环境可以设计机器人系统、进行模拟实验、生成操作,以及生成情景等。这样一来,组件的制作乃至集成都能够在同一环境下进行了(图8.5)。实际制作机器人并用实体机器验证和确认运行状况是需要耗费大量时间和劳动力的。因此,这样的模拟环境对于迅速查看机器人的运行状况以及找到问题所在来说非常重要。
8.2.3 ROS
ROS(Robot Operating System,机器人操作系统)是一个在欧美地区广泛应用的机器人开发开源平台,可以说是当今世界应用最广泛的机器人开发平台。
ROS 的开端要追溯到21 世纪初于斯坦福大学进行的一个个人机器人项目。后来,美国Willow Garage 公司在2007 年开始着手开发ROS,它还开发了PR2 作为研究平台,并逐渐将其提供给全世界的研究机构,从而提高了ROS 的功能性。ROS 与RT 中间件不同,针对ROS 的国际标准化活动很少,但是在一些活跃社团的支持下,ROS 的导入数量不断扩大,正在逐步获得世界性的事实标准的地位(表8.2)。
使用ROS 的基本上都是大学和研究机构,不过民间也在逐渐导入ROS。2012 年,丰田汽车公司发布了采用ROS 模块的生活助手机器人HSR。
此外在2014 年,国际空间站一直使用的由NASAB 开发的机器人Robonaut 2 也采用了ROS,这一行动向全世界表明ROS 的稳定性已经达到了一定水准。
虽然ROS 的管理主体已于2013 年移交给了OSRF,但在美国政府对机器人产业的支持下,ROS 在人们心中的地位正在不断提高。
ROS的特征
在构建机器人系统这点上,ROS 与RT 中间件一样,都是通过组装一种叫作“节点”的软件模块来构建系统。
关于节点的规格并没有特定的国际标准,不过ROS 单独提供了一些变换了形式的接口,如话题、服务、参数,这样在把ROS 与模块联动时,就能采用跟RT 组件相似的思路。
此外,除了提供模拟器和用于环境可视化的工具,ROS 还给特定的机器人提供了一个集合有特定软件模块组的软件包,使用起来并不比RT 中间件逊色。
从这种意义上来看,可以说ROS 的独到之处更在于其理念而非技术机制。浏览ROS 的官方网站我们就会发现前面有这么一句话:“ROS =Plumbing + Tools + Capabilities + Ecosystem”。意译过来就是,“ROS是一种帮助人们利用软件模块组和机器人的方便工具,同时也是一个支撑它们的用户社区”。
前文已经提过,ROS 正在逐渐进入千家万户,同时ROS 的社区形成了一种文化,即公开分享源代码,众多研究者来针对各自擅长与不擅长的领域一起互帮互助。
从前,机器人研究人员如果想研究自主移动算法,就需要学习生成地图和控制硬件的算法,因此往往不得不走很多弯路。ROS 这个社区利用共同的平台使研究得以顺利进行,加速了机器人的发展。
8.3 连接到云端的机器人
物联网就是把所有设备连接到互联网,这个概念也被逐渐应用于机器人领域。当下,一个将云计算和机器人技术合二为一的词汇“云机器人”正为人们所关注。
8.3.1 云机器人
以下三点给云机器人的诞生创造了条件。
①网络的低成本化和高速化→高速无线通信、光通信
②大数据处理能力的成熟→ Hadoop、Spark、Storm、Deep Learning
③机器人技术的开放→ RT 中间件、ROS
其中有一点尤为重要,那就是“机器人技术的开放”。随着机器人专用中间件的实现,机器人软件也在不断进步与完善,一个能从外部访问综合机器人系统的环境就此形成。
云机器人的功能
云机器人在机器人方面提供了两项功能(图8.6)。
第一个功能是“知识共享”。为了让机器人在家庭等环境中执行任务,人类需要事先收集和输入室内地图、用户信息等环境本身的数据。以往的机器人需要人类分别进行高级设置才能使用,但现在通过共享数据,机器人就能够沿用其他机器人获取的信息,一边补充完善这些信息一边行动。能共享的不仅是数据,还包括应用程序,还可以让机器人远程利用开发者开发的新功能。
第二个功能是“强大的运算能力”。图像识别和语音识别等识别操作多适用于机器学习等高负荷算法,如果用机器人来实现这些操作,那么可想而知,机器人的负担就会非常重,识别也会花费相当长的时间。如果能把机器人连接到网络,就能把语音数据和图像数据发送给服务器,然后只接收识别结果,进而使用充裕的运算环境。
云机器人是一个较为崭新的概念,人们正在一步步地不断开发用于实现云机器人的软件。下面让我们来看一下用于实现云机器人的两个平台:UNR-PF 和RoboEarth。
8.3.2 UNR-PF
UNR 平台(以下简称UNR-PF)是一个软件环境,用于构建一种综合了数台联网机器人的服务,其开发是以日本国际电气通信基础技术研究所为中心(ATR)进行的。
UNR-PF 环境由三个要素构成,分别是服务应用程序、平台服务器、机器人。其中平台服务器提供了如下两项功能。
功能1:抽象化硬件
首先需要进行硬件的抽象化(图8.7)。
·
请大家想象一个场景:你需要对轮式和双足步行这两种机器人发出“前进”的指令。尽管这些机器人都具备移动功能,但二者硬件的结构却是不同的。对以往的机器人服务而言,如果想在断开网络的情况下运行这些机器人,就需要对每个机器人分别发送“转轮子”或是“动脚”的指令。
而UNR-PF 导入了一个名为RoIS Framework 的机制,这种机制可以在平台内吸收每个机器人的规格差异,并且从服务应用程序的角度来说,还能凭借通用的API 来使用多个机器人。
在RoIS 的概念中,机器人的功能是以HRI 组件为单位,而机器人本身是以多个HRI 组件构成的HRI 引擎为单位描述的(图8.8)。
往系统新追加机器人时,要把表示HRI 引擎结构的配置信息注册到UNR-PF 上。只要UNR-PF 从服务应用程序接收到一个记录有用户想利用的功能清单,就会搜索具备这些功能的机器人,将服务和机器人自动进行配对,以实现远程操作。因为所有机器人里面都记载了硬件的运行方法,所以服务应用程序能够使用HRI 引擎的通用API 来控制机器人。
RoIS Framework 是经OMG 认定的国际标准规格。它还跟使用RT 中间件和ROS 构建的系统之间具有很高的兼容性,能够应用于多种硬件。
功能2:服务环境的数据共享
需要综合并管理各种各样的信息才能让机器人提供服务,例如机器人周边的地图和物体等空间信息,机器人使用者的信息,机器人的管理信息等。
UNR-PF 还作为这些数据的管理基础发挥着作用。它为服务应用程序和机器人提供空间明细、机器人明细、用户明细等多样的数据库(图8.9)。
如果想让机器人在店铺中从事导购工作,那么还能够实现以下这样的服务:用面部识别和RFID 来进行用户个人信息认证,并基于以往的购买信息推荐商品。
8.3.3 RoboEarth
RoboEarth 是欧盟(EU)第七研发框架计划(FP7)的一环,是欧洲多所大学和企业共同进行的软件开发项目。他们以“云机器人的实现”为目标,开发了支持ROS 的软件组件。所有成果都以开源的形式公开,用GitHub 等软件就能获得这些成果。
首先,RoboEarth 的简要概念如图8.10 所示。RoboEarth 中的云环境大体上由两个要素构成:负责保存周边地图和环境中物体信息的信息管理基础RoboEarth 数据库,以及云端上的执行处理基础Rapyuta。
云引擎Rapyuta
Rapyuta 会在云端复制一个机器人的运算处理环境,将其作为Linux容器。Rapyuta 准备了ROS 节点的接口,机器人会将其识别为普通的ROS 节点。这样一来就可以不顾及云端和本地的界限,用普通的ROS图结构实现云机器人的执行环境。
我们来为大家介绍一个Rapyuta 应用实例,即在RoboEarth 中多个机器人相互协调来制作一张地图的例子(图8.11)。机器人连接着用于跟RGB-D 传感器通信的主板,拍摄下的数据统统会被传送到云端。然后,这些数据会在Rapyuta 上合成,最后制成能被数个机器人共享的地图数据。
通过利用云环境,即使是便宜的硬件也能进行这种高级的操作,就这点而言,本实例给了我们一个巨大的冲击。
知识推理引擎KnowRob
RoboEarth 不仅有Rapyuta 和RoboEarth 数据库,还有几个与二者联动运行的应用程序。
KnowRob 是为机器人而生的知识推理引擎。除去RoboEarth 数据库中积累的数据以外,它还会把Web 上的信息,对人类行为观察的结果,以及机器人获取的传感器信息等都整合成知识地图——本体图(ontologymap),令机器人自主执行任务。
打个比方,假设我们给机器人下达了一个“烤薄煎饼”的任务,那么机器人就会基于地图中的信息,推导和提取薄煎饼的制作方法、制作顺序、制作材料等知识,自主地去实现烤薄煎饼的操作(图8.12)。我们也可以自己制作知识地图,帮助机器人执行多样化的任务。
RoboEarth 于2014 年1 月终止了与开发项目有关的活动,但开发成果还继续在ROS 社区中为人们所用。最近也出现了把UNR-PF 和KnowRob 联动的研究事例。虽然云机器人的发展才刚刚开始,但相信今后还会陆续开发出各种各样的软件。
由于参考书本身的时效限制,这里介绍的两个平台都是相对发展较早的。近年来我国也涌现了许多卓越的云机器人平台,如百度领衔的机器人AI,华为领衔的“OpenHarmony星火计划”等等,感兴趣可以查阅相关资料了解了解。
8.4 物联网和机器人的未来
各类用于构建机器人系统的开源软件的出现(如RT 中间件和ROS)急剧降低了以往机器人开发中存在的额外负担。除此之外,云机器人正在成为一门向复杂环境中(例如,我们的家庭中)导入机器人时不可或缺的技术。
从软件开发的角度来说,机器人开发社区依然停留在以大学为中心的研究开发阶段,还无法实现成熟的商业化。不过,开发者必须意识到机器人是设备进化所导致的必然结果。
为了将来能向复杂的环境中导入机器人,开发者需要能够分析当下存在的问题,并向客户提示可以利用机器人技术(RT)等来解决这些问题。当然要想做到上述内容,一方面必须要具备与RT 相关的知识,另一方面还需要研究客户想实现的服务内容,以及为此需要怎样利用机器人。
有一点大家需要注意,即我们在第3 章曾介绍说硬件开发的难度同样适用于机器人,因此原型设计和提前验证的重要程度就又上升了一个档次。尤其是对于那些在人类附近活动的机器人而言,需要具备很强的安全性和稳定性。不能光提前预想,还要在实地反复进行验证,减少发生意外状况的可能性,这一点是非常重要的。
服务机器人现在正好处在开始走出实验室,往民间普及应用的阶段。开发者需要把机器人作为设备融入物联网服务之中,学习如何将两者整合为一个完整的系统。