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

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中文翻译2
NBC中文翻译2_学科竞赛_高中教育_教育专区。今日推荐 68份文档 新...科目三实际道路驾驶考试注意事项 驾考新题抢先版80份文档 家装材料选购攻略 ...
翻译NBC_tutorial
翻译NBC_tutorial_教学研究_教育专区。乐高机器人编程 NBC (版本 1.0,2007 年...AUTOPIPE Tutorial翻译1 53页 3下载券 GT-power中文手册(翻译中... 10页 免费...
翻译课件_图文
在该 NBC 新情景喜剧中,来自卑诗省,深受观众喜爱的 Fox 扮演 Mike Henry,一...小石潭记翻译精品课件 暂无评价 3页 ¥20.00 小石潭记翻译省一等奖课.....
普通学术英语教程(阅读)译文Unit 3_图文
普通学术英语教程(阅读)译文Unit 3_英语学习_外语学习_教育专区。Core Reading ...就 在最近,NBC 成为了第一家播出烈性酒广告的 网络电台。 祝你健康 among ...
NBC气保焊使用说明书
(图 3)输出特性 操作使用说明 1. 焊机前面板 7 前面板以 NBC-500 为例。如图所示: (图 4)焊机前面板 1. 1 电流显示表 焊接时,显示实际焊接电流;不焊时...
新东方50篇翻译
新东方50篇翻译新东方50篇翻译隐藏>> >01 音乐的语言...在那些年头中,电视绝大部分一直由 ABC、NBC、CBS ...导致海洋的盐度变化的基本过程有三个,其中之一是...
翻译
“与此相对,NBC 电视台播出 的电视剧‘欢呼’的最后一集被四千两百万人观看...翻译件 暂无评价 2页 3下载券 什么是好的翻译 暂无评价 43页 3下载券 翻译...
英译汉原文
"The final episode of NBC's 'Cheers,' by contrast, was seen by 42 million...英译汉 3页 免费 英译汉 24页 2下载券 800个有趣句子帮你记忆7... 8...
术语翻译
NBC NCO NCOIC NSN NTA OIC ONC OR OSHA OSI PDC PMEL ppm RAL RAPCON ...(王翦同学翻译)请各位指正 A-3 Operations Directorate (COMAFFOR) 空军作战部...
Unit 8 Three Cups of Tea
——NBC 资 深主播 “对很少得知中亚生活的人们来说,这是扣人心弦的第一手...三杯茶,就是巴尔蒂人的交友方式,烹煮这三 杯茶的,是人与人之间的信任,是人与...
更多相关标签: