一、PX4飞控概述:从航模到智能无人机的进化之路

大家好,我是你们这门课的老朋友。做了十几年无人机系统,从最早的航模遥控器一路折腾到现在的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的核心模块和它们之间的关系理清楚了。你花五分钟看懂这张图,后面学起来会轻松很多。

PX4飞控核心架构图 传感器层(Sensor Drivers) IMU(加速度计/陀螺仪) 磁力计 气压计 GPS / 光流 状态估计器(EKF2 / LPE) 融合多传感器数据,输出姿态、位置、速度 控制器(Position / Attitude / Rate) 位置控制器(P/PID) 姿态控制器(P/PID) 角速率控制器(P/PID) → 输出期望力矩和推力 混控器(Mixer)→ 执行器输出 将控制量映射为PWM / DShot / UAVCAN信号 MAVLink通信(QGC / 机载计算机) 遥测、参数、任务、日志 uORB消息总线 模块间通信

这张图里,数据从传感器进来,经过估计器融合,交给控制器算出控制量,再通过混控器输出到电机。整个流程都在uORB消息总线上跑,模块之间解耦得很干净。你想想看,这种架构的好处是什么?——想换一个传感器或者控制器,只需要改对应的模块,其他部分完全不用动。

1.6 本章小结

好了,第一章的内容就到这里。我们聊了无人机的发展史,对比了PX4和ArduPilot的差异,了解了PX4的生态圈,最后亲手拉取了源码并编译了固件。这些是后面所有章节的基础,尤其是那张架构图,建议你多看几遍。