第2章 PX4开发环境搭建:Ubuntu系统安装、PX4源码下载、编译工具链安装

说实话,很多初学者在PX4上栽的第一个跟头,不是代码看不懂,而是环境没搭好。我见过太多人花了两三天折腾编译错误,最后发现是工具链版本不对。这一章,我就带你一步步把开发环境整利索。

本章核心目标:在Ubuntu系统上完成PX4源码的下载、编译工具链的安装,并能成功编译第一个固件。

2.1 为什么选择Ubuntu?

你可能会问:Windows不行吗?其实也能行,但官方支持最好的还是Ubuntu。我个人习惯用Ubuntu 20.04 LTS,这个版本稳定,社区资源也多。PX4的编译脚本、依赖库,基本都是围绕Ubuntu设计的。

说白了,用Ubuntu就是走大路,省心。用Windows你得自己折腾WSL或者虚拟机,遇到问题网上搜到的解决方案也少。我建议你直接装双系统或者用实体机装Ubuntu,虚拟机跑编译有时候会慢得让人抓狂。

2.2 Ubuntu系统安装要点

安装Ubuntu本身不难,但有几个坑你得避开。我曾经帮一个学员远程调试,他装系统时选了中文路径,结果后面编译一直报错——嗯,这里要注意,系统用户名和路径千万不要出现中文。

项目 推荐配置 说明
系统版本 Ubuntu 20.04 LTS 长期支持,兼容性最好
磁盘分区 至少50GB 源码+编译中间文件很占空间
内存 8GB以上 编译时内存不够会卡死
用户名 全英文小写 避免路径编码问题

小技巧:装系统时选「最小安装」,省掉那些用不上的办公软件。后面缺什么再装什么,干净利落。

2.3 PX4源码下载

系统装好了,接下来就是拿源码。PX4的代码托管在GitHub上,我们用git来拉取。

先装git:

sudo apt update
sudo apt install git -y

然后克隆PX4的固件仓库:

git clone https://github.com/PX4/PX4-Autopilot.git --recursive

注意后面那个 --recursive 参数,它的作用是同时拉取子模块。PX4依赖很多第三方库,比如uORB、mavlink等,这些都以子模块形式存在。如果你忘了加这个参数,后面编译时会缺文件,还得手动补。

我记得有一次,团队里一个新同事拉代码时没加 --recursive,结果编译报了一堆「找不到头文件」的错误。排查了半天才发现是子模块没拉全。所以,这条命令一定要写完整。

拉完代码后,建议切换到稳定的发行版分支:

cd PX4-Autopilot
git checkout v1.13.3

为什么要切分支?因为主分支(main)是开发版,可能随时有变动,今天能编译明天可能就挂了。用发行版分支,至少保证教程里的操作是有效的。

2.4 编译工具链安装

源码到手了,但还不能直接编译。你得装一套工具链,把C++代码变成飞控能跑的二进制文件。

PX4官方提供了一个自动化安装脚本,位于 PX4-Autopilot/Tools/setup/ubuntu.sh。运行它就能一键安装大部分依赖:

bash ./PX4-Autopilot/Tools/setup/ubuntu.sh

这个脚本会装很多东西:gcc编译器、cmake、Python库、Java运行时(用于生成代码)等等。整个过程大概10-20分钟,取决于你的网速。

注意:运行脚本时不要中途中断。如果网络不好导致某个包没装上,脚本会报错退出。你可以重新运行,它会跳过已安装的部分。

脚本跑完后,建议重启一下系统,让环境变量生效。

2.4.1 验证工具链

装完了怎么知道好不好使?进到PX4目录,编译一个目标试试:

cd PX4-Autopilot
make px4_fmu-v5_default

这个命令会编译针对Pixhawk 4(FMUv5)的固件。第一次编译会比较慢,因为要生成很多中间文件。看到最后输出 [100%] Built target px4_fmu-v5_default,就说明环境搭好了。

如果编译失败,别慌。先看看错误信息,大部分情况是缺某个库。你可以手动安装:

sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev -y

嗯,这里有个小经验:编译错误90%都是缺依赖。缺什么就装什么,装完重新编译就行。

2.5 开发环境结构概览

工具链装好了,我们来捋一捋整个开发环境的结构。下面这张图能帮你快速建立全局认知:

PX4开发环境结构图 源码层 PX4-Autopilot 仓库(主代码 + 子模块) 工具链层 编译器(gcc) | CMake | Python | Java 依赖库(gstreamer, udev, protobuf...) 构建输出层 .px4 固件文件 | 编译日志 | 中间对象文件 编译流程: 源码 → 工具链 → 固件

从这张图你能看到,整个开发环境分三层:源码层、工具链层、构建输出层。源码通过工具链编译,最终生成可烧录的固件文件。你平时的工作,就是在这三层之间来回切换——改源码、调工具链、看输出。

2.6 常见问题与避坑

环境搭建这块,我踩过的坑比走过的路还多。挑几个典型的说说:

  • 编译时提示「Permission denied」:多半是串口权限问题。把用户加到dialout组:sudo usermod -a -G dialout $USER,然后注销重新登录。
  • git clone 速度慢:国内用户建议用镜像站,或者挂代理。我一般用 git config --global http.proxy 临时走代理,拉完再取消。
  • 编译到一半卡住不动:内存不够了。关掉浏览器、IDE这些吃内存的应用,或者增加swap空间。
  • 子模块更新失败:运行 git submodule update --init --recursive 手动更新。

我曾经遇到过:一个学员用Ubuntu 22.04装PX4,结果编译脚本里某个依赖包在22.04上改名了,装不上。折腾了两天才发现是系统版本问题。所以,老老实实用20.04 LTS,别追新。

2.7 验证环境是否可用

工具链装完、编译通过,不代表万事大吉。我建议你再做两个验证:

  1. 运行单元测试:make tests,确保核心逻辑没问题。
  2. 检查工具版本:用 gcc --version、cmake --version 确认版本符合要求。PX4官方文档里写了每个工具的推荐版本范围。

这两个步骤花不了几分钟,但能帮你提前发现隐藏的问题。别等到后面调试飞控时才发现工具链有毛病,那才叫欲哭无泪。

我的习惯:每次新装环境,我都会先编译一个最简单的目标(比如 make px4_fmu-v5_default),确认无误后再开始写代码。这样出了问题,我能确定是环境的问题还是代码的问题。

好了,环境搭好了,工具链也验证通过了。接下来你就可以放心地进入PX4的代码世界了。记住,一个干净、稳定的开发环境,是你后面所有工作的基础。别嫌麻烦,这一步值得花时间。