首页>参考读物>计算机科学与技术>软件与程序设计

机器人编程实战
作者 : [美] 卡梅伦?休斯(Cameron Hughes),特雷西?休斯(Tracey Hughes) 著
译者 : 刘锦涛 李笔锋 译
出版日期 : 2017-06-30
ISBN : 978-7-111-57156-8
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 296
开本 : 16
原书名 : Robot Programming:A Guide to Controlling Autonomous Robots
原出版社: Pearson Education USA(Shawn)
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

图书特色

机器人编程实战
Robot Programming
A Guide to Controlling Autonomous Robots
[美]   卡梅伦·休斯(Cameron Hughes)
          特雷西·休斯(Tracey Hughes)    著
刘锦涛  李笔锋  译

机器人编程绝佳入门指南,Amazon全五星评价
通过故事场景学习编程,妙趣横生
五大核心编程技巧,夯实机器人编程基石

自由奔放、充满乐趣的小伙Midamba受困于一个荒岛,他必须找到一种给机器人编程的方法才能摆脱困境。本书从Midamba的视角,详细阐释对机器人传感器和电动机进行编程以及将想法转换为机器人可以自主执行任务的实用方法和技术,既涵盖机器人编程的基础知识、核心技巧,又提供大量图表和代码示例。书中所介绍的技术均可以用于当今硬件/创客/DIY项目主要使用的机器人微控制器(ARM 9和ARM 7)和机器人平台(包括流行的低成本Arduino平台、LEGO Mindstorms EV3、LEGO NXT,以及RS Media Robot)。
通过阅读本书,你将学到:
? 对机器人的传感器和电动机进行编程
? 对机器人手臂进行编程以执行任务
? 使用机器人STORIES,以机器人可以处理的方式描述机器人的任务和环境
? 在一个环境中开发一种用于设计机器人任务的机器人场景图形规划(Robot Scenario Visual Planning, RSVP)
? 使用机器人SPACES对机器人进行编程来处理“意外”
? 使用安全自主机器人应用架构(Safe Autonomous Robot Application Architecture, SARAA)方法安全地对机器人进行编程
? 使用Arduino C/C++和Java语言对机器人进行编程
? 结合Mindstorms EV3、Arduino,以及其他基于ARM 7、ARM 9的机器人,使用机器人编程技术
内容简介
本书以生日机器人举行生日聚会和Midamba制作自主机器人荒岛求生两个故事场景贯穿,通过大量图表、代码示例和通俗易懂的语言全面、系统阐述机器人编程的相关概念和知识,并详细讲解一系列用于机器人程序设计、规划和分析的范式和工具,是零基础学机器人编程的绝佳入门指南。
全书共12章,第1章探讨什么是机器人;第2章讨论如何把机器人语言和人类语言转化为机器人可以理解的语言;第3章描述如何进行机器人场景图形规划;第4章讨论机器人能够做什么,即检验机器人微控制器、传感器、电机和末端作用器的能力和局限性;第5章讨论不同类型的传感器以及它们如何工作;第6章讨论如何使用传感器和对不同类型的传感器进行编程;第7章讨论如何对不同类型的电动机进行编程;第8章讨论如何让机器人具有自主性;第9章讨论SPACES怎样才能用于验证机器人自主执行任务是可行的;第10章展示机器人扩展场景的完整程序;第11章讨论如何用书中介绍的技术解决Midamba的困境;第12章总结本书中使用的开源的、低成本的机器人工具和组件。
作者简介
卡梅伦·休斯(Cameron Hughes)是一名计算机和机器人程序员。他在Ctest实验室担任软件师一职,目前他致力于机器智能替代(Alternative Intelligence for Machines, AIM)和机器人智能替代(Alternative Intelligence for Robots, AIR)技术。Cameron是Advanced Software Construction 公司知识团队的首席人工智能工程师,也是智能机器人控制器和基于软件的知识组件的构建者。此外,他还在杨斯敦州立大学担任程序员/分析师一职。
特雷西·休斯(Tracey Hughes)是Ctest实验室和Advanced Software Construction 公司的高级软件和图形程序员,主要从事用户界面以及信息与认知可视化软件系统的开发。她的工作包括以图形方式展示机器人和计算机的思维方式。
译者简介
刘锦涛 博士,易科机器人实验室(exbot.net)创始人,致力于机器人导航与控制技术研究,并热衷于机器人前沿技术的分享,是国内最早的ROS技术传播者之一。出版机器人方面译著4本、专著1本。其中译著《嵌入式机器人学》被新闻出版总署评为2012年年度优秀科技图书,《机器人与未来》 被第一财经评为2015年年度特别推荐图书。
李笔锋 博士,易科机器人实验室成员,研究方向为通信与信息处理技术。

图书前言

机器人新兵训练营
警示
作为机器人程序员,我们应确保所从事的编程对于公众和机器人自身都是安全的,这是我们的特殊责任。当对机器人进行编程时,首先要考虑机器人与人类、动物、其他机器人或资产互动时的安全。这对于所有类型机器人的编程都是适用的,尤其是可编程自主机器人,即本书所介绍的机器人类型。本书所涉及的机器人命令、指令、程序和软件仅用于展示,就安全性而言其不适合用于与人类、动物、其他机器人的互动。
对机器人安全的深入研究超出了本书的范围。虽然本书所给出的机器人示例和应用经过测试可以确保其正确性和恰当性,但是不能保证其中的命令、指令、程序和软件没有任何瑕疵和错误,与任何适售性的特定标准一致,或满足针对任何特别应用的要求。
机器人代码段、程序和示例仅用于阐述,在任何情形下当它们的使用会导致人身伤害、造成财产或时间损失,以及产生理念冲突时,都不应该再继续使用。对于因本书中呈现或在相应支持网站上的机器人、命令、指令、机器人程序和示例的使用所带来的直接或间接损害,作者和出版商不负任何责任。

机器人编程新兵训练营
欢迎阅读本书。机器人编程“新兵训练营”将确保你着手开始前掌握所有必备的信息。我们已经构建了很多类型的机器人并对它们进行编程,从简单的单用途机器人到先进的多功能自主机器人组群,因而发现这个短期机器人编程训练营对于不熟悉机器人编程或想要学习新技术进行机器人编程的人来说是不可缺少的。
准备、设置、走起!无需繁琐接线
图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语言。
每个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 新兵训练营的机器人能力矩阵
运动能力 感  知 执  行 控  制
轮子 红外线 夹持器 ARM7 微控制器
两足 超声波 机器人手臂 ARM9 微控制器
四足 摄像机 推进器 LEGO Mindstorms EV3微控制器
六足(等) 热 LEGO Mindstorms NXT微控制器
空中 光 Arduino
颜色 ARM Cortex/Edison处理器
触碰

Midamba的机器人编程学习经历
本书将讲述一个小故事,即一个自由奔放、喜欢玩乐的青年Midamba如何在困境中找到自我。幸运的是,他走出困境唯一的机会是要求他学习如何对机器人进行编程。虽然Midamba在计算机编程方面有一些经验,但是他对机器人知识了解甚少,也没有机器人编程的经验。所以本书通篇将以Midamba的困境及他对机器人编程的最终成功为例。本书会展示Midamba吸取的教训以及他如何一步步成功地为他的第一个机器人编程。

上架指导

计算机\程序设计

封底文字

自由奔放、充满乐趣的小伙Midamba受困于一个荒岛,他必须找到一种给机器人编程的方法才能摆脱困境。本书从Midamba的视角,对机器人传感器和电动机进行编程以及将想法转换为机器人可以自主执行任务的实用方法和技术进行了详细阐释,既涵盖机器人编程的基础知识、核心技巧,又提供大量图表和代码示例。书中所介绍的技术均可以用于当今硬件/创客/DIY项目主要使用的机器人微控制器(ARM 9和ARM 7)和机器人平台(包括广泛流行的低成本Arduino平台,LEGO Mindstorms EV3、NXT,以及Wowee RS Media Robot)。

通过阅读本书,你将学会:
 对机器人的传感器和电动机进行编程
 对一个机器人手臂进行编程以执行任务
 使用机器人STORIES,以一种机器人可以处理的方式描述机器人的任务和环境
 在一个环境中开发一种用于设计机器人任务的机器人场景图形规划(Robot Scenario Visual Planning, RSVP)
 使用机器人SPACES对一个机器人进行编程来处理“意外”
 使用安全自主机器人应用架构(Safe Autonomous Robot Application Architecture, SARAA)方法安全地对机器人进行编程
 使用Arduino C/C++和Java语言对机器人进行编程
 结合LEGO Mindstorms EV3、Arduino,以及其他基于ARM 7、ARM 9的机器人,使用机器人编程技术

作者简介

[美] 卡梅伦?休斯(Cameron Hughes),特雷西?休斯(Tracey Hughes) 著:暂无相关简介

译者简介

刘锦涛 李笔锋 译:暂无简介

译者序

如果有人问我:十年前第一次制作机器人时,你希望能拥有哪一本书?我会回答,就是这本《机器人编程实战》!今天我们把这本书带到了读者面前,期待与大家交流、共勉。
记得我们在2009年也是使用Arduino(本书主要使用的控制器之一)进行机器人编程,虽喜欢其易学易用,但感觉与机器人相关的编程知识太过零碎,不成体系。为了寻找好的机器人编程范式,我们便开始使用ROS。但用ROS进行开发的问题则是严重依赖Linux,导致软件部署成本高(包括时间成本和硬件成本),并且对Linux编程的基础要求也比较高,这一点就难为很多初学者了。
本书的出现将改善这一困境,书中不仅提供了基础、全面、准确的机器人系统的相关概念和知识,还配有大量的图表以帮助读者理解。全书有生日机器人举行生日派对和
Midamba制作自主机器人以在荒岛求生两条线索,在故事场景中学习编程,妙趣横生!然而,本书最大的创新是提出了一系列用于机器人程序设计、规划和分析的范式或工具。即便是我们这些已经读过很多机器人相关图书的“老司机”也从本书中获益匪浅,比如机器人场景图形规划(RSVP)、实际环境中机器人效能熵(REQUIRE)、安全自主机器人应用架构(SARAA)等。
本书需要读者具备基本的Java或C++编程技巧。书中所有的机器人指令、命令和程序已经在基于ARM7、ARM9微控制器机器人以及流行并广泛使用的LEGO NXT、EV3机器人上进行了测试。
本书的翻译得到了易科机器人实验室(exbot.net)的大力支持,尤其是张瑞雷和李静两位老师审阅全书,并提出了宝贵的修改意见,向他们表示感谢!随着开源机器人社区的日渐强大,以及基于互联网的技术交流和传播,极大地便利了我们的学习和开发。尽管如此,对于初学者,仍然需要有“千里之行,始于足下”的初心和钻研精神,一本浅显易懂而引人入胜的宝典秘籍更能助你事半功倍。
本书很适合作为大家的第一本机器人编程实践书和指导手册,目标读者包括机器人竞赛团队、创客和本科高年级的大学生等。
有关本书更多讨论欢迎访问books.exbot.net。

刘锦涛

图书目录

译者序
前言
致谢
第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.1 BURT把软件机器人框架转换为类 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 209
10.1.3 扩展的机器人场景 210
10.1.4 将Unit1的场景转换为STORIES 210
10.1.5 详解场景的本体 210
10.1.6 关注机器人的意图 220
10.1.7 面向对象的机器人代码和效能问题 243
10.2 下文预告 244
第11章 系统整合:Midamba的第一个自主机器人编程 245
11.1 Midamba的初始场景 245
11.1.1 Midamba一夜之间成为机器人程序员 245
11.1.2 步骤1:机器人在仓库场景中 247
11.1.3 步骤2:设施场景1的机器人词汇和ROLL模型 249
11.1.4 步骤3:设施场景1的RSVP 250
11.1.5 机器人POV图的布局图 251
11.1.6 Midamba的设施场景1(精简) 252
11.1.7 RSVP的图形化流程图 252
11.1.8 RSVP的状态图 258
11.2 Midamba关于机器人Unit1和Unit2的STORIES 258
11.3 下文预告 270
第12章 开源SARAA机器人总结 274
12.1 低成本、开源、入门级机器人 274
12.1.1 基于场景的编程有助于确保机器人的安全 276
12.1.2 SARAA机器人总结 276
12.1.3 对机器人编程新手的建议 278
12.1.4 Midamba场景的完整RSVP、STORIES和源代码 278
术语表 279

教学资源推荐
作者: 辛运帏 饶一梅
作者: (美)本贾尼·斯特劳斯特鲁普 (Bjarne Stroustrup)著
作者: [美] 尤金尼·E.米哈伊洛夫(Eugeniy E. Mikhailov) 著
参考读物推荐
作者: (美)Alexander Stepanov, Paul McJones 著
作者: (美)Stephen Walther
作者: 常建功