ev3dev - использование ультразвукового датчика с питоном
Я довольно новичок в программировании и робототехнике и борюсь со следующим. Я использую кирпич 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