我正在使用VS Code用python编程EV3,但无法使红外传感器正常工作

问题描述

我正在使用的代码是:

#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor,MoveSteering,OUTPUT_B,OUTPUT_C,SpeedDPS
from ev3dev2.sensor.lego import InfraredSensor
from sys import stderr
from time import sleep

motorB = LargeMotor(OUTPUT_B)
steer_pair = MoveSteering(OUTPUT_B,OUTPUT_C)
ir = InfraredSensor()

wf = 1
motorB.position = 0
steer_pair.on(steering=0,speed=SpeedDPS(265))
while motorB.position*0.612 < 640:
    if ir.proximity * 0.7 < 23:
        motorB.position = 0
    print(motorB.position*0.612,ir.proximity * 0.7,file = stderr)
    sleep(0.1)
     
steer = 28
rots = -1
steer_pair.on_for_rotations(steering=0,speed=25,rotations=0.5*wf)
steer_pair.on_for_rotations(steering=steer,speed=15,rotations=rots*wf)
steer_pair.on_for_rotations(steering=-steer,rotations=rots*wf)
steer_pair.on_for_rotations(steering=0,rotations=0.7*wf)

运行代码时,出现以下错误

Traceback (most recent call last):
  File "/home/robot/part3/self_park_ir.py",line 9,in <module>
    ir = InfraredSensor()
  File "/usr/lib/python3/dist-packages/ev3dev2/sensor/lego.py",line 838,in __init__
    super(InfraredSensor,self).__init__(address,name_pattern,name_exact,driver_name='lego-ev3-ir',**kwargs)
  File "/usr/lib/python3/dist-packages/ev3dev2/sensor/__init__.py",line 78,in __init__
    super(Sensor,self).__init__(self.SYstem_CLASS_NAME,**kwargs)
  File "/usr/lib/python3/dist-packages/ev3dev2/__init__.py",line 223,in __init__
    chain_exception(DeviceNotFound("%s is not connected." % self),None)
  File "/usr/lib/python3/dist-packages/ev3dev2/__init__.py",line 54,in chain_exception
    raise exception from cause
ev3dev2.DeviceNotFound: InfraredSensor is not connected.

我尝试使用不同的端口和电线,因为这是我遇到的另一个问题的解决方法,但是这次不起作用。有人知道如何解决这个问题吗?

解决方法


我认为您应该为红外传感器分配一个输入端口,如下所示:

从ev3dev2.sensor导入INPUT 1
ir = InfraredSensor(INPUT 1)

,

此外,还有一些提高准确性的硬件技巧。

不要“热插拔”任何传感器

  • 一旦设备开启,您就可以在此处插入它。

确保导入正确的模块

  • 确保您导入了 shebang 行和正确的模块

确保您的 EV3DEV 代码与新的 EV3DEV 2 代码保持同步,并且您已将正确的操作系统映像刷入 microSD 卡。

  • 否则,代码将无法顺利运行