2.3 自主机器人的ROLL模型
你将如何使用它的基本能力来描述机器人?你将如何描述机器人在给定态势或场景中所扮演的角色?设计并实现以上任务,这就是编程自主机器人的全部工作。简言之,要想编程一个机器人,你需要能够描述:
做什么
何时去做
何地去做
怎样去做
同样重要的是对机器人描述“它”是什么,“何时”或“何地”指的是什么。正如我们所看到的,这就要求几个层级的机器人词汇。
按照我们的设想,一个自主机器人的机器人词汇分为7层,我们称之为机器人本体语言层级(Robot Ontology Language Level,ROLL)模型。图2-4展示了ROLL模型的7个层级。
注释
本书中,我们使用本体这个词作为一个机器人场景或态势的描述。
图2-4 自主机器人ROLL模型的7个层级
现在,我们只关注那些可能出现于7个层级之中任何位置的机器人编程。这7个层级大致可以分为两组:
机器人能力
机器人角色
小贴士
把ROLL模型放在便于查看的位置,因为我们会经常参考它。
2.3.1 机器人的能力
1~4层级中的机器人词汇基本上是针对机器人的能力,即针对机器人的硬件,它可以采取什么样的行动以及如何实现这些行动。
图2-5显示了这些语言层级是如何相关联的。
层级4的机器人词汇由层级3的指令实现,我们稍后会进行延伸。根据层级4的机器人基本词汇,我们使用层级3的指令去定义我们想要表达的东西。正如你所记得的,层级3的指令(第3代语言)经由解释器或编译器转换为层级2或层级1的微控制器指令。
2.3.2 场景和态势中的机器人角色
图2-4所示机器人的ROLL模型的5~7层级负责给予机器人关于特定场景和态势指令的机器人词汇。自主机器人执行特定场景或态势中的任务。
我们以第1章中图1-9的生日机器人BR-1为例。我们设定一个生日聚会场景,机器人的任务是点燃蜡烛并且在聚会结束后清除盘子和杯子。
一个态势是场景中一个事件的快照。比如,生日聚会机器人BR-1的一个态势是桌子上一个未点燃蜡烛的蛋糕,另外一个态势是机器人走向蛋糕,还有一个态势是定位打火机与蜡烛的距离,等等。任何场景都可以视为一个许多态势的集合,当把所有的态势组合在一起时就是一个场景。对于一个给定的场景,如果机器人正确执行其角色中的所有任务,那么我们就认为它是成功的。
层级5的态势词汇
层级5是描述场景中特定态势的词汇。让我们一起看下第1章中机器人场景1的一些态势:其中Midamba发现自己处于困境;在一个研究设施里有机器人和化学品;一些化学品是液体,其他的是气体;有些机器人是移动的,其他的没有;研究设施有一定的规模、货架和容器;机器人位于设施中它们的指定位置。对于Midamba的困境,利用层级5的词汇,图2-6给出了一些必须定义的东西。
在场景1中,Midamba有一些态势要求机器人能够处理相关词汇,如下:
研究设施所处区域的大小
区域中容器的位置
区域中容器的大小
货架的高度
化学品类型等
图2-6 层级5词汇描述的态势特性
注释
注意,描述这些特性的机器人词汇不同于那种描述机器人基本能力的词汇。在一个机器人采取每个行动之前,我们可以描述当前态势。在该机器人采取每个行动之后,我们可以描述当前态势。一个机器人采取的行动总是以一种或更多方式改变态势。
层级6的任务词汇
层级6的词汇类似于层级4的词汇,因为它描述了机器人的行动和能力。差异表现为层级6的词汇所描述的行动和能力是态势的具体特征。
例如,如果Midamba获取了表2-1能力矩阵中所列硬件配置的Unit2机器人,一个合适的任务词汇将支持如下指令:
行动1——扫描货架而寻找一罐蓝色的油
行动2——测量油的等级
行动3——如果它是A级且至少包含2夸脱,取走这罐油
注释
注意,所有行动都涉及一个特定态势的词汇具体说明。因此,层级6的任务词汇可以看作层级4词汇的一个态势具体说明。
层级7的场景词汇
我们的机器人程序员新手Midamba面对这样一个场景:研究区域中的一个或多个机器人必须识别某种可以帮助他给原电池充电或中和备用电池上的酸的化学品。一旦识别出该化学品,机器人必须取回交给他。态势中的一系列任务构成了该场景。Unit2的场景词汇综合起来描述如下:
Unit2,从你当前位置开始扫描货架,直到你找到一个可以为我的原电池充电或清除我备用电池上酸的化学品,然后取回该化学品并将它交给我。
理想的情况下,层级7的机器人词汇允许你编程机器人以直截了当的方式去完成这个任务集。实用的自主机器人必须有某种有用和有效的层级7词汇。
图2-7给出了机器人词汇5~7层级之间的联系。
5~7层级的词汇允许程序员在一个给定态势和场景中描述机器人的角色,以及机器人将如何完成这个角色。