本帖最后由 James.Yang 于 2014-6-23 11:43 编辑
想开始学习乐高机器人编程,但在网上仅找到英文版的《LEGO.MINDSTORMS.NXT.G.Programming.Guide.2nd.Edition》,及其一些不完整的中文版,虽然有糖老大的帮助文件,但对初学者来说,还是不够,因此决定自己翻译这本英文版。由于本人刚接触乐高,因此翻译的术语可能不对,请各位多多包涵。若蒙各位老大指定,本人不胜感激。与各位享,转载请注明出处。全部结束后,我会转成PDF文档上传。由于没有取得翻译授权,仅供各位学习使用,请不要用于商业用途,本人保留一切权利。
若受版权困扰,请版主删贴。各位可以免费下载使用,转载请注明出处及译者姓名。(完整的PDF文档在60楼)
第一章 机器人与程序 如果你已经熟悉机器人及编程的基本概念,可以直接跳到相对较深奥的第十四章。但是,如果你刚开始接触LEGO Mindstorms NXT机器人工具包,且你有以下一些问题如:“机器人与烤炉有什么不同。”或者“什么叫做编程?”那么,这是你要开始的地方。如果有些术语如:条件语句,嵌套循环,及变量等使你头疼的话,不用担心——这些同样使我头疼。 很简单,在学习使用Mindstorms NXT机器人工具包时不会有任何引起压力的理由。这个是很有趣的事情,对不对?建造机器人,并使它们按照你的要求来完成动作是不会引起任何头疼的。我不喜欢头疼,当然也不希望让你头疼,因此,坐下来让我以较小压力的方法来逐步探讨NXT。 什么是机器人 我保证尽量用简短语言来描述。什么是机器人?目前有无数个定义。其中有一个定义是指具有人类外形,并能模仿人类动作的机械设备。另外一个定义是指功能独立,不用人控制的电子械器。等等还有其它定义。事实上还没有一个正式的定义。 为了这本书的目的,我打算给出我自己的定义。就是:机器人是指能独立完成各种动作,并与周围环境交互的一种电子设备。 总之,一个机器人能够自己移动及反应。如果你去控制他的行为,这个只是个遥控玩具,对不对?如果你的设备能够检测它的周围环境,能对障碍物如椅子或墙作出反应,从一堆彩色球中找出一个红球以及独立完成成百上千种行为,那么你这个就是机器人。 你能够使用强大Mindstorms NXT的工具包搭建一个机器人。你的机器人可以拥有爪子或手;可能拥有耳朵来听,眼睛来看。它可以用脚来走路或用轮子滚动。但是,为了让该机器人能自己完成这些事情,你必须给它提供另外一个部件——程序。 什么是程序 我已告诉过你,我对计算机术语很头疼,但有些术语是不可避免的。我将要介绍的术语是很简单的,且很容易拼写的,因此这些术语不象想象的那么糟。 当我们谈到Mindstorm NXT机器人工具包时,我们是在讨论一种技术。技术通常是需要一些学习的,但不意味着很沉闷——NXT机器人是很酷很有趣的。因此,让我们从必须理解的最酷的技术——程序开始。 若不定义什么是程序,我不能写出一本关于NXT编程方面的书籍。因此让我们先来讨论一下这个词。我承诺保持风趣。 我们先来看一个非常简单的机器人。我将这个机器人命名为SPOT,现在,SPOT只做一件事,坐在那儿。 看一下图1-1,SPOT该做他最拿手的。 我们是否都认为SPOT是个能乏味的机器人?我们都知道机器人必须做些什么!你很想说,SPOT必须给些培训。现在我将定义这个词“程序”。慢慢地读以下两句语句:一个程序是给我的机器人的一系列指令。编程是指你建立程序时的工作。
图1-1 我的机器人SPOT 这是个不长的定义,当然也不复杂。随着学习的深入,这个定义将会赋予更多的细节,但现在,我们只需从这个基本的思想出发。 人类同样需要程序 在你的生命中,你会碰到很多程序。不相信我?我给你一些例子: 老师:同学们,取出你们的数学书。 [牢骚,学生们拿出他们的数学书。 老师:请各位翻到55页。 [更多的牢骚,每个人翻到了55页。] 老师:请每位读到65页。 [牢骚一片] 老师给了学生一个遵循的程序:拿出你们的书,翻到相关页数,读取一定页数的内容。学生被要求从哪页开始读,并告之到哪页结束。老师可以增加一些更加复杂的指令如要求学生跳过第60页,并回答第62页上的问题。我的观点是,这里面有一些指令顺序及加入一些决策选择。这此由学生自己来选择,如当他或她读到第65页时,停止读书。下面还有一个例子: 第一步:将一个小部件牢牢地安装在一个玩意上。 第二步:抓住一个小东西到小部件中。 第三步:滑倒那个玩意,将小东西往左边弯曲。 这是我在一本指令手册上看到的步骤——对我来说是一个要遵循的程序。如果我按照步骤做,我的玩意能很好的工作(我的小东西仍然不能工作!) 程序只是指令集 一个简单的程序只是一系列要求按照执行的指令(书面的,口头的或者以其它方式提供的)。当然,我不会将你称作机器人,但是从某种意义上来说,我们的行为经常会象机器人。如果我们按一定的指令活动,我们就是在运行程序!(另外一个经常替代运行的词是执行,“我要求SPOT运行他的睡觉程序”同“我要求SPOT执行他的睡觉程序是一个意思。”) 在上述例子中,老师可以简单地列出如下的一周读书计划表: 周一:读1-20页。 周二:读21-40页。 周三:读41-60页。 周四:读61-80页。 周五:读81-100页。 现在,当学生到达教室后,所有的老师只需说:“同学们,完成今天的读书任务。”下面由学生来查询他的读书计划表(我经常丢失我的计划表),打开他们的书本,开始读书。程序是读书计划表,老师要求学生执行或运行这个程序。 让我们回到SPOT。他静静地呆在那儿。多么沉闷。让我们假设SPOT有对耳朵,我能够给他一些指令。我将从给SPOT一些动作开始: 我:SPOT,前进。 [SPOT开始向前滚动。 我:SPOT,停止。 [SPOT停止滚动。 我仅给SPOT2个非常简单的程序。什么?两个程序?是的,第一个程序是“前进”,第二个程序是“停止”。最简单的程序只需一步。 编程的挑战 到目前为止,我在这章里的程序都是简单的,琐碎的。你可能已经明白它们是细微的。你是人,你拥有一个大脑。机器人就没有这么幸运了,这导致了编程的一个主要挑战:对需求具体化。 这儿有个例子,我们将上述两步程序合并为一步: 我:SPOT,前进并停止。 [SPOT将呆在原地。 为什么会发生这种事?好的,让我们设想有人告诉你“前进并停止。”你将前进多少距离?你将在什么时候停止?你很聪明,但机器人没有这么聪明。机器人必须要确切地告诉他做什么。在这个例子中,SPOT确实按他要求的做了。SPOT前进并停止。你为什么没有看见他移动时因为当他开始转动他的电机时,他停止了。 在第一个例子中,,我一直等到SPOT开始滚动后再告诉他停止,因此他有时间进行实际的移动。在第二个例子中,我将两个程序并到了一起(前进并停止),并且没有告诉SPOT应该走多远或者向前走多少时间。因此,让我们再试一下: 我:SPOT,前进5秒钟,然后停止。 [SPOT前进了5秒钟,然后停止 下面是另外一个例子。假定我给SPOT如下的程序: 我:SPOT,旋转180度,然后前进2英尺。 信不信由你,尽管这个程序看起来给出了非常详细的指令,但对SPOT来说还是会引起混乱。为什么?首先我们来看一下程序的前半部分——旋转180度。SPOT应该向左转还是向右转180度?不管你信不信,对机器人来说,这是个问题!记住,机器人需要的是非常确切的指令,因此,我必须修改成“顺时针旋转180度”或者“向右旋转180度”。 另外,该程序的后半部分也有些小问题。我告诉SPOT前进2英尺,我必须为SPOT先定义“向前”及“向后”。大多数人想当然地认为机器人有一脸面,或者正面或背面,这没问题。对SPOT(如图1-1)来说他的“眼睛”是向前的。他的电机能够顺时针或者逆时针转动。当我对SPOT进行编程时,我必须确定当我告诉他前进时,他的电机将确保他向他所面对的方向进行运转。我将在本书的后面作详细的说明,现在只需明白SPOT是很容易被迷糊的。 我已经认识到SPOT本身真的是没有问题。我发现,当我告诉SPOT做事情时,我得非常具体。 我们假设认为SPOT非常擅长读我的笔迹,我将告诉你另外一个例子,当我要求SPOT执行程序时,我是要多么具体,但现在,我不要求他做什么,我只是简单地拿出一张纸并写下以下内容:SPOT,前进3英寸,向左转90度;后退2英寸,转动360度,停止。 下一步,将这张纸条给SPOT,他开始读纸条。他前进了3英寸,向左转90度,后退2英寸,转动360度,最后停了下来。 如果你的NXT机器人象我的一样,不过,它可能不会有能力能接收语音命令或读一张纸。 如果你的机器人不能听到你或读你的笔迹,那你怎么告诉它要做什么?容易!你将要使用编程软件。或者其他名称,如编程套件或图形化编程环境,或胡说,胡说,胡说,现在,我们只使用编程软件,好不好? 你很幸运,你的MINDSTORMS NXT机器人套件中包含有称作为NXT-G的图形编程软件,(G表示图形,意味着编程并不要求象我前面给SPOT手写的步骤指令)。
注意:有很多种程序的方法。正如不同的人讲不同的语言,机器人(电脑和其他技术性的东西)可以有不同的语言。人类语言的一些例子是英语,西班牙语,法语,德语和意大利语。对于你的NXT机器人,同样有不同的语言。我说英语,因为那是我在学校学会了的语言。你的NXT机器人理解一种来自工厂的语言:NXT-G。 我也讲西班牙语,但它不是我的母语。你的NXT机器人也可以学习其他语言,但其母语是NXT-G的。大多数人在学会他们的母语之前是不会学习另一种语言。这就是你需要做的——学习NXT-G,这样你可以跟你的机器人交谈(通过给它一个程序)。 NXT-G NXT-G你用来告诉你的机器人做什么工具。NXT-G允许你创建可以上传(安装)到你的NXT机器人上的程序。这些程序可以是简单的指令如“前进2英寸,停止”,或者只要你能想象到复杂!NXT机器人可以安装各种电机和传感器。但是,如果没有一个好的程序,你的机器人将不知道做什么:我怎么转动我的电机?我对触摸传感器能做什么?若没有编程,你手上只有一个迷茫的机器人。 NXT-G安装在电脑上(有Windows和Macintosh版本)作为软件存在。我不会涵盖使用该软件的基础,所以你需要参考与NXT套件配套的LEGO MINDSTORMS NXT用户指南,来完成安装说明及其它一些基本操作步骤,如创建新的程序,保存程序及其它命令。 你将创建并保存你的程序(就像你保存图纸或论文到你的计算机上一样),然后连接你的NXT机器人到计算机。当你的NXT机器人连接完成后,你将能够上传一个或多个程序到你的机器人并运行(执行)他们。 NXT-G是NXT机器人套件选择的编程软件。不幸的是,用户目前面临着混乱的NXT-G版本。我将尝试着来消除这个混乱。 眼下,有两个MINDSTORMS NXT-G机器人套件类型。第一个类型通常被称为零售版本。这是你从商店或直接从乐高(www.lego.com)购买的机器人套件的版本。第二类型通常被称为教育版本。这个版本的机器人套件是从LEGO教育(legoeducation.us)直接购买的。 首先,你必须要知道,零售版和教育版机器人套件有不同组件数目。他们有很多共同的部件(如电机,传感器,和智能积木块——NXT的大脑),但他们也有一些不同的部件。更加混乱的是,第一零售版本(在2006年发布),在包装盒上没有标明1.0版本,但第二零售版本(在2009年发布),却在包装盒上标有“2.0”字样。目前,只有一个版本的教育套件。 最最混乱的是,零售套件和教育套件各有两个NXT-G的版本。对于零售套件,有1.0版和2.0版的NXT-G。对于教育套件,同样也有1.0版本和2.0版本,并且让人无法相信的是,教育套件软件版本(1.0和2.0),与相应的零售版本都略有不同!这简直是疯了! 然而,我们不纠结于这一点。我估计,每个版本的NXT-G编程软件大于90%是相同的。我会尽可能的在本书中指出当不同版本之间的不同。,但总体来说,你会发现,大多数软件的功能仍然是从各版本相同。
如果你不知道你有哪一个版本,看看图1-2到1-4。图1-2显示了1.0零售版本(有一个ROBO中心);图1-3显示了教育版本(1.0和2.0都有相同的ROBO教育家,但也有一些细微的差别);图1-4显示了2.0零售版本(具有完全不同的机器人中心项目)。再次强调,不要过多地专注于你拥有的版本。这些版本是有差异,但对于这本书来说,超过90%的工具是相同的。 图1-2 带有ROBO中心的NXT-G 1.0零售版 图1-3带有ROBO教育家的NXT-G 1.0及2.0教育版 图1-4具有不同ROBO中心项目的NXT-G 2.0零售版 NXT-G编程软件使用起来很有意思;随意用它来进行互动。NXT-G的最好部分是它的大部分内容是你自己很容易掌握的。你会发现,在接下的大部分章节中,你会发现有很多下例子以及要你自己的尝试一些练习。如果你准备开始学习如何创建一些程序,并得到一些实际的操作培训,请前往第2章,本章将帮助你定义你想你的机器人做什么。用NXT-G做些小实验吧。我们第2章见。 |