源码获取与编译环境搭建
好,咱们正式开始动手了。这一章的目标很明确:把PX4源码拉下来,把编译环境配好,然后跑通第一次编译。别小看这一步,我见过太多人卡在环境配置上,一卡就是好几天。说白了,飞控开发的门槛不在算法多难,而在于你得先把这堆工具链伺候好。
从GitHub拉取PX4源码
我个人习惯用git clone加--recursive参数。为什么?因为PX4依赖很多子模块,比如uORB、drivers这些,不加这个参数你后面还得手动拉,麻烦。
cd ~
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
嗯,这里要注意:网络问题。GitHub有时候抽风,尤其是拉子模块的时候。我在项目中遇到过,公司内网连GitHub慢得要命,最后换了代理才搞定。如果你也遇到类似情况,可以试试用国内镜像,或者挂个稳定的VPN。
git submodule update --init --recursive 确认一下。
拉完以后,你会看到PX4-Autopilot目录。进去看看,里面东西挺多的。别慌,咱们只关心几个关键目录:
src/— 核心源码,飞控算法都在这里boards/— 板级支持包,不同硬件平台的配置build/— 编译产物,第一次编译后才会生成Tools/— 辅助脚本,比如仿真、调试工具
配置Ubuntu下的交叉编译环境
交叉编译,说白了就是在PC上编译出能在飞控板上运行的代码。你想想看,飞控板上的ARM芯片性能有限,不可能在上面直接跑编译器。所以咱们得在Ubuntu上装一套ARM交叉编译工具链。
PX4官方推荐用ubuntu.sh脚本一键安装。我个人建议先看看这个脚本里装了啥,别盲目跑。我踩过坑,脚本默认装的东西太多,有些根本用不上。
cd ~/PX4-Autopilot
bash ./Tools/setup/ubuntu.sh
这个脚本会帮你装好:
| 组件 | 用途 |
|---|---|
| gcc-arm-none-eabi | ARM交叉编译器 |
| cmake | 构建系统 |
| python3-pip | Python依赖管理 |
| genromfs | 文件系统生成工具 |
脚本跑完以后,验证一下工具链是否装好:
arm-none-eabi-gcc --version
如果能看到版本号,说明交叉编译器装好了。嗯,这里有个细节:版本号不能太低。PX4对gcc版本有要求,太老的版本编译会报错。我建议至少10.3以上。
完成首次编译
环境配好了,咱们来编译一个目标。PX4支持很多硬件平台,比如Pixhawk系列、CUAV系列、甚至树莓派。咱们先拿px4_fmu-v5练手,这是Pixhawk 4的板子,最常见。
cd ~/PX4-Autopilot
make px4_fmu-v5
第一次编译会比较慢,因为要下载依赖、编译所有模块。我建议你泡杯咖啡等着。编译过程中你会看到很多输出,别被吓到,那是正常的。
如果一切顺利,最后会看到类似这样的信息:
-- Build finished
-- Firmware size: 1234567 bytes
-- Build root: /home/yourname/PX4-Autopilot/build/px4_fmu-v5_default
看到Build finished就说明成功了。编译产物在build/px4_fmu-v5_default目录下,其中px4_fmu-v5_default.px4就是咱们要的固件文件。
arm-none-eabi-gcc: not found,说明工具链没装好。回去重新跑ubuntu.sh,或者手动安装gcc-arm-none-eabi。我曾经因为PATH没配置对,折腾了半小时才发现。
本章知识体系
为了让你更直观地理解这一章的内容,我画了一张流程图:
这张图把整个流程串起来了。从拉取源码开始,到配置工具链,再到编译验证。每一步都有对应的检查点,确保你不会漏掉什么。
- 拉取源码务必加
--recursive,否则子模块缺失 - 工具链版本要匹配,太老或太新都可能出问题
- 第一次编译耐心等待,后续增量编译会快很多
好了,环境搭好了,源码也编译通过了。接下来你就可以开始研究位置控制器的代码了。记住,环境配置是基础中的基础,这一步走稳了,后面才能跑得快。