找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 10371|回复: 4

LeJOS NXJ入门指南 - 控制马达(上)

  [复制链接]
发表于 2010-9-26 12:24:17 | 显示全部楼层 |阅读模式
本帖最后由 Programus 于 2010-9-26 12:26 编辑

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://programus.blogbus.com/logs/51151014.html


本文含有大量代码格式以及高亮,论坛无法支持,为获得更好的视觉效果,推荐点击上面链接查看BLOG原文。(主要是我懒得在此再调一次……)



Motor类介绍
Motor类是对NXT马达的一个逻辑抽象。众所周知,一个马达必须链接到NXT的三个输出端口上的一个才能够生效。因此,Motor类为每一个端口提供了一个已经实现好了的实例。他们分别是:Motor.A,Motor.B和Motor.C。Motor类提供了控制马达的各种方法,同时也提供了检查马达状态和参数的方法。
本指南将围绕5个例子程序展开。你可以通过试着自己书写这些例子来理解如何控制NXT的马达。这些例子都非常简单,哪怕你没有太多的Java经验,也可以成功地书写它们。在最后,还有一个关于其他马达方法的讨论,这些方法虽然没有在我们的例子程序中用到,但或许对你要做的机器人来说却是有用的。


程序一 - 基本运动控制
本程序中使用了最基本的马达运动控制方法。

程序中用到的方法



方法名


说明


Motor


forward()


启动马达,并向前转动



backward()


启动马达,并向后转动



changeDirection()


逆转马达转动方向



stop()


立即停止马达


Button


waitForPress()


等待任意键被按下


LCD


drawString(String str, int x, int y)


在屏幕上绘制字符串


程序将会以如下流程运行:
  • 启动马达A,并向前转动
  • 在屏幕第一行显示 FORWARD
  • 等待任意键被按下
  • 马达A反向转动
  • 在屏幕下一行显示 BACKWARD
  • 等待任意键被按下
  • 向前转动马达A
  • 在屏幕下一行显示 FORWARD
  • 等待任意键被按下
  • 停止马达
以上表中的Motor方法,每个只调用了一次。


程序二 - 使用转速计
NXT马达里面有一个内置的转速计在不断地跟踪马达当前转过的角度(单位为度)。本程序的目的是使用转速计来看一下马达会停得多快。

程序中用到的方法



方法名


说明


Motor


flt()


float的缩写,关闭马达供电,但不启动刹车



getTachoCount()


返回马达角度,单位:度



resetTachocount()


重置马达旋转角度为0



setSpeed(int speed)


设置马达旋转速度。
参数speed – 每秒转过的角度值。
可以被精确维持的最大速度大约是电池电压值的110倍。



int getRotationSpeed()


返回马达的实际速度,单位:度/秒


LCD


drawInt()


在屏幕上绘制整数


程序将会以如下流程运行:
  • 启动并正向转动马达A
  • 等待马达转角达到360度
  • 停止马达
  • 等待马达实际停止
  • 在屏幕上显示马达停止时实际转过的角度数
  • 等待按键,以便让你有足够的时间读取屏幕
  • 设置马达转速为720度/秒(默认转速为360度/秒)
  • 重设马达转角归零
  • 重复步骤1-6。
注:为了防止重复书写相同的代码,你可以写一个方法来执行1-6步,然后调用。
当你完成上面程序之后,试着将stop()方法替换为flt()方法再试一次。(flt是float的缩写,因为float是Java保留字,无法使用,所以使用flt来定义方法名。)flt()方法将停止马达供电,但允许其随着惯性继续转动。
你会看到,即便使用stop()方法进行刹车处理,马达也不会立即停止,而是因为惯性稍微转过一点点。


程序三 - 精确旋转控制
Motor类里面包含一个校准器(regulator)线程,始终在运行。校准器有两个任务,其中之一是让马达在指定的角度处停止。本程序将测试rotate()方法的精确度。

程序中用到的方法



方法名


说明


Motor


rotate(angle)


转过由angle参数指定的角度。参数单位为角度。



rotateTo(angle)


旋转至由angle参数指定的角度。参数单位为角度。



rotateTo(angle, true)


旋转至由angle参数指定的角度
并重置马达旋转角度为0


程序将会以如下流程运行:
  • 显示Rotation字样,等待按键
  • 按任意键后,旋转马达两圈后停止
  • 在屏幕上显示从马达中读取的角度
  • 将马达转回初始位置
  • 在屏幕上第二行显示从马达中读取的角度
  • 等待按键,以便让你有足够的时间读取屏幕
  • 按任意键后,清屏
  • 设置马达转速为800
  • 重复步骤1-7。
注:为了防止重复书写相同的代码,你可以写一个方法来执行1-7步,然后调用。
译注:原文部分数字与例子程序不符,翻译时进行了修正。
你将观察到由于校准器的工作,通常实际转角与设定转角的误差在一度以内。校准器会计算马达刹车后会由于惯性产生的转角,并据此提前发出刹车指令。之后,它还会进行微调,以保证马达的实际停止位置尽可能接近设定值。

后续请看此帖:http://www.cmnxt.com/thread-3636-1-1.html

评分

参与人数 1乐币 +20 收起 理由
晓舟 + 20 很棒

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2010-10-21 22:17:27 | 显示全部楼层
还好能看懂,学习一下。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2011-12-4 23:43:24 | 显示全部楼层
本帖最后由 lutili45 于 2011-12-4 23:43 编辑

我想请问一下LCD.drawInt括号里面那几个数字都代表什么?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-3-5 08:52:47 | 显示全部楼层
ddddd
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-3-6 14:42:47 | 显示全部楼层
lutili45 发表于 2011-12-4 23:43
我想请问一下LCD.drawInt括号里面那几个数字都代表什么?

可以到这里查看文档:
http://lejos.sourceforge.net/nxt ... .html#drawInt%28int,%20int,%20int%29
感觉写的还是蛮清楚的。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 19:37 , Processed in 0.087391 second(s), 20 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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