2. PX4开发环境搭建:Ubuntu系统配置、PX4源码下载、编译工具链安装、首次编译
说实话,搭建开发环境这件事,看着简单,但坑是真不少。我带过不少新人,十有八九第一周都卡在环境上。不是依赖装不上,就是编译到一半报错。所以这一章,我把自己踩过的坑、总结的经验,一次性给你讲清楚。
2.1 Ubuntu系统配置——先把地基打牢
PX4官方推荐的是Ubuntu 20.04 LTS。我个人习惯用这个版本,稳定,社区支持好。你如果非要用22.04或者18.04,也不是不行,但有些依赖包版本会有差异,到时候出问题别怪我没提醒你。
装好系统后,第一件事:换源。国内用户一定要换,不然下载速度会让你崩溃。我一般用清华源或者阿里源,选一个就行。
# 备份原源
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
python3 -m venv ~/px4_venvsource ~/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开发环境就搭好了。整个过程其实不复杂,就是步骤多,容易漏。你只要按上面的流程一步步来,基本不会出问题。如果编译通过了,恭喜你,你已经迈出了PX4开发的第一步。