本书以一位受困于荒岛的年轻人的视角带领读者进行一场冒险。他必须寻找到一种给机器人编程的方法才能得以逃离。本书作为一本控制自主机器人编程指南,介绍了编程机器人传感器、电动机以及将想法转换为机器人可以自主执行任务的实际方法和技术。对于硬、制造商、DIY项目,这些技术可以用于当今领先的机器人微控制器(ARM9和ARM7)和机器人平台(包括广泛流行的低成本Arduino平台,LEGOMindstormsEV3、NXT,以及WoweeRSMedia机器人)。
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用于将一组简单且易于理解的英文指令转换成相应的机
Contents 目 录
译者序
前言
致谢
第1章 究竟什么是机器人 1
1.1 定义机器人的7个标准 1
1.1.1标准1:感知环境 2
1.1.2标准2:可编程的动作和行为 2
1.1.3标准3:改变环境、与环境交互或作用于环境 2
1.1.4 标准4:具备电源 2
1.1.5标准5:适用于表示指令和数据的语言 3
1.1.6标准6:无需外部干预的自主性 3
1.1.7标准7:一个没有生命的机器 4
1.1.8 机器人分类 4
1.1.9 传感器 6
1.1.10 执行器 7
1.1.11 末端作用器 8
1.1.12 控制器 8
1.1.13 机器人所在的场景 12
1.2 给机器人指令 14
1.2.1每个机器人都有一种语言 14
1.2.2 迁就机器人的语言 16
1.2.3在可视化编程环境中表示机器人场景 18
1.2.4 Midamba的困境 18
1.3 下文预告 20
第2章 机器人词汇 21
2.1 为什么需要更多努力 22
2.2 确定动作 25
2.3 自主机器人的ROLL模型 26
2.3.1 机器人的能力 27
2.3.2场景和态势中的机器人角色 28
2.4 下文预告 30
第3章 机器人场景图形规划 31
3.1 建立场景地图 31
3.1.1 创建平面图 32
3.1.2 机器人的世界 34
3.1.3 RSVP READ设置 36
3.2 伪代码和绘制RSVP流程图 38
3.2.1 控制流程和控制结构 39
3.2.2 子程序 43
3.3 目标和机器人状态图 46
3.4 下文预告 50
第4章 检验机器人的实际能力 51
4.1 微控制器的实际检验 53
4.2 传感器的实际检验 56
4.3 执行器和末端作用器的检验 60
4.4 REQUIRE机器人效能 62
4.5 下文预告 64
第5章 详解传感器 65
5.1 传感器感知 66
5.1.1 模拟和数字传感器 68
5.1.2 读取模拟和数字信号 69
5.1.3 传感器输出 71
5.1.4 读数存储 72
5.1.5 有源和无源传感器 72
5.1.6 传感器与微控制器的连接 74
5.1.7 传感器属性 77
5.1.8 范围和分辨率 78
5.1.9 精度和准确度 78
5.1.10 线性度 79
5.1.11 传感器校准 80
5.1.12 传感器相关问题 81
5.1.13 终端用户校准过程 81
5.1.14 校准方法 82
5.2 下文预告 83
第6章 通过编程控制机器人的传感器 84
6.1 使用颜色传感器 84
6.1.1 颜色传感器模式 86
6.1.2 探测距离 87
6.1.3 机器人环境的照明 87
6.1.4 校准颜色传感器 88
6.1.5 编程颜色传感器 89
6.2用于检测和跟踪颜色目标的数码相机 92
6.3 利用RS Media跟踪颜色目标 92
6.4使用Pixy Vision传感器跟踪颜色目标 95
6.4.1 训练Pixy以检测目标 96
6.4.2 编程Pixy 98
6.4.3 详解属性 101
6.5 超声波传感器 101
6.5.1超声波传感器的局限性和准确性 102
6.5.2 超声波传感器的模式 106
6.5.3 采样读数 106
6.5.4 传感器读数的数据类型 107
6.5.5 校准超声波传感器 107
6.5.6 编程超声波传感器 108
6.6 罗盘传感器计算机器人的航向 117
6.7 下文预告 121
第7章 电动机和伺服机构编程 122
7.1 执行器是输出转换器 122
7.1.1 电动机特性 123
7.1.2 电压 123
7.1.3 电流 123
7.1.4 转速 123
7.1.5 扭矩 123
7.1.6 电阻 123
7.2 不同类型的直流电动机 124
7.2.1 直流电动机 124
7.2.2 转速和扭矩 126
7.2.3 齿轮电动机 127
7.3电动机配置:直接和间接动力传动系统 134
7.4 室内和室外机器人的地形挑战 134
7.4.1 应对地形挑战 135
7.4.2机器人手臂和末端作用器的扭矩挑战 138
7.4.3 计算扭矩和转速需求 138
7.4.4 电动机和REQUIRE 139
7.5 通过编程使机器人移动 140
7.5.1一个电动机,还是两个、三个、更多个电动机 140
7.5.2 执行动作 140
7.5.3 编程动作 141
7.5.4通过编程使电动机移动到指定位置 145
7.5.5使用Arduino实现电动机编程 151
7.6 机器人手臂和末端作用器 154
7.6.1 不同类型的机器人手臂 154
7.6.2 机器人手臂的扭矩 155
7.6.3 不同类型的末端作用器 157
7.6.4 为机器人的手臂进行编程 159
7.6.5 计算运动学 163
7.7 下文预告 166
第8章 开始自主:构建机器人所对应的软件机器人 167
8.1 初探软件机器人 169
8.1.1 部件部分 171
8.1.2 动作部分 171
8.1.3 任务部分 171
8.1.4 场景(态势)部分 171
8.2机器人的ROLL模型和软件机器人框架 172
8.2.1BURT把软件机器人框架转换为类 173
8.2.2第一次实现自主机器人程序设计 184
8.3 下文预告 185
第9章 机器人SPACES 186
9.1 机器人需要自身的SPACES 187
9.1.1 扩展的机器人场景 187
9.1.2 REQUIRE检查表 188
9.1.3前提或后置条件不满足时会发生的情况 190
9.1.4前提或后置条件不满足时的行动选择 191
9.2 详解机器人初始化后置条件 192
9.2.1启动前提条件和后置条件 194
9.2.2编码前提条件和后置条件 195
9.2.3 前提和后置条件的出处 200
9.3 SPACES检查和RSVP状态图 204
9.4 下文预告 206
第10章 自主机器人需要STORIES 207
10.1 不只是动作 208
10.1.1 Birthday Robot Take 2 208
10.1.2 机器人STORIES