【问题标题】:How do I get immediate response between motors and sensors?如何在电机和传感器之间获得即时响应?
【发布时间】:2021-04-16 00:12:59
【问题描述】:

我是 pybricks 的新手,发现帮助回答我自己的查询的文档很少。我写了一个我认为很简单的程序,可以让我的机器人当场旋转,直到超声波传感器看到一些东西。然后它会向前推进。如果它被向后推并看到一条黑线,它应该尝试摆动并让开。

以下代码“有效”,但它对超声波和光传感器的响应显着延迟:

#!/usr/bin/env pybricks-micropython

from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor, ColorSensor, UltrasonicSensor
from pybricks.parameters import Port
from pybricks.tools import wait

ev3 = EV3Brick()
eyes = UltrasonicSensor(Port.S2)
left_motor = Motor(Port.B)
right_motor = Motor(Port.A)
right_light = ColorSensor(Port.S1)
left_light = ColorSensor(Port.S4)

while True:

    if right_light.reflection() < 50:
        ev3.speaker.say('black')
        left_motor.run(500)
        right_motor.run(-100)
        wait(2000)
        left_motor.run(500)
        right_motor.run(500)
        wait(1000)
    if eyes.distance() > 200:
        left_motor.run(500)
        right_motor.run(-500)
    else:
        left_motor.run(-500)
        right_motor.run(-500)

我可以在(有限的)documentation 中看到您显然可以更改电机设置,但我找不到如何执行此操作的方向(或者即使它有用)。任何帮助将不胜感激。

【问题讨论】:

    标签: micropython mindstorms ev3 pybricks-micropython


    【解决方案1】:

    ev3.speaker.say(text) 在进行时合成语音。这很有趣,但速度很慢。这在像您这样的控制回路中尤其明显。

    我建议改用ev3.speaker.beep()。您甚至可以根据反射值选择频率,这样您就可以“听到”传感器“看到”的内容。

    【讨论】:

    • 感谢您的回复。不过,它并没有阻止传感器和电机之间的滞后。我觉得电机需要加速到我给它的速度,然后在它响应之前从那个速度减速。这是一件事吗?有没有办法删除所有加速/减速并立即执行下一个命令?旧的 NXT 积木是这样工作的?!?
    【解决方案2】:

    所以问题是我使用“run”命令来移动电机。跑步似乎有加速和减速的成分。

    我使用“dc”而不是“运行”,电机现在会立即响应传感器数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多