尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PX4离线环境搭建指南:5分钟从零编译首个固件

发布时间:2026/9/28 1:09:26

资讯中心
01
ARTICLE

PX4离线环境搭建指南:5分钟从零编译首个固件

PX4离线环境搭建指南:5分钟从零编译首个固件
直接进入正题。搞PX4开发环境最劝退新手的其实不是代码本身而是环境怎么都搭不起来依赖装一半报错、源码clone到一半超时、工具链版本对不上、固件下载慢到怀疑人生。我见过太多人兴致勃勃下载了PX4源码结果卡在环境搭建这一步拖了两三天都没编译出第一个固件最后直接放弃。这篇文章就把我常用的那套离线搭环境方案完整写出来照着做从零到编译出第一个PX4固件控制在几分钟内完全可行而且不用依赖随时可能抽风的在线下载流程。这套方案的核心思路很简单把PX4源码、工具链、依赖包、固件缓存全部提前准备好做成离线资源包一次性拷进Ubuntu环境里用。好处有两个一是完全绕开网络波动对安装过程的干扰二是步骤可复制不管是自己换电脑、帮同事搭环境还是给实验室新同学装环境同一套包可以直接复用省掉大量重复劳动。1. 整体设计思路为什么用离线包替代在线安装1.1 在线搭建PX4环境的三个痛点先说说传统在线搭建流程会遇到什么。PX4官方推荐的安装方式是执行ubuntu.sh脚本这个脚本会从Ubuntu软件源安装几十个依赖包然后通过GitHub克隆PX4源码和子模块再下载ARM交叉编译工具链。听着简单实际执行的时候坑很多。第一个痛点是网络连接不稳定。GitHub的clone操作、raw文件的下载在国内网络环境下经常出现速度极慢或者直接中断的情况。PX4的固件子模块非常多包括mavlink、gtest、uavcan这些任何一个子模块clone失败整个编译流程就走不下去。经常出现的情况是跑了一个多小时脚本最后在某一个子模块上卡住前功尽弃。第二个痛点是依赖版本容易冲突。Ubuntu的版本和PX4固件的版本存在对应关系。比如Ubuntu 22.04配合PX4 v1.14.3是社区里验证过比较顺的组合但如果装系统时选了Ubuntu 24.04或者固件用了最新的main分支依赖版本就很容易出现偏差需要手动调整编译参数。新手遇到这种问题基本束手无策只能到处查资料甚至被迫重装系统。第三个痛点是时间不可控。在线安装流程顺利的话四十分钟到一个小时不顺利的话可能要折腾一整天。如果网络状态不好重复执行脚本本身就非常折磨人。而且在线安装要求整个过程中不得断网如果是在移动网络或者网络环境差的场景下基本就没法操作。1.2 离线资源包解决了什么问题离线资源包相当于把环境搭建过程中所有需要从网上下载的东西提前准备好放进一个压缩包里。你在目标机器上要做的就是把包解压出来然后按顺序执行几条命令。这个方案的核心价值在于确定性。所有文件都是提前验证过的版本是匹配的不需要依赖网络不需要临时下载任何东西。实操下来从解压到编译出固件5分钟左右完成快的时候3分钟就能跑完。这套方案也方便团队复用。不管是给新同事的办公电脑搭环境还是给实验室新同学配开发机只要把资源包拷过去照着文档操作一次就全部搞定。省下来的时间比什么都值钱。1.3 资源包里具体包含什么我用的离线资源包主要包含四部分内容PX4 v1.14.3完整源码包括所有子模块压缩后大概1.2GB解压后接近3GB。Ubuntu依赖包deb格式用apt-get install无法离线解决的问题全部提前用apt-get download方式把deb包拉下来装的时候用dpkg -i批量安装。工具链ToolchainARM交叉编译工具链用于编译飞控板固件。固件缓存与Python依赖~/.cache目录下的相关缓存以及PX4编译需要的Python包缓存。这四部分合在一起基本覆盖了PX4编译过程中所有网络相关的需求。注意离线包基于Ubuntu 22.04 LTS环境制作建议目标机器也使用相同版本系统。用其他版本系统不是不行但需要重新验证依赖兼容性没必要给自己找麻烦。2. 前期准备系统需求与离线资源获取2.1 系统与硬件要求硬件方面内存建议8GB以上因为PX4编译过程比较吃内存make默认会起多个并行任务内存不足容易卡死。硬盘剩余空间至少需要20GB源码加工具链加编译产物放一起占空间不小。磁盘类型方面固态硬盘体验会好很多机械硬盘编译的时候等待时间会明显偏长。操作系统建议使用Ubuntu 22.04 LTS这是目前社区里适配PX4 v1.14.x最成熟的系统版本。也可以使用Ubuntu 20.04但建议使用22.04因为后续ROS 2的版本适配等方面22.04生态更完善。如果用的是Windows系统建议安装Ubuntu双系统或者用虚拟机。虽然WSL也能跑PX4编译但涉及USB设备直连飞控烧录时WSL的串口配置会比较麻烦新手不太适合折腾。有条件的直接上一台纯Ubuntu的机器能省掉很多乱七八糟的问题。2.2 百度网盘资源获取离线资源包我打包上传到了网盘文件名是px4_dev_env_ubuntu2204_v1.14.3.tar.zst。因为资源包文件较大我拆成了几个分卷压缩包需要全部下载才能解压。下载完成之后先核对一下文件大小确认分卷都下载完整再开始操作。校验方法md5sum px4_dev_env_ubuntu2204_v1.14.3.part*每个分卷的MD5值在网盘说明文档里有列出。如果校验值对不上需要重新下载对应分卷避免解压中途失败。2.3 目录规划与准备工作登录Ubuntu系统后建议把资源包放到一个专门的目录比如mkdir -p ~/px4_resources cd ~/px4_resources将下载好的分卷包都放到这个目录下。然后开始解压cat px4_dev_env_ubuntu2204_v1.14.3.part* | tar --zstd -xvf -解压完成后目录结构大致如下px4_resources/ ├── px4_resources/ │ ├── debs/ # 离线依赖包目录 │ ├── PX4-Autopilot/ # 完整PX4源码 │ ├── toolchain/ # 交叉编译工具链 │ ├── python_pkgs/ # Python依赖包 │ └── install.sh # 一键安装脚本这个结构经过精心设计所有资源都集中在一个目录下后续安装脚本会自动遍历各个子目录完成配置。3. 实操全流程从解压到编译成功的完整记录3.1 运行一键安装脚本进入资源根目录执行安装脚本cd ~/px4_resources/px4_resources chmod x install.sh ./install.sh脚本会自动完成几个操作包括把依赖deb包批量安装进系统、配置交叉编译工具链的环境变量、把PX4源码放置到~/src目录、安装Python依赖。整个过程中需要关注的是脚本执行到最后会提示重启一条命令source ~/.bashrc用于让环境变量生效。这一步我实测大约耗时2分钟具体时间取决于机器磁盘读写速度。相比在线安装动辄一小时的等待这个速度已经非常感人。3.2 源码目录与环境变量核查安装完脚本后核对几个关键路径确保环境确实没问题。PX4源码目录ls ~/src/PX4-Autopilot正常能看到CMakeLists.txt、platforms、src等目录。如果目录为空说明解压过程中出了问题需要回头检查分卷完整性。工具链路径which arm-none-eabi-gcc正常会输出/opt/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc。如果没有输出需要手工把工具链加到PATHexport PATH/opt/gcc-arm-none-eabi-10.3-2021.10/bin:$PATH为了永久生效建议把这一行写入~/.bashrc不然每次开新终端都要重新设置。Python环境检查python3 --version pip3 --versionPX4 v1.14.3要求Python 3.8以上22.04系统自带Python 3.10没有问题。如果之前手动装过Python注意确认默认的python3指向的是系统自带版本而不是某个虚拟环境。3.3 源码二次校验与首次编译源码从网盘解压出来不等于就一定能编译通过。因为主机的环境存在差异建议编译前先跑一次版本检查cd ~/src/PX4-Autopilot git submodule status这个命令会展示所有子模块的提交状态。正常的情况下每个子模块前面只有一个空格不会显示-前缀。如果子模块前面显示-说明对应子模块没有正确初始化需要补一次git submodule update --init --recursive这个操作会走网络速度取决于子模块大小和网速。如果网络状态不理想这步可能会比较慢但通常已经比全新环境好得多因为只有少数未初始化的子模块需要拉取。编译验证先编译仿真目标机SITLcd ~/src/PX4-Autopilot make px4_sitl_default gazebo这条命令的含义是编译一个代号为px4_sitl_default的仿真目标并同时检查Gazebo仿真环境是否可用。首次编译会生成大量编译产物耗时约3到5分钟。如果一切正常最后会提示仿真启动出现一个无人机模型在Gazebo场景里。编译完仿真目标后再试一次真实机架的固件编译以最常见的px4_fmu-v5Pixhawk 4/5系列为例make px4_fmu-v5_default如果这个目标也能顺利编译说明交叉编译工具链没问题整条编译链路都是通的。到这一步PX4开发环境就算彻底搭完了。3.4 编译速度优化参数说明默认情况下PX4的构建系统会自动使用CPU所有核心进行并行编译。如果你想手动控制可以这样设置make px4_fmu-v5_default -j4这里的-j4表示同时使用4个编译线程。如果是6核以上CPU可以直接用-j$(nproc)让系统自动选满。不过内存吃紧的机器不建议用最大值编译时每个编译线程大约占用1GB内存8GB内存的机器开到-j8就可能卡顿建议保守一点用-j4。4. 常见问题与排查技巧实录4.1 编译时报缺少GCC或CMake版本错误PX4 v1.14.3对CMake版本有要求需要3.16.0以上。Ubuntu 22.04自带CMake 3.22满足要求。如果你之前手动升级过CMake装了比较新或者比较旧的版本有可能出现版本不匹配。排查流程cmake --version如果版本低于3.16需要升级sudo apt remove cmake sudo snap install cmake --classic需要注意用snap安装的CMake路径可能不在默认PATH里可能需要重新登录终端才能使用。4.2 gazebo启动时闪退或黑屏这类问题大多和图形驱动有关。先确认虚拟机是否开启了3D加速没有开启的在虚拟机设置里打开。确认NVIDIA显卡驱动是否正确安装nvidia-smi如果这个命令报错说明NVIDIA驱动没有正确安装。可以查一下系统软件更新里的额外驱动选项选择推荐的NVIDIA驱动版本安装后重启。集显机器如果遇到Gazebo渲染问题可以尝试通过环境变量强制使用软件渲染export LIBGL_ALWAYS_SOFTWARE1这行命令的效果是让OpenGL使用软渲染模式速度会慢一些但能解决部分显卡兼容性问题。4.3 烧录固件时串口无权限使用make px4_fmu-v5_default upload烧录固件时经常遇到权限问题提示无法打开串口设备。这是因为当前用户不属于dialout用户组没有访问串口设备的权限。解决方法sudo usermod -a -G dialout $USER执行完之后必须注销重新登录组权限才会生效。我自己在这块踩过坑第一次执行完没注销直接试还是提示无权限折腾了一会儿才反应过来要重新登录。4.4 硬盘空间不足PX4编译过程会生成大量中间文件最占空间的是build目录。如果提示磁盘空间不足可以先清理一下cd ~/src/PX4-Autopilot make clean这个命令会删除所有编译产物释放大约5到8GB空间。如果你想保留仿真编译结果、只清理真实固件编译产物可以只删除对应目录rm -rf build/px4_fmu-v5_default这种方式比较精准清理完对应机架的编译产物后不影响其他目标的编译缓存。4.5 常见问题速查表现象可能原因解决方法command not found: makebuild-essential未安装运行sudo apt install build-essentialPX4-Autopilot目录为空解压时分卷不完整校验MD5后重新下载缺失分卷子模块状态带-前缀子模块未初始化运行git submodule update --init --recursiveGazebo启动黑屏显卡驱动或3D加速问题更新驱动或设置LIBGL_ALWAYS_SOFTWARE1上传固件无权限用户不在dialout组sudo usermod -a -G dialout $USER后重新登录编译卡在某一文件长时间不动内存不足或磁盘IO慢降低并行度用-j2或-j4重试5. 从编译通过到二次开发环境搭建后的下一步规划5.1 跑通一个最简单的自定义模块环境搭好之后不要急着学各种复杂算法先从修改一个简单的模块开始。PX4源码中有一个内置的示例模块px4_simple_app位于src/examples/px4_simple_app目录。这个模块的作用是周期性地打印消息到控制台非常适合作为二次开发的入门口。修改代码后如何编译并验证呢同样使用仿真目标机make px4_sitl_default编译完成后在QGroundControl地面站里或者通过pxh命令行观察输出。这个实验验证的是一条完整的开发链路改代码、编译、运行验证整个流程跑通之后后续再接触更复杂的模块就有底了。5.2 探索POSIX接口与仿真调试PX4支持在Linux系统上通过POSIX接口直接运行飞控代码不需要真实硬件就能测试大部分逻辑。对于开发者来说这意味着可以先用Gazebo仿真验证算法逻辑确认没问题再烧录到真实飞控上。这种方法比直接上真机试错成本低很多尤其是调试PID参数、验证航线规划逻辑的时候一次仿真调试节省的时间非常可观。5.3 适配自己的机架配置PX4的强项之一是灵活适配不同机架。在ROMFS/px4fmu_common/init.d/airframes目录下有大量预设机架配置文件。如果你用的是自组机找到最接近的机架配置复制一份后修改相应的PWM输出映射、电机顺序、机型参数就能让PX4适配你的硬件。5.4 遇到源码问题时的排查思路很多新同学编译出问题第一反应是在聊天群里问人这没问题但效率不高。更高效的做法是先把日志完整读完——PX4编译时如果出错最后几行日志一般会直接指出是哪个文件、哪个函数、什么类型的问题。看到报错之后优先在GitHub的PX4-Autopilot仓库Issue区搜索关键词绝大多数问题别人都遇到过并且有解决方案记录。实在搜不到的把完整日志贴到Issue区附带你的系统版本、固件版本信息维护者通常很快能给出建议。6. 我踩过的坑和经验总结最后说说我个人在推广这套离线搭建方案时踩过的坑。最值得强调的是分卷压缩和解压的问题。早期的资源包我做成一个整包上传网盘时老是提示文件过大断点续传后会偶尔损坏解压时莫名其妙报错。后来改用分卷方式每个分卷1GB左右配合MD5校验基本杜绝了文件损坏的问题。所以如果你解压时报错第一反应先校验MD5而不是怀疑系统环境有问题。另外一个容易被忽略的点是安装脚本执行完必须重新登录一次终端。我见过好几个朋友执行完脚本直接编译提示找不到arm-none-eabi-gcc就怀疑环境变量没配好其实只是没有重新加载bashrc文件。新开一个终端标签页就能解决根本不用重新配置。从实用性角度说这套离线包方案特别适合团队场景。我自己给实验室整理了这份资源包之后新同学来了拷一份资源包过去照着文档走一遍半小时内必然能跑到Gazebo仿真。以前那种每个人单独配环境、配两三天各种求助的情况再也没出现过。如果你后续想在这个环境上扩展ROS 2的MAVROS环境或者尝试PX4新版本的固件敬请留意思路——核心还是提前准备好依赖资源不要让在线下载成为整个搭建流程的瓶颈。希望这篇文章能帮你少走弯路有问题欢迎在评论区讨论。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。