2. PX4源码编译环境搭建:Ubuntu系统配置、PX4 Firmware源码下载、交叉编译工具链安装、首次编译验证

说实话,环境搭建这一步,看着简单,但坑是真不少。我带过不少新人,十有八九都卡在编译报错上。我自己刚入行那会儿,也在这上面折腾了两三天。

这一章,咱们就把环境捋顺。你跟着我的步骤走,基本能一次过。

2.1 Ubuntu系统基础配置

我建议你直接用 Ubuntu 20.04 LTS 或 22.04 LTS。别用太新的版本,比如24.04,有些依赖包还没适配好,容易出幺蛾子。

装好系统后,第一件事就是换源。国内网络环境,你懂的。

换源操作: 备份原文件,然后替换为清华或中科大的镜像源。记得执行 sudo apt update 和 sudo apt upgrade。

接下来,安装基础依赖。这是PX4官方推荐的命令,我直接贴出来:

sudo apt update
sudo apt install \
  git \
  zip \
  cmake \
  build-essential \
  genromfs \
  ninja-build \
  exiftool \
  python3-pip \
  python3-setuptools \
  python3-wheel \
  python3-dev \
  python3-empy \
  python3-numpy \
  python3-pyparsing \
  python3-jinja2 \
  python3-toml \
  python3-packaging \
  python3-jsonschema \
  -y

嗯,这里要注意。有些包名在不同Ubuntu版本里可能不一样。比如 python3-empy,在22.04里可能叫 python3-empy 但版本不对。如果报错,就用 pip3 install empy 补装一下。

2.2 PX4 Firmware源码下载

源码下载,我习惯用 git clone。但别直接克隆主分支,那个太大了,而且包含很多我们不用的硬件平台代码。

我个人习惯的做法是:

  1. 先创建一个工作目录,比如 ~/px4_workspace。
  2. 然后克隆时加上 --depth=1 参数,只拉取最新版本。
  3. 最后切换到我们需要的稳定版本标签。
mkdir -p ~/px4_workspace
cd ~/px4_workspace
git clone https://github.com/PX4/PX4-Autopilot.git --depth=1 -b v1.14.3
cd PX4-Autopilot
git submodule update --init --recursive
注意: git submodule update 这一步很关键,也最容易失败。因为子模块仓库分散在全球各地,网络波动就容易中断。我曾经在项目交付前夜,因为子模块没拉全,编译死活过不去。建议用代理,或者多试几次。

下载完成后,目录结构大概是这样的:

目录/文件 说明
src/ 核心源码,包括模块、驱动、库
boards/ 各硬件平台的板级配置
cmake/ CMake构建脚本
ROMFS/ 文件系统镜像,存放参数默认值
Tools/ 辅助工具和脚本
makefile 顶层Makefile,编译入口

2.3 交叉编译工具链安装

我们要在电脑上编译飞控代码,但飞控的CPU是ARM架构的。所以需要交叉编译工具链——说白了,就是在x86电脑上生成ARM可执行文件的工具。

PX4官方推荐用 GNU Arm Embedded Toolchain。我建议直接装 9-2020-q2-update 这个版本,稳定,兼容性好。

安装步骤:

  1. 下载工具链压缩包。
  2. 解压到 /opt 目录。
  3. 配置环境变量。
cd ~/px4_workspace
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/9-2020-q2-update/gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2
sudo tar xjf gcc-arm-none-eabi-9-2020-q2-update-x86_64-linux.tar.bz2 -C /opt/
export PATH=/opt/gcc-arm-none-eabi-9-2020-q2-update/bin:$PATH

验证是否安装成功:

arm-none-eabi-gcc --version

如果输出版本信息,就说明装好了。

小技巧: 把 export PATH=... 这行加到 ~/.bashrc 文件末尾,这样每次打开终端就不用重新设置了。

2.4 首次编译验证

环境都配好了,咱们来编译一把。我选 px4_fmu-v5 这个目标板,也就是Pixhawk 4用的。

cd ~/px4_workspace/PX4-Autopilot
make px4_fmu-v5_default

第一次编译会比较慢,因为要下载一些依赖包,还要编译所有模块。我的机器大概要15-20分钟。

编译过程中,你会看到类似这样的输出:

[  1%] Built target git_submodule_src_drivers_gps
[  2%] Built target git_submodule_src_modules_uxrce_dds_client
...
[100%] Built target px4_fmu-v5_default

看到 [100%] 就说明编译成功了。生成的固件在 build/px4_fmu-v5_default/ 目录下,文件名是 px4_fmu-v5_default.px4。

避坑指南: 如果编译过程中报错,别慌。90%的情况是网络问题导致依赖没下载全。先执行 make clean 清理,再重新 make。我曾经遇到过因为Python版本不对,导致 jsonschema 报错,后来用 pip3 install --upgrade jsonschema 解决了。

下面这张图,帮你理清整个环境搭建的流程:

PX4编译环境搭建流程 Ubuntu 20.04/22.04 安装基础依赖包 git clone PX4源码 安装交叉编译工具链 make 首次编译验证 常见问题 • 网络超时:换源或开代理 • 依赖缺失:pip3补装 • 子模块失败:重试git submodule ✅ 看到 [100%] 即成功

编译成功后,你可以在 build/px4_fmu-v5_default/ 目录下找到生成的固件。这个固件就是我们要烧录到飞控里的东西。

嗯,到这里,环境搭建就完成了。你手上有了一把能编译PX4的钥匙。接下来,我们就可以开始真正的二次开发了。