第1章:PX4固件编译与烧录——从零搭建你的开发环境

大家好,我是你们的无人机嵌入式系统讲师。今天咱们来聊聊PX4固件编译与烧录这件事。说实话,很多新手一上来就被环境搭建给劝退了——我当年也踩过不少坑。但别担心,跟着我的节奏走,你会发现这事儿其实没那么玄乎。

1.1 Ubuntu环境搭建:选对版本,少走弯路

我个人习惯用Ubuntu 20.04 LTS,原因很简单——稳定。PX4官方对20.04的支持最完善,各种依赖包基本不会出兼容性问题。你可能会问:“用22.04行不行?”嗯,理论上可以,但我建议你别给自己找麻烦。我在项目中遇到过几次因为系统版本太高导致某些库不兼容的情况,最后还得降级。

安装步骤其实就三步:

  1. 下载镜像:去Ubuntu官网下载20.04.6 LTS桌面版
  2. 制作启动盘:用Rufus(Windows)或balenaEtcher(macOS)写盘
  3. 安装系统:分区时建议给/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_defaultmake clean。其他参数用到时再查,效率更高。

避坑指南:我第一次编译时,直接用了make不带任何参数,结果编译了整整两个小时还没完。后来才发现,不加参数会编译所有支持的硬件平台——那叫一个酸爽。

1.4 固件烧录:两种方法,各有千秋

烧录固件有两种主流方式:QGroundControl图形化烧录和命令行烧录。我个人的建议是:新手先用QGC,老手用命令行。

方法一:QGroundControl烧录(推荐新手)

  1. 下载并安装QGC(官网有各平台版本)
  2. 用USB线连接飞控到电脑
  3. 打开QGC,点击顶部“固件”图标
  4. 选择编译好的.px4文件(在build目录下)
  5. 点击“更新固件”,等待进度条走完

这里有个坑——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

命令行烧录的好处是快,而且可以集成到自动化脚本里。但要注意——烧录前一定要确认飞控处于“固件更新模式”(通常是按住安全按钮再上电)。

重要提醒:烧录过程中千万不要拔USB线!我有个同事曾经手贱拔了一次,结果飞控变砖了,最后只能重新刷bootloader才救回来。

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环境搭建,到源码下载,再到编译命令和烧录方法,最后看了参数文件结构。说实话,这些内容看起来多,但只要你动手做一遍,就会发现其实没那么复杂。

最后送大家一句话:编译环境搭得好,调试烦恼少一半。下次遇到编译报错,先检查环境,再检查代码——这是我多年踩坑换来的经验。


专注资料整理