3. 开发环境搭建:搭建PX4固件编译环境,配置VS Code或CLion用于代码调试
好,咱们进入实操环节。这一章我带你把开发环境搭起来。说实话,环境配置这件事,看着简单,但坑不少。我见过太多人卡在这一步,一卡就是半天。所以咱们一步步来,把每个细节都讲透。
3.1 整体思路:先搞清楚我们要搭什么
在动手之前,先理清思路。我们要搭建的环境,说白了就三块:
- 编译环境:能把PX4源码编译成固件,烧到飞控板上去
- 调试环境:能在代码里打断点、看变量、单步执行
- 仿真环境:能在电脑上跑PX4,配合Gazebo或jMAVSim做软件在环(SITL)测试
这三块是递进关系。编译环境是基础,调试环境帮你找bug,仿真环境让你不用真机也能测逻辑。我个人习惯,先把编译环境搞定,再配调试工具,最后搞仿真。这样出了问题好排查。
核心要点:PX4的编译环境主要依赖Ubuntu系统(推荐20.04或22.04 LTS)。Windows用户建议装WSL2或者直接上双系统。别在Windows原生环境下折腾,我试过,坑太多。
3.2 编译环境搭建:Ubuntu下的标准流程
我以Ubuntu 22.04为例。如果你用其他版本,流程大同小异,但依赖包的版本号可能不一样。
3.2.1 安装基础依赖
打开终端,先更新包列表:
sudo apt update
sudo apt upgrade -y
然后安装PX4官方推荐的依赖包。这里我直接给命令,你复制粘贴就行:
sudo apt install -y \
git \
cmake \
ninja-build \
build-essential \
python3-pip \
python3-venv \
python3-dev \
pkg-config \
libxml2-dev \
libxslt1-dev \
libssl-dev \
libffi-dev \
libncurses5-dev \
libgstreamer-plugins-base1.0-dev \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libav \
gstreamer1.0-tools \
gstreamer1.0-x \
gstreamer1.0-alsa \
gstreamer1.0-gl \
gstreamer1.0-gtk3 \
gstreamer1.0-qt5 \
gstreamer1.0-pulseaudio \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-good1.0-dev \
libgstreamer-plugins-bad1.0-dev \
libgstreamer-plugins-ugly1.0-dev \
libgstreamer-gl1.0-0 \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-good1.0-0 \
libgstreamer-plugins-bad1.0-0 \
libgstreamer-plugins-ugly1.0-0 \
libgstreamer1.0-0 \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-good1.0-dev \
libgstreamer-plugins-bad1.0-dev \
libgstreamer-plugins-ugly1.0-dev \
libgstreamer-gl1.0-0 \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-good1.0-0 \
libgstreamer-plugins-bad1.0-0 \
libgstreamer-plugins-ugly1.0-0
嗯,这里要注意。上面这个列表看着长,但大部分是GStreamer相关的。为什么装这么多?因为PX4的摄像头和视频流功能依赖它。如果你不做视觉相关的开发,可以少装一些。但我建议全装上,省得后面缺东西再补。
3.2.2 安装ARM交叉编译工具链
如果你要编译飞控板(比如Pixhawk系列)的固件,需要ARM交叉编译器:
sudo apt install -y gcc-arm-none-eabi gdb-multiarch
验证一下安装是否成功:
arm-none-eabi-gcc --version
如果输出了版本号,说明装好了。我记得有一次帮同事配环境,他装完死活不认命令,后来发现是PATH没刷新。重启终端就好了。
3.2.3 安装Python依赖
PX4的构建系统用到了Python脚本。建议用虚拟环境隔离:
python3 -m venv px4_venv
source px4_venv/bin/activate
pip install --upgrade pip
pip install pyulog numpy pandas matplotlib
这里我多说一句。用虚拟环境是个好习惯,不会污染系统Python。我早期做项目时图省事,直接pip install全局装,结果某次升级把系统Python搞崩了,重装了系统。从那以后,我每个项目都建虚拟环境。
3.2.4 克隆PX4源码
找个你喜欢的目录,克隆PX4的官方仓库:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
--recursive参数很重要,它会同时拉取所有子模块。PX4依赖很多第三方库,比如uORB、mavlink等。如果忘了加这个参数,后面编译时会报一堆找不到头文件的错误。
如果你网络不好,可以考虑用国内镜像:
git clone https://gitee.com/px4/PX4-Autopilot.git --recursive
3.2.5 首次编译测试
进入源码目录,执行:
make px4_fmu-v5_default
这个命令会编译Pixhawk 4(FMUv5)的固件。第一次编译会比较慢,因为要下载和编译所有依赖。我的机器大概要15-20分钟。你可以去泡杯咖啡。
如果编译成功,最后会输出类似这样的信息:
[100%] Built target px4_fmu-v5_default
-- Build finished: 0 errors, 0 warnings
小技巧:如果你只想测试编译环境是否正常,可以用SITL目标来编译,它不需要交叉编译器:
make px4_sitl_default
这个编译更快,而且可以在本机运行仿真。
3.3 配置VS Code用于代码调试
我个人更推荐VS Code,因为轻量、插件生态好。CLion也不错,但收费且重。咱们先讲VS Code。
3.3.1 安装VS Code和必要插件
从官网下载安装VS Code。然后安装这些插件:
- C/C++(微软官方):提供代码补全、跳转、调试支持
- CMake Tools:让VS Code能识别CMake项目
- Python:如果你要调试Python脚本
- GitLens:看代码历史很方便
- Hex Editor:偶尔需要看二进制文件
3.3.2 配置编译任务
在VS Code中打开PX4源码目录。按Ctrl+Shift+P,输入Tasks: Configure Task,选择Create tasks.json file from template,然后选Others。
把tasks.json改成这样:
{
"version": "2.0.0",
"tasks": [
{
"label": "build px4_sitl",
"type": "shell",
"command": "make px4_sitl_default",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
"label": "build px4_fmu-v5",
"type": "shell",
"command": "make px4_fmu-v5_default",
"group": "build",
"problemMatcher": []
},
{
"label": "clean",
"type": "shell",
"command": "make clean",
"group": "build",
"problemMatcher": []
}
]
}
这样你就可以按Ctrl+Shift+B直接编译了。我习惯把最常用的编译任务设为默认,省得每次选。
3.3.3 配置调试器
调试SITL仿真时,我们需要配置launch.json。点击左侧的「运行和调试」图标,然后点击「创建launch.json文件」,选择C++ (GDB/LLDB)。
把内容改成:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug PX4 SITL",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/px4_sitl_default/bin/px4",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build px4_sitl"
}
]
}
这里有个关键点:preLaunchTask指定了在调试前先编译。这样你改完代码,按F5就直接编译+启动调试,一气呵成。
注意:调试SITL时,需要先启动Gazebo或jMAVSim仿真环境。你可以在另一个终端运行make px4_sitl_default gazebo来启动。或者,你也可以在launch.json的args里加上仿真参数,但那样配置会更复杂。我一般分开启动,调试时更灵活。
3.4 配置CLion用于代码调试
如果你用CLion,配置会简单一些,因为它原生支持CMake。但要注意,CLion对大型项目的索引有时会卡。
3.4.1 导入项目
打开CLion,选择File -> Open,选中PX4源码目录。CLion会自动识别CMakeLists.txt,并开始索引。
第一次索引会比较慢,大概5-10分钟。你可以去干点别的。
3.4.2 配置编译配置
点击右上角的Add Configuration,选择CMake Application。然后:
- Target:选择
px4(SITL目标) - Executable:会自动填充为
build/px4_sitl_default/bin/px4 - CMake Options:填
-DCMAKE_BUILD_TYPE=Debug - Build options:填
-- -j4(用4核编译,根据你的CPU核心数调整)
然后点OK保存。
3.4.3 开始调试
设置好断点,点击右上角的「Debug」按钮(小虫子图标)。CLion会自动编译并启动调试。
我个人觉得CLion的调试界面比VS Code更直观,尤其是变量监视和内存查看。但VS Code胜在轻量和免费。看你自己喜好。
3.5 环境搭建的常见坑与避坑指南
这部分是我最想说的。环境搭建的坑,我踩过不少,分享给你:
- 编译报错:找不到头文件——多半是子模块没拉全。运行
git submodule update --init --recursive试试。 - 编译报错:Python模块缺失——检查虚拟环境是否激活了。我经常忘了
source px4_venv/bin/activate。 - 调试时断点不生效——检查编译时是否加了
-DCMAKE_BUILD_TYPE=Debug。Release模式下优化会打乱代码行号。 - VS Code无法启动调试——检查
miDebuggerPath是否正确。Ubuntu 22.04的gdb路径是/usr/bin/gdb。 - CLion索引卡死——在
File -> Settings -> Build, Execution, Deployment -> CMake里,把CMake options加上-DCMAKE_EXPORT_COMPILE_COMMANDS=ON,可以加快索引。
我曾经遇到过一个问题:在Ubuntu 20.04上编译PX4 1.13版本,总是报GCC版本不兼容。折腾了两天,最后发现是系统默认的GCC版本太高(9.3),而PX4 1.13需要GCC 8.x。解决办法是用update-alternatives切换GCC版本。从那以后,我每次搭环境都会先查一下PX4官方文档里推荐的GCC版本。
3.6 本章知识体系总览
下面这张图帮你梳理了本章的核心内容。你可以把它当作一个检查清单,看看自己有没有遗漏什么。
这张图把本章内容分成了三大块。编译环境是基础,调试环境是工具,仿真环境是验证手段。三者缺一不可。
3.7 验证环境是否搭建成功
最后,给你一个简单的验证清单。每完成一项,打个勾:
| 序号 | 验证项 | 验证方法 | 预期结果 |
|---|---|---|---|
| 1 | 基础依赖安装 | gcc --version |
输出GCC版本号 |
| 2 | ARM交叉编译器 | arm-none-eabi-gcc --version |
输出ARM GCC版本号 |
| 3 | Python虚拟环境 | pip list |
显示已安装的Python包 |
| 4 | PX4源码克隆 | ls PX4-Autopilot/ |
看到src、boards等目录 |
| 5 | SITL编译 | make px4_sitl_default |
编译成功,无错误 |
| 6 | VS Code调试配置 | 按F5启动调试 | 程序启动,断点生效 |
| 7 | CLion调试配置 | 点击Debug按钮 | 程序启动,断点生效 |
全部打勾,恭喜你,环境搭建完成!你可以开始写代码了。
嗯,这一章内容不少,但都是实打实的操作。别怕麻烦,环境搭好了,后面写代码、调bug都会很顺畅。如果你在搭建过程中遇到问题,先看看官方文档,或者去PX4的讨论区搜一下。大部分坑都有人踩过。
公众号:蓝海资料掘金营,微信deep3321