如何在电机和传感器之间获得即时响应?

How do I get immediate response between motors and sensors?

我是 pybricks 的新手,发现很少的文档可以帮助回答我自己的查询。我已经编写了我认为是一个简单的程序来原地旋转我的机器人,直到 UltrasonicSensor 检测到一些东西。然后它将向前推进。如果它被向后推并看到一条黑线,它应该尝试摆开。

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

#!/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 中看到您显然可以更改电机设置,但我找不到如何执行此操作的方向(或者即使它有用)。任何帮助将不胜感激。

ev3.speaker.say(text) 合成语音。这很好玩,但是速度很慢。这在像您这样的控制循环中尤为明显。

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

所以问题是我使用了“run”命令来移动电机。 运行 似乎有加速和减速分量。

我用“dc”代替了“运行”,电机现在立即响应传感器数据。