我对编程和机器人技术相当陌生,并且在以下方面苦苦挣扎。我正在使用 Lego Mindstorms EV3 积木并设置 ev3dev2 环境。我想以这种方式对机器人进行编程,使其不断地与超声波传感器保持距离,并在它低于某个值时停止。我的第一次尝试是这样的:
from ev3dev2.auto import *
m_right = LargeMotor(OUTPUT_A)
m_left = LargeMotor(OUTPUT_D)
us = UltrasonicSensor(INPUT_4)
us.MODE_US_DIST_CM = 'US_DIST_CM'
def move_timed():
m_right.run_timed(time_sp=3000, speed_sp=400)
m_left.run_timed(time_sp=3000, speed_sp=400)
m_right.wait_while('running')
m_left.wait_while('running')
def move_stop():
m_right.stop()
m_left.stop()
def start_moving():
dist=us.value()/10
while dist < 20:
move_timed()
else:
move_stop()
start_moving()
当这些函数被称为 us.value() 时,只测量了一次距离,而不是连续测量。在 ev3dev-lib 中还有属性 UltrasonicSensor.distance_centimeters,但我无法获得它的值。尽管我尝试获取这些值的尝试失败了。当我将其更改为:
def start_moving():
dist=us.distance_centimeters
while dist < 20:
move_timed()
else:
move_stop()
我总是得到“一个或多个参数超出范围或无效”。感谢任何想法如何持续获得价值!
ev3dev 版本:4.14.96-ev3dev-2.3.2-ev3
ev3dev-lang-python 版本:python3-ev3dev 1.2.0