当前位置:首页 >> 学科竞赛 >>

NBC中文翻译3


――――――――――――――――――――――――――――― 修改记录

2009/4/18 由 flexitime 增加翻译内容 完成原文 10 到 12 页的最初翻译。 2009/4/17 由 flexitime 增加翻译内容 完成原文 8 到 9 页的最初翻译。 2009/4/16 flexitime 创建本文档 完成原文 5 到 7 页的最初翻译。 ――

――――――――――――――――――――――――― Programming Lego Robots using NBC (Version 1.0, June 11, 2007) Requires NBC 1.0.1.b30 or greater

I. 写你的第一个程序 在这一章里面,我将会向你展示如何写出一个最简单程序,我们打算安排机器人向前移动 4 秒,然后向后移动 4 秒,最后停下来,没有其它令人瞩目的地方,但它会向你介绍编程的基 本概念, 同时它会向你展示这是多么的简单。 在我们写程序之前, 我们首先需要一个机器人。 搭建机器人 我们将使用“Tribot”机器人来贯穿整个教程,它的搭建指南在你的 NXT 套件当中。如果你 不熟悉 LEGO 的机器人。我建议你按照 Lego 的教程来制作它。同时使你开始知道 NxT 能 干些什么。你的机器人应该像这个样子 [P5 图片] (注意:你可能已经将感兴器及收集杆安装上去了,如果是你应该暂时先将它们移除掉。因 为当连接它们时会有一些的例子是不能正常工作的) 启动 Bricx Command Center 我们将使用 Bricx Command Center 来写程序,通过双击就可以启动它。 (我假设你已经安装 了 Bricx Command Center,如果没有,请从网页上下载并安装)程序会询问你,机器人在那 里,打开你的机器人,并点击 OK,程序会自动的找到机器人,现在你就会看到用户介面出 现在你的面前。 [P6 图片] 用户介面看起来像一个标准的文本编辑器, 有普通的菜单, 有打开, 保存, 打印等等的按钮。 这里也有一些特殊的菜单,如编译、下载程序到机器人和从机器人中收集信息。你现在可以 怱略这些。我们打算写一个新的程序,因此点击 New File 按钮来创建一个新的空窗口。

写程序 现在输入下面的程序: thread main OnFwd(OUT_B,100) OnFwd(OUT_C,100) wait 4000 OnRev(OUT_BC,100) wait 4000 Off(OUT_BC) exit endt 这些东西开始看起来有点复杂。 因此让我们一起来分析它。 NBC 的程序都是由线程 (threads) 来组成,我们的程序就含一个线程,名字叫做 main,每个一程序都必须含有一个叫 main 的 线程,它是由机器人来调用的,你会在第五章中学到更多有关线程的知识。一个线程是由一 堆的命令所组成的,通常也叫做语句(?),每个语句占用一行,因此一个线程(原文用 task, 估计是从 NXC 中抄过来的)看起来通常会像这样: thread main statement1 statement2 endt 让我们逐行来看程序 OnFwd(OUT_B,100) 这个语句是告诉机器人启动 B 输出口, 连接在标记为 B 输出口的电机会向前移动 (转动?) , 100 是指速度的百分比值,在这里它会以最大的速度移动。 OnFwd(OUT_C,100) 同样的语句,不过现在我们启动的是电机 C,经过这两条语句后,两个电机都将运行。而机 器人也会向前移动。 wait 4000 现在是时候让它停下来一会儿。 这个语句告诉我们会停 4 秒, 给出的参数是以毫秒为单位的。 (1/1000 秒) ,因此你能非常精确的告诉程序要等待的时间长度。在这 4 秒中,程序什么都 不干,而机器人将继续向前移动。 OnRev(OUT_BC,100) 机器人现在已经走得够远的了,因此我们告诉它往相反的方向走,这就是向后走。注意,我 们能够使用 OUT_BC 作为参数来同时设置两个电机。我们当然也能将前面两个语句通过这 种方式合并。我们也能使用 OnFwd(OUT_BC,-100).来实现。

wait 4000 再次等待 4 秒。 Off(OUT_BC) 最后,我们关闭两个电机。 exit 这个语句告诉 NXT 这个线程结束了,不过这个不是必须出现在线程结尾的,只是推荐这样 做。注意,它经常出现在线程的别的地方。 这就是整个程序,它会驱动两个电机向前 4 秒,然后向后 4 秒,最后关闭它。 你可能会注意到输入程序时的颜色, 它们自动出现, 编辑器通常会用颜色及样式高亮显示特 定的语法。 运行程序 一旦你写好了程序,程序就需要编译(这是将它改变成机器人能认识和执行的代码) ,和使 用 USB 或蓝牙发送到设备上(叫“downloading”程序) 。在做这些之前,你需要命名你的程 序,你保存它到你的硬盘上就行了。当你保存时,一定要保证文件的扩展名是“nbc” ,告诉 Bricx Command Center 这是一个 NBC 的程序。 [P8 图片 上]

保存完文件后, 你可以编译和简单的点击下载按钮下载它。 假设你在录入程序时没有犯任何 的错误,它就会正确地被编译和下载(如果你的程序中有错误,你会得到一些通知,看下面 的图)现在你能够运行程序,按这样做:在 NXT 中选择“Software Files” ,查找“1-simple” , 再使用橙色的键来运行它。另一种方法是,你可以通过 Bricx Command Center 来运行它, 在你的窗口中点击绿色的运行按钮 (看上面的图片) 。 机器人能按你预期工作吗?如果没有, 电缆可能连接得不正确。 程序中的错误 当你录入程序时,会有一些合理的情况使你犯下错误,编译器会注意到这些错语,并会在窗 体的下方报告这些错误,就是以下的图片所示。 [P8 图片 下] 它会自动选择第一个错误(我们打错了电机的名字) ,当有不止一个错误的时候,你可以点 击这些错误的信息去找到错误的地方,注意,第一个错误经常会引起其它地方的错误,因此 你最好只改正最前面的一些错误然后再编译一次。 ****通常也要注意的是语法高亮在很多情况下会帮助避免错语,例如在我们输入的最后一 句。Of 应该是 Off 才对,因为编辑器不认识这个命令,所以它没有高亮,因此你们可以在 你编译程序之前发现到它们, 这里还有一些错误是编译器不能找到的, 如果我们输入 OUT_B 的话,它是不会被发现的,因为那个电机是存在的(尽管我们没有在机器人中使用它) ,如 果你的机器个展现出非预期的动作时,这大概可能大概是你的程序中那个地方错了

改变速度: 可能你会发现,机器人的移动速度相当快,默认的情况下,机器人是以它最快的速度来移动 的, 如果要改变速度, 只要在 OnFwd 中使用不同的参数值就行了。 动力是一个介于 0 到 100 的数值,是一个最大动力的百分比值,这里是我们新版本中的程序,这个机器人移动速度会 较慢。 thread main OnFwd(OUT_BC,25) wait 4000 OnRev(OUT_BC,25) wait 4000 Off(OUT_BC) exit endt 在这个例子中,你可以看到速度的值以及等待时间的值都是重复的,如果你要修改它们,你 必须在好几处地方去修改它,而你很可能会漏掉一个。因此在 NBC 中(原文中有错) ,你 可以定义一个常量值,就像下面所示的程序: #define SPEED 25 #define MOVE_TIME 4000 thread main OnFwd(OUT_BC, SPEED) wait MOVE_TIME OnRev(OUT_BC, SPEED) wait MOVE_TIME Off(OUT_BC) exit endt 现在如果你需要改变速度,你只要修改一个地方即可。 增加注释 为了使你的程序更具可读性,最好是增加注释,只要你在行里输入//时,行剩下的地方就会 被怱略这样它就成为了注释。 如果是长的注释, 你可以把内容放在 /*和 */之中, 注释在 Bricx Command Center 中是会被高亮显示的,整个程序看起来会像下面的样子: /* Forward and reverse by Ross Crawford This program makes the robot go forward and backward */ #define SPEED 25 #define MOVE_TIME 4000 thread main

OnFwd(OUT_BC, SPEED) // Drive forward wait MOVE_TIME // Wait for 4 seconds OnRev(OUT_BC, SPEED) // Drive backward wait MOVE_TIME // Wait for 4 seconds Off(OUT_BC) // Stop moving exit // Exit endt

总结 在这章中你写了第一个NBC程序,使用Bricx Command Center。你现在应该必得如何输 入一个程序中,如何下载它到机器人并让机器人执行程序。 Bricx Command Center 还能做更多事情。要得得更详细的说明,你可以查阅相关的文档。 这个教程主要讨论语言NBC,也包括一些必要的Bricx Command Center的功能,以便于 你的使用。 你也学习了一些NBC重要方面的知识。 首先,你学习每一程序都有名为 main 的线程, 它总是被机器人所调用。你同时学习四个最重要的电机相关命令: OnFwd,OnRev 和 Off,和关于 wait 和 exit 的语句。最后,你学习关于如何使用常最来使得程序范围 内的变化更容易,也学习了使用注释也解析你的代码。 II. 使用变量 变量是所有编程语言的重要组成部份。 变量是存储器某一位置,能存储值在其中。我 们能在不同的地方使用这些值,同时我们也能改变它。 让我通过一个例子来说明如何 使用变量。 在不同的路线上移动 假定我们想要调整上面的程序成这样子:机器人不再以向前的速度返回。通过在返回的 路程中变小速度值就达到这样的效果。 但是我们如何去做呢?SPEED是一个常量,而常 量是不能被改变的。我们需要一个变量来代替它。变量能容易地在 NBC 程序中定义。 这里就是新的程序 #define MOVE_TIME 4000 #define SPEED 100 #define DECREMENT 25 dseg segment Speed byte dseg ends thread main set Speed SPEED OnFwd(OUT_BC, Speed) wait MOVE_TIME sub Speed, Speed, DECREMENT OnRev(OUT_BC, Speed) wait MOVE_TIME Off(OUT_BC)

exit endt 我们已经引入变量 Speed 到程序中。在你的程序中的所有的变量都必须在数据段里声 明。你可以按你所想设置多个的数据段,而且它们能在程序中的任何地方。所有在 NBC 中的变量有全局的作用范围-它们能任何线程中的任何代码访问到。 数据段以 segment 语句开始,而 ends 结束。 每一片段都必须被命名,在 segment和 ends中的语句的名字都必须一致。 那么,现在让我们来解释程序中的新的语句。 dseg segment 这语句指定一个名为“dseg”数据段的开头。 在我们的程序中,它是唯一的数据段同 时也仅仅包含一个变量。 Speed byte 这个语句声明 Speed 为 byte 类型。变量名称必须以字母开头,但可以包含数字和下 划线。 其它的字符将不能使用。 (同样适用于 常量,线程名等等) dseg ends 这个语句指定了“dseg”数据段的结尾 set Speed, SPEED 这语句把 SPEED (早前被定义的常量) 值赋给 Speed 变量。 注意,这也能 在声明变量时同时完成,只要把初始值放到变量类型的后面即可,例如: Speed byte SPEED. sub Speed, Speed, DECREMENT 从 Speed 变量所含的值中减去 DECREMENT,然后再将结果保存回 Speed 中。 当你运行这程序时,你的机器人应在指定的时间内以全速向前走,然后同样的时间以较 缓慢的速度的反向行走 我们除了可以在变量中减去一个值,同样我们能乘上,减去或除以(注意,除法的结果 是一个截断后最接近实际结果的整数)一个数值。 当然你也能把一个变量与另外的变量 相加,同时,也可以写出更加复杂的表达式。这里是一些例子: dseg segment aaa byte bbb byte ccc byte

dseg ends thread main set aaa, 10 // aaa is now equal to 10 mul bbb, 20, 5 // bbb is now equal to 100 mov ccc, bbb // ccc is now equal to 100 div ccc, ccc, aaa // ccc is now equal to 10 add ccc, ccc, 5 // ccc is now equal to 15 exit endt 现在让我们更细致地了解新的代码。 Set aaa, 10 我们之前已经看过这样的语句,但我只是想指出,set 的第二个参数只能是一个常量, 这是有别于之前所讲的 mov 语句。 mul bbb, 20, 5 这个语句将 20 乘上 5,然后将结果赋值到 bbb 变量中去,第二,第三个变量可以是常 量或者其它的变量。 mov ccc, bbb 这个语句将 bbb 的值赋给变量 ccc,与 set 不同,mov 的第二个参数可以是常量或者 变量 div ccc,ccc,aaa 这个语句将 ccc 除以 aaa,并将结果赋回给变量 ccc 中,注意这里只返回整数值。所有 的余数都被截断。 add ccc, ccc, 5 这个语句是在 ccc 中增加 5


相关文章:
NBC中文翻译1
NBC中文翻译1_学科竞赛_高中教育_教育专区。――― 修改记录 2009/4/17 由 flexitime 增加翻译内容 完成原文 8 到 9 页的最初翻译。 2009/4/16 flexit―...
翻译NBC_tutorial
翻译NBC_tutorial_教学研究_教育专区。乐高机器人编程 NBC (版本 1.0,2007 年...AUTOPIPE Tutorial翻译1 53页 3下载券 GT-power中文手册(翻译中... 10页 免费...
翻译课件
翻译课件_英语学习_外语学习_教育专区。英汉翻译入门...在该 NBC 新情景喜剧中,来自卑诗省,深受观众喜爱的...? 3. He liked to unwind with a cocktail ...
英语课文翻译
英语课文翻译_英语学习_外语学习_教育专区。研究生...英语历史真正的开始,要从公元 5 世纪时三个日耳曼...吉孚富凯罗 普咨询公司(GfkRoper)为 NBC 进行的...
全新版大学英语综合教程3课后习题修改句子和翻译题题目...
全新版大学英语综合教程3课后习题修改句子和翻译题题目及答案_英语学习_外语学习_...(feature) The NBC show’s opening shots feature the space shuttle ...
翻译
“与此相对,NBC 电视台播出 的电视剧‘欢呼’的最后一集被四千两百万人观看...翻译件 暂无评价 2页 3下载券 什么是好的翻译 暂无评价 43页 3下载券 翻译...
普通学术英语教程(阅读)译文Unit 3_图文
普通学术英语教程(阅读)译文Unit 3_英语学习_外语学习_教育专区。Core Reading ...就 在最近,NBC 成为了第一家播出烈性酒广告的 网络电台。 祝你健康 among ...
翻译新闻
all turned down Obama, NBC 4 New York reports....有消息人士透露称, 上个周末奥巴马曾试图前往纽约三...奥巴马总统在劳动节周末的日程,中文译文 基本采取直译...
口译资料汇总
(英文同传版+中文温家宝版+中英文档) 口译现场:09.3.13 温家宝答记者问(全程...与布什总统会晤现场翻译(附音频) 妮可基德曼“口译”面试 NBC 版本的 2008 北京...
外文资料及中文翻译
外文资料及中文翻译_英语学习_外语学习_教育专区。中文译文 从新型葡萄籽 IH636...这是通过分别单独使用花青素及与 NBC 一起使用使胆固醇和甘油 三酸酯的含量有所...
更多相关标签:
nb nbc3 f | 中英文在线翻译 | 中文翻译英文 | 网页翻译成中文 | 中文论文翻译 | 中文翻译 | pdf翻译成中文 | pdf英文翻译成中文 |