乐高NXT Brick使用NBC

6

我是NBC编程的新手,我正在尝试编程我的乐高NXT砖块来搜索和跟随我在地板上放置的一条黑色电子胶带(我将光感应器放在前方并指向地面)。目前为止,灯亮了,但机器人只是继续走过胶带而没有意识到它。我还设置了当机器人撞到墙壁时停下来并转身的功能,这个也正常工作。唯一不正常的是当光线经过黑胶带时没有注意到并跟随它。请问有谁可以看一下我的代码,告诉我哪里出错了吗?

                                          dseg segment
  Switch sword 0
  Volume sword 0
  Level sword 0
  Distance sword 0
dseg ends

thread main
  SetSensorTouch(IN_1)    // touch sensor connected to IN_1
  SetSensorSound(IN_2)    // sound sensor connected to IN_2
  SetSensorLight(IN_3)    // Light Sensor connected to input 3
  SetSensorUltrasonic(IN_4) // Ultrasonic Sensor connected to input 4
  OnFwd(OUT_BC,80)     // move forward

CheckSensor:

  ReadSensor(IN_1,Switch)       // reads current value of sensor (0/1)
  brtst EQ, CheckSensor, Switch // branch to CheckSensor if Switch = 0
                              // i.e., exit the loop when Switch = 1


  OnRev(OUT_BC,40)      // move backward
  wait 500
  OnFwd(OUT_B,20)       // turn
  wait 500

  jmp CheckSound

CheckSound:
  ReadSensor(IN_2, Volume)
  brcmp GT, ExitCheck, Volume, 60

  jmp CheckSound

 ExitCheck:

 OnFwd(OUT_BC,60)

  jmp CheckLight

  CheckLight:
  ReadSensor(IN_3,Level)
  brcmp LT, CheckLight, Level, 60

  ReadSensorUS(IN_4,Distance)
  brcmp LT, EndPoint, Distance, 30

  OnFwd(OUT_C, 10)

  FindPath:
  ReadSensor(IN_3,Level)
  brcmp GTEQ, FindPath, Level, 60

  OnFwd(OUT_BC, 60)

  jmp CheckLight

  EndPoint:

  Off(OUT_BC)

  wait 1500



endt

enter image description here


2
你能否在代码中删除不必要的声音调用(以简化理解)?此外,提供LDD或至少机器人照片将有助于了解您的传感器位置和如何驱动车轮。 - Sergey N Lukin
1
编辑了帖子,加入了机器人的图片,并删除了代码中的声音部分。 - Bryan
如果我需要做任何事情来让你更容易帮助我,请告诉我。真的很感激你的帮助! - Bryan
2个回答

3

如果这个NXT跟我用的是一样的,那么你很快就会遇到问题。这个套件里的光传感器太差了,你必须摆弄它认为的“开启”状态,直到它真的能够捕捉到光线。我希望我能给你一个更好的答案,但我已经用这些东西4年了,从来没有按照我想要的方式工作过。我使用了随套件附带的可视化软件,并且它有一个选项可以设置需要多少才被触发,尝试寻找类似的东西。


如果灯亮了,我应该期望它能识别黑色胶带吗?还是这并不一定是这样的情况? - Bryan
1
@Bryan 并非如此。微调机器人定义的“黑色”和“非黑色”可能会非常棘手。 - Andrew Gies
我进行了一些测试,并确认光线传感器确实可以检测到黑色电子胶带,只是我的代码没有正常工作。有谁能帮我解决代码问题吗? - Bryan

0

如果您正在使用NXT-G,有许多方法可以使您的代码对您的黑色磁带做出反应。

最简单的方法(但也许不适合您的需求)是使用等待块等待光线读数低于某个值(当它检测到黑暗时),同时车轮“无限”旋转。您可以在底部的详细信息窗格中指定该值。

或者,您可以使用黄色传感器块获取光线传感器的读数,并使用黄色数据线将该数字放入比较块中。然后,比较块将通过其真/假输出数据线检查亮度是否足够暗。

使用电气胶带的提示:它很闪亮!因此,可以通过取消选中框中的红灯来关闭红灯,否则它将反射光线,机器人将看不到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接