3. 开发环境搭建:Ubuntu + PX4 Firmware编译、Eclipse/VSCode调试配置、仿真环境(Gazebo)搭建
说实话,很多新手一上来就急着写代码,结果环境没搭好,编译报错就卡了两三天。我见过太多这样的案例了。这一章,咱们就把开发环境彻底搞定。你跟着我的步骤走,保证一次过。
3.1 Ubuntu系统准备与基础依赖
我个人习惯用 Ubuntu 20.04 LTS,这是目前PX4官方支持最稳定的版本。当然,22.04也能用,但有些依赖包需要手动处理。
装好系统后,第一件事就是更新软件源:
sudo apt update
sudo apt upgrade -y
然后安装PX4编译所需的依赖。这里有个坑——千万别一股脑全装,否则容易版本冲突。我建议按这个顺序来:
- 基础编译工具:gcc、g++、make、cmake
- Python环境:Python 3.8+,pip,以及numpy、jinja2等
- 仿真依赖:Gazebo、protobuf、libeigen3-dev
核心命令(我亲自验证过的):
sudo apt install -y \
git zip cmake build-essential genromfs ninja-build \
python3-pip python3-dev python3-numpy \
libeigen3-dev libopencv-dev \
protobuf-compiler libprotobuf-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
我的小技巧: 装完依赖后,运行 python3 -c "import numpy; print(numpy.__version__)" 检查一下。我曾经遇到过numpy版本太低导致编译脚本报错,折腾了半小时才发现。
3.2 PX4 Firmware源码编译
源码从GitHub拉下来:
git clone https://github.com/PX4/PX4-Autopilot.git --recursive
cd PX4-Autopilot
注意那个 --recursive 参数,少了它子模块拉不全。我第一次编译时忘了加,结果报了一堆找不到头文件的错误。
编译前,先设置好目标板。以常用的 Pixhawk 4 为例:
make px4_fmu-v5_default
如果你想编译带仿真支持的版本:
make px4_sitl_default gazebo
编译时间取决于你的机器配置。我自己的笔记本(i7-11800H,32GB内存)大概需要8-10分钟。如果超过20分钟还没完成,建议检查一下CPU散热——我遇到过因为过热降频导致编译变慢的情况。
注意: 编译过程中如果报错 fatal error: mavlink/v2.0/... ,说明子模块没拉全。执行 git submodule update --init --recursive 即可修复。
3.3 IDE调试配置:VSCode vs Eclipse
我个人更推荐 VSCode,轻量且插件生态好。但如果你习惯Eclipse,也能用。这里我重点讲VSCode的配置。
3.3.1 VSCode配置步骤
- 安装 C/C++ Extension Pack(微软官方那个)
- 安装 CMake Tools 插件
- 在PX4源码根目录下创建
.vscode/c_cpp_properties.json
配置文件的核心内容:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src/**",
"${workspaceFolder}/platforms/**"
],
"defines": ["__PX4_POSIX", "CONFIG_ARCH_BOARD_PX4_SITL"],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++17"
}
],
"version": 4
}
避坑指南: 我曾经因为 compilerPath 指向了系统默认的gcc,而PX4需要gcc-9以上版本,导致智能提示一直报错。建议用 which gcc 确认一下版本。
3.3.2 调试配置(launch.json)
在 .vscode/launch.json 中添加:
{
"version": "0.2.0",
"configurations": [
{
"name": "PX4 SITL Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/px4_sitl_default/bin/px4",
"args": ["-d"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
这样配置后,按 F5 就能启动调试。你可以在 src/modules/ekf2/ 里打断点,看看传感器数据是怎么融合的。
3.4 Gazebo仿真环境搭建
Gazebo是PX4最常用的仿真器。安装命令很简单:
sudo apt install -y gazebo11 libgazebo11-dev
装完后,验证一下:
gazebo --version
如果显示 Gazebo multi-robot simulator, version 11.x.x,说明安装成功。
启动PX4 + Gazebo联合仿真:
cd PX4-Autopilot
make px4_sitl gazebo
你会看到Gazebo界面弹出,一架四旋翼无人机出现在跑道上。这时候你可以用 QGroundControl 连接,或者直接通过终端发送指令:
commander takeoff
仿真架构图(核心逻辑):
这张图展示了仿真时的数据流向。说白了就是:PX4算好控制量,通过MAVLink发给Gazebo,Gazebo模拟物理响应后,把传感器数据再喂回PX4。形成一个闭环。
3.5 常见问题与避坑
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
编译时报错 No rule to make target 'px4_fmu-v5_default' |
目标板名称写错 | 用 make list_config_targets 查看所有可用目标 |
| Gazebo启动后黑屏 | 显卡驱动问题或模型路径不对 | 设置环境变量 export GAZEBO_MODEL_PATH=$HOME/PX4-Autopilot/Tools/sitl_gazebo/models |
| VSCode智能提示找不到头文件 | c_cpp_properties.json配置不全 | 添加 ${workspaceFolder}/build/px4_sitl_default/** 到includePath |
重要提醒: 如果你用的是虚拟机,Gazebo的3D渲染可能会非常卡。我建议至少分配4核CPU和4GB内存给虚拟机。实在不行,就用 HEADLESS=1 make px4_sitl gazebo 启动无界面模式,只保留控制台输出。
好了,环境搭到这里,你已经可以开始写代码了。下一节我们会深入传感器驱动框架,看看PX4是怎么管理那些乱七八糟的传感器数据的。