All About Free » 原QQ空间文章 / 技术存档 » 简单的机器人操控。

简单的机器人操控。 | 612 Views

前几天收到了谢大发来的关于入学第一周的安排,很明显我将miss掉所有的节目,因为航班的原因。
当然大学那边我也已经联系好,我将在我抵达后再去报道。
不过,收到了一份我比较感兴趣的资料,关于第一周的一个机器人比赛的准备文档。

这个就是所谓的机器人。

从文档中我能了解到,这个机器人名叫Lego Mindstorm NXT robot,机器人通过蓝牙技术与计算机进行交互。
除此之外,机器人控制程序采用语言编写,这点让我很大吃一惊,我可以说是从来没有接触过的。

不过看了文档中的介绍,还是对机器人程序编写有了一定的认识。

控制机器人行走的为两个马达,motor B与motor C,左边为B,右边为C
控制速度与方向的程序代码如下
Motor.B.setSpeed(50);
Motor.C.setSpeed(50);
Motor.B.forward();
Motor.C.forward();
此段代码是让机器人以半速前进。
如此类推,机器人还有backward和stop的子程序
至于转向,则可以设置两个马达不同的速度以及不同的运行模式来进行转向。
例如可以
Motor.B.setSpeed(50);
Motor.B.forward();
Motor.C.stop();
则是让机器人向C马达方向进行转向。

除此之外,机器人还有传感器来感应自己与物体的距离。
传感器分为distanceSensor,leftDistanceSensor,rightDistanceSensor,touchSensor,ultrasonic sensor
这是文档中介绍过的传感器
对于distanceSensor,在程序中有一个已存在的子程序getDistance,可以直接调用
distanceSensor.getDistance()返回一个最近的物体与机器人的距离,cm为单位,整数型。
通过这个子程序,我们可以很好的控制机器人的速度,因为是比赛,所以需要机器人达到最优,所以可以通过判定语句来使控制机器人的速度和运行状况
例如
int dist = distanceSensor.getDistance();
if (dist <10){
Motor.B.stop();
Motor.C.stop();
}
如此一来,可以让机器人在距离一个物件小于10cm时停下
当然,程序中还有leftDistanceSensor,rightDistanceSensor,通过这两个子程序,我们可以让机器人做到智能转向。
int leftdist = leftDistanceSensor.getDistance();
int rightdist = rightDistanceSensor.getDistance();
while (leftdist<=10){
Motor.C.setSpeed(10);
Motor.B.setSpeed(50);
Motor.B.forward();
Motor.C.forward();
int leftdist = leftDistanceSensor.getDistance();}
除此之外我们还可以再编写一个子程序NormalForward()包含机器人正常速度前进的代码
然后在控制自动转向完毕后调用,机器人就会自动前进了。

对于touchSensor,包含一个isPressed的子程序,返回值为布尔型。
这个传感器位于机器人前方,可以感触是否接触到物件,如果是,则返回true,如果假则返回false
调用方式很简单
boolean touch = touchSensor.isPressed()
文档中要求说如果机器人传感器触碰到什么东西,则后退
那么所应该的代码即
boolean touch = touchSensor.isPressed()
if (touch = true){
motor.B.setSpeed(50);
motor.C.setSpeed(50);
motor.B.backward;
motor.C.backward;
}

机器人包含了ultrasonic sensor来精确测量机器人与最近的物体的距离,但是传感器可能会受到周围噪音的影响,所以如何处理这些从传感器中所接收到的噪音数据呢?
我个人感觉,其他的噪声与超声有着不同的频率,超声波的频率至少大于20000HZ。
计算机能发出10-60000HZ的声波,我们可以定义一个特殊的频率来发射,即
int soundFrequency = 30000;
然后通过程序分析所采集到的声波的频率,只有获取到特定的频率的声波才进行分析,这样就能解决其他噪音的干扰了。
至于如何通过程序来解决,虽然简单的if判定可以解决,但是我不知道所需要的子程序和具体方式,代码只有搁置了。

说实话蛮想参加那个活动,毕竟是开学,能有个展示自己的地方,不过也罢,因为有人说,今后的机会还会有很多的。 Because she is important in my heart.
虽然没参赛,但我已经学会了不少,嘿嘿。

P.S.文中程序代码部分为自己原创,部分为文档中附带。或许部分程序会有错误,如果您发现,请指出,谢谢。

延展阅读

RSS 2.0 | leave a response | trackback

9 Responses

  1. 九 16th, 2008 / 01:01 唯ωǒ Says:

    你这不纯翻译嘛

    [回复]

  2. 九 17th, 2008 / 21:50 Tenth Sky Says:

    不是吧!一开学就玩那么好玩的玩具,我也想去学计算机了。

    [回复]

  3. 九 17th, 2008 / 21:57 oldoilman Says:

    what a topic to take part in it!what a pity to be late for it!

    [回复]

  4. 九 17th, 2008 / 22:59 kmmpjy Says:

    我代表航班 衷心地向你说声对不起 e134

    [回复]

  5. 九 18th, 2008 / 02:30 ぜ洋咩咩ヅ Says:

    虽然后面的我看不懂…不过你懂就够了…

    [回复]

  6. 九 21st, 2008 / 16:21 Wait for 梦想 Says:

    机器人应该可以把一个爱空想的人打成不空想吧!别郁闷~

    [回复]

  7. 十 5th, 2008 / 22:48 ①臉ル孧稚氣 Says:

    等我出名了,一定要给你颁个奖。这是我有史以来看过最难懂相当理解不了的日志。IP有限IQ也有限

    [回复]

  8. 十 25th, 2008 / 11:50 猫伤柒图 Says:

    你的口头禅。除此之外。发现俺看不懂

    [回复]

  9. 十二 8th, 2008 / 07:13 陈坚 Says:

    一不小心看懂了….

    [回复]

留下评论