1. 课程导入
大家好,我是你们这门课的老朋友。做了十几年无人机系统,从最早的航模遥控器一路折腾到现在的PX4,踩过的坑真不少。今天咱们先不急着敲代码,把PX4的来龙去脉理清楚。你想想看,不了解一个东西的过去,怎么用好它的现在?
1.1 无人机发展史:从玩具到生产力工具
无人机这玩意儿,最早其实是军事用的。我记得2005年那会儿,市面上能买到的“无人机”基本就是航模加个摄像头,飞控全靠手动,炸机是家常便饭。
真正的转折点出现在2010年左右。开源飞控项目开始兴起,ArduPilot和MultiWii把飞控成本从几万块拉到了几百块。到了2015年,PX4项目从苏黎世联邦理工学院孵化出来,无人机才算真正进入了“智能时代”。
为什么会这样?说白了,就是传感器便宜了,处理器性能上来了,再加上开源社区的力量。现在你花一千块买的飞控板,算力比当年阿波罗登月飞船还强。
关键里程碑:
- 2006-2010:ArduPilot诞生,开源飞控起步
- 2012:PX4项目启动,基于NuttX实时操作系统
- 2015:PX4与3DR合作,推出Pixhawk硬件标准
- 2018至今:PX4成为最活跃的开源飞控之一,支持VTOL、无人船、无人车
1.2 PX4 vs ArduPilot:怎么选?
这个问题我几乎每次培训都会被问到。两个都是顶级开源飞控,但设计哲学完全不同。
| 对比维度 | PX4 | ArduPilot |
|---|---|---|
| 架构 | 微内核 + 模块化 | 宏内核 + 单进程 |
| 实时性 | 强(基于NuttX RTOS) | 中等(基于Linux/ChibiOS) |
| 代码风格 | 现代C++,模块清晰 | 传统C++,历史包袱重 |
| 多旋翼调参 | 自动调参成熟 | 手动调参更灵活 |
| 固定翼/VTOL | 原生支持,过渡平滑 | 支持但配置复杂 |
| 学习曲线 | 中等偏陡 | 平缓但上限低 |
我的建议:如果你做科研、工业应用、或者想深入理解飞控原理,选PX4。如果你只是做航拍、FPV或者快速原型验证,ArduPilot上手更快。我个人习惯是PX4做主力,ArduPilot做备份。
1.3 PX4生态圈:不只是飞控
PX4能火,靠的不是代码本身,而是整个生态。我把它分成四块:硬件、地面站、仿真、工具链。
硬件:Pixhawk标准与衍生板
PX4的硬件标准叫Pixhawk,现在发展到FMUv6X。市面上常见的板子有:
- Pixhawk 4:入门首选,STM32F765主控
- CUAV V5+:工业级,双IMU冗余
- Holybro Pixhawk 6X:最新款,H7处理器,算力翻倍
- Raspberry Pi + Navio2:适合Linux玩家
避坑指南:我曾经买过一块山寨Pixhawk,飞着飞着IMU数据就飘了。后来拆开一看,传感器是翻新的。飞控板一定要买正版或者授权厂商的,省那几百块不够炸一次机的。
地面站:QGroundControl
QGC是PX4的官方地面站,跨平台(Windows/Mac/Linux/iOS/Android)。功能很全:
- 实时数据显示(姿态、GPS、电池等)
- 参数调整与校准
- 航点规划与任务上传
- 日志下载与分析
我个人习惯用QGC的“MAVLink Inspector”功能,调试时能看到所有内部消息,比看日志直观多了。
仿真:Gazebo + PX4 SITL
仿真绝对是PX4的一大杀器。你可以在电脑上跑完整的飞控逻辑,不用真机就能测试代码。
# 启动PX4软件在环仿真(SITL)
make px4_sitl gazebo
# 启动后会自动加载一架iris四旋翼
# 用QGC连接本地UDP端口即可控制
仿真能模拟GPS丢星、电池耗尽、传感器故障等场景。我每次写新算法,都是先在仿真里跑三天,确认没问题才上真机。
1.4 PX4源码获取与编译:动手时刻
好了,理论说够了,咱们来点实际的。获取PX4源码很简单,但编译环境配置是个坑。
第一步:获取源码
# 克隆主仓库
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
# 查看所有可用版本
git tag -l
# 切换到稳定版(推荐v1.14.3)
git checkout v1.14.3
小技巧:用 --recursive 参数会自动拉取所有子模块。如果网络不好,可以分步拉取:先 git clone,再 git submodule update --init --recursive。
第二步:搭建编译环境
PX4官方推荐Ubuntu 20.04/22.04。我建议直接用他们提供的自动化脚本:
# Ubuntu/Debian
bash ./Tools/setup/ubuntu.sh
# 这个脚本会安装所有依赖:gcc、cmake、python、gazebo等
# 大概需要10-20分钟,取决于网速
如果你用macOS或者Windows,官方也有对应的脚本。但说实话,我踩过最多的坑就是在Windows上编译。后来我学乖了,直接装个Ubuntu虚拟机或者WSL2,省心多了。
第三步:编译固件
# 编译Pixhawk 4固件
make px4_fmu-v5_default
# 编译完成后,固件在 build/px4_fmu-v5_default/ 目录下
# 文件名:px4_fmu-v5_default.px4
第一次编译会比较慢,因为要下载工具链和依赖库。之后增量编译就快多了,改一行代码重新编译大概30秒。
常见错误:编译时提示 arm-none-eabi-gcc: not found。这是因为工具链没装全。运行 make px4_fmu-v5_default 之前,先确认 arm-none-eabi-gcc --version 能正常输出。如果不行,重新跑一遍 ubuntu.sh 脚本。
1.5 PX4整体架构:一张图看懂
下面这张图是我自己画的,把PX4的核心模块和它们之间的关系理清楚了。你花五分钟看懂这张图,后面学起来会轻松很多。
这张图里,数据从传感器进来,经过估计器融合,交给控制器算出控制量,再通过混控器输出到电机。整个流程都在uORB消息总线上跑,模块之间解耦得很干净。你想想看,这种架构的好处是什么?——想换一个传感器或者控制器,只需要改对应的模块,其他部分完全不用动。
1.6 本章小结
好了,第一章的内容就到这里。我们聊了无人机的发展史,对比了PX4和ArduPilot的差异,了解了PX4的生态圈,最后亲手拉取了源码并编译了固件。这些是后面所有章节的基础,尤其是那张架构图,建议你多看几遍。