Ubuntu 24.04 下 PX4 飞控仿真环境搭建教程:从零到 SITL 起飞 📅 发布时间:2026/9/13 19:58:14 👁 浏览次数: “无人机飞控到底怎么入门”这个问题我几乎每周都能看到人问。说实话绝大多数人不是被飞控算法劝退的而是被环境搭建卡死的——尤其是想在 Ubuntu 24.04 上从头把 PX4 装起来对第一次接触 Linux 的朋友来说每一步都可能踩坑。这篇教程就是这个系列的第一篇我把它定位成“前期准备”先不管 PID 调参、不看姿态解算咱们老老实实把 PC 上的 PX4 编译仿真环境跑通让你能在电脑里“飞”起来一架虚拟无人机。这篇文章适合两类人一类是零基础但决定从 PX4 入手飞控开发的初学者另一类是在老版本 Ubuntu 上跑过 PX4、现在想迁移到 24.04 的开发者。我尽量把每一步的原理、操作和坑都讲清楚。1. 整体搭建思路为什么选 Ubuntu 24.04 和 PX41.1 PX4 到底是什么为什么值得学PX4 是目前全球使用最广的开源飞控软件栈之一和 ArduPilot 并称两大主流。它提供了从载具状态估计、姿态控制、位置控制到任务规划、航线飞行的一整套实现而且架构清晰支持多旋翼、固定翼、垂直起降等多种机型。很多商业飞控产品、行业级无人机方案都能看到 PX4 的影子所以从 PX4 入手学飞控学到的不是某个小厂特有的“黑盒接口”而是一套相对标准、社区活跃且资料丰富的开源体系。在 PC 上跑 PX4主要工作分两层一层是飞行控制栈本身也就是 PX4-Autopilot 固件代码另一层是仿真环境比如 Gazebo 或者 Gazebo Classic用来模拟物理世界、传感器数据和载具动态。你写的代码不用上真机先在仿真里验证逻辑是否合理这一步对新手相当友好——真机炸一次的成本够买好几本书了。1.2 Ubuntu 24.04 的优势和需要注意的“新”Ubuntu 24.04 LTS 在 2024 年 4 月发布是长期支持版本官方维护五年对个人学习和开发来说生命周期很充足。相比 22.0424.04 的软件库更新Python 默认版本变成了 3.12GCC 默认版本升级到 13.xROS 2 相关的适配也更友好。但是“新”也意味着兼容性风险很多老编译脚本在 24.04 上会遇到依赖名变更、Python 路径变化、OpenCV 版本冲突等问题。所以网上很多基于 Ubuntu 20.04 的 PX4 教程在 24.04 上不能照搬需要针对性修正。我一开始也踩过“照着老教程敲命令却一直报错”的坑最后总结出的路线是不要盲目用官方一键脚本先手工把工具链分步装好每装完一步就验证一步。这样做的好处是万一出错你知道是哪个环节的问题不至于对着一个半懂不懂的 log 发呆。1.3 完整搭建路线图整个环境搭建分四个阶段准备基础系统环境——装好 Ubuntu 24.04 桌面版配置好软件源和基础工具。安装编译工具链——包括 git、cmake、ninja、Python 3、GCC、G 等。获取 PX4 源码并安装依赖——拉取 PX4-Autopilot 代码安装仿真和交叉编译依赖。编译并运行仿真——先在 Gazebo 里跑起 SITLSoftware In The Loop连接地面站验证通信。这篇文章覆盖前三个阶段到第四个阶段的“编译通过仿真启动”真机移植后面单独开篇说。2. 前期准备虚拟机还是双系统、基础安装2.1 虚拟机、双系统还是 WSL我该选哪个Windows 用户面对的第一个选择题PX4 环境放在虚拟机、WSL 还是双系统我的建议很简单如果你只是跑 PX4 仿真、编译 SITL、用 QGroundControl 看数据VMware 虚拟机完全够用别折腾双系统。我给虚拟机分配了 8 核 CPU、16GB 内存和 120GB 磁盘Gazebo 跑小型四旋翼模型挺流畅。如果你以后要接真机、做 RTK 定位、接数传模块、编译树莓派或其他 ARM 板子的 PX4 固件建议双系统因为 USB 设备透传在虚拟机里偶尔有延迟和驱动问题调试外部硬件时会比较痛苦。WSL2 也能编译 PX4 SITL但 Gazebo 这类图形化仿真在 WSL2 下需要折腾 WSLg 和 GPU 直通对新手不友好我不建议在入门这个阶段用它。虚拟机方案最稳妥的理由是搞挂了系统删除重来就行不影响 Windows 日常使用。入门阶段容错率比性能更重要。2.2 Ubuntu 24.04 安装的几个关键细节安装 Ubuntu 24.04 本身不复杂但有几个细节直接影响后续开发镜像尽量从 Ubuntu 官网或者大学镜像站下载 desktop 版 ISO别用第三方精简版装完缺一堆开发库反而浪费时间。分区时我习惯单独给/分 60GB 以上swap分 8GB 左右。编译 PX4 时内存占用明显swap 不够会遇到“g: internal compiler error: Killed”这类被 OOM Kill 杀掉进程的报错。安装过程中选择“为图形和无线硬件安装第三方软件”这个选项可以少装很多驱动问题。安装完成后先执行sudo apt update sudo apt upgrade把系统基础库更新到最新状态再开始装后面的东西。这里额外提一句如果你的电脑是 NVIDIA 显卡系统装好之后去“软件和更新”里的“附加驱动”选项卡给显卡装上官方驱动。Gazebo 渲染 3D 场景时虽然集显也能跑但独显驱动正常的话帧率会稳定很多。2.3 软件源更换与系统清理Ubuntu 默认的软件源在国内访问速度可能比较慢我在安装完系统后第一件事就是把软件源换成国内镜像。方法很简单打开“软件和更新”在“下载自”里选择镜像服务器系统会自动测速并切换。换源之后执行sudo apt update sudo apt upgrade -y另外不要忘记安装几个常用软件sudo apt install -y vim git curl wget net-tools htop这些基础工具后面都会用到尤其是 git后面拉取 PX4 源码全靠它。3. 基础工具链安装版本选择与安装细节3.1 Git 安装与配置避免“身份缺失”问题PX4 源码托管在 GitHub 上所以 git 是第一个必须装好的工具。Ubuntu 24.04 的源里自带 git直接安装sudo apt install -y git装完需要配置用户名和邮箱否则提交代码时会报错。更重要的是拉取 PX4 仓库时我建议配置一个快捷代理方式因为 PX4-Autopilot 代码量和 submodule 数量很大国内网络下直接 clone 经常卡住。一个常用的办法是配置 Git 的 URL 自动替换把github.com替换成github.com的镜像地址具体用哪个镜像大家可以自己搜我在这里就不展开说镜像访问的具体方案了只提醒大家网络问题值得提前关注。配置完可以验证一下git config --global user.name Your Name git config --global user.email your_emailexample.com3.2 Python 3.12、CMake 与 Ninja版本匹配有多重要PX4 的构建系统依赖 CMake 和 Ninjapx4-offboard 等工具链又依赖 Python 脚本。Ubuntu 24.04 默认的 Python 是 3.12配套的 pip 是 23.xCMake 是 3.28Ninja 是 1.11GCC 是 13.2。这套默认版本其实很接近 PX4 官方推荐的构建环境不需要像 20.04 那样手动升级新版 CMake省了不少事。你需要确认一下这些工具是否齐全sudo apt install -y python3 python3-pip python3-venv build-essential cmake ninja-build python3 --version cmake --version ninja --version如果你想把 Python 默认解释器从 python3 映射为 python可以装一个 python-is-python3sudo apt install -y python-is-python3不然脚本里写python xxx.py会报“找不到命令”。3.3 PX4 官方脚本与手动安装怎么选择PX4 官方文档提供了 ubuntu.sh 一键安装脚本理论上输入以下命令就能自动装好全部依赖bash ./PX4-Autopilot/Tools/setup/ubuntu.sh但我个人建议新手先别用一键脚本原因是脚本会静默安装很多包中途一旦失败很难定位问题而且它会自动配置一些系统级依赖版本可能与你在用的 ROS 2 或其他开发环境冲突。更稳妥的做法是先手动安装核心依赖再用官方脚本做“查漏补缺”或者在官方脚本执行时仔细看每一步输出遇到失败的包单独解决。手动安装的核心依赖清单一共三大类编译工具链gcc、g、cmake、ninja-build。仿真与图形库gazebo 或 gazebo-classic 相关的包包括 protobuf、libeigen3-dev、libopencv-dev 等。Python 工具jinja2、numpy、tqdm、pyulog、kconfiglib 等。其中 Eigen3 库特别重要PX4 的矩阵运算和姿态估计很多地方依赖它装错了会导致编译到一半报头文件找不到sudo apt install -y libeigen3-dev3.4 Gazebo 仿真环境安装的版本取舍PX4 在 24.04 上支持 Gazebo 和 Gazebo Classic 两种仿真环境。Gazebo Classic也就是 Gazebo 11是老一代版本PX4 对它的支持非常成熟文档也多GazeboGarden/Harmonic是新一代版本界面和 API 不同。对于新手我建议直接装 Gazebo Classic因为 PX4 官方测试最充分、报错最少sudo apt install -y gazebo libgazebo11-dev装的时候注意Ubuntu 24.04 的软件源里可能没有 gazebo 包需要先安装 osrf 软件源sudo apt install -y lsb-release gnupg sudo curl -sSL http://packages.osrfoundation.org/gazebo.gpg | sudo apt-key add - sudo sh -c echo deb http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main /etc/apt/sources.list.d/gazebo-stable.list sudo apt update sudo apt install -y gazebo libgazebo11-dev这里有个容易踩的坑如果你没有先添加 osrf 源而直接执行sudo apt install -y gazeboUbuntu 会告诉你“找不到软件包”。这不是命令写错而是软件源没配置。装好后验证一下gazebo --version如果输出版本号就说明仿真环境基本就绪。4. PX4 源码获取、编译与仿真验证4.1 下载 PX4-Autopilot 源码源码下载我建议直接 clone 官方仓库而不是下载 zip 包因为 PX4 很多子模块需要 git submodule 机制管理zip 包会缺失大量第三方依赖。git clone https://github.com/PX4/PX4-Autopilot.git --recursive这里--recursive参数会自动递归拉取所有子模块。但由于源码仓库很大国内网络下整个过程可能持续很长时间如果中途失败可以进入仓库目录后重新执行cd PX4-Autopilot git submodule update --init --recursive这一步会反复执行直到子模块完整。如果某个子模块一直拉取失败常见原因是网络访问 GitHub 不稳定可以提高 Git 的缓冲区大小或者重试但不要跳过子模块否则编译必挂。4.2 编译 SITL 固件make 和 cmake 的关系PX4 的构建统一入口是make它会自动调用 CMake 和 Ninja。SITL 仿真的目标名称是px4_sitl加上仿真器名就是完整目标比如cd PX4-Autopilot make px4_sitl gazebo-classic第一次编译会花费很长时间因为要编译整个固件和 Gazebo 的插件。我实测在 8 核 16GB 的虚拟机上约需 15-25 分钟配置差一些的机器可能要半小时以上这都正常。编译过程中看到大量[ xx%]进度条刷新说明构建系统在工作。这里解释一下为什么用make px4_sitl gazebo-classic而不是make px4_fmu-v5px4_sitl是编译 PC 上运行的仿真固件而px4_fmu-v5是编译飞控板真机固件。两者架构不同入门阶段先跑 SITL 即可。4.3 编译成功后的仿真启动流程当编译结束出现类似下面的提示时说明 SITL 固件构建成功[100%] Built target px4这时候直接运行make px4_sitl gazebo-classic终端会弹出 Gazebo Classic 主窗口里面停着一架默认的四旋翼模型同时当前终端会进入 PX4 的pxhshell 提示符。这个 shell 是 PX4 的飞行控制命令行可以输入commander takeoff让飞机起飞输入commander land让它降落输入help查看所有命令。起飞后我在 Gazebo 里用鼠标拖动视角查看飞机姿态发现它可以稳定悬停。此时说明整个编译链路已经通了可以开始玩仿真了。4.4 QGroundControl 地面站连接仿真飞机光在命令行看数据不够直观我建议把 QGroundControlQGC地面站装上。PX4 仿真默认会开放 UDP 端口 14550QGC 会自动发现本地运行的 SITL 实例显示姿态、位置、电池等全量飞行数据。下载 QGC 可以到官网下载 AppImage 版本然后赋予执行权限chmod x QGroundControl.AppImage ./QGroundControl.AppImage如果双击没反应可能是 AppImage 缺少 FUSE 支持sudo apt install -y libfuse2QGC 连接成功后地图窗口中央会出现一个仿真实时位置光标右上角显示 GPS 状态。这时候切换“任务”页面可以在地图上画一个航线并上传然后切换到“飞行”页面点击“起飞”按钮飞机就会按照航线飞行。这一整套从编译到地面站通信的流程是真机飞行前必须掌握的链路。5. 常见问题与排查技巧实录5.1 明明设置了国内源git clone 还是很慢怎么办PX4-Autopilot 仓库体积很大包含地图、机型和二进制模型文件git clone 时很容易长时间卡在Receiving objects阶段。解决办法我试过两个一是用 shallow clone 先只拉取最近一次提交等编译通过后再按需拉取完整历史git clone --depth1 https://github.com/PX4/PX4-Autopilot.git --recursive注意--depth1会减少历史提交信息对于入门阶段完全够用以后需要切分支时可以随时补充。二是升级 Git 的 HTTP 缓冲大小git config --global http.postBuffer 524288000这个方法对“过早结束文件”之类的报错特别有效。5.2 编译中报 “g: internal compiler error: Killed” 怎么办这个报错十有八九是内存不足。PX4 编译时会启动大量并行编译任务虚拟机的内存分配不够时GCC 进程直接被系统杀掉。排查方法free -h如果看到 swap 脏数据已满说明内存吃紧。解决方式有三种给虚拟机分配更多内存最少建议 8GB16GB 更好。扩大 swap 文件大小临时救急。降低编译并行度。在make命令后加-j2让系统只用 2 个并发任务比如make px4_sitl gazebo-classic -j2我在 4GB 内存的旧机器上就是用-j2硬生生把 PX4 编译完的过程慢但至少不会报错退出。5.3 Gazebo 窗口启动后黑屏或白屏飞机没有出现在画面里这种情况多半是 Gazebo 模型库没有下载完全。第一次启动时 Gazebo 会自动从远端拉取模型网络不好时模型下载失败画面就空了。解决办法是手动下载模型库放到~/.gazebo/models目录然后再重启 Gazebo。如果是 Microsoft 的材质库卡住可以在终端设置环境变量跳过export GAZEBO_MODEL_DATABASE_URI不过这个方法会失去一些模型贴图只做应急用。最稳妥的还是把网络状态搞定之后完整下载模型库。5.4 运行 make 提示 “PX4-Autopilot is not a git repository” 或 “submodule 未找到”这个报错说明 clone 时没有递归拉取子模块或者子模块目录是空的。执行cd PX4-Autopilot git submodule update --init --recursive如果中途有子模块报错可能是网络中断多执行几次直到全部成功。判断子模块是否完整的方法查看src/modules/mavlink目录里是否有mavlink文件夹和mavlink模块文件为空说明子模块缺失。5.5 端口被占用导致地面站连不上仿真QGC 连接不上时先用终端看 PX4 是否正常输出了INFO [commander] Ready for takeoff之类的日志再确认 UDP 端口。如果 Windows 上装了多个地面站程序或者仿真实例残留14550 端口可能被占用。处理方式关闭所有仿真进程和地面站重新启动 SITL以一整套干净的状态重新连接。实在不行可以把 PX4 的仿真 UDP 端口改掉在~/.bashrc中导出export PX4_HOME_LAT31.23 export PX4_HOME_LON121.47 export PX4_HOME_ALT0不过改端口这事儿建议放到后面进阶阶段再玩入门还是尽量用默认配置。5.6 常见问题速查表现象可能原因解决方法sudo apt install gazebo报找不到包osrf 软件源未添加按上文添加 osrf stable 源再更新git clone 卡住或速度极慢网络原因换镜像源、调整 http.postBuffer、shallow clone编译时 OOM Killed内存/swap 不足加内存、扩 swap、降低 -j 并行度Gazebo 启动黑屏模型库下载失败手动放置模型库或设置 MODEL_DATABASE_URI 为空找不到python命令python3 未设置别名安装 python-is-python3pxh 中输入起飞指令没反应仿真未完全就绪或机架未选择等待日志输出 complete或输入param set MAV_TYPE 2切换机型6. 仿真环境验证完成后的下一步规划写到这里PX4 的 Ubuntu 24.04 仿真环境就算搭起来了。我个人实际跑下来的体会是编译一次源码成功不代表你熟悉了整个开发流程你最好在 Gazebo 中多尝试起飞、降落、航线飞行、切换飞行模式甚至故意把电池电压设置低一些看看低电量保护动作把这些仿真操作玩熟之后再考虑接真实飞控板的事。接下来可以往几个方向走在 PX4 shell 中练习指挥官命令理解飞行模式切换逻辑。用 QGC 搭建一条简单航线做全流程自动飞行测试。安装 ROS 2 与 PX4 的桥接接口把视觉识别或路径规划算法接进来。再往后如果想上岸跑真机建议从 Pixhawk 6X 这类主流飞控板入手先用 QGC 刷固件、校准传感器、解锁测试一步一个脚印来。整个飞控入门路上环境搭建不过是第一道小坎迈过去之后你会发现真正有意思的是飞机在天上稳稳飞起来的那一刻。