树莓派4-Ubuntu20.04下Dronekit-Python遇dronekit.APIException报错求助
解决Dronekit 2.9.2 APIException报错的方案
核心排查方向
从你的运行场景(Python版本混用、别名调用)来看,问题大概率源于环境依赖冲突或版本兼容性不匹配,以下是针对性解决步骤:
1. 确认Python别名指向的实际版本
先检查python2-3别名对应的Python版本:
alias python2-3
- 如果指向Python2.7:Dronekit 2.9.2原生兼容该版本,但需排查依赖冲突;
- 如果指向Python3.8:Dronekit 2.9.2对Python3的支持存在缺陷,需调整版本或环境。
2. 用虚拟环境隔离依赖
树莓派同时装Python2和3时,全局依赖极易混乱,建议为不同Python版本创建独立虚拟环境:
Python2.7环境配置
sudo apt-get install python-virtualenv virtualenv -p /usr/bin/python2.7 dronekit-venv2 source dronekit-venv2/bin/activate pip install dronekit==2.9.2 dronekit-sitl pyserial==2.7
Python3.8环境配置
sudo apt-get install python3-venv python3.8 -m venv dronekit-venv3 source dronekit-venv3/bin/activate pip install git+https://github.com/dronekit/dronekit-python.git@python3 dronekit-sitl
激活对应虚拟环境后再运行脚本,彻底避免全局依赖干扰。
3. 修正飞控连接逻辑
APIException常因连接参数错误或初始化超时触发:
- 确认脚本中连接字符串的串口设备和波特率与飞控匹配,比如树莓派上常用的串口是
/dev/ttyAMA0或/dev/ttyUSB0:vehicle = connect('/dev/ttyAMA0', baud=57600, wait_ready=True) - 增加超时参数,避免因飞控初始化慢导致报错:
vehicle = connect('/dev/ttyAMA0', baud=57600, wait_ready=True, timeout=30)
4. 修复串口访问权限
树莓派访问串口需要权限,确保当前用户加入dialout组:
sudo usermod -a -G dialout $USER
重启终端后再执行脚本。
内容的提问来源于stack exchange,提问作者Coriander
相关产品推荐
相关产品推荐

