2. PX4开发环境搭建:Ubuntu系统配置、PX4源码下载、编译工具链安装、首次编译

说实话,搭建开发环境这件事,看着简单,但坑是真不少。我带过不少新人,十有八九第一周都卡在环境上。不是依赖装不上,就是编译到一半报错。所以这一章,我把自己踩过的坑、总结的经验,一次性给你讲清楚。

2.1 Ubuntu系统配置——先把地基打牢

PX4官方推荐的是Ubuntu 20.04 LTS。我个人习惯用这个版本,稳定,社区支持好。你如果非要用22.04或者18.04,也不是不行,但有些依赖包版本会有差异,到时候出问题别怪我没提醒你。

⚠ 注意: 不要用Windows子系统WSL1来编译PX4,文件系统性能太差,编译速度慢到怀疑人生。WSL2勉强可以,但我还是建议直接装双系统或者用虚拟机。

装好系统后,第一件事:换源。国内用户一定要换,不然下载速度会让你崩溃。我一般用清华源或者阿里源,选一个就行。

# 备份原源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 编辑源列表(以清华源为例)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 更新
sudo apt update && sudo apt upgrade -y

然后安装一些基础工具。这些是后面编译PX4必须的,缺一个都可能报错。

sudo apt install -y \
    git \
    cmake \
    ninja-build \
    python3-pip \
    python3-venv \
    curl \
    wget \
    unzip \
    build-essential \
    pkg-config
💡 小技巧: 装完这些后,建议重启一下系统。有些内核模块更新后需要重启才能生效,别省这一步。

2.2 PX4源码下载——选对分支很重要

源码下载,说白了就是git clone。但这里有个关键点:分支选择。

PX4目前主要维护两个大版本:main(开发版)和v1.x(稳定版)。我个人建议初学者用v1.14.0或v1.13.3。为什么?因为这两个版本文档最全,社区讨论最多,遇到问题搜一下就有答案。

我曾经带过一个项目,新人直接clone了main分支,结果编译时遇到一个刚引入的bug,折腾了两天。后来切回稳定版,半小时搞定。

# 创建工作目录
mkdir -p ~/px4_workspace
cd ~/px4_workspace

# 克隆源码(带子模块)
git clone --recursive https://github.com/PX4/PX4-Autopilot.git

# 进入目录,切换到稳定版
cd PX4-Autopilot
git checkout v1.14.0

# 更新子模块(重要!)
git submodule update --init --recursive
⚠ 注意: --recursive参数一定要加。PX4依赖很多第三方库(如uavcan、ecl等),不拉子模块的话,编译到一半会报找不到头文件。我见过太多人栽在这个坑里。

2.3 编译工具链安装——ARM交叉编译器

PX4的固件是跑在STM32这类ARM芯片上的,所以我们需要ARM交叉编译器。简单说,就是在你的x86电脑上编译出能在ARM芯片上运行的代码。

PX4官方提供了一个自动化脚本,可以一键安装所有工具链。但我建议你手动装,这样出了问题自己心里有数。

2.3.1 安装ARM GCC编译器

# 下载ARM GCC(以10.3-2021.10版本为例)
wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

# 解压到指定目录
sudo tar -xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 -C /opt/

# 添加环境变量
echo 'export PATH=$PATH:/opt/gcc-arm-none-eabi-10.3-2021.10/bin' >> ~/.bashrc
source ~/.bashrc

# 验证安装
arm-none-eabi-gcc --version

如果看到版本号输出,说明装好了。没看到的话,检查一下路径对不对。

2.3.2 安装Python依赖

PX4的编译系统用到了Python脚本,比如px4.py。这些依赖必须装。

cd ~/px4_workspace/PX4-Autopilot
pip3 install --user -r requirements.txt
💡 小技巧: 建议用Python虚拟环境,避免污染系统Python。我一般这样操作:
python3 -m venv ~/px4_venv
source ~/px4_venv/bin/activate
然后再装依赖。这样即使搞坏了,删掉虚拟环境重来就行。

2.4 首次编译——验证环境是否OK

环境搭好了,是骡子是马,拉出来遛遛。我们编译一个最简单的目标:px4_fmu-v5(Pixhawk 4的固件)。

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

第一次编译会比较慢,因为要下载一些依赖包,还要编译所有源码。我的机器(i7-10750H,16GB内存)大概需要15-20分钟。你如果配置低一些,半小时也正常。

编译过程中,你会看到终端里刷刷刷地跑各种编译信息。如果一切顺利,最后会看到类似这样的输出:

-- Build files have been written to: /home/user/px4_workspace/PX4-Autopilot/build/px4_fmu-v5_default
[100%] Built target px4_fmu-v5_default

看到[100%],恭喜你,环境搭建成功!

✅ 编译成功后的产物:
固件文件位于 build/px4_fmu-v5_default/px4_fmu-v5_default.px4,这个文件就是你要烧录到飞控板上的固件。

2.5 常见编译错误及解决方法

编译过程中可能会遇到各种错误。我把最常见的几个列出来,你遇到了直接对照解决。

错误信息 原因 解决方法
arm-none-eabi-gcc: not found ARM编译器未安装或未加入PATH 检查/opt/gcc-arm-none-eabi-*/bin是否存在,重新执行source ~/.bashrc
fatal error: uavcan/node.h: No such file or directory 子模块未更新 执行git submodule update --init --recursive
Could not find a package configuration file provided by "px4_msgs" 缺少ROS2依赖(如果编译仿真目标) 安装ROS2或只编译硬件目标(如px4_fmu-v5)
c++: internal compiler error: Killed (program cc1plus) 内存不足 增加交换空间,或减少并行编译任务数:make px4_fmu-v5_default -j2

我曾经遇到过内存不足的问题,当时编译到一半直接卡死。后来加了4GB的swap,问题解决。你如果内存小于8GB,建议先配好swap。

# 创建4GB swap文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永久生效
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

2.6 本章知识体系总览

下面这张图,把整个环境搭建的流程串起来了。你跟着这个流程走,基本不会迷路。

PX4开发环境搭建流程 Ubuntu系统配置 PX4源码下载 编译工具链安装 首次编译验证 换源 / 基础工具 选择稳定分支 ARM GCC + Python依赖 编译 px4_fmu-v5 关键提醒 • 不要用WSL1 • 国内用户必须换源 • 子模块必须更新 • 内存不足加swap • 建议用Python虚拟环境 • 首次编译耐心等待 • 遇到错误先查表

嗯,到这里,你的PX4开发环境就搭好了。整个过程其实不复杂,就是步骤多,容易漏。你只要按上面的流程一步步来,基本不会出问题。如果编译通过了,恭喜你,你已经迈出了PX4开发的第一步。