3. 开发环境搭建:Python环境配置,pymavlink库安装,串口与UDP通信基础,QGroundControl地面站安装
好,咱们正式开始动手。这一章我带你把开发环境搭起来。别小看这一步,我见过太多人卡在环境配置上,代码写好了跑不起来,最后发现是串口权限没开或者Python版本不对。咱们一次搞定,后面就顺畅了。
3.1 Python环境配置
我个人习惯用Python 3.8到3.10之间的版本。为什么?pymavlink对3.11以上的支持曾经出过兼容性问题,我在项目里踩过这个坑。你直接用3.9或者3.10最稳。
安装步骤很简单:
- 去Python官网下载3.9.x或3.10.x安装包
- 安装时勾选"Add Python to PATH"
- 打开终端验证:
python --version
嗯,这里要注意:Windows用户记得把Python Scripts目录加到PATH里,不然后面装pymavlink会报"pip不是内部命令"。我曾经帮一个同事远程调试了两小时,最后发现就是这个问题。
3.2 pymavlink库安装
pymavlink是咱们和飞控对话的桥梁。说白了,它就是MAVLink协议的Python实现,能帮你打包、解析、发送MAVLink消息。
安装命令就一行:
pip install pymavlink
如果你在Linux上遇到权限问题,加个--user参数:
pip install --user pymavlink
装完之后验证一下:
python -c "from pymavlink import mavutil; print('OK')"
如果打印出"OK",说明装好了。如果报错,多半是Python版本或者依赖库的问题。我遇到过最奇葩的一次——某国产飞控的USB转串口芯片驱动没装,pymavlink连不上,我还以为是库装错了。
3.3 串口与UDP通信基础
飞控和地面站之间怎么传数据?两种方式最常见:串口和UDP。串口是物理连接,UDP是网络连接。你想想看,调试阶段用串口更稳定,飞起来之后用UDP更方便。
3.4.1 串口通信
串口通信的参数必须匹配:波特率、数据位、停止位、校验位。飞控默认一般是115200波特率,8数据位,1停止位,无校验。
用pymavlink连接串口的代码:
from pymavlink import mavutil
# 连接串口
master = mavutil.mavlink_connection(
device='/dev/ttyUSB0', # Linux下串口设备名
baud=115200
)
# 等待心跳包
master.wait_heartbeat()
print("飞控已连接")
Windows下设备名是COM3这样的格式。我刚开始做开发时,总搞不清Linux和Windows的设备名差异,后来干脆写了个自动检测脚本。
3.4.2 UDP通信
UDP通信适合模拟测试。你可以在电脑上跑一个虚拟飞控,然后用UDP连上去。QGroundControl也支持UDP连接,调试起来特别方便。
UDP连接代码:
from pymavlink import mavutil
# 连接UDP
master = mavutil.mavlink_connection(
'udp:0.0.0.0:14550' # 监听本地14550端口
)
# 等待心跳包
master.wait_heartbeat()
print("UDP连接成功")
3.4 QGroundControl地面站安装
QGroundControl(简称QGC)是PX4和ArduPilot的官方地面站。界面直观,功能强大。我个人觉得它是目前最好用的开源地面站,没有之一。
安装方式根据操作系统来:
| 操作系统 | 安装方式 | 备注 |
|---|---|---|
| Windows | 下载exe安装包 | 直接双击安装,注意选64位版本 |
| macOS | 下载dmg镜像 | 拖到Applications文件夹即可 |
| Ubuntu/Debian | AppImage或源码编译 | AppImage最省事,chmod +x后直接运行 |
安装完成后,打开QGC,你会看到主界面。默认它会自动搜索串口设备。如果你用模拟器,可以设置UDP连接:
- 点击右上角齿轮图标进入设置
- 选择"Comm Links"
- 添加UDP连接,端口填14550
- 点击Connect
我第一次用QGC时,发现连不上飞控,折腾了半天才发现是串口权限问题。Linux下需要把用户加到dialout组:
sudo usermod -a -G dialout $USER
然后注销重新登录,问题就解决了。
3.5 本章知识体系
下面这张图帮你理清开发环境的核心组件和它们之间的关系:
这张图展示了开发环境的三个核心组件:Python环境提供运行基础,pymavlink负责协议解析,QGC作为可视化地面站。它们通过串口或UDP与飞控通信。你把这个结构记在心里,后面写代码时就知道每一行在跟谁对话了。