在机器人和 AI 领域,Rodney Brooks 是一个响亮的名字。1997 年,他成为麻省理工学院人工智能实验室(CSAIL)的第三任主任。无论在当时还是现在, CSAIL 都是麻省理工学院最大的一个实验室,现有超过 1000 名成员。2007 年,他卸任主任之后,一直在 MIT 工作到 2010 年。与此同时,1984 年开始,他共创办了 6 家人工智能和机器人公司。“从那时起,我没有参与任何创业公司的时间总共是 6 个月左右”。
这篇发表于 2021 年 2 月 14 日文章中,他从自己在斯坦福、MIT 以及创业的经验谈起,细数机械臂编程语言的起源。

到目前为止,我的人生还算不平凡。因为我很幸运地见证了,或者说近距离参与计算机科学、人工智能和机器人等许多决定性技术的进步。到 2021 年,这些技术将开始主宰我们的世界。

我认识了许多伟大的人,他们创建了人工智能、机器人技术、计算机科学和万维网。现在,我最大的遗憾是,我还有好多问题想请教那些已经去世的人。过去,即使我每天都见到他们,和他们打招呼,我都没有去问他们任何这些问题。

而这篇简短的博客文章,是关于描述自动化编程语言的起源,特别是工业机器人手臂编程语言。已经去世的三位重要人物是道格・罗斯 (Doug Ross)、维克多・沙因曼 (Victor Scheinman) 和理查德・保罗 (Richard (Lou) Paul),他们不像其他科技明星那么出名,但在各自的领域非常有影响力。在本文,我会参考个人回忆和各类网络资源重新回溯那些历史。

▍第一个工业机械臂问世前后

道格・罗斯曾研究过麻省理工学院的第一台计算机 “旋风”( Whirlwind),然后在 20 世纪 50 年代中期,他转向三轴和五轴数控机床的研究。人们用数控机床来切割复杂形状的金属零件。数控机床加工的零件很多都有曲面,其精度要比人工操作的精度高得多。Ross 为数控机床开发了一种 “编程语言” APT (自动编程工具)。

这是一个从维基百科下载的 APT 程序。

打开网易新闻 查看更多图片

这段程序里没有分支结构,这里面的 GOTO 是一个移动工具的命令或条件,它只是一系列移动切割工具的命令。它提供了几何计算使用的切线 (TANTO) 等。

APT 程序是在计算机上编译和执行的,而计算机在当时是非常昂贵的机器。但成本并不是主要问题。APT 是在麻省理工学院伺服机械实验室开发的,该实验室主要研发飞行机器建造机械制导系统,如洲际弹道导弹,以及后来研发 60 年代载人航天计划飞行的飞行器。

当时人类已经开始使用机床,之后便出现了人类从未使用过的新机器。进入 20 世纪 60 年代,两个有远见的人,一个技术人员和一个企业家开始合作,开发了一种新型机器,也就是最初的工业机械臂。

第一个工业机械臂 Unimate,由 George Devol 和 Joe Engelberger 在 Unimation 公司开发。它于 1961 年安装在新泽西州通用汽车工厂。Unimate 使用真空管而不是晶体管,其液压系统采用了模拟伺服器,而不是我们今天使用的数字伺服器。它能简单地记录机器人手臂应该去的序列位置。当时,计算机对这样的商业机器人来说太贵了,所以机械臂必须摒弃计算机,因此也没有 “语言” 用来控制机械臂。Unimates 主要用于点焊,以及将大型铸件吊入或吊出专门的机器。机械臂一遍又一遍地做着同样的事情,不会做出任何自主决定。

在 60 年代末,斯坦福人工智能实验室的机械工程师 Victor Scheinman 设计了后来的斯坦福机械臂。它们由 PDP-8 微型计算机控制,是最早的电子数控机械臂之一。下面这张照片是 John McCarthy 站在两个斯坦福机械臂前,他前面是一个可控滤波器 COHU:

在我作为 SAIL 的 Hand-Eye 小组成员的 5 年时间里 (总共 7 年),我从未见过 John 接近机械臂。下面这张照片是金色机械臂的博物馆照片,它有五个旋转关节和一个线性轴。

打开网易新闻 查看更多图片

爱丁堡大学的 Freddy 机械臂是当时唯一的电子数字化机械臂。

斯坦福机械臂(有几代产品,分别是金色臂、蓝色臂和红色臂)用于组装实际产品中可能存在的真实机械组件,而 Freddy 机械臂最初的设计仅仅是操作木块。

第四代斯坦福机械臂 —— 绿色臂(the Green Arm),它的操作范围更广,曾在 JPL 上用作火星任务测试床的一部分。在这张 1978 年的照片中,机械臂是由可移动平台上的 PDP-11 微型计算机控制的。

斯坦福大学的机械臂技术领先于时代,可以测量和施加力量。如今,绝大多数工业机器人手臂仍无法做到这一点。

斯坦福大学的机械臂用于探索自动组装复杂对象的可能性。长远的目标(直到今天在实践中仍未达到目标)是使 AI 系统弄清楚如何进行组装和执行动作。这是一个非常棘手的问题,直到今天,通过编写程序来组装零件仍在实践中。

▍控制机械臂的早期编程语言 WAVE

1977 年在我到 Hand-Eye 小组之前,Richard Paul 就离开了(此后几十年我才认识他)。他开发了第一种编程语言 WAVE 来控制机械臂,试图做一些装配等复杂的事情。它甚至在今天也影响着工业机器人的控制方式。除语言外,Paul 还开发了逆运动学技术,如今被称为 IK 解算器,几乎用于所有机器人中。

到 60 年代末,美国大型人工智能实验室都拥有由马萨诸塞州数字设备公司 (Digital Equipment Corporation) 制造的 PDP-10 大型机。

他们的想法是,Paul 的语言将由 PDP-10 处理,然后程序将主要在 PDP-8 上运行。但是这种语言应该采取什么样的形式呢?机械臂的任务是组装机械部件,但当时许多程序都是用机器专用的 “汇编语言” 编写的,用来将计算机的指令逐一汇编成二进制。那么,为什么不让这些汇编语言看起来像 PDP-10 的汇编语言呢?在 PDP-10 中移动数据的 MOVE 指令将被重新用于移动机械臂。

这很有趣,而且完全符合当时斯坦福大学和麻省理工学院人工智能实验室的精神。

我怎么都找不到 Paul 1972 年的博士论文的在线或离线副本。它的编号为 STAN-CS-311 和 Stanford AIM-177。如果有人能找到它,请告诉我。

所以这里我将参考 Bob Bolles 和 Richard Paul 在 1973 年发表的一篇文章,它描述了一个用 WAVE 编写的程序。它被称为斯坦 - cs -396 或 AIM-220。斯坦福大学提供的扫描图像质量很低,是几年前用缩微胶片扫描出来的。我重新输入了文档中的一个装配水泵的程序片段,以便于阅读。

打开网易新闻 查看更多图片

对于任何见过汇编语言的人来说,这看起来很熟悉,标签 L1 是指定的,每行有一条指令,分号后跟注释。程序控制流甚至使用与 PDP-10 汇编语言相同的指令,AOJ 用于加 1 和跳转,skip 和 skip n 用于如果寄存器为零或不为零,则跳过下一条指令。我能看到的唯一区别是,对于 AOJ 指令只有一个隐式寄存器,而且 skip 指令引用了一个位置 (23),其中一些强制信息被缓存 (可能我是正确的,也可能不是……)。这个程序好像是抓着一个大头针,然后进入一个孔,然后在周围抖动,直到它能够成功地将大头针插入孔中。在该文档的其他地方,它解释了坐标 P 和 T 是如何训练的,通过移动手臂到想要的位置,并输入 “HERE P” 或 “HERE T”。

但人们很快意识到,当时的计算机汇编语言并不足以完成实际工作。到 1974 年底,Raphael Finkel、Russell Taylor、 Robert Bolles、Richard Paul 和 Jerome Feldman 开发了一种新的汇编语言:一种在实验室的 PDP-10 上运行的基于 SAIL (斯坦福人工智能语言) 的 Algol-ish 语言。Shahid Mujtaba 和我的同事 Ron Goldman 开发 AL 很多年,如本手册所示。他们与 Maria Gini 和 Pina Gini 一起致力于 POINTY 系统,这使得收集像上面例子中的 P 和 T 这样的坐标变得更加容易。

与此同时,Victor Schienman 花了一年时间在麻省理工学院的人工智能实验室开发了一种新的小型力量控制的六轴联合机械臂 Vicarm。他在 MIT 留下了一台,然后带着第二台回到了斯坦福。

我记得是在 1978 年,他来上我在斯坦福上的一个机器人课的时候,他带着 Vicarm 和一个装有 PDP-11 的箱子。他把它们放在桌子上,展示如何用一种比 Algol/SAIL 简单得多的 Basic 语言编写 Vicarm 程序。他将这种语言命名为 VAL, 即维克多的汇编语言(Victor’s AL)。另外,请记住,这是在 Apple II 和 PC 之前,仅携带一台计算机并在全班同学面前安装好!

同样在 1978 年,维克多向 Engelberger 的公司 Unimation 出售了一个版本的机械臂,大约是 Vicarm 的两倍大,后来被称为 PUMA (可编程通用装配机)。这是第一个全电动的商用机器人,也是第一个使用编程语言的机器人。在之后的几年里,这种机械臂的不同版本都有出售,其质量从 13 公斤到 600 公斤不等。

▍新的编程语言使命

在接下来的几年里,我们看到了编程语言的爆炸式增长,这些语言通常是每个制造商独有的,并且往往基于一种现有的编程语言。Pascal 语言在当时很流行。

到 2008 年,我认为是时候尝试超越为机械臂设计编程语言的极限了,并回到 1970 年左右斯坦福人工智能实验室的最初梦想。

我创立了 Rethink Robotics(译者注:在 2018 年倒闭)。我们制造并运送了成千上万的机械臂用于工厂。第一个是 Baxter,第二个是 Sawyer。在相关的视频中,你可以看到 Sawyer 测量施加在它上面的外力,并试图通过顺应力和移动来保持合力为零。通过这种方式,视频中的工程师可以毫不费力地将机器人手臂移动到任何她喜欢的地方。这是向机器人展示物体在环境中的位置的第一步,就像 WAVE 语言里的 “HERE P” 或 “HERE T” 的例子一样,然后是 POINTY。下面是一张我的照片,左边是 Sawyer,右边是老 Baxter。

早在 1986 年,我就发表了一篇关于 “包容体系结构” 的论文。随着时间的流逝,这种用于机器人的控制系统被称为 “基于行为的方法”,在 1990 年,我编写了 Behavior Language,该语言在我的实验室以及 1990 年与我共同创建的 iRobot 公司被许多学生使用。在 2000 年左右,麻省理工学院的学生 Damian Isla 重构了我的方法,并开发了现在的行为树(Behavior Tree)。现在,大多数视频游戏都是在两个最受欢迎的创作平台 Unity 和 Unreal 中使用行为树编写的。

在 Rethink Robotics 的第五版机器人软件平台 Intera 中,我们将机器人的 “程序” 表示为一个行为树。虽然可以使用图形用户界面来编写图形行为树(没有文本的行为树),但也可以简单地告诉机器人您想要它做什么,并且集成的 AI 算法可对意图进行推断,或者有时会要求你用机器人手臂上的简单控件填写一些数值,并自动生成行为树。由人决定向机器人的任务是查看还是编辑行为树。在这里,您可以看到 Intera 5 不仅在我们的机器人 Sawyer 上运行,而且在当时有力量感应的另外两个商用机器人上运行。当我的前任办公室成员兼 AL 的开发人员 Ron Goldman 看到此系统时,他宣称类似 “类固醇的 POINTY!” 之类的东西。

Baxter 和 Sawyer 是第一批不需要笼子就可以保护人类安全的机器人。Sawyer 是第一个现代工业机器人,它终于摆脱了计算机语言对其进行控制的过程,就像 70 年代初在斯坦福 AI 实验室首次提出该想法以来,所有机器人一样。

如今,我们还有很多工作要做。

该文章内容转载自数据实战派

END