内容


既有趣又有用的机器人技术

Robotics for fun and profit

Comments

robotics最近这几年,虽然计算机科学专业的登记学生数量仍然保持较为平稳的态势,但是却再也无法同本世纪初的那个高峰时期相比了。将年轻人吸引到令人激动和兴奋的计算机科学世界之中,已经变成了一件困难的事情。其中的部分原因在于,计算机已经变得无处不在,它们作为新鲜事物的光芒已经逐渐褪去。学生们在高中时代(甚至更早一些)就已经接触到某种形式的编程训练,我们年轻时所经历的那种激动的感觉在今天已经难觅踪影了。

所以,我们如何吸引年轻人从事计算机科学及其相关领域的研究面临这样一个问题:“由于熟悉而产生的轻蔑?”正如我先前所指出的那样,计算机科学已经成为构成其他学科所需要的一部分,例如游戏开发、分析复杂生物资料、以及机器人技术。2 所以,我建议您和您的孩子都要了解机器人技术。机器人技术非常有意思。机器人技术对于书呆子很具有吸引力,而成为一名书呆子在今天是一件很有意思的事情。书呆子们都是有才智的,并且他们具备赚大钱的潜力。如果您问大多数孩子他们是否愿意成为下一个 Bill Gates 或者 Steve Jobs 或者 Kim Komando。2 我想您一定能够吸引他们的注意。

我原本是计划为 Rational Edge 2007 年 12 月那一期撰写这篇文章的,但是时间上碰巧不合适。(我想象着能够鼓励您购买一个机器人技术套件作为送给孩子的假期礼物。)尽管假期已经过去了,但是无论何时购买一个机器人技术套件送给您的孩子都为时不晚。

关于机器人技术和我的一些背景介绍

我必须承认我是一名对硬件充满恐惧的人。许多年前,当我开始对个人计算产生兴趣的时候,我花费 1600 美元购买了一个计算机套件。我得到了一个 SOL-20 处理器,它具有 8K 的内存容量,并且能够将一个录音机连接到一个电视机上。3 我曾经在儿时制作过一个短波无线电接收器,所以我想我能够应付 SOL-20 的焊接和建造。然而,我并没有及时更新上个世纪七十年代末的电子设备,并且在连接线路时犯了一个错误。我触碰了错误的管脚,从而导致了电流的反转,结果那块电路板上的所有二极管都被烧坏了。从那以后,我就对硬件产生了畏惧。我妻子一直没有让我忘记那次教训让我付出了 300 美元的代价,而在那时 300 美元可是一笔不小的数目。

您一定能够想象到,当我得知第二年即将参加位于马萨诸塞州的伍斯特工学院的统一机器人技术课程的时候,我所产生的那种焦虑感。尽管只是安排我教授这门课程的软件工程学部分,但是我还是觉得我应当对机器人技术有一个大体上的了解并且获得一些经验——如果不是亲手建造机器人的话,至少也应当对它们进行编程。

我决定跳入机器人技术的水池中,但愿我不会被淹到。事实证明,对于机器人技术来说,有一些十分简单的切入点,并且它们并不十分昂贵。在本文中,我将向您介绍其中的两项,并且为您提供其他机器人技术资源的一些指针。

Legos 并不仅仅是搭积木的木块

Lego Mindstorms 开发平台是最受欢迎的开发平台之一,它适合各个层次的人员使用。Lego Mindstorms 开发平台的最新版本是 NXT。NXT 包括一个微处理器、闪存、以及具有用于传感器和发动机的端口。它支持蓝牙功能,因而可以同计算机或者其他 NXT 机器人建立无线连接。NXT 的处理器是相对于原始 Mindstorms 开发平台的一个主要的升级,它能够执行更加复杂的机器人技术软件应用程序。该处理器被封装在一个矩形的组件之中,该组件还包括一个被称为“砖块”的 LCD 屏幕。您所建造的任何一个 Lego 机器人都将包括这个砖块。

NXT 拥有一个基于 National Instruments LabVIEW 的可视化编程环境,这个编程环境专门用于嵌入式系统和机器人技术。4 LabVIEW 中的一个程序是通过组合不同的程序建造砖块并且向这些砖块提供参数而被建造起来的。这种可视化的编程风格也许并不会吸引核心部分的编码人员,但是它在工程师和非程序员群体中非常受到欢迎,这个群体需要利用软件控制的硬件来解决实际的问题。下面,我将详细地讨论基于 LabVIEW 的环境。

Lego 系统之所以成为一个带领年轻人入门机器人技术的伟大系统,主要原因就在于它不仅具备了软件功能,而且提供了您所需要的硬件基础。您能够将其他 Lego 系统中的木块、齿轮等材料拿过来建造您自己的机器人。所以,如果您的孩子挽起衣袖开始建造的话,那么他一定会享受这一过程,并且学会如何开发一个简单的程序以及对其加以测试。如果您的孩子喜欢编程胜过硬件部分,那么他能够编写出有趣的程序,并且学会如何建造一个遵守程序命令的最小的机器人。

通过基础套件5 您所能制作的一个最简单的 Lego 机器人就是 TriBot。TriBot 是一个三个拥有轮子的机器人,它能够在根据程序命令在地板上迅速移动。如果您按照编程环境中的 RoboCenter 部分中的指南或者 Mindstorms NXT 中的文档进行操作的话,那么您所建造的第一个 TriBot 项目版本将是一个只具有轮子和砖块的机器人。这个 TribBot 足以满足您对未来添加的需要。您可以在一个小时以内完成组装、编程和测试工作。

TriBot 的第二个版本是在第一个版本之上添加一个缓冲器,这个缓冲器负责感知机器人是否遇到了障碍物。这个简单的设备包含了一个压力感知按钮,当我们按下或者释放该按钮时它会发送一个信号。如果您熟悉使用图形用户界面进行应用程序开发的过程,您就能够想象出它是如何工作的:就如同鼠标上的按键被按下和释放一样。带有缓冲器的 TriBot 版本如图 1 中所示。砖块位于 TriBot 的顶部,两个伺候系统发动机负责控制左右两个轮子。缓冲器位于前面的两道横梁之下。悬挂在这两道横梁上的木闩能够自由地移动。当 TriBot 遇到障碍物的时候,这个木闩推动缓冲器并且按下按钮。

机器人在地板上翻转的照片

机器人在地板上翻转的照片

图 1. Lego Mindstorms NXT TriBot

演示程序指示这个 TriBot 一直向前移动,如果遇到墙则向后倒退,然后停止。这也许并不是特别的有趣,但是它足以证明 TriBot 和感知器能够正常地工作。孩子们可能会对此感到一丝厌倦,所以您需要一个不同的程序。一个更加有意思的程序是:TriBot 碰到某一物体,然后后退、转向、并且继续向前移动。您可以选择让这种行为一直持续下去,或者在达到一定数量的撞击次数后停止下来。我自己的设计是在达到十次撞击后停止下来。这样做会将一些新的编程技术添加到您的孩子的指令系统中,例如循环。我们来看一下这个程序。图 2 中显示了 LabVIEW 环境。

Lab View 中的工具面板的截图

Lab View 中的工具面板的截图

图 2. LabVIEW 环境。

LabVIEW 环境由五个部分组成。调色板位于窗口的左上角。所有可供使用的元件都可以在这个调色板中被选择,进而被拖动到编程区域中(即调色板右侧的大面板)。编程面板下面的那个面板能够显示当前被选中的元件的细节。位于窗口右上方的面板被称作 Robo Center,它包括用于基本的 Mindstorms NXT 系统的操作指南项目和其他文档。在 Robo Center 下面的面板中有两个制表符。其中一个提供了到额外帮助的链接,另外一个提供了查看您的完整程序的简略视图。从这个视图中您能够通过点击某个元件,使其出现在编程面板之中。

我们来更加详细地查看一下带有触摸感知器的 TriBot 的完整程序,如图 3 中所示。

一个完整的 TriBot 程序

一个完整的 TriBot 程序

图 3. 一个完整的 TriBot 程序。

在这个程序中,我们使用了七个元件。程序的起始点位于最左侧。程序中的第一个元件是一个循环元件,它包围了另外五个依次排列的元件。这个循环将执行十次迭代,这是因为我们在图 4 中所显示的细节面板中将迭代次数设置为 10.

循环元件的细节

循环元件的细节

图 4. 循环元件的细节。

被包含在循环元件中的五个元件分别是:

  1. 一个移动元件,它将以 75% 的能量向前移动 TriBot。
  2. 一个等待元件,它将等待触摸感知器被按下的那一刻。也就是说,直到感知器被按下之后,机器人才会移动,程序的控制权才会被移交给下一个元件。
  3. 一个声音元件,它负责播放一小段哭闹的声音。
  4. 一个移动元件,它将通过轮子的完全旋转来向后移动 TriBot。
  5. 一个移动元件,它将左侧轮子移动 1.3 个旋转。这样做会使 TriBot 向左转动约 45°。

在循环执行十次之后,一个声音元件将会播放“Goodbye”,然后程序结束。

图 3 中右下角的控制面板能够被用来编译这个程序、将程序下载到一个 NXT 砖块中、以及执行该程序。典型的情况是,您通过一根 USB 传输线将您的程序下载到砖块之中,断开连接线,然后使用砖块上的控制来执行您的程序。

图 4 中所显示的循环元件的细节十分简单。图 5 中显示了一个更加复杂的 Move 元件的细节。

Move 元件的细节

Move 元件的细节

图 5. Move 元件的细节。

标准的砖块中包含三个用于发动机连接的端口。在 TriBot 中,您将两个发动机分别连接到 B 端口和 C 端口。左侧的发动机与 C 端口相连接,而右侧的发动机与 B 端口相连接。您能够通过在端口选择项中选中正确的方向,指定轮子的移动方向是向前还是向后。

图 5 中所显示的移动细节表明,您将能量平均分配到两个这端口之上。我们可以通过移动位于底部的滑动条来改变能量的分配方案,从而使得 TriBot 发生转向。能量大小可以通过位于细节面板右上方的滑动条来进行调整——更多的能量会使得 TriBot 移动的更快,但同时也会更快地消耗能量。6

在能量滑动条下面是一个控制栏,它允许您指定移动操作将会持续多长时间。在我们的例子中,这个命令将会永远运行下去,直到达到我们在下一个元件中所指定的条件为止——即触摸感知器按钮被按下。最后,您能够为轮子选择下一个操作——刹车或者滑行。这个区域的细节并不总是可用的。只有在控制操作的其他细节被设置的基础上,它才能够被激活。

尽管我并没有将其应用在这个程序之中,但是在细节面板的左侧有一个区域(绿色区域)显示了每个轮子所做出的旋转。您能够利用它来决定旋转的具体数值。这些被称作“反馈盒子”。

自然地并行进行

兴趣是最好的老师。机器人并不是连续的系统,它们实质上是高度并行的。当我们谈论并行系统的时候,编程人员总是会立刻想到设置线程或者程序的其他低层次元素。正确地运行并行程序是非常困难的。现在出现的有一些语言声称能够简化这一任务,但是这些语言却远没有得到广泛的应用。7 LabVIEW 能够简化并行操作,您也许甚至都没有意识到您正在编写一个并行的程序。我们可能会决定在 TriBot 移动期间,通过砖块上的 LCD 显示它的心跳,这十分有趣。图 6 中所示的程序正是完成了这样一个操作。

一个并行的 NXT 程序

一个并行的 NXT 程序

图 6. 一个并行的 NXT 程序。

在图 6 中显示了两个控制线程。上面的线程包含我们最初的那个移动 TriBot 的程序。下面的线程——被称作“序列电波——负责显示 TriBot 的心跳。我们将其设定为显示大的心形图标,等待半秒钟后,显示小的心形图标,再等待半秒钟,如此无限地循环下去。

如果孩子们能够在他们的早期实践中使用并行机制的话,那么他们将能够在此后抓住一些更有难度的机器人技术的概念。如果您长期以来都从事顺序代码的编写工作的话,那么您可能还不如您的孩子们那样顺利地适应机器人技术编程中的并行本质属性。

可扩展性

Lego 系统能够被很容易地添加额外的感知器、发动机和催化剂。有若干个提供者为 Lego 开发平台制作组件。其中一些简单的组件仅售价 10 美元,而另外一些复杂的感知器或者发动机的价格则会高出若干倍。

来自其他 Lego 集的组件也能够被应用在 Mindstorms 开发平台之上。您还能够使用来自其他机器人套件的组件,并且制作出奇妙的创作物。

Lego 系统不仅仅是一个玩具。无论对于您还是您的孩子们来说,它都是一条通往奇妙世界的通道。如果您还不确定孩子们是否对机器人技术的机械、电子或者软件方面感兴趣的话,那么 Lego 系统可以有助您解决这个疑惑。

如果您打算在孩子们入睡之后将 NXT 用于您自己的项目的话,那么您也许希望以一种更加熟悉的语言进行编程,并且更好的对处理器进行控制。您可以有许多种选择。您能够下载并且使用 C 和 Java™ 编程系统以及一些动态语言端口。8

iRobot Create

Lego NXT 并不是我的第一个机器人。我只是通过它来学习非软件的基础知识。我的第一个机器人是来自 iRobot 公司的 iRobot Create™ —— 该公司还开发了 Roomba 清道夫。9 在我家里有一个 Roomba 已经放了若干年了,每当我听说 Create 的时候,我都希望得到一个来亲手尝试一下。10

Create 由一个 Roomba 底部(一个具有两个驱动轮和一个可选轮子的圆形平台)、若干与您的计算机相连接的连接器(包括一条供电线)、同外部传感器相连接的连接器、以及同一个可选的命令模块(包括一个单独的微处理器)相连接的连接器组成。11 (如果您计划利用 Create 开发任何有用的项目的话,那么这个命令模块就是不可或缺的。)

Create 提供了两种控制工作单元的方式。第一种方式是一种简单的字节码语言,您可以用它来创建脚本,并且将其下载到工作单元之中。在这种情况下,您并不需要一个命令模块,但是内存容量十分有限,其大小只有 100 个字节。您可以通过一根与您的计算机直接相连的线路将脚本直接加载到机器之中,使用字节码开放界面来进行“编程”。尽管这对于熟悉您的工作单元十分有用,但是这对于实际的应用程序并无太大作用,您和您的孩子就会很快的失去兴趣。

对 Create 命令模块的处理器进行编程,要求一个真正的 C 编译器和其他的开发工具。我们推荐的对 Create 进行编程的方法是使用 WinAVR 工具集。WinAVR 工具集是开源并且免费的。12 WinAVR 工具集基于流行的 gcc 编译工具,具有一个面向 AVR 处理器家族的代码生成器。WinAVR 工具集中的主要工具是编译器、一个提供访问和修改 AVR 的硬件和内存功能的函数库、以及一个将程序加载到 Create 中的程序。在我的 Macintosh 系统中,有一个被称作 Smultron 的编辑器,它作为 Create 的集成开发环境。当然,该工具也有面向 Windows 的版本。

在您安装和配置好编程环境之后,您就可以开始探究 Create 的内嵌传感器了。当工作单元回到基站时,设备就会为其充电。基站发射一个红外信号,这个信号被工作单元的红外传感器所接收。Create 的一个内嵌演示模型是这样的:您可以将工作单元放到房间中的任何一个地方,它都会寻找到基站。如果它没有以适当的姿势进入基站的话,那么它将稍微转换一下角度,然后再次尝试进入基站,如此反复,直到它完全进入基站为止。

标准的 Create 单元还有一些用于其他事件的特殊传感器,例如:当工作单元撞到墙壁的时侯,或者当工作单元位于桌子边缘的时侯。您能够从 iRobot 或者其他供应商那里购买到其他传感器,并且将它们直接连接到 Create 或者命令模块上面。在这些传感器中,有些对诸如光亮、温度等物理现象作出反应。一旦您懂得如何为一种类型的传感器编写程序,那么您就能够很容易的为大部分其他类型的传感器编写程序了。

当我专注于我的 Lego 机器人的时候,我将我的 Create 借给了我的一位学生。他很快就将一些有趣的行为加载到 Create 上面,然后继续添加新的硬件和程序。他建造了这样一个平台:提供无线连接的笔记本电脑,用于固定 Sun SPOT 13 的支持物,以及用于查看工作单元活动情况的立体摄像机。他所制作的 Create 如图 7 中所示。

Create 给我们带来的很多乐趣。我的这位学生 Bob 把机器人带到我的办公室中,我们坐在笔记本电脑前观看由 Create 上的摄像机所拍摄的大厅中的场景。我们通过这个工作单元向其他教授办公室的地板上投放糖果。只需在笔记本电脑上轻轻敲击一下键盘,我们就能通过无线网络向工作单元发送信号,进而控制机器人的行动。工作单元的笔记本电脑同 Create 直接相连,并且能够将按键动作准确翻译为适当的命令,实现移动机器和发回图片的功能。

带有照相机和一个 Sun SPOT 的 iRobot Create

带有照相机和一个 Sun SPOT 的 iRobot Create

图 7. 带有照相机和一个 Sun SPOT 的 iRobot Create。

Create 和 Lego Mindstorms 系统之间的主要区别在于:

  • Create 底盘和驱动机制是预编译的,而在 Lego 中您必须组装机器人。
  • 同 Lego 系统相比,Create 并不具有大量的即插即用的硬件和传感器。这意味着如果您希望扩展 Create 的话,您就需要进行大量的硬件修理操作。
  • 您一定希望在 Create 中能够进行比在 Lego 中更为低层的编程。据我所知,尽管您能够执行简单的脚本文件,但是在 Create 中并没有类似于 LabVIEW 的开发环境。

当我第一次得到自己的 Create 时,相比建造硬件本身,我对机器人编程更加感兴趣;这是因为我仍然没有走出我的硬件恐惧症阴影,我认为自己没有能力实际建造出任何有用的东西。由于 Create 已经被建造好,而且驱动机制也已经就位,所以我想这将是学习机器人技术的一条最简单的路径。我并不确定我的想法是正确的。最适合您的系统将依赖于您的背景知识以及您深入研究微处理器接口和硬件传感器的决心。如果您打算认真研究机器人技术的话,那么您很快就会发现这两种系统所提供的基本套件已经不能满足您的需要。您可能会希望收集若干微处理器和硬件组件,并且从零开始建造您的独一无二的创作物。幸运的是,我们有大量的信息和资源提供给您,我已经将它们列在了本文的结尾处。

结论

我相信,如果尝试一下机器人技术的话,那么许多人都会被它迷住的。编程和硬件动手操作将勾起我们发掘新鲜事物时所带来的真正乐趣的回忆。也许它会使您想起第一次使用老式割草机修正草坪时的场景,也许它会使您想起第一次编写 BASIC 程序并且在与您的 TRS-80 或者 Commodore 计算机相连接的电视屏幕上看到显示结果时的场景。这些记忆都将帮助您同孩子们一起分享使用有趣的硬件和软件体验创造的乐趣,更重要的是,您也将成为孩子们这些记忆的一部分。

不但您能够和孩子们一起完成一些工作,而且他们将学到一些能够在学校中用到的知识。他们还将涉及机器人技术竞赛。FIRST (For Inspiration and Recognition of Science and Technology)是一个由 Dean Kamen 创办的组织,Dean Kamen 发明了 Segway 等许多项创新技术。每一年,FIRST 都举办一场机器人技术竞赛,来自高中的同学们在大学教授或者行业专家的指导之下建造完成特定任务的机器人。各支代表队首先在本地区内进行比赛,优胜者将角逐世界冠军。今年四月份,数千位年轻的机器人专家将云集亚特兰大的竞技场,角逐 2008 年 FIRST 的至高荣誉。许多团队还将获得宝贵的经历,这对于他们进入大学深造来说具有相当重要的意义。

所以,与其将数百美元花费在一个游戏盒上,我建议您还是用这些钱来购买一个机器人技术套件吧。我相信孩子们将获得同样大的快乐,而且您还能够同他们一起进行学习。这是一笔十分合算的买卖。

注释

  1. 请参见 “主修计算机科学专业的人都到哪里去了?”。
  2. 如果您不了解 Kim Komando 的话,她主办了一个非常受欢迎的关于当前和未来计算机的展览。http://www.komando.com/
  3. 您可以通过访问 http://www.digibarn.com/collections/systems/sol-20/index.html 获得关于 SOL-20 的相关信息。
  4. 您可以通过访问 http://www.ni.com/labview/ 获得关于 LabVIEM 的更多信息。
  5. Lego Mindstorms NXT 有许多版本。我所说的基础套件是指教育家套件。它售价三百美元。
  6. 该砖块的大小适合使用五号(AA)电池。然而,对于任何一个重要的应用,您都应当选用可以在两次充电之间持续工作若干小时的可充电的砖块。
  7. 请参见十二月份的专栏:“并行领域中的计算”。
  8. 您可以通过访问 http://www.teamhassenplug.org/NXT/NXTSoftware.html 获得用于 NXT 的编程选项列表。
  9. 您可以通过访问 http://www.irobot.com/create 获得关于 iRobot Create 的相关信息。
  10. Roomba 是一个小型的圆形机器人清道夫,它漫步于您的地板上并且拾起灰尘和污垢。虽然它并不能取代一个真空吸尘器,但是它确实能够在两次大扫除之间有效的保持地板的清洁。
  11. 我系统中的命令模块使用了一个 Amtel ATMega168 微处理器。
  12. 这些工具可以从 iRobot 页面中获得。(http://www.irobot.com/sp.cfm?pageid=305)。
  13. Sun SPOT 是一个仅有手掌大小的盒子,它负责执行 Small Programmable Object Technology。一个子板包括一个温度传感器、一个光传感器、一个三维加速器、八个 LED 灯、以及两个开关键。SPOT 是由 Java 进行编程的。

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=301503
ArticleTitle=既有趣又有用的机器人技术
publish-date=04152008