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编译所需的依赖。这里有个坑——千万别一股脑全装,否则容易版本冲突。我建议按这个顺序来:

  1. 基础编译工具:gcc、g++、make、cmake
  2. Python环境:Python 3.8+,pip,以及numpy、jinja2等
  3. 仿真依赖: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配置步骤

  1. 安装 C/C++ Extension Pack(微软官方那个)
  2. 安装 CMake Tools 插件
  3. 在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 SITL 姿态控制 传感器融合 MAVLink 通信协议 心跳/数据流 Gazebo 物理引擎 传感器模拟 控制指令 电机PWM 传感器数据(IMU/GPS/磁力计) QGroundControl 遥测/指令 PX4 + Gazebo 仿真数据流

这张图展示了仿真时的数据流向。说白了就是: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是怎么管理那些乱七八糟的传感器数据的。


专注资料整理