3. 开发环境搭建:Python环境、Pymavlink库安装、QGroundControl地面站
好,咱们正式开始动手了。这一章我带你把开发环境搭起来。说白了,就是给你的电脑装上「听懂无人机说话」的能力。
我见过太多人,代码写得漂亮,结果卡在环境配置上。有一次我在现场调试,发现笔记本连不上飞控,折腾了半天——你猜怎么着?驱动装错了版本。嗯,这种坑咱们今天一次性填平。
3.1 Python 环境:选对版本,省一半心
Python 版本我建议用 3.8 到 3.10。为什么?Pymavlink 对 3.11 以上的支持还有点小毛病,我踩过这个坑。
我个人习惯用虚拟环境。每个项目一个独立环境,互不干扰。来,跟着我做:
# 创建虚拟环境(Windows)
python -m venv drone_env
# 激活(Windows)
drone_env\Scripts\activate
# 激活(Mac/Linux)
source drone_env/bin/activate
# 检查版本
python --version
# 应该显示 Python 3.9.x 或 3.10.x
看到终端前面多了个 (drone_env) 前缀?成了。这就是你的无人机专属环境。
3.2 Pymavlink 安装:让电脑学会「说」MAVLink
Pymavlink 是 Python 和无人机之间的翻译官。无人机说 MAVLink 协议,Python 说对象和方法——Pymavlink 负责来回翻译。
安装其实就一行命令:
pip install pymavlink
但这里有个坑。我记得第一次装的时候,卡在 mavgen 编译上,报了一堆 C 语言的错。后来发现是缺了 future 库。所以保险起见,我建议你这样装:
pip install future
pip install pymavlink
pip install pymavlink -i https://pypi.tuna.tsinghua.edu.cn/simple
装完之后验证一下:
python -c "from pymavlink import mavutil; print('Pymavlink 安装成功!')"
没报错?恭喜,你的电脑已经能听懂无人机说话了。
3.3 QGroundControl:地面站,无人机的「驾驶舱」
QGroundControl(简称 QGC)是开源地面站里的标杆。我自己的项目里,80% 的联调工作都靠它完成。
下载地址:http://qgroundcontrol.com/downloads
选你对应的系统版本就行。Windows 用户下载 .exe,Mac 用户下载 .dmg,Linux 用户下载 AppImage。
安装完第一次启动,你会看到这个界面:
QGC 主界面核心区域:
- 左上角:通信状态指示灯(红/黄/绿)
- 中间:地图区域(显示无人机位置和航点)
- 右侧:遥测数据面板(高度、速度、电池等)
- 底部:飞行模式切换和操作按钮
嗯,先别急着连飞控。咱们先看看 QGC 的通信设置。点击右上角的齿轮图标 → 进入「Comm Links」选项卡。这里你会看到默认的串口和 UDP 连接方式。
| 连接方式 | 适用场景 | 典型参数 |
|---|---|---|
| 串口(Serial) | USB 直连飞控 | 波特率 57600 或 115200 |
| UDP | 局域网无线连接 | 本地端口 14550 |
| TCP | 远程连接 | IP + 端口 5760 |
我个人习惯先用串口调试,稳定了再切 UDP。为什么?串口丢包率低,调试阶段少出幺蛾子。
3.4 三者的「三角关系」
Python、Pymavlink、QGC 这三者怎么配合?我画了张图,你看一眼就明白了:
你看,Python 脚本和 QGC 都可以直接跟飞控通信。实际联调时,我通常开着 QGC 看状态,同时跑 Python 脚本发指令——两边互相印证,出问题一眼就能发现。
3.5 快速验证:让飞控「说话」
环境搭好了,咱们写个最简单的脚本,看看飞控有没有反应。先别连真机,用模拟器也行。
# test_connection.py
from pymavlink import mavutil
import time
# 连接到飞控(串口或 UDP)
# 串口示例:'/dev/ttyUSB0', 57600
# UDP 示例:'udp:127.0.0.1:14550'
connection = mavutil.mavlink_connection('udp:127.0.0.1:14550')
# 等待心跳包
print("等待飞控心跳...")
connection.wait_heartbeat()
print(f"收到心跳!系统 ID: {connection.target_system}")
# 请求一次数据流
connection.mav.request_data_stream_send(
connection.target_system,
connection.target_component,
mavutil.mavlink.MAV_DATA_STREAM_ALL,
1, # 频率 1Hz
1 # 开始发送
)
# 读取一条消息
msg = connection.recv_match(blocking=True)
print(f"收到消息: {msg.get_type()}")
print("环境验证通过!")
跑一下这个脚本:
python test_connection.py
如果看到「收到心跳」和「收到消息」,恭喜——你的开发环境已经全线打通了。
3.6 避坑指南
我这些年攒了几个常见问题,列出来你留个心眼:
- 串口权限问题(Linux/Mac):加用户到 dialout 组:
sudo usermod -a -G dialout $USER,然后注销重登。 - Windows 串口找不到:去设备管理器看端口号,一般是 COM3 或 COM4。驱动用 CP210x 或 CH340,别搞混。
- QGC 连不上飞控:先检查波特率。Pixhawk 默认 57600,有些飞控是 115200。我遇到过三次都是波特率没对上。
- Pymavlink 版本冲突:如果你同时用 ROS,注意 Pymavlink 版本别太新。2.4.8 是比较稳的版本。
好,环境搭完了。你现在手里有三样东西:一个能跑 Python 的终端、一个能听懂 MAVLink 的 Pymavlink、一个能看见无人机状态的 QGC。接下来咱们就可以真正开始「对话」了。