Webots中Mavic2Pro无人机代码报NameError错误求助
问题排查与解决方案
核心问题
报错NameError: name 'mavic2Pro' is not defined的原因是Python解释器找不到Mavic2Pro这个名称,大概率是以下两种情况:
- 你之前依赖的自定义
Mavic2Pro模块文件丢失或不在Python搜索路径中; - 代码未正确导入Webots对应的控制器类。
解决步骤
情况1:找回自定义模块
- 检查Webots项目目录,确认是否存在名为
Mavic2Pro.py的文件; - 如果存在,确保它和主脚本在同一文件夹下,或者将其所在路径添加到Python环境变量;
- 若文件丢失,需从备份中恢复该模块。
情况2:改用Webots原生API控制
如果没有自定义模块,直接使用Webots官方API编写控制逻辑,示例代码如下:
from controller import Robot from time import sleep # 初始化机器人实例 robot = Robot() timestep = int(robot.getBasicTimeStep()) # 获取四个旋翼电机设备 front_left = robot.getDevice("front left propeller") front_right = robot.getDevice("front right propeller") rear_left = robot.getDevice("rear left propeller") rear_right = robot.getDevice("rear right propeller") # 设置电机为速度控制模式 for motor in [front_left, front_right, rear_left, rear_right]: motor.setPosition(float('inf')) # 起飞函数:逐步提升转速 def takeoff(): for speed in range(0, 600, 10): front_left.setVelocity(-speed) front_right.setVelocity(speed) rear_left.setVelocity(-speed) rear_right.setVelocity(speed) robot.step(timestep) sleep(2) # 降落函数:逐步降低转速 def land(): for speed in range(600, 0, -10): front_left.setVelocity(-speed) front_right.setVelocity(speed) rear_left.setVelocity(-speed) rear_right.setVelocity(speed) robot.step(timestep) for motor in [front_left, front_right, rear_left, rear_right]: motor.setVelocity(0) # 执行飞行逻辑 takeoff() # 向前飞行2秒 front_left.setVelocity(-650) front_right.setVelocity(650) rear_left.setVelocity(-550) rear_right.setVelocity(550) sleep(2) # 恢复悬停 front_left.setVelocity(-600) front_right.setVelocity(600) rear_left.setVelocity(-600) rear_right.setVelocity(600) sleep(1) land()
额外检查
- 重启Webots软件并重新加载项目,确保控制器脚本路径配置正确;
- 确认Webots的Python环境配置正常,排查电脑重启是否导致环境变量失效。
内容的提问来源于stack exchange,提问作者John R
相关产品推荐
相关产品推荐

