第1章:PX4固件编译与烧录——从零搭建你的开发环境
大家好,我是你们的无人机嵌入式系统讲师。今天咱们来聊聊PX4固件编译与烧录这件事。说实话,很多新手一上来就被环境搭建给劝退了——我当年也踩过不少坑。但别担心,跟着我的节奏走,你会发现这事儿其实没那么玄乎。
1.1 Ubuntu环境搭建:选对版本,少走弯路
我个人习惯用Ubuntu 20.04 LTS,原因很简单——稳定。PX4官方对20.04的支持最完善,各种依赖包基本不会出兼容性问题。你可能会问:“用22.04行不行?”嗯,理论上可以,但我建议你别给自己找麻烦。我在项目中遇到过几次因为系统版本太高导致某些库不兼容的情况,最后还得降级。
安装步骤其实就三步:
- 下载镜像:去Ubuntu官网下载20.04.6 LTS桌面版
- 制作启动盘:用Rufus(Windows)或balenaEtcher(macOS)写盘
- 安装系统:分区时建议给/home留至少50GB,因为后面要下载很多源码
1.2 PX4源码下载:别用master分支
源码下载这块,我见过太多人直接git clone master分支,结果编译报错一堆。为什么?因为master分支是开发版,可能随时有未测试的代码提交。我建议你这样做:
# 先安装git
sudo apt install git
# 克隆源码(指定稳定版本)
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.14.3
# 进入目录
cd PX4-Autopilot
# 更新子模块
git submodule update --init --recursive
这里有个细节——--recursive参数一定要加。我曾经因为忘了加这个,结果编译到一半提示缺少某个模块,排查了半天才发现是子模块没拉全。
1.3 make编译命令详解:从入门到精通
编译命令看起来简单,但里面的门道不少。咱们先看最常用的几个:
| 命令 | 用途 | 我的经验 |
|---|---|---|
make px4_fmu-v5_default |
编译Pixhawk 4固件 | 最常用的命令,覆盖90%的场景 |
make px4_fmu-v5_default upload |
编译并烧录 | 一条命令搞定,省事但容易忘接飞控 |
make clean |
清理编译产物 | 遇到奇怪错误时,先clean再重试 |
make px4_sitl_default gazebo |
编译SITL仿真 | 调试逻辑时用,不用真机也能跑 |
你可能会问:“这么多参数怎么记?”其实不用记。我一般只记两个:make px4_fmu-v5_default和make clean。其他参数用到时再查,效率更高。
make不带任何参数,结果编译了整整两个小时还没完。后来才发现,不加参数会编译所有支持的硬件平台——那叫一个酸爽。
1.4 固件烧录:两种方法,各有千秋
烧录固件有两种主流方式:QGroundControl图形化烧录和命令行烧录。我个人的建议是:新手先用QGC,老手用命令行。
方法一:QGroundControl烧录(推荐新手)
- 下载并安装QGC(官网有各平台版本)
- 用USB线连接飞控到电脑
- 打开QGC,点击顶部“固件”图标
- 选择编译好的.px4文件(在build目录下)
- 点击“更新固件”,等待进度条走完
这里有个坑——QGC有时候会识别不到飞控。我遇到过好几次,最后发现是USB线的问题。换一根带屏蔽的数据线,问题就解决了。
方法二:命令行烧录(效率更高)
# 进入源码目录
cd ~/PX4-Autopilot
# 编译并烧录(以Pixhawk 4为例)
make px4_fmu-v5_default upload
# 如果只想烧录,不编译
make px4_fmu-v5_default
cd build/px4_fmu-v5_default
sudo ./upload.py
命令行烧录的好处是快,而且可以集成到自动化脚本里。但要注意——烧录前一定要确认飞控处于“固件更新模式”(通常是按住安全按钮再上电)。
1.5 参数文件结构:理解PX4的“大脑”
编译完成后,你会发现源码目录下多了个build文件夹。这里面藏着固件的“大脑”——参数文件。咱们来看看它的结构:
build/px4_fmu-v5_default/
├── firmware.px4 # 最终固件文件
├── nuttx_px4fmu-v5_default.elf # ELF格式文件(调试用)
├── parameters.xml # 参数定义文件
├── src/ # 编译后的源码
└── logs/ # 编译日志
其中parameters.xml是最重要的文件之一。它定义了所有可调参数,比如:
- SYS_AUTOSTART:飞控型号ID(比如4001对应Pixhawk 4)
- MC_ATT_CTRL:姿态控制参数
- EKF2_ENABLE:是否启用EKF2滤波器
我一般会在编译后先检查一下parameters.xml,看看有没有新增或修改的参数。这样在调试时就能快速定位问题。
make clean && make px4_fmu-v5_default重新编译。虽然多花几分钟,但能避免很多莫名其妙的bug。
本章小结
好了,咱们把PX4固件编译与烧录的流程捋了一遍。从Ubuntu环境搭建,到源码下载,再到编译命令和烧录方法,最后看了参数文件结构。说实话,这些内容看起来多,但只要你动手做一遍,就会发现其实没那么复杂。
最后送大家一句话:编译环境搭得好,调试烦恼少一半。下次遇到编译报错,先检查环境,再检查代码——这是我多年踩坑换来的经验。