机器人系统设计与制作:Python语言实现1.1 什么是机器人

摘要


机器人学概述

你如果读过技术性比较强的书籍,就会发现此类书的开头第1章基本都遵循相同的结构。它会先向读者描述一下该书所选的主题多么有意义,开始阅读该书是做了一个多么正确的决定,以及在后续的章节中会有很多非常有意思的内容不断地吸引你一直看下去。

但本章并不是上述所说的这样一个章节。本章从下面这个观点开始:

机器人学是一门艺术。

对于这样一个鲜明的观点陈述,可能需要对它有更多更详细的解释,但是,我相信在读完本书并亲自动手搭建起属于自己的机器人后,你就不再需要更多的书面解释,在实践中就能逐步体会这句话的真正含义。

如果机器人学是一门艺术,那么该如何去学习呢?它跟我们学习乐器、绘画、写作,到底会有什么不同呢?我们认为,它们之间并没有太多的不同之处。就像音乐家需要会弹奏乐器,画家需要会画画,作家需要会用文字来表达一样,机器人学家(用来描述设计制作机器人的专家)就需要会制作机器人。就像音乐家、画家和作家他们在各自的领域都有自己的专业术语一样,机器人学家在学习教程、研究科学文献,以及和其他机器人专业爱好者谈论话题时,为了更好地交流、沟通,也会用到自己的一些基本专业术语。还有,就像每个艺术家至少都需要了解一些他们各自领域内的历史文化一样,对每一位优秀的机器人学家来说,他们也需要对机器人学的发展历程略知一二。这就是撰写本章的目的,它的内容包括:

什么是机器人?

机器人从哪儿来?

机器人上都有什么?

如何制作机器人?

1.1 什么是机器人


我们不用马上急着就给机器人下一个定义,先想想看是否一定需要回答这样一个问题。大家都知道,机器人其实就是一种能够在附近移动的机械装置,就如你在电影或书中看到的一样,它可以在日常生活中帮助人类,但有一天也可能会成为人类的终结者。

很明显,目前对于机器人以及它在过去、现在和未来生活中所扮演的角色,存在着一定的争议和误解。为了能让大家更好地了解当前机器人的发展现状和趋势,我们先来探究一下“机器人”这个术语的来历。然后我们再试图比较正式地去定义它,以避免造成更多的误解和争议。

1.1.1 术语机器人的来历

“机器人”(robot)这个术语最早出现在1920年,一位捷克剧作家Karel apek在他的剧本《罗萨姆万能机器人公司》(R.U.R)中,第一次提出了“机器人”这个词,用它来表示用合成有机物质制造出的人形机器。这些在工厂中制造出来的机器人(捷克语为rototi)是用来代替人类劳动的。虽然这些机器人能够非常有效率地严格执行人类的命令,但它们没有任何情感。看起来人类似乎再也不需要劳动了,因为机器人很乐意代替他们完成。但好景不长,一场机器人的反抗造成了人类的灭亡。

剧本《R.U.R》中描述的机器人给我们带来的是负面影响,它令人类感到惶恐和不安,但并不是说未来就没有一点希望。这个剧本在当时的反响相当好,建议大家去读一读。在写作本书的时候,这个剧本的版权在很多国家都已经失效了,所以现在可能很容易在网上找到公开的版本。

“当年轻的Rossum看过人类解剖学后,他马上就发现人体的结构过于复杂,但一个好的工程师是可以将其简化的。所以,他开始着手重新设计骨骼结构,不断地尝试如何省略和简化。机器人拥有非常惊人的记忆能力。它们能按顺序重复你说过的一部20卷百科全书的全部内容,但不会有哪怕一点点的原始创新。它们有可能成为非常好的大学教授。”

——Karel Capek,R.U.R.(罗萨姆的万能机器人公司),1920

因为第一次出现“机器人”这个词是在Karel apek的剧本里,所以多数人都认为是Karel apek提出这个术语的,但有文献记载,实际上是apek的兄弟Josef首先提出的(在捷克日报上,Karel apek曾专门发表过一篇文章来澄清事实,并讲述了事情的来龙去脉)。Karel最早想用的是“laboi”(来自拉丁语,表示“苦力、劳动”的意思),但他自己也不是很喜欢,感觉过于人工化,后来就向他的兄弟Josef征询意见。Josef建议他用“roboti”,最后被Karel采纳。如图1-1所示。

现在,我们知道了“robot”一词出现的时间和创造它的人,再来追溯一下这个词的由来。很多人认为“robot”起源于捷克语“robota”和“robotník”,字面意思分别为“劳动”和“劳动者”。但是,在斯洛伐克语中,“robota”也可解释为“农奴劳动”(serf labor)或“苦力”(work)。当然,我们也要考虑当时文献记载上写的Karel创作剧本《R.U.R》时所处的背景,他和他的兄弟经常会去探访他父亲在斯洛伐克所居住的一个温泉小镇Tren- ianske Teplice。因此,“robot”一词非常有可能是当时受到斯洛伐克语“robota”的启发。非常凑巧,本书的作者之一就是来自斯洛伐克。

不管“robot”一词是起源于斯洛伐克语的“robota”,还是捷克语的“robota”,对我们来说并不是太重要。在这两国语言中,它都有“劳动、苦力、艰苦工作”的意思,而这些也正是apek用“机器人”一词想表达的意思。但是,在接下来的一百多年里,“机器人”一词所表示的意思正在发生巨大的变化。也就是说,现在“机器人”不再仅仅代表进行苦力劳动、完成繁重工作的意思了。

那么,让我们以今天的视角和认知,重新定义一下机器人的概念。

1.1.2 现代机器人定义

当我们试图要找到一个专业术语的精确定义时,通常都会先从百科全书或专业字典入手。那么,让我们来看看它们对机器人一词是如何定义的。

我们来看一下大英百科全书对机器人的定义:

“任何能够代替人类劳动的自动操控机器,虽然这种机器看上去有可能与人类并不相似,或者并不按照人类的方式来实现某些功能。”

这是一个很恰当的定义,但仍然还存在一些问题。

首先,它所包括的范围太宽泛了。按照这个定义的描述,洗衣机也能算成是机器人。洗衣机是自动控制的(当然,是绝大部分),它可以代替人类劳动(虽然完成任务的方式与人类劳作的方式不同),而且它外形上看起来也与人类并不相似。

其次,看完这个定义后,还是很难想象出机器人究竟是什么样子的。根据这样一个宽泛的定义,有太多的东西都可以被认为是机器人,这个定义没有给我们提供任何有关机器人的具体特征。

虽然大英百科全书对机器人的定义并没有完全满足我们的要求,但看起来这个定义已经是所有能找到的关于机器人定义中最好的了。例如,美国的一款免费在线词典《The Free Dictionary》是这样定义的:“机器人是一种类人的机械装置,它能够按指令完成各种各样复杂的人工任务,高级一点的可以通过预先编写程序来完成。”这个定义甚至比之前那个更糟,洗衣机看起来仍然能被认为是机器人。

这些定义中存在一个本质问题,就是它们总试图去囊括当前我们称之为机器人的大部分机器。要提出一个机器人的定义,其范围足够广泛但同时又不能包括像洗衣机这样的机械装置,就算不是不可能,也是非常困难的。世界上第一个工业机器人和机器人技术公司的创始人(正如我们今天所知道的)John Engelberger他曾宣称:“我无法定义一个机器人,但当我看到它的时候我能认识它。”

那么,给机器人一个定义,还可能吗?一般意义上也许不可能。但是,如果我们仅将其定义约束在本书的范围内,就有可能给出一个满足我们要求的答案。在Maja J. Mataric写的一本很棒的关于机器人学科的入门级书籍《机器人学基础》中用到了如下定义:

“机器人是真实存在于物理世界中的自主系统,能够感知周围环境,依靠自身判断采取行动并完成特定目标。”

初看之下,这个定义的表述与我们之前所看到的似乎并没有太大改进,但我们将它拆分成每一小部分仔细进行分析,看看是否能满足我们的要求。

第一部分是这样说的:“机器人是一个自主系统。”对于自主,我们认为机器人能够自己给自己做决定,不受人类的控制。这个解释看起来似乎已经是一个很大的改进,因为这样就可以排除掉那些还依旧受人类控制的机器(就像之前一直提到的洗衣机)。在本书中所提到的机器人,有些时候可能需要用到一些远程调用函数,允许人类在远端对它进行操作,但这项功能一般都会作为一种内置的安全措施,在机器人的自主系统出现故障或是没有做到我们希望的行为控制时,仍然能够确保机器人行为的安全性,以及后续对它的问题进行诊断。当然,关键的目标还是在于机器人要能够执行人的指令,并且能够依靠自己完成行动和任务。

但是,本书中所描述的机器人如果仅仅只是一个自主系统,那还是远远不够的。举例来说,我们能够找到很多计算机程序,都可以称之为自主系统(它们不受个人控制,能够自主决策),但它们不能被认为是机器人。

那到底什么样的自主系统能被认为是机器人呢?我们来看看这个定义接下来的描述:“必须真实存在于物理世界中”。

从人工智能和机器学习领域近年的研究进展来看,出现了许多计算机系统,它们能够独立运行并帮助我们完成一些工作,这些都属于机器人应该能做到的。垃圾邮件过滤器就是一个众所周知的例子,它们就是用计算机编写的程序系统,能够自动处理你的邮箱里收到的每一封邮件,判断这封邮件可能是你想要查看的(当然邮件一定是合法的),还是一封你不想收到的邮件。

毫无疑问,这样一个计算机程序系统是非常有用的(如果你不同意这样的说法,那么请打开你的邮箱里的垃圾邮件文件夹看一看,我可以相当肯定地说那些都是些非常无聊、令人厌烦的邮件)。在2014年所有的电子邮件流量总量中,估计有超过60%的电子邮件都是垃圾邮件。有了自动的垃圾邮件过滤器,能够节省大量的查收邮件时间。作为一个没有人工介入的决策过程(尽管有时候我们也要去帮助标记一下垃圾邮件),垃圾邮件过滤器也算是一个自主系统。但是,我们仍然不能称它为一个真正的机器人,它充其量只能算作是“软件机器人”(software robot)或是机器人的一个简化(bot简化了单词robot,说明它确实与真实物理世界中的机器人还存在差距)。

软件机器人自身毫无疑问是一个十分有趣的群体,但是机器人的操作是必须要在真实物理世界中进行,对它进行开发的过程既是令人兴奋的,同时也是非常困难的。当开发软件机器人的时候,你可以认为它所运行的环境(通常是一个操作系统)是非常稳定的(就是说,没有太多的意外情况会发生)。但是,当开发一个实体机器人的时候,它周围的环境是未知的,你永远无法保证不会有意外发生。

这就是实体机器人必须要知道自己运行时所处的周围环境信息的原因。同时,这也是接下来定义里所要描述的一部分:“能够感知周围环境”。

能够感知周围环境可以认为是机器人定义中最重要的特征。为了感知周围环境,机器人通常需要加装多个传感器。这些装置检测周围环境的物理特性,并将这些信息反馈给机器人,这样机器人就能够对诸如温度、湿度或压力的突然变化做出反应。在这点上,它与软件机器人存在着非常大的不同。虽然机器人是根据它所获得的信息进行一些有意思的操作,但它们仍需要有一个或多个能够获得这些信息的子系统。从感知方面来看,如果要说机器人与人类有什么不同之处,我们可能找不到太多不一样的地方(当然是从我们的高级视角来看)。机器人的感知子系统可以被认为是人造的人体器官,用来代替人类器官对大脑提供相对应的信息。

这个定义里有一个非常重要的结论:但凡不具有感知周围环境功能的,都不能称之为机器人。这就包括那些以随机方式移动或者是“盲驾”的设备,因为它们无法从周围环境中感知任何信息来引导其行为方式。

所有的机器人学家都会告诉你,机器人是种令人感到兴奋的机器。也有很多人提出,它之所以会令人感到兴奋实际上就是因为它们拥有与外部世界交互的能力(能够根据周围环境移动,或以其他方式改变周围环境)。如果失去了这个能力,那么机器人就只是另一种静止的机器了,它们也许有些辅助作用,但显得单调乏味。

在这个定义的最后一部分也表达了这个观点:“能够依靠自身判断采取行动,并完成特定目标”。

依靠判断周围环境自主采取行动,对于机器人来说,听起来像是一个非常复杂的任务,但在这里只是意味着它在以某种(甚至很轻微的)方式改变周围的世界。我们称机器人的这些部分为执行器,如果要跟人类进行比较的话,这些执行器就像人造的手、腿以及身体其他可以移动的部位。执行器可以通过一些较低级别的系统,如电机或人造肌肉完成动作,我们称这些系统为执行机构。虽然人造系统看起来似乎可以完成类似于生物系统的功能,但仔细研究可以发现,实际上它们是完全不同的。

你也许已经注意到,这里机器人不仅要依据周围环境做出判断并采取行动,还要完成特定的目标。虽然许多业余的机器人爱好者搭建机器人只是因为兴趣和好玩,但是大部分的机器人制造都是为了要执行(或者可以说是帮助完成)特定任务,如在工厂里搬运重型零件,或是在自然灾害现场进行受害者的辅助搜救定位。

正如之前所说,一个机器或系统如果它的行为不是根据周围环境信息判断而得出的,那么就不能称之为真正的机器人。但机器人要如何使用这些环境信息呢?反过来,我们从定义出发,最简单的就是要找到哪些是机器人为了完成特定目标所需要的环境信息,就是它要判断的信息。机器人要完成的目标并不一定必须都是那些复杂的、宏大的任务,就像变成“人类的苦工”一样。它可以是一些非常简单、轻松的工作,如“躲避障碍”或仅仅是“打开照明开关”而已。

好的,到目前为止我们至少对什么是机器人有了一个初步的了解,那么我们可以继续下一个简单的讨论,机器人是从哪儿来的?换句话说,也就是机器人的历史。

上一篇:6,BeautifulSoup-获取数据


下一篇:《机器人编程实战》一一第1章 究竟什么是机器人