第二章 飞控固件与地面站:PX4/ArduPilot 与 QGC/MP 实战
做飞控这些年,我见过太多新手一上来就急着调 PID,结果连固件版本和地面站协议都没搞明白。说白了,飞控固件是无人机的大脑,地面站是你看大脑在想什么的窗口。这两样东西没选对、没配好,后面所有参数配置都是空中楼阁。
今天这一章,咱们就把 PX4 和 ArduPilot 这两个主流固件,以及 QGroundControl 和 Mission Planner 这两个地面站,从头到尾捋一遍。我会把我踩过的坑、总结的经验都放进来。
2.1 两大飞控固件:PX4 vs ArduPilot
目前开源飞控圈子里,90% 的项目都跑在这两个固件上。它们各有千秋,选哪个取决于你的场景。
| 对比维度 | PX4 | ArduPilot |
|---|---|---|
| 架构 | 模块化、微内核(uORB 消息总线) | 整体式、基于调度器 |
| 主要语言 | C++(现代 C++ 特性) | C++(偏传统风格) |
| 硬件支持 | Pixhawk 系列为主,也支持其他 STM32 板 | 极广,从 Arduino 到 Pixhawk 到 Linux 单板 |
| 典型场景 | 多旋翼、VTOL、竞速、科研 | 固定翼、无人船、地面车、直升机 |
| 参数管理 | 参数文件 + 动态重载 | 参数文件 + 运行时修改 |
| 社区活跃度 | Dronecode 基金会,偏工业 | DIY 社区,偏玩家 |
我的选择建议:
- 做科研、VTOL、或者需要深度定制传感器融合 → 选 PX4
- 做固定翼长航时、无人车、或者想快速上手 → 选 ArduPilot
- 如果只是学飞控原理,两个都装一遍,对比着看参数差异,收获最大
2.2 PX4 固件:从编译到烧录
我个人习惯用命令行编译 PX4,虽然 QGC 也能刷固件,但命令行能让你看到编译错误和警告,这对排查问题很有帮助。
2.2.1 获取源码与编译
# 克隆 PX4 固件(建议用稳定版,不要追 master)
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.14.3
cd PX4-Autopilot
# 编译 Pixhawk 4 版本
make px4_fmu-v5_default
# 编译带 Gazebo 仿真的版本
make px4_sitl gazebo
嗯,这里要注意:第一次编译会下载很多依赖,网络不好的话容易超时。我建议你提前配好代理,或者用国内镜像源。
2.2.2 烧录到飞控板
编译完成后,用 USB 连接飞控板,然后:
make px4_fmu-v5_default upload
如果提示权限问题,记得把用户加到 dialout 组:
sudo usermod -a -G dialout $USER
我曾经踩过的坑: 刷固件时飞控板供电不足,刷到一半就断了,导致 bootloader 损坏。后来我都是用带外部供电的 USB Hub,或者直接插着电池刷。千万别只靠电脑 USB 口供电刷 Pixhawk。
2.3 ArduPilot 固件:更简单的刷写方式
ArduPilot 的刷写比 PX4 友好很多。你甚至不用装编译环境,直接下载预编译的 .hex 文件,用 Mission Planner 就能刷。
2.3.1 使用 Mission Planner 刷写
- 打开 Mission Planner,连接飞控板(选好 COM 口和波特率 115200)
- 点击顶部菜单 初始设置 → 安装固件
- 选择你的飞控板型号(比如 Pixhawk1)
- 点击上传,等进度条走完
你想想看,整个过程就跟给手机刷系统一样简单。但有个坑:ArduPilot 的固件分很多变种,比如 ArduCopter、ArduPlane、Rover,千万别选错。
小技巧: 刷完固件后,第一次连接时 Mission Planner 会提示你校准加速度计和罗盘。别跳过,这是最基础的传感器校准,跳过了后面飞起来会偏。
2.4 QGroundControl 地面站:安装与配置
QGC 是我现在的主力地面站,跨平台、界面现代、对 PX4 支持最好。但说实话,它刚出来那几年 bug 挺多的,现在 v4.x 版本已经非常稳定了。
2.4.1 安装
- Windows: 去官网下载 .exe 安装包,一路 Next
- macOS: 下载 .dmg 文件,拖到 Applications 文件夹
- Linux: 用 AppImage 或 Snap 安装
# Ubuntu 下用 AppImage 方式
wget https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage
chmod +x QGroundControl.AppImage
./QGroundControl.AppImage
2.4.2 连接飞控
用 USB 线连接飞控,QGC 会自动识别串口。如果没识别到,检查一下:
- 驱动是否装好(Windows 下需要装串口驱动)
- 飞控板是否上电
- USB 线是不是只能充电不能传数据(我遇到过好几次这种线)
连接成功后,你会看到主界面显示飞机姿态、GPS 状态、电池电压等信息。这时候别急着飞,先做一件事:
检查固件版本: 在 QGC 左上角点击齿轮图标 → 参数 → 搜索 SYS_AUTOSTART,看看值对不对。比如你是四旋翼,这个值应该是 4001(对应 Quadrotor x)。如果不对,飞控不知道你是什么机型,解锁都解不了。
2.5 Mission Planner 地面站:老牌工具入门
Mission Planner 是 ArduPilot 的官方地面站,功能极其强大,但界面嘛……嗯,确实有点上世纪的感觉。不过它的参数查看和日志分析功能,至今无人能敌。
2.5.1 界面布局
打开 MP 后,你会看到左侧一列功能按钮:
| 按钮 | 功能 |
|---|---|
| 飞行数据 | 实时显示姿态、高度、速度、地图 |
| 飞行计划 | 编辑航点任务(Waypoint Mission) |
| 初始设置 | 固件刷写、传感器校准、遥控器校准 |
| 配置/调试 | 参数列表、PID 调参、扩展功能 |
| 模拟 | 内置 SITL 仿真,不用硬件也能飞 |
2.5.2 快速校准流程
我第一次用 MP 时,最头疼的就是校准顺序。后来总结了一个固定流程:
- 加速度计校准: 初始设置 → 加速度计校准,按提示把飞机放平、左侧、右侧、机头向下、机头向上
- 罗盘校准: 初始设置 → 罗盘校准,拿着飞机绕 8 字旋转,直到进度条满
- 遥控器校准: 初始设置 → 遥控器校准,拨动摇杆到最大行程,点完成
- 电调校准: 如果用的是新电调,需要做一次油门行程校准
注意: 罗盘校准时,远离金属物体和强磁场。我曾经在钢结构厂房里校准,结果罗盘偏了 30 度,起飞后直接侧飞撞墙。从那以后,我都在室外空旷地方做校准。
2.6 知识体系总览
下面这张图是我自己整理的,把固件和地面站的关系画清楚了。你保存下来,以后遇到问题可以快速定位是哪个环节出了错。
2.7 固件与地面站的版本匹配
这是最容易出问题的地方。我见过有人用最新版 QGC 去连老版本 PX4 固件,结果参数界面一堆乱码。为什么会这样?因为地面站和固件通过 MAVLink 协议通信,协议版本和参数定义必须一致。
| 固件版本 | 推荐地面站版本 | 备注 |
|---|---|---|
| PX4 v1.12.x | QGC v4.0.x | 较老,部分参数已废弃 |
| PX4 v1.13.x | QGC v4.1.x | 稳定组合,推荐 |
| PX4 v1.14.x | QGC v4.2.x 或更新 | 最新特性,但注意 beta 版可能有 bug |
| ArduPilot 4.3.x | MP 1.3.8x | 经典组合 |
| ArduPilot 4.5.x | MP 1.4.0+ | 支持新硬件 |
我的习惯: 每次升级固件前,先把当前参数全部导出备份。升级后如果发现参数对不上,直接恢复备份,比一个一个重新设快多了。
2.8 实战:第一次连接与参数读取
好了,理论说完了,咱们来点实际的。假设你手里有一块 Pixhawk 4,刷了 PX4 v1.14.3 固件,现在用 QGC 连接它。
- 插 USB,打开 QGC,等几秒,右上角显示 "Connected"
- 点击齿轮图标进入参数界面
- 在搜索框输入
BAT,查看电池参数 - 检查
BAT_MONITOR是否为 4(表示启用电压监测) - 检查
BAT_N_CELLS是否与你电池串联数一致(3S 就填 3)
如果这些参数不对,飞控无法正确计算剩余电量,飞着飞着突然低电量降落就麻烦了。
核心要点: 地面站不只是用来调参的,它更是你排查问题的第一工具。学会看参数、看日志、看实时曲线,比会调 PID 更重要。因为参数设错了,PID 调得再好也飞不起来。