VS下Python代码无法识别pybricks模块及EV3运行权限问题求助
问题与解决方法
问题描述
我用Visual Studio做Python开发,目标是让EV3识别颜色并执行对应动作,自认代码逻辑可行,但遇到两个运行问题:
- 本地终端运行代码时触发Traceback错误,提示
ModuleNotFoundError: No module named 'pybricks'; - 代码上传到EV3运行时,输出提示
Starting program failed: Failed to execute child process "/home/robot/ColorSensor/main.py" (Permission denied),程序以错误码1退出。
已尝试重装Python、EV3扩展,多次重启Visual Studio,问题仍未解决。
原代码如下:
from pybricks.hubs import EV3Brick from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, InfraredSensor, UltrasonicSensor, GyroSensor) from pybricks.parameters import Port, Stop, Direction, Button, Color from pybricks.tools import wait, StopWatch, DataLog from pybricks.robotics import DriveBase from pybricks.media.ev3dev import SoundFile, ImageFile ev3 = EV3Brick() robot = DriveBase(left_motor, right_motor, wheel_diameter=55.5, axle_track=104) left_motor = Motor(Port.B) right_motor = Motor(Port.C) color_sensor = ColorSensor(Port.S1) POSSIBLE_COLORS = [Color.BLACK, Color.WHITE] color = color_sensor.color() if Color == Color.BLACK: robot.turn(180) ev3.speaker.beep() else: Color == Color.WHITE robot.turn(-180) ev3.speaker.beep()
问题1:本地终端找不到pybricks模块的解决
pybricks是专为LEGO EV3设计的库,只能在EV3设备上运行,本地Python环境没有这个库,所以本地终端运行肯定报错。不用在本地测试,直接通过VS的EV3扩展把代码上传到EV3设备上运行就行。
问题2:EV3上权限拒绝的解决
上传代码后,EV3系统没有执行该Python文件的权限,按以下步骤处理:
- 通过VS的EV3扩展连接到EV3的终端;
- 执行命令:
chmod +x /home/robot/ColorSensor/main.py; - 重新运行程序。
另外,部分版本的VS EV3扩展支持上传时自动添加可执行权限,也可以检查扩展设置开启该功能。
代码逻辑修正(必改,否则功能异常)
原代码有两处逻辑错误,会导致程序运行失败或功能不符:
- 变量顺序错误:
robot = DriveBase(...)写在left_motor和right_motor定义之前,会触发NameError,得把DriveBase的定义移到电机初始化之后; - 条件判断错误:
if Color == Color.BLACK是拿类本身和颜色常量比较,应该用你获取的color变量;else: Color == Color.WHITE是语法错误,else后不需要再判断,直接写执行代码。
修正后的代码:
from pybricks.hubs import EV3Brick from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor, InfraredSensor, UltrasonicSensor, GyroSensor) from pybricks.parameters import Port, Stop, Direction, Button, Color from pybricks.tools import wait, StopWatch, DataLog from pybricks.robotics import DriveBase from pybricks.media.ev3dev import SoundFile, ImageFile ev3 = EV3Brick() # 先初始化电机,再创建DriveBase left_motor = Motor(Port.B) right_motor = Motor(Port.C) robot = DriveBase(left_motor, right_motor, wheel_diameter=55.5, axle_track=104) color_sensor = ColorSensor(Port.S1) POSSIBLE_COLORS = [Color.BLACK, Color.WHITE] color = color_sensor.color() # 使用获取到的color变量做判断,修正else语法 if color == Color.BLACK: robot.turn(180) ev3.speaker.beep() else: robot.turn(-180) ev3.speaker.beep()
内容的提问来源于stack exchange,提问作者Adam Garcia
相关产品推荐
相关产品推荐

