第二章 飞控固件与地面站: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 刷写

  1. 打开 Mission Planner,连接飞控板(选好 COM 口和波特率 115200)
  2. 点击顶部菜单 初始设置 → 安装固件
  3. 选择你的飞控板型号(比如 Pixhawk1)
  4. 点击上传,等进度条走完

你想想看,整个过程就跟给手机刷系统一样简单。但有个坑: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 时,最头疼的就是校准顺序。后来总结了一个固定流程:

  1. 加速度计校准: 初始设置 → 加速度计校准,按提示把飞机放平、左侧、右侧、机头向下、机头向上
  2. 罗盘校准: 初始设置 → 罗盘校准,拿着飞机绕 8 字旋转,直到进度条满
  3. 遥控器校准: 初始设置 → 遥控器校准,拨动摇杆到最大行程,点完成
  4. 电调校准: 如果用的是新电调,需要做一次油门行程校准

注意: 罗盘校准时,远离金属物体和强磁场。我曾经在钢结构厂房里校准,结果罗盘偏了 30 度,起飞后直接侧飞撞墙。从那以后,我都在室外空旷地方做校准。

2.6 知识体系总览

下面这张图是我自己整理的,把固件和地面站的关系画清楚了。你保存下来,以后遇到问题可以快速定位是哪个环节出了错。

飞控固件与地面站知识体系 飞控固件与地面站知识体系 飞控硬件(Pixhawk 等) PX4 固件 ArduPilot 固件 QGroundControl Mission Planner 部分兼容 固件刷写 / 参数配置 传感器校准 / 日志分析 航点规划 / 任务上传 实时遥测 / 调参 核心原则:固件决定飞控行为,地面站决定你能否驾驭它 两者版本必须匹配,否则参数可能不兼容

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 连接它。

  1. 插 USB,打开 QGC,等几秒,右上角显示 "Connected"
  2. 点击齿轮图标进入参数界面
  3. 在搜索框输入 BAT,查看电池参数
  4. 检查 BAT_MONITOR 是否为 4(表示启用电压监测)
  5. 检查 BAT_N_CELLS 是否与你电池串联数一致(3S 就填 3)

如果这些参数不对,飞控无法正确计算剩余电量,飞着飞着突然低电量降落就麻烦了。

核心要点: 地面站不只是用来调参的,它更是你排查问题的第一工具。学会看参数、看日志、看实时曲线,比会调 PID 更重要。因为参数设错了,PID 调得再好也飞不起来。