Preface机器人新兵训练营警示作为机器人程序员,我们应确保所从事的编程对于公众和机器人自身都是安全的,这是我们的特殊责任。当对机器人进行编程时,首先要考虑机器人与人类、动物、其他机器人或资产互动时的安全。这对于所有类型机器人的编程都是适用的,尤其是可编程自主机器人,即本书所介绍的机器人类型。本书所涉及的机器人命令、指令、程序和软件仅用于展示,就安全性而言其不适合用于与人类、动物、其他机器人的互动。
对机器人安全的深入研究超出了本书的范围。虽然本书所给出的机器人示例和应用经过测试可以确保其正确性和恰当性,但是不能保证其中的命令、指令、程序和软件没有任何瑕疵和错误,与任何适售性的特定标准一致,或满足针对任何特别应用的要求。
机器人代码段、程序和示例仅用于阐述,在任何情形下当它们的使用会导致人身伤害、造成财产或时间损失,以及产生理念冲突时,都不应该再继续使用。对于因本书中呈现或在相应支持网站上的机器人、命令、指令、机器人程序和示例的使用所带来的直接或间接损害,作者和出版商不负任何责任。
机器人编程新兵训练营欢迎阅读本书。机器人编程“新兵训练营”将确保你着手开始前掌握所有必备的信息。我们已经构建了很多类型的机器人并对它们进行编程,从简单的单用途机器人到先进的多功能自主机器人组群,因而发现这个短期机器人编程训练营对于不熟悉机器人编程或想要学习新技术进行机器人编程的人来说是不可缺少的。
准备、设置、走起!无需繁琐接线图I1给出了机器人控制和操作的两种基本分类。
图I1机器人操作的两种基本分类遥控机器人是由一名操作员用某种远程控制装置或木偶模式(puppetmode)远程控制机器人的操作。有些远程控制要求一条连线(某种类型的线)以物理方式连接于机器人,而其他远程控制类型则是无线的(如无线电控制或红外控制)。
自主机器人是一类不需要人类操作员控制的机器人。它们能自主地访问和执行一组指令,不需要远程控制的干预或中断。
本书主要关注自主机器人操作和编程。虽然我们常讨论、解释、比较遥控机器人和自主机器人,但是本书将重点介绍对能够自主运行和执行所分配任务的机器人进行编程的基本概念。
如第9章所述,为满足运行策略而进行不同混合并匹配,存在两种类型机器人控制或操作的混合物。我们将会介绍混合并匹配不同的机器人控制策略的技术。
警示虽然本书并未假定读者具有机器人编程的经验,但是全书假定读者在标准编程语言(如Java或C++)方面具有一定基础,熟悉基本的编程技巧。同时,本书并非以Java或C++呈现最终的机器人程序,而是先以图或通俗易懂的语言给出基本的机器人指令技巧和概念。本书将引导读者熟悉一些程序用于设计、规划和分析,比如机器人场景图形规划(RobotScenarioVisualPlanning,RSVP)和实际环境中的机器人效能熵(RobotEffectivenessQuotientUsedinRealEnvironments,REQUIRE)。
注释本书所有机器人指令、命令和程序已经在基于ARM7、ARM9微控制器的机器人以及流行并广泛使用的LEGONXT、EV3机器人上进行了测试。本书中使用的所有其他机器人软件也均在MacOSX和Linux环境下进行了测试与运行。
新兵训练营基础在试图对机器人进行编程前一定要回答五个基本问题:
1.?机器人属于哪种类型?2.?机器人将要做什么?3.?机器人将要在哪里执行任务?4.?机器人如何执行任务?5.?如何对机器人进行编程?许多新手和准机器人程序员不能回答这些基本问题,导致机器人项目不能成功实现。在令任意类型的机器人执行所分配任务的过程中,回答这些基本问题是第一步。本书演示了如何通过回答这些问题来形成一个分步的方法,从而成功指导一个机器人自主地执行一系列任务。
本书介绍的机器人编程核心技巧本书中,我们将在机器人新兵训练营中讲解的基本技巧如表I1所示。
表I1机器人新兵训练营技能表技巧描述机器人运动规划与编程手臂运动夹持器编程末端作用器运动机器人导航利用不同类型的传感器对机器人编程红外传感器超声波传感器触碰传感器光传感器射频识别传感器摄像机传感器温度传感器声音传感器分析传感器使用电动机机器人导航中使用的电动机机器人手臂、夹持器和末端作用器中使用的电动机传感器定位中使用的电动机决策机器人动作选择机器人方向选择机器人路径选择指令转换将英文指令和命令转换成一种编程语言或一种机器人可以处理的指令形式上述技巧是让机器人执行几乎任何所分配任务必需的核心技巧。对上述五个方面做出标注是因为它们代表了夯实机器人编程基石的第二步。
基本的通用机器人转换器我们将在本书中使用两个助手以一种易于理解和快速参考的形式呈现机器人程序和常见的机器人编程问题。第一个助手,基本通用机器人转换器(BasicUniversalRobotTranslator,BURT),用于呈现本书中所有的代码段、命令和机器人程序。BURT给出了每个代码段、命令或机器人程序的两个版本:
纯英文版本机器人语言版本BURT用于将一组简单且易于理解的英文指令转换成相应的机