前言
机器人新兵训练营
警示
作为机器人程序员,我们应确保所从事的编程对于公众和机器人自身都是安全的,这是我们的特殊责任。当对机器人进行编程时,首先要考虑机器人与人类、动物、其他机器人或资产互动时的安全。这对于所有类型机器人的编程都是适用的,尤其是可编程自主机器人,即本书所介绍的机器人类型。本书所涉及的机器人命令、指令、程序和软件仅用于展示,就安全性而言其不适合用于与人类、动物、其他机器人的互动。
对机器人安全的深入研究超出了本书的范围。虽然本书所给出的机器人示例和应用经过测试可以确保其正确性和恰当性,但是不能保证其中的命令、指令、程序和软件没有任何瑕疵和错误,与任何适售性的特定标准一致,或满足针对任何特别应用的要求。
机器人代码段、程序和示例仅用于阐述,在任何情形下当它们的使用会导致人身伤害、造成财产或时间损失,以及产生理念冲突时,都不应该再继续使用。对于因本书中呈现或在相应支持网站上的机器人、命令、指令、机器人程序和示例的使用所带来的直接或间接损害,作者和出版商不负任何责任。
机器人编程新兵训练营
欢迎阅读本书。机器人编程“新兵训练营”将确保你着手开始前掌握所有必备的信息。我们已经构建了很多类型的机器人并对它们进行编程,从简单的单用途机器人到先进的多功能自主机器人组群,因而发现这个短期机器人编程训练营对于不熟悉机器人编程或想要学习新技术进行机器人编程的人来说是不可缺少的。
准备、设置、走起!无需繁琐接线
图I-1给出了机器人控制和操作的两种基本分类。
图I-1 机器人操作的两种基本分类
遥控机器人是由一名操作员用某种远程控制装置或木偶模式(puppet mode)远程控制机器人的操作。有些远程控制要求一条连线(某种类型的线)以物理方式连接于机器人,而其他远程控制类型则是无线的(如无线电控制或红外控制)。
自主机器人是一类不需要人类操作员控制的机器人。它们能自主地访问和执行一组指令,不需要远程控制的干预或中断。
本书主要关注自主机器人操作和编程。虽然我们常讨论、解释、比较遥控机器人和自主机器人,但是本书将重点介绍对能够自主运行和执行所分配任务的机器人进行编程的基本概念。
如第9章所述,为满足运行策略而进行不同混合并匹配,存在两种类型机器人控制或操作的混合物。我们将会介绍混合并匹配不同的机器人控制策略的技术。
警示
虽然本书并未假定读者具有机器人编程的经验,但是全书假定读者在标准编程语言(如Java或C++)方面具有一定基础,熟悉基本的编程技巧。同时,本书并非以Java或C++呈现最终的机器人程序,而是先以图或通俗易懂的语言给出基本的机器人指令技巧和概念。本书将引导读者熟悉一些程序用于设计、规划和分析,比如机器人场景图形规划(Robot Scenario Visual Planning,RSVP)和实际环境中的机器人效能熵(Robot Effectiveness Quotient Used in Real Environments,REQUIRE)。
注释
本书所有机器人指令、命令和程序已经在基于ARM7、ARM9微控制器的机器人以及流行并广泛使用的LEGO NXT、EV3机器人上进行了测试。本书中使用的所有其他机器人软件也均在Mac OS X和Linux环境下进行了测试与运行。
新兵训练营基础
在试图对机器人进行编程前一定要回答五个基本问题:
1.机器人属于哪种类型?
2.机器人将要做什么?
3.机器人将要在哪里执行任务?
4.机器人如何执行任务?
5.如何对机器人进行编程?
许多新手和准机器人程序员不能回答这些基本问题,导致机器人项目不能成功实现。在令任意类型的机器人执行所分配任务的过程中,回答这些基本问题是第一步。本书演示了如何通过回答这些问题来形成一个分步的方法,从而成功指导一个机器人自主地执行一系列任务。
本书介绍的机器人编程核心技巧
本书中,我们将在机器人新兵训练营中讲解的基本技巧如表I-1所示。
表I-1 机器人新兵训练营技能表
上述技巧是让机器人执行几乎任何所分配任务必需的核心技巧。对上述五个方面做出标注是因为它们代表了夯实机器人编程基石的第二步。
基本的通用机器人转换器
我们将在本书中使用两个助手以一种易于理解和快速参考的形式呈现机器人程序和常见的机器人编程问题。第一个助手,基本通用机器人转换器(Basic Universal Robot Translator,BURT),用于呈现本书中所有的代码段、命令和机器人程序。BURT给出了每个代码段、命令或机器人程序的两个版本:
·纯英文版本
·机器人语言版本
BURT用于将一组简单且易于理解的英文指令转换成相应的机器人语言。
在某些情况下,把英文版本转换成代表机器人指令的图。在其他情形下,BURT将英文转换成标准的编程语言,例如Java或C++。BURT也可用于将英文指令转换成机器人可视指令环境,例如针对LEGO机器人的Labview或LEGO G语言。
图I-2 BURT转换的输入和输出标志
每个BURT转换都有编号,可用于编程技巧、机器人指令或命令的快速参考指南。BURT转换具有两个组件:一个输入组件和一个输出组件。输入组件包含伪代码或RSVP。输出组件包含程序代码清单,不论其是一种标准语言还是一种图形符号。它们将被赋予BURT转换的输入或输出标志,如图I-2所示。
作为BURT转换的补充,本书提供了术语表。机器人编程领域充满了技术术语和缩略词,读者可能既不熟悉又难于记忆。使用术语表可以快速查询本书所使用的任意缩写词或一些技术术语。
BRON——蓝牙机器人有向通信网络
第二个助手是蓝牙机器人有向通信网络(Bluetooth Robot Oriented Network,BRON)。我们组建了一个机器人小组,它们通过蓝牙无线协议和互联网进行通信。定位和检索机器人编程世界里读者感兴趣的技巧,故事、采访和新闻,是这个机器人小组的责任。这些材料呈现在相关模块中,并且由图I-3所示标志表示。
图I-3 BRON的Believe It Or Not
这些部分所包含的补充材料读者可以略过,但其也通常提供了对某章节所采用观点的深刻见解。在某些情况下,“BRON的Believe It or Not”包含了见诸报端和与机器人编程某个方面相关的新闻。在其他情况下,“BRON的Beliere It or Not”包含对机器人或机器人编程世界中重要贡献者的访谈摘录。在所有情况下,“BRON的Beliere It or Not”部分旨在提供关于机器人或机器人编程世界真知灼见。
关于读者机器人知识的假设
本书无须接触过机器人即可阅读和学习。大多数章节以通俗易懂的语言解释概念,并用图解加深理解。然而,为了能从本书中获得最大的收获,你最好能够亲自在机器人上尝试和测试命令、指令或程序。
本书中,我们将在几种不同类型的机器人上使用和测试指令与程序,并且所呈现的想法可扩展和应用到许多类型的机器人。如果你的机器人已具备了至少一种(如表I-2所示)能力,那么你就可以在你的机器人上运用本书中的任何程序。
注释
我们也会展示如何使用除表I-2之外的其他传感器给机器人编程,但是本书的主要想法是仅使用表I-2中列出的传感器进行尝试和测试。
表I-2 新兵训练营的机器人能力矩阵
Midamba的机器人编程学习经历
本书将讲述一个小故事,即一个自由奔放、喜欢玩乐的青年Midamba如何在困境中找到自我。幸运的是,他走出困境唯一的机会是要求他学习如何对机器人进行编程。虽然Midamba在计算机编程方面有一些经验,但是他对机器人知识了解甚少,也没有机器人编程的经验。所以本书通篇将以Midamba的困境及他对机器人编程的最终成功为例。本书会展示Midamba吸取的教训以及他如何一步步成功地为他的第一个机器人编程。