2.1 为什么需要更多努力通常需要通过几条机器人指令来实现一条高级或人类语言指令。例如,下面这条简单且单一的人类语言指令:机器人,握着这罐油该指令涉及机器人的几条指令。图2-2显示了基本通用机器人转换器(Basic Universal Robot Translator,BURT)的一个部分转换,分别将这条指令转换为可以传递给机器人的Arduino sketch代码(C语言)和RS Media(来自Wow Wee公司的两足机器人,使用嵌入式Linux的ARM9微控制器)代码(Java语言)。
图2-2 自然语言转换为RS Media代码(Java语言)和Arduinosketch代码(C语言)的部分BURT转换注意,BURT转换需要多行代码。在两种情形下,编译器将一个高级语言转换为机器人的ARM汇编语言。与Arduino语言相比,Java代码更加远离ARM。Java编译器将Java编译成与机器无关的字节码,这需要另外一个将其转换为机器特定代码的层。图2-3给出了将C和Java程序转换为ARM汇编的一些层。
图2-3 涉及将C和Java程序转换为ARM汇编的一些层许多用于控制低成本机器人的微控制器都是基于ARM的微控制器。如果你对使用汇编语言来编程低成本的机器人感兴趣,ARM控制器是一个很好的开始。注意在图2-3中,软件层要求从C或Java到ARM汇编顺序进行。但是,对于“机器人握着这罐油”与C或Java代码之间的转换,必要的工作是什么呢?BURT转换器展示给我们的是,我们开始一条英语指令,并将它转换为C和Java。这是如何做到的?为什么这样做?注意,BURT转换中的指令没有提到罐、油和“握着”的概念。这些概念不是微控制器语言的直接部分,也不是高级C或Java语言的内置命令。它们代表了我们想要使用和我们希望机器人理解的机器人部分词汇(但还不存在)。然而,在我们可以决定机器人词汇看起来像什么之前,我们需要熟悉机器人的轮廓和能力。思考下面这些问题:它是什么样的机器人?机器人有什么类型的传感器以及有多少?机器人有什么类型的末端作用器以及有多少?它是如何移动的,等等? 注释对于一个特定的态势或场景,机器人词汇是用于给机器人指派任务的语言。编程一个有用的自主机器人的主要功能就是创建机器人的词汇。
注释重要术语,传感器是机器人的眼睛和耳朵,它们是机器人接收其直接环境输入、信号、数据或信息的组件,也是机器人进入这个世界的接口。
末端作用器是允许机器人在其环境中处理、操纵、改变或控制对象的硬件,也是促使机器人的运动对其环境产生影响的硬件。机器人词汇与机器人的能力密切相关。例如,如果机器人没有设计用于举起的硬件,我们就不能给机器人一个举起某物的指令。如果机器人不是移动型的,我们就不能给机器人一个移动至特定位置的指令。我们可以用两种方式来实现机器人及其词汇:创建一个词汇,然后获得一个具有相应能力的机器人。基于将要使用的机器人能力创建一个词汇。无论哪种情况,必须明确机器人的能力。机器人的能力矩阵可用于此目的。表2-1给出了称为Unit2的机器人的一个样本能力矩阵,Unit2是本书中我们用来举例的RS Media机器人。
对于机器人的潜在技能设置,能力矩阵给我们提供了一个易于使用的参考。最初的机器人词汇必须依赖于机器人的基本能力集。 注释没有一个合适的机器人词汇。的确,机器人使用的是一些常见动作,但是在任何给定态势中为机器人选择什么样的词汇完全取决于设计者或程序员。
基于特定的机器人能力和其所处的场景,你可以自由设计自己的机器人词汇。注意在表2-1中,机器人Unit2有一个摄像机和颜色传感器。因此Unit2可以看见对象,这就意味着我们可以使用像注视、看、照相或扫描这样的词。成为一个两足动物意味着Unit2是可移动的。因此,词汇可以包括像移动、漫步、步行或行进这样的词。Unit2有一个USB接口,表明我们可以使用像打开、连接、断开、发送和接收这样的词。最初的机器人词汇形成了程序员发给机器人指令的基础,它会执行所要求的任务。如果我们再看表2-1中的能力矩阵,允许我们给Unit2指令的可能词汇包括:向前运动扫描一罐蓝色的油举起一罐蓝色的油给这罐油拍照本书将向你介绍的最重要概念之一是如何提出一个机器人词汇,如何利用机器人所具有的能力实施一个词汇,以及如何确定机器人微控制器可以处理的词汇。在前面的例子中,Unit2的ARM 9微控制器不能识别下面的指令:向前运动或扫描一罐蓝色的油这是我们想要使用的机器人词汇。在这种情况下,我们想要机器人执行的任务涉及向前运动,寻找一罐蓝色的油,举起它,然后给它拍照。我们希望能尽可能简单地传达这一系列任务。我们具有某个想要自主机器人在其中扮演角色的态势或场景,然后开发一系列捕获或描述我们所希望机器人扮演角色的指令,并且希望这一系列指令代表了机器人的任务。在特定态势或场景中成功编程一个扮演有用角色的自主机器人,创建机器人词汇是这整个过程中的一环。
相关资源:JAVA上百实例源码以及开源项目源代码