找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 243119|回复: 202

[教程] LEGO MINDSTORMS NXT编程指南(完整中文版)——自主翻译

   火.. [复制链接]
发表于 2012-10-22 21:19:32 | 显示全部楼层 |阅读模式
本帖最后由 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-1SPOT该做他最拿手的。
我们是否都认为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机器人连接完成后,你将能够上传一个或多个程序到你的机器人并运行(执行)他们。
                                      NXTNXTG版本的混乱世界
NXT-GNXT机器人套件选择的编程软件。不幸的是,用户目前面临着混乱的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-21-4。图1-2显示了1.0零售版本(有一个ROBO中心);图1-3显示了教育版本(1.02.0都有相同的ROBO教育家,但也有一些细微的差别);1-4显示了2.0零售版本(具有完全不同的机器人中心项目)。再次强调,不要过多地专注于你拥有的版本。这些版本是有差异,但对于这本书来说,超过90%的工具是相同的。
1-2 带有ROBO中心的NXT-G 1.0零售版
1-3带有ROBO教育家的NXT-G 1.02.0教育版
1-4具有不同ROBO中心项目的NXT-G 2.0零售版
NXT-G编程软件使用起来很有意思;随意用它来进行互动。NXT-G的最好部分是它的大部分内容是你自己很容易掌握的。你会发现,在接下的大部分章节中,你会发现有很多下例子以及要你自己的尝试一些练习。如果你准备开始学习如何创建一些程序,并得到一些实际的操作培训,请前往第2章,本章将帮助你定义你想你的机器人做什么。用NXT-G做些小实验吧。我们第2章见。
图1-1.JPG
图1-2.JPG
图1-3.JPG
图1-4.JPG

评分

参与人数 2乐币 +110 人气 +1 收起 理由
ycbb + 10 + 1 楼主你太牛了!对你的付出致敬!
糖伯虎 + 100 感谢您的分享!

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2013-2-9 20:32:45 | 显示全部楼层
本帖最后由 James.Yang 于 2014-6-23 13:33 编辑

LEGO MINDSTORMS NXT编程指南(中文版).pdf

LEGO MINDSTORMS NXT编程指南(中文版).part1.rar

6.2 MB, 下载次数: 16321

LEGO MINDSTORMS NXT编程指南(中文版).pdf

LEGO MINDSTORMS NXT编程指南(中文版).part2.rar

5.37 MB, 下载次数: 14311

LEGO MINDSTORMS NXT编程指南(中文版).pdf

评分

参与人数 2乐币 +2 人气 +2 收起 理由
robotlego + 1 + 1
萤火虫_Crystal + 1 + 1 非常感谢楼主分享!学习中

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 16 0

使用道具 举报

 楼主| 发表于 2013-2-9 20:03:38 | 显示全部楼层
本帖最后由 James.Yang 于 2013-2-9 20:18 编辑

翻译后记
翻译是件痛苦的事,对于一个业余的非专业的新手来说,尤其痛苦。期间曾多次想放弃,但想到一开始我就作出了承诺——自主翻译完整版,我必须要完成它。虽然论坛上有很多高手,他们可能不需要这本书了。但当我想到其间也有许多象我一样的新手,他们可能苦于找不到合适的中文资料而放弃加入LEGO这个队伍;可能还有一些孩子,当他们拿到父母买给他们的LEGO机器人时,由于找不到合适的中文资料而让其束之高阁;可能还有一些父母,想教孩子学习LEGO机器人,但由于找不到合适的中文资料而放弃这个念头。所有这些,都成为我要完成这篇教程翻译的巨大动力。
经过几个月寂莫的、没有任何回报的辛苦,现在终于完成了整个翻译工作。在翻译的前期,我一直是个纯粹的理论空谈家,没有LEGO机器人进行实际操作,感谢我的爱人给予我的支持,使我真正拥有了一台属于自己的LEGO机器人;还要感谢我的女儿,她一直吵着要学习LEGO机器人,这是我完整个翻译工作的主要动力,她还是我翻译文稿的第一阅读人。
还要感谢中文乐高论坛提供了这个平台,使我们这些初学者能有一个学习交流的空间,同时也要感谢论坛上的一些朋友,糖伯虎在我第一天发布这个文档时,就给我了100乐币的奖励,ycbb也给了我10乐币的奖励,还要感谢其它一些朋友的鼓励话语,这些都是我坚持下去的动力。虽然后续回复少了,但看到帖子浏览人数的上升,说明还是我很多朋友在关注我,这也是我坚持下去的动力。
由于本人水平有限,书中的翻译有不足之处,有些专业术语使用不当,请各位读者能够批评指正。
本中文教程仅供各位学习之用,不能用于任何商业用途。任何用于商业用途的行为都是对原作者的侵权,由此造成的后果由其承担,本人不承担任何责任。同时本人保留所有权利。


杨喜刚

2013-2-9除夕
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 3 0

使用道具 举报

发表于 2013-2-24 10:40:29 | 显示全部楼层
感谢楼主的辛苦付出。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2013-1-14 23:08:43 | 显示全部楼层
复制完毕
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

 楼主| 发表于 2012-11-3 19:31:39 | 显示全部楼层
本帖最后由 James.Yang 于 2012-11-3 19:33 编辑

第5章 录制/播放模块
NXT-G编程语言一个很好的功能就是录制/播放模块。有了这个模块,你可以记录机器人电机的动作到一个文件,并将文件贮存在智能积木块中。该文件可用于以后重新播放机器人的运动。
在这一章中,我们将再次使用SPOT。但是这一次,我要添加一个额外的电机(电机A)让SPOT做一些愚蠢的动作,如转动一只手臂或一个传感器。随便让它做你喜欢的。我让我的机器人用电机B(在端口B)转动它的左轮,用电机C(在端口C)转动它的右轮。用电机A(在端口A)旋转一个在机器人前面的小螺旋桨(就象飞机一样)(见图5-1)。

图5-1  SPOT及其新螺旋桨

录制/播放模块
我已经准备好录制一些基本的运动。如果你已经搭建好了自己的SPOT,跟着我一起开始吧。
录制/播放模块位于公共模块功能区移动模块下方。拖放一个录制/播放模块到顺序条(见图5-2)。
我知道这似乎是常识,但我还是要强调:在我们实际录制了机器人动作之前是不能回放SPOT的动作的。因此,我们需要做的第一件事情就是配置录制/播放模块来录制SPOT的动作。要做到这一点,在模块的动作部分,选择录制选项,如图5-3所示。当你拖动一个录制/播放模块到设计区时,这是默认配置。


图5-2  使用录制/播放模块开始记录一个机器人的运动


图5-3  首先在动作部分选择录制选项

接下来,我们需要为录制的运动指定一个名称。作为一个例子,我想让SPOT前进2英尺(电机B和C将向前旋转)并左转。然后,我想让电机A旋转螺旋桨几次。我在名称文本框中输入“起飞”(Takeoff),如图5-4所示,你可以输入任何你喜欢的有助于你记住录制动作内容的描述。

图5-4  给录制的运动一个唯一的名称。
你在名称文本框中输入的名称也就是存储在智能积木块上的文件名。为了以后能回放该动作,此文件必须存储在智能积木块上,所以起的名称尽量要易于记忆及容易理解。
现在,看一下图5-5。配置面板的录制部分,你可以指定哪些端口应该被监*控。在我的例子中,电机B和C将使机器人移动,电机A将旋转螺旋桨。所以,我要选择所有的端口。如果你没有使用某个电机的端口,你不需要将其选中。但是,如果你选择了一个电机端口但没有使用它,也不会显示任何错误。

图5-5  配置电机端口进行监*控和录制

需要配置的最后一个项目是你录制机器人动作的时间(以秒为单位)(见图5-6)。你可以在时间部分直接输入你想要录制的秒数,或用鼠标单击向上和向下箭头来选择时间。


图5-6  在时间部分输入需要录制的时间秒数

理论上你可以从任何地方开始录制1秒到几百分钟的动作。这现实吗?不尽然。你的NXT智能积木块的内存量是有限的,你会发现你最多能录制几分钟。甚至录制几分钟的运动都可能占用太多内存而无法运行程序。你必须在时间部分尝试各种时间以测试其容量极限。

录制运动
一旦你完成了录制/播放模块配置,保存程序,并上传到你的NXT机器人。将机器人放在起始位置,然后按“运行”按钮。用你的双手,引导机器人按你要求进行运动。
在我的例子中,我只是推动机器人前进两英尺并停止。然后我把机器人左转并停止。接下来,将机器人前面的小螺旋桨旋转五、六次,这样就完成了。
我建议你在录制时输入运动的时间。如果你录制的时间接近设定的秒数,你就直接使用录制时间。如果你设定的时间不足,回到配置阶段并输入正确的时间,保存它,然后再次运行程序来记录完整的动作。最重要的是,如果你最初配置的时间太长,在时间部分减少输入的秒数,因为在设定时间结束前,录制过程将继续运行,智能积木块上存贮的文件大小会大大超过实际要求的。
重播运动
好了,你已经成功地录制了机器人的动作,并按你在名称部分输入的名字,在智能积木块上存贮了一个文件(你可以将智能积木块连接到你的计算机,并检查存储器中的内容来验证这一点)。现在,让我告诉你如何回放该文件。
它是如此简单,你会觉得很好笑。创建一个新程序,加入一个录制/播放模块。然而,这一次,在操作部分中选择播放选项(见图5-7)。


注意:如果你通过USB电缆连接NXT智能积木块到计算机,所有通过录制/播放模块录制并存储在NXT上的文件,都将出现在图5-7中看到的文件部分。你可以从列表中直接选择文件名而不必输入该文件名。如果你没有将NXT进行连接,你需要记住文件名,并在名称部分输入该文件名。



图5-7  配置你的机器人来回放录制的运动。

现在,唯一可以配置的部分是名称部分。在名称部分输入包含录制运动的文件名(见图5-8)。在我的例子中,我输入我前面起的文件名起飞(Takeoff),该文件录制了前进2英尺,左转,旋转螺旋桨几次的运动。

图5-8  输入在录制过程中创建的文件名称。

接下来,你需要保存新程序,并把它上传到智能积木块。在运行程序之前,请将机器人放在原来的开始位置(或者你喜欢的地方),按下Run按钮来运行程序。该机器人将按先前录制的运动进行运动。这就是录制/播放模块。
乐动录制/播放
这里有一些录制/播放模块使用的想法:
•一个有趣事例是使用录制/播放模块来记录机器人跳某种形式的舞蹈(10至20 秒),并把它保存到一个名为舞蹈的文件中。如果你保存舞蹈文件到智能积木块上,你可以在程序的任何地方加上一个录制/播放模块,让机器人跳上一段舞(你可以多次添加)。
•作产品展示时,小组可以使用录制/播放模块。你可能需要观众重点关注某些有趣的部件或构造,录制/播放模块可以让观众更容易观察这些部件。正确配置时间,你可以同步对机器人的讲解与不同部件的展示。
练习
现在,让我们尝试使用我们所掌握的知识进行一些练习。如果你需要这些练习的参考解决方案,我将它们放置在本章结尾。
练习5-1:录制恰恰舞运动
录制机器人表演短时间的恰恰舞(3-4秒)——只是短距离的来回摆动。将文件在智能积木块上保存为“ChaChaCha”。
练习5-2:首先向前、向后滚动
通过使用移动模块,使机器人向前移动几英寸,然后倒退几英寸,然后跳个CHA-CHA-CHA舞。让机器人再做这组动作一次。
下一步内容?
第6章将告诉你如何让机器人拥有说话能力,并制造一些噪音!虽然这不是机器人的必需技能,但有了声音会使机器人更有趣。甚至还有方式来添加自己的声音和音乐到NXT(NXT 2.0版本用户)!下面我会告诉你如何做到这一点。
练习解决方案
下面是前面练习的解决方案。请记住,你可以修改这些练习,并尝试新的东西——这是一个很重要的学习方式。
练习5-1
图5-9中包含了程序以及程序中使用的单一配置面板。一定要记下该文件名,你需要在练习5-2中使用该文件。保存这个程序,并把它上传到你的机器人。运行该程序并来回移动不超过5秒钟。

图5-9  录制一个运动只需一个录制/播放模块
练习5-2
图5-10至5-15包含了程序以及程序中使用的模块的配置面板。请注意,虽然移动模块看起来相似,第一和第二个移动模块的唯一的区别是方向设置(第三和第四个移动模块也是这个区别)。这要求机器人向前滚动一圈,然后向后滚动一圈,然后跳CHA-CHA-CHA舞。最后三个模块只是简单的重复前三个模块。


图5-10  完整的程序和第一个移动模块的配置面板


图5-11  第二个移动模块的配置面板


图5-12  第一个记录/播放模块的配置面板


图5-13  第三个移动模块的配置面板


图5-14  第四个移动模块的配置面板


图5-15  最后的录制/播放模块的配置面板
图5-1.JPG
图5-2.JPG
图5-3.JPG
图5-4.JPG
图5-5.JPG
图5-6.JPG
图5-7.JPG
图5-8.JPG
图5-9.JPG
图5-10.JPG
图5-11.JPG
图5-12.JPG
图5-13.JPG
图5-14.JPG
图5-15.JPG
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2012-10-22 21:47:24 | 显示全部楼层
这个牛,敬佩。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-22 22:29:32 | 显示全部楼层
全本呢
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-22 22:37:36 | 显示全部楼层
乐高的队伍不大,有能力、且愿意为大家付出的朋友更是凤毛麟角

我代表广大乐高爱好者和中文乐高团队感谢您的劳动和奉献。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-23 17:30:50 | 显示全部楼层
看不到图呀?谢谢。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-23 23:18:14 | 显示全部楼层
谢谢,辛苦啦
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-24 10:09:54 | 显示全部楼层
翻译的很有趣哦!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-24 19:20:46 | 显示全部楼层
顶一个表示支持,虽然我还没接触NXT的计划
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-10-24 19:26:50 | 显示全部楼层
感谢各位支持,感谢糖老大。有时间我会将图片补上的,但不知如何插入文本中,请赐教!后续章节请耐心等待。最近较忙,可能会晚点出第二章。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-10-25 22:12:29 | 显示全部楼层
第2章 程序结构
我很讨厌使用类似的技术术语“程序结构”,但它是一个非常有用的概念,这将有利于你开始对你的机器人编程。结构这个词意味着某种组织或计划,不是吗?当你结束本章的时候,你应该明白程序结构对你及你的机器人的重要性。
我说的结构是什么意思?
第1章中,我给了你一些现实世界中程序的例子。下面的例子会有任何意义吗?
教师:同学们,打开书本,并翻到第55页。
[同学们看起来很困惑。]
教师:同学们,我要求你们拿出数学课本。
[给老师困惑表情同时,学生拿出了他们的课本。]
如果你还没有被告知要打开哪本书,你怎么能读第55页?你可能会回答:“是的。但我在数学课上,老师说翻到第55页,所以我敢肯定老师指的是我的数学书!”
这很对。作为一个人,你能够自己来判断这种指令,但是要记住——机器人没有那么聪明!他们需要非常严格和明确的指令,并且这些指令需要按严格的顺序给予一,这个顺序就是“程序结构”的另外一种说法。
设想一间屋子,如果没有第一层,你就不能在上面建造第二层,是不是?在浇筑好地板及建好一些前之前,你是不能安装天花板的,这些都是你在建造屋子时所需要做的事情的顺序。给机器人编程也同样需要顺序。
规划你的程序结构
让我们为SPOT举另外一个例子。他仍然在做他唯一的伎俩——静坐。你尚未完全准备上传NXT-G程序,但让我们在这一阶段预先做一些计划。我希望你能使用计算机程序员称作的伪代码。什么是伪代码? “伪”的定义是假的(假装,仿真,虚拟——有些眉目了?);它不是真实的。 “代码”是程序的另一种简单称谓。把它们全部放在一起并从另外方面看伪代码:假程序。
我们的假程序不使用NXT-G编写。我能告诉你创建一个假程序的最好方法是,假定SPOT有耳朵,你只需告诉SPOT你想让他做什么。让我们试着写一些带有编号的伪代码:
1.        SPOT,前进,直到你的触摸传感器被按下和释放。然后,停止。
2.        好的,SPOT,我要你左转90度。
3.        现在,我想你给一个响亮的蜂鸣声!
4.        很好,SPOT。现在向退,直到你的光传感器检测到黑色的物体。然后,停止。
5.        现在,SPOT,跳个舞吧。
这是伪代码?对,这是一种伪代码形式。还记得我告诉你有很多不同的编程语言吗?不同人写的伪代码同样不同。我希望你能理解这一点,在你真正使用NXT-G为机器人编程前,你需要有一个要求你的机器人做什么的真正想法。做到这一点的最简单方法只是用简单的语言将要求你的机器人完成的指令写下来。这是为未来的NXT-G程序打下一个良好结构的开始。
当你写伪代码时,你将完成三件事:
        你将获得对你的机器人将执行任务的更好理解。
        你将从机器人的角度来看世界,这在编程时是非常重要的。
        你正在创建一个你的机器人需要执行的指令(结构)顺序集。
你将用这个伪代码为你创建NXT-G程序时提供帮助。我想提醒关于伪代码的最后一件事是,你给机器人的每个指令应该尽可能的简单。看看下面的两个例子,哪一个的指令更简单:
        范例1:SPOT,前进约10英寸,左转90度,开始前进,然后用你的超声波传感器寻找黑色物体,我希望你发现黑色物体时停下来,然后右转 90度,并后退2英尺,明白?
        范例2:
1.        SPOT,前进10英寸并停止。
2.        现在,左转90度。
3.        开始前进,打开你的超声波传感器。
4.        当你发现一个黑色物体时停止。
5.        右转90度,并停止。
6.        现在后退2英尺,并停止。
哪个例子更不复杂?如果你选择范例2,那么你是正确的。我们不得不承认——如果你给人以范例1中的指令,有些人也会感到困惑!当写伪代码时,将你给你的机器人指令分解成简短及简单的语句,这将使你更容易将伪代码转换成的真正的NXT-G程序。
转入真正的代码
你是否想知道如何将伪代码转换成真正的NXT-G程序吗?让我先给你简单浏览一个本章接下来的内容。
回顾一下我原来的伪代码并阅读步骤4,“当你发现一个黑色物体时停止”。
如果我用NXT-G编程,并熟悉它所包含的各种工具,我知道里面有工具(称为模块)能与伪代码匹配。他们为什么叫模块呢?请参见图2-1。

图2-1  组成程序的NXT-G模块集合

在图2-1中有没有看到NXT-G软件屏幕中心的那三个方块?这就是模块!左边的模块(带齿轮箱)是移动模块。中间的模块(有小喇叭图标)是声音模块。右边的模块是传感器模块——模块图标告诉我,这是光线传感器模块。不要担心,你将会在后续章节中学习了解所有这些模块,(声音模块在第6章,传感器模块在第9章),但现在我只想让你明白什么是模块以及模块长什么样子。
当我想让SPOT向退时,他将使用他的电机,对吗?这样,我将使用移动模块。移动模块允许我对我的机器人编程,让其反向旋转他的电机(或车轮),这样SPOT就会后退。
我只想让SPOT后退到他的光线传感器检测到黑色为止。要做到这一点,我将使用一种叫传感器模块来监测光线传感器。传感器模块将被编程用来检测黑色。
最后,我想让SPOT在传感器模块检测到黑色时停止。对于这一点,我可以使用另一个移动模块来告诉电机停止转动。
你将给你的机器人使用这些模块以及其它更多模块来按照你的指示进行正确编程。这本书将教给你所有不同的NXT-G模块,这样你就会知道在将伪代码转换到NXT-G程序时要使用哪些模块。
如果你还记得本章开关的一件事,它就是:如果你能花时间写下伪代码,对你机器人编程会容易得多。如果这句话有帮助,就假设你的机器人有耳朵,告诉他你想要他做什么。写下这些指令,并尽量使它们简短和简单。
练习
现在,我想给你一些写伪代码的练习。它不需要很长时间,但它需要一个合作帮手。请求你的朋友或老师或家长来协助你完成以下两个练习。(书中练习的参考解决方案,可以在每一章结尾寻找。)如果可能的话,与你的合作伙伴进行角色交换练习。这将有助于你编写伪代码,以及看到按指令编写伪代码的难易程度。
练习2-1. 移动一个物体接近另一个物体
放在桌子上两个物体(如一支铅笔和一本书)。将他们放置相距大约两英尺,将左边的物体标上物体1的标签,右边的物体标上物体2的标签。接下来,要求你的同伴坐在桌子前,将一个物体放在他的左手边,另一个物体放在他的右手边。写下一些伪代码,并把它交给你的同伴,要求他或她(坐在那里)拿起物体1,并将其移动到靠近物体2的一个位置。然后要求你的同伴拿起物体2并移动到物体1原来的大概位置。
练习2-2. 将物体放在角落
要求你的同伴站在房间里的一个角落(任何一个角落都可以,并称它为起点)。给你的同伴两个标好物体1和物体2的物体。写下伪代码,要求你的同伴沿着右手边墙壁前进,当他遇到第一个拐角时,将物体2放在地板上。要求你的同伴继续前进至下一个拐角(不要回起点),并将物体1放在地板上。要求你的同伴按相反方向移动,并返回出发点。
你的伪代码是否混淆了你同伴(或反之亦然)?如果是这样,不用担心,这里的目标是要你了解,当你给机器人编程时,你要尽可能提供更多的细节。细节越多,你的机器人在你努力下成功越大。
下一步内容?
在下一章中,你将会写一些伪代码,并将它转换为真正的NXT-G程序。编写出优秀的NXT-G程序的关键是要理解NXT-G编程模块是如何工作的。当你知道模块怎样工作,你就会知道在转换伪代码时将要使用哪些模块。
第3章将演示显示模块,这是个非常有用的模块,它让你的机器人能将一些内容显示在其LCÐ屏幕上给别人看。
练习解决方案
本章练习没有一个必须遵守的解决方案。它们有许多可能。我提出两个可能的解决方案。你自己的解决方案可能会在一些细节上有所不同,但总体来说,他们应该与这里介绍的相类似。
练习2-1
下面是一个要求你同伴移一个物体到另一个物体的可能解决方案:
1.        同伴:拿起你左手边物体1。
2.        同伴:将物体1放至物体2的右边。
3.        同伴:拿起右手边的物体2。
4.        同伴:将物体2放到物体1原来的大概位置
练习2-2
以下是你同伴将两个物体分别放在两个拐角的一系列步骤。你的解决方案可能会有所不同,但它应该与这里提出方案相类似。
1.        同伴:沿着你右手边墙壁前进,到第一个拐角停止。
2.        同伴:将物体2放在地板上。
3.        同伴:不要回到起点。沿着墙壁继续走到下一角落,并停止。
4.        同伴:将物体1放在地板上。
5.        同伴:沿墙壁按相反方向返回起点。
图2-1.JPG
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-10-28 14:24:40 | 显示全部楼层
谢了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-10-28 21:07:01 | 显示全部楼层
本帖最后由 James.Yang 于 2012-10-28 21:09 编辑

第3章        世界你好!
编程世界里有一个传统就是将“Hello World!”显示在屏幕上作为你编写的第一个程序。为保持这个传统,我将告诉你如何为SPOT创建这个程序的简单版本。这将展示NXT软件中包含的最简单模块之一——显示模块。一旦你掌握了这个传统程序,我将向你展示该模块的其他功能。
显示模块编程
第2章中,我向你解释了伪代码的概念。现在让我给SPOT一些伪代码:
SPOT,我想让你在你的LCD屏幕上显示字符“Hello World!”。
没有比这更简单的伪代码了。现在要做的就是把字符“Hello World!”显示在SPOT的LCD屏幕上。为了将伪代码转换成NXT-G程序,我将.使用显示模块。
我们首先打开NXT软件并在创建新程序文本框中输入“HelloWorld”(见图3-1)。点击“Go”按钮,将打开HelloWorld程序。

图3-1  开始一个叫HelloWorld的新程序


注意:本书中使用的图,大部分是从NXT-G 1.0版零售版软件上截下来的。有些图是从零售软件2.0版截来的。如果你像我一样,你很难发现其间的差异。在大多数情况下,工作区,按钮,菜单,和其他工具在不同版本之间是相同的。当在不同版本间有明显的不同,我将会将两个版本的图都附上。在任何情况下,当某种操作特定于1.0版或2.0版,我会作出提醒让你知道的。然而,在大多数情况下,不同版本之间的差异是微乎其微的,无论你使用哪个版本的软件,你都不会有任何困难来理解截图。


图3-2显示了新打开的程序(有没有看到左上角的HelloWorld?标签?),并为你拖放NXT-G模块作好了准备。工作区间顺序条有“开始”一词,告诉你这是放置第一个模块的地方。
你准备好了吗?首先点击公共模块功能区里的显示模块,按住鼠标按钮,将其拖放到顺序条“开始”的位置(见图3-3)。


注意:如果你在屏幕左侧没有看到公共模块功能区,点击图3-2中的绿色圆点。


每当你把模块拖放到工作区间后,在屏幕的左下角将会显示该模块的配置面板。配置面板就是你给机器人进行大部分编程工作的地方。配置面板类似于汽车仪表盘。在汽车里,你可以调整电台,打开雨刷,甚至可以找到行车速度。配置面板允许你打开和关闭某些活动同时接收反馈。例如,你可以使用显示模块的配置面板来选择你要在LCD屏幕上显示的内容,显示模块同时也可以接收你控制之外的输入信号,就像汽车可以在仪表盘上显示检查机油或加注汽油的警示灯。图3-4显示了你刚才拖放到工作区的显示模块的配置面板。要想显示你拖放到你程序中的任何模块的配置面板,只需用指针工具点击该模块,选定的模块周围就会出现一个彩色带。

图3-2 打开后的HelloWorld程序,可以开始加入显示模块


图3-3 显示模块

图3-4 显示模块的配置面板


注意:如果同时选择多个模块,没有配置面板会显示出来。


现在,为了让SPOT在LCD屏幕上显示“Hello World!”,你首先得选择显示模块(用“指针”工具点击)。
正如你在图3-4中看到的,在默认情况下,显示模块动作部分的下拉菜单选择图像选项(共有四个选项:图像,文字,绘画,或复位)。点击下拉菜单,并从中选择文本。你现在将看到一个含有“MINDSTORMS NXT”文字的文本框,将文字改为Hello World!,你将会在配置面板右侧的位置部分的预览文本框中看到相同的文字(见图3-5)。

图3-5  预览框内显示了“Hello World!”文字

现在,打开文件菜单,选择保存,使用浏览按钮选择计算机上的一个位置来保存你的文件,选定后点击保存按钮。保存后,将SPOT连接到你的计算机,并上传HelloWorld程序。(如果你不熟悉如何上传程序,请参阅帮助文档。然而,理想情况下,你应该通过所有的机器人中心或ROBO教育家项目工作,来自己熟悉此功能。)


注意:在本书的其余章节,你需要时刻记住保存你的程序。我不会一直来提醒你保存程序,并将它上传到你的机器人,好吗?要养成一个经常保存程序的习惯。

等待结果
上传程序后,从文件部分选中它,在智能积木块上按橙色按钮(也称为回车键)来运行程序。
你看到了吗?该程序运行得这么快,你甚至来不及看到显示的文字!为什么会出现这种情况呢?不错,当程序运行时,它将在LCD屏幕上写上“Hello World!”,然后结束。而这正是程序运行的结果——显示文本,然后结束程序。程序运行得这么快,你甚至来不及看到显示的文本。好消息是这很容易解决,在我继续之前,我将更新伪代码:
SPOT,我想让“Hello World”文字在你的LCD屏幕上显示10秒钟。
有许多方法来保持屏幕上的文字以给你机会阅读,但我在本章中只告诉你一种方法。你将在其它章节中看到其它方法。
为了解决这个问题,将鼠标指针移到公共模块功能区的等待模块图标上。这时,将弹出等待模块的菜单集合,如图3-6所示。
等待模块正如它所说——它只是等待。正如你在图3-6中看到的,有许多不同类型的等待模块,但我现在感兴趣的等待模块是允许我直接等待多少秒的模块。这称为是时间等待模块(在图3-6中弹出菜单中圈出的模块)。

图3-6  增加等待模块以便于你能看到“Hello World!!”文字


注意:对NXT-G 1.0版本用户来说,你没有图3-6中最右边的等待模块,该等待模块是2.0零售版中用于颜色传感器的。


选中时间等待模块图标,并将其直接拖放到显示模块后面。在时间等待模块的配置面板中,选取一个显示文本的合理时间——我的伪代码要求SPOT等待10秒,这就是我需要配置的(如图3-7)。

图3-7 配置时间等待模块10秒钟

        现在运行程序,在程序运行结束前,你将能看到“Hello World!”在LCD屏幕上显示10秒种。
显示模块的更多内容
你可能与我想的一样,“这不是那么令人感兴趣。”但是请记住这一点:在编程时你必须从某处开始。经过几个简单的步骤,你现在已经知道了如何为你在将来建立的任何机器人的LCD屏幕上增加文本。现在,让我们看看显示模块还可以做哪些事情。


注意:每个程序模块都有自己独特的设置,所以每个配置面板也是不同的。例如:显示模块就包括动作,显示,文件,文本,类型,及位置等部分。有时在未选中某选项时,有此部分可能是不可见的。不要担心,在本书中我会介绍每个模块的独特项目。


显示部分只有一个可配置项——清除复选框。当此复选框被选中后(且在程序中执行该模块),智能积木块将清除其LCD屏幕上原有的任何文字或图像。清屏后,显示模块将把你配置的内容显示在屏幕上。
如果你不选中复选框,不管目前显示的是什么内容,你在显示模块中配置的任何文本或图形都将与LCD屏幕上已有的内容一起显示在,而不是取代原来内容。
这对显示多行文本是非常有用的,你可以使用多个显示模块来添加文本来组成语句,甚至段落。通过保留屏幕内容,你可以使用绘图选项来创建自己的简单图像,我将在随后解释。
在动作部分的下拉菜单中有四个选项:图像,文字,绘画和复位。默认情况下,工作区新增加的显示模块的下拉菜单中为图像选项。
当你在下拉菜单中选择图像后,文件部分就会显示出来。该部分允许你访问内置的可以在LCD屏幕上显示的图像集合。(见图3-8)。

图3-8  从文件部分选择一个可以在LCD显示的图像


注意:零售版2.0版本带有一个图像编辑器,允许你制作你自己的图像!我将在附录C介绍此功能。


点击并按住在配置面板右侧的预览窗格中的图象,你可以在小窗格中拖动图像,并把它放在你想要放置的地方。你也可以直接输入你想要位置的X和Y坐标,(如果你不熟悉X / Y坐标系统,见附录A的简要说明)。你可以使用此功能在预览窗格内移动图像以便LCD屏幕显示多个图像(需要使用另外的显示模块)。
在动作部分下拉菜单中的下一个选项是文字。你已经在前面的“Hello World!”例子中使用过这个选项。但我想补充一点,你也可以在预览窗格中拖动文本,将其放置在一个特定的位置。LCD屏幕被分成八条水平线,你可以使用预览窗格旁边的小下拉框选择1和8之间的一个数字来定义文本被置的位置。
在动作部分下拉菜单的第三个选项是画图(见图3-9)。你可以选择画一条线或一个圆圈,或在LCD屏幕上绘置一个点,所以你的艺术才华将受到一定的限制。要创建一个详细的图画,你不得不使用几十个或更多的显示模块,将线,圆,点相结合来创建图像。一个更好的解决方案(2.0零售版软件用户)是使用附录C中介绍的内在的图像编辑器。但绘图选项在1.0版和2.0版软件都有,可以给屏幕上的文本四周加上框,请记住这一点。

图3-9  绘图选项可以画点、线、圆

要使用绘图工具,在类型部分选择点,线,或圆(类型部分只有你在动作部分的下拉菜单中选择绘图功能时才显现)。对于点,你可以在预览窗格拖动它,并把它放在任何地方。还可以使用X和Y坐标,更准确地放置该点。
对1.0版本的用户来说,如果你选择线,线的终点位置在10,10位置(左下角)。在预览窗格中的任何地方点下鼠标,就会从该点到你点击的地方画一条线。你可以在X和Y框中输入新的坐标来改变线的终点(10,10)。你还可以输入X和Y坐标,更准确地确定线段的另一端位置。
对2.0版本的用户来说,线条工具使用方法相似。线段将被自动添加——在预览窗格中点击任意地方,然后再点击其它任意地方作为终点,就会自动绘制一根线段。当然,你可以使用X和Y文本框手动输入起点坐标,以及使用结束点X和Y文本框手动输入终点坐标来画条线。
最后,对圆来说,你可以在半径文本框内改变圆的半径。在预览窗格中拖动圆,将它放在正确的位置。可以在X和Y文本框内人工输入坐标作为圆心。
在动作部分下拉菜单的最后一个选项是复位。当你想清除LCD屏幕上的所有项目时是非常有用的。NXT默认的内容(目前正在运行的程序名称)将显示在屏幕上。
理解数据中心
在结束本章显示模块介绍之前,我想简述一个额外的项目:数据中心(这个主题将在第7章将作更详细叙述)。大多数编程模块都有一个所谓的“数据中心”。参考图3-10。
如果你点击一个模块的左下边缘,这个部分将会下拉并显示出一个数据中心(如图3-11)。再次点击该部位,数据中心将会收回。必须通过多次练习才能找到点击的合适位置,必须多次练习打开、收回数据中心才能熟练使用它,。
什么是数据中心?数据中心可以通过数据接头从一个模块到另一个模块绘制数据线。数据线和数据接头将在第7章作详细介绍。现在,你只需了解的是,数据线可以连接模块以共享数据,数据接头是可以连接数据线的位置。因此在一个模块上有一个可以输出数据的数据接头,在另一个不同模块上会有一个可以输入数据的数据接头。数据线能承载的信息有:文字,数字和其他数值。还记得显示模块能配置的项目吗?不错,象显示文字或者圆的半径等项目都可以不用配置面板进行设置。你只需从一个模块的接头拉一条数据线至另一个模块的接头上。这部分内容将在后面作详细解释(第7章)。现在,我只是想让你看看图3-12,了解一下会出现什么情况。

图3-10  点击显示模块图示部分将出现下拉数据中心


图3-11  显示模块的数据中心可以用于进一步的编程
        什么是数据中心?数据中心允许你通过使用数据接头在一个模块到另一个模块进行数据线连接。数据线和数据接头将在第7章作更详细的介绍,但现在你需要知道的是,数据线能够连接模块并共享数据。数据接头是模块上你连接数据线的位置。因此在一个模块上的数据接头有数据线出来,必定在另一个模块上有一个有数据线进入的数据接头。数据线能够承载信息如文本,数字和其它数据。还记得所有这些项目能够在显示模块中配置?不错,要显示的文本或者圆的半径等项目都可以不通过配置面板进行配置,取而代之的是通过数据线连接一个模块的数据接头与另一个模块的数据接头。我将在本书的后面对该主题作详细介绍(第7章),但现在,我只需要你看一下图3-12,因而我可以对下面的内容有个预览。

图3-12  一个显示模块给另外一个模块提供数据的例子

在图3-12中,我在显示模块前面放置了一个变量模块。我将在第18章介绍变量模块,现在,你所需要知道的是这个模块可以容纳文本,数字,或者逻辑数据(True或False)。在这个例子中,我已经给变量模块设置了一个数字:3
现在可以变得非常有趣。还记得当你要画一个圆,你可以在配置面板中指定圆的半径?不错,这个变量模块在其数据中心只有一个接头。对图中这个模块,它的值为3。我点击该接头,并拉一条数据线到显示模块数据中心的最后接头。这最后的接头对应的是绘制圆的半径(将你的鼠标指针指到接头,就会告诉你这个接头的含义)。当我从变量模块输出接头拉出一根数据线到显示模块的输入接头,该线变成黄实线,表明我正确地配置了显示模块。


注意:在模块数据中心左边的数据接头为输入接头,在模块数据中心右边的数据接头为输出接头。


如果线为虚线,表明我错误地连接了两个接头。发生这种情况有很多原因。例如,如果在变量模块输入了文本,将其连接到了显示模块的半径接头,就会得到一条虚线。这是因为半径接头希望从变量模块得到一个数值,而不是文本。
正如我前面提到的,我将在第7章中更详细地介绍数据接头。然而,在你开始使用这些更高级的数据线编程前,你需要了解编程模块的基础知识。

练习
现在是对你在本章中学到显示模块和等待模块进行练习的时候了。下面是两个为SPOT创建新的NXT-G程序的练习 (如果你卡住了,答案在本章的末尾。)
练习3-1:显示你自己的文字
这个练习,我希望你修改HelloWorld程序。在这个程序中,我将要求你在接近LCD屏幕的上方的地方输出一行文字,在文字下面显示一幅图画(自己选择),这两项内容在程序结束前显示25秒钟时间。


提示:同时在屏幕上显示文字和图片,同时需要取消一个特殊选项。

练习3-2 :画一个矩形
使用四个显示模块在屏幕上绘制一个矩形(或更具挑战性,绘制一个正方形)。当画完矩形的一条边后,让机器人暂停5秒,然后画下一条边。当画完矩形后,在程序结束前机器人停止10秒。


提示:参考附录A中关于坐标系统的内容,了解每条线的起始及终点坐标。


下一步内容?
SPOT需要移动!只看着他坐在地板上有点沉闷,因此让我们继续学习第4章的模块,使他能移动到其它地方。你将在移动模块中学到所有这些内容。
练习解决方案
以下是练习的可能解决方案。记住,你的解决方案可能会有所不同。我们只需得到相同的结果。很多时候,有一个以上的方法来获得相同的最终结果。
练习3-1
图3-13显示了一个可能的解决方案程序。图3-13同时显示了程序中三个程序模块中的第一个模块的配置面板。图3-14和图3-15分别显示了其他两个模块的配置面板。请注意,第二个显示模块(从左数起)有清除复选框为未选中状态(图3-14)。未选中该复选框可以在屏幕上显示图像的同时显示“I did it!”。如果选中清除复选框,文本将被删除,只有图像被显示。

图3-13  程序模块及第一个显示模块的配置面板


图3-14  第二个显示模块的配置面板


图3-15 等待模块的配置面板
练习3-2
图3-16到图3-23显示了我为练习3-2写的程序的解决方案中使用的8个模块的8个配置面板。图3-16显示了第一个模块的配置面板。图3-17到图3-23显示了后续模块的配置面板。
注意前面三个等待模块(图3-17,3-19,3-21)都配置了5秒钟,只有最后的等待模块(图3-23)设置为10秒钟。你看到如何通过手动输入坐标,使所有线条完美匹配?尝试修改坐标,画上一个完美的正方形。另外,请记住,必须不要选择后面三个显示模块的清除复选框(但不包括第一个显示模块)。

图3-16  练习3-2的程序及第一个显示模块的配置面板


图3-17  第一个等待模块的配置面板


图3-18  第二个显示模块的配置面板

图3-19  第二个等待模块的配置面板


图3-20  第三个显示模块的配置面板


图3-21  第三个等待模块的配置面板


图3-22  第四个显示模块的配置面板


图3-23  第四个等待模块的配置面板
图3-1.JPG
图3-2.JPG
图3-3.JPG
图3-4.JPG
图3-5.JPG
图3-6.JPG
图3-7.JPG
图3-8.JPG
图3-9.JPG
图3-10.JPG
图3-11.JPG
图3-12.JPG
图3-13.JPG
图3-14.JPG
图3-15.JPG
图3-16.JPG
图3-17.JPG
图3-18.JPG
图3-19.JPG
图3-20.JPG
图3-21.JPG
图3-22.JPG
图3-23.JPG
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-10-31 20:06:31 | 显示全部楼层
本帖最后由 James.Yang 于 2012-10-31 20:07 编辑

第4章        开始移动
我想说,移动模块可能是机器人编程的最重要模块之一。没有移动模块,你仍然可以建立机器人,但他们无法完成太多的动作。他们可以坐在桌子上或台子(就象SPOT一样),但他们看起来不是非常令人兴奋。任何机器人,你设计使用一个或多个电机,必须使用移动模块。
所以,下面将讨论这个非常重要的模块,看看它能做些什么。
移动模块
打开你的Mindstorms NXT软件,并在公共模块功能区将移动模块拖放到顺序条。配置面板会出现在屏幕的左下角(见图4-1)。


图4-1  移动模块及它的配置面板

你的智能积木块有三个电机端口:端口A,端口B和端口C,为了使他们能正常工作,你必须将电机正确连接到这些端口。电机有许多选项,包括转动速度多快(功率)和转动时间多长(时长)。默认情况下,移动模块被配置为控制智能积木块上的端口B和端口C,这通过选中端口B和端口C的复选框来表示,如图4-1所示。其他默认值,包括75%的功率设置和1圈的转动时间,及下一步动作设置为刹车停止。转向控制,有一个可以向左或向右拖动的控制条。默认情况下,它是在选择电机(B和C)中间,这样就不会有转向任一方向的倾向。
向前和向后移动
在开始介绍之前,我想先提请你注意电机旋转方向的问题。图4-2所示显示了电机的两个不同的旋转方向。


图4-2  移动模块能对电机配置两种转动方向(注意每个电机的方向设置)

所有电机都可以向前或向后旋转。但是在描述电机“向前旋转”或“向后旋转”时要非常小心,因为电机朝向也需要加以描述。当你在编程时,你必须要考虑电机的朝向。
在图4-2中,左边的电机在移动模块配置面板的方向部分选择了一个向上箭头。这个向上箭头对应的是前进,该电机转向为显示的逆时针方向旋转。现在,如果我翻转电机(如图4-2右侧的电机),但不改变选择箭头的方向,电机就会以相反的方向(顺时针)旋转。如果要使象右边朝向的电机如图所示逆时针方向旋转,我必须要改变箭头方向为向下(或后退)。然而,好消息是,如果你建立一个机器人并编程要求其前进,但实际是后退,这很容易解决。只要选择有问题的移动模块,然后在方向设置中选择另一个方向就可以解决机器人的运动方向。
在搭建机器人并对其编程时必须牢记:要想机器人前进或者后退,你必须考虑电机是如何连接到机器人上的,然后选择正确的方向箭头(向上或向下)。
如吧,现在让我们去了解移动模块配置面板的其它内容。
首先,我将讨论端口。移动模块可以控制端口A,B和C以及连接到这些端口的电机。电机怎样连接到端口没有特定的方法,但我建议你自己选择一个“标准”方法,用于所有你搭建的机器人电机与端口连接。
作为一个例子,请见图4-3。当我搭建机器人时,我总是将智能积木块左侧的电机(智能积木块的传感器端口朝下,电机端口朝上)连接到端口B,将智能积木块右侧的电机连接到端口C。我通常让端口A连接到第三个电机,如果我搭建的机器人,不需要第三个电机,则让端口A空着。


图4-3  选择一种连接端口与电机的方式,并一直使用它

当你连接一个电机到端口时,你必须通过移动模块的配置面板来选中相应端口的复选框(见图4-4)。在图4-4中,你应注意到,你选择的电机端口(在这个例子中,端口B和C)会在移动模块右上角显示出来。这有利于故障排除,并提醒你使用了哪些电机。

图4-4  通过移动模块的配置面板来选择电机端口

我不止一次犯了同样的一些错误,我敢肯定,你也会遇到相同的问题。当你选择了移动模块,并将其放到屏幕上,默认选中的是端口B和C。当对单个电机编程时——如电机B——是很容易忘记取消选择电机C的复选框的,然后,当你将程序上传到你的机器人并运行时,机器人会突然做一些很奇怪的事情。时刻记得检查你的移动模块,确保在该模块中你选中的端口控制的是你想要控制的电机。
停止
我已在前面提到使用上、下箭头(或正、反箭头)来控制方向。图4-5所示的另一个选项为停止选项。如果选择了停止选项,一定要选中你想要停止的电机端口的复选框。

图4-5  移动模块配置面板中选择停止选项以停止所选择的电机

记住,停止选项在程序中不是永久有效的。它只是简单地停止目前正在控制的电机。如果下一个模块还是一个移动模块,并启动电机B转动,电机B还是会旋转的。停止动作不会覆盖后面程序中的其它移动模块。
转向
下一个讨论的项目是转向。图4-6显示了转向控制,如果你选择了向前或向后的方向,并选中了两个电机端口就会出现转向控制。

图4-6  移动模块配置面板中的转向控制


注意:如果你在配置面板的端口部分选择了所有三个电机端口,转向控制就被关闭。


如果你知道如何使用转向控制,这对编程是非常有用的。根据其设置,你可以配置一个机器人转个小圈或大圈,或者原地旋转。
如果你为机器人的运动配置了两个电机(例如端口B和C),你可以通过将转向控制滑块完全拉到右边或左边,以使机器人原地打转(拖动转向控制的方向决定了你的机器人是按顺时针方向打转或还是按逆时针方向打转)。试试吧!向左侧拖动滑块到底,保存你的程序,并把它上传到你的机器人,运行程序。机器人作了哪个方向的旋转?改变设置,将滑块向右拖动到底,保存,上传,并再次运行该程序。机器人旋转方向是否改变了?
你还可以编程让机器人转个圆圈。圆圈的大小取决于你拖动转向控制滑块向左或向右的程度:滑块拖得越接近最右边或最左边,圆圈就越小。你必须调整转向控制的滑动块来得到你想要的圆圈大小。编程试一试。向左拖动转向滑块,但不要拖到底。上传程序,并运行它。机器人是以小圆圈转动还是大圆圈转动?再试一次,但这一次将转向滑块拖到另一个位置,上传和运行程序,机器人是以更小圆圈转动还是更大圆圈转动?
功率设置
配置面板上的下一个选项为功率部分(见图4-7)。功率设置范围是0 -100。你可以在功率设置文本框内输入一个值,或向右拖动滑动条(降低功率)或向左拖动滑动条(增加功率)。

图4-7  移动模块的功率设置范围为0-100

功率设置的大多数用途是用来增加或减少电机的转速。但有一个例外,就是提升或推动力量。例如,如果你的机器人是用来搬重物的,你可能需要将功率设置到一个较高的数值。但你会发现,电机转速不会象在没有阻力情况下转动那么快,但电机需要额外的功率来成功提起重物。在推动情况下也是一样,机器人需要比不推动物体时更高的功率。路面状况也会影响功率设置;爬一个小坡,需要更多的功率,并可能降低机器人的速度。相反,下坡时就不需要太多的功率。此外,表面是否光滑或粗糙,都会影响功率设定;例如,机器人在地毯上行走比木地板行走需要更多的功率。这些都是需要你不断实践的设置之一。更改功率设置,并调整转向滑块。看一下你的机器人能以多快或多慢的速度来转个圈。这使你更好地理解电源设置将如何影响你的机器人。
千万记住,电源设置会影响电池的寿命。速度来自于电池供电的消耗。测试机器人时,我建议移动模块设置功率值降至20,30或40以节省电池电力。如果在测试过程中发现电力不够,再逐步提升功率。但如果你想你的电池持续更长的时间,尽可能设置较低的功率。
持续时间设置
配置面板中的持续时间部分提供移动模块的大部分控制。在持续时间下拉菜单中有四个选项:不限时间,转动角度,旋转圈数及旋转秒数(见图4-8)。
在持续时间部分,通过点击下拉菜单并选择不限时间,可以让电机一直旋转。当持续时间设置为不限时间时,一个单一的移动模块将会让电机一直旋转,直到程序结束,或你让它停止。(还有其他的方法可以用来停止移动模块,如使用循环模块,我将在第11章中介绍循环模块。)
如果设置移动模块的持续时间为转动角度,你必须在文本框中输入电机转动的角度值。该角度值必须大于或等于0,不能为负数,但这种限制可以简单地修正。例如,如果你希望你的电机旋转-90度,你只需在文本框中输入90,并改变移动模块的方向设定(如果原来设置为前进,只需改变它为后退)。如果你熟悉其它编程环境的话,这一点可能是不同的,你可能学过可以用负数来表示逆时针方向旋转电机。不要担心,你会习惯在配置面板中简单改变电机旋转方向的NXT-G方法。多多练习这个方向,它会变得有意义。请记住,你的机器人只能旋转正角度,但你必须通过前进或后退方向按钮来告诉它是顺时针旋转还是逆时针旋转。

图4-8  移动模块中的持续时间部分有四个选项

如果持续时间设置为旋转圈数,圈数要求同上述规则。你不能输入一个负值圈数,但0及任何大于0的数是可以接受的。为了使电机旋转负圈数,只需改变旋转方向的设定(正向或反向)。对圈数你还可以输入分数或小数值。例如,你可以给一个电机设置转动2.35圈或50.9圈。
你也许会奇怪,为什么你会想要设置一个电机旋转2.35圈。好的,我将在本书的附录中介绍如何用移动模块编写移动特定距离时再作介绍。现在,只需记住,你的机器人有能力精确移动非常小的距离及非常大的距离,这一切取决于你要精确计算出要让机器人旋转的角度数或者圈数的能力(如果你不能等待的话,直接跳到附录)。
持续时间部分的最后一个选项是旋转秒数。当你选择这个选项后,你必须为移动模块的一个电机(或几个电机)指定旋转的秒数。很明显,你不可以设置负值(例如,-5秒)。只需键入电机旋转的秒数就可以了。同旋转圈数一样,你也可以输入小数时间,如3.5秒。
刹车和滑行
现在,让我们看一下图4-9,它显示了移动模块中需要配置的最后一个选项——下一个动作。该选项有两种选择:刹车停止和滑行停止。如果你选择了刹车停止选项,所有连接到端口并进行配置过的电机,将在设置的持续时间(例如,10秒)到达时快速停止。如果你需要你的机器人快速、准确地停在一个特定的点,刹车停止是非常有用的。然而,需要记住的是,这需要消耗电能。

图4-9  你可以设置电机刹车停止或者滑行停止
但是,如果你不关心你的机器人准确停止的位置时该怎么办呢?可以选择滑行停止选项。如果选择此选项,所有连接到端口并进行设置过的电机,将停止接受能量,但机器人可能还会移动一些距离,这就是为什么称它为滑行停止。——你的机器人将会滑行一小会儿。你必须通过一些实验来理解!因此,让我们设计一些伪代码:SPOT,以75%的功率向前旋转10圈,然后刹车停止。
我为SPOT配置的移动模块如图4-10所示。请注意,我已经设置了持续时间为10圈和功率为75,并已经选择了刹车停止选项。SPOT使用了B和C端口的电机,我希望它直线行驶,所以没有设置转向控制。

图4-10  将SPOT刹车停止的伪代码转化为NXT-G程序

现在,上传并运行此程序,SPOT迅速向前移动10圈(约6英尺),然后快速停止。
让我们做另外一个试验:SPOT,以100的功率向后旋转720度,然后滑行停止。
这次,我想让他向后移动,并使连接到端口B和C的电机旋转720度。我想让他快速移动,所以我设置电源为100。我不需要他停在一个特定的点,所以我让他滑行停止。图4-11为伪代码的模块程序。

图4-11  SPOT滑行停止的新程序

我上传并运行程序后,我观察到SPOT比原来更快的速度向后移动720度(约15英寸)。但是这一次,他并没有马上停止,而是继续往前滑行几英寸,因为我在程序中就是让他滑行停止。
现在,轮到你了。使用你在本章学到的内容,为你的机器人编写不同的程序。
当你完成试验后,我为你设计了另一个测试,让你的机器人以50的功率向前旋转10圈,然后刹车停止。在地板上贴上一张胶带,表示你的机器人的起始位置。运行程序,并在其到达的终点位置也贴上胶带。
接下来,运行相同的程序,但改变刹车停止为滑行停止。这次他超过了原来的停止位置有多远?
最后,降低一点功率设置,并再次运行程序(滑行停止)。这次离原来的停止位置有多远?
不断降低功率设置并运行程序,直到机器人停在原来的停止位置。
为什么我让你这样做呢?回想一下,我曾告诉你,制动停止消耗电能。这个测试告诉你,你可以通过降低功率设置及选择滑行停止来节省电池能量。像这样的运行测试,将帮助你弄清楚如何最佳地编写你的机器人程序,以节省电池能量及正确执行程序要求的动作!
练习
在结束本章之前,我有几个练习给你,以使你积累一些使用移动模块以及连同前面已经学习的模块(等待模块和显示模块)的经验。尽量自己完成程序,如果需要帮助,我将在本章末尾给出两个可能的解决方案。
练习4-1 画一个圆
编程让你的机器人使用持续时间中的圈数选项以转圈方式(向左或向右)向前滚动。尝试让机器人在达到了其起点时停止,当机器人停止后,在LCD屏幕上显示“我回来了!”10秒钟,然后停止。
练习4-2 画一个“S”
编程让你的机器人以S形向前滚动,先让它逆时针转动,然后顺时针转动。S曲线可以按你喜好可长可短。
下一步内容?
这就是移动模块。多加练习移动模块,直到你熟练使用它。然后,继续到第5章,这章中将介绍录制/播放模块。
练习解决方案
以下是两个可能的练习解决方案。请记住,我的解决方案与你的方案可能会有所不同。最终结果是重要的。如果你的程序产生的是你想要的结果,那么你就成功了。
练习4-1
图4-12至4-14显示了程序以及程序中使用的三个模块的配置面板。请注意,移动模块中的转向控制条向右拉,但没有到底;当我上传程序到机器人,机器人按逆时针的方向转动。你需要尝试不同的旋转圈数,你拉动转向控制条向左或向右移动的距离会影响需要返回到起点的转数。等待模块配置面板和显示模块配置面板同样也有图显示。


图4-12 完整的程序和移动模块的配置面板


图4-13 显示模块的配置面板


图4-14 等待模块的配置面板

练习4-2
图4-15和4-16显示了程序以及程序中使用的两个模块的配置面板。请注意,第一个移动模块持续时间设置为3圈,转向控制条向右拖动。这将使机器人以逆时针方向向前滚动。电机转动3圈后,第二移动模块将转动控制条向左拖动,持续时间也设置为3圈,这将使机器人以顺时针方向向前滚动,完成一个S形的路径。


图4-15 完整的程序和第一个移动模块的配置面板


图4-16 第二个移动模块的配置面板
 
图4-1.JPG
图4-2.JPG
图4-3.JPG
图4-4.JPG
图4-5.JPG
图4-6.JPG
图4-7.JPG
图4-8.JPG
图4-9.JPG
图4-10.JPG
图4-11.JPG
图4-12.JPG
图4-13.JPG
图4-14.JPG
图4-15.JPG
图4-16.JPG
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-11-3 13:48:59 | 显示全部楼层
感谢楼主、
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-21 17:01 , Processed in 0.119690 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表