欢迎来到天天文库
浏览记录
ID:36721534
大小:283.78 KB
页数:17页
时间:2019-05-14
《LEGO-NXC-编程快速入门》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Version1.0重庆大坪刘刚2008年7月图片来自LEGO官方网站项目A动起来,机器人在本项目中,我将借助我们的第一个程序,向大家演示机器人编程的基本思路。程序非常的简单,控制机器人向前移动8秒钟,然后后退8移钟,最后停下来。在开始编程之前,我们首先要构造好一个LegoMindstormsNXT机器人。为了使项目容易化以便进行演示,我们构造最简单的三轮机器人,命名为MyRobot。它的动力系统由三个马达来构成,将右边的发动机连接到智能块的端口A,将左边的发动机连接到端口C,第三个马达连接到智能块的端
2、口B。另外一个重要的准备工作就是,请确保已经正确地安装好MindstormsNXTFantom驱动程序。我们使用BricxCCIDE来对机器人进行编程,打开它,程序提示需要定位机器人。启动机器人并点击OK,BricxCC将自动搜索并找到机器人,显示用户界面如下所示:用户操作界面看起来与标准的文本编辑器非常相似。除了有常用的菜单和功能按钮外,还有一些进行机器人编程的特设功能菜单,比如将程序进行编译并下载给机器人的菜单,或者从机器人中获取信息的菜单等。现在我们开始编写一个新程序,点击NewFile(新文件)
3、按钮创建一个空白的新窗口。然后输入如下NXC程序代码:Taskmain(){OnFwd(OUT_A,60);//启动马达A,速度为60%。//马达参数的值由0到100,其中100为最快,0为停留在原位OnFwd(OUT_C,60);//启动马达C,机器人开始向前移动Wait(8000);//等待8秒钟。注意,是持续上面的动作的时间,而不是“停下来等待”OnRev(OUT_AC,60);//后退Wait(8000);//等待8秒钟Off(OUT_AC);//关闭马达}NXC全称NoteXactlyC,它采
4、用了与C语言非常类似的语法结构,这就意味着稍有编程知识的人会很容易地学习NXC。同时,与通用的编程语言明显区别的是,因为NXT编译器的原故,NXC受到了许多方面的限制(所以它才叫NXC,即“不完全C”语言嘛)。在NXC中,程序由task(任务)来组成,也就是说,每个程序可以有一个或多个任务,但至少必须包括一个任务,那就是main任务。我们的第一个程序非常简单,只有一个任务,那就是main任务。一个任务由若干命令组成,我们称之为语句,它位于所属任务的括号间;每条语句以分号表示结束。编写好程序后,开始进行编
5、译,也就是说将NXC代码转换成二进制代码以便机器人能够理解和执行。然后使用USB电缆将程序传送给机器人,也就是所谓的下载/downloading。编译并下载后,就可以运用程序了。找到MyFilesOnBrick菜单下的Softwarefiles,然后点击run/运行。项目B前进,转弯我们将机器人的运动编程更进一步,下面的程序让机器人前进一段距离,然后利用停止/倒退其中一个马达的方法,使机器人右转90度。Taskmain(){OnFwd(OUT_AC,60);Wait(900);OnRev(OUT_C,6
6、0);Wait(320);Off(OUT_AC);}取决于机器人所行走表面的材质,我们需要为Wait()函数尝试不同的数据,以便确保机器人能够正确完成90度的转弯。为了使程序更具理解性,我们这样修改一下程序的设计。//头两行定义了两个常量,这样不仅可以使程序更具可读性,而且还便于进行修改。#defineMOVE_TIME900/预设移动的时间#defineTURN_TIME320/预设转弯的时间Taskmain(){OnFwd(OUT_AC,60);Wait(MOVE_TIME);OnRev(OUT_C
7、,60);Wait(TURN_TIME);Off(OUT_AC);}接下来,我们增加一点小小的难度,首先还是让机器人前进一段距离,然后随机地决定左转或右转。程序如下:#defineMOVE_TIME900#defineTURN_TIME320Taskmain(){While(true){OnFwd(OUT_AC,60);Wait(MOVE_TIME);If(Random()>=0){OnRev(OUT_C,60);}Else{OnRev(OUT_A,60);}Wait(TURN_TIME);}}备注:本
8、教程的内容是如何使用NXC语言对机器人进行编程,它需要读者具备一些最基础的编程知识(比如,知道什么是变量、表达式、程序的常见流程控制等等,针对这些内容的讲解将不会出现在本教程中)。项目C马达控制高级篇当我们使用Off()功能函数时,马达会立即停下来,刹车并停在原来的位置上。如果想要机器人平缓地停下来而不使用制动闸,就需要使用Float()功能函数或Coast()功能函数。OnFwdReg(’ports’,‘speed’,‘regmode’)
此文档下载收益归作者所有